@jupyterlab/apputils-extension 0.17.2 → 0.18.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.
package/lib/index.js CHANGED
@@ -3,6 +3,14 @@
3
3
  | Copyright (c) Jupyter Development Team.
4
4
  | Distributed under the terms of the Modified BSD License.
5
5
  |----------------------------------------------------------------------------*/
6
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7
+ return new (P || (P = Promise))(function (resolve, reject) {
8
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10
+ function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
11
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
12
+ });
13
+ };
6
14
  Object.defineProperty(exports, "__esModule", { value: true });
7
15
  const application_1 = require("@jupyterlab/application");
8
16
  const apputils_1 = require("@jupyterlab/apputils");
@@ -41,9 +49,8 @@ var CommandIDs;
41
49
  */
42
50
  var Patterns;
43
51
  (function (Patterns) {
44
- Patterns.cloneState = /[?&]clone([=&]|$)/;
45
- Patterns.loadState = /^\/workspaces\/([^?\/]+)/;
46
52
  Patterns.resetOnLoad = /(\?reset|\&reset)($|&)/;
53
+ Patterns.workspace = new RegExp(`^${coreutils_1.PageConfig.getOption('workspacesUrl')}([^?\/]+)`);
47
54
  })(Patterns || (Patterns = {}));
48
55
  /**
49
56
  * A data connector to access plugin settings.
@@ -119,13 +126,20 @@ const themes = {
119
126
  activate: (app, settings, splash, palette, mainMenu) => {
120
127
  const host = app.shell;
121
128
  const commands = app.commands;
122
- const url = app.info.urls.themes;
129
+ const url = coreutils_1.URLExt.join(app.info.urls.base, app.info.urls.themes);
123
130
  const key = themes.id;
124
131
  const manager = new apputils_1.ThemeManager({ key, host, settings, splash, url });
125
132
  // Keep a synchronously set reference to the current theme,
126
133
  // since the asynchronous setting of the theme in `changeTheme`
127
134
  // can lead to an incorrect toggle on the currently used theme.
128
135
  let currentTheme;
136
+ // Set data attributes on the application shell for the current theme.
137
+ manager.themeChanged.connect((sender, args) => {
138
+ currentTheme = args.newValue;
139
+ app.shell.dataset.themeLight = String(manager.isLight(currentTheme));
140
+ app.shell.dataset.themeName = currentTheme;
141
+ commands.notifyCommandChanged(CommandIDs.changeTheme);
142
+ });
129
143
  commands.addCommand(CommandIDs.changeTheme, {
130
144
  label: args => {
131
145
  const theme = args['theme'];
@@ -137,9 +151,7 @@ const themes = {
137
151
  if (theme === manager.theme) {
138
152
  return;
139
153
  }
140
- currentTheme = theme;
141
154
  manager.setTheme(theme);
142
- commands.notifyCommandChanged(CommandIDs.changeTheme);
143
155
  }
144
156
  });
145
157
  // If we have a main menu, add the theme manager to the settings menu.
@@ -185,20 +197,26 @@ const resolver = {
185
197
  autoStart: true,
186
198
  provides: apputils_1.IWindowResolver,
187
199
  requires: [application_1.IRouter],
188
- activate: (app, router) => {
189
- const candidate = Private.getWorkspace(router) || '';
200
+ activate: (app, router) => __awaiter(this, void 0, void 0, function* () {
190
201
  const resolver = new apputils_1.WindowResolver();
191
- return resolver
192
- .resolve(candidate)
193
- .catch(reason => {
194
- console.warn('Window resolution failed:', reason);
195
- return Private.redirect(router);
196
- })
197
- .then(() => {
198
- coreutils_1.PageConfig.setOption('workspace', resolver.name);
199
- return resolver;
200
- });
201
- }
202
+ const match = router.current.path.match(Patterns.workspace);
203
+ const workspace = (match && decodeURIComponent(match[1])) || '';
204
+ const candidate = workspace
205
+ ? coreutils_1.URLExt.join(coreutils_1.PageConfig.getOption('baseUrl'), coreutils_1.PageConfig.getOption('workspacesUrl'), workspace)
206
+ : app.info.defaultWorkspace;
207
+ try {
208
+ yield resolver.resolve(candidate);
209
+ }
210
+ catch (error) {
211
+ console.warn('Window resolution failed:', error);
212
+ // Return a promise that never resolves.
213
+ return new Promise(() => {
214
+ Private.redirect(router);
215
+ });
216
+ }
217
+ coreutils_1.PageConfig.setOption('workspace', resolver.name);
218
+ return resolver;
219
+ })
202
220
  };
203
221
  /**
204
222
  * The default splash screen provider.
@@ -236,28 +254,37 @@ const state = {
236
254
  windowName: resolver.name
237
255
  });
238
256
  commands.addCommand(CommandIDs.recoverState, {
239
- execute: () => {
257
+ execute: ({ global }) => __awaiter(this, void 0, void 0, function* () {
240
258
  const immediate = true;
241
259
  const silent = true;
242
260
  // Clear the state silently so that the state changed signal listener
243
261
  // will not be triggered as it causes a save state.
244
- return state
245
- .clear(silent)
246
- .then(() => commands.execute(CommandIDs.saveState, { immediate }));
247
- }
262
+ yield state.clear(silent);
263
+ // If the user explictly chooses to recover state, all of local storage
264
+ // should be cleared.
265
+ if (global) {
266
+ try {
267
+ window.localStorage.clear();
268
+ console.log('Cleared local storage');
269
+ }
270
+ catch (error) {
271
+ console.warn('Clearing local storage failed.', error);
272
+ // To give the user time to see the console warning before redirect,
273
+ // do not set the `immediate` flag.
274
+ return commands.execute(CommandIDs.saveState);
275
+ }
276
+ }
277
+ return commands.execute(CommandIDs.saveState, { immediate });
278
+ })
248
279
  });
249
280
  // Conflate all outstanding requests to the save state command that happen
250
281
  // within the `WORKSPACE_SAVE_DEBOUNCE_INTERVAL` into a single promise.
251
282
  let conflated = null;
252
283
  commands.addCommand(CommandIDs.saveState, {
253
- label: () => `Save Workspace (${Private.getWorkspace(router)})`,
254
- isEnabled: () => !!Private.getWorkspace(router),
255
- execute: args => {
256
- const workspace = Private.getWorkspace(router);
257
- if (!workspace) {
258
- return;
259
- }
260
- const timeout = args.immediate ? 0 : WORKSPACE_SAVE_DEBOUNCE_INTERVAL;
284
+ label: () => `Save Workspace (${app.info.workspace})`,
285
+ execute: ({ immediate }) => {
286
+ const { workspace } = app.info;
287
+ const timeout = immediate ? 0 : WORKSPACE_SAVE_DEBOUNCE_INTERVAL;
261
288
  const id = workspace;
262
289
  const metadata = { id };
263
290
  // Only instantiate a new conflated promise if one is not outstanding.
@@ -267,23 +294,21 @@ const state = {
267
294
  if (debouncer) {
268
295
  window.clearTimeout(debouncer);
269
296
  }
270
- debouncer = window.setTimeout(() => {
297
+ debouncer = window.setTimeout(() => __awaiter(this, void 0, void 0, function* () {
271
298
  // Prevent a race condition between the timeout and saving.
272
299
  if (!conflated) {
273
300
  return;
274
301
  }
275
- state
276
- .toJSON()
277
- .then(data => workspaces.save(id, { data, metadata }))
278
- .then(() => {
302
+ const data = yield state.toJSON();
303
+ try {
304
+ yield workspaces.save(id, { data, metadata });
279
305
  conflated.resolve(undefined);
280
- conflated = null;
281
- })
282
- .catch(reason => {
283
- conflated.reject(reason);
284
- conflated = null;
285
- });
286
- }, timeout);
306
+ }
307
+ catch (error) {
308
+ conflated.reject(error);
309
+ }
310
+ conflated = null;
311
+ }), timeout);
287
312
  return conflated.promise;
288
313
  }
289
314
  });
@@ -291,106 +316,79 @@ const state = {
291
316
  commands.execute(CommandIDs.saveState);
292
317
  };
293
318
  commands.addCommand(CommandIDs.loadState, {
294
- execute: (args) => {
319
+ execute: (args) => __awaiter(this, void 0, void 0, function* () {
295
320
  // Since the command can be executed an arbitrary number of times, make
296
321
  // sure it is safe to call multiple times.
297
322
  if (resolved) {
298
323
  return;
299
324
  }
300
325
  const { hash, path, search } = args;
301
- const workspace = Private.getWorkspace(router);
326
+ const { defaultWorkspace, workspace } = app.info;
302
327
  const query = coreutils_1.URLExt.queryStringToObject(search || '');
303
- const clone = query['clone'];
304
- const source = typeof clone === 'string' ? clone : workspace;
305
- let promise;
306
- // If the default /lab workspace is being cloned, copy it out of local
307
- // storage instead of making a round trip to the server because it
308
- // does not exist on the server.
309
- if (source === clone && source === '') {
310
- const prefix = `${source}:${info.namespace}:`;
311
- const mask = (key) => key.replace(prefix, '');
312
- const contents = coreutils_1.StateDB.toJSON(prefix, mask);
313
- resolved = true;
314
- transform.resolve({ type: 'overwrite', contents });
315
- promise = Promise.resolve();
328
+ const clone = typeof query['clone'] === 'string'
329
+ ? query['clone'] === ''
330
+ ? defaultWorkspace
331
+ : coreutils_1.URLExt.join(coreutils_1.PageConfig.getOption('baseUrl'), coreutils_1.PageConfig.getOption('workspacesUrl'), query['clone'])
332
+ : null;
333
+ const source = clone || workspace;
334
+ try {
335
+ const saved = yield workspaces.fetch(source);
336
+ // If this command is called after a reset, the state database
337
+ // will already be resolved.
338
+ if (!resolved) {
339
+ resolved = true;
340
+ transform.resolve({ type: 'overwrite', contents: saved.data });
341
+ }
316
342
  }
317
- // If there is no promise, fetch the source and overwrite the database.
318
- promise =
319
- promise ||
320
- workspaces
321
- .fetch(source)
322
- .then(saved => {
323
- // If this command is called after a reset, the state database
324
- // will already be resolved.
325
- if (!resolved) {
326
- resolved = true;
327
- transform.resolve({ type: 'overwrite', contents: saved.data });
328
- }
329
- })
330
- .catch(reason => {
331
- console.warn(`Fetching workspace (${workspace}) failed:`, reason);
332
- // If the workspace does not exist, cancel the data transformation
333
- // and save a workspace with the current user state data.
334
- if (!resolved) {
335
- resolved = true;
336
- transform.resolve({ type: 'cancel', contents: null });
337
- }
338
- })
339
- .then(() => {
340
- // Any time the local state database changes, save the workspace.
341
- if (workspace) {
342
- state.changed.connect(listener, state);
343
- }
344
- });
345
- return promise
346
- .catch(reason => {
347
- console.warn(`${CommandIDs.loadState} failed:`, reason);
348
- })
349
- .then(() => {
350
- const immediate = true;
351
- if (source === clone) {
352
- // Maintain the query string parameters but remove `clone`.
353
- delete query['clone'];
354
- const url = path + coreutils_1.URLExt.objectToQueryString(query) + hash;
355
- const cloned = commands
356
- .execute(CommandIDs.saveState, { immediate })
357
- .then(() => router.stop);
358
- // After the state has been cloned, navigate to the URL.
359
- cloned.then(() => {
360
- router.navigate(url, { silent: true });
361
- });
362
- return cloned;
343
+ catch (error) {
344
+ console.warn(`Fetching workspace (${workspace}) failed:`, error);
345
+ // If the workspace does not exist, cancel the data transformation
346
+ // and save a workspace with the current user state data.
347
+ if (!resolved) {
348
+ resolved = true;
349
+ transform.resolve({ type: 'cancel', contents: null });
363
350
  }
364
- // After the state database has finished loading, save it.
365
- return commands.execute(CommandIDs.saveState, { immediate });
366
- });
367
- }
368
- });
369
- // Both the load state and clone state patterns should trigger the load
370
- // state command if the URL matches one of them, but cloning a workspace
371
- // outranks loading it because it is an explicit user action.
372
- router.register({
373
- command: CommandIDs.loadState,
374
- pattern: Patterns.cloneState,
375
- rank: 20 // Set loading rank at a higher priority than the default 100.
351
+ }
352
+ // Any time the local state database changes, save the workspace.
353
+ if (workspace) {
354
+ state.changed.connect(listener, state);
355
+ }
356
+ const immediate = true;
357
+ if (source === clone) {
358
+ // Maintain the query string parameters but remove `clone`.
359
+ delete query['clone'];
360
+ const url = path + coreutils_1.URLExt.objectToQueryString(query) + hash;
361
+ const cloned = commands
362
+ .execute(CommandIDs.saveState, { immediate })
363
+ .then(() => router.stop);
364
+ // After the state has been cloned, navigate to the URL.
365
+ cloned.then(() => {
366
+ console.log(`HERE: ${url}`);
367
+ router.navigate(url, { silent: true });
368
+ });
369
+ return cloned;
370
+ }
371
+ // After the state database has finished loading, save it.
372
+ return commands.execute(CommandIDs.saveState, { immediate });
373
+ })
376
374
  });
377
375
  router.register({
378
376
  command: CommandIDs.loadState,
379
- pattern: Patterns.loadState,
380
- rank: 30 // Set loading rank at a higher priority than the default 100.
377
+ pattern: /.?/,
378
+ rank: 20 // Very high priority: 20/100.
381
379
  });
382
380
  commands.addCommand(CommandIDs.reset, {
383
381
  label: 'Reset Application State',
384
- execute: () => {
385
- commands
386
- .execute(CommandIDs.recoverState)
387
- .then(() => {
388
- router.reload();
389
- })
390
- .catch(() => {
391
- router.reload();
392
- });
393
- }
382
+ execute: () => __awaiter(this, void 0, void 0, function* () {
383
+ const global = true;
384
+ try {
385
+ yield commands.execute(CommandIDs.recoverState, { global });
386
+ }
387
+ catch (error) {
388
+ /* Ignore failures and redirect. */
389
+ }
390
+ router.reload();
391
+ })
394
392
  });
