xtralab 0.15.0 → 0.15.1

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 (228) hide show
  1. package/README.md +10 -0
  2. package/lib/about/icons.d.ts +0 -5
  3. package/lib/about/icons.js +0 -5
  4. package/lib/about/index.d.ts +4 -8
  5. package/lib/about/index.js +6 -17
  6. package/lib/agentSessions.d.ts +9 -29
  7. package/lib/agentSessions.js +2 -7
  8. package/lib/askAgent/editorSelection.d.ts +20 -26
  9. package/lib/askAgent/editorSelection.js +11 -26
  10. package/lib/askAgent/icons.d.ts +2 -3
  11. package/lib/askAgent/icons.js +2 -3
  12. package/lib/askAgent/index.d.ts +4 -26
  13. package/lib/askAgent/index.js +54 -158
  14. package/lib/askAgent/popup.d.ts +12 -16
  15. package/lib/askAgent/popup.js +18 -37
  16. package/lib/askAgent/prompt.d.ts +3 -5
  17. package/lib/askAgent/prompt.js +6 -19
  18. package/lib/askAgent/queue.d.ts +11 -21
  19. package/lib/askAgent/queue.js +9 -19
  20. package/lib/askAgent/queuePanel.d.ts +13 -18
  21. package/lib/askAgent/queuePanel.js +15 -37
  22. package/lib/askAgent/targetPicker.d.ts +2 -9
  23. package/lib/askAgent/targetPicker.js +6 -11
  24. package/lib/askAgent/tokens.d.ts +32 -46
  25. package/lib/askAgent/tokens.js +4 -6
  26. package/lib/commandBar/index.d.ts +4 -13
  27. package/lib/commandBar/index.js +21 -39
  28. package/lib/customPanel/index.js +15 -0
  29. package/lib/editorBreadcrumbs/index.d.ts +3 -6
  30. package/lib/editorBreadcrumbs/index.js +10 -6
  31. package/lib/editorBreadcrumbs/widget.d.ts +17 -4
  32. package/lib/editorBreadcrumbs/widget.js +11 -17
  33. package/lib/editorIndent/index.d.ts +4 -12
  34. package/lib/editorIndent/index.js +8 -23
  35. package/lib/fileBrowser/commands.d.ts +28 -19
  36. package/lib/fileBrowser/commands.js +39 -98
  37. package/lib/fileBrowser/contents.d.ts +3 -0
  38. package/lib/fileBrowser/dragAndDrop.d.ts +17 -4
  39. package/lib/fileBrowser/dragAndDrop.js +2 -7
  40. package/lib/fileBrowser/fileBrowser.d.ts +19 -9
  41. package/lib/fileBrowser/fileBrowser.js +68 -216
  42. package/lib/fileBrowser/gitStatus.d.ts +4 -9
  43. package/lib/fileBrowser/gitStatus.js +7 -17
  44. package/lib/fileBrowser/gitignore.d.ts +4 -17
  45. package/lib/fileBrowser/gitignore.js +4 -25
  46. package/lib/fileBrowser/icons.d.ts +7 -17
  47. package/lib/fileBrowser/icons.js +25 -80
  48. package/lib/fileBrowser/index.js +2 -4
  49. package/lib/fileBrowser/widget.d.ts +126 -48
  50. package/lib/fileBrowser/widget.js +89 -4
  51. package/lib/fileTypeIcons/index.js +0 -10
  52. package/lib/git/api.d.ts +5 -13
  53. package/lib/git/api.js +10 -36
  54. package/lib/git/askRequest.d.ts +4 -8
  55. package/lib/git/askRequest.js +6 -20
  56. package/lib/git/commands.d.ts +40 -5
  57. package/lib/git/commands.js +16 -10
  58. package/lib/git/diffModel.js +4 -0
  59. package/lib/git/diffSurface.d.ts +41 -55
  60. package/lib/git/diffSurface.js +42 -117
  61. package/lib/git/diffWidget.d.ts +81 -2
  62. package/lib/git/diffWidget.js +62 -12
  63. package/lib/git/imageDiff.d.ts +5 -6
  64. package/lib/git/imageDiff.js +18 -48
  65. package/lib/git/index.d.ts +0 -3
  66. package/lib/git/index.js +3 -8
  67. package/lib/git/notebookDiff.d.ts +110 -33
  68. package/lib/git/notebookDiff.js +52 -195
  69. package/lib/git/tokens.d.ts +73 -31
  70. package/lib/git/tokens.js +2 -3
  71. package/lib/highlight/index.d.ts +4 -10
  72. package/lib/highlight/index.js +10 -41
  73. package/lib/index.d.ts +0 -9
  74. package/lib/index.js +0 -9
  75. package/lib/launcher/agents.d.ts +55 -51
  76. package/lib/launcher/agents.js +15 -57
  77. package/lib/launcher/availability.d.ts +3 -9
  78. package/lib/launcher/availability.js +3 -9
  79. package/lib/launcher/commands.d.ts +7 -32
  80. package/lib/launcher/commands.js +14 -45
  81. package/lib/launcher/dashboard.d.ts +19 -24
  82. package/lib/launcher/dashboard.js +21 -67
  83. package/lib/launcher/editorRegistry.d.ts +10 -22
  84. package/lib/launcher/editorRegistry.js +14 -18
  85. package/lib/launcher/editors.d.ts +39 -45
  86. package/lib/launcher/editors.js +8 -34
  87. package/lib/launcher/icons.d.ts +0 -12
  88. package/lib/launcher/icons.js +5 -39
  89. package/lib/launcher/index.js +12 -55
  90. package/lib/launcher/invocation.d.ts +4 -10
  91. package/lib/launcher/invocation.js +7 -22
  92. package/lib/launcher/registry.d.ts +9 -7
  93. package/lib/launcher/registry.js +9 -7
  94. package/lib/launcher/tokens.d.ts +10 -22
  95. package/lib/launcher/tokens.js +5 -8
  96. package/lib/menuBar/index.d.ts +3 -10
  97. package/lib/menuBar/index.js +11 -28
  98. package/lib/menus/index.d.ts +3 -9
  99. package/lib/menus/index.js +14 -30
  100. package/lib/omnibox/files.d.ts +2 -4
  101. package/lib/omnibox/files.js +5 -11
  102. package/lib/omnibox/index.d.ts +4 -14
  103. package/lib/omnibox/index.js +9 -27
  104. package/lib/omnibox/model.d.ts +38 -10
  105. package/lib/omnibox/model.js +15 -33
  106. package/lib/omnibox/recents.d.ts +15 -17
  107. package/lib/omnibox/recents.js +12 -17
  108. package/lib/omnibox/tokens.d.ts +5 -10
  109. package/lib/omnibox/tokens.js +2 -6
  110. package/lib/omnibox/widget.d.ts +11 -7
  111. package/lib/omnibox/widget.js +8 -16
  112. package/lib/searchReplace/index.d.ts +4 -20
  113. package/lib/searchReplace/index.js +7 -27
  114. package/lib/showOutput/index.d.ts +3 -12
  115. package/lib/showOutput/index.js +6 -22
  116. package/lib/sidebar/index.d.ts +4 -7
  117. package/lib/sidebar/index.js +5 -12
  118. package/lib/terminalNotifications/index.d.ts +4 -10
  119. package/lib/terminalNotifications/index.js +6 -20
  120. package/lib/terminals/agentTerminals.d.ts +12 -5
  121. package/lib/terminals/agentTerminals.js +25 -44
  122. package/lib/terminals/detection.d.ts +4 -8
  123. package/lib/terminals/detection.js +4 -8
  124. package/lib/terminals/index.d.ts +0 -35
  125. package/lib/terminals/index.js +12 -101
  126. package/lib/terminals/model.d.ts +64 -139
  127. package/lib/terminals/model.js +80 -220
  128. package/lib/terminals/tokens.d.ts +11 -22
  129. package/lib/terminals/tokens.js +2 -2
  130. package/lib/terminals/widget.d.ts +43 -13
  131. package/lib/terminals/widget.js +33 -18
  132. package/lib/topBar/icons.d.ts +3 -8
  133. package/lib/topBar/icons.js +3 -8
  134. package/lib/topBar/index.d.ts +4 -11
  135. package/lib/topBar/index.js +10 -38
  136. package/lib/walkthrough/index.d.ts +4 -9
  137. package/lib/walkthrough/index.js +6 -20
  138. package/lib/walkthrough/panel.d.ts +40 -9
  139. package/lib/walkthrough/panel.js +4 -10
  140. package/package.json +2 -2
  141. package/src/about/icons.ts +0 -5
  142. package/src/about/index.tsx +6 -17
  143. package/src/agentSessions.ts +9 -29
  144. package/src/askAgent/editorSelection.ts +22 -29
  145. package/src/askAgent/icons.ts +2 -3
  146. package/src/askAgent/index.ts +54 -158
  147. package/src/askAgent/popup.tsx +23 -45
  148. package/src/askAgent/prompt.ts +6 -19
  149. package/src/askAgent/queue.ts +13 -24
  150. package/src/askAgent/queuePanel.tsx +21 -46
  151. package/src/askAgent/targetPicker.tsx +5 -15
  152. package/src/askAgent/tokens.ts +32 -46
  153. package/src/commandBar/index.ts +24 -39
  154. package/src/customPanel/index.ts +15 -0
  155. package/src/editorBreadcrumbs/index.ts +10 -6
  156. package/src/editorBreadcrumbs/widget.ts +23 -17
  157. package/src/editorIndent/index.ts +17 -23
  158. package/src/fileBrowser/commands.ts +57 -98
  159. package/src/fileBrowser/contents.ts +3 -0
  160. package/src/fileBrowser/dragAndDrop.ts +17 -7
  161. package/src/fileBrowser/fileBrowser.tsx +84 -223
  162. package/src/fileBrowser/gitStatus.ts +7 -17
  163. package/src/fileBrowser/gitignore.ts +4 -25
  164. package/src/fileBrowser/icons.ts +25 -80
  165. package/src/fileBrowser/index.ts +2 -4
  166. package/src/fileBrowser/widget.tsx +149 -50
  167. package/src/fileTypeIcons/index.ts +0 -10
  168. package/src/git/api.ts +10 -36
  169. package/src/git/askRequest.ts +6 -20
  170. package/src/git/commands.ts +70 -10
  171. package/src/git/diffModel.ts +25 -0
  172. package/src/git/diffSurface.tsx +71 -159
  173. package/src/git/diffWidget.tsx +104 -14
  174. package/src/git/imageDiff.tsx +45 -51
  175. package/src/git/index.ts +3 -8
  176. package/src/git/notebookDiff.tsx +211 -238
  177. package/src/git/tokens.ts +73 -31
  178. package/src/highlight/index.ts +10 -41
  179. package/src/index.ts +0 -9
  180. package/src/launcher/agents.ts +64 -95
  181. package/src/launcher/availability.ts +3 -9
  182. package/src/launcher/commands.ts +14 -51
  183. package/src/launcher/dashboard.tsx +49 -88
  184. package/src/launcher/editorRegistry.ts +21 -29
  185. package/src/launcher/editors.ts +39 -58
  186. package/src/launcher/icons.ts +5 -39
  187. package/src/launcher/index.ts +12 -55
  188. package/src/launcher/invocation.ts +7 -22
  189. package/src/launcher/registry.ts +9 -7
  190. package/src/launcher/tokens.ts +10 -22
  191. package/src/menuBar/index.ts +11 -28
  192. package/src/menus/index.ts +14 -30
  193. package/src/omnibox/files.ts +10 -14
  194. package/src/omnibox/index.ts +9 -27
  195. package/src/omnibox/model.ts +50 -38
  196. package/src/omnibox/recents.ts +17 -22
  197. package/src/omnibox/tokens.ts +5 -10
  198. package/src/omnibox/widget.tsx +14 -19
  199. package/src/searchReplace/index.ts +7 -27
  200. package/src/showOutput/index.ts +6 -22
  201. package/src/sidebar/index.ts +20 -12
  202. package/src/terminalNotifications/index.ts +42 -25
  203. package/src/terminals/agentTerminals.ts +25 -49
  204. package/src/terminals/detection.ts +4 -8
  205. package/src/terminals/index.ts +12 -101
  206. package/src/terminals/model.ts +130 -246
  207. package/src/terminals/tokens.ts +11 -22
  208. package/src/terminals/widget.tsx +48 -31
  209. package/src/topBar/icons.ts +3 -8
  210. package/src/topBar/index.ts +21 -44
  211. package/src/walkthrough/index.ts +6 -20
  212. package/src/walkthrough/panel.ts +40 -10
  213. package/style/about.css +2 -7
  214. package/style/askAgent.css +8 -40
  215. package/style/base.css +9 -45
  216. package/style/chrome.css +108 -308
  217. package/style/commandBar.css +4 -20
  218. package/style/customPanel.css +1 -4
  219. package/style/git.css +22 -184
  220. package/style/highlight.css +1 -3
  221. package/style/launcher.css +6 -70
  222. package/style/omnibox.css +2 -14
  223. package/style/showOutput.css +0 -6
  224. package/style/sidebar.css +29 -9
  225. package/style/tabs.css +5 -13
  226. package/style/terminals.css +6 -53
  227. package/style/topBar.css +2 -22
  228. package/style/walkthrough.css +0 -8
