@cerbur/clutch-dsh-worktree 0.1.12 → 0.1.13

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 (230) hide show
  1. package/README.md +290 -433
  2. package/README.zh.md +244 -348
  3. package/assets/screenshots/screenshots-dashboard.png +0 -0
  4. package/assets/screenshots/screenshots-git-reviewer.png +0 -0
  5. package/lib/client/WorktreeSurface.d.ts.map +1 -1
  6. package/lib/client/WorktreeSurface.js +139 -17
  7. package/lib/client/WorktreeSurface.js.map +1 -1
  8. package/lib/client/context/WorktreeHeroContext.d.ts +4 -3
  9. package/lib/client/context/WorktreeHeroContext.d.ts.map +1 -1
  10. package/lib/client/context/WorktreeHeroContext.js +29 -11
  11. package/lib/client/context/WorktreeHeroContext.js.map +1 -1
  12. package/lib/client/dashboard/WorktreeDashboard.d.ts +9 -2
  13. package/lib/client/dashboard/WorktreeDashboard.d.ts.map +1 -1
  14. package/lib/client/dashboard/WorktreeDashboard.js +165 -14
  15. package/lib/client/dashboard/WorktreeDashboard.js.map +1 -1
  16. package/lib/client/dashboard/dashboard-navigation.d.ts +35 -0
  17. package/lib/client/dashboard/dashboard-navigation.d.ts.map +1 -0
  18. package/lib/client/dashboard/dashboard-navigation.js +48 -0
  19. package/lib/client/dashboard/dashboard-navigation.js.map +1 -0
  20. package/lib/client/dashboard/dashboard-overlay.d.ts +7 -2
  21. package/lib/client/dashboard/dashboard-overlay.d.ts.map +1 -1
  22. package/lib/client/dashboard/dashboard-overlay.js +81 -16
  23. package/lib/client/dashboard/dashboard-overlay.js.map +1 -1
  24. package/lib/client/dashboard/dashboard-selection.d.ts +2 -1
  25. package/lib/client/dashboard/dashboard-selection.d.ts.map +1 -1
  26. package/lib/client/dashboard/dashboard-selection.js +1 -1
  27. package/lib/client/dashboard/dashboard-selection.js.map +1 -1
  28. package/lib/client/dashboard/git/GitChangedFiles.d.ts +11 -0
  29. package/lib/client/dashboard/git/GitChangedFiles.d.ts.map +1 -0
  30. package/lib/client/dashboard/git/GitChangedFiles.js +101 -0
  31. package/lib/client/dashboard/git/GitChangedFiles.js.map +1 -0
  32. package/lib/client/dashboard/git/GitCommitList.d.ts +15 -0
  33. package/lib/client/dashboard/git/GitCommitList.d.ts.map +1 -0
  34. package/lib/client/dashboard/git/GitCommitList.js +55 -0
  35. package/lib/client/dashboard/git/GitCommitList.js.map +1 -0
  36. package/lib/client/dashboard/git/GitDiffView.d.ts +10 -0
  37. package/lib/client/dashboard/git/GitDiffView.d.ts.map +1 -0
  38. package/lib/client/dashboard/git/GitDiffView.js +65 -0
  39. package/lib/client/dashboard/git/GitDiffView.js.map +1 -0
  40. package/lib/client/dashboard/git/GitFileTypeIcon.d.ts +8 -0
  41. package/lib/client/dashboard/git/GitFileTypeIcon.d.ts.map +1 -0
  42. package/lib/client/dashboard/git/GitFileTypeIcon.js +24 -0
  43. package/lib/client/dashboard/git/GitFileTypeIcon.js.map +1 -0
  44. package/lib/client/dashboard/git/GitLineStats.d.ts +10 -0
  45. package/lib/client/dashboard/git/GitLineStats.d.ts.map +1 -0
  46. package/lib/client/dashboard/git/GitLineStats.js +9 -0
  47. package/lib/client/dashboard/git/GitLineStats.js.map +1 -0
  48. package/lib/client/dashboard/git/WorktreeGitOverview.d.ts +31 -0
  49. package/lib/client/dashboard/git/WorktreeGitOverview.d.ts.map +1 -0
  50. package/lib/client/dashboard/git/WorktreeGitOverview.js +89 -0
  51. package/lib/client/dashboard/git/WorktreeGitOverview.js.map +1 -0
  52. package/lib/client/dashboard/git/WorktreeGitPanel.d.ts +16 -0
  53. package/lib/client/dashboard/git/WorktreeGitPanel.d.ts.map +1 -0
  54. package/lib/client/dashboard/git/WorktreeGitPanel.js +126 -0
  55. package/lib/client/dashboard/git/WorktreeGitPanel.js.map +1 -0
  56. package/lib/client/dashboard/git/file-address.d.ts +2 -0
  57. package/lib/client/dashboard/git/file-address.d.ts.map +1 -0
  58. package/lib/client/dashboard/git/file-address.js +16 -0
  59. package/lib/client/dashboard/git/file-address.js.map +1 -0
  60. package/lib/client/dashboard/git/git-column-split.d.ts +34 -0
  61. package/lib/client/dashboard/git/git-column-split.d.ts.map +1 -0
  62. package/lib/client/dashboard/git/git-column-split.js +41 -0
  63. package/lib/client/dashboard/git/git-column-split.js.map +1 -0
  64. package/lib/client/dashboard/git/git-diff-parser.d.ts +24 -0
  65. package/lib/client/dashboard/git/git-diff-parser.d.ts.map +1 -0
  66. package/lib/client/dashboard/git/git-diff-parser.js +56 -0
  67. package/lib/client/dashboard/git/git-diff-parser.js.map +1 -0
  68. package/lib/client/dashboard/git/git-facts.d.ts +18 -0
  69. package/lib/client/dashboard/git/git-facts.d.ts.map +1 -0
  70. package/lib/client/dashboard/git/git-facts.js +31 -0
  71. package/lib/client/dashboard/git/git-facts.js.map +1 -0
  72. package/lib/client/dashboard/git/git-file-tree.d.ts +16 -0
  73. package/lib/client/dashboard/git/git-file-tree.d.ts.map +1 -0
  74. package/lib/client/dashboard/git/git-file-tree.js +52 -0
  75. package/lib/client/dashboard/git/git-file-tree.js.map +1 -0
  76. package/lib/client/dashboard/git/git-state-cache.d.ts +49 -0
  77. package/lib/client/dashboard/git/git-state-cache.d.ts.map +1 -0
  78. package/lib/client/dashboard/git/git-state-cache.js +80 -0
  79. package/lib/client/dashboard/git/git-state-cache.js.map +1 -0
  80. package/lib/client/dashboard/git/useGitPaneSplit.d.ts +33 -0
  81. package/lib/client/dashboard/git/useGitPaneSplit.d.ts.map +1 -0
  82. package/lib/client/dashboard/git/useGitPaneSplit.js +119 -0
  83. package/lib/client/dashboard/git/useGitPaneSplit.js.map +1 -0
  84. package/lib/client/dashboard/git/useWorktreeGitState.d.ts +60 -0
  85. package/lib/client/dashboard/git/useWorktreeGitState.d.ts.map +1 -0
  86. package/lib/client/dashboard/git/useWorktreeGitState.js +654 -0
  87. package/lib/client/dashboard/git/useWorktreeGitState.js.map +1 -0
  88. package/lib/client/entry.d.ts.map +1 -1
  89. package/lib/client/entry.js +28 -0
  90. package/lib/client/entry.js.map +1 -1
  91. package/lib/client/locales.d.ts +158 -0
  92. package/lib/client/locales.d.ts.map +1 -1
  93. package/lib/client/locales.js +166 -8
  94. package/lib/client/locales.js.map +1 -1
  95. package/lib/client/session/session-view.d.ts +10 -0
  96. package/lib/client/session/session-view.d.ts.map +1 -1
  97. package/lib/client/session/session-view.js +57 -0
  98. package/lib/client/session/session-view.js.map +1 -1
  99. package/lib/client/session/worktree-session-order.d.ts +2 -5
  100. package/lib/client/session/worktree-session-order.d.ts.map +1 -1
  101. package/lib/client/session/worktree-session-order.js +35 -10
  102. package/lib/client/session/worktree-session-order.js.map +1 -1
  103. package/lib/client/session/worktree-session-position.d.ts +2 -1
  104. package/lib/client/session/worktree-session-position.d.ts.map +1 -1
  105. package/lib/client/session/worktree-session-position.js +10 -3
  106. package/lib/client/session/worktree-session-position.js.map +1 -1
  107. package/lib/client/surface/actions/useDragActions.d.ts +33 -2
  108. package/lib/client/surface/actions/useDragActions.d.ts.map +1 -1
  109. package/lib/client/surface/actions/useDragActions.js +66 -18
  110. package/lib/client/surface/actions/useDragActions.js.map +1 -1
  111. package/lib/client/surface/components/ActiveWorktree.js +2 -2
  112. package/lib/client/surface/components/ActiveWorktree.js.map +1 -1
  113. package/lib/client/surface/components/ArchivedWorktree.js +2 -2
  114. package/lib/client/surface/components/ArchivedWorktree.js.map +1 -1
  115. package/lib/client/surface/components/ArchivedWorktrees.js +2 -2
  116. package/lib/client/surface/components/ArchivedWorktrees.js.map +1 -1
  117. package/lib/client/surface/components/SurfaceContent.d.ts +1 -1
  118. package/lib/client/surface/components/SurfaceContent.d.ts.map +1 -1
  119. package/lib/client/surface/components/SurfaceContent.js +1 -1
  120. package/lib/client/surface/components/SurfaceContent.js.map +1 -1
  121. package/lib/client/surface/components/SurfaceHeader.d.ts +1 -1
  122. package/lib/client/surface/components/SurfaceHeader.d.ts.map +1 -1
  123. package/lib/client/surface/components/SurfaceHeader.js +12 -3
  124. package/lib/client/surface/components/SurfaceHeader.js.map +1 -1
  125. package/lib/client/surface/components/WorkspaceTree.js +4 -4
  126. package/lib/client/surface/components/WorkspaceTree.js.map +1 -1
  127. package/lib/client/surface/components/rows.d.ts +2 -2
  128. package/lib/client/surface/components/rows.d.ts.map +1 -1
  129. package/lib/client/surface/components/rows.js +14 -9
  130. package/lib/client/surface/components/rows.js.map +1 -1
  131. package/lib/client/surface/selectors.d.ts +10 -0
  132. package/lib/client/surface/selectors.d.ts.map +1 -1
  133. package/lib/client/surface/selectors.js +14 -0
  134. package/lib/client/surface/selectors.js.map +1 -1
  135. package/lib/client/surface/state/useSessionExpansion.d.ts +2 -1
  136. package/lib/client/surface/state/useSessionExpansion.d.ts.map +1 -1
  137. package/lib/client/surface/state/useSessionExpansion.js +26 -13
  138. package/lib/client/surface/state/useSessionExpansion.js.map +1 -1
  139. package/lib/client/surface/state/useSessionOrdering.d.ts +1 -1
  140. package/lib/client/surface/state/useSessionOrdering.d.ts.map +1 -1
  141. package/lib/client/surface/state/useSessionOrdering.js +23 -8
  142. package/lib/client/surface/state/useSessionOrdering.js.map +1 -1
  143. package/lib/client/surface/types.d.ts +15 -3
  144. package/lib/client/surface/types.d.ts.map +1 -1
  145. package/lib/client/view/worktree-expand-state.d.ts +1 -1
  146. package/lib/client/view/worktree-expand-state.d.ts.map +1 -1
  147. package/lib/client/view/worktree-expand-state.js +8 -1
  148. package/lib/client/view/worktree-expand-state.js.map +1 -1
  149. package/lib/client/worktree-connection.d.ts +4 -0
  150. package/lib/client/worktree-connection.d.ts.map +1 -1
  151. package/lib/client/worktree-connection.js +10 -0
  152. package/lib/client/worktree-connection.js.map +1 -1
  153. package/lib/client.js +3454 -307
  154. package/lib/client.js.map +1 -1
  155. package/lib/contract/index.contract.js +8 -0
  156. package/lib/contract/index.contract.js.map +1 -1
  157. package/lib/contract/index.d.ts +145 -1
  158. package/lib/contract/index.d.ts.map +1 -1
  159. package/lib/contract/index.js +18 -0
  160. package/lib/contract/index.js.map +1 -1
  161. package/lib/host/remote.d.ts.map +1 -1
  162. package/lib/host/remote.js +4 -0
  163. package/lib/host/remote.js.map +1 -1
  164. package/lib/host/service.d.ts +14 -1
  165. package/lib/host/service.d.ts.map +1 -1
  166. package/lib/host/service.js +24 -0
  167. package/lib/host/service.js.map +1 -1
  168. package/lib/index.d.ts +4 -4
  169. package/lib/index.d.ts.map +1 -1
  170. package/lib/index.js +3 -3
  171. package/lib/index.js.map +1 -1
  172. package/lib/manage/manager-git-history.d.ts +17 -0
  173. package/lib/manage/manager-git-history.d.ts.map +1 -0
  174. package/lib/manage/manager-git-history.js +717 -0
  175. package/lib/manage/manager-git-history.js.map +1 -0
  176. package/lib/manage/manager-worktrees.d.ts.map +1 -1
  177. package/lib/manage/manager-worktrees.js +24 -0
  178. package/lib/manage/manager-worktrees.js.map +1 -1
  179. package/lib/manage/manager.d.ts +14 -1
  180. package/lib/manage/manager.d.ts.map +1 -1
  181. package/lib/manage/manager.js +13 -0
  182. package/lib/manage/manager.js.map +1 -1
  183. package/lib/provider/git/adapter.d.ts +54 -1
  184. package/lib/provider/git/adapter.d.ts.map +1 -1
  185. package/lib/provider/git/adapter.js +820 -1
  186. package/lib/provider/git/adapter.js.map +1 -1
  187. package/lib/provider/index.d.ts +2 -2
  188. package/lib/provider/index.d.ts.map +1 -1
  189. package/lib/provider/index.js +1 -1
  190. package/lib/provider/index.js.map +1 -1
  191. package/lib/provider/mutation-token.d.ts +1 -1
  192. package/lib/provider/mutation-token.d.ts.map +1 -1
  193. package/lib/provider/mutation-token.js +1 -0
  194. package/lib/provider/mutation-token.js.map +1 -1
  195. package/lib/provider/sidecar/repository.d.ts +1 -1
  196. package/lib/provider/sidecar/repository.d.ts.map +1 -1
  197. package/lib/provider/sidecar/repository.js +3 -2
  198. package/lib/provider/sidecar/repository.js.map +1 -1
  199. package/lib/provider/sidecar/sidecar-schema.d.ts +16 -3
  200. package/lib/provider/sidecar/sidecar-schema.d.ts.map +1 -1
  201. package/lib/provider/sidecar/sidecar-schema.js +105 -23
  202. package/lib/provider/sidecar/sidecar-schema.js.map +1 -1
  203. package/lib/provider/transaction/operations/create.d.ts.map +1 -1
  204. package/lib/provider/transaction/operations/create.js +21 -6
  205. package/lib/provider/transaction/operations/create.js.map +1 -1
  206. package/lib/provider/transaction/recovery/failure-recovery.d.ts.map +1 -1
  207. package/lib/provider/transaction/recovery/failure-recovery.js +11 -4
  208. package/lib/provider/transaction/recovery/failure-recovery.js.map +1 -1
  209. package/lib/provider/transaction/recovery/recover.d.ts.map +1 -1
  210. package/lib/provider/transaction/recovery/recover.js +9 -11
  211. package/lib/provider/transaction/recovery/recover.js.map +1 -1
  212. package/lib/provider/transaction/support/inspection.d.ts +0 -2
  213. package/lib/provider/transaction/support/inspection.d.ts.map +1 -1
  214. package/lib/provider/transaction/support/inspection.js +0 -4
  215. package/lib/provider/transaction/support/inspection.js.map +1 -1
  216. package/lib/provider/transaction/support/journal.d.ts.map +1 -1
  217. package/lib/provider/transaction/support/journal.js +2 -0
  218. package/lib/provider/transaction/support/journal.js.map +1 -1
  219. package/lib/provider/transaction/types.d.ts +1 -0
  220. package/lib/provider/transaction/types.d.ts.map +1 -1
  221. package/lib/provider/types.d.ts +53 -5
  222. package/lib/provider/types.d.ts.map +1 -1
  223. package/lib/provider/types.js +1 -1
  224. package/lib/provider/types.js.map +1 -1
  225. package/lib/typert.host.js +295 -34
  226. package/lib/typert.remote-client.d.ts +9 -1
  227. package/lib/typert.remote-client.d.ts.map +1 -1
  228. package/lib/typert.remote-client.js +295 -34
  229. package/package.json +3 -1
  230. package/assets/screenshots/screenshots-dashboard.webp +0 -0