395
393
  commands.addCommand(CommandIDs.resetOnLoad, {
396
394
  execute: (args) => {
@@ -438,16 +436,13 @@ const state = {
438
436
  pattern: Patterns.resetOnLoad,
439
437
  rank: 10 // Set reset rank at a higher priority than the default 100.
440
438
  });
441
- const fallthrough = () => {
442
- // If the state database is still unresolved after the first URL has been
443
- // routed, leave it intact.
444
- if (!resolved) {
445
- resolved = true;
446
- transform.resolve({ type: 'cancel', contents: null });
447
- }
448
- router.routed.disconnect(fallthrough, state);
449
- };
450
- router.routed.connect(fallthrough, state);
439
+ // Clean up state database when the window unloads.
440
+ window.addEventListener('beforeunload', () => {
441
+ const silent = true;
442
+ state.clear(silent).catch(() => {
443
+ /* no-op */
444
+ });
445
+ });
451
446
  return state;
452
447
  }
453
448
  };
@@ -469,14 +464,6 @@ exports.default = plugins;
469
464
  */
470
465
  var Private;
471
466
  (function (Private) {
472
- /**
473
- * Returns the workspace name from the URL, if it exists.
474
- */
475
- function getWorkspace(router) {
476
- const match = router.current.path.match(Patterns.loadState);
477
- return (match && decodeURIComponent(match[1])) || '';
478
- }
479
- Private.getWorkspace = getWorkspace;
480
467
  /**
481
468
  * Create a splash element.
482
469
  */
@@ -545,27 +532,27 @@ var Private;
545
532
  * Allows the user to clear state if splash screen takes too long.
546
533
  */
547
534
  function redirect(router, warn = false) {
548
- const form = redirect_1.createRedirectForm(warn);
549
- const dialog = new apputils_1.Dialog({
550
- title: 'Please use a different workspace.',
551
- body: form,
552
- focusNodeSelector: 'input',
553
- buttons: [apputils_1.Dialog.okButton({ label: 'Switch Workspace' })]
554
- });
555
- return dialog.launch().then(result => {
535
+ return __awaiter(this, void 0, void 0, function* () {
536
+ const form = redirect_1.createRedirectForm(warn);
537
+ const dialog = new apputils_1.Dialog({
538
+ title: 'Please use a different workspace.',
539
+ body: form,
540
+ focusNodeSelector: 'input',
541
+ buttons: [apputils_1.Dialog.okButton({ label: 'Switch Workspace' })]
542
+ });
543
+ const result = yield dialog.launch();
556
544
  dialog.dispose();
557
- if (result.value) {
558
- const url = `workspaces/${result.value}`;
559
- // Navigate to a new workspace URL and abandon this session altogether.
560
- router.navigate(url, { hard: true, silent: true });
561
- // This promise will never resolve because the application navigates
562
- // away to a new location. It only exists to satisfy the return type
563
- // of the `redirect` function.
564
- return new Promise(() => {
565
- /* no-op */
566
- });
545
+ if (!result.value) {
546
+ return redirect(router, true);
567
547
  }
568
- return redirect(router, true);
548
+ // Navigate to a new workspace URL and abandon this session altogether.
549
+ const workspaces = coreutils_1.PageConfig.getOption('workspacesUrl');
550
+ const url = coreutils_1.URLExt.join(workspaces, result.value);
551
+ router.navigate(url, { hard: true, silent: true });
552
+ // This promise will never resolve because the application navigates
553
+ // away to a new location. It only exists to satisfy the return type
554
+ // of the `redirect` function.
555
+ return new Promise(() => undefined);
569
556
  });
570
557
  }
571
558
  Private.redirect = redirect;
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../apputils-extension/src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\nimport {\n ILayoutRestorer,\n IRouter,\n JupyterLab,\n JupyterLabPlugin\n} from '@jupyterlab/application';\n\nimport {\n Dialog,\n ICommandPalette,\n ISplashScreen,\n IThemeManager,\n IWindowResolver,\n ThemeManager,\n WindowResolver\n} from '@jupyterlab/apputils';\n\nimport {\n DataConnector,\n ISettingRegistry,\n IStateDB,\n PageConfig,\n SettingRegistry,\n StateDB,\n URLExt\n} from '@jupyterlab/coreutils';\n\nimport { IMainMenu } from '@jupyterlab/mainmenu';\n\nimport { ServiceManager } from '@jupyterlab/services';\n\nimport { CommandRegistry } from '@phosphor/commands';\n\nimport { PromiseDelegate } from '@phosphor/coreutils';\n\nimport { DisposableDelegate, IDisposable } from '@phosphor/disposable';\n\nimport { Menu } from '@phosphor/widgets';\n\nimport { activatePalette, restorePalette } from './palette';\n\nimport { createRedirectForm } from './redirect';\n\nimport '../style/index.css';\n\n/**\n * The interval in milliseconds that calls to save a workspace are debounced\n * to allow for multiple quickly executed state changes to result in a single\n * workspace save operation.\n */\nconst WORKSPACE_SAVE_DEBOUNCE_INTERVAL = 750;\n\n/**\n * The interval in milliseconds before recover options appear during splash.\n */\nconst SPLASH_RECOVER_TIMEOUT = 12000;\n\n/**\n * The command IDs used by the apputils plugin.\n */\nnamespace CommandIDs {\n export const changeTheme = 'apputils:change-theme';\n\n export const loadState = 'apputils:load-statedb';\n\n export const recoverState = 'apputils:recover-statedb';\n\n export const reset = 'apputils:reset';\n\n export const resetOnLoad = 'apputils:reset-on-load';\n\n export const saveState = 'apputils:save-statedb';\n}\n\n/**\n * The routing regular expressions used by the apputils plugin.\n */\nnamespace Patterns {\n export const cloneState = /[?&]clone([=&]|$)/;\n\n export const loadState = /^\\/workspaces\\/([^?\\/]+)/;\n\n export const resetOnLoad = /(\\?reset|\\&reset)($|&)/;\n}\n\n/**\n * A data connector to access plugin settings.\n */\nclass SettingsConnector extends DataConnector<\n ISettingRegistry.IPlugin,\n string\n> {\n /**\n * Create a new settings connector.\n */\n constructor(manager: ServiceManager) {\n super();\n this._manager = manager;\n }\n\n /**\n * Retrieve a saved bundle from the data connector.\n */\n fetch(id: string): Promise<ISettingRegistry.IPlugin> {\n return this._manager.settings.fetch(id).then(data => {\n // Replace the server ID with the original unmodified version.\n data.id = id;\n\n return data;\n });\n }\n\n /**\n * Save the user setting data in the data connector.\n */\n save(id: string, raw: string): Promise<void> {\n return this._manager.settings.save(id, raw);\n }\n\n private _manager: ServiceManager;\n}\n\n/**\n * The default command palette extension.\n */\nconst palette: JupyterLabPlugin<ICommandPalette> = {\n activate: activatePalette,\n id: '@jupyterlab/apputils-extension:palette',\n provides: ICommandPalette,\n autoStart: true\n};\n\n/**\n * The default command palette's restoration extension.\n *\n * #### Notes\n * The command palette's restoration logic is handled separately from the\n * command palette provider extension because the layout restorer dependency\n * causes the command palette to be unavailable to other extensions earlier\n * in the application load cycle.\n */\nconst paletteRestorer: JupyterLabPlugin<void> = {\n activate: restorePalette,\n id: '@jupyterlab/apputils-extension:palette-restorer',\n requires: [ILayoutRestorer],\n autoStart: true\n};\n\n/**\n * The default setting registry provider.\n */\nconst settings: JupyterLabPlugin<ISettingRegistry> = {\n id: '@jupyterlab/apputils-extension:settings',\n activate: (app: JupyterLab): ISettingRegistry => {\n const connector = new SettingsConnector(app.serviceManager);\n\n return new SettingRegistry({ connector });\n },\n autoStart: true,\n provides: ISettingRegistry\n};\n\n/**\n * The default theme manager provider.\n */\nconst themes: JupyterLabPlugin<IThemeManager> = {\n id: '@jupyterlab/apputils-extension:themes',\n requires: [ISettingRegistry, ISplashScreen],\n optional: [ICommandPalette, IMainMenu],\n activate: (\n app: JupyterLab,\n settings: ISettingRegistry,\n splash: ISplashScreen,\n palette: ICommandPalette | null,\n mainMenu: IMainMenu | null\n ): IThemeManager => {\n const host = app.shell;\n const commands = app.commands;\n const url = app.info.urls.themes;\n const key = themes.id;\n const manager = new ThemeManager({ key, host, settings, splash, url });\n\n // Keep a synchronously set reference to the current theme,\n // since the asynchronous setting of the theme in `changeTheme`\n // can lead to an incorrect toggle on the currently used theme.\n let currentTheme: string;\n\n commands.addCommand(CommandIDs.changeTheme, {\n label: args => {\n const theme = args['theme'] as string;\n return args['isPalette'] ? `Use ${theme} Theme` : theme;\n },\n isToggled: args => args['theme'] === currentTheme,\n execute: args => {\n const theme = args['theme'] as string;\n if (theme === manager.theme) {\n return;\n }\n currentTheme = theme;\n manager.setTheme(theme);\n commands.notifyCommandChanged(CommandIDs.changeTheme);\n }\n });\n\n // If we have a main menu, add the theme manager to the settings menu.\n if (mainMenu) {\n const themeMenu = new Menu({ commands });\n themeMenu.title.label = 'JupyterLab Theme';\n app.restored.then(() => {\n const command = CommandIDs.changeTheme;\n const isPalette = false;\n\n manager.themes.forEach(theme => {\n themeMenu.addItem({ command, args: { isPalette, theme } });\n });\n });\n mainMenu.settingsMenu.addGroup(\n [\n {\n type: 'submenu' as Menu.ItemType,\n submenu: themeMenu\n }\n ],\n 0\n );\n }\n\n // If we have a command palette, add theme switching options to it.\n if (palette) {\n app.restored.then(() => {\n const category = 'Settings';\n const command = CommandIDs.changeTheme;\n const isPalette = true;\n currentTheme = manager.theme;\n\n manager.themes.forEach(theme => {\n palette.addItem({ command, args: { isPalette, theme }, category });\n });\n });\n }\n\n return manager;\n },\n autoStart: true,\n provides: IThemeManager\n};\n\n/**\n * The default window name resolver provider.\n */\nconst resolver: JupyterLabPlugin<IWindowResolver> = {\n id: '@jupyterlab/apputils-extension:resolver',\n autoStart: true,\n provides: IWindowResolver,\n requires: [IRouter],\n activate: (app: JupyterLab, router: IRouter) => {\n const candidate = Private.getWorkspace(router) || '';\n const resolver = new WindowResolver();\n\n return resolver\n .resolve(candidate)\n .catch(reason => {\n console.warn('Window resolution failed:', reason);\n\n return Private.redirect(router);\n })\n .then(() => {\n PageConfig.setOption('workspace', resolver.name);\n\n return resolver;\n });\n }\n};\n\n/**\n * The default splash screen provider.\n */\nconst splash: JupyterLabPlugin<ISplashScreen> = {\n id: '@jupyterlab/apputils-extension:splash',\n autoStart: true,\n provides: ISplashScreen,\n activate: app => {\n return {\n show: () => {\n const { commands, restored } = app;\n\n return Private.showSplash(restored, commands, CommandIDs.reset);\n }\n };\n }\n};\n\n/**\n * The default state database for storing application state.\n */\nconst state: JupyterLabPlugin<IStateDB> = {\n id: '@jupyterlab/apputils-extension:state',\n autoStart: true,\n provides: IStateDB,\n requires: [IRouter, IWindowResolver, ISplashScreen],\n activate: (\n app: JupyterLab,\n router: IRouter,\n resolver: IWindowResolver,\n splash: ISplashScreen\n ) => {\n let debouncer: number;\n let resolved = false;\n\n const { commands, info, serviceManager } = app;\n const { workspaces } = serviceManager;\n const transform = new PromiseDelegate<StateDB.DataTransform>();\n const state = new StateDB({\n namespace: info.namespace,\n transform: transform.promise,\n windowName: resolver.name\n });\n\n commands.addCommand(CommandIDs.recoverState, {\n execute: () => {\n const immediate = true;\n const silent = true;\n\n // Clear the state silently so that the state changed signal listener\n // will not be triggered as it causes a save state.\n return state\n .clear(silent)\n .then(() => commands.execute(CommandIDs.saveState, { immediate }));\n }\n });\n\n // Conflate all outstanding requests to the save state command that happen\n // within the `WORKSPACE_SAVE_DEBOUNCE_INTERVAL` into a single promise.\n let conflated: PromiseDelegate<void> | null = null;\n\n commands.addCommand(CommandIDs.saveState, {\n label: () => `Save Workspace (${Private.getWorkspace(router)})`,\n isEnabled: () => !!Private.getWorkspace(router),\n execute: args => {\n const workspace = Private.getWorkspace(router);\n\n if (!workspace) {\n return;\n }\n\n const timeout = args.immediate ? 0 : WORKSPACE_SAVE_DEBOUNCE_INTERVAL;\n const id = workspace;\n const metadata = { id };\n\n // Only instantiate a new conflated promise if one is not outstanding.\n if (!conflated) {\n conflated = new PromiseDelegate<void>();\n }\n\n if (debouncer) {\n window.clearTimeout(debouncer);\n }\n\n debouncer = window.setTimeout(() => {\n // Prevent a race condition between the timeout and saving.\n if (!conflated) {\n return;\n }\n\n state\n .toJSON()\n .then(data => workspaces.save(id, { data, metadata }))\n .then(() => {\n conflated.resolve(undefined);\n conflated = null;\n })\n .catch(reason => {\n conflated.reject(reason);\n conflated = null;\n });\n }, timeout);\n\n return conflated.promise;\n }\n });\n\n const listener = (sender: any, change: StateDB.Change) => {\n commands.execute(CommandIDs.saveState);\n };\n\n commands.addCommand(CommandIDs.loadState, {\n execute: (args: IRouter.ILocation) => {\n // Since the command can be executed an arbitrary number of times, make\n // sure it is safe to call multiple times.\n if (resolved) {\n return;\n }\n\n const { hash, path, search } = args;\n const workspace = Private.getWorkspace(router);\n const query = URLExt.queryStringToObject(search || '');\n const clone = query['clone'];\n const source = typeof clone === 'string' ? clone : workspace;\n\n let promise: Promise<any>;\n\n // If the default /lab workspace is being cloned, copy it out of local\n // storage instead of making a round trip to the server because it\n // does not exist on the server.\n if (source === clone && source === '') {\n const prefix = `${source}:${info.namespace}:`;\n const mask = (key: string) => key.replace(prefix, '');\n const contents = StateDB.toJSON(prefix, mask);\n\n resolved = true;\n transform.resolve({ type: 'overwrite', contents });\n promise = Promise.resolve();\n }\n\n // If there is no promise, fetch the source and overwrite the database.\n promise =\n promise ||\n workspaces\n .fetch(source)\n .then(saved => {\n // If this command is called after a reset, the state database\n // will already be resolved.\n if (!resolved) {\n resolved = true;\n transform.resolve({ type: 'overwrite', contents: saved.data });\n }\n })\n .catch(reason => {\n console.warn(`Fetching workspace (${workspace}) failed:`, reason);\n\n // If the workspace does not exist, cancel the data transformation\n // and save a workspace with the current user state data.\n if (!resolved) {\n resolved = true;\n transform.resolve({ type: 'cancel', contents: null });\n }\n })\n .then(() => {\n // Any time the local state database changes, save the workspace.\n if (workspace) {\n state.changed.connect(listener, state);\n }\n });\n\n return promise\n .catch(reason => {\n console.warn(`${CommandIDs.loadState} failed:`, reason);\n })\n .then(() => {\n const immediate = true;\n\n if (source === clone) {\n // Maintain the query string parameters but remove `clone`.\n delete query['clone'];\n\n const url = path + URLExt.objectToQueryString(query) + hash;\n const cloned = commands\n .execute(CommandIDs.saveState, { immediate })\n .then(() => router.stop);\n\n // After the state has been cloned, navigate to the URL.\n cloned.then(() => {\n router.navigate(url, { silent: true });\n });\n\n return cloned;\n }\n\n // After the state database has finished loading, save it.\n return commands.execute(CommandIDs.saveState, { immediate });\n });\n }\n });\n // Both the load state and clone state patterns should trigger the load\n // state command if the URL matches one of them, but cloning a workspace\n // outranks loading it because it is an explicit user action.\n router.register({\n command: CommandIDs.loadState,\n pattern: Patterns.cloneState,\n rank: 20 // Set loading rank at a higher priority than the default 100.\n });\n router.register({\n command: CommandIDs.loadState,\n pattern: Patterns.loadState,\n rank: 30 // Set loading rank at a higher priority than the default 100.\n });\n\n commands.addCommand(CommandIDs.reset, {\n label: 'Reset Application State',\n execute: () => {\n commands\n .execute(CommandIDs.recoverState)\n .then(() => {\n router.reload();\n })\n .catch(() => {\n router.reload();\n });\n }\n });\n\n commands.addCommand(CommandIDs.resetOnLoad, {\n execute: (args: IRouter.ILocation) => {\n const { hash, path, search } = args;\n const query = URLExt.queryStringToObject(search || '');\n const reset = 'reset' in query;\n const clone = 'clone' in query;\n\n if (!reset) {\n return;\n }\n\n const loading = splash.show();\n\n // If the state database has already been resolved, resetting is\n // impossible without reloading.\n if (resolved) {\n return router.reload();\n }\n\n // Empty the state database.\n resolved = true;\n transform.resolve({ type: 'clear', contents: null });\n\n // Maintain the query string parameters but remove `reset`.\n delete query['reset'];\n\n const silent = true;\n const hard = true;\n const url = path + URLExt.objectToQueryString(query) + hash;\n const cleared = commands\n .execute(CommandIDs.recoverState)\n .then(() => router.stop); // Stop routing before new route navigation.\n\n // After the state has been reset, navigate to the URL.\n if (clone) {\n cleared.then(() => {\n router.navigate(url, { silent, hard });\n });\n } else {\n cleared.then(() => {\n router.navigate(url, { silent });\n loading.dispose();\n });\n }\n\n return cleared;\n }\n });\n router.register({\n command: CommandIDs.resetOnLoad,\n pattern: Patterns.resetOnLoad,\n rank: 10 // Set reset rank at a higher priority than the default 100.\n });\n\n const fallthrough = () => {\n // If the state database is still unresolved after the first URL has been\n // routed, leave it intact.\n if (!resolved) {\n resolved = true;\n transform.resolve({ type: 'cancel', contents: null });\n }\n router.routed.disconnect(fallthrough, state);\n };\n\n router.routed.connect(fallthrough, state);\n\n return state;\n }\n};\n\n/**\n * Export the plugins as default.\n */\nconst plugins: JupyterLabPlugin<any>[] = [\n palette,\n paletteRestorer,\n resolver,\n settings,\n state,\n splash,\n themes\n];\nexport default plugins;\n\n/**\n * The namespace for module private data.\n */\nnamespace Private {\n /**\n * Returns the workspace name from the URL, if it exists.\n */\n export function getWorkspace(router: IRouter): string {\n const match = router.current.path.match(Patterns.loadState);\n\n return (match && decodeURIComponent(match[1])) || '';\n }\n\n /**\n * Create a splash element.\n */\n function createSplash(): HTMLElement {\n const splash = document.createElement('div');\n const galaxy = document.createElement('div');\n const logo = document.createElement('div');\n\n splash.id = 'jupyterlab-splash';\n galaxy.id = 'galaxy';\n logo.id = 'main-logo';\n\n galaxy.appendChild(logo);\n ['1', '2', '3'].forEach(id => {\n const moon = document.createElement('div');\n const planet = document.createElement('div');\n\n moon.id = `moon${id}`;\n moon.className = 'moon orbit';\n planet.id = `planet${id}`;\n planet.className = 'planet';\n\n moon.appendChild(planet);\n galaxy.appendChild(moon);\n });\n\n splash.appendChild(galaxy);\n\n return splash;\n }\n\n /**\n * A debouncer for recovery attempts.\n */\n let debouncer = 0;\n\n /**\n * The recovery dialog.\n */\n let dialog: Dialog<any>;\n\n /**\n * Allows the user to clear state if splash screen takes too long.\n */\n function recover(fn: () => void): void {\n if (dialog) {\n return;\n }\n\n dialog = new Dialog({\n title: 'Loading...',\n body: `The loading screen is taking a long time.\n Would you like to clear the workspace or keep waiting?`,\n buttons: [\n Dialog.cancelButton({ label: 'Keep Waiting' }),\n Dialog.warnButton({ label: 'Clear Workspace' })\n ]\n });\n\n dialog\n .launch()\n .then(result => {\n if (result.button.accept) {\n return fn();\n }\n\n dialog.dispose();\n dialog = null;\n\n debouncer = window.setTimeout(() => {\n recover(fn);\n }, SPLASH_RECOVER_TIMEOUT);\n })\n .catch(() => {\n /* no-op */\n });\n }\n\n /**\n * Allows the user to clear state if splash screen takes too long.\n */\n export function redirect(router: IRouter, warn = false): Promise<void> {\n const form = createRedirectForm(warn);\n const dialog = new Dialog({\n title: 'Please use a different workspace.',\n body: form,\n focusNodeSelector: 'input',\n buttons: [Dialog.okButton({ label: 'Switch Workspace' })]\n });\n\n return dialog.launch().then(result => {\n dialog.dispose();\n\n if (result.value) {\n const url = `workspaces/${result.value}`;\n\n // Navigate to a new workspace URL and abandon this session altogether.\n router.navigate(url, { hard: true, silent: true });\n\n // This promise will never resolve because the application navigates\n // away to a new location. It only exists to satisfy the return type\n // of the `redirect` function.\n return new Promise<void>(() => {\n /* no-op */\n });\n }\n\n return redirect(router, true);\n });\n }\n\n /**\n * The splash element.\n */\n const splash = createSplash();\n\n /**\n * The splash screen counter.\n */\n let splashCount = 0;\n\n /**\n * Show the splash element.\n *\n * @param ready - A promise that must be resolved before splash disappears.\n *\n * @param recovery - A command that recovers from a hanging splash.\n */\n export function showSplash(\n ready: Promise<any>,\n commands: CommandRegistry,\n recovery: string\n ): IDisposable {\n splash.classList.remove('splash-fade');\n splashCount++;\n\n if (debouncer) {\n window.clearTimeout(debouncer);\n }\n debouncer = window.setTimeout(() => {\n if (commands.hasCommand(recovery)) {\n recover(() => {\n commands.execute(recovery);\n });\n }\n }, SPLASH_RECOVER_TIMEOUT);\n\n document.body.appendChild(splash);\n\n return new DisposableDelegate(() => {\n ready.then(() => {\n if (--splashCount === 0) {\n if (debouncer) {\n window.clearTimeout(debouncer);\n debouncer = 0;\n }\n\n if (dialog) {\n dialog.dispose();\n dialog = null;\n }\n\n splash.classList.add('splash-fade');\n window.setTimeout(() => {\n document.body.removeChild(splash);\n }, 500);\n }\n });\n });\n }\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../apputils-extension/src/index.ts"],"names":[],"mappings":"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","sourcesContent":["/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\nimport {\n ILayoutRestorer,\n IRouter,\n JupyterLab,\n JupyterLabPlugin\n} from '@jupyterlab/application';\n\nimport {\n Dialog,\n ICommandPalette,\n ISplashScreen,\n IThemeManager,\n IWindowResolver,\n ThemeManager,\n WindowResolver\n} from '@jupyterlab/apputils';\n\nimport {\n DataConnector,\n ISettingRegistry,\n IStateDB,\n PageConfig,\n SettingRegistry,\n StateDB,\n URLExt\n} from '@jupyterlab/coreutils';\n\nimport { IMainMenu } from '@jupyterlab/mainmenu';\n\nimport { ServiceManager } from '@jupyterlab/services';\n\nimport { CommandRegistry } from '@phosphor/commands';\n\nimport { PromiseDelegate } from '@phosphor/coreutils';\n\nimport { DisposableDelegate, IDisposable } from '@phosphor/disposable';\n\nimport { Menu } from '@phosphor/widgets';\n\nimport { activatePalette, restorePalette } from './palette';\n\nimport { createRedirectForm } from './redirect';\n\nimport '../style/index.css';\n\n/**\n * The interval in milliseconds that calls to save a workspace are debounced\n * to allow for multiple quickly executed state changes to result in a single\n * workspace save operation.\n */\nconst WORKSPACE_SAVE_DEBOUNCE_INTERVAL = 750;\n\n/**\n * The interval in milliseconds before recover options appear during splash.\n */\nconst SPLASH_RECOVER_TIMEOUT = 12000;\n\n/**\n * The command IDs used by the apputils plugin.\n */\nnamespace CommandIDs {\n export const changeTheme = 'apputils:change-theme';\n\n export const loadState = 'apputils:load-statedb';\n\n export const recoverState = 'apputils:recover-statedb';\n\n export const reset = 'apputils:reset';\n\n export const resetOnLoad = 'apputils:reset-on-load';\n\n export const saveState = 'apputils:save-statedb';\n}\n\n/**\n * The routing regular expressions used by the apputils plugin.\n */\nnamespace Patterns {\n export const resetOnLoad = /(\\?reset|\\&reset)($|&)/;\n\n export const workspace = new RegExp(\n `^${PageConfig.getOption('workspacesUrl')}([^?\\/]+)`\n );\n}\n\n/**\n * A data connector to access plugin settings.\n */\nclass SettingsConnector extends DataConnector<\n ISettingRegistry.IPlugin,\n string\n> {\n /**\n * Create a new settings connector.\n */\n constructor(manager: ServiceManager) {\n super();\n this._manager = manager;\n }\n\n /**\n * Retrieve a saved bundle from the data connector.\n */\n fetch(id: string): Promise<ISettingRegistry.IPlugin> {\n return this._manager.settings.fetch(id).then(data => {\n // Replace the server ID with the original unmodified version.\n data.id = id;\n\n return data;\n });\n }\n\n /**\n * Save the user setting data in the data connector.\n */\n save(id: string, raw: string): Promise<void> {\n return this._manager.settings.save(id, raw);\n }\n\n private _manager: ServiceManager;\n}\n\n/**\n * The default command palette extension.\n */\nconst palette: JupyterLabPlugin<ICommandPalette> = {\n activate: activatePalette,\n id: '@jupyterlab/apputils-extension:palette',\n provides: ICommandPalette,\n autoStart: true\n};\n\n/**\n * The default command palette's restoration extension.\n *\n * #### Notes\n * The command palette's restoration logic is handled separately from the\n * command palette provider extension because the layout restorer dependency\n * causes the command palette to be unavailable to other extensions earlier\n * in the application load cycle.\n */\nconst paletteRestorer: JupyterLabPlugin<void> = {\n activate: restorePalette,\n id: '@jupyterlab/apputils-extension:palette-restorer',\n requires: [ILayoutRestorer],\n autoStart: true\n};\n\n/**\n * The default setting registry provider.\n */\nconst settings: JupyterLabPlugin<ISettingRegistry> = {\n id: '@jupyterlab/apputils-extension:settings',\n activate: (app: JupyterLab): ISettingRegistry => {\n const connector = new SettingsConnector(app.serviceManager);\n\n return new SettingRegistry({ connector });\n },\n autoStart: true,\n provides: ISettingRegistry\n};\n\n/**\n * The default theme manager provider.\n */\nconst themes: JupyterLabPlugin<IThemeManager> = {\n id: '@jupyterlab/apputils-extension:themes',\n requires: [ISettingRegistry, ISplashScreen],\n optional: [ICommandPalette, IMainMenu],\n activate: (\n app: JupyterLab,\n settings: ISettingRegistry,\n splash: ISplashScreen,\n palette: ICommandPalette | null,\n mainMenu: IMainMenu | null\n ): IThemeManager => {\n const host = app.shell;\n const commands = app.commands;\n const url = URLExt.join(app.info.urls.base, app.info.urls.themes);\n const key = themes.id;\n const manager = new ThemeManager({ key, host, settings, splash, url });\n\n // Keep a synchronously set reference to the current theme,\n // since the asynchronous setting of the theme in `changeTheme`\n // can lead to an incorrect toggle on the currently used theme.\n let currentTheme: string;\n\n // Set data attributes on the application shell for the current theme.\n manager.themeChanged.connect((sender, args) => {\n currentTheme = args.newValue;\n app.shell.dataset.themeLight = String(manager.isLight(currentTheme));\n app.shell.dataset.themeName = currentTheme;\n commands.notifyCommandChanged(CommandIDs.changeTheme);\n });\n\n commands.addCommand(CommandIDs.changeTheme, {\n label: args => {\n const theme = args['theme'] as string;\n return args['isPalette'] ? `Use ${theme} Theme` : theme;\n },\n isToggled: args => args['theme'] === currentTheme,\n execute: args => {\n const theme = args['theme'] as string;\n if (theme === manager.theme) {\n return;\n }\n manager.setTheme(theme);\n }\n });\n\n // If we have a main menu, add the theme manager to the settings menu.\n if (mainMenu) {\n const themeMenu = new Menu({ commands });\n themeMenu.title.label = 'JupyterLab Theme';\n app.restored.then(() => {\n const command = CommandIDs.changeTheme;\n const isPalette = false;\n\n manager.themes.forEach(theme => {\n themeMenu.addItem({ command, args: { isPalette, theme } });\n });\n });\n mainMenu.settingsMenu.addGroup(\n [\n {\n type: 'submenu' as Menu.ItemType,\n submenu: themeMenu\n }\n ],\n 0\n );\n }\n\n // If we have a command palette, add theme switching options to it.\n if (palette) {\n app.restored.then(() => {\n const category = 'Settings';\n const command = CommandIDs.changeTheme;\n const isPalette = true;\n currentTheme = manager.theme;\n\n manager.themes.forEach(theme => {\n palette.addItem({ command, args: { isPalette, theme }, category });\n });\n });\n }\n\n return manager;\n },\n autoStart: true,\n provides: IThemeManager\n};\n\n/**\n * The default window name resolver provider.\n */\nconst resolver: JupyterLabPlugin<IWindowResolver> = {\n id: '@jupyterlab/apputils-extension:resolver',\n autoStart: true,\n provides: IWindowResolver,\n requires: [IRouter],\n activate: async (app: JupyterLab, router: IRouter) => {\n const resolver = new WindowResolver();\n const match = router.current.path.match(Patterns.workspace);\n const workspace = (match && decodeURIComponent(match[1])) || '';\n const candidate = workspace\n ? URLExt.join(\n PageConfig.getOption('baseUrl'),\n PageConfig.getOption('workspacesUrl'),\n workspace\n )\n : app.info.defaultWorkspace;\n\n try {\n await resolver.resolve(candidate);\n } catch (error) {\n console.warn('Window resolution failed:', error);\n\n // Return a promise that never resolves.\n return new Promise<IWindowResolver>(() => {\n Private.redirect(router);\n });\n }\n\n PageConfig.setOption('workspace', resolver.name);\n\n return resolver;\n }\n};\n\n/**\n * The default splash screen provider.\n */\nconst splash: JupyterLabPlugin<ISplashScreen> = {\n id: '@jupyterlab/apputils-extension:splash',\n autoStart: true,\n provides: ISplashScreen,\n activate: app => {\n return {\n show: () => {\n const { commands, restored } = app;\n\n return Private.showSplash(restored, commands, CommandIDs.reset);\n }\n };\n }\n};\n\n/**\n * The default state database for storing application state.\n */\nconst state: JupyterLabPlugin<IStateDB> = {\n id: '@jupyterlab/apputils-extension:state',\n autoStart: true,\n provides: IStateDB,\n requires: [IRouter, IWindowResolver, ISplashScreen],\n activate: (\n app: JupyterLab,\n router: IRouter,\n resolver: IWindowResolver,\n splash: ISplashScreen\n ) => {\n let debouncer: number;\n let resolved = false;\n\n const { commands, info, serviceManager } = app;\n const { workspaces } = serviceManager;\n const transform = new PromiseDelegate<StateDB.DataTransform>();\n const state = new StateDB({\n namespace: info.namespace,\n transform: transform.promise,\n windowName: resolver.name\n });\n\n commands.addCommand(CommandIDs.recoverState, {\n execute: async ({ global }) => {\n const immediate = true;\n const silent = true;\n\n // Clear the state silently so that the state changed signal listener\n // will not be triggered as it causes a save state.\n await state.clear(silent);\n\n // If the user explictly chooses to recover state, all of local storage\n // should be cleared.\n if (global) {\n try {\n window.localStorage.clear();\n console.log('Cleared local storage');\n } catch (error) {\n console.warn('Clearing local storage failed.', error);\n\n // To give the user time to see the console warning before redirect,\n // do not set the `immediate` flag.\n return commands.execute(CommandIDs.saveState);\n }\n }\n\n return commands.execute(CommandIDs.saveState, { immediate });\n }\n });\n\n // Conflate all outstanding requests to the save state command that happen\n // within the `WORKSPACE_SAVE_DEBOUNCE_INTERVAL` into a single promise.\n let conflated: PromiseDelegate<void> | null = null;\n\n commands.addCommand(CommandIDs.saveState, {\n label: () => `Save Workspace (${app.info.workspace})`,\n execute: ({ immediate }) => {\n const { workspace } = app.info;\n const timeout = immediate ? 0 : WORKSPACE_SAVE_DEBOUNCE_INTERVAL;\n const id = workspace;\n const metadata = { id };\n\n // Only instantiate a new conflated promise if one is not outstanding.\n if (!conflated) {\n conflated = new PromiseDelegate<void>();\n }\n\n if (debouncer) {\n window.clearTimeout(debouncer);\n }\n\n debouncer = window.setTimeout(async () => {\n // Prevent a race condition between the timeout and saving.\n if (!conflated) {\n return;\n }\n\n const data = await state.toJSON();\n\n try {\n await workspaces.save(id, { data, metadata });\n conflated.resolve(undefined);\n } catch (error) {\n conflated.reject(error);\n }\n conflated = null;\n }, timeout);\n\n return conflated.promise;\n }\n });\n\n const listener = (sender: any, change: StateDB.Change) => {\n commands.execute(CommandIDs.saveState);\n };\n\n commands.addCommand(CommandIDs.loadState, {\n execute: async (args: IRouter.ILocation) => {\n // Since the command can be executed an arbitrary number of times, make\n // sure it is safe to call multiple times.\n if (resolved) {\n return;\n }\n\n const { hash, path, search } = args;\n const { defaultWorkspace, workspace } = app.info;\n const query = URLExt.queryStringToObject(search || '');\n const clone =\n typeof query['clone'] === 'string'\n ? query['clone'] === ''\n ? defaultWorkspace\n : URLExt.join(\n PageConfig.getOption('baseUrl'),\n PageConfig.getOption('workspacesUrl'),\n query['clone']\n )\n : null;\n const source = clone || workspace;\n\n try {\n const saved = await workspaces.fetch(source);\n\n // If this command is called after a reset, the state database\n // will already be resolved.\n if (!resolved) {\n resolved = true;\n transform.resolve({ type: 'overwrite', contents: saved.data });\n }\n } catch (error) {\n console.warn(`Fetching workspace (${workspace}) failed:`, error);\n\n // If the workspace does not exist, cancel the data transformation\n // and save a workspace with the current user state data.\n if (!resolved) {\n resolved = true;\n transform.resolve({ type: 'cancel', contents: null });\n }\n }\n\n // Any time the local state database changes, save the workspace.\n if (workspace) {\n state.changed.connect(listener, state);\n }\n\n const immediate = true;\n\n if (source === clone) {\n // Maintain the query string parameters but remove `clone`.\n delete query['clone'];\n\n const url = path + URLExt.objectToQueryString(query) + hash;\n const cloned = commands\n .execute(CommandIDs.saveState, { immediate })\n .then(() => router.stop);\n\n // After the state has been cloned, navigate to the URL.\n cloned.then(() => {\n console.log(`HERE: ${url}`);\n router.navigate(url, { silent: true });\n });\n\n return cloned;\n }\n\n // After the state database has finished loading, save it.\n return commands.execute(CommandIDs.saveState, { immediate });\n }\n });\n\n router.register({\n command: CommandIDs.loadState,\n pattern: /.?/,\n rank: 20 // Very high priority: 20/100.\n });\n\n commands.addCommand(CommandIDs.reset, {\n label: 'Reset Application State',\n execute: async () => {\n const global = true;\n\n try {\n await commands.execute(CommandIDs.recoverState, { global });\n } catch (error) {\n /* Ignore failures and redirect. */\n }\n router.reload();\n }\n });\n\n commands.addCommand(CommandIDs.resetOnLoad, {\n execute: (args: IRouter.ILocation) => {\n const { hash, path, search } = args;\n const query = URLExt.queryStringToObject(search || '');\n const reset = 'reset' in query;\n const clone = 'clone' in query;\n\n if (!reset) {\n return;\n }\n\n const loading = splash.show();\n\n // If the state database has already been resolved, resetting is\n // impossible without reloading.\n if (resolved) {\n return router.reload();\n }\n\n // Empty the state database.\n resolved = true;\n transform.resolve({ type: 'clear', contents: null });\n\n // Maintain the query string parameters but remove `reset`.\n delete query['reset'];\n\n const silent = true;\n const hard = true;\n const url = path + URLExt.objectToQueryString(query) + hash;\n const cleared = commands\n .execute(CommandIDs.recoverState)\n .then(() => router.stop); // Stop routing before new route navigation.\n\n // After the state has been reset, navigate to the URL.\n if (clone) {\n cleared.then(() => {\n router.navigate(url, { silent, hard });\n });\n } else {\n cleared.then(() => {\n router.navigate(url, { silent });\n loading.dispose();\n });\n }\n\n return cleared;\n }\n });\n\n router.register({\n command: CommandIDs.resetOnLoad,\n pattern: Patterns.resetOnLoad,\n rank: 10 // Set reset rank at a higher priority than the default 100.\n });\n\n // Clean up state database when the window unloads.\n window.addEventListener('beforeunload', () => {\n const silent = true;\n\n state.clear(silent).catch(() => {\n /* no-op */\n });\n });\n\n return state;\n }\n};\n\n/**\n * Export the plugins as default.\n */\nconst plugins: JupyterLabPlugin<any>[] = [\n palette,\n paletteRestorer,\n resolver,\n settings,\n state,\n splash,\n themes\n];\nexport default plugins;\n\n/**\n * The namespace for module private data.\n */\nnamespace Private {\n /**\n * Create a splash element.\n */\n function createSplash(): HTMLElement {\n const splash = document.createElement('div');\n const galaxy = document.createElement('div');\n const logo = document.createElement('div');\n\n splash.id = 'jupyterlab-splash';\n galaxy.id = 'galaxy';\n logo.id = 'main-logo';\n\n galaxy.appendChild(logo);\n ['1', '2', '3'].forEach(id => {\n const moon = document.createElement('div');\n const planet = document.createElement('div');\n\n moon.id = `moon${id}`;\n moon.className = 'moon orbit';\n planet.id = `planet${id}`;\n planet.className = 'planet';\n\n moon.appendChild(planet);\n galaxy.appendChild(moon);\n });\n\n splash.appendChild(galaxy);\n\n return splash;\n }\n\n /**\n * A debouncer for recovery attempts.\n */\n let debouncer = 0;\n\n /**\n * The recovery dialog.\n */\n let dialog: Dialog<any>;\n\n /**\n * Allows the user to clear state if splash screen takes too long.\n */\n function recover(fn: () => void): void {\n if (dialog) {\n return;\n }\n\n dialog = new Dialog({\n title: 'Loading...',\n body: `The loading screen is taking a long time.\n Would you like to clear the workspace or keep waiting?`,\n buttons: [\n Dialog.cancelButton({ label: 'Keep Waiting' }),\n Dialog.warnButton({ label: 'Clear Workspace' })\n ]\n });\n\n dialog\n .launch()\n .then(result => {\n if (result.button.accept) {\n return fn();\n }\n\n dialog.dispose();\n dialog = null;\n\n debouncer = window.setTimeout(() => {\n recover(fn);\n }, SPLASH_RECOVER_TIMEOUT);\n })\n .catch(() => {\n /* no-op */\n });\n }\n\n /**\n * Allows the user to clear state if splash screen takes too long.\n */\n export async function redirect(router: IRouter, warn = false): Promise<void> {\n const form = createRedirectForm(warn);\n const dialog = new Dialog({\n title: 'Please use a different workspace.',\n body: form,\n focusNodeSelector: 'input',\n buttons: [Dialog.okButton({ label: 'Switch Workspace' })]\n });\n\n const result = await dialog.launch();\n\n dialog.dispose();\n if (!result.value) {\n return redirect(router, true);\n }\n\n // Navigate to a new workspace URL and abandon this session altogether.\n const workspaces = PageConfig.getOption('workspacesUrl');\n const url = URLExt.join(workspaces, result.value);\n\n router.navigate(url, { hard: true, silent: true });\n\n // This promise will never resolve because the application navigates\n // away to a new location. It only exists to satisfy the return type\n // of the `redirect` function.\n return new Promise<void>(() => undefined);\n }\n\n /**\n * The splash element.\n */\n const splash = createSplash();\n\n /**\n * The splash screen counter.\n */\n let splashCount = 0;\n\n /**\n * Show the splash element.\n *\n * @param ready - A promise that must be resolved before splash disappears.\n *\n * @param recovery - A command that recovers from a hanging splash.\n */\n export function showSplash(\n ready: Promise<any>,\n commands: CommandRegistry,\n recovery: string\n ): IDisposable {\n splash.classList.remove('splash-fade');\n splashCount++;\n\n if (debouncer) {\n window.clearTimeout(debouncer);\n }\n debouncer = window.setTimeout(() => {\n if (commands.hasCommand(recovery)) {\n recover(() => {\n commands.execute(recovery);\n });\n }\n }, SPLASH_RECOVER_TIMEOUT);\n\n document.body.appendChild(splash);\n\n return new DisposableDelegate(() => {\n ready.then(() => {\n if (--splashCount === 0) {\n if (debouncer) {\n window.clearTimeout(debouncer);\n debouncer = 0;\n }\n\n if (dialog) {\n dialog.dispose();\n dialog = null;\n }\n\n splash.classList.add('splash-fade');\n window.setTimeout(() => {\n document.body.removeChild(splash);\n }, 500);\n }\n });\n });\n }\n}\n"]}
package/lib/palette.js CHANGED
@@ -23,6 +23,9 @@ class Palette {
23
23
  */
24
24
  constructor(palette) {
25
25
  this._palette = palette;
26
+ this._palette.title.iconClass = 'jp-PaletteIcon jp-SideBar-tabIcon';
27
+ this._palette.title.label = '';
28
+ this._palette.title.caption = 'Command Palette';
26
29
  }
27
30
  /**
28
31
  * The placeholder text of the command palette's search input.
@@ -66,7 +69,7 @@ function activatePalette(app) {
66
69
  label: 'Activate Command Palette'
67
70
  });
68
71
  palette.inputNode.placeholder = 'SEARCH';
69
- shell.addToLeftArea(palette);
72
+ shell.addToLeftArea(palette, { rank: 300 });
70
73
  return new Palette(palette);
71
74
  }
72
75
  exports.activatePalette = activatePalette;
@@ -1 +1 @@
1
- {"version":3,"file":"palette.js","sourceRoot":"","sources":["../../../../apputils-extension/src/palette.ts"],"names":[],"mappings":";AAAA;;;+EAG+E;;AAE/E,qDAAuE;AAEvE,+CAAmD;AAMnD;;GAEG;AACH,IAAU,UAAU,CAEnB;AAFD,WAAU,UAAU;IACL,mBAAQ,GAAG,mCAAmC,CAAC;AAC9D,CAAC,EAFS,UAAU,KAAV,UAAU,QAEnB;AAED;;;GAGG;AACH;IACE;;OAEG;IACH,YAAY,OAAuB;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAI,WAAW,CAAC,WAAmB;QACjC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACpD,CAAC;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,OAAqB;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAsC,CAAC,CAAC;QACzE,OAAO,IAAI,+BAAkB,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CAGF;AAED;;GAEG;AACH,yBAAgC,GAAe;IAC7C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAE3C,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE;QACvC,OAAO,EAAE,GAAG,EAAE;YACZ,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,EAAE,0BAA0B;KAClC,CAAC,CAAC;IAEH,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC;IAEzC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAE7B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAhBD,0CAgBC;AAED;;GAEG;AACH,wBACE,GAAe,EACf,QAAyB;IAEzB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAE3C,4EAA4E;IAC5E,8EAA8E;IAC9E,WAAW;IACX,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAVD,wCAUC;AAED;;GAEG;AACH,IAAU,OAAO,CAkBhB;AAlBD,WAAU,OAAO;IACf;;OAEG;IACH,IAAI,OAAuB,CAAC;IAE5B;;OAEG;IACH,uBAA8B,GAAe;QAC3C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,IAAI,wBAAc,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,EAAE,GAAG,iBAAiB,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;SAClC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IARe,qBAAa,gBAQ5B,CAAA;AACH,CAAC,EAlBS,OAAO,KAAP,OAAO,QAkBhB","sourcesContent":["/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\nimport { DisposableDelegate, IDisposable } from '@phosphor/disposable';\n\nimport { CommandPalette } from '@phosphor/widgets';\n\nimport { ILayoutRestorer, JupyterLab } from '@jupyterlab/application';\n\nimport { ICommandPalette, IPaletteItem } from '@jupyterlab/apputils';\n\n/**\n * The command IDs used by the apputils extension.\n */\nnamespace CommandIDs {\n export const activate = 'apputils:activate-command-palette';\n}\n\n/**\n * A thin wrapper around the `CommandPalette` class to conform with the\n * JupyterLab interface for the application-wide command palette.\n */\nclass Palette implements ICommandPalette {\n /**\n * Create a palette instance.\n */\n constructor(palette: CommandPalette) {\n this._palette = palette;\n }\n\n /**\n * The placeholder text of the command palette's search input.\n */\n set placeholder(placeholder: string) {\n this._palette.inputNode.placeholder = placeholder;\n }\n get placeholder(): string {\n return this._palette.inputNode.placeholder;\n }\n\n /**\n * Activate the command palette for user input.\n */\n activate(): void {\n this._palette.activate();\n }\n\n /**\n * Add a command item to the command palette.\n *\n * @param options - The options for creating the command item.\n *\n * @returns A disposable that will remove the item from the palette.\n */\n addItem(options: IPaletteItem): IDisposable {\n let item = this._palette.addItem(options as CommandPalette.IItemOptions);\n return new DisposableDelegate(() => {\n this._palette.removeItem(item);\n });\n }\n\n private _palette: CommandPalette;\n}\n\n/**\n * Activate the command palette.\n */\nexport function activatePalette(app: JupyterLab): ICommandPalette {\n const { commands, shell } = app;\n const palette = Private.createPalette(app);\n\n commands.addCommand(CommandIDs.activate, {\n execute: () => {\n shell.activateById(palette.id);\n },\n label: 'Activate Command Palette'\n });\n\n palette.inputNode.placeholder = 'SEARCH';\n\n shell.addToLeftArea(palette);\n\n return new Palette(palette);\n}\n\n/**\n * Restore the command palette.\n */\nexport function restorePalette(\n app: JupyterLab,\n restorer: ILayoutRestorer\n): void {\n const palette = Private.createPalette(app);\n\n // Let the application restorer track the command palette for restoration of\n // application state (e.g. setting the command palette as the current side bar\n // widget).\n restorer.add(palette, 'command-palette');\n}\n\n/**\n * The namespace for module private data.\n */\nnamespace Private {\n /**\n * The private command palette instance.\n */\n let palette: CommandPalette;\n\n /**\n * Create the application-wide command palette.\n */\n export function createPalette(app: JupyterLab): CommandPalette {\n if (!palette) {\n palette = new CommandPalette({ commands: app.commands });\n palette.id = 'command-palette';\n palette.title.label = 'Commands';\n }\n\n return palette;\n }\n}\n"]}
1
+ {"version":3,"file":"palette.js","sourceRoot":"","sources":["../../../../apputils-extension/src/palette.ts"],"names":[],"mappings":";AAAA;;;+EAG+E;;AAE/E,qDAAuE;AAEvE,+CAAmD;AAMnD;;GAEG;AACH,IAAU,UAAU,CAEnB;AAFD,WAAU,UAAU;IACL,mBAAQ,GAAG,mCAAmC,CAAC;AAC9D,CAAC,EAFS,UAAU,KAAV,UAAU,QAEnB;AAED;;;GAGG;AACH;IACE;;OAEG;IACH,YAAY,OAAuB;QACjC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,GAAG,mCAAmC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG,iBAAiB,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAI,WAAW,CAAC,WAAmB;QACjC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACpD,CAAC;IACD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;OAMG;IACH,OAAO,CAAC,OAAqB;QAC3B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAsC,CAAC,CAAC;QACzE,OAAO,IAAI,+BAAkB,CAAC,GAAG,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;CAGF;AAED;;GAEG;AACH,yBAAgC,GAAe;IAC7C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC;IAChC,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAE3C,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE;QACvC,OAAO,EAAE,GAAG,EAAE;YACZ,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,KAAK,EAAE,0BAA0B;KAClC,CAAC,CAAC;IAEH,OAAO,CAAC,SAAS,CAAC,WAAW,GAAG,QAAQ,CAAC;IAEzC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAE5C,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC;AAhBD,0CAgBC;AAED;;GAEG;AACH,wBACE,GAAe,EACf,QAAyB;IAEzB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAE3C,4EAA4E;IAC5E,8EAA8E;IAC9E,WAAW;IACX,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC3C,CAAC;AAVD,wCAUC;AAED;;GAEG;AACH,IAAU,OAAO,CAkBhB;AAlBD,WAAU,OAAO;IACf;;OAEG;IACH,IAAI,OAAuB,CAAC;IAE5B;;OAEG;IACH,uBAA8B,GAAe;QAC3C,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,GAAG,IAAI,wBAAc,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,EAAE,GAAG,iBAAiB,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC;SAClC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IARe,qBAAa,gBAQ5B,CAAA;AACH,CAAC,EAlBS,OAAO,KAAP,OAAO,QAkBhB","sourcesContent":["/*-----------------------------------------------------------------------------\n| Copyright (c) Jupyter Development Team.\n| Distributed under the terms of the Modified BSD License.\n|----------------------------------------------------------------------------*/\n\nimport { DisposableDelegate, IDisposable } from '@phosphor/disposable';\n\nimport { CommandPalette } from '@phosphor/widgets';\n\nimport { ILayoutRestorer, JupyterLab } from '@jupyterlab/application';\n\nimport { ICommandPalette, IPaletteItem } from '@jupyterlab/apputils';\n\n/**\n * The command IDs used by the apputils extension.\n */\nnamespace CommandIDs {\n export const activate = 'apputils:activate-command-palette';\n}\n\n/**\n * A thin wrapper around the `CommandPalette` class to conform with the\n * JupyterLab interface for the application-wide command palette.\n */\nclass Palette implements ICommandPalette {\n /**\n * Create a palette instance.\n */\n constructor(palette: CommandPalette) {\n this._palette = palette;\n this._palette.title.iconClass = 'jp-PaletteIcon jp-SideBar-tabIcon';\n this._palette.title.label = '';\n this._palette.title.caption = 'Command Palette';\n }\n\n /**\n * The placeholder text of the command palette's search input.\n */\n set placeholder(placeholder: string) {\n this._palette.inputNode.placeholder = placeholder;\n }\n get placeholder(): string {\n return this._palette.inputNode.placeholder;\n }\n\n /**\n * Activate the command palette for user input.\n */\n activate(): void {\n this._palette.activate();\n }\n\n /**\n * Add a command item to the command palette.\n *\n * @param options - The options for creating the command item.\n *\n * @returns A disposable that will remove the item from the palette.\n */\n addItem(options: IPaletteItem): IDisposable {\n let item = this._palette.addItem(options as CommandPalette.IItemOptions);\n return new DisposableDelegate(() => {\n this._palette.removeItem(item);\n });\n }\n\n private _palette: CommandPalette;\n}\n\n/**\n * Activate the command palette.\n */\nexport function activatePalette(app: JupyterLab): ICommandPalette {\n const { commands, shell } = app;\n const palette = Private.createPalette(app);\n\n commands.addCommand(CommandIDs.activate, {\n execute: () => {\n shell.activateById(palette.id);\n },\n label: 'Activate Command Palette'\n });\n\n palette.inputNode.placeholder = 'SEARCH';\n\n shell.addToLeftArea(palette, { rank: 300 });\n\n return new Palette(palette);\n}\n\n/**\n * Restore the command palette.\n */\nexport function restorePalette(\n app: JupyterLab,\n restorer: ILayoutRestorer\n): void {\n const palette = Private.createPalette(app);\n\n // Let the application restorer track the command palette for restoration of\n // application state (e.g. setting the command palette as the current side bar\n // widget).\n restorer.add(palette, 'command-palette');\n}\n\n/**\n * The namespace for module private data.\n */\nnamespace Private {\n /**\n * The private command palette instance.\n */\n let palette: CommandPalette;\n\n /**\n * Create the application-wide command palette.\n */\n export function createPalette(app: JupyterLab): CommandPalette {\n if (!palette) {\n palette = new CommandPalette({ commands: app.commands });\n palette.id = 'command-palette';\n palette.title.label = 'Commands';\n }\n\n return palette;\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyterlab/apputils-extension",
3
- "version": "0.17.2",
3
+ "version": "0.18.4",
4
4
  "description": "JupyterLab - Application Utilities Extension",
5
5
  "homepage": "https://github.com/jupyterlab/jupyterlab",
6
6
  "bugs": {
@@ -32,11 +32,11 @@
32
32
  "watch": "tsc -w --listEmittedFiles"
33
33
  },
34
34
  "dependencies": {
35
- "@jupyterlab/application": "^0.17.2",
36
- "@jupyterlab/apputils": "^0.17.2",
37
- "@jupyterlab/coreutils": "^2.0.2",
38
- "@jupyterlab/mainmenu": "^0.6.2",
39
- "@jupyterlab/services": "^3.0.3",
35
+ "@jupyterlab/application": "^0.18.4",
36
+ "@jupyterlab/apputils": "^0.18.4",
37
+ "@jupyterlab/coreutils": "^2.1.4",
38
+ "@jupyterlab/mainmenu": "^0.7.4",
39
+ "@jupyterlab/services": "^3.1.4",
40
40
  "@phosphor/commands": "^1.5.0",
41
41
  "@phosphor/coreutils": "^1.3.0",
42
42
  "@phosphor/disposable": "^1.1.2",