@jupyterlab/cell-toolbar 4.1.0-alpha.3 → 4.1.0-alpha.4

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.
@@ -1,5 +1,5 @@
1
1
  import { ToolbarRegistry } from '@jupyterlab/apputils';
2
- import { CellModel } from '@jupyterlab/cells';
2
+ import { Cell, CellModel } from '@jupyterlab/cells';
3
3
  import { DocumentRegistry } from '@jupyterlab/docregistry';
4
4
  import { Notebook, NotebookPanel } from '@jupyterlab/notebook';
5
5
  import { IObservableList } from '@jupyterlab/observables';
@@ -11,17 +11,31 @@ import { IMapChange } from '@jupyter/ydoc';
11
11
  * Watch a notebook so that a cell toolbar appears on the active cell
12
12
  */
13
13
  export declare class CellToolbarTracker implements IDisposable {
14
- constructor(panel: NotebookPanel, toolbar: IObservableList<ToolbarRegistry.IToolbarItem>);
14
+ /**
15
+ * CellToolbarTracker constructor
16
+ *
17
+ * @param panel The notebook panel
18
+ * @param toolbar The toolbar; deprecated use {@link toolbarFactory} instead
19
+ * @param toolbarFactory The toolbar factory
20
+ */
21
+ constructor(panel: NotebookPanel, toolbar?: IObservableList<ToolbarRegistry.IToolbarItem>, toolbarFactory?: (widget: Cell) => IObservableList<ToolbarRegistry.IToolbarItem>);
22
+ /**
23
+ * @deprecated Will become protected in JupyterLab 5
24
+ */
15
25
  _onMetadataChanged(model: CellModel, args: IMapChange): void;
26
+ /**
27
+ * @deprecated Will become protected in JupyterLab 5
28
+ */
16
29
  _onActiveCellChanged(notebook: Notebook): void;
17
30
  get isDisposed(): boolean;
18
31
  dispose(): void;
19
32
  private _addToolbar;
20
33
  private _getCell;
21
- private _findToolbarWidgets;
22
34
  private _removeToolbar;
23
35
  /**
24
36
  * Call back on settings changes
37
+ *
38
+ * @deprecated To remove when toolbar can not be provided directly to the tracker
25
39
  */
26
40
  private _onToolbarChanged;
27
41
  private _changedEventCallback;
@@ -37,21 +51,21 @@ export declare class CellToolbarTracker implements IDisposable {
37
51
  private _markdownOverlapsToolbar;
38
52
  private _outputOverlapsToolbar;
39
53
  private _codeOverlapsToolbar;
40
- private _cellEditorWidgetLeft;
41
- private _cellEditorWidgetRight;
42
54
  private _cellToolbarRect;
43
55
  private _cellToolbarLeft;
44
56
  private _isDisposed;
45
57
  private _panel;
46
58
  private _previousActiveCell;
47
59
  private _toolbar;
60
+ private _toolbarItems;
61
+ private _toolbarFactory;
48
62
  }
49
63
  /**
50
64
  * Widget extension that creates a CellToolbarTracker each time a notebook is
51
65
  * created.
52
66
  */
53
67
  export declare class CellBarExtension implements DocumentRegistry.WidgetExtension {
54
- static FACTORY_NAME: string;
68
+ static readonly FACTORY_NAME = "Cell";
55
69
  constructor(commands: CommandRegistry, toolbarFactory?: (widget: Widget) => IObservableList<ToolbarRegistry.IToolbarItem>);
56
70
  protected get defaultToolbarFactory(): (widget: Widget) => IObservableList<ToolbarRegistry.IToolbarItem>;
57
71
  createNew(panel: NotebookPanel): IDisposable;
@@ -2,7 +2,7 @@
2
2
  | Copyright (c) Jupyter Development Team.
3
3
  | Distributed under the terms of the Modified BSD License.
4
4
  |----------------------------------------------------------------------------*/
5
- import { createDefaultFactory } from '@jupyterlab/apputils';
5
+ import { createDefaultFactory, setToolbar } from '@jupyterlab/apputils';
6
6
  import { ObservableList } from '@jupyterlab/observables';
7
7
  import { ReactWidget, Toolbar } from '@jupyterlab/ui-components';
8
8
  import { some } from '@lumino/algorithm';
@@ -19,6 +19,7 @@ const TEXT_MIME_TYPES = [
19
19
  * Widget cell toolbar classes
20
20
  */
21
21
  const CELL_TOOLBAR_CLASS = 'jp-cell-toolbar';
22
+ // @deprecated to be removed
22
23
  const CELL_MENU_CLASS = 'jp-cell-menu';
23
24
  /**
24
25
  * Class for a cell whose contents overlap with the cell toolbar
@@ -28,32 +29,48 @@ const TOOLBAR_OVERLAP_CLASS = 'jp-toolbar-overlap';
28
29
  * Watch a notebook so that a cell toolbar appears on the active cell
29
30
  */
30
31
  export class CellToolbarTracker {
31
- constructor(panel, toolbar) {
32
- var _a;
32
+ /**
33
+ * CellToolbarTracker constructor
34
+ *
35
+ * @param panel The notebook panel
36
+ * @param toolbar The toolbar; deprecated use {@link toolbarFactory} instead
37
+ * @param toolbarFactory The toolbar factory
38
+ */
39
+ constructor(panel, toolbar, toolbarFactory) {
33
40
  this._isDisposed = false;
41
+ this._toolbar = null;
42
+ this._toolbarItems = null;
43
+ this._toolbarFactory = null;
34
44
  this._panel = panel;
35
45
  this._previousActiveCell = this._panel.content.activeCell;
36
- this._toolbar = toolbar;
37
- this._onToolbarChanged();
38
- this._toolbar.changed.connect(this._onToolbarChanged, this);
46
+ this._toolbarItems = toolbar !== null && toolbar !== void 0 ? toolbar : null;
47
+ this._toolbarFactory = toolbarFactory !== null && toolbarFactory !== void 0 ? toolbarFactory : null;
48
+ if (this._toolbarItems === null && this._toolbarFactory === null) {
49
+ throw Error('You must provide the toolbarFactory or the toolbar items.');
50
+ }
51
+ // deprecated to be removed when we remove toolbar from input arguments
52
+ if (!this._toolbarFactory && this._toolbarItems) {
53
+ this._onToolbarChanged();
54
+ this._toolbarItems.changed.connect(this._onToolbarChanged, this);
55
+ }
39
56
  // Only add the toolbar to the notebook's active cell (if any) once it has fully rendered and been revealed.
40
57
  void panel.revealed.then(() => {
41
- // Wait one frame (at 60 fps) for the panel to render the first cell, then display the cell toolbar on it if possible.
42
- setTimeout(() => {
43
- this._onActiveCellChanged(panel.content);
44
- }, 1000 / 60);
45
- });
46
- // Check whether the toolbar should be rendered upon a layout change
47
- panel.content.renderingLayoutChanged.connect(this._onActiveCellChanged, this);
48
- // Handle subsequent changes of active cell.
49
- panel.content.activeCellChanged.connect(this._onActiveCellChanged, this);
50
- (_a = panel.content.activeCell) === null || _a === void 0 ? void 0 : _a.model.metadataChanged.connect(this._onMetadataChanged, this);
51
- panel.disposed.connect(() => {
52
- var _a;
53
- panel.content.activeCellChanged.disconnect(this._onActiveCellChanged);
54
- (_a = panel.content.activeCell) === null || _a === void 0 ? void 0 : _a.model.metadataChanged.disconnect(this._onMetadataChanged);
58
+ requestAnimationFrame(() => {
59
+ const notebook = panel.content;
60
+ this._onActiveCellChanged(notebook);
61
+ // Handle subsequent changes of active cell.
62
+ notebook.activeCellChanged.connect(this._onActiveCellChanged, this);
63
+ // Check whether the toolbar should be rendered upon a layout change
64
+ notebook.renderingLayoutChanged.connect(this._onActiveCellChanged, this);
65
+ notebook.disposed.connect(() => {
66
+ notebook.activeCellChanged.disconnect(this._onActiveCellChanged);
67
+ });
68
+ });
55
69
  });
56
70
  }
71
+ /**
72
+ * @deprecated Will become protected in JupyterLab 5
73
+ */
57
74
  _onMetadataChanged(model, args) {
58
75
  if (args.key === 'jupyter') {
59
76
  if (typeof args.newValue === 'object' &&
@@ -70,6 +87,9 @@ export class CellToolbarTracker {
70
87
  }
71
88
  }
72
89
  }
90
+ /**
91
+ * @deprecated Will become protected in JupyterLab 5
92
+ */
73
93
  _onActiveCellChanged(notebook) {
74
94
  if (this._previousActiveCell && !this._previousActiveCell.isDisposed) {
75
95
  // Disposed cells do not have a model anymore.
@@ -88,39 +108,49 @@ export class CellToolbarTracker {
88
108
  return this._isDisposed;
89
109
  }
90
110
  dispose() {
91
- var _a;
111
+ var _a, _b;
92
112
  if (this.isDisposed) {
93
113
  return;
94
114
  }
95
115
  this._isDisposed = true;
96
- this._toolbar.changed.disconnect(this._onToolbarChanged, this);
97
- const cells = (_a = this._panel) === null || _a === void 0 ? void 0 : _a.context.model.cells;
98
- if (cells) {
99
- for (const model of cells) {
100
- this._removeToolbar(model);
101
- }
102
- }
116
+ (_a = this._toolbarItems) === null || _a === void 0 ? void 0 : _a.changed.disconnect(this._onToolbarChanged, this);
117
+ (_b = this._toolbar) === null || _b === void 0 ? void 0 : _b.dispose();
103
118
  this._panel = null;
104
119
  Signal.clearData(this);
105
120
  }
106
121
  _addToolbar(model) {
107
122
  const cell = this._getCell(model);
108
- if (cell) {
109
- const toolbarWidget = new Toolbar();
123
+ if (cell && !cell.isDisposed) {
124
+ const toolbarWidget = (this._toolbar = new Toolbar());
125
+ // Note: CELL_MENU_CLASS is deprecated.
110
126
  toolbarWidget.addClass(CELL_MENU_CLASS);
111
- const promises = [];
112
- for (const { name, widget } of this._toolbar) {
113
- toolbarWidget.addItem(name, widget);
114
- if (widget instanceof ReactWidget &&
115
- widget.renderPromise !== undefined) {
116
- widget.update();
117
- promises.push(widget.renderPromise);
127
+ toolbarWidget.addClass(CELL_TOOLBAR_CLASS);
128
+ const promises = [cell.ready];
129
+ if (this._toolbarFactory) {
130
+ setToolbar(cell, this._toolbarFactory, toolbarWidget);
131
+ // FIXME toolbarWidget.update() - strangely this does not work
132
+ toolbarWidget.layout.widgets.forEach(w => {
133
+ w.update();
134
+ });
135
+ }
136
+ else {
137
+ for (const { name, widget } of this._toolbarItems) {
138
+ toolbarWidget.addItem(name, widget);
139
+ if (widget instanceof ReactWidget &&
140
+ widget.renderPromise !== undefined) {
141
+ widget.update();
142
+ promises.push(widget.renderPromise);
143
+ }
118
144
  }
119
145
  }
120
146
  // Wait for all the buttons to be rendered before attaching the toolbar.
121
147
  Promise.all(promises)
122
148
  .then(() => {
123
- toolbarWidget.addClass(CELL_TOOLBAR_CLASS);
149
+ var _a;
150
+ if (cell.isDisposed || ((_a = this._panel) === null || _a === void 0 ? void 0 : _a.content.activeCell) !== cell) {
151
+ toolbarWidget.dispose();
152
+ return;
153
+ }
124
154
  cell.layout.insertWidget(0, toolbarWidget);
125
155
  // For rendered markdown, watch for resize events.
126
156
  cell.displayChanged.connect(this._resizeEventCallback, this);
@@ -138,24 +168,22 @@ export class CellToolbarTracker {
138
168
  var _a;
139
169
  return (_a = this._panel) === null || _a === void 0 ? void 0 : _a.content.widgets.find(widget => widget.model === model);
140
170
  }
141
- _findToolbarWidgets(cell) {
142
- const widgets = cell.layout.widgets;
143
- // Search for header using the CSS class or use the first one if not found.
144
- return widgets.filter(widget => widget.hasClass(CELL_TOOLBAR_CLASS)) || [];
145
- }
146
171
  _removeToolbar(model) {
172
+ var _a, _b;
147
173
  const cell = this._getCell(model);
148
- if (cell) {
149
- this._findToolbarWidgets(cell).forEach(widget => {
150
- widget.dispose();
151
- });
174
+ if (cell && !cell.isDisposed) {
152
175
  // Attempt to remove the resize and changed event handlers.
153
176
  cell.displayChanged.disconnect(this._resizeEventCallback, this);
154
177
  }
155
178
  model.contentChanged.disconnect(this._changedEventCallback, this);
179
+ if (((_a = this._toolbar) === null || _a === void 0 ? void 0 : _a.parent) === cell && ((_b = this._toolbar) === null || _b === void 0 ? void 0 : _b.isDisposed) === false) {
180
+ this._toolbar.dispose();
181
+ }
156
182
  }
157
183
  /**
158
184
  * Call back on settings changes
185
+ *
186
+ * @deprecated To remove when toolbar can not be provided directly to the tracker
159
187
  */
160
188
  _onToolbarChanged() {
161
189
  var _a;
@@ -198,11 +226,12 @@ export class CellToolbarTracker {
198
226
  });
199
227
  }
200
228
  _cellToolbarOverlapsContents(activeCell) {
201
- var _a;
229
+ var _a, _b, _c, _d;
202
230
  const cellType = activeCell.model.type;
203
231
  // If the toolbar is too large for the current cell, hide it.
204
- const cellLeft = this._cellEditorWidgetLeft(activeCell);
205
- const cellRight = this._cellEditorWidgetRight(activeCell);
232
+ const editorRect = (_a = activeCell.editorWidget) === null || _a === void 0 ? void 0 : _a.node.getBoundingClientRect();
233
+ const cellLeft = (_b = editorRect === null || editorRect === void 0 ? void 0 : editorRect.left) !== null && _b !== void 0 ? _b : 0;
234
+ const cellRight = (_c = editorRect === null || editorRect === void 0 ? void 0 : editorRect.right) !== null && _c !== void 0 ? _c : 0;
206
235
  const toolbarLeft = this._cellToolbarLeft(activeCell);
207
236
  if (toolbarLeft === null) {
208
237
  return false;
@@ -216,7 +245,7 @@ export class CellToolbarTracker {
216
245
  return this._markdownOverlapsToolbar(activeCell);
217
246
  }
218
247
  // Check for overlap in code content
219
- if (((_a = this._panel) === null || _a === void 0 ? void 0 : _a.content.renderingLayout) === 'default') {
248
+ if (((_d = this._panel) === null || _d === void 0 ? void 0 : _d.content.renderingLayout) === 'default') {
220
249
  return this._codeOverlapsToolbar(activeCell);
221
250
  }
222
251
  else {
@@ -299,20 +328,12 @@ export class CellToolbarTracker {
299
328
  const toolbarLeft = this._cellToolbarLeft(activeCell);
300
329
  return toolbarLeft === null ? false : lineRight > toolbarLeft;
301
330
  }
302
- _cellEditorWidgetLeft(activeCell) {
303
- var _a, _b;
304
- return (_b = (_a = activeCell.editorWidget) === null || _a === void 0 ? void 0 : _a.node.getBoundingClientRect().left) !== null && _b !== void 0 ? _b : 0;
305
- }
306
- _cellEditorWidgetRight(activeCell) {
307
- var _a, _b;
308
- return (_b = (_a = activeCell.editorWidget) === null || _a === void 0 ? void 0 : _a.node.getBoundingClientRect().right) !== null && _b !== void 0 ? _b : 0;
309
- }
310
331
  _cellToolbarRect(activeCell) {
311
- const toolbarWidgets = this._findToolbarWidgets(activeCell);
312
- if (toolbarWidgets.length < 1) {
332
+ var _a;
333
+ if (((_a = this._toolbar) === null || _a === void 0 ? void 0 : _a.parent) !== activeCell) {
313
334
  return null;
314
335
  }
315
- const activeCellToolbar = toolbarWidgets[0].node;
336
+ const activeCellToolbar = this._toolbar.node;
316
337
  return activeCellToolbar.getBoundingClientRect();
317
338
  }
318
339
  _cellToolbarLeft(activeCell) {
@@ -367,7 +388,7 @@ export class CellBarExtension {
367
388
  });
368
389
  }
369
390
  createNew(panel) {
370
- return new CellToolbarTracker(panel, this._toolbarFactory(panel));
391
+ return new CellToolbarTracker(panel, undefined, this._toolbarFactory);
371
392
  }
372
393
  }
373
394
  CellBarExtension.FACTORY_NAME = 'Cell';
@@ -1 +1 @@
1
- {"version":3,"file":"celltoolbartracker.js","sourceRoot":"","sources":["../src/celltoolbartracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"celltoolbartracker.js","sourceRoot":"","sources":["../src/celltoolbartracker.ts"],"names":[],"mappings":"AAAA;;;+EAG+E;AAC/E,OAAO,EACL,oBAAoB,EACpB,UAAU,EAEX,MAAM,sBAAsB,CAAC;AAU9B,OAAO,EAAmB,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAGzC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAI3C;;GAEG;AACH,MAAM,eAAe,GAAG;IACtB,YAAY;IACZ,gCAAgC;IAChC,gCAAgC;CACjC,CAAC;AAEF;;GAEG;AACH,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAC7C,4BAA4B;AAC5B,MAAM,eAAe,GAAG,cAAc,CAAC;AAEvC;;GAEG;AACH,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AAEnD;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAC7B;;;;;;OAMG;IACH,YACE,KAAoB,EACpB,OAAuD,EACvD,cAEkD;QA2W5C,gBAAW,GAAG,KAAK,CAAC;QAGpB,aAAQ,GAAkB,IAAI,CAAC;QAC/B,kBAAa,GACnB,IAAI,CAAC;QACC,oBAAe,GAEZ,IAAI,CAAC;QAjXd,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QAC1D,IAAI,CAAC,aAAa,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,IAAI,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,IAAI,CAAC;QAE9C,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE;YAChE,MAAM,KAAK,CAAC,2DAA2D,CAAC,CAAC;SAC1E;QAED,uEAAuE;QACvE,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,EAAE;YAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;SAClE;QAED,4GAA4G;QAC5G,KAAK,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5B,qBAAqB,CAAC,GAAG,EAAE;gBACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC;gBAC/B,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACpC,4CAA4C;gBAC5C,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;gBAEpE,oEAAoE;gBACpE,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CACrC,IAAI,CAAC,oBAAoB,EACzB,IAAI,CACL,CAAC;gBAEF,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE;oBAC7B,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACnE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,KAAgB,EAAE,IAAgB;QACnD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;YAC1B,IACE,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,IAAI;gBACpC,CAAC,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,EAC/C;gBACA,0CAA0C;gBAC1C,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aAC5B;YACD,yCAAyC;iBACpC,IACH,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,KAAK,IAAI,EACpC;gBACA,wCAAwC;gBACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;aACzB;SACF;IACH,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,QAAkB;QACrC,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE;YACpE,8CAA8C;YAC9C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACpD,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CACvD,IAAI,CAAC,kBAAkB,CACxB,CAAC;SACH;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACvC,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE;YACjD,OAAO;SACR;QAED,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;QAExE,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC;IACxC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,OAAO;;QACL,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,OAAO;SACR;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,MAAA,IAAI,CAAC,aAAa,0CAAE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACrE,MAAA,IAAI,CAAC,QAAQ,0CAAE,OAAO,EAAE,CAAC;QAEzB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEO,WAAW,CAAC,KAAiB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAElC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC5B,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC,CAAC;YACtD,uCAAuC;YACvC,aAAa,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;YACxC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,eAAe,EAAE;gBACxB,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBACtD,8DAA8D;gBAC7D,aAAa,CAAC,MAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACxD,CAAC,CAAC,MAAM,EAAE,CAAC;gBACb,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,KAAK,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,aAAc,EAAE;oBAClD,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACpC,IACE,MAAM,YAAY,WAAW;wBAC5B,MAAsB,CAAC,aAAa,KAAK,SAAS,EACnD;wBACC,MAAsB,CAAC,MAAM,EAAE,CAAC;wBACjC,QAAQ,CAAC,IAAI,CAAE,MAAsB,CAAC,aAAc,CAAC,CAAC;qBACvD;iBACF;aACF;YAED,wEAAwE;YACxE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;iBAClB,IAAI,CAAC,GAAG,EAAE;;gBACT,IAAI,IAAI,CAAC,UAAU,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,UAAU,MAAK,IAAI,EAAE;oBAC/D,aAAa,CAAC,OAAO,EAAE,CAAC;oBACxB,OAAO;iBACR;gBAEA,IAAI,CAAC,MAAsB,CAAC,YAAY,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;gBAE5D,kDAAkD;gBAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;gBAE7D,4CAA4C;gBAC5C,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;gBAEpE,0DAA0D;gBAC1D,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAEO,QAAQ,CAAC,KAAiB;;QAChC,OAAO,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC7E,CAAC;IAEO,cAAc,CAAC,KAAiB;;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAC5B,2DAA2D;YAC3D,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;SACjE;QACD,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QAClE,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,MAAK,IAAI,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,UAAU,MAAK,KAAK,EAAE;YACzE,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;SACzB;IACH,CAAC;IAED;;;;OAIG;IACK,iBAAiB;;QACvB,sCAAsC;QACtC,MAAM,UAAU,GACd,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,UAAU,CAAC;QAClC,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;SACpC;IACH,CAAC;IAEO,qBAAqB;;QAC3B,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,UAAU,CAAC;QACnD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;YACnD,OAAO;SACR;QAED,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAEO,oBAAoB;;QAC1B,MAAM,UAAU,GAAG,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,UAAU,CAAC;QACnD,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS,EAAE;YACnD,OAAO;SACR;QAED,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAEO,4BAA4B,CAAC,UAA4B;QAC/D,yEAAyE;QACzE,8EAA8E;QAC9E,4DAA4D;QAC5D,qBAAqB,CAAC,GAAG,EAAE;YACzB,iFAAiF;YACjF,MAAM,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAC;YAC1C,iBAAiB,CAAC,SAAS,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC,EAAE;gBACjD,kFAAkF;gBAClF,2DAA2D;gBAC3D,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;aACxD;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,4BAA4B,CAAC,UAA4B;;QAC/D,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;QAEvC,6DAA6D;QAE7D,MAAM,UAAU,GAAG,MAAA,UAAU,CAAC,YAAY,0CAAE,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACzE,MAAM,QAAQ,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,mCAAI,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,MAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,mCAAI,CAAC,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,WAAW,KAAK,IAAI,EAAE;YACxB,OAAO,KAAK,CAAC;SACd;QAED,4DAA4D;QAC5D,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,WAAW,EAAE;YAC5C,OAAO,IAAI,CAAC;SACb;QAED,IAAI,QAAQ,KAAK,UAAU,IAAK,UAA2B,CAAC,QAAQ,EAAE;YACpE,iDAAiD;YACjD,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAA0B,CAAC,CAAC;SAClE;QAED,oCAAoC;QACpC,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,OAAO,CAAC,eAAe,MAAK,SAAS,EAAE;YACtD,OAAO,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;SAC9C;aAAM;YACL,OAAO,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;SAChD;IACH,CAAC;IAED;;;;;OAKG;IACK,wBAAwB,CAAC,UAAwB;QACvD,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,8CAA8C;QAC3F,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,KAAK,CAAC;SACd;QAED,yCAAyC;QACzC,MAAM,oBAAoB,GAAG,cAAc,CAAC,aAAa,CAAC;QAC1D,MAAM,qBAAqB,GAAG,oBAAoB,CAAC,IAAI,CAAC;QAExD,MAAM,uBAAuB,GAC3B,qBAAqB,CAAC,iBAAgC,CAAC;QACzD,IAAI,uBAAuB,KAAK,IAAI,EAAE;YACpC,OAAO,KAAK,CAAC;SACd;QAED,8GAA8G;QAC9G,MAAM,WAAW,GAAG,uBAAuB,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3D,uBAAuB,CAAC,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAC;QAEvD,MAAM,SAAS,GAAG,uBAAuB,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QAExE,+BAA+B;QAC/B,uBAAuB,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC;QAErD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEtD,OAAO,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,WAAW,CAAC;IAChE,CAAC;IAEO,sBAAsB,CAAC,UAA4B;QACzD,MAAM,UAAU,GAAI,UAAuB,CAAC,UAAU,CAAC,IAAI,CAAC;QAC5D,IAAI,UAAU,EAAE;YACd,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;YAChE,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,WAAW,EAAE;gBACf,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,WAAW,CAAC;gBACjE,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;oBAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;oBACtC,IAAI,IAAI,EAAE;wBACR,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;wBAC1B,IACE,eAAe,CAAC,QAAQ,CACtB,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAC5C,EACD;4BACA,kFAAkF;4BAClF,+CAA+C;4BAC/C,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;yBAChC;6BAAM;4BACL,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;yBACxB;wBACD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,GACtC,KAAK,CAAC,qBAAqB,EAAE,CAAC;wBAEhC,yDAAyD;wBACzD,OAAO,SAAS,GAAG,WAAW,IAAI,OAAO,GAAG,aAAa,CAAC;qBAC3D;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC,CAAC;aACJ;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,oBAAoB,CAAC,UAA4B;QACvD,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;QAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE;YAC5B,OAAO,KAAK,CAAC;SACd;QAED,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE;YACxB,OAAO,KAAK,CAAC,CAAC,wBAAwB;SACvC;QAED,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QAC5E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,OAAO,KAAK,CAAC,CAAC,mBAAmB;SAClC;QAED,IAAI,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,KAAK,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,SAAS,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;QAEjD,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAEtD,OAAO,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,WAAW,CAAC;IAChE,CAAC;IAEO,gBAAgB,CAAC,UAA4B;;QACnD,IAAI,CAAA,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,MAAK,UAAU,EAAE;YACxC,OAAO,IAAI,CAAC;SACb;QACD,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAE7C,OAAO,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;IACnD,CAAC;IAEO,gBAAgB,CAAC,UAA4B;;QACnD,OAAO,CAAA,MAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,0CAAE,IAAI,KAAI,IAAI,CAAC;IACzD,CAAC;CAWF;AAED,MAAM,mBAAmB,GAA8B;IACrD;QACE,OAAO,EAAE,0BAA0B;QACnC,IAAI,EAAE,gBAAgB;KACvB;IACD;QACE,OAAO,EAAE,uBAAuB;QAChC,IAAI,EAAE,cAAc;KACrB;IACD;QACE,OAAO,EAAE,yBAAyB;QAClC,IAAI,EAAE,gBAAgB;KACvB;IACD;QACE,OAAO,EAAE,4BAA4B;QACrC,IAAI,EAAE,mBAAmB;KAC1B;IACD;QACE,OAAO,EAAE,4BAA4B;QACrC,IAAI,EAAE,mBAAmB;KAC1B;IACD;QACE,OAAO,EAAE,sBAAsB;QAC/B,IAAI,EAAE,aAAa;KACpB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IAG3B,YACE,QAAyB,EACzB,cAEkD;QAElD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,IAAI,CAAC,qBAAqB,CAAC;IACtE,CAAC;IAED,IAAc,qBAAqB;QAGjC,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,OAAO,CAAC,MAAc,EAAE,EAAE,CACxB,IAAI,cAAc,CAAC;YACjB,MAAM,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACrC,OAAO;oBACL,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,WAAW,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC;iBACjE,CAAC;YACJ,CAAC,CAAC;SACH,CAAC,CAAC;IACP,CAAC;IAED,SAAS,CAAC,KAAoB;QAC5B,OAAO,IAAI,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACxE,CAAC;;AA7Be,6BAAY,GAAG,MAAM,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyterlab/cell-toolbar",
3
- "version": "4.1.0-alpha.3",
3
+ "version": "4.1.0-alpha.4",
4
4
  "description": "Contextual cell toolbar adapted from jlab-enhanced-cell-toolbar",
5
5
  "homepage": "https://github.com/jupyterlab/jupyterlab",
6
6
  "bugs": {
@@ -41,20 +41,20 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@jupyter/ydoc": "^1.1.1",
44
- "@jupyterlab/apputils": "^4.2.0-alpha.3",
45
- "@jupyterlab/cells": "^4.1.0-alpha.3",
46
- "@jupyterlab/docregistry": "^4.1.0-alpha.3",
47
- "@jupyterlab/notebook": "^4.1.0-alpha.3",
48
- "@jupyterlab/observables": "^5.1.0-alpha.3",
49
- "@jupyterlab/ui-components": "^4.1.0-alpha.3",
44
+ "@jupyterlab/apputils": "^4.2.0-alpha.4",
45
+ "@jupyterlab/cells": "^4.1.0-alpha.4",
46
+ "@jupyterlab/docregistry": "^4.1.0-alpha.4",
47
+ "@jupyterlab/notebook": "^4.1.0-alpha.4",
48
+ "@jupyterlab/observables": "^5.1.0-alpha.4",
49
+ "@jupyterlab/ui-components": "^4.1.0-alpha.4",
50
50
  "@lumino/algorithm": "^2.0.1",
51
- "@lumino/commands": "^2.1.3",
51
+ "@lumino/commands": "^2.2.0",
52
52
  "@lumino/disposable": "^2.1.2",
53
53
  "@lumino/signaling": "^2.1.2",
54
- "@lumino/widgets": "^2.3.1-alpha.0"
54
+ "@lumino/widgets": "^2.3.1"
55
55
  },
56
56
  "devDependencies": {
57
- "@jupyterlab/testing": "^4.1.0-alpha.3",
57
+ "@jupyterlab/testing": "^4.1.0-alpha.4",
58
58
  "@types/jest": "^29.2.0",
59
59
  "jest": "^29.2.0",
60
60
  "rimraf": "~5.0.5",
@@ -2,7 +2,11 @@
2
2
  | Copyright (c) Jupyter Development Team.
3
3
  | Distributed under the terms of the Modified BSD License.
4
4
  |----------------------------------------------------------------------------*/
5
- import { createDefaultFactory, ToolbarRegistry } from '@jupyterlab/apputils';
5
+ import {
6
+ createDefaultFactory,
7
+ setToolbar,
8
+ ToolbarRegistry
9
+ } from '@jupyterlab/apputils';
6
10
  import {
7
11
  Cell,
8
12
  CellModel,
@@ -34,6 +38,7 @@ const TEXT_MIME_TYPES = [
34
38
  * Widget cell toolbar classes
35
39
  */
36
40
  const CELL_TOOLBAR_CLASS = 'jp-cell-toolbar';
41
+ // @deprecated to be removed
37
42
  const CELL_MENU_CLASS = 'jp-cell-menu';
38
43
 
39
44
  /**
@@ -45,45 +50,59 @@ const TOOLBAR_OVERLAP_CLASS = 'jp-toolbar-overlap';
45
50
  * Watch a notebook so that a cell toolbar appears on the active cell
46
51
  */
47
52
  export class CellToolbarTracker implements IDisposable {
53
+ /**
54
+ * CellToolbarTracker constructor
55
+ *
56
+ * @param panel The notebook panel
57
+ * @param toolbar The toolbar; deprecated use {@link toolbarFactory} instead
58
+ * @param toolbarFactory The toolbar factory
59
+ */
48
60
  constructor(
49
61
  panel: NotebookPanel,
50
- toolbar: IObservableList<ToolbarRegistry.IToolbarItem>
62
+ toolbar?: IObservableList<ToolbarRegistry.IToolbarItem>,
63
+ toolbarFactory?: (
64
+ widget: Cell
65
+ ) => IObservableList<ToolbarRegistry.IToolbarItem>
51
66
  ) {
52
67
  this._panel = panel;
53
68
  this._previousActiveCell = this._panel.content.activeCell;
54
- this._toolbar = toolbar;
69
+ this._toolbarItems = toolbar ?? null;
70
+ this._toolbarFactory = toolbarFactory ?? null;
55
71
 
56
- this._onToolbarChanged();
57
- this._toolbar.changed.connect(this._onToolbarChanged, this);
72
+ if (this._toolbarItems === null && this._toolbarFactory === null) {
73
+ throw Error('You must provide the toolbarFactory or the toolbar items.');
74
+ }
75
+
76
+ // deprecated to be removed when we remove toolbar from input arguments
77
+ if (!this._toolbarFactory && this._toolbarItems) {
78
+ this._onToolbarChanged();
79
+ this._toolbarItems.changed.connect(this._onToolbarChanged, this);
80
+ }
58
81
 
59
82
  // Only add the toolbar to the notebook's active cell (if any) once it has fully rendered and been revealed.
60
83
  void panel.revealed.then(() => {
61
- // Wait one frame (at 60 fps) for the panel to render the first cell, then display the cell toolbar on it if possible.
62
- setTimeout(() => {
63
- this._onActiveCellChanged(panel.content);
64
- }, 1000 / 60);
65
- });
66
-
67
- // Check whether the toolbar should be rendered upon a layout change
68
- panel.content.renderingLayoutChanged.connect(
69
- this._onActiveCellChanged,
70
- this
71
- );
72
-
73
- // Handle subsequent changes of active cell.
74
- panel.content.activeCellChanged.connect(this._onActiveCellChanged, this);
75
- panel.content.activeCell?.model.metadataChanged.connect(
76
- this._onMetadataChanged,
77
- this
78
- );
79
- panel.disposed.connect(() => {
80
- panel.content.activeCellChanged.disconnect(this._onActiveCellChanged);
81
- panel.content.activeCell?.model.metadataChanged.disconnect(
82
- this._onMetadataChanged
83
- );
84
+ requestAnimationFrame(() => {
85
+ const notebook = panel.content;
86
+ this._onActiveCellChanged(notebook);
87
+ // Handle subsequent changes of active cell.
88
+ notebook.activeCellChanged.connect(this._onActiveCellChanged, this);
89
+
90
+ // Check whether the toolbar should be rendered upon a layout change
91
+ notebook.renderingLayoutChanged.connect(
92
+ this._onActiveCellChanged,
93
+ this
94
+ );
95
+
96
+ notebook.disposed.connect(() => {
97
+ notebook.activeCellChanged.disconnect(this._onActiveCellChanged);
98
+ });
99
+ });
84
100
  });
85
101
  }
86
102
 
103
+ /**
104
+ * @deprecated Will become protected in JupyterLab 5
105
+ */
87
106
  _onMetadataChanged(model: CellModel, args: IMapChange) {
88
107
  if (args.key === 'jupyter') {
89
108
  if (
@@ -104,6 +123,10 @@ export class CellToolbarTracker implements IDisposable {
104
123
  }
105
124
  }
106
125
  }
126
+
127
+ /**
128
+ * @deprecated Will become protected in JupyterLab 5
129
+ */
107
130
  _onActiveCellChanged(notebook: Notebook): void {
108
131
  if (this._previousActiveCell && !this._previousActiveCell.isDisposed) {
109
132
  // Disposed cells do not have a model anymore.
@@ -134,14 +157,8 @@ export class CellToolbarTracker implements IDisposable {
134
157
  }
135
158
  this._isDisposed = true;
136
159
 
137
- this._toolbar.changed.disconnect(this._onToolbarChanged, this);
138
-
139
- const cells = this._panel?.context.model.cells;
140
- if (cells) {
141
- for (const model of cells) {
142
- this._removeToolbar(model);
143
- }
144
- }
160
+ this._toolbarItems?.changed.disconnect(this._onToolbarChanged, this);
161
+ this._toolbar?.dispose();
145
162
 
146
163
  this._panel = null;
147
164
 
@@ -151,26 +168,39 @@ export class CellToolbarTracker implements IDisposable {
151
168
  private _addToolbar(model: ICellModel): void {
152
169
  const cell = this._getCell(model);
153
170
 
154
- if (cell) {
155
- const toolbarWidget = new Toolbar();
171
+ if (cell && !cell.isDisposed) {
172
+ const toolbarWidget = (this._toolbar = new Toolbar());
173
+ // Note: CELL_MENU_CLASS is deprecated.
156
174
  toolbarWidget.addClass(CELL_MENU_CLASS);
157
-
158
- const promises: Promise<void>[] = [];
159
- for (const { name, widget } of this._toolbar) {
160
- toolbarWidget.addItem(name, widget);
161
- if (
162
- widget instanceof ReactWidget &&
163
- (widget as ReactWidget).renderPromise !== undefined
164
- ) {
165
- (widget as ReactWidget).update();
166
- promises.push((widget as ReactWidget).renderPromise!);
175
+ toolbarWidget.addClass(CELL_TOOLBAR_CLASS);
176
+ const promises: Promise<void>[] = [cell.ready];
177
+ if (this._toolbarFactory) {
178
+ setToolbar(cell, this._toolbarFactory, toolbarWidget);
179
+ // FIXME toolbarWidget.update() - strangely this does not work
180
+ (toolbarWidget.layout as PanelLayout).widgets.forEach(w => {
181
+ w.update();
182
+ });
183
+ } else {
184
+ for (const { name, widget } of this._toolbarItems!) {
185
+ toolbarWidget.addItem(name, widget);
186
+ if (
187
+ widget instanceof ReactWidget &&
188
+ (widget as ReactWidget).renderPromise !== undefined
189
+ ) {
190
+ (widget as ReactWidget).update();
191
+ promises.push((widget as ReactWidget).renderPromise!);
192
+ }
167
193
  }
168
194
  }
169
195
 
170
196
  // Wait for all the buttons to be rendered before attaching the toolbar.
171
197
  Promise.all(promises)
172
198
  .then(() => {
173
- toolbarWidget.addClass(CELL_TOOLBAR_CLASS);
199
+ if (cell.isDisposed || this._panel?.content.activeCell !== cell) {
200
+ toolbarWidget.dispose();
201
+ return;
202
+ }
203
+
174
204
  (cell.layout as PanelLayout).insertWidget(0, toolbarWidget);
175
205
 
176
206
  // For rendered markdown, watch for resize events.
@@ -192,27 +222,22 @@ export class CellToolbarTracker implements IDisposable {
192
222
  return this._panel?.content.widgets.find(widget => widget.model === model);
193
223
  }
194
224
 
195
- private _findToolbarWidgets(cell: Cell): Widget[] {
196
- const widgets = (cell.layout as PanelLayout).widgets;
197
-
198
- // Search for header using the CSS class or use the first one if not found.
199
- return widgets.filter(widget => widget.hasClass(CELL_TOOLBAR_CLASS)) || [];
200
- }
201
-
202
225
  private _removeToolbar(model: ICellModel): void {
203
226
  const cell = this._getCell(model);
204
- if (cell) {
205
- this._findToolbarWidgets(cell).forEach(widget => {
206
- widget.dispose();
207
- });
227
+ if (cell && !cell.isDisposed) {
208
228
  // Attempt to remove the resize and changed event handlers.
209
229
  cell.displayChanged.disconnect(this._resizeEventCallback, this);
210
230
  }
211
231
  model.contentChanged.disconnect(this._changedEventCallback, this);
232
+ if (this._toolbar?.parent === cell && this._toolbar?.isDisposed === false) {
233
+ this._toolbar.dispose();
234
+ }
212
235
  }
213
236
 
214
237
  /**
215
238
  * Call back on settings changes
239
+ *
240
+ * @deprecated To remove when toolbar can not be provided directly to the tracker
216
241
  */
217
242
  private _onToolbarChanged(): void {
218
243
  // Reset toolbar when settings changes
@@ -262,8 +287,10 @@ export class CellToolbarTracker implements IDisposable {
262
287
  const cellType = activeCell.model.type;
263
288
 
264
289
  // If the toolbar is too large for the current cell, hide it.
265
- const cellLeft = this._cellEditorWidgetLeft(activeCell);
266
- const cellRight = this._cellEditorWidgetRight(activeCell);
290
+
291
+ const editorRect = activeCell.editorWidget?.node.getBoundingClientRect();
292
+ const cellLeft = editorRect?.left ?? 0;
293
+ const cellRight = editorRect?.right ?? 0;
267
294
  const toolbarLeft = this._cellToolbarLeft(activeCell);
268
295
 
269
296
  if (toolbarLeft === null) {
@@ -385,20 +412,11 @@ export class CellToolbarTracker implements IDisposable {
385
412
  return toolbarLeft === null ? false : lineRight > toolbarLeft;
386
413
  }
387
414
 
388
- private _cellEditorWidgetLeft(activeCell: Cell<ICellModel>): number {
389
- return activeCell.editorWidget?.node.getBoundingClientRect().left ?? 0;
390
- }
391
-
392
- private _cellEditorWidgetRight(activeCell: Cell<ICellModel>): number {
393
- return activeCell.editorWidget?.node.getBoundingClientRect().right ?? 0;
394
- }
395
-
396
415
  private _cellToolbarRect(activeCell: Cell<ICellModel>): DOMRect | null {
397
- const toolbarWidgets = this._findToolbarWidgets(activeCell);
398
- if (toolbarWidgets.length < 1) {
416
+ if (this._toolbar?.parent !== activeCell) {
399
417
  return null;
400
418
  }
401
- const activeCellToolbar = toolbarWidgets[0].node;
419
+ const activeCellToolbar = this._toolbar.node;
402
420
 
403
421
  return activeCellToolbar.getBoundingClientRect();
404
422
  }
@@ -410,7 +428,12 @@ export class CellToolbarTracker implements IDisposable {
410
428
  private _isDisposed = false;
411
429
  private _panel: NotebookPanel | null;
412
430
  private _previousActiveCell: Cell<ICellModel> | null;
413
- private _toolbar: IObservableList<ToolbarRegistry.IToolbarItem>;
431
+ private _toolbar: Widget | null = null;
432
+ private _toolbarItems: IObservableList<ToolbarRegistry.IToolbarItem> | null =
433
+ null;
434
+ private _toolbarFactory:
435
+ | ((widget: Cell) => IObservableList<ToolbarRegistry.IToolbarItem>)
436
+ | null = null;
414
437
  }
415
438
 
416
439
  const defaultToolbarItems: ToolbarRegistry.IWidget[] = [
@@ -445,7 +468,7 @@ const defaultToolbarItems: ToolbarRegistry.IWidget[] = [
445
468
  * created.
446
469
  */
447
470
  export class CellBarExtension implements DocumentRegistry.WidgetExtension {
448
- static FACTORY_NAME = 'Cell';
471
+ static readonly FACTORY_NAME = 'Cell';
449
472
 
450
473
  constructor(
451
474
  commands: CommandRegistry,
@@ -473,7 +496,7 @@ export class CellBarExtension implements DocumentRegistry.WidgetExtension {
473
496
  }
474
497
 
475
498
  createNew(panel: NotebookPanel): IDisposable {
476
- return new CellToolbarTracker(panel, this._toolbarFactory(panel));
499
+ return new CellToolbarTracker(panel, undefined, this._toolbarFactory);
477
500
  }
478
501
 
479
502
  private _commands: CommandRegistry;
package/style/base.css CHANGED
@@ -18,40 +18,34 @@
18
18
  .jp-cell-toolbar {
19
19
  display: flex;
20
20
  flex-direction: row;
21
- padding: 2px 0;
21
+ padding: 0;
22
22
  min-height: 25px;
23
23
  z-index: 6;
24
24
  position: absolute;
25
- top: 5px;
26
25
  right: 8px;
27
26
 
28
27
  /* Override .jp-Toolbar */
29
28
  background-color: transparent;
30
29
  border-bottom: inherit;
31
- box-shadow: inherit;
30
+ box-shadow: none;
32
31
  }
33
32
 
34
33
  /* Overrides for mobile view hiding cell toolbar */
35
34
  @media only screen and (width <= 760px) {
36
- .jp-cell-menu.jp-cell-toolbar {
35
+ .jp-cell-toolbar {
37
36
  display: none;
38
37
  }
39
38
  }
40
39
 
41
- .jp-cell-menu {
42
- display: flex;
43
- flex-direction: row;
44
- }
45
-
46
- .jp-cell-menu button.jp-ToolbarButtonComponent {
40
+ .jp-cell-toolbar button.jp-ToolbarButtonComponent {
47
41
  cursor: pointer;
48
42
  }
49
43
 
50
- .jp-cell-menu .jp-ToolbarButton button {
44
+ .jp-cell-toolbar .jp-ToolbarButton button {
51
45
  display: none;
52
46
  }
53
47
 
54
- .jp-cell-menu .jp-ToolbarButton .jp-cell-all,
48
+ .jp-cell-toolbar .jp-ToolbarButton .jp-cell-all,
55
49
  .jp-CodeCell .jp-ToolbarButton .jp-cell-code,
56
50
  .jp-MarkdownCell .jp-ToolbarButton .jp-cell-markdown,
57
51
  .jp-RawCell .jp-ToolbarButton .jp-cell-raw {