@@ -0,0 +1,9 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import styles from './worktree-git.css';
3
+ /** Compact, color-coded Git line counts shared by overview and changed-file rows. */
4
+ export function GitLineStats({ additions, deletions, ariaLabel, className, }) {
5
+ if (additions === undefined && deletions === undefined)
6
+ return null;
7
+ return (_jsxs("span", { className: [styles.gitLineStats, className].filter(Boolean).join(' '), "aria-label": ariaLabel, "data-dashboard-git-line-stats": true, children: [additions !== undefined && (_jsxs("span", { className: styles.gitLineAdded, "data-dashboard-git-additions": true, children: ["+", additions] })), deletions !== undefined && (_jsxs("span", { className: styles.gitLineRemoved, "data-dashboard-git-deletions": true, children: ["-", deletions] }))] }));
8
+ }
9
+ //# sourceMappingURL=GitLineStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GitLineStats.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/GitLineStats.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AASxC,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,EAC3B,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,GACS;IAClB,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO,CACL,gBACE,SAAS,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,gBACzD,SAAS,oDAGpB,SAAS,KAAK,SAAS,IAAI,CAC1B,gBAAM,SAAS,EAAE,MAAM,CAAC,YAAY,wDAChC,SAAS,IACN,CACR,EACA,SAAS,KAAK,SAAS,IAAI,CAC1B,gBAAM,SAAS,EAAE,MAAM,CAAC,cAAc,wDAClC,SAAS,IACN,CACR,IACI,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { WorktreeGitChangedFile, WorktreeGitHistory, WorktreeManager } from '../../../contract/index.js';
2
+ import type { WorktreeTranslate } from '../../surface/types.js';
3
+ export interface WorktreeGitOverviewInput {
4
+ readonly manager?: Pick<WorktreeManager, 'listWorktreeCommits' | 'listWorktreeCommitFiles'>;
5
+ readonly workspaceId: string;
6
+ readonly worktreeId: string;
7
+ readonly defaultBaselineBranch?: string;
8
+ readonly currentBranch?: string;
9
+ /** The record captured an acquisition commit the Manager can use implicitly. */
10
+ readonly capturedBaseline?: boolean;
11
+ }
12
+ export type WorktreeGitOverviewState = {
13
+ readonly status: 'unavailable';
14
+ } | {
15
+ readonly status: 'loading';
16
+ } | {
17
+ readonly status: 'ready';
18
+ readonly history: WorktreeGitHistory;
19
+ readonly committedFiles: readonly WorktreeGitChangedFile[];
20
+ readonly workingTreeFiles: readonly WorktreeGitChangedFile[];
21
+ } | {
22
+ readonly status: 'error';
23
+ };
24
+ /** Read the compact Git projections needed by the Overview status facts. */
25
+ export declare function useWorktreeGitOverview(input: WorktreeGitOverviewInput): WorktreeGitOverviewState;
26
+ export declare function WorktreeGitOverviewValue({ state, metric, t, }: {
27
+ readonly state: WorktreeGitOverviewState;
28
+ readonly metric: 'aheadBehind' | 'committed' | 'workingTree';
29
+ readonly t: WorktreeTranslate;
30
+ }): import("react").JSX.Element;
31
+ //# sourceMappingURL=WorktreeGitOverview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeGitOverview.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/WorktreeGitOverview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,sBAAsB,EACtB,kBAAkB,EAClB,eAAe,EAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAKhE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,qBAAqB,GAAG,yBAAyB,CAAC,CAAC;IAC5F,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,wBAAwB,GAChC;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE,GAClC;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC9B;IACE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC9D,GACD;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAMjC,4EAA4E;AAC5E,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,wBAAwB,GAC9B,wBAAwB,CAmD1B;AAED,wBAAgB,wBAAwB,CAAC,EACvC,KAAK,EACL,MAAM,EACN,CAAC,GACF,EAAE;IACD,QAAQ,CAAC,KAAK,EAAE,wBAAwB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC;IAC7D,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC;CAC/B,+BAmCA"}
@@ -0,0 +1,89 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { WORKTREE_GIT_WORKING_TREE } from '../../../contract/index.js';
4
+ import { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';
5
+ import { GitLineStats } from './GitLineStats.js';
6
+ import styles from '../dashboard.css';
7
+ function isWorkingTreeCommit(commit) {
8
+ return commit.kind === 'working-tree' || commit.sha === WORKTREE_GIT_WORKING_TREE;
9
+ }
10
+ /** Read the compact Git projections needed by the Overview status facts. */
11
+ export function useWorktreeGitOverview(input) {
12
+ const baselineBranch = normalizeBaselineBranch(input.defaultBaselineBranch, input.currentBranch);
13
+ // A captured acquisition commit keeps the Overview readable without a selected
14
+ // branch; Main and genuinely baseline-less records still make no Git request.
15
+ const readable = input.capturedBaseline === true || baselineBranch !== undefined;
16
+ const [state, setState] = useState({ status: 'unavailable' });
17
+ useEffect(() => {
18
+ if (input.manager === undefined || isMainWorktreeId(input.worktreeId) || !readable) {
19
+ setState({ status: 'unavailable' });
20
+ return;
21
+ }
22
+ const manager = input.manager;
23
+ let active = true;
24
+ setState({ status: 'loading' });
25
+ void manager.listWorktreeCommits({
26
+ workspaceId: input.workspaceId,
27
+ worktreeId: input.worktreeId,
28
+ baseBranch: baselineBranch,
29
+ })
30
+ .then(async (history) => {
31
+ const workingTree = history.commits.find(isWorkingTreeCommit);
32
+ const committedFilesPromise = history.unavailableReason === undefined
33
+ ? manager.listWorktreeCommitFiles({
34
+ workspaceId: input.workspaceId,
35
+ worktreeId: input.worktreeId,
36
+ baseBranch: baselineBranch,
37
+ selection: { kind: 'summary', includeWorkingTree: false },
38
+ }).then((result) => result.files)
39
+ : Promise.resolve([]);
40
+ const workingTreeFilesPromise = workingTree === undefined
41
+ ? Promise.resolve([])
42
+ : manager.listWorktreeCommitFiles({
43
+ workspaceId: input.workspaceId,
44
+ worktreeId: input.worktreeId,
45
+ baseBranch: baselineBranch,
46
+ commit: workingTree.sha,
47
+ }).then((result) => result.files);
48
+ const [committedFiles, workingTreeFiles] = await Promise.all([
49
+ committedFilesPromise,
50
+ workingTreeFilesPromise,
51
+ ]);
52
+ if (active)
53
+ setState({ status: 'ready', history, committedFiles, workingTreeFiles });
54
+ })
55
+ .catch(() => {
56
+ if (active)
57
+ setState({ status: 'error' });
58
+ });
59
+ return () => {
60
+ active = false;
61
+ };
62
+ }, [baselineBranch, readable, input.manager, input.workspaceId, input.worktreeId]);
63
+ return state;
64
+ }
65
+ export function WorktreeGitOverviewValue({ state, metric, t, }) {
66
+ if (state.status !== 'ready') {
67
+ return _jsx("span", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });
68
+ }
69
+ if (metric === 'aheadBehind') {
70
+ const { ahead, behind } = state.history;
71
+ if (ahead === undefined || behind === undefined) {
72
+ return _jsx("span", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });
73
+ }
74
+ return (_jsx(GitLineStats, { additions: ahead, deletions: behind, ariaLabel: t('dashboard.git.aheadBehindStats', { ahead, behind }) }));
75
+ }
76
+ if (state.history.unavailableReason !== undefined) {
77
+ return _jsx("span", { className: styles.dashboardHistorical, children: t('dashboard.notConnected') });
78
+ }
79
+ const files = metric === 'committed' ? state.committedFiles : state.workingTreeFiles;
80
+ const totals = sumLineTotals(files);
81
+ if (totals === undefined) {
82
+ return _jsx("span", { className: styles.dashboardHistorical, children: t('dashboard.unknown') });
83
+ }
84
+ return (_jsx(GitLineStats, { additions: totals.additions, deletions: totals.deletions, ariaLabel: t('dashboard.git.lineStats', {
85
+ additions: totals.additions,
86
+ deletions: totals.deletions,
87
+ }) }));
88
+ }
89
+ //# sourceMappingURL=WorktreeGitOverview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeGitOverview.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/WorktreeGitOverview.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { WorktreeManager } from '../../../contract/index.js';
2
+ import type { WorktreeTranslate } from '../../surface/types.js';
3
+ export interface WorktreeGitPanelProps {
4
+ readonly manager?: Pick<WorktreeManager, 'listBranches' | 'listWorktreeCommits' | 'listWorktreeCommitFiles' | 'getWorktreeCommitFileDiff'>;
5
+ readonly workspaceId: string;
6
+ readonly worktreeId: string;
7
+ readonly defaultBaselineBranch?: string;
8
+ readonly currentBranch?: string;
9
+ /** The record captured an acquisition commit the Manager can use implicitly. */
10
+ readonly capturedBaseline?: boolean;
11
+ readonly onOpenFile?: (path: string) => void;
12
+ readonly t: WorktreeTranslate;
13
+ }
14
+ /** Git & Changes tab: read-only, on-demand history -> target files -> one-file diff. */
15
+ export declare function WorktreeGitPanel({ manager, workspaceId, worktreeId, defaultBaselineBranch, currentBranch, capturedBaseline, onOpenFile, t, }: WorktreeGitPanelProps): import("react").JSX.Element;
16
+ //# sourceMappingURL=WorktreeGitPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeGitPanel.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/WorktreeGitPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,eAAe,EAChB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAkBhE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CACrB,eAAe,EACf,cAAc,GAAG,qBAAqB,GAAG,yBAAyB,GAAG,2BAA2B,CACjG,CAAC;IACF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,gFAAgF;IAChF,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAgED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,CAAC,GACF,EAAE,qBAAqB,+BAkVvB"}
@@ -0,0 +1,126 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { isMainWorktreeId, normalizeBaselineBranch, sumLineTotals } from './git-facts.js';
4
+ import { GitChangedFiles } from './GitChangedFiles.js';
5
+ import { GitLineStats } from './GitLineStats.js';
6
+ import { GitCommitList } from './GitCommitList.js';
7
+ import { GitDiffView } from './GitDiffView.js';
8
+ import { GIT_SPLIT_DEFAULT_COLUMN_PERCENT, GIT_SPLIT_DEFAULT_ROW_PERCENT, GIT_SPLIT_MIN_COLUMN_PX, GIT_SPLIT_MIN_ROW_PX, } from './git-column-split.js';
9
+ import { useGitPaneSplit } from './useGitPaneSplit.js';
10
+ import { useWorktreeGitState } from './useWorktreeGitState.js';
11
+ import styles from './worktree-git.css';
12
+ function shortCommit(commit) {
13
+ return commit === undefined ? '—' : commit.slice(0, 7);
14
+ }
15
+ function selectedCommit(history, sha) {
16
+ return history?.commits.find((commit) => commit.sha === sha);
17
+ }
18
+ function commitCountLabel(history, t) {
19
+ const committedCount = history.commits.filter((commit) => commit.kind !== 'working-tree').length;
20
+ return history.commits.some((commit) => commit.kind === 'working-tree')
21
+ ? t('dashboard.git.commitCountWithWorkingTree', { commits: committedCount })
22
+ : t('dashboard.git.commitCount', { n: committedCount });
23
+ }
24
+ function commitLabel(commit, t) {
25
+ return commit.kind === 'working-tree'
26
+ ? t('dashboard.git.workingTree')
27
+ : shortCommit(commit.sha);
28
+ }
29
+ function readyFiles(value) {
30
+ return value?.files ?? [];
31
+ }
32
+ /** Empty-state copy per honest unavailable reason; one definition for both blocks. */
33
+ const UNAVAILABLE_COPY = {
34
+ main: {
35
+ title: 'dashboard.git.mainUnavailableTitle',
36
+ description: 'dashboard.git.mainUnavailableDescription',
37
+ },
38
+ 'baseline-unselected': {
39
+ title: 'dashboard.git.selectBaselineTitle',
40
+ description: 'dashboard.git.selectBaselineDescription',
41
+ },
42
+ 'baseline-unknown': {
43
+ title: 'dashboard.git.baselineUnknownTitle',
44
+ description: 'dashboard.git.baselineUnknownDescription',
45
+ },
46
+ };
47
+ function UnavailableNotice({ reason, t, }) {
48
+ return (_jsxs("div", { className: styles.gitUnavailable, "data-dashboard-git-unavailable": true, children: [_jsx("strong", { children: t(UNAVAILABLE_COPY[reason].title) }), _jsx("p", { children: t(UNAVAILABLE_COPY[reason].description) })] }));
49
+ }
50
+ /** Git & Changes tab: read-only, on-demand history -> target files -> one-file diff. */
51
+ export function WorktreeGitPanel({ manager, workspaceId, worktreeId, defaultBaselineBranch, currentBranch, capturedBaseline, onOpenFile, t, }) {
52
+ const isMain = isMainWorktreeId(worktreeId);
53
+ const selectedDefaultBaseline = normalizeBaselineBranch(defaultBaselineBranch, currentBranch);
54
+ const state = useWorktreeGitState({
55
+ manager,
56
+ workspaceId,
57
+ worktreeId,
58
+ defaultBaselineBranch: isMain ? undefined : selectedDefaultBaseline,
59
+ capturedBaseline: isMain ? false : capturedBaseline,
60
+ });
61
+ const gridRef = useRef(null);
62
+ // Both dividers share the grid: one splits rows, one splits columns, in either layout.
63
+ const rows = useGitPaneSplit({
64
+ containerRef: gridRef,
65
+ orientation: 'horizontal',
66
+ property: '--git-rows-top',
67
+ minimum: GIT_SPLIT_MIN_ROW_PX,
68
+ fallback: GIT_SPLIT_DEFAULT_ROW_PERCENT,
69
+ });
70
+ const columns = useGitPaneSplit({
71
+ containerRef: gridRef,
72
+ orientation: 'vertical',
73
+ property: '--git-columns-left',
74
+ minimum: GIT_SPLIT_MIN_COLUMN_PX,
75
+ fallback: GIT_SPLIT_DEFAULT_COLUMN_PERCENT,
76
+ });
77
+ const historyValue = state.history.status === 'ready' ? state.history.value : undefined;
78
+ const commit = selectedCommit(historyValue, state.selectedCommit);
79
+ const files = state.files.status === 'ready' ? readyFiles(state.files.value) : [];
80
+ const diff = state.diff.status === 'ready' ? state.diff.value : undefined;
81
+ const refreshing = state.history.status === 'ready' && state.history.refreshing === true;
82
+ const unavailable = historyValue?.unavailableReason;
83
+ const branchOptions = (state.branches.status === 'ready' ? state.branches.value : [])
84
+ .filter((branch) => branch.name !== currentBranch);
85
+ const branchError = state.branches.status === 'error'
86
+ ? state.branches.error
87
+ : state.branches.status === 'ready'
88
+ ? state.branches.error
89
+ : undefined;
90
+ const baselineCommit = historyValue?.baseline?.commit;
91
+ const baselineRef = state.baselineBranch ?? historyValue?.baseline?.ref;
92
+ const targetLabel = state.view === 'summary'
93
+ ? t('dashboard.git.baselineSummary')
94
+ : state.selectedCommits.length > 1
95
+ ? t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length })
96
+ : commit === undefined
97
+ ? undefined
98
+ : commitLabel(commit, t);
99
+ const hasTarget = state.view === 'summary' || commit !== undefined;
100
+ const lineTotals = state.files.status === 'ready' && hasTarget ? sumLineTotals(files) : undefined;
101
+ return (_jsxs("section", { className: styles.gitPanel, "data-dashboard-git-panel": true, children: [_jsxs("header", { className: styles.gitPanelHeader, children: [_jsxs("div", { className: styles.gitPanelHeading, children: [_jsx("h2", { children: t('dashboard.git.title') }), !isMain && (_jsxs("label", { className: styles.gitBaselineSelector, children: [_jsx("span", { children: t('dashboard.git.baselineSelector') }), _jsxs("select", { value: state.baselineBranch ?? '', "data-dashboard-git-baseline": true, disabled: state.branches.status === 'loading', onChange: (event) => state.selectBaselineBranch(event.currentTarget.value || undefined), children: [_jsx("option", { value: "", children: t('dashboard.git.selectBaseline') }), state.baselineBranch !== undefined && !branchOptions.some((branch) => branch.name === state.baselineBranch) && (_jsx("option", { value: state.baselineBranch, children: state.baselineBranch })), branchOptions.map((branch) => (_jsx("option", { value: branch.name, children: branch.name }, branch.name)))] })] })), baselineCommit !== undefined && (_jsxs("dl", { className: styles.gitBaselineFacts, children: [_jsxs("div", { children: [_jsx("dt", { children: t('dashboard.git.base') }), _jsxs("dd", { children: [baselineRef !== undefined ? (_jsxs(_Fragment, { children: [baselineRef, _jsxs("code", { children: ["@ ", shortCommit(baselineCommit)] })] })) : (_jsx("code", { children: shortCommit(baselineCommit) })), historyValue?.baseline?.source === 'derived' && (_jsx("span", { className: styles.gitDerived, children: t('dashboard.git.derived') }))] })] }), historyValue !== undefined && (_jsxs(_Fragment, { children: [_jsxs("div", { children: [_jsx("dt", { children: t('dashboard.git.head') }), _jsx("dd", { children: _jsx("code", { children: shortCommit(historyValue.headCommit) }) })] }), _jsxs("div", { children: [_jsx("dt", { children: t('dashboard.git.commits') }), _jsx("dd", { children: commitCountLabel(historyValue, t) })] }), historyValue.ahead !== undefined && historyValue.behind !== undefined && (_jsxs("div", { children: [_jsx("dt", { children: t('dashboard.aheadBehind') }), _jsx("dd", { children: _jsx(GitLineStats, { additions: historyValue.ahead, deletions: historyValue.behind, ariaLabel: t('dashboard.git.aheadBehindStats', {
102
+ ahead: historyValue.ahead,
103
+ behind: historyValue.behind,
104
+ }) }) })] }))] }))] }))] }), _jsx("button", { type: "button", className: styles.gitRefresh, "data-dashboard-git-refresh": true, disabled: isMain || refreshing || state.history.status === 'loading', "aria-busy": refreshing || state.history.status === 'loading', onClick: () => void state.refresh(), children: refreshing ? t('dashboard.git.refreshing') : t('dashboard.git.refresh') })] }), branchError !== undefined && (_jsxs("div", { className: styles.gitError, role: "alert", children: [_jsx("p", { children: t('dashboard.git.loadFailed', { reason: errorText(branchError, t) }) }), _jsx("button", { type: "button", onClick: () => void state.loadBranches(), children: t('dashboard.git.retry') })] })), isMain && _jsx(UnavailableNotice, { reason: "main", t: t }), !isMain && unavailable === 'baseline-unselected' && (_jsxs("div", { className: styles.gitBaselinePrompt, "data-dashboard-git-baseline-prompt": true, children: [_jsx("strong", { children: t('dashboard.git.selectBaselineTitle') }), _jsx("p", { children: t('dashboard.git.selectBaselineDescription') })] })), state.history.status === 'loading' && (_jsx("div", { className: styles.gitLoading, role: "status", children: t('dashboard.git.loading') })), state.history.status === 'error' && (_jsxs("div", { className: styles.gitError, role: "alert", children: [_jsx("p", { children: t('dashboard.git.loadFailed', { reason: errorText(state.history.error, t) }) }), _jsx("button", { type: "button", onClick: () => void state.refresh(), children: t('dashboard.git.retry') })] })), state.history.status === 'ready' && state.history.error !== undefined && (_jsxs("div", { className: styles.gitError, role: "alert", children: [_jsx("p", { children: t('dashboard.git.refreshFailed', { reason: errorText(state.history.error, t) }) }), _jsx("button", { type: "button", onClick: () => void state.refresh(), children: t('dashboard.git.retry') })] })), state.history.status === 'ready' && historyValue !== undefined && unavailable !== undefined && (_jsx(UnavailableNotice, { reason: unavailable, t: t })), state.history.status === 'ready' && historyValue !== undefined && unavailable === undefined && (_jsxs("div", { className: styles.gitColumns, ref: gridRef, children: [_jsxs("section", { className: styles.gitColumn, "data-dashboard-git-pane": "commits", "aria-label": t('dashboard.git.commits'), children: [_jsxs("div", { className: styles.gitColumnHeader, children: [_jsx("h3", { children: t('dashboard.git.commits') }), _jsxs("div", { className: styles.gitColumnHeaderControls, children: [historyValue.truncated && _jsx("span", { children: t('dashboard.git.truncatedHistory') }), _jsxs("label", { className: styles.gitCommitMultiSelect, title: t('dashboard.git.multiSelectCommitsDescription'), children: [_jsx("input", { type: "checkbox", role: "switch", "data-dashboard-git-multi-select": true, "aria-describedby": "dashboard-git-commit-selection-hint", checked: state.commitMultiSelect, onChange: (event) => state.setCommitMultiSelect(event.currentTarget.checked) }), _jsx("span", { className: styles.gitCommitMultiSelectTrack, "aria-hidden": "true", children: _jsx("span", { className: styles.gitCommitMultiSelectThumb }) }), _jsx("span", { className: styles.gitCommitMultiSelectLabel, children: t('dashboard.git.multiSelectCommits') })] })] })] }), _jsxs("button", { type: "button", className: styles.gitSummaryButton, "data-dashboard-git-summary": true, "aria-pressed": state.view === 'summary', onClick: state.selectSummary, children: [_jsx("span", { children: t('dashboard.git.baselineSummary') }), _jsx("small", { children: t('dashboard.git.baselineSummaryDescription') })] }), state.view === 'summary' && (_jsxs("label", { className: styles.gitSummaryToggle, "data-dashboard-git-include-working-tree": true, children: [_jsx("input", { type: "checkbox", checked: state.includeWorkingTree, disabled: state.files.status === 'loading', onChange: (event) => state.setIncludeWorkingTree(event.currentTarget.checked) }), _jsxs("span", { children: [_jsx("strong", { children: t('dashboard.git.includeWorkingTree') }), _jsx("small", { children: t('dashboard.git.includeWorkingTreeDescription') })] })] })), _jsx("span", { id: "dashboard-git-commit-selection-hint", className: styles.gitSrOnly, children: t('dashboard.git.commitSelectionHint') }), historyValue.commits.length === 0 && _jsx("div", { className: styles.gitEmpty, children: t('dashboard.git.noCommits') }), _jsx(GitCommitList, { commits: historyValue.commits, selectedCommit: state.selectedCommit, selectedCommits: state.selectedCommits, multiSelect: state.commitMultiSelect, onSelect: state.selectCommit, onToggle: state.toggleCommit, t: t })] }), _jsx(GitSplitter, { split: rows, orientation: "horizontal", axis: "rows", label: t('dashboard.git.resizeRows') }), _jsxs("section", { className: styles.gitColumn, "data-dashboard-git-pane": "changed-files", "aria-label": t('dashboard.git.changedFiles'), "aria-busy": state.files.status === 'loading', children: [_jsxs("div", { className: styles.gitColumnHeader, children: [_jsx("h3", { children: t('dashboard.git.changedFiles') }), _jsxs("div", { className: styles.gitColumnHeaderMeta, children: [targetLabel !== undefined && (state.selectedCommits.length > 1 || state.view === 'summary'
105
+ ? _jsx("span", { children: targetLabel })
106
+ : _jsx("code", { children: targetLabel })), state.files.status === 'ready' && hasTarget && (lineTotals === undefined ? (_jsx("span", { className: styles.gitColumnHeaderUnknown, children: t('dashboard.unknown') })) : (_jsx(GitLineStats, { additions: lineTotals.additions, deletions: lineTotals.deletions, ariaLabel: t('dashboard.git.lineStats', {
107
+ additions: lineTotals.additions,
108
+ deletions: lineTotals.deletions,
109
+ }) })))] })] }), state.commitMultiSelect && state.selectedCommits.length > 0 && state.view === 'commits' && (_jsxs("div", { className: styles.gitSelectionToolbar, children: [_jsx("span", { children: t('dashboard.git.selectedCommitCount', { n: state.selectedCommits.length }) }), _jsx("button", { type: "button", onClick: state.clearCommitSelection, children: t('dashboard.git.clearCommitSelection') })] })), !hasTarget ? (_jsx("div", { className: styles.gitEmpty, children: t('dashboard.git.selectCommit') })) : state.files.status === 'loading' ? (_jsx("div", { className: styles.gitLoading, role: "status", children: state.view === 'summary' ? t('dashboard.git.loadingSummaryFiles') : t('dashboard.git.loadingFiles') })) : state.files.status === 'error' ? (_jsx("div", { className: styles.gitError, role: "alert", children: errorText(state.files.error, t) })) : (_jsxs(_Fragment, { children: [state.files.status === 'ready' && state.files.error !== undefined && (_jsx("div", { className: styles.gitError, role: "alert", children: errorText(state.files.error, t) })), state.files.status === 'ready' && state.files.value.truncated === true && (_jsx("div", { className: styles.gitEmpty, role: "status", "data-dashboard-git-files-truncated": true, children: t('dashboard.git.truncatedFiles') })), files.length === 0 && !(state.files.status === 'ready' && state.files.value.truncated === true) ? (_jsx("div", { className: styles.gitEmpty, children: state.view === 'summary'
110
+ ? state.includeWorkingTree
111
+ ? t('dashboard.git.noLiveBaselineChanges')
112
+ : t('dashboard.git.noBaselineChanges')
113
+ : t('dashboard.git.noFiles') })) : (_jsx(GitChangedFiles, { files: files, selectedPath: state.selectedPath, onSelect: state.selectPath, t: t }))] }))] }), _jsx(GitSplitter, { split: columns, orientation: "vertical", axis: "columns", label: t('dashboard.git.resizeColumns') }), _jsxs("section", { className: styles.gitColumn, "data-dashboard-git-pane": "diff", "aria-label": t('dashboard.git.diff'), "aria-busy": state.diff.status === 'loading', children: [_jsxs("div", { className: styles.gitColumnHeader, children: [_jsx("h3", { children: state.view === 'summary' ? t('dashboard.git.summaryDiff') : t('dashboard.git.diff') }), state.selectedPath !== undefined && _jsx("code", { title: state.selectedPath, children: state.selectedPath })] }), state.diff.status === 'loading' ? (_jsx("div", { className: styles.gitLoading, role: "status", children: state.view === 'summary' ? t('dashboard.git.loadingSummaryDiff') : t('dashboard.git.loadingDiff') })) : state.diff.status === 'error' ? (_jsx("div", { className: styles.gitError, role: "alert", children: errorText(state.diff.error, t) })) : (_jsx(GitDiffView, { diff: diff, onOpenFile: onOpenFile, t: t }))] })] }))] }));
114
+ }
115
+ /**
116
+ * Draggable divider that resizes one axis of the Git grid. The wide layout puts
117
+ * the row divider inside the left column and the column divider beside it; the
118
+ * narrow layout keeps both, between the top panes and above the diff.
119
+ */
120
+ function GitSplitter({ split, orientation, axis, label }) {
121
+ return (_jsx("div", { className: styles.gitColumnSplitter, "data-dashboard-git-splitter": axis, "data-dashboard-git-splitting": split.dragging ? 'true' : undefined, role: "separator", "aria-orientation": orientation, "aria-label": label, "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(split.percent), title: label, tabIndex: 0, ref: split.splitterRef, onPointerDown: split.startDrag, onPointerMove: split.drag, onPointerUp: split.endDrag, onPointerCancel: split.endDrag, onLostPointerCapture: split.endDrag, onDoubleClick: split.reset, onKeyDown: split.onKeyDown }));
122
+ }
123
+ function errorText(error, t) {
124
+ return error.message || t('dashboard.unknownError');
125
+ }
126
+ //# sourceMappingURL=WorktreeGitPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorktreeGitPanel.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/WorktreeGitPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function buildSessionFileAddress(sessionId: string, path: string): string;
2
+ //# sourceMappingURL=file-address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-address.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/file-address.ts"],"names":[],"mappings":"AAaA,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG/E"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Canonical DSH session file address constructor.
3
+ * Equivalent to `sessionFileAddress` from `@deepseek-ai/dsh-util-workspace-path`.
4
+ * Address grammar: `dsh-resource://file/session/<sessionId>/<encodedPath>`
5
+ */
6
+ function encodeSegment(segment) {
7
+ return encodeURIComponent(segment).replace(/%3A/gi, ':');
8
+ }
9
+ function encodePath(path) {
10
+ return path.split('/').map(encodeSegment).join('/');
11
+ }
12
+ export function buildSessionFileAddress(sessionId, path) {
13
+ const normalized = path.replace(/\\/g, '/').replace(/^(?:\.\/)+/, '');
14
+ return `dsh-resource://file/session/${encodeSegment(sessionId)}/${encodePath(normalized)}`;
15
+ }
16
+ //# sourceMappingURL=file-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-address.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/file-address.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,SAAiB,EAAE,IAAY;IACrE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IACtE,OAAO,+BAA+B,aAAa,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;AAC7F,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Geometry for the two draggable Git dividers. Each divider splits one grid axis
3
+ * of the panel into a leading pane, the divider itself, and a trailing pane.
4
+ * These helpers stay free of DOM and React APIs so the drag math is testable.
5
+ */
6
+ /** Share of the stacked axis, in percent, given to the commits pane by default. */
7
+ export declare const GIT_SPLIT_DEFAULT_ROW_PERCENT = 45;
8
+ /** Share of the side-by-side axis, in percent, given to the left column by default. */
9
+ export declare const GIT_SPLIT_DEFAULT_COLUMN_PERCENT = 38;
10
+ /** Smallest rendered height, in CSS pixels, kept usable for a stacked pane. */
11
+ export declare const GIT_SPLIT_MIN_ROW_PX = 140;
12
+ /** Smallest rendered width, in CSS pixels, kept usable for a side-by-side pane. */
13
+ export declare const GIT_SPLIT_MIN_COLUMN_PX = 240;
14
+ /** Percentage points moved by one arrow-key press (Shift multiplies the step). */
15
+ export declare const GIT_SPLIT_KEY_STEP = 4;
16
+ /** Rendered box of the grid one divider splits, measured once per interaction. */
17
+ export interface GitSplitGeometry {
18
+ /** Viewport-relative leading edge: the top for row splits, the left for column splits. */
19
+ readonly start: number;
20
+ /** Rendered container size along the split axis, in CSS pixels. */
21
+ readonly size: number;
22
+ /** Rendered divider thickness, in CSS pixels. */
23
+ readonly divider: number;
24
+ /** Smallest pane size along the split axis, in CSS pixels. */
25
+ readonly minimum: number;
26
+ }
27
+ /**
28
+ * Clamp a leading-pane share to the range that keeps both panes usable, or
29
+ * undefined when the measured geometry cannot express a usable split at all.
30
+ */
31
+ export declare function clampGitSplitPercent(percent: number, geometry: GitSplitGeometry): number | undefined;
32
+ /** Resolve the share that keeps the divider centered under a pointer. */
33
+ export declare function gitSplitPercentFromPointer(pointer: number, geometry: GitSplitGeometry): number | undefined;
34
+ //# sourceMappingURL=git-column-split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-column-split.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-column-split.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mFAAmF;AACnF,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,uFAAuF;AACvF,eAAO,MAAM,gCAAgC,KAAK,CAAC;AAEnD,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,mFAAmF;AACnF,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAE3C,kFAAkF;AAClF,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,GACzB,MAAM,GAAG,SAAS,CAQpB;AAED,yEAAyE;AACzE,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,gBAAgB,GACzB,MAAM,GAAG,SAAS,CAIpB"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Geometry for the two draggable Git dividers. Each divider splits one grid axis
3
+ * of the panel into a leading pane, the divider itself, and a trailing pane.
4
+ * These helpers stay free of DOM and React APIs so the drag math is testable.
5
+ */
6
+ /** Share of the stacked axis, in percent, given to the commits pane by default. */
7
+ export const GIT_SPLIT_DEFAULT_ROW_PERCENT = 45;
8
+ /** Share of the side-by-side axis, in percent, given to the left column by default. */
9
+ export const GIT_SPLIT_DEFAULT_COLUMN_PERCENT = 38;
10
+ /** Smallest rendered height, in CSS pixels, kept usable for a stacked pane. */
11
+ export const GIT_SPLIT_MIN_ROW_PX = 140;
12
+ /** Smallest rendered width, in CSS pixels, kept usable for a side-by-side pane. */
13
+ export const GIT_SPLIT_MIN_COLUMN_PX = 240;
14
+ /** Percentage points moved by one arrow-key press (Shift multiplies the step). */
15
+ export const GIT_SPLIT_KEY_STEP = 4;
16
+ function roundPercent(percent) {
17
+ return Math.round(percent * 100) / 100;
18
+ }
19
+ /**
20
+ * Clamp a leading-pane share to the range that keeps both panes usable, or
21
+ * undefined when the measured geometry cannot express a usable split at all.
22
+ */
23
+ export function clampGitSplitPercent(percent, geometry) {
24
+ if (!Number.isFinite(percent))
25
+ return undefined;
26
+ const { size, divider, minimum } = geometry;
27
+ if (!Number.isFinite(size) || size <= 0)
28
+ return undefined;
29
+ const lower = (minimum / size) * 100;
30
+ const upper = 100 - ((minimum + Math.max(divider, 0)) / size) * 100;
31
+ if (upper <= lower)
32
+ return undefined;
33
+ return roundPercent(Math.min(Math.max(percent, lower), upper));
34
+ }
35
+ /** Resolve the share that keeps the divider centered under a pointer. */
36
+ export function gitSplitPercentFromPointer(pointer, geometry) {
37
+ const halfDivider = Math.max(geometry.divider, 0) / 2;
38
+ const leadingPx = pointer - geometry.start - halfDivider;
39
+ return clampGitSplitPercent((leadingPx / geometry.size) * 100, geometry);
40
+ }
41
+ //# sourceMappingURL=git-column-split.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-column-split.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-column-split.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mFAAmF;AACnF,MAAM,CAAC,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAEhD,uFAAuF;AACvF,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAEnD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC,mFAAmF;AACnF,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,kFAAkF;AAClF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAcpC,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,QAA0B;IAE1B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAChD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACrC,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IACpE,IAAI,KAAK,IAAI,KAAK;QAAE,OAAO,SAAS,CAAC;IACrC,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,0BAA0B,CACxC,OAAe,EACf,QAA0B;IAE1B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC,KAAK,GAAG,WAAW,CAAC;IACzD,OAAO,oBAAoB,CAAC,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface DiffHunk {
2
+ readonly oldStart: number;
3
+ readonly oldLines: number;
4
+ readonly newStart: number;
5
+ readonly newLines: number;
6
+ readonly lines: readonly DiffLine[];
7
+ }
8
+ export type DiffLine = {
9
+ readonly type: 'context';
10
+ readonly oldLine: number;
11
+ readonly newLine: number;
12
+ readonly text: string;
13
+ } | {
14
+ readonly type: 'add';
15
+ readonly newLine: number;
16
+ readonly text: string;
17
+ } | {
18
+ readonly type: 'delete';
19
+ readonly oldLine: number;
20
+ readonly text: string;
21
+ };
22
+ /** Parse only the small unified-diff subset needed by the V1 plain-text renderer. */
23
+ export declare function parseUnifiedDiff(patch: string): readonly DiffHunk[];
24
+ //# sourceMappingURL=git-diff-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff-parser.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-diff-parser.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;CACrC;AAED,MAAM,MAAM,QAAQ,GAChB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,CAAC;AAIN,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,QAAQ,EAAE,CA0DnE"}
@@ -0,0 +1,56 @@
1
+ const HUNK_HEADER = /^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/u;
2
+ /** Parse only the small unified-diff subset needed by the V1 plain-text renderer. */
3
+ export function parseUnifiedDiff(patch) {
4
+ const hunks = [];
5
+ let current;
6
+ let oldLine = 0;
7
+ let newLine = 0;
8
+ const flush = () => {
9
+ if (current === undefined)
10
+ return;
11
+ hunks.push({
12
+ oldStart: current.oldStart,
13
+ oldLines: current.oldLines,
14
+ newStart: current.newStart,
15
+ newLines: current.newLines,
16
+ lines: current.lines,
17
+ });
18
+ current = undefined;
19
+ };
20
+ for (const rawLine of patch.split(/\r?\n/u)) {
21
+ const header = HUNK_HEADER.exec(rawLine);
22
+ if (header !== null) {
23
+ flush();
24
+ oldLine = Number(header[1]);
25
+ newLine = Number(header[3]);
26
+ current = {
27
+ oldStart: oldLine,
28
+ oldLines: Number(header[2] ?? '1'),
29
+ newStart: newLine,
30
+ newLines: Number(header[4] ?? '1'),
31
+ lines: [],
32
+ };
33
+ continue;
34
+ }
35
+ if (current === undefined || rawLine === '\')
36
+ continue;
37
+ const marker = rawLine[0];
38
+ const text = rawLine.slice(1);
39
+ if (marker === ' ') {
40
+ current.lines.push({ type: 'context', oldLine, newLine, text });
41
+ oldLine += 1;
42
+ newLine += 1;
43
+ }
44
+ else if (marker === '+') {
45
+ current.lines.push({ type: 'add', newLine, text });
46
+ newLine += 1;
47
+ }
48
+ else if (marker === '-') {
49
+ current.lines.push({ type: 'delete', oldLine, text });
50
+ oldLine += 1;
51
+ }
52
+ }
53
+ flush();
54
+ return hunks;
55
+ }
56
+ //# sourceMappingURL=git-diff-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff-parser.js","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-diff-parser.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,GAAG,8CAA8C,CAAC;AAEnE,qFAAqF;AACrF,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,IAAI,OAQS,CAAC;IACd,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO;QAClC,KAAK,CAAC,IAAI,CAAC;YACT,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QACH,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,KAAK,EAAE,CAAC;YACR,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,GAAG;gBACR,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;gBAClC,QAAQ,EAAE,OAAO;gBACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;gBAClC,KAAK,EAAE,EAAE;aACV,CAAC;YACF,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,8BAA8B;YAAE,SAAS;QAClF,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,IAAI,CAAC,CAAC;YACb,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;aAAM,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,KAAK,EAAE,CAAC;IACR,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { WorktreeGitChangedFile } from '../../../contract/index.js';
2
+ /**
3
+ * Shared Git-tab facts. These helpers stay free of React and DOM APIs so the
4
+ * Dashboard's branch, Main, and line-total rules have one definition.
5
+ */
6
+ /** Main (Local) Worktree ids never carry a Worktree-relative Git comparison. */
7
+ export declare function isMainWorktreeId(worktreeId: string): boolean;
8
+ /** Trim a branch value and drop empty strings. */
9
+ export declare function normalizeBranch(branch: string | undefined): string | undefined;
10
+ /** A baseline equal to the current Worktree branch is not a usable default. */
11
+ export declare function normalizeBaselineBranch(value: string | undefined, currentBranch: string | undefined): string | undefined;
12
+ export interface GitLineTotals {
13
+ readonly additions: number;
14
+ readonly deletions: number;
15
+ }
16
+ /** Sum additions/deletions, or undefined when any file count is unknown. */
17
+ export declare function sumLineTotals(files: readonly WorktreeGitChangedFile[]): GitLineTotals | undefined;
18
+ //# sourceMappingURL=git-facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-facts.d.ts","sourceRoot":"","sources":["../../../../src/client/dashboard/git/git-facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEzE;;;GAGG;AAEH,gFAAgF;AAChF,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,+EAA+E;AAC/E,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,MAAM,GAAG,SAAS,CAGpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,sBAAsB,EAAE,GAAG,aAAa,GAAG,SAAS,CASjG"}