@jupyterlab/application 4.6.0-alpha.5 → 4.6.0-beta.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.
package/src/status.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  // Copyright (c) Jupyter Development Team.
2
2
  // Distributed under the terms of the Modified BSD License.
3
-
4
3
  import type { IDisposable } from '@lumino/disposable';
5
4
  import { DisposableDelegate } from '@lumino/disposable';
6
5
  import type { ISignal } from '@lumino/signaling';
@@ -15,7 +14,7 @@ export class LabStatus implements ILabStatus {
15
14
  /**
16
15
  * Construct a new status object.
17
16
  */
18
- constructor(app: JupyterFrontEnd<any, any>) {
17
+ constructor(app: JupyterFrontEnd) {
19
18
  this._busySignal = new Signal(app);
20
19
  this._dirtySignal = new Signal(app);
21
20
  }
package/src/tokens.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  // Copyright (c) Jupyter Development Team.
2
2
  // Distributed under the terms of the Modified BSD License.
3
-
4
3
  import type { ServerConnection, ServiceManager } from '@jupyterlab/services';
5
4
  import type { ITranslator } from '@jupyterlab/translation';
6
5
  import type { CommandRegistry } from '@lumino/commands';
@@ -52,12 +51,12 @@ export interface ILabStatus {
52
51
  /**
53
52
  * A signal for when application changes its busy status.
54
53
  */
55
- readonly busySignal: ISignal<JupyterFrontEnd<any, any>, boolean>;
54
+ readonly busySignal: ISignal<JupyterFrontEnd, boolean>;
56
55
 
57
56
  /**
58
57
  * A signal for when application changes its dirty status.
59
58
  */
60
- readonly dirtySignal: ISignal<JupyterFrontEnd<any, any>, boolean>;
59
+ readonly dirtySignal: ISignal<JupyterFrontEnd, boolean>;
61
60
 
62
61
  /**
63
62
  * Whether the application is busy.
package/src/utils.ts CHANGED
@@ -2,6 +2,7 @@
2
2
  * Copyright (c) Jupyter Development Team.
3
3
  * Distributed under the terms of the Modified BSD License.
4
4
  */
5
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
6
 
6
7
  import { SemanticCommand } from '@jupyterlab/apputils';
7
8
  import type { TranslationBundle } from '@jupyterlab/translation';
package/style/buttons.css CHANGED
@@ -23,7 +23,9 @@
23
23
  }
24
24
 
25
25
  .jp-ThemedContainer button:focus-visible {
26
- outline: 2px solid var(--accent-fill-focus, var(--jp-brand-color1));
26
+ outline-width: var(--jp-focus-outline-width);
27
+ outline-color: var(--jp-focus-outline-color);
28
+ outline-style: solid;
27
29
  outline-offset: -1px;
28
30
  }
29
31
 
@@ -42,7 +44,9 @@ button.jp-mod-styled.jp-mod-accept:active {
42
44
  }
43
45
 
44
46
  button.jp-mod-styled.jp-mod-accept:focus-visible {
45
- outline: 1px solid var(--jp-accept-color-active, var(--jp-brand-color1));
47
+ outline-width: var(--jp-focus-outline-width);
48
+ outline-color: var(--jp-accept-color-active, var(--jp-focus-outline-color));
49
+ outline-style: solid;
46
50
  }
47
51
 
48
52
  button.jp-mod-styled.jp-mod-reject {
@@ -60,7 +64,9 @@ button.jp-mod-styled.jp-mod-reject:active {
60
64
  }
61
65
 
62
66
  button.jp-mod-styled.jp-mod-reject:focus-visible {
63
- outline: 1px solid var(--jp-reject-color-active, var(--md-grey-700, #616161));
67
+ outline-width: var(--jp-focus-outline-width);
68
+ outline-color: var(--jp-reject-color-active, var(--md-grey-700, #616161));
69
+ outline-style: solid;
64
70
  }
65
71
 
66
72
  button.jp-mod-styled.jp-mod-warn {
@@ -78,7 +84,9 @@ button.jp-mod-styled.jp-mod-warn:active {
78
84
  }
79
85
 
80
86
  button.jp-mod-styled.jp-mod-warn:focus-visible {
81
- outline: 1px solid var(--jp-warn-color-active, var(--md-red-700, #d32f2f));
87
+ outline-width: var(--jp-focus-outline-width);
88
+ outline-color: var(--jp-warn-color-active, var(--md-red-700, #d32f2f));
89
+ outline-style: solid;
82
90
  }
83
91
 
84
92
  .jp-Button-flat {
@@ -13,12 +13,16 @@
13
13
 
14
14
  .lm-DockPanel-widget,
15
15
  .lm-TabPanel-stackedPanel {
16
- background: var(--jp-layout-color0);
17
16
  border-left: var(--jp-border-width) solid var(--jp-border-color1);
18
17
  border-right: var(--jp-border-width) solid var(--jp-border-color1);
19
18
  border-bottom: var(--jp-border-width) solid var(--jp-border-color1);
20
19
  }
21
20
 
21
+ :where(.lm-DockPanel-widget),
22
+ .lm-TabPanel-stackedPanel {
23
+ background: var(--jp-layout-color0);
24
+ }
25
+
22
26
  .lm-DockPanel-overlay {
23
27
  background: rgba(33, 150, 243, 0.1);
24
28
  border: var(--jp-border-width) dashed var(--jp-brand-color1);
package/style/menus.css CHANGED
@@ -85,18 +85,26 @@
85
85
  }
86
86
 
87
87
  .lm-MenuBar:focus-visible {
88
- outline: 1px solid var(--jp-accept-color-active, var(--jp-brand-color1));
88
+ outline-width: var(--jp-focus-outline-width);
89
+ outline-color: var(--jp-accept-color-active, var(--jp-focus-outline-color));
90
+ outline-style: solid;
89
91
  outline-offset: -1px;
90
92
  }
91
93
 
92
94
  .lm-MenuBar-menu:focus-visible,
93
- .lm-MenuBar-item:focus-visible,
94
95
  .lm-Menu-item:focus-visible {
95
96
  outline: unset;
96
97
  outline-offset: unset;
97
98
  -moz-outline-radius: unset;
98
99
  }
99
100
 
101
+ .lm-MenuBar-item:focus-visible {
102
+ outline-width: var(--jp-focus-outline-width);
103
+ outline-color: var(--jp-focus-outline-color);
104
+ outline-style: solid;
105
+ outline-offset: -2px;
106
+ }
107
+
100
108
  .lm-MenuBar-item.lm-mod-active {
101
109
  background: var(--jp-layout-color2);
102
110
  }
@@ -52,90 +52,131 @@
52
52
 
53
53
  /*
54
54
  * Lumino
55
+ *
56
+ * The Lumino scrollbar (used by every DataGrid — CSV viewer, Debugger
57
+ * Variables panel, …) is themed via the shared scrollbar variables.
58
+ * Fallbacks equal the previous hardcoded values, so themes that do not
59
+ * define `--jp-scrollbar-*` (the default light theme) are unchanged at
60
+ * rest. Hover/active blend towards `--jp-ui-font-color1` (dark in the
61
+ * light theme, light in the dark themes) with `color-mix` so the
62
+ * feedback stays visible in every theme. See issue #18797.
55
63
  */
56
- /* stylelint-disable declaration-property-value-allowed-list */
57
64
  .lm-ScrollBar[data-orientation='horizontal'] {
58
65
  min-height: 16px;
59
66
  max-height: 16px;
60
67
  min-width: 45px;
61
- border-top: 1px solid #a0a0a0;
68
+ border-top: 1px solid var(--jp-border-color1);
62
69
  }
63
70
 
64
71
  .lm-ScrollBar[data-orientation='vertical'] {
65
72
  min-width: 16px;
66
73
  max-width: 16px;
67
74
  min-height: 45px;
68
- border-left: 1px solid #a0a0a0;
75
+ border-left: 1px solid var(--jp-border-color1);
69
76
  }
70
77
 
71
78
  .lm-ScrollBar-button {
72
- background-color: #f0f0f0;
73
- background-position: center center;
79
+ position: relative;
80
+ background-color: var(--jp-scrollbar-background-color, #f0f0f0);
74
81
  min-height: 15px;
75
82
  max-height: 15px;
76
83
  min-width: 15px;
77
84
  max-width: 15px;
78
85
  }
79
86
 
87
+ /*
88
+ * The caret SVGs have a fixed fill, so render them as a theme-aware
89
+ * mask tinted with --jp-ui-font-color1 (light in the dark themes, dark
90
+ * in the light theme) rather than a fixed-colour background image, so
91
+ * the arrows keep enough contrast in every theme.
92
+ */
93
+ .lm-ScrollBar-button::before {
94
+ content: '';
95
+ position: absolute;
96
+ inset: 0;
97
+ background-color: var(--jp-ui-font-color1);
98
+ -webkit-mask-position: center;
99
+ mask-position: center;
100
+ -webkit-mask-repeat: no-repeat;
101
+ mask-repeat: no-repeat;
102
+ -webkit-mask-size: 17px;
103
+ mask-size: 17px;
104
+ }
105
+
80
106
  .lm-ScrollBar-button:hover {
81
- background-color: #dadada;
107
+ background-color: color-mix(
108
+ in srgb,
109
+ var(--jp-scrollbar-background-color, #f0f0f0) 86%,
110
+ var(--jp-ui-font-color1) 14%
111
+ );
82
112
  }
83
113
 
84
114
  .lm-ScrollBar-button.lm-mod-active {
85
- background-color: #cdcdcd;
115
+ background-color: color-mix(
116
+ in srgb,
117
+ var(--jp-scrollbar-background-color, #f0f0f0) 74%,
118
+ var(--jp-ui-font-color1) 26%
119
+ );
86
120
  }
87
121
 
88
122
  .lm-ScrollBar-track {
89
- background: #f0f0f0;
123
+ background: var(--jp-scrollbar-background-color, #f0f0f0);
90
124
  }
91
125
 
92
126
  .lm-ScrollBar-thumb {
93
- background: #cdcdcd;
127
+ background: rgb(var(--jp-scrollbar-thumb-color, 205, 205, 205));
94
128
  }
95
129
 
96
130
  .lm-ScrollBar-thumb:hover {
97
- background: #bababa;
131
+ background: color-mix(
132
+ in srgb,
133
+ rgb(var(--jp-scrollbar-thumb-color, 205, 205, 205)) 78%,
134
+ var(--jp-ui-font-color1) 22%
135
+ );
98
136
  }
99
137
 
100
138
  .lm-ScrollBar-thumb.lm-mod-active {
101
- background: #a0a0a0;
139
+ background: color-mix(
140
+ in srgb,
141
+ rgb(var(--jp-scrollbar-thumb-color, 205, 205, 205)) 62%,
142
+ var(--jp-ui-font-color1) 38%
143
+ );
102
144
  }
103
145
 
104
146
  .lm-ScrollBar[data-orientation='horizontal'] .lm-ScrollBar-thumb {
105
147
  height: 100%;
106
148
  min-width: 15px;
107
- border-left: 1px solid #a0a0a0;
108
- border-right: 1px solid #a0a0a0;
149
+ border-left: 1px solid var(--jp-border-color1);
150
+ border-right: 1px solid var(--jp-border-color1);
109
151
  }
110
152
 
111
153
  .lm-ScrollBar[data-orientation='vertical'] .lm-ScrollBar-thumb {
112
154
  width: 100%;
113
155
  min-height: 15px;
114
- border-top: 1px solid #a0a0a0;
115
- border-bottom: 1px solid #a0a0a0;
156
+ border-top: 1px solid var(--jp-border-color1);
157
+ border-bottom: 1px solid var(--jp-border-color1);
116
158
  }
117
- /* stylelint-enable declaration-property-value-allowed-list */
118
159
 
119
160
  .lm-ScrollBar[data-orientation='horizontal']
120
- .lm-ScrollBar-button[data-action='decrement'] {
121
- background-image: var(--jp-icon-caret-left);
122
- background-size: 17px;
161
+ .lm-ScrollBar-button[data-action='decrement']::before {
162
+ -webkit-mask-image: var(--jp-icon-caret-left);
163
+ mask-image: var(--jp-icon-caret-left);
123
164
  }
124
165
 
125
166
  .lm-ScrollBar[data-orientation='horizontal']
126
- .lm-ScrollBar-button[data-action='increment'] {
127
- background-image: var(--jp-icon-caret-right);
128
- background-size: 17px;
167
+ .lm-ScrollBar-button[data-action='increment']::before {
168
+ -webkit-mask-image: var(--jp-icon-caret-right);
169
+ mask-image: var(--jp-icon-caret-right);
129
170
  }
130
171
 
131
172
  .lm-ScrollBar[data-orientation='vertical']
132
- .lm-ScrollBar-button[data-action='decrement'] {
133
- background-image: var(--jp-icon-caret-up);
134
- background-size: 17px;
173
+ .lm-ScrollBar-button[data-action='decrement']::before {
174
+ -webkit-mask-image: var(--jp-icon-caret-up);
175
+ mask-image: var(--jp-icon-caret-up);
135
176
  }
136
177
 
137
178
  .lm-ScrollBar[data-orientation='vertical']
138
- .lm-ScrollBar-button[data-action='increment'] {
139
- background-image: var(--jp-icon-caret-down);
140
- background-size: 17px;
179
+ .lm-ScrollBar-button[data-action='increment']::before {
180
+ -webkit-mask-image: var(--jp-icon-caret-down);
181
+ mask-image: var(--jp-icon-caret-down);
141
182
  }
@@ -9,6 +9,15 @@
9
9
 
10
10
  :root {
11
11
  --jp-private-sidebar-tab-width: 32px;
12
+ --jp-private-sidebar-tab-horizontal-height: 28px;
13
+ --jp-private-sidebar-tab-horizontal-scrollbar-height: 4px;
14
+ --jp-private-sidebar-tab-horizontal-padding: 16px;
15
+
16
+ /* Icon (20px, see `.jp-SideBar-tabIcon`) + horizontal padding on both
17
+ sides — below this a horizontal tab clips its icon. */
18
+ --jp-private-sidebar-tab-horizontal-min-width: calc(
19
+ 20px + 2 * var(--jp-private-sidebar-tab-horizontal-padding)
20
+ );
12
21
  }
13
22
 
14
23
  /*-----------------------------------------------------------------------------
@@ -29,13 +38,26 @@
29
38
  overflow: visible;
30
39
  }
31
40
 
32
- .jp-SideBar.lm-TabBar {
41
+ .jp-SideBar.lm-TabBar[data-orientation='vertical'] {
33
42
  min-width: calc(var(--jp-private-sidebar-tab-width) + var(--jp-border-width));
34
43
  max-width: calc(var(--jp-private-sidebar-tab-width) + var(--jp-border-width));
35
44
  display: block;
36
45
  }
37
46
 
38
- .jp-SideBar .lm-TabBar-content {
47
+ .jp-SideBar.lm-TabBar[data-orientation='horizontal'] {
48
+ min-height: calc(
49
+ var(--jp-private-sidebar-tab-horizontal-height) +
50
+ var(--jp-private-sidebar-tab-horizontal-scrollbar-height) +
51
+ var(--jp-border-width)
52
+ );
53
+ max-height: calc(
54
+ var(--jp-private-sidebar-tab-horizontal-height) +
55
+ var(--jp-private-sidebar-tab-horizontal-scrollbar-height) +
56
+ var(--jp-border-width)
57
+ );
58
+ }
59
+
60
+ .jp-SideBar[data-orientation='vertical'] .lm-TabBar-content {
39
61
  margin: 0;
40
62
  padding: 0;
41
63
  display: flex;
@@ -44,7 +66,46 @@
44
66
  height: var(--jp-private-sidebar-tab-width);
45
67
  }
46
68
 
47
- .jp-SideBar .lm-TabBar-tab {
69
+ .jp-SideBar[data-orientation='horizontal'] .lm-TabBar-content {
70
+ margin: 0;
71
+ padding: 0;
72
+ display: flex;
73
+ align-items: stretch;
74
+ list-style-type: none;
75
+ height: 100%;
76
+ width: 100%;
77
+
78
+ /* Scroll horizontally on overflow with the same tiny scrollbar styling used
79
+ elsewhere in the application. Reserve the gutter to avoid shifting tabs
80
+ when the scrollbar appears. */
81
+ overflow-x: auto;
82
+ overflow-y: hidden;
83
+ scrollbar-color: rgba(var(--jp-scrollbar-thumb-color), 0.5) transparent;
84
+ scrollbar-gutter: stable;
85
+ scrollbar-width: thin;
86
+ }
87
+
88
+ .jp-SideBar[data-orientation='horizontal']
89
+ .lm-TabBar-content::-webkit-scrollbar,
90
+ .jp-SideBar[data-orientation='horizontal']
91
+ .lm-TabBar-content::-webkit-scrollbar-corner {
92
+ background-color: transparent;
93
+ height: var(--jp-private-sidebar-tab-horizontal-scrollbar-height);
94
+ width: var(--jp-private-sidebar-tab-horizontal-scrollbar-height);
95
+ }
96
+
97
+ .jp-SideBar[data-orientation='horizontal']
98
+ .lm-TabBar-content::-webkit-scrollbar-thumb {
99
+ background: rgba(var(--jp-scrollbar-thumb-color), 0.5);
100
+ }
101
+
102
+ .jp-SideBar[data-orientation='horizontal']
103
+ .lm-TabBar-content::-webkit-scrollbar-track:horizontal {
104
+ border-left: 0 solid transparent;
105
+ border-right: 0 solid transparent;
106
+ }
107
+
108
+ .jp-SideBar[data-orientation='vertical'] .lm-TabBar-tab {
48
109
  padding: 16px 0;
49
110
  border: none;
50
111
  overflow: visible;
@@ -52,9 +113,23 @@
52
113
  position: relative;
53
114
  }
54
115
 
116
+ .jp-SideBar[data-orientation='horizontal'] .lm-TabBar-tab {
117
+ padding: 0 var(--jp-private-sidebar-tab-horizontal-padding);
118
+ border: none;
119
+ overflow: visible;
120
+ flex-direction: row;
121
+ align-items: center;
122
+ position: relative;
123
+
124
+ /* Floor at icon + padding so tabs can't shrink to clip the icon;
125
+ beyond that, overflow scroll on `.lm-TabBar-content` takes over. */
126
+ min-width: var(--jp-private-sidebar-tab-horizontal-min-width);
127
+ }
128
+
55
129
  .jp-SideBar .lm-TabBar-tab:focus-visible {
56
- /* --accent-fill-focus is computed by the jp toolkit to ensure accessibility */
57
- outline: 2px solid var(--accent-fill-focus, var(--jp-brand-color1));
130
+ outline-color: var(--jp-focus-outline-color);
131
+ outline-width: var(--jp-focus-outline-width);
132
+ outline-style: solid;
58
133
  outline-offset: -3px;
59
134
  }
60
135
 
@@ -84,10 +159,14 @@
84
159
  background-position: center;
85
160
  }
86
161
 
87
- .jp-SideBar .lm-TabBar-tabLabel {
162
+ .jp-SideBar[data-orientation='vertical'] .lm-TabBar-tabLabel {
88
163
  line-height: var(--jp-private-sidebar-tab-width);
89
164
  }
90
165
 
166
+ .jp-SideBar[data-orientation='horizontal'] .lm-TabBar-tabLabel {
167
+ line-height: var(--jp-private-sidebar-tab-horizontal-height);
168
+ }
169
+
91
170
  .jp-SideBar .lm-TabBar-tab:hover:not(.lm-mod-current),
92
171
  #jp-down-stack .lm-TabBar-tab:hover:not(.lm-mod-current) {
93
172
  background: var(--jp-layout-color1);
@@ -108,23 +187,53 @@
108
187
 
109
188
  /* stylelint-disable selector-max-class */
110
189
 
111
- .jp-SideBar.lm-TabBar .lm-TabBar-tab + .lm-TabBar-tab {
190
+ .jp-SideBar.lm-TabBar[data-orientation='vertical']
191
+ .lm-TabBar-tab
192
+ + .lm-TabBar-tab {
112
193
  border-top: var(--jp-border-width) solid var(--jp-layout-color2);
113
194
  }
114
195
 
115
- .jp-SideBar.lm-TabBar .lm-TabBar-tab.lm-mod-current + .lm-TabBar-tab {
196
+ .jp-SideBar.lm-TabBar[data-orientation='vertical']
197
+ .lm-TabBar-tab.lm-mod-current
198
+ + .lm-TabBar-tab {
116
199
  border-top: var(--jp-border-width) solid var(--jp-border-color0);
117
200
  }
118
201
 
119
- .jp-SideBar.lm-TabBar .lm-TabBar-tab + .lm-TabBar-tab.lm-mod-current {
202
+ .jp-SideBar.lm-TabBar[data-orientation='vertical']
203
+ .lm-TabBar-tab
204
+ + .lm-TabBar-tab.lm-mod-current {
120
205
  border-top: var(--jp-border-width) solid var(--jp-border-color0);
121
206
  }
122
207
 
123
- .jp-SideBar.lm-TabBar .lm-TabBar-tab.lm-mod-current:last-child {
208
+ .jp-SideBar.lm-TabBar[data-orientation='vertical']
209
+ .lm-TabBar-tab.lm-mod-current:last-child {
124
210
  border-bottom: var(--jp-border-width) solid var(--jp-border-color0);
125
211
  }
126
212
 
127
- .jp-SideBar.lm-TabBar .lm-TabBar-tabLabel {
213
+ .jp-SideBar.lm-TabBar[data-orientation='horizontal']
214
+ .lm-TabBar-tab
215
+ + .lm-TabBar-tab {
216
+ border-left: var(--jp-border-width) solid var(--jp-layout-color2);
217
+ }
218
+
219
+ .jp-SideBar.lm-TabBar[data-orientation='horizontal']
220
+ .lm-TabBar-tab.lm-mod-current
221
+ + .lm-TabBar-tab {
222
+ border-left: var(--jp-border-width) solid var(--jp-border-color0);
223
+ }
224
+
225
+ .jp-SideBar.lm-TabBar[data-orientation='horizontal']
226
+ .lm-TabBar-tab
227
+ + .lm-TabBar-tab.lm-mod-current {
228
+ border-left: var(--jp-border-width) solid var(--jp-border-color0);
229
+ }
230
+
231
+ .jp-SideBar.lm-TabBar[data-orientation='horizontal']
232
+ .lm-TabBar-tab.lm-mod-current:last-child {
233
+ border-right: var(--jp-border-width) solid var(--jp-border-color0);
234
+ }
235
+
236
+ .jp-SideBar.lm-TabBar[data-orientation='vertical'] .lm-TabBar-tabLabel {
128
237
  writing-mode: vertical-rl;
129
238
  }
130
239
 
@@ -172,6 +281,48 @@
172
281
  border-left: var(--jp-border-width) solid var(--jp-border-color0);
173
282
  }
174
283
 
284
+ /* Top / Bottom (horizontal activity bar) */
285
+
286
+ .jp-SideBar.lm-TabBar[data-side='top'] .lm-TabBar-content,
287
+ .jp-SideBar.lm-TabBar[data-side='bottom'] .lm-TabBar-content {
288
+ align-items: stretch;
289
+ }
290
+
291
+ .jp-SideBar.lm-TabBar[data-side='top'] {
292
+ border-bottom: var(--jp-border-width) solid var(--jp-border-color0);
293
+ }
294
+
295
+ .jp-SideBar.lm-TabBar[data-side='bottom'] {
296
+ border-top: var(--jp-border-width) solid var(--jp-border-color0);
297
+ }
298
+
299
+ .jp-SideBar.lm-TabBar[data-side='top'] .lm-TabBar-tab.lm-mod-current::after,
300
+ .jp-SideBar.lm-TabBar[data-side='bottom'] .lm-TabBar-tab.lm-mod-current::after {
301
+ /* Reset side-mode override; use the default tab borders. */
302
+ display: none;
303
+ }
304
+
305
+ /* Side area wrapper */
306
+
307
+ .jp-SideArea {
308
+ /* The side area wrapper holds the activity bar (when in top/bottom mode)
309
+ and the stacked panel. */
310
+ background: var(--jp-layout-color1);
311
+
312
+ /* Floor so the splitter can't be dragged to zero and lose the area.
313
+ The stack panel children already enforce this in 'side' mode; setting
314
+ it on the wrapper also covers 'top'/'bottom'. */
315
+ min-width: var(--jp-sidebar-min-width);
316
+ }
317
+
318
+ .jp-SideArea[data-side='left'] {
319
+ border-right: var(--jp-border-width) solid var(--jp-border-color1);
320
+ }
321
+
322
+ .jp-SideArea[data-side='right'] {
323
+ border-left: var(--jp-border-width) solid var(--jp-border-color1);
324
+ }
325
+
175
326
  /* Down */
176
327
 
177
328
  /* Borders */
@@ -207,14 +358,6 @@
207
358
  background-color: var(--jp-layout-color1);
208
359
  }
209
360
 
210
- #jp-right-stack {
211
- border-left: var(--jp-border-width) solid var(--jp-border-color1);
212
- }
213
-
214
- #jp-left-stack {
215
- border-right: var(--jp-border-width) solid var(--jp-border-color1);
216
- }
217
-
218
361
  #jp-down-stack > .lm-TabPanel-stackedPanel {
219
362
  border: none;
220
363
  }
package/style/tabs.css CHANGED
@@ -63,17 +63,15 @@
63
63
  .lm-DockPanel-tabBar .lm-TabBar-tab:focus-visible,
64
64
  .lm-DockPanel-tabBar .lm-TabBar-addButton:focus-visible,
65
65
  .lm-TabPanel-tabBar .lm-TabBar-tab:focus-visible {
66
- border: 1px solid var(--accent-fill-focus);
67
- border-bottom: none;
68
-
69
- /* Thicken the border by 1px within the element border */
70
- box-shadow: 0 0 0 1px inset var(--accent-fill-focus);
71
- outline: none;
66
+ outline-width: var(--jp-focus-outline-width);
67
+ outline-color: var(--jp-focus-outline-color);
68
+ outline-style: solid;
69
+ outline-offset: calc(-1 * var(--jp-focus-outline-width));
72
70
  }
73
71
 
74
72
  .lm-DockPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current):focus-visible::after,
75
73
  .lm-TabPanel-tabBar .lm-TabBar-tab:not(.lm-mod-current):focus-visible::after {
76
- border-bottom-color: var(--accent-fill-focus);
74
+ border-bottom-color: var(--jp-focus-outline-color);
77
75
  }
78
76
 
79
77
  .lm-DockPanel-tabBar .lm-TabBar-tab:hover:not(.lm-mod-current),