@@ -1,19 +1,5 @@
1
- /* Command bar pill in the top bar toolbar (xtralab:command-bar). */
2
-
3
- /*
4
- * The widget is a settings-driven item of JupyterLab's top bar toolbar
5
- * (`#jp-top-bar`, factory "TopBar"), declared in schema/command-bar.json with
6
- * a rank past the toolbar's built-in spacer, so it sits at the trailing end of
7
- * the toolbar next to the right-sidebar toggle button.
8
- *
9
- * The widget's root (`.jp-xtralab-CommandBar`) is a plain wrapper that takes
10
- * the core `.jp-Toolbar > .jp-Toolbar-item` sizing — full toolbar height,
11
- * centered flex — so it needs no rules of its own; the pill button inside
12
- * keeps its own compact height. It is styled with the theme's input-field
13
- * fill so it reads as a search box and tracks each theme's input styling
14
- * across light and dark (a flat layout color is near-black in some dark
15
- * themes).
16
- */
1
+ /* The bare root takes core toolbar-item sizing; the input-field fill reads as
2
+ * a search box (a flat layout color is near-black in some dark themes). */
17
3
  .jp-xtralab-CommandBar-button {
18
4
  display: flex;
19
5
  flex: 0 0 auto;
@@ -56,9 +42,8 @@
56
42
  height: 14px;
57
43
  }
