@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 +152 -165
- package/lib/index.js.map +1 -1
- package/lib/palette.js +4 -1
- package/lib/palette.js.map +1 -1
- package/package.json +6 -6
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
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
.
|
|
198
|
-
|
|
199
|
-
|
|
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
|
-
|
|
245
|
-
|
|
246
|
-
|
|
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 (${
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
const
|
|
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
|
-
|
|
277
|
-
|
|
278
|
-
.then(() => {
|
|
302
|
+
const data = yield state.toJSON();
|
|
303
|
+
try {
|
|
304
|
+
yield workspaces.save(id, { data, metadata });
|
|
279
305
|
conflated.resolve(undefined);
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
.
|
|
283
|
-
|
|
284
|
-
|
|
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 =
|
|
326
|
+
const { defaultWorkspace, workspace } = app.info;
|
|
302
327
|
const query = coreutils_1.URLExt.queryStringToObject(search || '');
|
|
303
|
-
const clone = query['clone']
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
const
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
resolved
|
|
314
|
-
|
|
315
|
-
|
|
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
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
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
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
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:
|
|
380
|
-
rank:
|
|
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
|
-
|
|
386
|
-
|
|
387
|
-
.
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
.
|
|
391
|
-
|
|
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
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
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
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":";AAAA;;;+EAG+E;;;;;;;;;;AAE/E,yDAKiC;AAEjC,mDAQ8B;AAE9B,qDAQ+B;AAE/B,mDAAiD;AAMjD,mDAAsD;AAEtD,qDAAuE;AAEvE,+CAAyC;AAEzC,uCAA4D;AAE5D,yCAAgD;AAEhD,8BAA4B;AAE5B;;;;GAIG;AACH,MAAM,gCAAgC,GAAG,GAAG,CAAC;AAE7C;;GAEG;AACH,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAErC;;GAEG;AACH,IAAU,UAAU,CAYnB;AAZD,WAAU,UAAU;IACL,sBAAW,GAAG,uBAAuB,CAAC;IAEtC,oBAAS,GAAG,uBAAuB,CAAC;IAEpC,uBAAY,GAAG,0BAA0B,CAAC;IAE1C,gBAAK,GAAG,gBAAgB,CAAC;IAEzB,sBAAW,GAAG,wBAAwB,CAAC;IAEvC,oBAAS,GAAG,uBAAuB,CAAC;AACnD,CAAC,EAZS,UAAU,KAAV,UAAU,QAYnB;AAED;;GAEG;AACH,IAAU,QAAQ,CAMjB;AAND,WAAU,QAAQ;IACH,oBAAW,GAAG,wBAAwB,CAAC;IAEvC,kBAAS,GAAG,IAAI,MAAM,CACjC,IAAI,sBAAU,CAAC,SAAS,CAAC,eAAe,CAAC,WAAW,CACrD,CAAC;AACJ,CAAC,EANS,QAAQ,KAAR,QAAQ,QAMjB;AAED;;GAEG;AACH,uBAAwB,SAAQ,yBAG/B;IACC;;OAEG;IACH,YAAY,OAAuB;QACjC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,EAAU;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAClD,8DAA8D;YAC9D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;YAEb,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,EAAU,EAAE,GAAW;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;CAGF;AAED;;GAEG;AACH,MAAM,OAAO,GAAsC;IACjD,QAAQ,EAAE,yBAAe;IACzB,EAAE,EAAE,wCAAwC;IAC5C,QAAQ,EAAE,0BAAe;IACzB,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,eAAe,GAA2B;IAC9C,QAAQ,EAAE,wBAAc;IACxB,EAAE,EAAE,iDAAiD;IACrD,QAAQ,EAAE,CAAC,6BAAe,CAAC;IAC3B,SAAS,EAAE,IAAI;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,QAAQ,GAAuC;IACnD,EAAE,EAAE,yCAAyC;IAC7C,QAAQ,EAAE,CAAC,GAAe,EAAoB,EAAE;QAC9C,MAAM,SAAS,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE5D,OAAO,IAAI,2BAAe,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,4BAAgB;CAC3B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,GAAoC;IAC9C,EAAE,EAAE,uCAAuC;IAC3C,QAAQ,EAAE,CAAC,4BAAgB,EAAE,wBAAa,CAAC;IAC3C,QAAQ,EAAE,CAAC,0BAAe,EAAE,oBAAS,CAAC;IACtC,QAAQ,EAAE,CACR,GAAe,EACf,QAA0B,EAC1B,MAAqB,EACrB,OAA+B,EAC/B,QAA0B,EACX,EAAE;QACjB,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;QACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,MAAM,GAAG,GAAG,kBAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,IAAI,uBAAY,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAEvE,2DAA2D;QAC3D,+DAA+D;QAC/D,+DAA+D;QAC/D,IAAI,YAAoB,CAAC;QAEzB,sEAAsE;QACtE,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;YAC5C,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC7B,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;YACrE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC;YAC3C,QAAQ,CAAC,oBAAoB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE;YAC1C,KAAK,EAAE,IAAI,CAAC,EAAE;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAW,CAAC;gBACtC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1D,CAAC;YACD,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,YAAY;YACjD,OAAO,EAAE,IAAI,CAAC,EAAE;gBACd,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAW,CAAC;gBACtC,IAAI,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE;oBAC3B,OAAO;iBACR;gBACD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC;SACF,CAAC,CAAC;QAEH,sEAAsE;QACtE,IAAI,QAAQ,EAAE;YACZ,MAAM,SAAS,GAAG,IAAI,cAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACzC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,kBAAkB,CAAC;YAC3C,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;gBACrB,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC;gBACvC,MAAM,SAAS,GAAG,KAAK,CAAC;gBAExB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAC7B,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC7D,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAC5B;gBACE;oBACE,IAAI,EAAE,SAA0B;oBAChC,OAAO,EAAE,SAAS;iBACnB;aACF,EACD,CAAC,CACF,CAAC;SACH;QAED,mEAAmE;QACnE,IAAI,OAAO,EAAE;YACX,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE;gBACrB,MAAM,QAAQ,GAAG,UAAU,CAAC;gBAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC;gBACvC,MAAM,SAAS,GAAG,IAAI,CAAC;gBACvB,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;gBAE7B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBAC7B,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACrE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,wBAAa;CACxB,CAAC;AAEF;;GAEG;AACH,MAAM,QAAQ,GAAsC;IAClD,EAAE,EAAE,yCAAyC;IAC7C,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,0BAAe;IACzB,QAAQ,EAAE,CAAC,qBAAO,CAAC;IACnB,QAAQ,EAAE,CAAO,GAAe,EAAE,MAAe,EAAE,EAAE;QACnD,MAAM,QAAQ,GAAG,IAAI,yBAAc,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5D,MAAM,SAAS,GAAG,CAAC,KAAK,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,SAAS,GAAG,SAAS;YACzB,CAAC,CAAC,kBAAM,CAAC,IAAI,CACT,sBAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EAC/B,sBAAU,CAAC,SAAS,CAAC,eAAe,CAAC,EACrC,SAAS,CACV;YACH,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;QAE9B,IAAI;YACF,MAAM,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SACnC;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAEjD,wCAAwC;YACxC,OAAO,IAAI,OAAO,CAAkB,GAAG,EAAE;gBACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;SACJ;QAED,sBAAU,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEjD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAA;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,GAAoC;IAC9C,EAAE,EAAE,uCAAuC;IAC3C,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,wBAAa;IACvB,QAAQ,EAAE,GAAG,CAAC,EAAE;QACd,OAAO;YACL,IAAI,EAAE,GAAG,EAAE;gBACT,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC;gBAEnC,OAAO,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;YAClE,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,KAAK,GAA+B;IACxC,EAAE,EAAE,sCAAsC;IAC1C,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,oBAAQ;IAClB,QAAQ,EAAE,CAAC,qBAAO,EAAE,0BAAe,EAAE,wBAAa,CAAC;IACnD,QAAQ,EAAE,CACR,GAAe,EACf,MAAe,EACf,QAAyB,EACzB,MAAqB,EACrB,EAAE;QACF,IAAI,SAAiB,CAAC;QACtB,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,GAAG,CAAC;QAC/C,MAAM,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,2BAAe,EAAyB,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAI,mBAAO,CAAC;YACxB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,SAAS,CAAC,OAAO;YAC5B,UAAU,EAAE,QAAQ,CAAC,IAAI;SAC1B,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,EAAE;YAC3C,OAAO,EAAE,CAAO,EAAE,MAAM,EAAE,EAAE,EAAE;gBAC5B,MAAM,SAAS,GAAG,IAAI,CAAC;gBACvB,MAAM,MAAM,GAAG,IAAI,CAAC;gBAEpB,qEAAqE;gBACrE,mDAAmD;gBACnD,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAE1B,uEAAuE;gBACvE,qBAAqB;gBACrB,IAAI,MAAM,EAAE;oBACV,IAAI;wBACF,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;wBAC5B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;qBACtC;oBAAC,OAAO,KAAK,EAAE;wBACd,OAAO,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;wBAEtD,oEAAoE;wBACpE,mCAAmC;wBACnC,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;qBAC/C;iBACF;gBAED,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/D,CAAC,CAAA;SACF,CAAC,CAAC;QAEH,0EAA0E;QAC1E,uEAAuE;QACvE,IAAI,SAAS,GAAiC,IAAI,CAAC;QAEnD,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE;YACxC,KAAK,EAAE,GAAG,EAAE,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG;YACrD,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;gBACzB,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;gBAC/B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC,CAAC;gBACjE,MAAM,EAAE,GAAG,SAAS,CAAC;gBACrB,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,CAAC;gBAExB,sEAAsE;gBACtE,IAAI,CAAC,SAAS,EAAE;oBACd,SAAS,GAAG,IAAI,2BAAe,EAAQ,CAAC;iBACzC;gBAED,IAAI,SAAS,EAAE;oBACb,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;iBAChC;gBAED,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAS,EAAE;oBACvC,2DAA2D;oBAC3D,IAAI,CAAC,SAAS,EAAE;wBACd,OAAO;qBACR;oBAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;oBAElC,IAAI;wBACF,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;wBAC9C,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;qBAC9B;oBAAC,OAAO,KAAK,EAAE;wBACd,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;qBACzB;oBACD,SAAS,GAAG,IAAI,CAAC;gBACnB,CAAC,CAAA,EAAE,OAAO,CAAC,CAAC;gBAEZ,OAAO,SAAS,CAAC,OAAO,CAAC;YAC3B,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,CAAC,MAAW,EAAE,MAAsB,EAAE,EAAE;YACvD,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE;YACxC,OAAO,EAAE,CAAO,IAAuB,EAAE,EAAE;gBACzC,uEAAuE;gBACvE,0CAA0C;gBAC1C,IAAI,QAAQ,EAAE;oBACZ,OAAO;iBACR;gBAED,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACpC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;gBACjD,MAAM,KAAK,GAAG,kBAAM,CAAC,mBAAmB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACvD,MAAM,KAAK,GACT,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ;oBAChC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE;wBACrB,CAAC,CAAC,gBAAgB;wBAClB,CAAC,CAAC,kBAAM,CAAC,IAAI,CACT,sBAAU,CAAC,SAAS,CAAC,SAAS,CAAC,EAC/B,sBAAU,CAAC,SAAS,CAAC,eAAe,CAAC,EACrC,KAAK,CAAC,OAAO,CAAC,CACf;oBACL,CAAC,CAAC,IAAI,CAAC;gBACX,MAAM,MAAM,GAAG,KAAK,IAAI,SAAS,CAAC;gBAElC,IAAI;oBACF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAE7C,8DAA8D;oBAC9D,4BAA4B;oBAC5B,IAAI,CAAC,QAAQ,EAAE;wBACb,QAAQ,GAAG,IAAI,CAAC;wBAChB,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;qBAChE;iBACF;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,uBAAuB,SAAS,WAAW,EAAE,KAAK,CAAC,CAAC;oBAEjE,kEAAkE;oBAClE,yDAAyD;oBACzD,IAAI,CAAC,QAAQ,EAAE;wBACb,QAAQ,GAAG,IAAI,CAAC;wBAChB,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;qBACvD;iBACF;gBAED,iEAAiE;gBACjE,IAAI,SAAS,EAAE;oBACb,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;iBACxC;gBAED,MAAM,SAAS,GAAG,IAAI,CAAC;gBAEvB,IAAI,MAAM,KAAK,KAAK,EAAE;oBACpB,2DAA2D;oBAC3D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;oBAEtB,MAAM,GAAG,GAAG,IAAI,GAAG,kBAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBAC5D,MAAM,MAAM,GAAG,QAAQ;yBACpB,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC;yBAC5C,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAE3B,wDAAwD;oBACxD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;wBACf,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC;wBAC5B,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzC,CAAC,CAAC,CAAC;oBAEH,OAAO,MAAM,CAAC;iBACf;gBAED,0DAA0D;gBAC1D,OAAO,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/D,CAAC,CAAA;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC;YACd,OAAO,EAAE,UAAU,CAAC,SAAS;YAC7B,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,CAAC,8BAA8B;SACxC,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE;YACpC,KAAK,EAAE,yBAAyB;YAChC,OAAO,EAAE,GAAS,EAAE;gBAClB,MAAM,MAAM,GAAG,IAAI,CAAC;gBAEpB,IAAI;oBACF,MAAM,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;iBAC7D;gBAAC,OAAO,KAAK,EAAE;oBACd,mCAAmC;iBACpC;gBACD,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC,CAAA;SACF,CAAC,CAAC;QAEH,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE;YAC1C,OAAO,EAAE,CAAC,IAAuB,EAAE,EAAE;gBACnC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACpC,MAAM,KAAK,GAAG,kBAAM,CAAC,mBAAmB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACvD,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC;gBAC/B,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,CAAC;gBAE/B,IAAI,CAAC,KAAK,EAAE;oBACV,OAAO;iBACR;gBAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;gBAE9B,gEAAgE;gBAChE,gCAAgC;gBAChC,IAAI,QAAQ,EAAE;oBACZ,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC;iBACxB;gBAED,4BAA4B;gBAC5B,QAAQ,GAAG,IAAI,CAAC;gBAChB,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAErD,2DAA2D;gBAC3D,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;gBAEtB,MAAM,MAAM,GAAG,IAAI,CAAC;gBACpB,MAAM,IAAI,GAAG,IAAI,CAAC;gBAClB,MAAM,GAAG,GAAG,IAAI,GAAG,kBAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;gBAC5D,MAAM,OAAO,GAAG,QAAQ;qBACrB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC;qBAChC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,4CAA4C;gBAExE,uDAAuD;gBACvD,IAAI,KAAK,EAAE;oBACT,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;wBAChB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzC,CAAC,CAAC,CAAC;iBACJ;qBAAM;oBACL,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;wBAChB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;wBACjC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACpB,CAAC,CAAC,CAAC;iBACJ;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,QAAQ,CAAC;YACd,OAAO,EAAE,UAAU,CAAC,WAAW;YAC/B,OAAO,EAAE,QAAQ,CAAC,WAAW;YAC7B,IAAI,EAAE,EAAE,CAAC,4DAA4D;SACtE,CAAC,CAAC;QAEH,mDAAmD;QACnD,MAAM,CAAC,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAG,IAAI,CAAC;YAEpB,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC7B,WAAW;YACb,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACf,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,GAA4B;IACvC,OAAO;IACP,eAAe;IACf,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,MAAM;IACN,MAAM;CACP,CAAC;AACF,kBAAe,OAAO,CAAC;AAEvB;;GAEG;AACH,IAAU,OAAO,CAyKhB;AAzKD,WAAU,OAAO;IACf;;OAEG;IACH;QACE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE3C,MAAM,CAAC,EAAE,GAAG,mBAAmB,CAAC;QAChC,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC;QACrB,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC;QAEtB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;YAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAE7C,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;YAC9B,MAAM,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE,CAAC;YAC1B,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;YAE5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAE3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB;;OAEG;IACH,IAAI,MAAmB,CAAC;IAExB;;OAEG;IACH,iBAAiB,EAAc;QAC7B,IAAI,MAAM,EAAE;YACV,OAAO;SACR;QAED,MAAM,GAAG,IAAI,iBAAM,CAAC;YAClB,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE;+DACmD;YACzD,OAAO,EAAE;gBACP,iBAAM,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;gBAC9C,iBAAM,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC;aAChD;SACF,CAAC,CAAC;QAEH,MAAM;aACH,MAAM,EAAE;aACR,IAAI,CAAC,MAAM,CAAC,EAAE;YACb,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;gBACxB,OAAO,EAAE,EAAE,CAAC;aACb;YAED,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,GAAG,IAAI,CAAC;YAEd,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBACjC,OAAO,CAAC,EAAE,CAAC,CAAC;YACd,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAC7B,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,WAAW;QACb,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACH,kBAA+B,MAAe,EAAE,IAAI,GAAG,KAAK;;YAC1D,MAAM,IAAI,GAAG,6BAAkB,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC;gBACxB,KAAK,EAAE,mCAAmC;gBAC1C,IAAI,EAAE,IAAI;gBACV,iBAAiB,EAAE,OAAO;gBAC1B,OAAO,EAAE,CAAC,iBAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;aAC1D,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YAErC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;gBACjB,OAAO,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;aAC/B;YAED,uEAAuE;YACvE,MAAM,UAAU,GAAG,sBAAU,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YACzD,MAAM,GAAG,GAAG,kBAAM,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAElD,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAEnD,oEAAoE;YACpE,oEAAoE;YACpE,8BAA8B;YAC9B,OAAO,IAAI,OAAO,CAAO,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,CAAC;KAAA;IA1BqB,gBAAQ,WA0B7B,CAAA;IAED;;OAEG;IACH,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B;;OAEG;IACH,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB;;;;;;OAMG;IACH,oBACE,KAAmB,EACnB,QAAyB,EACzB,QAAgB;QAEhB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACvC,WAAW,EAAE,CAAC;QAEd,IAAI,SAAS,EAAE;YACb,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;SAChC;QACD,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;YACjC,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBACjC,OAAO,CAAC,GAAG,EAAE;oBACX,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC7B,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,EAAE,sBAAsB,CAAC,CAAC;QAE3B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,OAAO,IAAI,+BAAkB,CAAC,GAAG,EAAE;YACjC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACd,IAAI,EAAE,WAAW,KAAK,CAAC,EAAE;oBACvB,IAAI,SAAS,EAAE;wBACb,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;wBAC/B,SAAS,GAAG,CAAC,CAAC;qBACf;oBAED,IAAI,MAAM,EAAE;wBACV,MAAM,CAAC,OAAO,EAAE,CAAC;wBACjB,MAAM,GAAG,IAAI,CAAC;qBACf;oBAED,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBACpC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;wBACrB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;oBACpC,CAAC,EAAE,GAAG,CAAC,CAAC;iBACT;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAzCe,kBAAU,aAyCzB,CAAA;AACH,CAAC,EAzKS,OAAO,KAAP,OAAO,QAyKhB","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;
|
package/lib/palette.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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.
|
|
36
|
-
"@jupyterlab/apputils": "^0.
|
|
37
|
-
"@jupyterlab/coreutils": "^2.
|
|
38
|
-
"@jupyterlab/mainmenu": "^0.
|
|
39
|
-
"@jupyterlab/services": "^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",
|