xtralab 0.15.0 → 0.15.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -30
- package/lib/about/icons.d.ts +0 -5
- package/lib/about/icons.js +0 -5
- package/lib/about/index.d.ts +4 -8
- package/lib/about/index.js +6 -17
- package/lib/agentSessions.d.ts +9 -29
- package/lib/agentSessions.js +2 -7
- package/lib/askAgent/editorSelection.d.ts +20 -26
- package/lib/askAgent/editorSelection.js +11 -26
- package/lib/askAgent/icons.d.ts +2 -3
- package/lib/askAgent/icons.js +2 -3
- package/lib/askAgent/index.d.ts +4 -26
- package/lib/askAgent/index.js +54 -158
- package/lib/askAgent/popup.d.ts +12 -16
- package/lib/askAgent/popup.js +18 -37
- package/lib/askAgent/prompt.d.ts +3 -5
- package/lib/askAgent/prompt.js +6 -19
- package/lib/askAgent/queue.d.ts +11 -21
- package/lib/askAgent/queue.js +9 -19
- package/lib/askAgent/queuePanel.d.ts +13 -18
- package/lib/askAgent/queuePanel.js +15 -37
- package/lib/askAgent/targetPicker.d.ts +2 -9
- package/lib/askAgent/targetPicker.js +6 -11
- package/lib/askAgent/tokens.d.ts +32 -46
- package/lib/askAgent/tokens.js +4 -6
- package/lib/commandBar/index.d.ts +4 -13
- package/lib/commandBar/index.js +21 -39
- package/lib/customPanel/index.js +15 -0
- package/lib/editorBreadcrumbs/index.d.ts +3 -6
- package/lib/editorBreadcrumbs/index.js +10 -6
- package/lib/editorBreadcrumbs/widget.d.ts +17 -4
- package/lib/editorBreadcrumbs/widget.js +11 -17
- package/lib/editorIndent/index.d.ts +4 -12
- package/lib/editorIndent/index.js +8 -23
- package/lib/fileBrowser/commands.d.ts +29 -19
- package/lib/fileBrowser/commands.js +83 -97
- package/lib/fileBrowser/contents.d.ts +3 -0
- package/lib/fileBrowser/dragAndDrop.d.ts +17 -4
- package/lib/fileBrowser/dragAndDrop.js +2 -7
- package/lib/fileBrowser/fileBrowser.d.ts +19 -9
- package/lib/fileBrowser/fileBrowser.js +70 -222
- package/lib/fileBrowser/gitStatus.d.ts +16 -10
- package/lib/fileBrowser/gitStatus.js +31 -30
- package/lib/fileBrowser/gitignore.d.ts +4 -17
- package/lib/fileBrowser/gitignore.js +4 -25
- package/lib/fileBrowser/icons.d.ts +7 -17
- package/lib/fileBrowser/icons.js +25 -80
- package/lib/fileBrowser/index.js +2 -4
- package/lib/fileBrowser/widget.d.ts +141 -48
- package/lib/fileBrowser/widget.js +102 -4
- package/lib/fileTypeIcons/index.js +0 -10
- package/lib/git/api.d.ts +5 -13
- package/lib/git/api.js +10 -36
- package/lib/git/askRequest.d.ts +4 -8
- package/lib/git/askRequest.js +6 -20
- package/lib/git/commands.d.ts +45 -5
- package/lib/git/commands.js +20 -13
- package/lib/git/diffModel.js +4 -0
- package/lib/git/diffPreferences.d.ts +90 -0
- package/lib/git/diffPreferences.js +107 -0
- package/lib/git/diffProvider.js +10 -2
- package/lib/git/diffSurface.d.ts +64 -63
- package/lib/git/diffSurface.js +72 -213
- package/lib/git/diffTheme.d.ts +7 -0
- package/lib/git/diffTheme.js +23 -0
- package/lib/git/diffWidget.d.ts +70 -14
- package/lib/git/diffWidget.js +100 -94
- package/lib/git/imageDiff.d.ts +14 -6
- package/lib/git/imageDiff.js +19 -75
- package/lib/git/index.d.ts +0 -3
- package/lib/git/index.js +44 -10
- package/lib/git/notebookDiff.d.ts +110 -33
- package/lib/git/notebookDiff.js +55 -197
- package/lib/git/tokens.d.ts +73 -31
- package/lib/git/tokens.js +2 -3
- package/lib/highlight/index.d.ts +4 -10
- package/lib/highlight/index.js +10 -41
- package/lib/index.d.ts +0 -9
- package/lib/index.js +0 -9
- package/lib/launcher/agents.d.ts +55 -51
- package/lib/launcher/agents.js +15 -57
- package/lib/launcher/availability.d.ts +3 -9
- package/lib/launcher/availability.js +3 -9
- package/lib/launcher/commands.d.ts +7 -32
- package/lib/launcher/commands.js +14 -45
- package/lib/launcher/dashboard.d.ts +19 -24
- package/lib/launcher/dashboard.js +21 -67
- package/lib/launcher/editorRegistry.d.ts +10 -22
- package/lib/launcher/editorRegistry.js +14 -18
- package/lib/launcher/editors.d.ts +39 -45
- package/lib/launcher/editors.js +8 -34
- package/lib/launcher/icons.d.ts +0 -12
- package/lib/launcher/icons.js +5 -39
- package/lib/launcher/index.js +12 -55
- package/lib/launcher/invocation.d.ts +4 -10
- package/lib/launcher/invocation.js +7 -22
- package/lib/launcher/registry.d.ts +9 -7
- package/lib/launcher/registry.js +9 -7
- package/lib/launcher/tokens.d.ts +10 -22
- package/lib/launcher/tokens.js +5 -8
- package/lib/menuBar/index.d.ts +3 -10
- package/lib/menuBar/index.js +11 -28
- package/lib/menus/index.d.ts +3 -9
- package/lib/menus/index.js +14 -30
- package/lib/omnibox/files.d.ts +2 -4
- package/lib/omnibox/files.js +5 -11
- package/lib/omnibox/index.d.ts +4 -14
- package/lib/omnibox/index.js +9 -27
- package/lib/omnibox/model.d.ts +38 -10
- package/lib/omnibox/model.js +15 -33
- package/lib/omnibox/recents.d.ts +15 -17
- package/lib/omnibox/recents.js +12 -17
- package/lib/omnibox/tokens.d.ts +5 -10
- package/lib/omnibox/tokens.js +2 -6
- package/lib/omnibox/widget.d.ts +11 -7
- package/lib/omnibox/widget.js +8 -16
- package/lib/searchReplace/index.d.ts +4 -20
- package/lib/searchReplace/index.js +7 -27
- package/lib/showOutput/index.d.ts +3 -12
- package/lib/showOutput/index.js +6 -22
- package/lib/sidebar/index.d.ts +4 -7
- package/lib/sidebar/index.js +5 -12
- package/lib/terminalNotifications/index.d.ts +4 -10
- package/lib/terminalNotifications/index.js +6 -20
- package/lib/terminals/agentTerminals.d.ts +12 -5
- package/lib/terminals/agentTerminals.js +25 -44
- package/lib/terminals/detection.d.ts +4 -8
- package/lib/terminals/detection.js +4 -8
- package/lib/terminals/index.d.ts +0 -35
- package/lib/terminals/index.js +12 -101
- package/lib/terminals/model.d.ts +64 -139
- package/lib/terminals/model.js +80 -220
- package/lib/terminals/tokens.d.ts +11 -22
- package/lib/terminals/tokens.js +2 -2
- package/lib/terminals/widget.d.ts +43 -13
- package/lib/terminals/widget.js +33 -18
- package/lib/topBar/icons.d.ts +3 -8
- package/lib/topBar/icons.js +3 -8
- package/lib/topBar/index.d.ts +4 -11
- package/lib/topBar/index.js +10 -38
- package/lib/walkthrough/index.d.ts +4 -9
- package/lib/walkthrough/index.js +6 -20
- package/lib/walkthrough/panel.d.ts +40 -9
- package/lib/walkthrough/panel.js +4 -10
- package/package.json +5 -3
- package/schema/git-diff-preferences.json +42 -0
- package/src/about/icons.ts +0 -5
- package/src/about/index.tsx +6 -17
- package/src/agentSessions.ts +9 -29
- package/src/askAgent/editorSelection.ts +22 -29
- package/src/askAgent/icons.ts +2 -3
- package/src/askAgent/index.ts +54 -158
- package/src/askAgent/popup.tsx +23 -45
- package/src/askAgent/prompt.ts +6 -19
- package/src/askAgent/queue.ts +13 -24
- package/src/askAgent/queuePanel.tsx +21 -46
- package/src/askAgent/targetPicker.tsx +5 -15
- package/src/askAgent/tokens.ts +32 -46
- package/src/commandBar/index.ts +24 -39
- package/src/customPanel/index.ts +15 -0
- package/src/editorBreadcrumbs/index.ts +10 -6
- package/src/editorBreadcrumbs/widget.ts +23 -17
- package/src/editorIndent/index.ts +17 -23
- package/src/fileBrowser/commands.ts +119 -96
- package/src/fileBrowser/contents.ts +3 -0
- package/src/fileBrowser/dragAndDrop.ts +17 -7
- package/src/fileBrowser/fileBrowser.tsx +86 -230
- package/src/fileBrowser/gitStatus.ts +36 -33
- package/src/fileBrowser/gitignore.ts +4 -25
- package/src/fileBrowser/icons.ts +25 -80
- package/src/fileBrowser/index.ts +2 -4
- package/src/fileBrowser/widget.tsx +171 -50
- package/src/fileTypeIcons/index.ts +0 -10
- package/src/git/api.ts +10 -36
- package/src/git/askRequest.ts +6 -20
- package/src/git/commands.ts +83 -11
- package/src/git/diffModel.ts +25 -0
- package/src/git/diffPreferences.ts +192 -0
- package/src/git/diffProvider.tsx +11 -2
- package/src/git/diffSurface.tsx +165 -286
- package/src/git/diffTheme.ts +24 -0
- package/src/git/diffWidget.tsx +194 -134
- package/src/git/imageDiff.tsx +56 -84
- package/src/git/index.ts +54 -10
- package/src/git/notebookDiff.tsx +214 -240
- package/src/git/tokens.ts +73 -31
- package/src/highlight/index.ts +10 -41
- package/src/index.ts +0 -9
- package/src/launcher/agents.ts +64 -95
- package/src/launcher/availability.ts +3 -9
- package/src/launcher/commands.ts +14 -51
- package/src/launcher/dashboard.tsx +49 -88
- package/src/launcher/editorRegistry.ts +21 -29
- package/src/launcher/editors.ts +39 -58
- package/src/launcher/icons.ts +5 -39
- package/src/launcher/index.ts +12 -55
- package/src/launcher/invocation.ts +7 -22
- package/src/launcher/registry.ts +9 -7
- package/src/launcher/tokens.ts +10 -22
- package/src/menuBar/index.ts +11 -28
- package/src/menus/index.ts +14 -30
- package/src/omnibox/files.ts +10 -14
- package/src/omnibox/index.ts +9 -27
- package/src/omnibox/model.ts +50 -38
- package/src/omnibox/recents.ts +17 -22
- package/src/omnibox/tokens.ts +5 -10
- package/src/omnibox/widget.tsx +14 -19
- package/src/searchReplace/index.ts +7 -27
- package/src/showOutput/index.ts +6 -22
- package/src/sidebar/index.ts +20 -12
- package/src/terminalNotifications/index.ts +42 -25
- package/src/terminals/agentTerminals.ts +25 -49
- package/src/terminals/detection.ts +4 -8
- package/src/terminals/index.ts +12 -101
- package/src/terminals/model.ts +130 -246
- package/src/terminals/tokens.ts +11 -22
- package/src/terminals/widget.tsx +48 -31
- package/src/topBar/icons.ts +3 -8
- package/src/topBar/index.ts +21 -44
- package/src/walkthrough/index.ts +6 -20
- package/src/walkthrough/panel.ts +40 -10
- package/style/about.css +2 -7
- package/style/askAgent.css +8 -40
- package/style/base.css +9 -45
- package/style/chrome.css +108 -308
- package/style/commandBar.css +4 -20
- package/style/customPanel.css +1 -4
- package/style/git.css +26 -186
- package/style/highlight.css +1 -3
- package/style/launcher.css +6 -70
- package/style/omnibox.css +2 -14
- package/style/showOutput.css +0 -6
- package/style/sidebar.css +29 -9
- package/style/tabs.css +5 -13
- package/style/terminals.css +6 -53
- package/style/topBar.css +2 -22
- package/style/walkthrough.css +0 -8
package/style/chrome.css
CHANGED
|
@@ -1,31 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* The language, in one place:
|
|
7
|
-
* - one surface, separated by hairlines (--jp-border-color2), not the stock
|
|
8
|
-
* grid of grey-400 borders;
|
|
9
|
-
* - a radius scale: controls ~5-6px, popovers 8-10px, dialogs 12px;
|
|
10
|
-
* - soft large-blur shadows rebuilt from each theme's own shadow pieces;
|
|
11
|
-
* - state washes mixed from the theme's foreground (color-mix over
|
|
12
|
-
* --jp-ui-font-color1) instead of opaque layout-color blocks;
|
|
13
|
-
* - 100-150ms ease on hover state changes;
|
|
14
|
-
* - frosted translucency on transient overlays (menus, palette, omnibox).
|
|
15
|
-
*
|
|
16
|
-
* Two ground rules keep this safe:
|
|
17
|
-
* 1. Every color derives from the active theme's --jp-* tokens (or a
|
|
18
|
-
* color-mix over them), so the layer composes with JupyterLab
|
|
19
|
-
* Light/Dark and both Pierre themes. Theme-conditional rules key off
|
|
20
|
-
* body[data-jp-theme-light].
|
|
21
|
-
* 2. Lumino positions panels, tab bars, and menus with pixel math, so
|
|
22
|
-
* rules stick to paint-only properties (color, background,
|
|
23
|
-
* border-color, border-radius, box-shadow, opacity, transition).
|
|
24
|
-
* Where a stock border exists, only its color changes — widths stay.
|
|
25
|
-
*
|
|
26
|
-
* Token overrides live on `body`, not :root: themes define their tokens on
|
|
27
|
-
* :root in stylesheets loaded after this one, and inheritance from body
|
|
28
|
-
* beats :root regardless of load order.
|
|
2
|
+
* Token-driven restyle of stock JupyterLab/Lumino chrome into a quiet
|
|
3
|
+
* native window. Colors derive from the theme's --jp-* tokens; rules stay
|
|
4
|
+
* paint-only (Lumino positions chrome with pixel math). Token overrides
|
|
5
|
+
* sit on `body`: body inheritance beats the themes' later-loaded :root.
|
|
29
6
|
*/
|
|
30
7
|
|
|
31
8
|
/* stylelint-disable no-descending-specificity */
|
|
@@ -35,14 +12,9 @@
|
|
|
35
12
|
|---------------------------------------------------------------------------- */
|
|
36
13
|
|
|
37
14
|
body {
|
|
38
|
-
/*
|
|
39
|
-
|
|
40
|
-
applyJupyterTheme -> controlCornerRadius) follows. */
|
|
15
|
+
/* FAST forwards this to its shadow-DOM controls via
|
|
16
|
+
applyJupyterTheme -> controlCornerRadius. */
|
|
41
17
|
--jp-border-radius: 6px;
|
|
42
|
-
|
|
43
|
-
/* Elevation ramp: fewer layers, larger blur, negative spread. Built from
|
|
44
|
-
the theme's own shadow color pieces, so each theme keeps its shadow
|
|
45
|
-
character (including Pierre light's deliberately faint shadows). */
|
|
46
18
|
--jp-elevation-z1: 0 1px 2px var(--jp-shadow-ambient-color);
|
|
47
19
|
--jp-elevation-z2:
|
|
48
20
|
0 1px 3px var(--jp-shadow-penumbra-color),
|
|
@@ -68,17 +40,11 @@ body {
|
|
|
68
40
|
--jp-elevation-z24:
|
|
69
41
|
0 28px 56px -14px var(--jp-shadow-umbra-color),
|
|
70
42
|
0 8px 20px -8px var(--jp-shadow-ambient-color);
|
|
71
|
-
|
|
72
|
-
/* Toolbars separate with their existing border-bottom alone; the stock
|
|
73
|
-
omnidirectional 2px smudge shadow under every toolbar goes. */
|
|
74
43
|
--jp-toolbar-box-shadow: none;
|
|
75
44
|
--jp-toolbar-border-color: var(--jp-border-color2);
|
|
76
45
|
|
|
77
|
-
/*
|
|
78
|
-
|
|
79
|
-
and focus with a soft outer ring instead of the inset blue glow. The
|
|
80
|
-
border-color swap to --jp-input-active-border-color that ships with
|
|
81
|
-
every stock :focus rule stays, giving the border + halo combo. */
|
|
46
|
+
/* Stock :focus rules still swap to --jp-input-active-border-color,
|
|
47
|
+
giving border + halo. */
|
|
82
48
|
--jp-input-border-color: var(--jp-border-color1);
|
|
83
49
|
--jp-input-box-shadow: 0 0 0 3px
|
|
84
50
|
color-mix(
|
|
@@ -86,9 +52,6 @@ body {
|
|
|
86
52
|
var(--jp-input-active-border-color, var(--jp-brand-color1)) 22%,
|
|
87
53
|
transparent
|
|
88
54
|
);
|
|
89
|
-
|
|
90
|
-
/* Focused notebook/console cell: same outer-halo language, derived from
|
|
91
|
-
the theme's active cell border color (brand in all shipped themes). */
|
|
92
55
|
--jp-cell-editor-box-shadow: 0 0 0 3px
|
|
93
56
|
color-mix(
|
|
94
57
|
in srgb,
|
|
@@ -96,18 +59,11 @@ body {
|
|
|
96
59
|
transparent
|
|
97
60
|
);
|
|
98
61
|
|
|
99
|
-
/*
|
|
100
|
-
(md-orange-900/700) — point it at the brand color instead (a no-op for
|
|
101
|
-
the Pierre themes). accent-color inherits into every native
|
|
102
|
-
checkbox/radio (dialogs, Settings editor, search filters). */
|
|
62
|
+
/* Stock themes color the switch ON state orange; point it at brand. */
|
|
103
63
|
--jp-switch-true-position-color: var(--jp-brand-color1);
|
|
104
64
|
|
|
105
65
|
accent-color: var(--jp-brand-color1);
|
|
106
66
|
|
|
107
|
-
/* One selection language: brand-derived focused selection (JupyterLab
|
|
108
|
-
Light still ships a 2010-era solid lavender), neutral grey-out when
|
|
109
|
-
unfocused, light brand wash for multi-selected cells. Alpha values
|
|
110
|
-
layer correctly over the active-line highlight. */
|
|
111
67
|
--jp-editor-selected-focused-background: color-mix(
|
|
112
68
|
in srgb,
|
|
113
69
|
var(--jp-brand-color1) 22%,
|
|
@@ -123,93 +79,69 @@ body {
|
|
|
123
79
|
var(--jp-brand-color1) 12%,
|
|
124
80
|
transparent
|
|
125
81
|
);
|
|
126
|
-
|
|
127
|
-
/* Dataframe row hover: brand wash instead of per-theme ad-hoc blues
|
|
128
|
-
(solid baby-blue in JupyterLab Light). */
|
|
129
82
|
--jp-rendermime-table-row-hover-background: color-mix(
|
|
130
83
|
in srgb,
|
|
131
84
|
var(--jp-brand-color1) 10%,
|
|
132
85
|
transparent
|
|
133
86
|
);
|
|
134
87
|
|
|
135
|
-
/*
|
|
136
|
-
the exact stock stack elsewhere. The prompt font follows so In[n]/Out[n]
|
|
137
|
-
match the editor. The terminal font is a JS setting, not CSS. */
|
|
88
|
+
/* The terminal font is a JS setting, not CSS. */
|
|
138
89
|
--jp-code-font-family:
|
|
139
90
|
ui-monospace, 'SF Mono', sfmono-regular, menlo, consolas,
|
|
140
91
|
'DejaVu Sans Mono', monospace;
|
|
141
92
|
--jp-cell-prompt-font-family: var(--jp-code-font-family);
|
|
142
93
|
}
|
|
143
94
|
|
|
144
|
-
/*
|
|
145
|
-
|
|
146
|
-
* (--jp-border-color1 is #bdbdbd in JupyterLab Light). Step it down to the
|
|
147
|
-
* theme's own next ramp value for the hairline look. Dark themes keep their
|
|
148
|
-
* stronger line: shadows carry less depth information there, so color1
|
|
149
|
-
* stays for edge definition.
|
|
150
|
-
*/
|
|
95
|
+
/* Dark themes keep the heavy --jp-border-color1 — shadows carry less depth
|
|
96
|
+
information there. */
|
|
151
97
|
body[data-jp-theme-light='true'] {
|
|
152
98
|
--jp-border-color1: var(--jp-border-color2);
|
|
153
99
|
}
|
|
154
100
|
|
|
155
|
-
/* The Pierre themes define
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
JupyterLab Dark defines its own deliberately lighter #38a0f5 focus color,
|
|
159
|
-
which an unscoped body-level token would silently override. */
|
|
101
|
+
/* The Pierre themes define no focus-outline tokens, so stock :focus-visible
|
|
102
|
+
falls to browser defaults; backfill. Scoped so JupyterLab Dark's own
|
|
103
|
+
lighter focus color is not overridden. */
|
|
160
104
|
body[data-jp-theme-name='Pierre Light'],
|
|
161
105
|
body[data-jp-theme-name='Pierre Dark'] {
|
|
162
106
|
--jp-focus-outline-color: var(--jp-brand-color1);
|
|
163
107
|
--jp-focus-outline-width: 2px;
|
|
164
108
|
}
|
|
165
109
|
|
|
166
|
-
/*
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
* ::-webkit-scrollbar styling on that element, which is also why the
|
|
172
|
-
* carve-outs below reset both to `auto`. body[data-jp-theme-light] matches
|
|
173
|
-
* every theme (the attribute is always present) and out-specifies core's
|
|
174
|
-
* optional [data-jp-theme-scrollbars='true'] rule. Elements that set their
|
|
175
|
-
* own scrollbar-color (e.g. core's .jp-scrollbar-tiny) keep it — a direct
|
|
176
|
-
* declaration always beats an inherited value.
|
|
177
|
-
*/
|
|
110
|
+
/* Slim quiet scrollbars. scrollbar-color inherits across shadow-DOM
|
|
111
|
+
boundaries, scrollbar-width does not — hence the descendant rule. In
|
|
112
|
+
Chromium a non-auto value for either disables ::-webkit-scrollbar styling,
|
|
113
|
+
so the carve-outs below reset both to `auto`. body[data-jp-theme-light]
|
|
114
|
+
matches every theme and out-specifies [data-jp-theme-scrollbars]. */
|
|
178
115
|
body[data-jp-theme-light] {
|
|
179
116
|
scrollbar-color: color-mix(in srgb, var(--jp-ui-font-color1) 28%, transparent)
|
|
180
117
|
transparent;
|
|
181
118
|
}
|
|
182
119
|
|
|
183
120
|
/* The universal selector does not pierce shadow DOM, so @pierre internals
|
|
184
|
-
are untouched
|
|
121
|
+
are untouched. */
|
|
185
122
|
body[data-jp-theme-light],
|
|
186
123
|
body[data-jp-theme-light] * {
|
|
187
124
|
scrollbar-width: thin;
|
|
188
125
|
}
|
|
189
126
|
|
|
190
127
|
/* Carve-out: the dock tab strip keeps its hand-built 2px webkit scrollbar
|
|
191
|
-
(style/tabs.css)
|
|
128
|
+
(style/tabs.css). */
|
|
192
129
|
.lm-DockPanel-tabBar .lm-TabBar-content {
|
|
193
130
|
scrollbar-width: auto;
|
|
194
131
|
scrollbar-color: auto;
|
|
195
132
|
}
|
|
196
133
|
|
|
197
|
-
/* Carve-out: @pierre/trees
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
width. Resetting the hosts to `auto` makes their shadow trees inherit
|
|
201
|
-
`auto` again, re-enabling both. The body[...] prefix out-specifies the
|
|
202
|
-
universal width rule above. */
|
|
134
|
+
/* Carve-out: @pierre/trees and @pierre/diffs build their own webkit
|
|
135
|
+
scrollbars inside shadow roots (one measures scrollbar width for the
|
|
136
|
+
trees gutter); `auto` on the hosts lets the shadow trees inherit it. */
|
|
203
137
|
body[data-jp-theme-light] file-tree-container,
|
|
204
138
|
body[data-jp-theme-light] diffs-container {
|
|
205
139
|
scrollbar-width: auto;
|
|
206
140
|
scrollbar-color: auto;
|
|
207
141
|
}
|
|
208
142
|
|
|
209
|
-
/* Carve-out: Lumino's drag cursor backdrop
|
|
210
|
-
|
|
211
|
-
with scrollbar-width: none; the universal thin rule above out-specifies
|
|
212
|
-
that and would paint its thumbs as gray pills floating near the cursor. */
|
|
143
|
+
/* Carve-out: Lumino's drag cursor backdrop hides its scrollbars; the thin
|
|
144
|
+
rule above would paint gray pills that follow the cursor. */
|
|
213
145
|
body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
214
146
|
scrollbar-width: none;
|
|
215
147
|
}
|
|
@@ -218,7 +150,6 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
218
150
|
| Window chrome: seams, menu bar, activity strips, status bar, splitters
|
|
219
151
|
|---------------------------------------------------------------------------- */
|
|
220
152
|
|
|
221
|
-
/* Structural hairlines: recolor the shell's skeleton borders (widths stay). */
|
|
222
153
|
#jp-top-panel {
|
|
223
154
|
border-bottom-color: var(--jp-border-color2);
|
|
224
155
|
}
|
|
@@ -236,17 +167,11 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
236
167
|
}
|
|
237
168
|
|
|
238
169
|
/*
|
|
239
|
-
* Re-assert the sidebar width floor over inline styles
|
|
240
|
-
*
|
|
241
|
-
*
|
|
242
|
-
*
|
|
243
|
-
*
|
|
244
|
-
* the shell saving the raw split sizes while a sidebar is collapsed
|
|
245
|
-
* (collapsed = ~0, unguarded upstream, unlike the down area's
|
|
246
|
-
* _lastDownAreaSize), a restored workspace then expands that sidebar to a
|
|
247
|
-
* 1px sliver. !important is the one thing that outranks an inline style;
|
|
248
|
-
* with the floor restored, even a zero saved size expands to a usable
|
|
249
|
-
* panel.
|
|
170
|
+
* Re-assert the sidebar width floor over inline styles: a widget moved into
|
|
171
|
+
* a sidebar keeps the tiny inline min-width Lumino wrote while it lived in
|
|
172
|
+
* the dock, and the shell saves ~0 split sizes for collapsed sidebars, so a
|
|
173
|
+
* restored workspace can expand one to a 1px sliver. !important is the one
|
|
174
|
+
* thing that outranks an inline style.
|
|
250
175
|
*/
|
|
251
176
|
#jp-left-stack > .lm-Widget,
|
|
252
177
|
#jp-right-stack > .lm-Widget {
|
|
@@ -257,26 +182,16 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
257
182
|
border-bottom-color: var(--jp-border-color2);
|
|
258
183
|
}
|
|
259
184
|
|
|
260
|
-
/* Borders framing each open document/panel in the dock. */
|
|
261
185
|
.lm-Widget.lm-DockPanel-widget,
|
|
262
186
|
.lm-TabPanel-stackedPanel.lm-TabPanel-stackedPanel {
|
|
263
187
|
border-color: var(--jp-border-color2);
|
|
264
188
|
}
|
|
265
189
|
|
|
266
|
-
/* The 5px gutters between tiled editors show
|
|
267
|
-
dock panel — stock falls through to the body's layout-color3 (#bdbdbd in
|
|
268
|
-
JupyterLab Light). A quiet surface makes split views separate with a
|
|
269
|
-
soft seam instead of a dark bar. */
|
|
190
|
+
/* The 5px gutters between tiled editors show this surface. */
|
|
270
191
|
#jp-main-dock-panel {
|
|
271
192
|
background: var(--jp-layout-color2);
|
|
272
193
|
}
|
|
273
194
|
|
|
274
|
-
/*
|
|
275
|
-
* Menu bar: stock hover is an opaque grey block, and the OPEN item paints
|
|
276
|
-
* an opaque fill + 1px side borders + z6 shadow to fake a "tab connected
|
|
277
|
-
* to the menu". Rounded translucent highlights instead; the transparent
|
|
278
|
-
* 1px borders Lumino reserves keep their widths, so nothing shifts.
|
|
279
|
-
*/
|
|
280
195
|
.lm-MenuBar-item {
|
|
281
196
|
border-radius: 5px;
|
|
282
197
|
transition: background-color 120ms ease;
|
|
@@ -300,21 +215,11 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
300
215
|
border-top-color: transparent;
|
|
301
216
|
}
|
|
302
217
|
|
|
303
|
-
/*
|
|
304
|
-
* Activity strips (left/right sidebar tab bars, in either orientation) and
|
|
305
|
-
* the down-area tab bar: stock draws them as bordered layout-color2 bands
|
|
306
|
-
* with separators between tabs and an opaque current tab — a classic
|
|
307
|
-
* tab-widget look. Flatten onto the window surface: hairline seams, muted
|
|
308
|
-
* icons that wake on hover, translucent washes, and a 2px brand accent on
|
|
309
|
-
* the current tab's outer edge. All separator overrides change border
|
|
310
|
-
* COLOR only, so the 1px widths Lumino measured stay.
|
|
311
|
-
*/
|
|
312
218
|
.jp-SideBar.lm-TabBar,
|
|
313
219
|
#jp-down-stack .lm-TabBar {
|
|
314
220
|
background: var(--jp-layout-color1);
|
|
315
221
|
}
|
|
316
222
|
|
|
317
|
-
/* Hairline between the strip and its neighbor, all four placements. */
|
|
318
223
|
.jp-SideBar.lm-TabBar.jp-mod-left::after {
|
|
319
224
|
border-right-color: var(--jp-border-color2);
|
|
320
225
|
}
|
|
@@ -331,7 +236,6 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
331
236
|
border-top-color: var(--jp-border-color2);
|
|
332
237
|
}
|
|
333
238
|
|
|
334
|
-
/* Separators off — vertical orientation… */
|
|
335
239
|
.jp-SideBar.lm-TabBar[data-orientation='vertical']
|
|
336
240
|
.lm-TabBar-tab
|
|
337
241
|
+ .lm-TabBar-tab,
|
|
@@ -349,7 +253,6 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
349
253
|
border-bottom-color: transparent;
|
|
350
254
|
}
|
|
351
255
|
|
|
352
|
-
/* …and horizontal orientation. */
|
|
353
256
|
.jp-SideBar.lm-TabBar[data-orientation='horizontal']
|
|
354
257
|
.lm-TabBar-tab
|
|
355
258
|
+ .lm-TabBar-tab,
|
|
@@ -367,14 +270,12 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
367
270
|
border-right-color: transparent;
|
|
368
271
|
}
|
|
369
272
|
|
|
370
|
-
/* The current tab's
|
|
371
|
-
|
|
372
|
-
continuously instead. */
|
|
273
|
+
/* The current tab's ::after paints an opaque frame over the strip's edge
|
|
274
|
+
hairline; keep the hairline running continuously. */
|
|
373
275
|
.jp-SideBar .lm-TabBar-tab.lm-mod-current::after {
|
|
374
276
|
border-color: transparent;
|
|
375
277
|
}
|
|
376
278
|
|
|
377
|
-
/* Resting / hover / current fills. */
|
|
378
279
|
.jp-SideBar .lm-TabBar-tab:not(.lm-mod-current),
|
|
379
280
|
#jp-down-stack .lm-TabBar-tab:not(.lm-mod-current) {
|
|
380
281
|
background: transparent;
|
|
@@ -390,7 +291,6 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
390
291
|
background: color-mix(in srgb, var(--jp-ui-font-color1) 4%, transparent);
|
|
391
292
|
}
|
|
392
293
|
|
|
393
|
-
/* Current-tab accent on the strip's outer edge (VS Code activity bar). */
|
|
394
294
|
.jp-SideBar.jp-mod-left .lm-TabBar-tab.lm-mod-current {
|
|
395
295
|
box-shadow: inset 2px 0 0 0 var(--jp-brand-color1);
|
|
396
296
|
}
|
|
@@ -407,7 +307,6 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
407
307
|
box-shadow: inset 0 2px 0 0 var(--jp-brand-color1);
|
|
408
308
|
}
|
|
409
309
|
|
|
410
|
-
/* Muted icons that wake on hover/selection. */
|
|
411
310
|
.jp-SideBar .lm-TabBar-tabIcon.jp-SideBar-tabIcon {
|
|
412
311
|
opacity: 0.7;
|
|
413
312
|
transition: opacity 120ms ease;
|
|
@@ -423,8 +322,6 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
423
322
|
opacity: 1;
|
|
424
323
|
}
|
|
425
324
|
|
|
426
|
-
/* Down-area tab bar: the current tab keeps its stock bordered-box
|
|
427
|
-
mechanics (translateY merge with the panel), on hairlines. */
|
|
428
325
|
#jp-down-stack > .lm-TabBar {
|
|
429
326
|
border-top-color: var(--jp-border-color2);
|
|
430
327
|
border-bottom-color: var(--jp-border-color2);
|
|
@@ -434,21 +331,14 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
434
331
|
border-color: var(--jp-border-color2);
|
|
435
332
|
}
|
|
436
333
|
|
|
437
|
-
/* Stock
|
|
438
|
-
|
|
439
|
-
on the stronger border-color1 in dark themes. */
|
|
334
|
+
/* Stock's first-child current tab has a higher-specificity border-right
|
|
335
|
+
rule; recolor at matching specificity or the seam stays darker. */
|
|
440
336
|
#jp-down-stack > .lm-TabBar .lm-TabBar-tab.lm-mod-current:first-child {
|
|
441
337
|
border-right-color: var(--jp-border-color2);
|
|
442
338
|
}
|
|
443
339
|
|
|
444
|
-
/*
|
|
445
|
-
|
|
446
|
-
* hover that jumps to solid layout-color3, and a solid brand-blue block
|
|
447
|
-
* for the popup-open state. Window surface + hairline, muted text that
|
|
448
|
-
* wakes on hover, translucent fills. The hairline is an inset shadow, not
|
|
449
|
-
* a border: the bar is a border-box .lm-Widget and a border would eat into
|
|
450
|
-
* the 24px height its items fill.
|
|
451
|
-
*/
|
|
340
|
+
/* The status-bar hairline is an inset shadow, not a border — the bar is a
|
|
341
|
+
border-box .lm-Widget and a border would eat into its 24px height. */
|
|
452
342
|
#jp-main-statusbar.jp-StatusBar-Widget {
|
|
453
343
|
background: var(--jp-layout-color1);
|
|
454
344
|
box-shadow: inset 0 1px 0 var(--jp-border-color2);
|
|
@@ -462,8 +352,7 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
462
352
|
color 120ms ease;
|
|
463
353
|
}
|
|
464
354
|
|
|
465
|
-
/* Stock
|
|
466
|
-
item color so hover brightens both together. */
|
|
355
|
+
/* Stock TextItem hardcodes font-color1; inherit so hover brightens both. */
|
|
467
356
|
.jp-StatusBar-Widget .jp-StatusBar-Item .jp-StatusBar-TextItem {
|
|
468
357
|
color: inherit;
|
|
469
358
|
}
|
|
@@ -491,9 +380,8 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
491
380
|
}
|
|
492
381
|
|
|
493
382
|
/* The log-console chip marks its open state with jp-mod-selected (a solid
|
|
494
|
-
brand block
|
|
495
|
-
|
|
496
|
-
the state the same translucent-brand treatment as jp-mod-clicked. */
|
|
383
|
+
brand block in stock); the muting rules above would leave grey text on
|
|
384
|
+
it, so give it the same treatment as jp-mod-clicked. */
|
|
497
385
|
.jp-StatusBar-Widget .jp-StatusBar-Item.jp-mod-selected {
|
|
498
386
|
color: var(--jp-ui-font-color1);
|
|
499
387
|
background-color: color-mix(in srgb, var(--jp-brand-color1) 22%, transparent);
|
|
@@ -503,19 +391,12 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
503
391
|
color: var(--jp-ui-font-color1);
|
|
504
392
|
}
|
|
505
393
|
|
|
506
|
-
/* Status bar hover popups hardcode a Material shadow; fold them into the
|
|
507
|
-
themed ramp so they soften with everything else. */
|
|
508
394
|
.jp-StatusBar-HoverItem {
|
|
509
395
|
box-shadow: var(--jp-elevation-z6);
|
|
510
396
|
}
|
|
511
397
|
|
|
512
|
-
/*
|
|
513
|
-
|
|
514
|
-
* invisible 8px hit area; dock handles between tiled editors are 5px.
|
|
515
|
-
* Stock gives no hover feedback at all. Paint the accent on hover, delayed
|
|
516
|
-
* 150ms so it never flashes while the pointer crosses a boundary (the VS
|
|
517
|
-
* Code sash pattern). Background paint only.
|
|
518
|
-
*/
|
|
398
|
+
/* Hover accent delayed 150ms so it never flashes while the pointer
|
|
399
|
+
crosses a boundary. */
|
|
519
400
|
#jp-main-split-panel > .lm-SplitPanel-handle,
|
|
520
401
|
#jp-main-vsplit-panel > .lm-SplitPanel-handle {
|
|
521
402
|
background-color: transparent;
|
|
@@ -528,8 +409,8 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
528
409
|
transition-delay: 150ms;
|
|
529
410
|
}
|
|
530
411
|
|
|
531
|
-
/* Dock handles are 5px thick; a
|
|
532
|
-
|
|
412
|
+
/* Dock handles are 5px thick; paint a 2px center line on the existing
|
|
413
|
+
::after hit-area overlay instead of a fat solid fill. */
|
|
533
414
|
#jp-main-dock-panel .lm-DockPanel-handle::after {
|
|
534
415
|
opacity: 0;
|
|
535
416
|
transition: opacity 120ms ease;
|
|
@@ -565,35 +446,28 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
565
446
|
|---------------------------------------------------------------------------- */
|
|
566
447
|
|
|
567
448
|
/*
|
|
568
|
-
* Flat
|
|
569
|
-
*
|
|
570
|
-
*
|
|
571
|
-
* Composes with the adaptive tab widths in style/tabs.css (no width/flex/
|
|
572
|
-
* padding here). Doubled classes lift specificity over the stock rules in
|
|
573
|
-
* @jupyterlab/application/style/tabs.css without depending on load order.
|
|
449
|
+
* Flat tab strip. Composes with the adaptive tab widths in style/tabs.css
|
|
450
|
+
* (no width/flex/padding here). Doubled classes lift specificity over the
|
|
451
|
+
* stock rules without depending on load order.
|
|
574
452
|
*/
|
|
575
453
|
|
|
576
|
-
/* The strip
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
.lm-TabPanel-tabBar is the down-area bar, which draws real top/bottom
|
|
581
|
-
borders of its own — the inset baseline would double its bottom seam. */
|
|
454
|
+
/* The strip baseline is an INSET SHADOW, not a border, so the bar height
|
|
455
|
+
Lumino measured is unchanged; the opaque current tab paints over it,
|
|
456
|
+
merging with the toolbar below. Dock tab bars only: the down-area
|
|
457
|
+
.lm-TabPanel-tabBar draws real borders and would double its seam. */
|
|
582
458
|
.lm-DockPanel-tabBar[data-orientation='horizontal'] {
|
|
583
459
|
background: var(--jp-layout-color2);
|
|
584
460
|
box-shadow: inset 0 calc(-1 * var(--jp-border-width)) 0
|
|
585
461
|
var(--jp-border-color2);
|
|
586
462
|
}
|
|
587
463
|
|
|
588
|
-
/*
|
|
589
|
-
|
|
464
|
+
/* Let the strip surface show through the thin tab-strip scrollbar
|
|
465
|
+
(style/tabs.css). */
|
|
590
466
|
.lm-DockPanel-tabBar .lm-TabBar-content::-webkit-scrollbar,
|
|
591
467
|
.lm-DockPanel-tabBar .lm-TabBar-content::-webkit-scrollbar-track {
|
|
592
468
|
background: transparent;
|
|
593
469
|
}
|
|
594
470
|
|
|
595
|
-
/* Inactive tabs: flat on the strip, muted label. border-color transparent
|
|
596
|
-
keeps the stock 1px border in the box model. */
|
|
597
471
|
.lm-DockPanel-tabBar .lm-TabBar-tab.lm-TabBar-tab,
|
|
598
472
|
.lm-TabPanel-tabBar .lm-TabBar-tab.lm-TabBar-tab {
|
|
599
473
|
color: var(--jp-ui-font-color2);
|
|
@@ -604,16 +478,14 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
604
478
|
color 120ms ease;
|
|
605
479
|
}
|
|
606
480
|
|
|
607
|
-
/* The stock per-tab
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
recolor, so the keyboard-focus underline still renders. */
|
|
481
|
+
/* The strip's inset baseline supersedes the stock per-tab hairline. Single
|
|
482
|
+
class on purpose: ties the stock rule (we load later) while staying below
|
|
483
|
+
its :focus-visible recolor, so the keyboard underline still renders. */
|
|
611
484
|
.lm-DockPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current)::after,
|
|
612
485
|
.lm-DockPanel-tabBar .lm-TabBar-addButton::after {
|
|
613
486
|
border-bottom-color: transparent;
|
|
614
487
|
}
|
|
615
488
|
|
|
616
|
-
/* Hover: a soft half-step toward the active surface. */
|
|
617
489
|
.lm-DockPanel-tabBar .lm-TabBar-tab.lm-TabBar-tab:hover:not(.lm-mod-current),
|
|
618
490
|
.lm-TabPanel-tabBar .lm-TabBar-tab.lm-TabBar-tab:hover:not(.lm-mod-current) {
|
|
619
491
|
color: var(--jp-ui-font-color1);
|
|
@@ -624,7 +496,6 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
624
496
|
);
|
|
625
497
|
}
|
|
626
498
|
|
|
627
|
-
/* Current tab: full-contrast surface + hairline sides. */
|
|
628
499
|
.lm-DockPanel-tabBar .lm-TabBar-tab.lm-TabBar-tab.lm-mod-current,
|
|
629
500
|
.lm-TabPanel-tabBar .lm-TabBar-tab.lm-TabBar-tab.lm-mod-current {
|
|
630
501
|
color: var(--jp-ui-font-color1);
|
|
@@ -632,12 +503,7 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
632
503
|
border-color: var(--jp-border-color2);
|
|
633
504
|
}
|
|
634
505
|
|
|
635
|
-
/*
|
|
636
|
-
as-is: it doubles as the tab's separator edge in the flat strip. */
|
|
637
|
-
|
|
638
|
-
/* Inset hairline separators between inactive tabs. Absolutely positioned
|
|
639
|
-
::before, so no layout impact. Current tabs are excluded because their
|
|
640
|
-
::before is the accent indicator. */
|
|
506
|
+
/* Current tabs excluded: their ::before is the accent indicator. */
|
|
641
507
|
.lm-DockPanel-tabBar
|
|
642
508
|
.lm-TabBar-tab
|
|
643
509
|
+ .lm-TabBar-tab:not(.lm-mod-current, .jp-mod-current)::before {
|
|
@@ -650,20 +516,14 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
650
516
|
background: var(--jp-border-color2);
|
|
651
517
|
}
|
|
652
518
|
|
|
653
|
-
/* No separator
|
|
654
|
-
|
|
519
|
+
/* No separator right of the current tab — its contrast edge is the
|
|
520
|
+
separator. Must come after the rule above. */
|
|
655
521
|
.lm-DockPanel-tabBar
|
|
656
522
|
.lm-TabBar-tab.lm-mod-current
|
|
657
523
|
+ .lm-TabBar-tab.lm-TabBar-tab::before {
|
|
658
524
|
content: none;
|
|
659
525
|
}
|
|
660
526
|
|
|
661
|
-
/* A dragged dock tab is always lm-mod-current (Lumino selects the pressed
|
|
662
|
-
tab on pointerdown, and dock tab bars disallow deselect), so the opaque
|
|
663
|
-
current-tab surface above already keeps its label legible during drags. */
|
|
664
|
-
|
|
665
|
-
/* The + button sits on the strip: drop its own layout-color2 box and give
|
|
666
|
-
it a rounded hover chip consistent with toolbar buttons. */
|
|
667
527
|
.lm-DockPanel-tabBar .lm-TabBar-addButton.lm-TabBar-addButton,
|
|
668
528
|
.lm-TabPanel-tabBar .lm-TabBar-addButton.lm-TabBar-addButton {
|
|
669
529
|
background-color: transparent;
|
|
@@ -681,12 +541,10 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
681
541
|
}
|
|
682
542
|
|
|
683
543
|
/*
|
|
684
|
-
*
|
|
685
|
-
*
|
|
686
|
-
*
|
|
687
|
-
*
|
|
688
|
-
* stay stable. Dirty tabs render the unsaved dot inside the close-icon
|
|
689
|
-
* slot and stay at full opacity.
|
|
544
|
+
* Close icon at 45% (not 0 — stays discoverable) until the tab is hovered.
|
|
545
|
+
* The hover chip is background + a 2px spread shadow of the same color, so
|
|
546
|
+
* the icon's box never changes and the adaptive tab widths stay stable.
|
|
547
|
+
* Dirty tabs render the unsaved dot in this slot at full opacity.
|
|
690
548
|
*/
|
|
691
549
|
.lm-DockPanel-tabBar .lm-TabBar-tab.lm-mod-closable > .lm-TabBar-tabCloseIcon {
|
|
692
550
|
opacity: 0.45;
|
|
@@ -723,11 +581,9 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
723
581
|
|---------------------------------------------------------------------------- */
|
|
724
582
|
|
|
725
583
|
/*
|
|
726
|
-
* Toolbar buttons are <jp-button appearance="stealth"> elements;
|
|
727
|
-
* control
|
|
728
|
-
*
|
|
729
|
-
* becomes theme-derived and consistent across every toolbar. The blue
|
|
730
|
-
* new-launcher CTA keeps its own accept-color hover (style/base.css).
|
|
584
|
+
* Toolbar buttons are <jp-button appearance="stealth"> elements; document
|
|
585
|
+
* ::part(control) rules win over the component's internal FAST-palette
|
|
586
|
+
* fills. The blue new-launcher CTA keeps its own hover (style/base.css).
|
|
731
587
|
*/
|
|
732
588
|
.jp-Toolbar .jp-ToolbarButtonComponent::part(control) {
|
|
733
589
|
border-radius: 5px;
|
|
@@ -742,7 +598,7 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
742
598
|
}
|
|
743
599
|
|
|
744
600
|
/* Deprecated plain-button path still used by some extensions: same
|
|
745
|
-
treatment
|
|
601
|
+
treatment over its opaque resting fill. */
|
|
746
602
|
.jp-Toolbar button.jp-ToolbarButtonComponent {
|
|
747
603
|
border-radius: 5px;
|
|
748
604
|
transition: background-color 120ms ease;
|
|
@@ -756,13 +612,20 @@ body[data-jp-theme-light] .lm-cursor-backdrop {
|
|
|
756
612
|
);
|
|
757
613
|
}
|
|
758
614
|
|
|
615
|
+
/*
|
|
616
|
+
* Stock keeps a toolbar with no visible items as an 8px strip. The BoxLayout
|
|
617
|
+
* reserves the CSS min-height even for an undisplayed node, hence both.
|
|
618
|
+
*/
|
|
619
|
+
.jp-MainAreaWidget > .jp-Toolbar.jp-Toolbar-micro {
|
|
620
|
+
display: none;
|
|
621
|
+
min-height: 0;
|
|
622
|
+
}
|
|
623
|
+
|
|
759
624
|
/* -----------------------------------------------------------------------------
|
|
760
625
|
| Controls
|
|
761
626
|
|---------------------------------------------------------------------------- */
|
|
762
627
|
|
|
763
|
-
/*
|
|
764
|
-
that instantly dates the UI. Near-normal tracking, medium weight, and
|
|
765
|
-
the hover ease stock buttons lack. */
|
|
628
|
+
/* Stock dialog buttons ship Material 0.8px letter-spacing. */
|
|
766
629
|
button.jp-mod-styled {
|
|
767
630
|
letter-spacing: 0.2px;
|
|
768
631
|
font-weight: 500;
|
|
@@ -776,19 +639,16 @@ button.jp-ToolbarButtonComponent {
|
|
|
776
639
|
transition: background-color 120ms ease;
|
|
777
640
|
}
|
|
778
641
|
|
|
779
|
-
/* Components that hardcode a radius and would not follow the token
|
|
642
|
+
/* Components that hardcode a radius and would not follow the token. */
|
|
780
643
|
|
|
781
|
-
/* Toolbar dropdowns (kernel switcher, cell type) pin border-radius: 0. */
|
|
782
644
|
.jp-HTMLSelect.jp-DefaultStyle select {
|
|
783
645
|
border-radius: var(--jp-border-radius);
|
|
784
646
|
}
|
|
785
647
|
|
|
786
|
-
/* Flat text buttons (running panel shutdown etc.) hardcode 2px. */
|
|
787
648
|
.jp-Button-flat {
|
|
788
649
|
border-radius: var(--jp-border-radius);
|
|
789
650
|
}
|
|
790
651
|
|
|
791
|
-
/* Stock inputs snap between states instantly. */
|
|
792
652
|
input.jp-mod-styled,
|
|
793
653
|
select.jp-mod-styled,
|
|
794
654
|
.jp-InputGroup input {
|
|
@@ -798,7 +658,6 @@ select.jp-mod-styled,
|
|
|
798
658
|
background-color 120ms ease;
|
|
799
659
|
}
|
|
800
660
|
|
|
801
|
-
/* Stock switches animate at a floaty 0.4s; tighten. */
|
|
802
661
|
.jp-switch-track {
|
|
803
662
|
transition: background-color 150ms ease;
|
|
804
663
|
}
|
|
@@ -812,15 +671,10 @@ select.jp-mod-styled,
|
|
|
812
671
|
|---------------------------------------------------------------------------- */
|
|
813
672
|
|
|
814
673
|
/*
|
|
815
|
-
*
|
|
816
|
-
*
|
|
817
|
-
*
|
|
818
|
-
*
|
|
819
|
-
* deterministic specificity bump over the stock .lm-Menu rules.
|
|
820
|
-
*
|
|
821
|
-
* The 5px side padding insets the item highlight macOS-style. Lumino
|
|
822
|
-
* measures the menu node after attach and before positioning, so the
|
|
823
|
-
* wider box is fully accounted for in its placement math.
|
|
674
|
+
* Every JupyterLab menu carries .jp-ThemedContainer (MenuSvg adds it) — a
|
|
675
|
+
* deterministic specificity bump over the stock .lm-Menu rules. Lumino
|
|
676
|
+
* measures the menu node after attach and before positioning, so the 5px
|
|
677
|
+
* side padding is fully accounted for in its placement math.
|
|
824
678
|
*/
|
|
825
679
|
.lm-Menu.jp-ThemedContainer {
|
|
826
680
|
padding: 4px 5px;
|
|
@@ -828,33 +682,25 @@ select.jp-mod-styled,
|
|
|
828
682
|
border-color: color-mix(in srgb, var(--jp-border-color1) 55%, transparent);
|
|
829
683
|
}
|
|
830
684
|
|
|
831
|
-
/* Detach
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
a dropdown tall enough to hit the viewport bottom extends 3px past it —
|
|
835
|
-
only its bottom rounding is lost, and only on overfull menus. */
|
|
685
|
+
/* Detach dropdowns (stock pulls them up 2px to fuse with the bar). Lumino's
|
|
686
|
+
max-height math doesn't know about this offset, so an overfull menu runs
|
|
687
|
+
3px past the viewport bottom — only its bottom rounding is lost. */
|
|
836
688
|
.lm-Menu.lm-MenuBar-menu.jp-ThemedContainer {
|
|
837
689
|
top: 3px;
|
|
838
690
|
}
|
|
839
691
|
|
|
840
|
-
/*
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
elements whose boxes do not span the row (the icon cell is 0px tall).
|
|
844
|
-
The menu's 5px side padding keeps the highlight inset from the panel
|
|
845
|
-
edge; rounding is forfeited because border-radius does not render on
|
|
846
|
-
table rows. */
|
|
692
|
+
/* Painted on the row: per-cell painting breaks because MenuSvg swaps the
|
|
693
|
+
icon and caret cells for inline-block boxes that do not span the row.
|
|
694
|
+
border-radius does not render on table rows, so rounding is forfeited. */
|
|
847
695
|
.lm-Menu.jp-ThemedContainer .lm-Menu-item.lm-mod-active {
|
|
848
696
|
background: color-mix(in srgb, var(--jp-ui-font-color1) 8%, transparent);
|
|
849
697
|
}
|
|
850
698
|
|
|
851
|
-
/* Muted shortcut hints, like every modern menu. */
|
|
852
699
|
.lm-Menu.jp-ThemedContainer .lm-Menu-itemShortcut {
|
|
853
700
|
color: var(--jp-ui-font-color3);
|
|
854
701
|
}
|
|
855
702
|
|
|
856
|
-
/* Stock separators multiply
|
|
857
|
-
muddy on dark themes. Plain theme hairline instead. */
|
|
703
|
+
/* Stock separators multiply (mix-blend-mode) and go muddy on dark themes. */
|
|
858
704
|
.lm-Menu.jp-ThemedContainer .lm-Menu-item[data-type='separator'] > div::after {
|
|
859
705
|
border-top-color: var(--jp-border-color2);
|
|
860
706
|
mix-blend-mode: normal;
|
|
@@ -864,8 +710,8 @@ select.jp-mod-styled,
|
|
|
864
710
|
| Command palette
|
|
865
711
|
|---------------------------------------------------------------------------- */
|
|
866
712
|
|
|
867
|
-
/* The
|
|
868
|
-
|
|
713
|
+
/* The edge is a shadow ring, not a border, so the CSS-positioned panel's
|
|
714
|
+
size is unchanged. */
|
|
869
715
|
.jp-ModalCommandPalette.jp-ThemedContainer {
|
|
870
716
|
border-radius: 10px;
|
|
871
717
|
overflow: hidden;
|
|
@@ -875,14 +721,10 @@ select.jp-mod-styled,
|
|
|
875
721
|
0 16px 48px -12px var(--jp-shadow-umbra-color);
|
|
876
722
|
}
|
|
877
723
|
|
|
878
|
-
/* Rounded search field (keeps stock's inset border + focus treatment). */
|
|
879
724
|
.jp-ModalCommandPalette .lm-CommandPalette-wrapper {
|
|
880
725
|
border-radius: 6px;
|
|
881
726
|
}
|
|
882
727
|
|
|
883
|
-
/* Result rows: stock already insets them 4px in the modal variant.
|
|
884
|
-
(Section headers need no treatment: stock hides them entirely in the
|
|
885
|
-
modal palette.) */
|
|
886
728
|
.jp-ModalCommandPalette .lm-CommandPalette .lm-CommandPalette-item {
|
|
887
729
|
border-radius: 6px;
|
|
888
730
|
transition: background-color 120ms ease-out;
|
|
@@ -892,9 +734,6 @@ select.jp-mod-styled,
|
|
|
892
734
|
| Dialogs
|
|
893
735
|
|---------------------------------------------------------------------------- */
|
|
894
736
|
|
|
895
|
-
/* Dialog card: top of the radius scale, hairline ring for edge definition
|
|
896
|
-
on dark themes, soft themed elevation. The content node already clips
|
|
897
|
-
children with overflow: hidden. */
|
|
898
737
|
.jp-Dialog.jp-ThemedContainer .jp-Dialog-content {
|
|
899
738
|
border-radius: 12px;
|
|
900
739
|
box-shadow:
|
|
@@ -902,14 +741,11 @@ select.jp-mod-styled,
|
|
|
902
741
|
var(--jp-elevation-z20);
|
|
903
742
|
}
|
|
904
743
|
|
|
905
|
-
/* Smaller + semibold beats big-and-thin (stock is size3 / weight 400). */
|
|
906
744
|
.jp-Dialog.jp-ThemedContainer .jp-Dialog-header {
|
|
907
745
|
font-size: var(--jp-ui-font-size2);
|
|
908
746
|
font-weight: 600;
|
|
909
747
|
}
|
|
910
748
|
|
|
911
|
-
/* Frost the scrim slightly so the dialog pops without a darker tint.
|
|
912
|
-
Progressive enhancement over the theme's --jp-dialog-background. */
|
|
913
749
|
@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {
|
|
914
750
|
.jp-Dialog.jp-ThemedContainer {
|
|
915
751
|
-webkit-backdrop-filter: blur(3px);
|
|
@@ -921,10 +757,6 @@ select.jp-mod-styled,
|
|
|
921
757
|
| Completer and tooltip
|
|
922
758
|
|---------------------------------------------------------------------------- */
|
|
923
759
|
|
|
924
|
-
/* Same popover recipe as menus, but NOT frosted: translucency over code
|
|
925
|
-
hurts scan-reading of completions. The completer's JS sizing sets inline
|
|
926
|
-
width/max-height; radius and border-color change nothing it measures,
|
|
927
|
-
and overflow: hidden only clips paint (both children scroll internally). */
|
|
928
760
|
.jp-Completer.jp-ThemedContainer {
|
|
929
761
|
border-radius: 8px;
|
|
930
762
|
overflow: hidden;
|
|
@@ -940,10 +772,6 @@ select.jp-mod-styled,
|
|
|
940
772
|
| Document search overlay
|
|
941
773
|
|---------------------------------------------------------------------------- */
|
|
942
774
|
|
|
943
|
-
/* The find/replace overlay drops in as a hard-cornered flap with a
|
|
944
|
-
full-strength bordered input. Round its one exposed corner, float it on
|
|
945
|
-
the themed elevation ramp, and give the fields the app-wide soft-border
|
|
946
|
-
+ focus-ring treatment. */
|
|
947
775
|
.jp-DocumentSearch-overlay {
|
|
948
776
|
border-bottom-left-radius: 8px;
|
|
949
777
|
border-color: var(--jp-border-color2);
|
|
@@ -977,10 +805,6 @@ select.jp-mod-styled,
|
|
|
977
805
|
| Drag and drop
|
|
978
806
|
|---------------------------------------------------------------------------- */
|
|
979
807
|
|
|
980
|
-
/* Drop-zone overlay: stock hardcodes a Material-blue tint that ignores the
|
|
981
|
-
active theme, with a dashed marquee border. Soft brand wash, solid
|
|
982
|
-
hairline, rounded. The overlay is an absolutely positioned
|
|
983
|
-
pointer-events:none node whose geometry Lumino sets inline. */
|
|
984
808
|
.lm-DockPanel-overlay {
|
|
985
809
|
background: color-mix(in srgb, var(--jp-brand-color1) 10%, transparent);
|
|
986
810
|
border: var(--jp-border-width) solid
|
|
@@ -997,9 +821,6 @@ select.jp-mod-styled,
|
|
|
997
821
|
border-width: var(--jp-border-width);
|
|
998
822
|
}
|
|
999
823
|
|
|
1000
|
-
/* Drag ghosts (cursor-following overlay nodes attached to body): one
|
|
1001
|
-
rounded-card language instead of the stock brand top-border on tab
|
|
1002
|
-
ghosts and hardcoded black shadows on cell ghosts. */
|
|
1003
824
|
.lm-TabBar-tab.lm-mod-drag-image.lm-mod-drag-image {
|
|
1004
825
|
border-color: var(--jp-border-color2);
|
|
1005
826
|
border-radius: 6px;
|
|
@@ -1027,31 +848,24 @@ select.jp-mod-styled,
|
|
|
1027
848
|
| Notebook cells and content
|
|
1028
849
|
|---------------------------------------------------------------------------- */
|
|
1029
850
|
|
|
1030
|
-
/* Rounded code-cell editor. Stock forces border-radius: 0; the element
|
|
1031
|
-
already has overflow: hidden, so the radius clips the CodeMirror
|
|
1032
|
-
background and active-line highlight cleanly. Console prompt cells share
|
|
1033
|
-
the class. */
|
|
1034
851
|
.jp-InputArea-editor {
|
|
1035
852
|
border-radius: 6px;
|
|
1036
853
|
}
|
|
1037
854
|
|
|
1038
|
-
/* Rendered markdown cells carry a border when active; match. */
|
|
1039
855
|
.jp-MarkdownOutput {
|
|
1040
856
|
border-radius: 6px;
|
|
1041
857
|
}
|
|
1042
858
|
|
|
1043
|
-
/* The Property-Inspector active-cell preview uses the same surface. */
|
|
1044
859
|
.jp-ActiveCellTool .jp-ActiveCellTool-CellContent {
|
|
1045
860
|
border-radius: 6px;
|
|
1046
861
|
}
|
|
1047
862
|
|
|
1048
|
-
/* Command-mode focus ring joins the radius scale. */
|
|
1049
863
|
.jp-Notebook.jp-mod-commandMode .jp-Cell.jp-mod-active:focus-visible {
|
|
1050
864
|
border-radius: 6px;
|
|
1051
865
|
}
|
|
1052
866
|
|
|
1053
|
-
/* The 8px
|
|
1054
|
-
--jp-cell-collapser-width)
|
|
867
|
+
/* The 8px collapser becomes a full pill (radius = half
|
|
868
|
+
--jp-cell-collapser-width). */
|
|
1055
869
|
.jp-Collapser {
|
|
1056
870
|
border-radius: 4px;
|
|
1057
871
|
transition:
|
|
@@ -1059,8 +873,6 @@ select.jp-mod-styled,
|
|
|
1059
873
|
opacity 120ms ease;
|
|
1060
874
|
}
|
|
1061
875
|
|
|
1062
|
-
/* Calmer collapser hover: translucent brand instead of Material elevation
|
|
1063
|
-
+ opacity flicker. */
|
|
1064
876
|
.jp-Notebook .jp-Cell .jp-Collapser:hover {
|
|
1065
877
|
opacity: 1;
|
|
1066
878
|
background: color-mix(in srgb, var(--jp-brand-color1) 55%, transparent);
|
|
@@ -1071,11 +883,9 @@ select.jp-mod-styled,
|
|
|
1071
883
|
background: var(--jp-brand-color1);
|
|
1072
884
|
}
|
|
1073
885
|
|
|
1074
|
-
/*
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
prompt column width is untouched. Markdown cells keep their own
|
|
1078
|
-
higher-specificity font-size from stock. */
|
|
886
|
+
/* Prompts two steps smaller with tabular figures (no [9]->[10] jitter);
|
|
887
|
+
the line box is pinned to one code line so the smaller text stays
|
|
888
|
+
aligned with the first code line. */
|
|
1079
889
|
.jp-InputPrompt,
|
|
1080
890
|
.jp-OutputPrompt {
|
|
1081
891
|
font-size: calc(var(--jp-code-font-size) - 2px);
|
|
@@ -1083,8 +893,6 @@ select.jp-mod-styled,
|
|
|
1083
893
|
font-variant-numeric: tabular-nums;
|
|
1084
894
|
}
|
|
1085
895
|
|
|
1086
|
-
/* Output-collapse hover overlay: drop the harsh inset inverse hairline,
|
|
1087
|
-
join the radius scale. */
|
|
1088
896
|
.jp-OutputArea-promptOverlay {
|
|
1089
897
|
border-radius: 6px;
|
|
1090
898
|
}
|
|
@@ -1094,8 +902,6 @@ select.jp-mod-styled,
|
|
|
1094
902
|
box-shadow: none;
|
|
1095
903
|
}
|
|
1096
904
|
|
|
1097
|
-
/* Markdown blockquote: hairline accent instead of the heavy 5px grey slab,
|
|
1098
|
-
quoted text stepped down to the secondary content color. */
|
|
1099
905
|
.jp-RenderedHTMLCommon blockquote {
|
|
1100
906
|
color: var(--jp-content-font-color2);
|
|
1101
907
|
border-left: 3px solid var(--jp-border-color1);
|
|
@@ -1105,11 +911,9 @@ select.jp-mod-styled,
|
|
|
1105
911
|
| Terminal
|
|
1106
912
|
|---------------------------------------------------------------------------- */
|
|
1107
913
|
|
|
1108
|
-
/* The terminal
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
modes mirror the #fff/#000 the xterm theme hardcodes (they key off the
|
|
1112
|
-
terminal's own theme setting, not the app theme). */
|
|
914
|
+
/* The terminal paints no background of its own, so the 8px body padding
|
|
915
|
+
shows the dock surface. 'inherit' reads --jp-layout-color0 in JS; the
|
|
916
|
+
forced modes mirror the #fff/#000 the xterm theme hardcodes. */
|
|
1113
917
|
.jp-Terminal[data-term-theme='inherit'] {
|
|
1114
918
|
background: var(--jp-layout-color0);
|
|
1115
919
|
}
|
|
@@ -1127,17 +931,15 @@ select.jp-mod-styled,
|
|
|
1127
931
|
|---------------------------------------------------------------------------- */
|
|
1128
932
|
|
|
1129
933
|
/*
|
|
1130
|
-
* The signature: transient surfaces frost over the workspace
|
|
1131
|
-
*
|
|
1132
|
-
*
|
|
1133
|
-
*
|
|
1134
|
-
*
|
|
1135
|
-
* (readability over code) and dialogs (content surfaces stay solid).
|
|
934
|
+
* The signature: transient surfaces frost over the workspace. Progressive
|
|
935
|
+
* enhancement — without backdrop-filter the stock opaque backgrounds
|
|
936
|
+
* remain. Chromium clips backdrop-filter to border-radius automatically.
|
|
937
|
+
* Deliberately excludes the completer (readability over code) and dialogs
|
|
938
|
+
* (content surfaces stay solid).
|
|
1136
939
|
*/
|
|
1137
940
|
@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {
|
|
1138
|
-
/*
|
|
1139
|
-
|
|
1140
|
-
on menus taller than the viewport — acceptable loss. */
|
|
941
|
+
/* The `background` shorthand also clears the dropdown scroll-hint
|
|
942
|
+
gradients (menus taller than the viewport) — acceptable loss. */
|
|
1141
943
|
.lm-Menu.jp-ThemedContainer,
|
|
1142
944
|
.lm-MenuBar-menu.jp-ThemedContainer {
|
|
1143
945
|
background: color-mix(in srgb, var(--jp-layout-color0) 72%, transparent);
|
|
@@ -1151,8 +953,6 @@ select.jp-mod-styled,
|
|
|
1151
953
|
backdrop-filter: blur(24px) saturate(140%);
|
|
1152
954
|
}
|
|
1153
955
|
|
|
1154
|
-
/* Let the frost show through the palette's opaque inner layers (the
|
|
1155
|
-
input field keeps its own --jp-input-active-background). */
|
|
1156
956
|
.jp-ModalCommandPalette .lm-CommandPalette,
|
|
1157
957
|
.jp-ModalCommandPalette .lm-CommandPalette-search,
|
|
1158
958
|
.jp-ModalCommandPalette .lm-CommandPalette-content {
|