58
44
 
59
- /* The built-in JupyterLab search icon (@jupyterlab/ui-components) paints with a
60
- fixed `jp-icon3` theme gray; override it to currentColor so the magnifier
61
- tracks the pill's text color and brightens with the label on hover. */
45
+ /* Core's search icon paints with a fixed `jp-icon3` gray; currentColor makes
46
+ the magnifier track the pill's text color. */
62
47
  .jp-xtralab-CommandBar-button .jp-icon3[fill] {
63
48
  fill: currentcolor;
64
49
  }
@@ -70,7 +55,6 @@
70
55
  white-space: nowrap;
71
56
  }
72
57
 
73
- /* Keyboard-shortcut hint, pushed to the trailing edge by the growing label. */
74
58
  .jp-xtralab-CommandBar-shortcut {
75
59
  flex: 0 0 auto;
76
60
  margin-left: 6px;
@@ -1,7 +1,4 @@
1
- /*
2
- * All visible content comes from the hosted sections, which carry their own
3
- * styles.
4
- */
1
+ /* All visible content comes from the hosted sections, which carry their own styles. */
5
2
 
6
3
  .jp-xtralab-CustomPanel {
7
4
  min-width: 200px;
package/style/git.css CHANGED
@@ -1,19 +1,8 @@
1
1
  /*
2
- * Styles for xtralab's @pierre/diffs viewer. The same surface is used by
3
- * the launcher dashboard's own diff tab and by the jupyterlab-git diff
4
- * providers, so these rules cover both hosts.
2
+ * @pierre/diffs viewer styles, shared by the launcher dashboard's diff tab
3
+ * and the jupyterlab-git diff providers.
5
4
  */
6
5
 
7
- /*
8
- * Diff viewer (main area). The `MainAreaWidget` holding the React content
9
- * gets sized by JupyterLab's box layout; the inner content div fills it
10
- * and provides vertical scroll. Horizontal scrolling within each code
11
- * block is owned by `@pierre/diffs` via its internal `data-code` rules.
12
- *
13
- * The block also forwards JupyterLab's theme variables onto the
14
- * `--diffs-*-override` properties the library exposes, so the diff
15
- * recolors with the active theme.
16
- */
17
6
  .jp-xtralab-DiffWidget {
18
7
  background-color: var(--jp-layout-color1);
19
8
  color: var(--jp-ui-font-color1);
@@ -23,13 +12,6 @@
23
12
  font-style: italic;
24
13
  }
25
14
 
26
- /*
27
- * Flex-column container: an optional toolbar at the top (notebook view
28
- * mode toggle) plus a body that hosts the scrollable diff and the
29
- * column resize handle. Splitting these responsibilities keeps the
30
- * resize handle pinned to the visible viewport while the diff content
31
- * scrolls underneath, and keeps the toolbar always visible.
32
- */
33
15
  .jp-xtralab-DiffWidget-content {
34
16
  display: flex;
35
17
  flex-direction: column;
@@ -38,9 +20,6 @@
38
20
  background-color: var(--jp-layout-color1);
39
21
  color: var(--jp-ui-font-color1);
40
22
 
41
- /*
42
- * Feed JupyterLab theme colors into @pierre/diffs.
43
- */
44
23
  --diffs-bg-override: var(--jp-layout-color1);
45
24
  --diffs-bg-buffer-override: var(--jp-layout-color1);
46
25
  --diffs-bg-context-override: var(--jp-layout-color1);
@@ -56,12 +35,8 @@
56
35
  --diffs-deletion-color-override: var(--jp-error-color1);
57
36
  }
58
37
 
59
- /*
60
- * Body wrapping the scrollable diff + the column resize handle. Owns
61
- * its own positioning context so the resizer can be absolutely placed
62
- * within the body's bounds (and therefore aligned with the visible
63
- * scroll area, not the toolbar above it).
64
- */
38
+ /* Positioning context for the resizer, aligning it with the scroll area
39
+ rather than the toolbar. */
65
40
  .jp-xtralab-DiffWidget-body {
66
41
  position: relative;
67
42
  flex: 1 1 auto;
@@ -74,12 +49,6 @@
74
49
  overflow: auto;
75
50
  }
76
51
 
77
- /*
78
- * Segmented selectors that live in the diff toolbar: the Notebook/JSON
79
- * view-mode toggle (for `.ipynb` diffs) and the Split/Unified diff-style
80
- * toggle (for textual/code diffs). The host toolbar provides its own
81
- * background and border, so these are just the segmented controls.
82
- */
83
52
  .jp-xtralab-DiffWidget-viewModeToolbarItem,
84
53
  .jp-xtralab-DiffWidget-diffStyleToolbarItem {
85
54
  display: flex;
@@ -87,9 +56,6 @@
87
56
  font-size: var(--jp-ui-font-size0);
88
57
  }
89
58
 
90
- /*
91
- * Breathing room when both toggles appear (notebook diff in JSON view).
92
- */
93
59
  .jp-xtralab-DiffWidget-diffStyleToolbarItem {
94
60
  margin-left: 4px;
95
61
  }
@@ -116,12 +82,6 @@
116
82
  background-color: var(--jp-layout-color2);
117
83
  }
118
84
 
119
- /*
120
- * Active segment: brand-colour fill with the inverse UI font colour — the
121
- * same pair JupyterLab uses to mark selected items (the command palette
122
- * active item, the file browser selection). The inverse font colour adapts
123
- * per theme, so the label stays legible on the brand fill in both themes.
124
- */
125
85
  .jp-xtralab-DiffWidget-segmentedButton[data-active='true'] {
126
86
  background-color: var(--jp-brand-color1);
127
87
  color: var(--jp-ui-inverse-font-color1);
@@ -131,11 +91,6 @@
131
91
  background-color: var(--jp-brand-color1);
132
92
  }
133
93
 
134
- /*
135
- * Icon variant of the segmented button, used by the Split/Unified toggle.
136
- * The inline SVGs fill with `currentColor`, so the active/hover color rules
137
- * above carry over to the glyph.
138
- */
139
94
  .jp-xtralab-DiffWidget-segmentedButton-icon {
140
95
  display: inline-flex;
141
96
  align-items: center;
@@ -149,12 +104,6 @@
149
104
  height: 14px;
150
105
  }
151
106
 
152
- /*
153
- * Draggable column splitter. Sits on top of the diff (z-index above the
154
- * content) but stays a thin strip so it doesn't visually intrude. The
155
- * `transform: translateX(-50%)` centers the strip on the column boundary
156
- * the inline `left` percentage points to.
157
- */
158
107
  .jp-xtralab-DiffWidget-resizer {
159
108
  position: absolute;
160
109
  top: 0;
@@ -192,12 +141,7 @@
192
141
  color: var(--jp-ui-font-color1);
193
142
  }
194
143
 
195
- /*
196
- * Per-hunk action overlay. The diff library injects a row at the
197
- * annotation's anchor line and renders this content inside it; we keep the
198
- * row visually unobtrusive — a single small icon button that fades in on
199
- * row hover — so the annotation does not compete with the diff content.
200
- */
144
+ /* The diff library injects this per-hunk row at the anchor line. */
201
145
  .jp-xtralab-DiffWidget-hunkAnnotation {
202
146
  display: flex;
203
147
  justify-content: flex-end;
@@ -234,16 +178,8 @@
234
178
  height: 14px;
235
179
  }
236
180
 
237
- /*
238
- * Notebook diff. Renders one block per cell stacked vertically, plus an
239
- * optional notebook-level metadata block at the bottom. Each cell carries
240
- * its own header (kind badge + cell index + cell type) and a body with the
241
- * source / outputs / metadata sub-diffs the @pierre/diffs library produces.
242
- *
243
- * The sticky header keeps the scope visible while the user scrolls through
244
- * a long cell, and the data-kind attributes drive the colored badges and
245
- * left borders that distinguish added / removed / modified / unchanged.
246
- */
181
+ /* Notebook diff: one block per cell plus an optional notebook-level
182
+ metadata block. */
247
183
  .jp-xtralab-NotebookDiff {
248
184
  display: flex;
249
185
  flex-direction: column;
@@ -251,13 +187,6 @@
251
187
  gap: 8px;
252
188
  }
253
189
 
254
- /*
255
- * The cell entry grid. Two equal columns mirror the old / new mental model
256
- * the column header bar establishes; each cell entry below either spans
257
- * both columns (modified / unchanged) or sits in a single column with an
258
- * empty placeholder on the other side (added / removed). Auto rows let
259
- * each cell pick its own height naturally.
260
- */
261
190
  .jp-xtralab-NotebookDiff-grid {
262
191
  display: grid;
263
192
  grid-template-columns: 1fr 1fr;
@@ -277,12 +206,6 @@
277
206
  grid-column: 2;
278
207
  }
279
208
 
280
- /*
281
- * Empty placeholder rendered in the column opposite an added or removed
282
- * cell. Visible (dashed outline) so the user can see the alignment gap
283
- * the missing cell creates between old and new. Sized roughly like a
284
- * minimal cell card so the row height is consistent.
285
- */
286
209
  .jp-xtralab-NotebookDiff-empty {
287
210
  display: flex;
288
211
  align-items: center;
@@ -437,12 +360,6 @@
437
360
  border-bottom: 1px solid var(--jp-border-color3);
438
361
  }
439
362
 
440
- /*
441
- * The verbatim source listing rendered when the user expands an unchanged
442
- * cell. We don't pass it through @pierre/diffs because there is no diff —
443
- * just the cell contents — but match the diff library's monospace rhythm
444
- * so the surrounding cells still look uniform.
445
- */
446
363
  .jp-xtralab-NotebookDiff-unchangedSource {
447
364
  margin: 0;
448
365
  padding: 8px 12px;
@@ -463,12 +380,6 @@
463
380
  border-top: 1px solid var(--jp-border-color3);
464
381
  }
465
382
 
466
- /*
467
- * Side-by-side panes used by both OutputsSection and MarkdownPreviewSection.
468
- * The grid columns mirror the split-mode FileDiff above so the two halves
469
- * read as the same left=old / right=new mental model the user is already
470
- * tracking on the source diff.
471
- */
472
383
  .jp-xtralab-NotebookDiff-sideBySide {
473
384
  display: flex;
474
385
  flex-direction: column;
@@ -486,11 +397,6 @@
486
397
  grid-template-columns: 1fr;
487
398
  }
488
399
 
489
- /*
490
- * Each pane takes one column. The data-side colored bar on the left edge
491
- * matches the cell-block kind colors so the pane's role (old vs new) is
492
- * clear even in dark theme where the diff library's column-tint is subtle.
493
- */
494
400
  .jp-xtralab-NotebookDiff-sidePane {
495
401
  padding: 8px 12px;
496
402
  min-width: 0;
@@ -507,11 +413,6 @@
507
413
  background-color: var(--jp-layout-color1);
508
414
  }
509
415
 
510
- /*
511
- * Rendermime widgets bring their own padding/margin defaults; we constrain
512
- * them to the pane width so a wide HTML output (table, image) doesn't push
513
- * the grid out of shape.
514
- */
515
416
  .jp-xtralab-NotebookDiff-sidePane .jp-RenderedHTMLCommon,
516
417
  .jp-xtralab-NotebookDiff-sidePane .jp-OutputArea {
517
418
  max-width: 100%;
@@ -532,16 +433,10 @@
532
433
  }
533
434
 
534
435
  /*
535
- * Image diff (raster files). xtralab's replacement for the upstream
536
- * jupyterlab-git image diff: a sticky mode selector (reusing the diff
537
- * segmented-control styling) over the 2-up / swipe / onion-skin views.
538
- *
539
- * Every mode is sized to *fit the widget*: the images are contained
540
- * within the available area (never upscaled past their natural size, and
541
- * scaled down to fit when larger) so nothing overflows. In particular the
542
- * swipe/onion slider stays on screen even when the two revisions have very
543
- * different dimensions. A neutral checkerboard sits behind each image so
544
- * transparency reads clearly in both light and dark themes.
436
+ * Image diff: xtralab's replacement for the jupyterlab-git image diff —
437
+ * 2-up / swipe / onion-skin under a sticky mode selector. Every mode fits
438
+ * the widget (images scale down, never upscale past natural size), with a
439
+ * theme-aware checkerboard behind transparency.
545
440
  */
546
441
  .jp-xtralab-ImageDiff {
547
442
  display: flex;
@@ -559,12 +454,8 @@
559
454
  border-bottom: 1px solid var(--jp-border-color2);
560
455
  }
561
456
 
562
- /*
563
- * The body fills the remaining height and never scrolls — each view is a
564
- * flex child that fits inside it (`min-height: 0` lets the flex/grid
565
- * children shrink below their intrinsic size so `max-height` on the
566
- * images can take effect).
567
- */
457
+ /* The body never scrolls; min-height: 0 lets children shrink below their
458
+ intrinsic size so the image max-heights engage. */
568
459
  .jp-xtralab-ImageDiff-body {
569
460
  flex: 1 1 auto;
570
461
  min-height: 0;
@@ -591,18 +482,6 @@
591
482
  margin: 0;
592
483
  }
593
484
 
594
- /*
595
- * Checkerboard + border so transparent regions read clearly. The squares
596
- * are theme-aware (JupyterLab layout colors) so the frame stays a calm
597
- * light checkerboard in the light theme and a calm dark one in the dark
598
- * theme, rather than a bright white block.
599
- *
600
- * 2-up and onion fill their whole panel with it; the swipe view instead
601
- * carries it on its image-sized *frame* (not the surrounding area) so the
602
- * checkerboard hugs the image. That keeps the divider's top/bottom handles
603
- * sitting at the image edges instead of floating in the middle of a
604
- * checkerboard expanse.
605
- */
606
485
  .jp-xtralab-ImageDiff-frame,
607
486
  .jp-xtralab-ImageDiff-stack,
608
487
  .jp-xtralab-ImageDiff-swipeFrame {
@@ -665,12 +544,7 @@
665
544
  gap: 12px;
666
545
  }
667
546
 
668
- /*
669
- * Onion-skin view: both revisions occupy the same grid cell so they
670
- * overlay. `place-items: center` keeps each image at its own size (no
671
- * stretching the smaller revision up to the larger one's box) while
672
- * `max-height/width` scale either one down to fit the available space.
673
- */
547
+ /* Onion-skin: both revisions share one grid cell. */
674
548
  .jp-xtralab-ImageDiff-stack {
675
549
  flex: 1 1 auto;
676
550
  min-height: 0;
@@ -691,12 +565,6 @@
691
565
  object-fit: contain;
692
566
  }
693
567
 
694
- /*
695
- * Swipe view: a transparent container that just centers the image-sized
696
- * frame in whatever space the body leaves. The checkerboard lives on the
697
- * frame (above), not here, so it hugs the image rather than spanning the
698
- * panel.
699
- */
700
568
  .jp-xtralab-ImageDiff-swipeArea {
701
569
  flex: 1 1 auto;
702
570
  min-height: 0;
@@ -708,17 +576,11 @@
708
576
  }
709
577
 
710
578
  /*
711
- * The frame is sized in JS (inline `width`/`height`) to exactly the
712
- * displayed image box. Because the frame *is* that box, the divider's
713
- * `left: N%`, the pointer-to-percent mapping in `setFromClientX` and each
714
- * image's `clip-path` inset all resolve against the same width — so the
715
- * white divider line sits precisely on the seam between the two revisions
716
- * as it is dragged. (A full-width frame instead let the line drift off the
717
- * seam by up to half the surrounding letterbox.)
718
- *
719
- * The whole frame is the drag target: pressing anywhere over the image
720
- * jumps the divider to that x and then drag-tracks the pointer (GitHub /
721
- * Pierre style), keeping cursor, divider and seam together.
579
+ * The frame is JS-sized (inline width/height) to exactly the displayed
580
+ * image box, so the divider's `left: N%`, the pointer mapping in
581
+ * setFromClientX, and the images' clip-path insets all resolve against the
582
+ * same width — the divider stays on the seam. The whole frame is the drag
583
+ * target: pressing jumps the divider there, then drag-tracks the pointer.
722
584
  */
723
585
  .jp-xtralab-ImageDiff-swipeFrame {
724
586
  position: relative;
@@ -728,12 +590,6 @@
728
590
  touch-action: none;
729
591
  }
730
592
 
731
- /*
732
- * Both revisions fill the frame, so an image's clip inset of N% and the
733
- * divider at `left: N%` cut at the same x. `object-fit: contain` only
734
- * letterboxes when the two revisions differ in aspect ratio; for the
735
- * common same-dimensions edit it fills the box exactly.
736
- */
737
593
  .jp-xtralab-ImageDiff-swipeImg {
738
594
  position: absolute;
739
595
  inset: 0;
@@ -743,19 +599,9 @@
743
599
  object-fit: contain;
744
600
  }
745
601
 
746
- /*
747
- * Swipe divider: a vertical line marking the boundary between the two
748
- * clipped revisions. The natural seam between two clipped images is
749
- * barely visible — especially on light content where it disappears into
750
- * the background — so an explicit divider with high-contrast styling is
751
- * drawn on top. White core with dark outline + soft shadow keeps it
752
- * legible against any image, light or dark.
753
- *
754
- * The divider and its handles are the only elements that show the
755
- * `ew-resize` cursor — clicks anywhere over the image still bubble up
756
- * to the frame's drag handler, but the cursor only signals "drag me"
757
- * over the actual control affordances.
758
- */
602
+ /* The natural seam between the clipped revisions is barely visible, so an
603
+ explicit high-contrast divider is drawn on top: white core + dark
604
+ outline reads on any image. */
759
605
  .jp-xtralab-ImageDiff-swipeDivider {
760
606
  position: absolute;
761
607
  top: 0;
@@ -777,11 +623,6 @@
777
623
  0 0 6px rgb(0 0 0 / 45%);
778
624
  }
779
625
 
780
- /*
781
- * Handle pucks at the top and bottom of the divider. The two arrows
782
- * inside (left + right chevrons) signal that the line can be dragged
783
- * sideways — matching GitHub's image diff swipe affordance.
784
- */
785
626
  .jp-xtralab-ImageDiff-swipeDividerHandle {
786
627
  position: absolute;
787
628
  left: 50%;
@@ -808,9 +649,6 @@
808
649
  bottom: -14px;
809
650
  }
810
651
 
811
- /*
812
- * Chevron triangles drawn with borders so no asset is needed.
813
- */
814
652
  .jp-xtralab-ImageDiff-swipeDividerArrow {
815
653
  width: 0;
816
654
  height: 0;
@@ -1,8 +1,6 @@
1
1
  /*
2
2
  * Line highlight applied by `xtralab:highlight-lines`. The class lands on the
3
- * CodeMirror line wrapper (`.cm-line`), so the tint spans the full editor width
4
- * and a left accent bar marks the run. The translucent background keeps the
5
- * code legible on both light and dark themes.
3
+ * CodeMirror `.cm-line` wrapper, so the tint spans the full editor width.
6
4
  */
7
5
 
8
6
  .jp-xtralab-highlightLine {
@@ -1,14 +1,3 @@
1
- /*
2
- * Styling for the launcher dashboard widget. The widget replaces
3
- * JupyterLab's stock `jp-Launcher`, so we don't piggy-back on the
4
- * `jp-Launcher-*` classes — every selector is scoped under
5
- * `jp-xtralab-Launcher` to keep the rules from leaking elsewhere.
6
- *
7
- * Colors and spacing pull from the active JupyterLab theme via the
8
- * standard `--jp-*` custom properties so the launcher tracks dark/light
9
- * mode automatically.
10
- */
11
-
12
1
  .jp-xtralab-Launcher {
13
2
  display: flex;
14
3
  flex-direction: column;
@@ -32,12 +21,6 @@
32
21
  box-sizing: border-box;
33
22
  }
34
23
 
35
- /*
36
- * Sections — grouped content blocks. The agent picker uses a regular
37
- * `<section>`; the changes panel uses a `<details>` so the user can
38
- * collapse it. Both share the same gap + alignment so the page reads
39
- * uniformly regardless of which element type is underneath.
40
- */
41
24
  .jp-xtralab-Launcher-section {
42
25
  display: flex;
43
26
  flex-direction: column;
@@ -53,15 +36,10 @@
53
36
  text-transform: uppercase;
54
37
  }
55
38
 
56
- /*
57
- * Collapsible changes section. The native `<summary>` is a flex row
58
- * that hosts the title, count badge, and refresh action; the disclosure
59
- * triangle is the browser default — it rotates when the section opens.
60
- */
61
39
  .jp-xtralab-Launcher-changes-section,
62
40
  .jp-xtralab-Launcher-mcp-section {
63
41
  /* Reset the default `<details>` block so its contents inherit the
64
- section's gap-aligned column layout instead of stacking flush. */
42
+ section's gap-aligned column layout. */
65
43
  display: flex;
66
44
  flex-direction: column;
67
45
  gap: 8px;
@@ -87,11 +65,8 @@
87
65
  outline-offset: 1px;
88
66
  }
89
67
 
90
- /*
91
- * Disclosure caret. `display: flex` on the `<summary>` drops the browser's
92
- * native triangle, so draw one (a CSS border triangle in `currentColor`) and
93
- * rotate it from pointing right to pointing down when the section is open.
94
- */
68
+ /* `display: flex` on the `<summary>` drops the browser's native disclosure
69
+ * triangle, so draw a border triangle and rotate it when the section opens. */
95
70
  .jp-xtralab-Launcher-section-summary::-webkit-details-marker {
96
71
  display: none;
97
72
  }
@@ -164,11 +139,6 @@
164
139
  font-size: var(--jp-ui-font-size1);
165
140
  }
166
141
 
167
- /*
168
- * Changed files list. Each row is a button so click + keyboard activate
169
- * both work; the letter on the left is the file's single-letter git status,
170
- * colored to match the @pierre/trees file tree's decorations.
171
- */
172
142
  .jp-xtralab-Launcher-changes {
173
143
  list-style: none;
174
144
  margin: 0;
@@ -179,13 +149,8 @@
179
149
  border-radius: 4px;
180
150
  overflow: hidden;
181
151
 
182
- /*
183
- * Git status letter palette, mirroring the @pierre/trees `--trees-status-*`
184
- * defaults. The file tree resolves those through `light-dark()` under
185
- * `color-scheme: light dark` — i.e. by OS appearance — so the
186
- * `prefers-color-scheme` override below reproduces that exact resolution
187
- * and keeps these letters in lockstep with the tree's.
188
- */
152
+ /* Mirrors the @pierre/trees `--trees-status-*` defaults, which resolve via
153
+ `light-dark()` by OS appearance — hence the `prefers-color-scheme` override below. */
189
154
  --xtralab-git-status-added: #16a994;
190
155
  --xtralab-git-status-modified: #1ca1c7;
191
156
  --xtralab-git-status-renamed: #d5a910;
@@ -228,11 +193,6 @@
228
193
  outline-offset: -1px;
229
194
  }
230
195
 
231
- /*
232
- * Bare colored letter, not a filled badge — the same treatment the
233
- * @pierre/trees file tree gives its git status decorations. The fixed width
234
- * keeps the letters in a tidy gutter so the paths stay column-aligned.
235
- */
236
196
  .jp-xtralab-Launcher-change-badge {
237
197
  display: inline-flex;
238
198
  align-items: center;
@@ -283,10 +243,6 @@
283
243
  letter-spacing: 0.04em;
284
244
  }
285
245
 
286
- /*
287
- * Prompt textarea + agent grid. The textarea is full-width and resizable
288
- * vertically; the grid renders agent buttons as compact, icon-led tiles.
289
- */
290
246
  .jp-xtralab-Launcher-prompt {
291
247
  width: 100%;
292
248
  min-height: 72px;
@@ -373,20 +329,6 @@
373
329
  text-align: center;
374
330
  }
375
331
 
376
- /*
377
- * MCP registration hint. A collapsed-by-default `<details>` listing the
378
- * one-line `mcp add` command for each installed agent that supports one,
379
- * each paired with a Copy button. The command sits in a read-only `<code>`
380
- * box — the user copies it and runs it in their own terminal — so the row
381
- * is not itself a button.
382
- */
383
-
384
- /*
385
- * The MCP hint is an optional helper, not a primary section, so its summary
386
- * is rendered lighter and in sentence case rather than reusing the bold,
387
- * uppercase treatment of the `START AN AGENT` / `OPEN` headers — otherwise a
388
- * collapsed disclosure reads as a misplaced top-level section.
389
- */
390
332
  .jp-xtralab-Launcher-mcp-section .jp-xtralab-Launcher-section-title {
391
333
  font-weight: 500;
392
334
  text-transform: none;
@@ -421,11 +363,7 @@
421
363
  overflow-x: auto;
422
364
  }
423
365
 
424
- /*
425
- * Copy buttons are sized to the longest label ("Copied!") and centered, so
426
- * swapping "Copy" ↔ "Copied!" never resizes the button or ragged-aligns the
427
- * column.
428
- */
366
+ /* Sized to the longest label ("Copied!") so the swap never resizes the button. */
429
367
  .jp-xtralab-Launcher-mcp-copy {
430
368
  flex: 0 0 auto;
431
369
  min-width: 4.5rem;
@@ -451,8 +389,6 @@
451
389
  outline-offset: 1px;
452
390
  }
453
391
 
454
- /* Confirmation state after a successful copy — a clear color shift, paired
455
- with the button's "Copied!" label, so the action is unmistakable. */
456
392
  .jp-xtralab-Launcher-mcp-copy.jp-mod-copied {
457
393
  color: var(--jp-success-color1, var(--jp-ui-font-color1));
458
394
  border-color: var(--jp-success-color1, var(--jp-border-color1));
package/style/omnibox.css CHANGED
@@ -1,16 +1,9 @@
1
- /* Omnibox overlay (xtralab:omnibox): a centered search box over the shell. */
2
-
3
- /*
4
- * The widget node is attached to `document.body` (outside the shell) and only
5
- * carries theme variables via `jp-ThemedContainer`; the React tree renders the
6
- * fixed full-screen overlay below it.
7
- */
1
+ /* The widget node attaches to `document.body` and carries `jp-ThemedContainer`
2
+ for theme variables; the React tree renders the fixed overlay below. */
8
3
  .jp-xtralab-Omnibox {
9
4
  position: absolute;
10
5
  }
11
6
 
12
- /* Transparent full-viewport layer that centers the panel and catches
13
- click-outside to dismiss. */
14
7
  .jp-xtralab-Omnibox-overlay {
15
8
  position: fixed;
16
9
  inset: 0;
@@ -26,8 +19,6 @@
26
19
  width: min(640px, 92vw);
27
20
  max-height: 60vh;
28
21
  overflow: hidden;
29
-
30
- /* Drop just below the top bar so it reads as a command-center dropdown. */
31
22
  margin-top: calc(var(--jp-private-menubar-height, 28px) + 4px);
32
23
  background: var(--jp-layout-color1);
33
24
  border: var(--jp-border-width) solid
@@ -51,9 +42,6 @@
51
42
  color: var(--jp-ui-font-color3);
52
43
  }
53
44
 
54
- /* Side gutters float the active-row highlight inside the panel edge,
55
- matching the menu/palette treatment; section headers and items shift
56
- together so their left alignment is preserved. */
57
45
  .jp-xtralab-Omnibox-results {
58
46
  padding: 5px 6px;
59
47
  overflow-y: auto;
@@ -1,9 +1,3 @@
1
- /*
2
- * The panel `xtralab:show` renders into. It holds a single rendered output and
3
- * scrolls when that output is taller (or wider) than the panel, which matters
4
- * most in the narrow side area.
5
- */
6
-
7
1
  .jp-xtralab-ShowPanel {
8
2
  overflow: auto;
9
3
  padding: 8px;