diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 01ad70a77767..bb8127b9125b 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 1, 0, 4, 'final', 0 +current_version = 1, 1, 0, 'alpha', 1 commit = False tag = False parse = (?P\d+)\,\ (?P\d+)\,\ (?P\d+)\,\ \'(?P\S+)\'\,\ (?P\d+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index c6f6aa835ac8..f94424a87555 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -3,40 +3,40 @@ name: Bug report about: Create a report to help us improve --- -Hi! Thanks for using JupyterLab. + -If you are reporting an issue with JupyterLab, please use the [GitHub issue](https://github.com/jupyterlab/jupyterlab/issues) search feature to check if your issue has been asked already. If it has, please add your comments to the existing issue. +## Description -The JupyterLab team and Project Jupyter value our community, and JupyterLab -follows the Jupyter [Community Guides](https://jupyter.readthedocs.io/en/latest/community/content-community.html). + -**Describe the bug** -A clear and concise description of what the bug is. +## Reproduce -**To Reproduce** -Steps to reproduce the behavior: + 1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error +2. Click on '...' +3. Scroll down to '...' +4. See error '...' -**Expected behavior** -A clear and concise description of what you expected to happen. + -**Screenshots** -If applicable, add screenshots to help explain your problem. +## Expected behavior -**Desktop (please complete the following information):** + -- OS: [e.g. Windows 10] -- Browser [e.g. chrome 69.0, firefox 62.0] -- JupyterLab [e.g. 0.34.2] +## Context -**Additional context** -Add any other context about the problem here. + -If available, please include the following details: +- Operating System and version: +- Browser and version: +- JupyterLab version:
Troubleshoot Output
@@ -53,6 +53,6 @@ Paste the output from your command line running `jupyter lab` here, use `--debug
 
 
Browser Output
-Paste the output from your browser console here.
+Paste the output from your browser Javascript console here.
 
diff --git a/.github/ISSUE_TEMPLATE/installation-and-configuration-issues.md b/.github/ISSUE_TEMPLATE/installation-and-configuration-issues.md deleted file mode 100644 index 32344a5a56fe..000000000000 --- a/.github/ISSUE_TEMPLATE/installation-and-configuration-issues.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -name: Installation and configuration issues -about: Installation and configuration assistance ---- - -If you are having issues with installation or configuration, we encourage you to post in the [Jupyter Discourse forum](https://discourse.jupyter.org/c/jupyterlab) or file an issue here. diff --git a/.github/lock.yml b/.github/lock.yml new file mode 100644 index 000000000000..ed05e592cadc --- /dev/null +++ b/.github/lock.yml @@ -0,0 +1,40 @@ +# Configuration for Lock Threads - https://github.com/dessant/lock-threads + +# Number of days of inactivity before a closed issue or pull request is locked +daysUntilLock: 30 + +# Skip issues and pull requests created before a given timestamp. Timestamp must +# follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable +skipCreatedBefore: false + +# Issues and pull requests with these labels will be ignored. Set to `[]` to disable +exemptLabels: [] + +# Label to add before locking, such as `outdated`. Set to `false` to disable +lockLabel: status:resolved-locked + +# Comment to post before locking. Set to `false` to disable +lockComment: false + +# lockComment: > +# This thread has been automatically locked since there has not been +# any recent activity after it was closed. Please open a [new issue](https://github.com/jupyterlab/jupyterlab/issues/new/choose) +# for related discussion. + +# Assign `resolved` as the reason for locking. Set to `false` to disable +setLockReason: true + +# Limit to only `issues` or `pulls` +# only: issues + +# Optionally, specify configuration settings just for `issues` or `pulls` +# issues: +# exemptLabels: +# - help-wanted +# lockLabel: outdated + +# pulls: +# daysUntilLock: 30 + +# Repository to extend settings from +# _extends: repo diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e435e976fe5e..6a8048827258 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -44,10 +44,18 @@ a keyboard shortcut or automatically on save. ## Submitting a Pull Request Contribution Generally, an issue should be opened describing a piece of proposed work and the -issues it solves before a pull request is opened. This lets community members -participate in the design discussion, makes others aware of work being done, and -sets the stage for a fruitful community interaction. A pull request should -reference the issue it is addressing. +issues it solves before a pull request is opened. + +### Issue Management + +Opening an issue lets community members participate in the design discussion, +makes others aware of work being done, and sets the stage for a fruitful community +interaction. A pull request should reference the issue it is addressing. Once the +pull request is merged, the issue related to it will also be closed. If there is +additional discussion around implemementation the issue may be re-opened. Once 30 days +have passed with no additional discussion, the [lock bot](https://github.com/apps/lock) will lock the issue. If +additional discussion is desired, or if the pull request doesn't fully address the +locked issue, please open a new issue referencing the locked issue. ### Tag Issues with Labels diff --git a/README.md b/README.md index a2447fcf83f2..86944daffaa5 100644 --- a/README.md +++ b/README.md @@ -152,7 +152,7 @@ To be listed, please submit a pull request with your information. We encourage you to ask questions on the [Discourse forum](https://discourse.jupyter.org/c/jupyterlab). A question answered there can become a useful resource for others. -Please use the [GitHub issues page](https://github.com/jupyterlab/jupyterlab/issues) to provide feedback or submit a bug report. +Please use the [GitHub issues page](https://github.com/jupyterlab/jupyterlab/issues) to provide feedback or submit a bug report. To keep resolved issues self-contained, the [lock bot](https://github.com/apps/lock) will lock closed issues as resolved after a period of inactivity. If related discussion is still needed after an issue is locked, please open a new issue and reference the old issue. ### Weekly Dev Meeting diff --git a/buildutils/package.json b/buildutils/package.json index f575ba28fc72..eaae3a4f49b5 100644 --- a/buildutils/package.json +++ b/buildutils/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/buildutils", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Build Utilities", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -49,6 +49,7 @@ "mini-css-extract-plugin": "~0.6.0", "package-json": "^6.3.0", "path": "~0.12.7", + "prettier": "^1.18.2", "semver": "^6.1.0", "sort-package-json": "~1.22.1", "typescript": "~3.5.1", @@ -60,6 +61,7 @@ "@types/inquirer": "^6.0.3", "@types/mini-css-extract-plugin": "^0.2.0", "@types/node": "^12.0.2", + "@types/prettier": "^1.16.4", "@types/webpack": "^4.4.32", "rimraf": "~2.6.2" } diff --git a/buildutils/src/build.ts b/buildutils/src/build.ts index 2e14db75aab3..de622b45a756 100644 --- a/buildutils/src/build.ts +++ b/buildutils/src/build.ts @@ -183,10 +183,7 @@ export namespace Build { }, { test: /\.svg/, - use: [ - { loader: 'svg-url-loader', options: {} }, - { loader: 'svgo-loader', options: { plugins: [] } } - ] + use: [{ loader: 'svg-url-loader', options: { encoding: 'none' } }] }, { test: /\.(png|jpg|gif|ttf|woff|woff2|eot)(\?v=[0-9]\.[0-9]\.[0-9])?$/, diff --git a/buildutils/src/ensure-package.ts b/buildutils/src/ensure-package.ts index 1c4e4991b1d6..2e007c8f972f 100644 --- a/buildutils/src/ensure-package.ts +++ b/buildutils/src/ensure-package.ts @@ -6,17 +6,48 @@ import * as fs from 'fs-extra'; import * as glob from 'glob'; import * as path from 'path'; +import * as prettier from 'prettier'; import * as ts from 'typescript'; import { getDependency } from './get-dependency'; import * as utils from './utils'; -const CSS_HEADER = ` +const HEADER_TEMPLATE = ` /*----------------------------------------------------------------------------- | Copyright (c) Jupyter Development Team. | Distributed under the terms of the Modified BSD License. |----------------------------------------------------------------------------*/ -/* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ +/* This file was auto-generated by {{funcName}}() in @jupyterlab/buildutils */ +`; + +const ICON_IMPORTS_TEMPLATE = ` +import { Icon } from './interfaces'; + +// icon svg import statements +{{iconImportStatements}} + +// defaultIcons definition +export namespace IconImports { + export const defaultIcons: ReadonlyArray = [ + {{iconModelDeclarations}} + ]; +} +`; + +const ICON_CSS_CLASSES_TEMPLATE = ` +/** + * (DEPRECATED) Support for consuming icons as CSS background images + */ + +/* Icons urls */ + +:root { + {{iconCSSUrls}} +} + +/* Icon CSS class declarations */ + +{{iconCSSDeclarations}} `; /** @@ -138,17 +169,20 @@ export async function ensurePackage( // Template the CSS index file. if (cssImports && fs.existsSync(path.join(pkgPath, 'style/base.css'))) { - let cssIndex = CSS_HEADER.trim(); + const funcName = 'ensurePackage'; + let cssIndexContents = utils.fromTemplate( + HEADER_TEMPLATE, + { funcName }, + { end: '' } + ); cssImports.forEach(cssImport => { - cssIndex += `\n@import url('~${cssImport}');`; + cssIndexContents += `\n@import url('~${cssImport}');`; }); - cssIndex += "\n\n@import url('./base.css');\n"; - const cssPath = path.join(pkgPath, 'style/index.css'); - const prev = fs.readFileSync(cssPath, { encoding: 'utf8' }); - if (prev !== cssIndex) { - messages.push(`Updated ./${data.style}`); - fs.writeFileSync(cssPath, cssIndex); - } + cssIndexContents += "\n\n@import url('./base.css');\n"; + + // write out cssIndexContents, if needed + const cssIndexPath = path.join(pkgPath, 'style/index.css'); + messages.push(...ensureFile(cssIndexPath, cssIndexContents, false)); } // Look for unused packages @@ -290,6 +324,78 @@ export async function ensurePackage( return messages; } +/** + * An extra ensure function just for the @jupyterlab/ui-components package. + * Ensures that the icon svg import statements are synced with the contents + * of ui-components/style/icons. + * + * @param pkgPath - The path to the @jupyterlab/ui-components package. + * + * @returns A list of changes that were made to ensure the package. + */ +export async function ensureUiComponents(pkgPath: string): Promise { + const funcName = 'ensureUiComponents'; + let messages: string[] = []; + + const svgs = glob.sync(path.join(pkgPath, 'style/icons', '**/*.svg')); + + /* support for glob import of icon svgs */ + const iconSrcDir = path.join(pkgPath, 'src/icon'); + + // build the per-icon import code + let _iconImportStatements: string[] = []; + let _iconModelDeclarations: string[] = []; + svgs.forEach(svg => { + const name = utils.stem(svg); + const nameCamel = utils.camelCase(name) + 'Svg'; + _iconImportStatements.push( + `import ${nameCamel} from '${path.relative(iconSrcDir, svg)}';` + ); + _iconModelDeclarations.push(`{ name: '${name}', svg: ${nameCamel} }`); + }); + const iconImportStatements = _iconImportStatements.join('\n'); + const iconModelDeclarations = _iconModelDeclarations.join(',\n'); + + // generate the actual contents of the iconImports file + const iconImportsPath = path.join(iconSrcDir, 'iconImports.ts'); + const iconImportsContents = utils.fromTemplate( + HEADER_TEMPLATE + ICON_IMPORTS_TEMPLATE, + { funcName, iconImportStatements, iconModelDeclarations } + ); + messages.push(...ensureFile(iconImportsPath, iconImportsContents)); + + /* support for deprecated icon CSS classes */ + const iconCSSDir = path.join(pkgPath, 'style'); + + // build the per-icon import code + let _iconCSSUrls: string[] = []; + let _iconCSSDeclarations: string[] = []; + svgs.forEach(svg => { + const name = utils.stem(svg); + const urlName = 'jp-icon-' + name; + const className = 'jp-' + utils.camelCase(name, true) + 'Icon'; + + _iconCSSUrls.push( + `--${urlName}: url('${path.relative(iconCSSDir, svg)}');` + ); + _iconCSSDeclarations.push( + `.${className} {background-image: var(--${urlName})}` + ); + }); + const iconCSSUrls = _iconCSSUrls.join('\n'); + const iconCSSDeclarations = _iconCSSDeclarations.join('\n'); + + // generate the actual contents of the iconCSSClasses file + const iconCSSClassesPath = path.join(iconCSSDir, 'deprecated.css'); + const iconCSSClassesContent = utils.fromTemplate( + HEADER_TEMPLATE + ICON_CSS_CLASSES_TEMPLATE, + { funcName, iconCSSUrls, iconCSSDeclarations } + ); + messages.push(...ensureFile(iconCSSClassesPath, iconCSSClassesContent)); + + return messages; +} + /** * The options used to ensure a package. */ @@ -340,6 +446,53 @@ export interface IEnsurePackageOptions { differentVersions?: string[]; } +/** + * Ensure that contents of a file match a supplied string. If they do match, + * do nothing and return an empty array. If they don't match, overwrite the + * file and return an array with an update message. + * + * @param path: The path to the file being checked. The file must exist, + * or else this function does nothing. + * + * @param contents: The desired file contents. + * + * @param prettify: default = true. If true, format the contents with + * `prettier` before comparing/writing. Set to false only if you already + * know your code won't be modified later by the `prettier` git commit hook. + * + * @returns a string array with 0 or 1 messages. + */ +function ensureFile( + path: string, + contents: string, + prettify: boolean = true +): string[] { + let messages: string[] = []; + + if (!fs.existsSync(path)) { + // bail + messages.push( + `Tried to ensure the contents of ./${path}, but the file does not exist` + ); + return messages; + } + + // run the newly generated contents through prettier before comparing + if (prettify) { + contents = prettier.format(contents, { filepath: path, singleQuote: true }); + } + + const prev = fs.readFileSync(path, { + encoding: 'utf8' + }); + if (prev !== contents) { + fs.writeFileSync(path, contents); + messages.push(`Updated ./${path}`); + } + + return messages; +} + /** * Extract the module imports from a TypeScript source file. * diff --git a/buildutils/src/ensure-repo.ts b/buildutils/src/ensure-repo.ts index 7efb189767e8..425c502eb521 100644 --- a/buildutils/src/ensure-repo.ts +++ b/buildutils/src/ensure-repo.ts @@ -13,7 +13,11 @@ */ import * as path from 'path'; import * as utils from './utils'; -import { ensurePackage, IEnsurePackageOptions } from './ensure-package'; +import { + ensurePackage, + ensureUiComponents, + IEnsurePackageOptions +} from './ensure-package'; type Dict = { [key: string]: T }; @@ -146,9 +150,10 @@ function ensureJupyterlab(): string[] { corePackage.jupyterlab.mimeExtensions = {}; corePackage.jupyterlab.linkedPackages = {}; corePackage.dependencies = {}; + corePackage.resolutions = {}; let singletonPackages = corePackage.jupyterlab.singletonPackages; - let vendorPackages = corePackage.jupyterlab.vendor; + const coreData = new Map(); utils.getCorePaths().forEach(pkgPath => { let dataPath = path.join(pkgPath, 'package.json'); @@ -158,55 +163,52 @@ function ensureJupyterlab(): string[] { } catch (e) { return; } - // Determine whether to include the package. - if (!data.jupyterlab) { - return; - } - // Skip if explicitly marked as not a core dep. - if ( - 'coreDependency' in data.jupyterlab && - !data.jupyterlab.coreDependency - ) { - return; - } - // Skip if it is not marked as an extension or a core dep. - if ( - !data.jupyterlab.coreDependency && - !data.jupyterlab.extension && - !data.jupyterlab.mimeExtension - ) { + coreData.set(data.name, data); + }); + + coreData.forEach((data, name) => { + // Insist on this version in the yarn resolution. + const version = `~${data.version}`; + corePackage.resolutions[name] = version; + }); + + coreData.forEach((data, name) => { + // Determine if the package wishes to be included in the top-level + // dependencies. + const meta = data.jupyterlab; + const keep = !!( + meta && + (meta.coreDependency || meta.extension || meta.mimeExtension) + ); + if (!keep) { return; } // Make sure it is included as a dependency. - corePackage.dependencies[data.name] = '^' + String(data.version); - // Add its dependencies to the core dependencies if they are in the - // singleton packages or vendor packages. + const version = `~${data.version}`; + corePackage.dependencies[data.name] = version; + + // Add its dependencies to the resolutions if they are in the singleton + // packages packages. This lets yarn force the singleton status. let deps = data.dependencies || {}; for (let dep in deps) { if (singletonPackages.indexOf(dep) !== -1) { - corePackage.dependencies[dep] = deps[dep]; - } - if (vendorPackages.indexOf(dep) !== -1) { - corePackage.dependencies[dep] = deps[dep]; + if (!(dep in corePackage.resolutions)) { + corePackage.resolutions[dep] = deps[dep]; + } } } - let jlab = data.jupyterlab; - if (!jlab) { - return; - } - // Handle extensions. ['extension', 'mimeExtension'].forEach(item => { - let ext = jlab[item]; + let ext = meta[item]; if (ext === true) { ext = ''; } if (typeof ext !== 'string') { return; } - corePackage.jupyterlab[item + 's'][data.name] = ext; + corePackage.jupyterlab[`${item}s`][name] = ext; }); }); @@ -343,6 +345,16 @@ export async function ensureIntegrity(): Promise { } } + // ensure the icon svg imports + pkgMessages = await ensureUiComponents(pkgPaths['@jupyterlab/ui-components']); + if (pkgMessages.length > 0) { + let pkgName = '@jupyterlab/ui-components'; + if (!messages[pkgName]) { + messages[pkgName] = []; + } + messages[pkgName] = messages[pkgName].concat(pkgMessages); + } + // Handle the top level package. let corePath = path.resolve('.', 'package.json'); let coreData: any = utils.readJSONFile(corePath); diff --git a/buildutils/src/update-core-mode.ts b/buildutils/src/update-core-mode.ts index 36429be7708b..40a44f5dae82 100644 --- a/buildutils/src/update-core-mode.ts +++ b/buildutils/src/update-core-mode.ts @@ -7,6 +7,9 @@ import * as fs from 'fs-extra'; import * as path from 'path'; import * as utils from './utils'; +// Run integrity to update the dev_mode package.json +utils.run('jlpm integrity'); + // Get the dev mode package.json file. let data = utils.readJSONFile('./dev_mode/package.json'); diff --git a/buildutils/src/utils.ts b/buildutils/src/utils.ts index 504a9c8e5971..1d7535d93e29 100644 --- a/buildutils/src/utils.ts +++ b/buildutils/src/utils.ts @@ -114,6 +114,54 @@ export function writeJSONFile(filePath: string, data: any): boolean { return false; } +/** + * Simple template substitution for template vars of the form {{name}} + * + * @param templ: the template string. + * Ex: `This header generated by {{funcName}}` + * + * @param subs: an object in which the parameter keys are the template + * variables and the parameter values are the substitutions. + * + * @param options: function options. + * + * @param options.autoindent: default = true. If true, will try to match + * indentation level of {{var}} in substituted template. + * + * @param options.end: default = '\n'. Inserted at the end of + * a template post-substitution and post-trim. + * + * @returns the input template with all {{vars}} substituted, then `.trim`-ed. + */ +export function fromTemplate( + templ: string, + subs: Dict, + options: { autoindent?: boolean; end?: string } = {} +) { + // default options values + const autoindent = + options.autoindent === undefined ? true : options.autoindent; + const end = options.end === undefined ? '\n' : options.end; + + Object.keys(subs).forEach(key => { + const val = subs[key]; + + if (autoindent) { + // try to match the indentation level of the {{var}} in the input template. + templ = templ.split(`{{${key}}}`).reduce((acc, cur) => { + // Regex: 0 or more non-newline whitespaces followed by end of string + let indentRe = acc.match(/([^\S\r\n]*).*$/); + let indent = indentRe ? indentRe[1] : ''; + return acc + val.split('\n').join('\n' + indent) + cur; + }); + } else { + templ = templ.split(`{{${key}}}`).join(val); + } + }); + + return templ.trim() + end; +} + /** * * Call a command, checking its status. @@ -286,3 +334,43 @@ export function ensureUnixPathSep(source: string) { } return source.replace(backSlash, '/'); } + +/** + * Get the last portion of a path, without its extension (if any). + * + * @param path - The file path. + * + * @returns the last part of the path, sans extension. + */ +export function stem(path: string): string { + return path + .split('\\') + .pop() + .split('/') + .pop() + .split('.') + .shift(); +} + +/** + * Given a 'snake-case', 'snake_case', or 'snake case' string, + * will return the camel case version: 'snakeCase'. + * + * @param str: the snake-case input string. + * + * @param upper: default = false. If true, the first letter of the + * returned string will be capitalized. + * + * @returns the camel case version of the input string. + */ +export function camelCase(str: string, upper: boolean = false): string { + return str.replace(/(?:^\w|[A-Z]|\b\w|\s+|-+|_+)/g, function(match, index) { + if (+match === 0 || match[0] === '-') { + return ''; + } else if (index === 0 && !upper) { + return match.toLowerCase(); + } else { + return match.toUpperCase(); + } + }); +} diff --git a/buildutils/template/package.json b/buildutils/template/package.json index 3fad430b0026..2c78da6e728b 100644 --- a/buildutils/template/package.json +++ b/buildutils/template/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/template", - "version": "1.0.0", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Package Template", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { diff --git a/buildutils/test-template/package.json b/buildutils/test-template/package.json index b13d2aab580f..2317077cbac5 100644 --- a/buildutils/test-template/package.json +++ b/buildutils/test-template/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/template-for-tests", - "version": "1.0.0", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc", diff --git a/dev_mode/imports.css b/dev_mode/imports.css index 47f1c8393e13..4b5aab968a1c 100644 --- a/dev_mode/imports.css +++ b/dev_mode/imports.css @@ -31,6 +31,7 @@ @import url('~@jupyterlab/tabmanager-extension/style/index.css'); @import url('~@jupyterlab/terminal-extension/style/index.css'); @import url('~@jupyterlab/tooltip-extension/style/index.css'); +@import url('~@jupyterlab/ui-components-extension/style/index.css'); @import url('~@jupyterlab/vdom-extension/style/index.css'); @import url('~@jupyterlab/vega4-extension/style/index.css'); @import url('~@jupyterlab/vega5-extension/style/index.css'); diff --git a/dev_mode/package.json b/dev_mode/package.json index 43b00aba1552..c7bbeea24c55 100644 --- a/dev_mode/package.json +++ b/dev_mode/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/application-top", - "version": "1.0.4", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "webpack", @@ -15,81 +15,49 @@ "watch": "webpack --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/application-extension": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/apputils-extension": "^1.0.2", - "@jupyterlab/codemirror-extension": "^1.0.2", - "@jupyterlab/completer-extension": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/console-extension": "^1.0.3", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/csvviewer-extension": "^1.0.2", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docmanager-extension": "^1.0.2", - "@jupyterlab/documentsearch-extension": "^1.0.2", - "@jupyterlab/extensionmanager": "^1.0.2", - "@jupyterlab/extensionmanager-extension": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/filebrowser-extension": "^1.0.4", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/fileeditor-extension": "^1.0.3", - "@jupyterlab/help-extension": "^1.0.2", - "@jupyterlab/htmlviewer-extension": "^1.0.2", - "@jupyterlab/hub-extension": "^1.0.2", - "@jupyterlab/imageviewer": "^1.0.2", - "@jupyterlab/imageviewer-extension": "^1.0.2", - "@jupyterlab/inspector-extension": "^1.0.2", - "@jupyterlab/javascript-extension": "^1.0.2", - "@jupyterlab/json-extension": "^1.0.2", - "@jupyterlab/launcher": "^1.0.2", - "@jupyterlab/launcher-extension": "^1.0.2", - "@jupyterlab/mainmenu-extension": "^1.0.2", - "@jupyterlab/markdownviewer-extension": "^1.0.2", - "@jupyterlab/mathjax2-extension": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/notebook-extension": "^1.0.3", - "@jupyterlab/pdf-extension": "^1.0.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/rendermime-extension": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/running-extension": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/settingeditor-extension": "^1.0.2", - "@jupyterlab/shortcuts-extension": "^1.0.2", - "@jupyterlab/statusbar-extension": "^1.0.2", - "@jupyterlab/tabmanager-extension": "^1.0.2", - "@jupyterlab/terminal": "^1.0.2", - "@jupyterlab/terminal-extension": "^1.0.2", - "@jupyterlab/theme-dark-extension": "^1.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", - "@jupyterlab/tooltip": "^1.0.2", - "@jupyterlab/tooltip-extension": "^1.0.2", - "@jupyterlab/vdom-extension": "^1.0.2", - "@jupyterlab/vega4-extension": "^1.0.1", - "@jupyterlab/vega5-extension": "^1.0.1", - "@phosphor/algorithm": "^1.1.3", - "@phosphor/application": "^1.6.3", - "@phosphor/commands": "^1.6.3", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/datagrid": "^0.1.9", - "@phosphor/disposable": "^1.2.0", - "@phosphor/messaging": "^1.2.3", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.2.3", - "@phosphor/widgets": "^1.8.0", - "ajv": "^6.5.5", - "codemirror": "~5.47.0", - "es6-promise": "~4.2.6", - "json5": "^2.1.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "react": "~16.8.4", - "react-dom": "~16.8.4", - "url-parse": "~1.4.3" + "@jupyterlab/application": "~1.1.0-alpha.1", + "@jupyterlab/application-extension": "~1.1.0-alpha.1", + "@jupyterlab/apputils-extension": "~1.1.0-alpha.1", + "@jupyterlab/codemirror-extension": "~1.1.0-alpha.1", + "@jupyterlab/completer-extension": "~1.1.0-alpha.1", + "@jupyterlab/console-extension": "~1.1.0-alpha.1", + "@jupyterlab/coreutils": "~3.1.0-alpha.1", + "@jupyterlab/csvviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/docmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/documentsearch-extension": "~1.1.0-alpha.1", + "@jupyterlab/extensionmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/filebrowser-extension": "~1.1.0-alpha.1", + "@jupyterlab/fileeditor-extension": "~1.1.0-alpha.1", + "@jupyterlab/help-extension": "~1.1.0-alpha.1", + "@jupyterlab/htmlviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/hub-extension": "~1.1.0-alpha.1", + "@jupyterlab/imageviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/inspector-extension": "~1.1.0-alpha.1", + "@jupyterlab/javascript-extension": "~1.1.0-alpha.1", + "@jupyterlab/json-extension": "~1.1.0-alpha.1", + "@jupyterlab/launcher-extension": "~1.1.0-alpha.1", + "@jupyterlab/mainmenu-extension": "~1.1.0-alpha.1", + "@jupyterlab/markdownviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/mathjax2-extension": "~1.1.0-alpha.1", + "@jupyterlab/notebook-extension": "~1.1.0-alpha.1", + "@jupyterlab/pdf-extension": "~1.1.0-alpha.1", + "@jupyterlab/rendermime-extension": "~1.1.0-alpha.1", + "@jupyterlab/running-extension": "~1.1.0-alpha.1", + "@jupyterlab/settingeditor-extension": "~1.1.0-alpha.1", + "@jupyterlab/shortcuts-extension": "~1.1.0-alpha.1", + "@jupyterlab/statusbar-extension": "~1.1.0-alpha.1", + "@jupyterlab/tabmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/terminal-extension": "~1.1.0-alpha.1", + "@jupyterlab/theme-dark-extension": "~1.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "~1.1.0-alpha.1", + "@jupyterlab/tooltip-extension": "~1.1.0-alpha.1", + "@jupyterlab/ui-components-extension": "~1.1.0-alpha.1", + "@jupyterlab/vdom-extension": "~1.1.0-alpha.1", + "@jupyterlab/vega4-extension": "~1.1.0-alpha.1", + "@jupyterlab/vega5-extension": "~1.1.0-alpha.1" }, "devDependencies": { - "@jupyterlab/buildutils": "^1.0.2", + "@jupyterlab/buildutils": "^1.1.0-alpha.1", "cross-env": "^5.2.0", "css-loader": "~2.1.1", "duplicate-package-checker-webpack-plugin": "^3.0.0", @@ -116,12 +84,102 @@ "webpack-visualizer-plugin": "^0.1.11", "yarn-deduplicate": "^1.1.1" }, + "resolutions": { + "@jupyterlab/application": "~1.1.0-alpha.1", + "@jupyterlab/application-extension": "~1.1.0-alpha.1", + "@jupyterlab/apputils": "~1.1.0-alpha.1", + "@jupyterlab/apputils-extension": "~1.1.0-alpha.1", + "@jupyterlab/attachments": "~1.1.0-alpha.1", + "@jupyterlab/cells": "~1.1.0-alpha.1", + "@jupyterlab/codeeditor": "~1.1.0-alpha.1", + "@jupyterlab/codemirror": "~1.1.0-alpha.1", + "@jupyterlab/codemirror-extension": "~1.1.0-alpha.1", + "@jupyterlab/completer": "~1.1.0-alpha.1", + "@jupyterlab/completer-extension": "~1.1.0-alpha.1", + "@jupyterlab/console": "~1.1.0-alpha.1", + "@jupyterlab/console-extension": "~1.1.0-alpha.1", + "@jupyterlab/coreutils": "~3.1.0-alpha.1", + "@jupyterlab/csvviewer": "~1.1.0-alpha.1", + "@jupyterlab/csvviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/docmanager": "~1.1.0-alpha.1", + "@jupyterlab/docmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/docregistry": "~1.1.0-alpha.1", + "@jupyterlab/documentsearch": "~1.1.0-alpha.1", + "@jupyterlab/documentsearch-extension": "~1.1.0-alpha.1", + "@jupyterlab/extensionmanager": "~1.1.0-alpha.1", + "@jupyterlab/extensionmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/filebrowser": "~1.1.0-alpha.1", + "@jupyterlab/filebrowser-extension": "~1.1.0-alpha.1", + "@jupyterlab/fileeditor": "~1.1.0-alpha.1", + "@jupyterlab/fileeditor-extension": "~1.1.0-alpha.1", + "@jupyterlab/help-extension": "~1.1.0-alpha.1", + "@jupyterlab/htmlviewer": "~1.1.0-alpha.1", + "@jupyterlab/htmlviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/hub-extension": "~1.1.0-alpha.1", + "@jupyterlab/imageviewer": "~1.1.0-alpha.1", + "@jupyterlab/imageviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/inspector": "~1.1.0-alpha.1", + "@jupyterlab/inspector-extension": "~1.1.0-alpha.1", + "@jupyterlab/javascript-extension": "~1.1.0-alpha.1", + "@jupyterlab/json-extension": "~1.1.0-alpha.1", + "@jupyterlab/launcher": "~1.1.0-alpha.1", + "@jupyterlab/launcher-extension": "~1.1.0-alpha.1", + "@jupyterlab/mainmenu": "~1.1.0-alpha.1", + "@jupyterlab/mainmenu-extension": "~1.1.0-alpha.1", + "@jupyterlab/markdownviewer": "~1.1.0-alpha.1", + "@jupyterlab/markdownviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/mathjax2": "~1.1.0-alpha.1", + "@jupyterlab/mathjax2-extension": "~1.1.0-alpha.1", + "@jupyterlab/metapackage": "~1.1.0-alpha.1", + "@jupyterlab/nbconvert-css": "~0.2.0-alpha.1", + "@jupyterlab/notebook": "~1.1.0-alpha.1", + "@jupyterlab/notebook-extension": "~1.1.0-alpha.1", + "@jupyterlab/observables": "~2.3.0-alpha.1", + "@jupyterlab/outputarea": "~1.1.0-alpha.1", + "@jupyterlab/pdf-extension": "~1.1.0-alpha.1", + "@jupyterlab/rendermime": "~1.1.0-alpha.1", + "@jupyterlab/rendermime-extension": "~1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "~1.4.0-alpha.1", + "@jupyterlab/running": "~1.1.0-alpha.1", + "@jupyterlab/running-extension": "~1.1.0-alpha.1", + "@jupyterlab/services": "~4.1.0-alpha.1", + "@jupyterlab/settingeditor": "~1.1.0-alpha.1", + "@jupyterlab/settingeditor-extension": "~1.1.0-alpha.1", + "@jupyterlab/shortcuts-extension": "~1.1.0-alpha.1", + "@jupyterlab/statusbar": "~1.1.0-alpha.1", + "@jupyterlab/statusbar-extension": "~1.1.0-alpha.1", + "@jupyterlab/tabmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/terminal": "~1.1.0-alpha.1", + "@jupyterlab/terminal-extension": "~1.1.0-alpha.1", + "@jupyterlab/theme-dark-extension": "~1.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "~1.1.0-alpha.1", + "@jupyterlab/tooltip": "~1.1.0-alpha.1", + "@jupyterlab/tooltip-extension": "~1.1.0-alpha.1", + "@jupyterlab/ui-components": "~1.1.0-alpha.1", + "@jupyterlab/ui-components-extension": "~1.1.0-alpha.1", + "@jupyterlab/vdom": "~1.1.0-alpha.1", + "@jupyterlab/vdom-extension": "~1.1.0-alpha.1", + "@jupyterlab/vega4-extension": "~1.1.0-alpha.1", + "@jupyterlab/vega5-extension": "~1.1.0-alpha.1", + "@phosphor/algorithm": "^1.1.3", + "@phosphor/application": "^1.6.3", + "@phosphor/commands": "^1.6.3", + "@phosphor/coreutils": "^1.3.1", + "@phosphor/datagrid": "^0.1.9", + "@phosphor/disposable": "^1.2.0", + "@phosphor/messaging": "^1.2.3", + "@phosphor/properties": "^1.1.3", + "@phosphor/signaling": "^1.2.3", + "@phosphor/widgets": "^1.8.0", + "react": "~16.8.4", + "react-dom": "~16.8.4" + }, "engines": { "node": ">=6.11.5" }, "jupyterlab": { "name": "JupyterLab", - "version": "1.0.4", + "version": "1.1.0a1", "extensions": { "@jupyterlab/application-extension": "", "@jupyterlab/apputils-extension": "", @@ -154,6 +212,7 @@ "@jupyterlab/theme-dark-extension": "", "@jupyterlab/theme-light-extension": "", "@jupyterlab/tooltip-extension": "", + "@jupyterlab/ui-components-extension": "", "@jupyterlab/vdom-extension": "" }, "mimeExtensions": { @@ -182,10 +241,6 @@ "@jupyterlab/services", "@jupyterlab/terminal", "@jupyterlab/tooltip", - "@phosphor/coreutils", - "@phosphor/widgets" - ], - "vendor": [ "@phosphor/algorithm", "@phosphor/application", "@phosphor/commands", @@ -199,20 +254,8 @@ "@phosphor/signaling", "@phosphor/virtualdom", "@phosphor/widgets", - "ajv", - "codemirror", - "json5", - "es6-promise", - "marked", - "moment", - "path-posix", "react", - "react-dom", - "react-paginate", - "sanitize-html", - "semver", - "url-parse", - "xterm" + "react-dom" ], "linkedPackages": { "@jupyterlab/application-top": "../dev_mode", @@ -293,6 +336,7 @@ "@jupyterlab/tooltip": "../packages/tooltip", "@jupyterlab/tooltip-extension": "../packages/tooltip-extension", "@jupyterlab/ui-components": "../packages/ui-components", + "@jupyterlab/ui-components-extension": "../packages/ui-components-extension", "@jupyterlab/vdom": "../packages/vdom", "@jupyterlab/vdom-extension": "../packages/vdom-extension", "@jupyterlab/vega4-extension": "../packages/vega4-extension", diff --git a/dev_mode/webpack.config.js b/dev_mode/webpack.config.js index 78c1769a515d..5a2612582ddf 100644 --- a/dev_mode/webpack.config.js +++ b/dev_mode/webpack.config.js @@ -189,8 +189,22 @@ module.exports = [ }, { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader' }, { + // in css files, svg is loaded as a url formatted string test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, - use: 'url-loader?limit=10000&mimetype=image/svg+xml' + issuer: { test: /\.css$/ }, + use: { + loader: 'svg-url-loader', + options: { encoding: 'none', limit: 10000 } + } + }, + { + // in ts and tsx files (both of which compile to js), + // svg is loaded as a raw string + test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, + issuer: { test: /\.js$/ }, + use: { + loader: 'raw-loader' + } } ] }, diff --git a/docs/source/developer/extension_dev.rst b/docs/source/developer/extension_dev.rst index 2d0b25c4d0ad..d7fc8573e0cc 100644 --- a/docs/source/developer/extension_dev.rst +++ b/docs/source/developer/extension_dev.rst @@ -254,7 +254,7 @@ To transpile jupyterlab packages, you need to install the following package: :: - jlpm add --dev jest@^24 ts-jest@^24 @babel/core@^7 @babel/preset-env@^7 + jlpm add --dev jest@^24 @types/jest@^24 ts-jest@^24 @babel/core@^7 @babel/preset-env@^7 Then in `jest.config.js`, you will specify to use babel for js files and ignore all node modules except the jupyterlab ones: diff --git a/docs/source/getting_started/faq.rst b/docs/source/getting_started/faq.rst index 0f84f18ff366..9d410ce7c84b 100644 --- a/docs/source/getting_started/faq.rst +++ b/docs/source/getting_started/faq.rst @@ -11,13 +11,14 @@ General - :ref:`Is JupyterLab ready to use? ` - :ref:`What will happen to the classic Jupyter Notebook? ` - `Where is the official online documentation for - JupyterLab? `__ + JupyterLab? `__ +- :ref:`How can you report a bug or issue? ` + Development ----------- -- `How can you report a bug or provide - feedback? `__ + - `How can you contribute? `__ - :ref:`How can you extend or customize JupyterLab? ` diff --git a/docs/source/getting_started/issue.rst b/docs/source/getting_started/issue.rst new file mode 100644 index 000000000000..7038674bcd58 --- /dev/null +++ b/docs/source/getting_started/issue.rst @@ -0,0 +1,70 @@ +.. _issue: + +Reporting an issue +------------------ + +Thank you for providing feedback about JupyterLab. + +Diagnosing an Issue +~~~~~~~~~~~~~~~~~~~ + +If you find a problem in JupyterLab, please follow the steps below to diagnose and report the issue. Following these steps helps you diagnose if the problem is likely from JupyterLab or from a different project. + +1. Try to reproduce the issue in a new environment with the latest official JupyterLab installed and no extra packages. + + If you are using conda: + + 1. create a new environment:: + + conda create -n jlab-test --override-channels --strict-channel-priority -c conda-forge -c anaconda jupyterlab + + 2. Activate the environment:: + + conda activate jlab-test + + 3. Start JupyterLab:: + + jupyter lab + + - I cannot reproduce this issue in a clean environment: The problem is probably not in JupyterLab itself. Go to step 2. + - I can reproduce this issue in a clean environment: Go to step 3. +2. Perhaps the issue is in one of the JupyterLab extensions you had installed. Install any JupyterLab extensions you had one at a time, checking for the issue after each one. + + - I can reproduce the issue after installing a particular extension: That extension may be causing the problem. File an issue with that extension's issue tracker. Be sure to mention what you have done here to narrow the problem down. + - I cannot reproduce the issue after installing all my extensions: Good news! Likely all you have to do is update your JupyterLab and extensions. If that fixes the issue, great! If it doesn't fix the issue, you may have a more complicated issue. Go directly to :ref:`create-issue`. +3. Try to reproduce the issue in the classic Jupyter Notebook. Launch the classic notebook from the JupyterLab help menu to ensure you are getting exactly the same notebook server that JupyterLab is using. + + - I can reproduce the issue with the classic Jupyter Notebook: The problem is probably not from JupyterLab. It may be in the `Jupyter Notebook server `__, your kernel, etc. Use your best judgement to file an issue with the appropriate project. + - I cannot reproduce the issue in classic Jupyter Notebook: Go to step 4. +4. Try to reproduce the issue in your browser incognito or private browsing mode. Running in private browser mode ensures your browser state is clean. + + - I cannot reproduce the issue in private browsing mode: Perhaps resetting your cookies or other browser state would help. + - I can reproduce the issue in private browsing mode: Go to :ref:`create-issue`. + +You might also check your system for: + +- Security software that might be preventing access to files or network interfaces +- Network equipment, routers, or proxies that might be preventing communication between the browser and the server +- Browser extensions that might be changing the JupyterLab code or application page + +.. _create-issue: + +Creating an issue +~~~~~~~~~~~~~~~~~ + +Before creating an issue, search in the issue tracker for relevant issues. If you find an issue describing your problem, comment there with the following information instead of creating a new issue. If you find a relevant resolved issue (closed and locked for discussion), create a new issue and reference the resolved issue. + +To create an issue, collect the following contextual information: + +- relevant package versions, including: + + - ``jupyterlab`` and ``notebook`` versions + - browser versions affected (please try to reproduce in Chrome and Firefox at least) + - operating system and version + +- relevant server and JavaScript error messages +- screenshots or short screencasts illustrating the issue + +`Create a new issue `__. Include the contextual information from above. Describe how you followed the diagnosis steps above to conclude this was a JupyterLab issue. + +Communication in JupyterLab follows the Jupyter `Community Guides `__. diff --git a/docs/source/index.rst b/docs/source/index.rst index fc5e3e52a768..9739c6eda498 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -21,6 +21,7 @@ JupyterLab is the next-generation web-based user interface for Project Jupyter. getting_started/overview getting_started/installation getting_started/starting + getting_started/issue getting_started/faq getting_started/changelog diff --git a/examples/app/index.js b/examples/app/index.js index 4b340f301721..aa9bf195b5d0 100644 --- a/examples/app/index.js +++ b/examples/app/index.js @@ -39,7 +39,8 @@ window.addEventListener('load', async function() { require('@jupyterlab/terminal-extension'), require('@jupyterlab/theme-dark-extension'), require('@jupyterlab/theme-light-extension'), - require('@jupyterlab/tooltip-extension') + require('@jupyterlab/tooltip-extension'), + require('@jupyterlab/ui-components-extension') ]; var lab = new JupyterLab(); lab.registerPluginModules(mods); diff --git a/examples/app/package.json b/examples/app/package.json index 0a220b0b7837..4406e174e76b 100644 --- a/examples/app/package.json +++ b/examples/app/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/example-app", - "version": "1.0.4", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "webpack", @@ -8,35 +8,35 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/application-extension": "^1.0.2", - "@jupyterlab/apputils-extension": "^1.0.2", - "@jupyterlab/buildutils": "^1.0.2", - "@jupyterlab/codemirror-extension": "^1.0.2", - "@jupyterlab/completer-extension": "^1.0.2", - "@jupyterlab/console-extension": "^1.0.3", - "@jupyterlab/csvviewer-extension": "^1.0.2", - "@jupyterlab/docmanager-extension": "^1.0.2", - "@jupyterlab/filebrowser-extension": "^1.0.4", - "@jupyterlab/fileeditor-extension": "^1.0.3", - "@jupyterlab/help-extension": "^1.0.2", - "@jupyterlab/imageviewer-extension": "^1.0.2", - "@jupyterlab/inspector-extension": "^1.0.2", - "@jupyterlab/launcher-extension": "^1.0.2", - "@jupyterlab/mainmenu-extension": "^1.0.2", - "@jupyterlab/markdownviewer-extension": "^1.0.2", - "@jupyterlab/mathjax2-extension": "^1.0.2", - "@jupyterlab/notebook-extension": "^1.0.3", - "@jupyterlab/rendermime-extension": "^1.0.2", - "@jupyterlab/running-extension": "^1.0.2", - "@jupyterlab/settingeditor-extension": "^1.0.2", - "@jupyterlab/shortcuts-extension": "^1.0.2", - "@jupyterlab/statusbar-extension": "^1.0.2", - "@jupyterlab/tabmanager-extension": "^1.0.2", - "@jupyterlab/terminal-extension": "^1.0.2", - "@jupyterlab/theme-dark-extension": "^1.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", - "@jupyterlab/tooltip-extension": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/application-extension": "^1.1.0-alpha.1", + "@jupyterlab/apputils-extension": "^1.1.0-alpha.1", + "@jupyterlab/buildutils": "^1.1.0-alpha.1", + "@jupyterlab/codemirror-extension": "^1.1.0-alpha.1", + "@jupyterlab/completer-extension": "^1.1.0-alpha.1", + "@jupyterlab/console-extension": "^1.1.0-alpha.1", + "@jupyterlab/csvviewer-extension": "^1.1.0-alpha.1", + "@jupyterlab/docmanager-extension": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser-extension": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor-extension": "^1.1.0-alpha.1", + "@jupyterlab/help-extension": "^1.1.0-alpha.1", + "@jupyterlab/imageviewer-extension": "^1.1.0-alpha.1", + "@jupyterlab/inspector-extension": "^1.1.0-alpha.1", + "@jupyterlab/launcher-extension": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu-extension": "^1.1.0-alpha.1", + "@jupyterlab/markdownviewer-extension": "^1.1.0-alpha.1", + "@jupyterlab/mathjax2-extension": "^1.1.0-alpha.1", + "@jupyterlab/notebook-extension": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-extension": "^1.1.0-alpha.1", + "@jupyterlab/running-extension": "^1.1.0-alpha.1", + "@jupyterlab/settingeditor-extension": "^1.1.0-alpha.1", + "@jupyterlab/shortcuts-extension": "^1.1.0-alpha.1", + "@jupyterlab/statusbar-extension": "^1.1.0-alpha.1", + "@jupyterlab/tabmanager-extension": "^1.1.0-alpha.1", + "@jupyterlab/terminal-extension": "^1.1.0-alpha.1", + "@jupyterlab/theme-dark-extension": "^1.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "^1.1.0-alpha.1", + "@jupyterlab/tooltip-extension": "^1.1.0-alpha.1", "es6-promise": "~4.2.6" }, "devDependencies": { diff --git a/examples/cell/package.json b/examples/cell/package.json index 5d63b8fcb02d..8ce670fb6363 100644 --- a/examples/cell/package.json +++ b/examples/cell/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/example-cell", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -p src && webpack", @@ -8,13 +8,13 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/completer": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/completer": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "^1.1.0-alpha.1", "@phosphor/commands": "^1.6.3", "@phosphor/widgets": "^1.8.0", "es6-promise": "~4.2.6" diff --git a/examples/console/package.json b/examples/console/package.json index c0f6a25e5e1f..33fc6de617f1 100644 --- a/examples/console/package.json +++ b/examples/console/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/example-console", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -p src && webpack", @@ -8,11 +8,11 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "^1.1.0-alpha.1", "@phosphor/commands": "^1.6.3", "@phosphor/widgets": "^1.8.0", "es6-promise": "~4.2.6" diff --git a/examples/filebrowser/package.json b/examples/filebrowser/package.json index 2745c2f30ff4..9b2d960bae55 100644 --- a/examples/filebrowser/package.json +++ b/examples/filebrowser/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/example-filebrowser", - "version": "1.0.3", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -p src && webpack", @@ -8,14 +8,15 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/widgets": "^1.8.0", diff --git a/examples/filebrowser/src/index.ts b/examples/filebrowser/src/index.ts index fd22a47a41c9..d93c4e493a64 100644 --- a/examples/filebrowser/src/index.ts +++ b/examples/filebrowser/src/index.ts @@ -21,19 +21,21 @@ import { ServiceManager } from '@jupyterlab/services'; import { Dialog, ToolbarButton, showDialog } from '@jupyterlab/apputils'; -import { FileBrowser, FileBrowserModel } from '@jupyterlab/filebrowser'; +import { + CodeMirrorEditorFactory, + CodeMirrorMimeTypeService +} from '@jupyterlab/codemirror'; import { DocumentManager } from '@jupyterlab/docmanager'; import { DocumentRegistry } from '@jupyterlab/docregistry'; -import { - CodeMirrorEditorFactory, - CodeMirrorMimeTypeService -} from '@jupyterlab/codemirror'; +import { FileBrowser, FileBrowserModel } from '@jupyterlab/filebrowser'; import { FileEditorFactory } from '@jupyterlab/fileeditor'; +import { defaultIconRegistry } from '@jupyterlab/ui-components'; + function main(): void { let manager = new ServiceManager(); void manager.ready.then(() => { @@ -85,7 +87,10 @@ function createApp(manager: ServiceManager.IManager): void { let commands = new CommandRegistry(); - let fbModel = new FileBrowserModel({ manager: docManager }); + let fbModel = new FileBrowserModel({ + manager: docManager, + iconRegistry: defaultIconRegistry + }); let fbWidget = new FileBrowser({ id: 'filebrowser', model: fbModel diff --git a/examples/notebook/package.json b/examples/notebook/package.json index b096716be53a..aa893e76e128 100644 --- a/examples/notebook/package.json +++ b/examples/notebook/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/example-notebook", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -p src && webpack", @@ -8,16 +8,16 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/completer": "^1.0.2", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/documentsearch": "^1.0.2", - "@jupyterlab/mathjax2": "^1.0.0", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/completer": "^1.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/documentsearch": "^1.1.0-alpha.1", + "@jupyterlab/mathjax2": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "^1.1.0-alpha.1", "@phosphor/commands": "^1.6.3", "@phosphor/widgets": "^1.8.0", "es6-promise": "~4.2.6" diff --git a/examples/terminal/package.json b/examples/terminal/package.json index 458165d1aaac..a0fc09896636 100644 --- a/examples/terminal/package.json +++ b/examples/terminal/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/example-terminal", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -p src && webpack", @@ -8,9 +8,9 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/terminal": "^1.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/terminal": "^1.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "^1.1.0-alpha.1", "@phosphor/widgets": "^1.8.0", "es6-promise": "~4.2.6" }, diff --git a/jupyterlab/_version.py b/jupyterlab/_version.py index e59c1b7b2129..64c5b6623aa6 100644 --- a/jupyterlab/_version.py +++ b/jupyterlab/_version.py @@ -12,7 +12,7 @@ ]) # DO NOT EDIT THIS DIRECTLY! It is managed by bumpversion -version_info = VersionInfo(1, 0, 4, 'final', 0) +version_info = VersionInfo(1, 1, 0, 'alpha', 1) _specifier_ = {'alpha': 'a', 'beta': 'b', 'candidate': 'rc', 'final': ''} diff --git a/jupyterlab/commands.py b/jupyterlab/commands.py index 06d91e1e4bcb..b515ad7cb247 100644 --- a/jupyterlab/commands.py +++ b/jupyterlab/commands.py @@ -29,6 +29,7 @@ from .semver import Range, gte, lt, lte, gt, make_semver from .jlpmapp import YARN_PATH, HERE +from .coreconfig import _get_default_core_data # The regex for expecting the webpack output. @@ -286,7 +287,7 @@ def watch_dev(logger=None): return package_procs + [wp_proc] -def watch(app_dir=None, logger=None): +def watch(app_dir=None, logger=None, core_config=None): """Watch the application. Parameters @@ -302,11 +303,12 @@ def watch(app_dir=None, logger=None): """ logger = _ensure_logger(logger) _node_check(logger) - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.watch() -def install_extension(extension, app_dir=None, logger=None, pin=None): + +def install_extension(extension, app_dir=None, logger=None, core_config=None, pin=None): """Install an extension package into JupyterLab. The extension is first validated. @@ -315,24 +317,24 @@ def install_extension(extension, app_dir=None, logger=None, pin=None): """ logger = _ensure_logger(logger) _node_check(logger) - handler = _AppHandler(app_dir, logger) - return handler.install_extension(extension, pin=pin) + handler = _AppHandler(app_dir, logger, core_config=core_config, pin=pin) + return handler.install_extension(extension) -def uninstall_extension(name=None, app_dir=None, logger=None, all_=False): +def uninstall_extension(name=None, app_dir=None, logger=None, all_=False, core_config=None): """Uninstall an extension by name or path. Returns `True` if a rebuild is recommended, `False` otherwise. """ logger = _ensure_logger(logger) _node_check(logger) - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) if all_ is True: return handler.uninstall_all_extensions() return handler.uninstall_extension(name) -def update_extension(name=None, all_=False, app_dir=None, logger=None): +def update_extension(name=None, all_=False, app_dir=None, logger=None, core_config=None): """Update an extension by name, or all extensions. Either `name` must be given as a string, or `all_` must be `True`. @@ -342,7 +344,7 @@ def update_extension(name=None, all_=False, app_dir=None, logger=None): """ logger = _ensure_logger(logger) _node_check(logger) - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) if all_ is True: return handler.update_all_extensions() return handler.update_extension(name) @@ -366,96 +368,96 @@ def clean(app_dir=None, logger=None): def build(app_dir=None, name=None, version=None, static_url=None, logger=None, command='build:prod', kill_event=None, - clean_staging=False): + clean_staging=False, core_config=None): """Build the JupyterLab application. """ logger = _ensure_logger(logger) _node_check(logger) - handler = _AppHandler(app_dir, logger, kill_event=kill_event) + handler = _AppHandler(app_dir, logger, kill_event=kill_event, core_config=core_config) return handler.build(name=name, version=version, static_url=static_url, command=command, clean_staging=clean_staging) -def get_app_info(app_dir=None, logger=None): +def get_app_info(app_dir=None, logger=None, core_config=None): """Get a dictionary of information about the app. """ - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.info -def enable_extension(extension, app_dir=None, logger=None): +def enable_extension(extension, app_dir=None, logger=None, core_config=None): """Enable a JupyterLab extension. Returns `True` if a rebuild is recommended, `False` otherwise. """ - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.toggle_extension(extension, False) -def disable_extension(extension, app_dir=None, logger=None): +def disable_extension(extension, app_dir=None, logger=None, core_config=None): """Disable a JupyterLab package. Returns `True` if a rebuild is recommended, `False` otherwise. """ - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.toggle_extension(extension, True) -def check_extension(extension, app_dir=None, installed=False, logger=None): +def check_extension(extension, app_dir=None, installed=False, logger=None, core_config=None): """Check if a JupyterLab extension is enabled or disabled. """ - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.check_extension(extension, installed) -def build_check(app_dir=None, logger=None): +def build_check(app_dir=None, logger=None, core_config=None): """Determine whether JupyterLab should be built. Returns a list of messages. """ logger = _ensure_logger(logger) _node_check(logger) - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.build_check() -def list_extensions(app_dir=None, logger=None): +def list_extensions(app_dir=None, logger=None, core_config=None): """List the extensions. """ - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.list_extensions() -def link_package(path, app_dir=None, logger=None): +def link_package(path, app_dir=None, logger=None, core_config=None): """Link a package against the JupyterLab build. Returns `True` if a rebuild is recommended, `False` otherwise. """ - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.link_package(path) -def unlink_package(package, app_dir=None, logger=None): +def unlink_package(package, app_dir=None, logger=None, core_config=None): """Unlink a package from JupyterLab by path or name. Returns `True` if a rebuild is recommended, `False` otherwise. """ - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.unlink_package(package) -def get_app_version(app_dir=None): +def get_app_version(app_dir=None, core_config=None): """Get the application version.""" app_dir = app_dir or get_app_dir() - handler = _AppHandler(app_dir) + handler = _AppHandler(app_dir, core_config=core_config) return handler.info['version'] -def get_latest_compatible_package_versions(names, app_dir=None, logger=None): +def get_latest_compatible_package_versions(names, app_dir=None, logger=None, core_config=None): """Get the latest compatible version of a list of packages. """ app_dir = app_dir or get_app_dir() - handler = _AppHandler(app_dir, logger) + handler = _AppHandler(app_dir, logger, core_config=core_config) return handler.latest_compatible_package_versions(names) @@ -479,12 +481,15 @@ def read_package(target): class _AppHandler(object): - def __init__(self, app_dir, logger=None, kill_event=None): + def __init__(self, app_dir, logger=None, kill_event=None, core_config=None): """Create a new _AppHandler object """ self.app_dir = app_dir or get_app_dir() self.sys_dir = get_app_dir() self.logger = _ensure_logger(logger) + self.core_data = ( + core_config._data if core_config else _get_default_core_data() + ) self.info = self._get_app_info() self.kill_event = kill_event or Event() # TODO: Make this configurable @@ -716,7 +721,6 @@ def uninstall_extension(self, name): Returns `True` if a rebuild is recommended, `False` otherwise. """ # Allow for uninstalled core extensions. - data = self.info['core_data'] if name in self.info['core_extensions']: config = self._read_build_config() uninstalled = config.get('uninstalled_core_extensions', []) @@ -778,7 +782,7 @@ def update_extension(self, name): Returns `True` if a rebuild is recommended, `False` otherwise. """ if name not in self.info['extensions']: - self.logger.warn('No labextension named "%s" installed' % name) + self.logger.warning('No labextension named "%s" installed' % name) return False return self._update_extension(name) @@ -822,8 +826,8 @@ def link_package(self, path): return self.install_extension(path) # Warn that it is a linked package. - self.logger.warn('Installing %s as a linked package:', path) - [self.logger.warn(m) for m in messages] + self.logger.warning('Installing %s as a linked package:', path) + [self.logger.warning(m) for m in messages] # Add to metadata. config = self._read_build_config() @@ -945,7 +949,7 @@ def _get_app_info(self): """ info = dict() - info['core_data'] = core_data = _get_core_data() + info['core_data'] = core_data = self.core_data info['extensions'] = extensions = self._get_extensions(core_data) page_config = self._read_page_config() info['disabled'] = page_config.get('disabledExtensions', []) @@ -970,7 +974,8 @@ def _get_app_info(self): info['sys_dir'] = self.sys_dir info['app_dir'] = self.app_dir - info['core_extensions'] = core_extensions = _get_core_extensions() + info['core_extensions'] = core_extensions = _get_core_extensions( + self.core_data) disabled_core = [] for key in core_extensions: @@ -1410,9 +1415,8 @@ def _install_extension(self, extension, tempdir, pin=None): raise ValueError(msg % (extension, '\n'.join(messages))) # Verify package compatibility. - core_data = _get_core_data() deps = data.get('dependencies', dict()) - errors = _validate_compatibility(extension, deps, core_data) + errors = _validate_compatibility(extension, deps, self.core_data) if errors: msg = _format_compatibility_errors( data['name'], data['version'], errors @@ -1653,7 +1657,7 @@ def _node_check(logger): output = subprocess.check_output([node, 'node-version-check.js'], cwd=HERE) logger.debug(output.decode('utf-8')) except Exception: - data = _get_core_data() + data = CoreConfig()._data ver = data['engines']['node'] msg = 'Please install nodejs %s before continuing. nodejs may be installed using conda or directly from the nodejs website.' % ver raise ValueError(msg) @@ -1753,13 +1757,6 @@ def _tarsum(input_file): return h.hexdigest() -def _get_core_data(): - """Get the data for the app template. - """ - with open(pjoin(HERE, 'staging', 'package.json')) as fid: - return json.load(fid) - - def _get_static_data(app_dir): """Get the data for the app static dir. """ @@ -1774,7 +1771,7 @@ def _get_static_data(app_dir): def _validate_compatibility(extension, deps, core_data): """Validate the compatibility of an extension. """ - core_deps = core_data['dependencies'] + core_deps = core_data['resolutions'] singletons = core_data['jupyterlab']['singletonPackages'] errors = [] @@ -1956,10 +1953,10 @@ def _compat_error_age(errors): return 0 -def _get_core_extensions(): +def _get_core_extensions(core_data): """Get the core extensions. """ - data = _get_core_data()['jupyterlab'] + data = core_data['jupyterlab'] return list(data['extensions']) + list(data['mimeExtensions']) diff --git a/jupyterlab/coreconfig.py b/jupyterlab/coreconfig.py new file mode 100644 index 000000000000..af08f6cdd45b --- /dev/null +++ b/jupyterlab/coreconfig.py @@ -0,0 +1,165 @@ +# coding: utf-8 +# Copyright (c) Jupyter Development Team. +# Distributed under the terms of the Modified BSD License. + +from collections import defaultdict +from itertools import filterfalse +import json +import os.path as osp + +from .jlpmapp import HERE + + +def pjoin(*args): + """Join paths to create a real path. + """ + return osp.abspath(osp.join(*args)) + + +def _get_default_core_data(): + """Get the data for the app template. + """ + with open(pjoin(HERE, 'staging', 'package.json')) as fid: + return json.load(fid) + + +def _is_lab_package(name): + """Whether a package name is in the lab namespace""" + return name.startswith('@jupyterlab/') + + +def _only_nonlab(collection): + """Filter a dict/sequence to remove all lab packages + + This is useful to take the default values of e.g. singletons and filter + away the '@jupyterlab/' namespace packages, but leave any others (e.g. + phosphor and react). + """ + if isinstance(collection, dict): + return dict( + (k, v) for (k, v) in collection.items() + if not _is_lab_package(k) + ) + elif isinstance(collection, (list, tuple)): + return list(filterfalse(_is_lab_package, collection)) + raise TypeError('collection arg should be either dict or list/tuple') + + +class CoreConfig: + """An object representing a core config. + + This enables custom lab application to override some parts of the core + configuration of the build system. + """ + def __init__(self): + self._data = _get_default_core_data() + + def add(self, name, semver, extension=False, mime_extension=False): + """Remove an extension/singleton. + + If neither extension or mimeExtension is True (the default) + the package is added as a singleton dependency. + + name: string + The npm package name + semver: string + The semver range for the package + extension: bool + Whether the package is an extension + mime_extension: bool + Whether the package is a MIME extension + """ + data = self._data + if not name: + raise ValueError('Missing package name') + if not semver: + raise ValueError('Missing package semver') + if name in data['resolutions']: + raise ValueError('Package already present: %r' % (name,)) + data['resolutions'][name] = semver + + # If both mimeExtension and extensions are True, treat + # as mime extension + if mime_extension: + data['jupyterlab']['mimeExtensions'][name] = "" + data['dependencies'][name] = semver + elif extension: + data['jupyterlab']['extensions'][name] = "" + data['dependencies'][name] = semver + else: + data['jupyterlab']['singletonPackages'].append(name) + + def remove(self, name): + """Remove a package/extension. + + name: string + The npm package name + """ + data = self._data + maps = ( + data['dependencies'], + data['resolutions'], + data['jupyterlab']['extensions'], + data['jupyterlab']['mimeExtensions'], + ) + for m in maps: + try: + del m[name] + except KeyError: + pass + + data['jupyterlab']['singletonPackages'].remove(name) + + def clear_packages(self, lab_only=True): + """Clear the packages/extensions. + """ + data = self._data + # Clear all dependencies + if lab_only: + # Clear all "@jupyterlab/" dependencies + data['dependencies'] = _only_nonlab(data['dependencies']) + data['resolutions'] = _only_nonlab(data['resolutions']) + data['jupyterlab']['extensions'] = _only_nonlab( + data['jupyterlab']['extensions']) + data['jupyterlab']['mimeExtensions'] = _only_nonlab( + data['jupyterlab']['mimeExtensions']) + data['jupyterlab']['singletonPackages'] = _only_nonlab( + data['jupyterlab']['singletonPackages']) + else: + data['dependencies'] = {} + data['resolutions'] = {} + data['jupyterlab']['extensions'] = {} + data['jupyterlab']['mimeExtensions'] = {} + data['jupyterlab']['singletonPackages'] = [] + + @property + def extensions(self): + """A dict mapping all extension names to their semver""" + data = self._data + return dict( + (k, data['resolutions'][k]) + for k in data['jupyterlab']['extensions'].keys()) + + @property + def mime_extensions(self): + """A dict mapping all MIME extension names to their semver""" + data = self._data + return dict( + (k, data['resolutions'][k]) + for k in data['jupyterlab']['mimeExtensions'].keys()) + + @property + def singletons(self): + """A dict mapping all singleton names to their semver""" + data = self._data + return dict( + (k, data['resolutions'].get(k, None)) + for k in data['jupyterlab']['singletonPackages']) + + @property + def static_dir(self): + return self._data['jupyterlab']['staticDir'] + + @static_dir.setter + def static_dir(self, static_dir): + self._data['jupyterlab']['staticDir'] = static_dir diff --git a/jupyterlab/handlers/build_handler.py b/jupyterlab/handlers/build_handler.py index 80cf27e5fa89..c8bfbfec15db 100644 --- a/jupyterlab/handlers/build_handler.py +++ b/jupyterlab/handlers/build_handler.py @@ -21,10 +21,11 @@ class Builder(object): _kill_event = None _future = None - def __init__(self, log, core_mode, app_dir): + def __init__(self, log, core_mode, app_dir, core_config=None): self.log = log self.core_mode = core_mode self.app_dir = app_dir + self.core_config = core_config @gen.coroutine def get_status(self): @@ -34,7 +35,8 @@ def get_status(self): raise gen.Return(dict(status='building', message='')) try: - messages = yield self._run_build_check(self.app_dir, self.log) + messages = yield self._run_build_check( + self.app_dir, self.log, self.core_config) status = 'needed' if messages else 'stable' if messages: self.log.warn('Build recommended') @@ -60,7 +62,8 @@ def build(self): self.building = True self._kill_event = evt = Event() try: - yield self._run_build(self.app_dir, self.log, evt) + yield self._run_build( + self.app_dir, self.log, evt, self.core_config) future.set_result(True) except Exception as e: if str(e) == 'Aborted': @@ -84,12 +87,15 @@ def cancel(self): self.canceled = True @run_on_executor - def _run_build_check(self, app_dir, logger): - return build_check(app_dir=app_dir, logger=logger) + def _run_build_check(self, app_dir, logger, core_config): + return build_check( + app_dir=app_dir, logger=logger, core_config=core_config) @run_on_executor - def _run_build(self, app_dir, logger, kill_event): - kwargs = dict(app_dir=app_dir, logger=logger, kill_event=kill_event, command='build') + def _run_build(self, app_dir, logger, kill_event, core_config): + kwargs = dict( + app_dir=app_dir, logger=logger, kill_event=kill_event, + core_config=core_config, command='build') try: return build(**kwargs) except Exception as e: @@ -114,7 +120,7 @@ def get(self): @web.authenticated @gen.coroutine def delete(self): - self.log.warn('Canceling build') + self.log.warning('Canceling build') try: yield self.builder.cancel() except Exception as e: diff --git a/jupyterlab/handlers/extension_manager_handler.py b/jupyterlab/handlers/extension_manager_handler.py index 3ef873e357ba..df02348df367 100644 --- a/jupyterlab/handlers/extension_manager_handler.py +++ b/jupyterlab/handlers/extension_manager_handler.py @@ -66,9 +66,10 @@ def _build_check_info(app_dir, logger): class ExtensionManager(object): executor = ThreadPoolExecutor(max_workers=1) - def __init__(self, log, app_dir): + def __init__(self, log, app_dir, core_config=None): self.log = log self.app_dir = app_dir + self.core_config = core_config self._outdated = None # To start fetching data on outdated extensions immediately, uncomment: # IOLoop.current().spawn_callback(self._get_outdated) @@ -122,7 +123,9 @@ def list_extensions(self): def install(self, extension): """Handle an install/update request""" try: - install_extension(extension, app_dir=self.app_dir, logger=self.log) + install_extension( + extension, app_dir=self.app_dir, logger=self.log, + core_config=self.core_config) except ValueError as e: raise gen.Return(dict(status='error', message=str(e))) raise gen.Return(dict(status='ok',)) @@ -130,19 +133,25 @@ def install(self, extension): @gen.coroutine def uninstall(self, extension): """Handle an uninstall request""" - did_uninstall = uninstall_extension(extension, app_dir=self.app_dir, logger=self.log) + did_uninstall = uninstall_extension( + extension, app_dir=self.app_dir, logger=self.log, + core_config=self.core_config) raise gen.Return(dict(status='ok' if did_uninstall else 'error',)) @gen.coroutine def enable(self, extension): """Handle an enable request""" - enable_extension(extension, app_dir=self.app_dir, logger=self.log) + enable_extension( + extension, app_dir=self.app_dir, logger=self.log, + core_config=self.core_config) raise gen.Return(dict(status='ok',)) @gen.coroutine def disable(self, extension): """Handle a disable request""" - disable_extension(extension, app_dir=self.app_dir, logger=self.log) + disable_extension( + extension, app_dir=self.app_dir, logger=self.log, + core_config=self.core_config) raise gen.Return(dict(status='ok',)) @gen.coroutine @@ -187,6 +196,7 @@ def _load_outdated(self): names, app_dir=self.app_dir, logger=self.log, + core_config=self.core_config, ) raise gen.Return(data) diff --git a/jupyterlab/labapp.py b/jupyterlab/labapp.py index a79cf8ff7e7b..992784d02560 100644 --- a/jupyterlab/labapp.py +++ b/jupyterlab/labapp.py @@ -14,7 +14,7 @@ from jupyterlab_server import slugify, WORKSPACE_EXTENSION from notebook.notebookapp import NotebookApp, aliases, flags from notebook.utils import url_path_join as ujoin -from traitlets import Bool, Unicode +from traitlets import Bool, Instance, Unicode from ._version import __version__ from .debuglog import DebugLogFileMixin @@ -23,6 +23,7 @@ build, clean, get_app_dir, get_app_version, get_user_settings_dir, get_workspaces_dir ) +from .coreconfig import CoreConfig build_aliases = dict(base_aliases) @@ -53,6 +54,9 @@ class LabBuildApp(JupyterApp, DebugLogFileMixin): aliases = build_aliases flags = build_flags + # Not configurable! + core_config = Instance(CoreConfig, allow_none=True) + app_dir = Unicode('', config=True, help="The app directory to build in") @@ -88,7 +92,8 @@ def start(self): clean(self.app_dir) self.log.info('Building in %s', app_dir) build(app_dir=app_dir, name=self.name, version=self.version, - command=command, logger=self.log) + command=command, logger=self.log, + core_config=self.core_config) clean_aliases = dict(base_aliases) @@ -105,6 +110,9 @@ class LabCleanApp(JupyterApp): """ aliases = clean_aliases + # Not configurable! + core_config = Instance(CoreConfig, allow_none=True) + app_dir = Unicode('', config=True, help='The app directory to clean') def start(self): @@ -411,7 +419,7 @@ def init_server_extensions(self): super(LabApp, self).init_server_extensions() msg = 'JupyterLab server extension not enabled, manually loading...' if not self.nbserver_extensions.get('jupyterlab', False): - self.log.warn(msg) + self.log.warning(msg) load_jupyter_server_extension(self) diff --git a/jupyterlab/labextensions.py b/jupyterlab/labextensions.py index d18053b84a3b..90b4db5c5d77 100644 --- a/jupyterlab/labextensions.py +++ b/jupyterlab/labextensions.py @@ -11,7 +11,7 @@ from jupyter_core.application import JupyterApp, base_flags, base_aliases -from traitlets import Bool, Unicode, Unicode +from traitlets import Bool, Instance, Unicode from .commands import ( install_extension, uninstall_extension, list_extensions, @@ -19,6 +19,7 @@ link_package, unlink_package, build, get_app_version, HERE, update_extension, ) +from .coreconfig import CoreConfig from .debuglog import DebugLogFileMixin @@ -67,6 +68,9 @@ class BaseExtensionApp(JupyterApp, DebugLogFileMixin): flags = flags aliases = aliases + # Not configurable! + core_config = Instance(CoreConfig, allow_none=True) + app_dir = Unicode('', config=True, help="The app directory to target") @@ -97,7 +101,8 @@ def start(self): command = ':'.join(parts) build(app_dir=self.app_dir, clean_staging=self.should_clean, - logger=self.log, command=command) + logger=self.log, command=command, + core_config=self.core_config) def run_task(self): pass @@ -135,6 +140,7 @@ def run_task(self): arg, self.app_dir, logger=self.log, + core_config=self.core_config, # Pass in pinned alias if we have it pin=pinned_versions[i] if i < len(pinned_versions) else None ) @@ -154,9 +160,13 @@ def run_task(self): self.log.warn('Specify an extension to update, or use --all to update all extensions') return False if self.all: - return update_extension(all_=True, app_dir=self.app_dir, logger=self.log) + return update_extension( + all_=True, app_dir=self.app_dir, logger=self.log, + core_config=self.core_config) return any([ - update_extension(name=arg, app_dir=self.app_dir, logger=self.log) + update_extension( + name=arg, app_dir=self.app_dir, logger=self.log, + core_config=self.core_config) for arg in self.extra_args ]) @@ -175,7 +185,9 @@ class LinkLabExtensionApp(BaseExtensionApp): def run_task(self): self.extra_args = self.extra_args or [os.getcwd()] return any([ - link_package(arg, self.app_dir, logger=self.log) + link_package( + arg, self.app_dir, logger=self.log, + core_config=self.core_config) for arg in self.extra_args ]) @@ -186,7 +198,9 @@ class UnlinkLabExtensionApp(BaseExtensionApp): def run_task(self): self.extra_args = self.extra_args or [os.getcwd()] return any([ - unlink_package(arg, self.app_dir, logger=self.log) + unlink_package( + arg, self.app_dir, logger=self.log, + core_config=self.core_config) for arg in self.extra_args ]) @@ -201,7 +215,9 @@ class UninstallLabExtensionApp(BaseExtensionApp): def run_task(self): self.extra_args = self.extra_args or [os.getcwd()] return any([ - uninstall_extension(arg, all_=self.all, app_dir=self.app_dir, logger=self.log) + uninstall_extension( + arg, all_=self.all, app_dir=self.app_dir, logger=self.log, + core_config=self.core_config) for arg in self.extra_args ]) @@ -210,14 +226,16 @@ class ListLabExtensionsApp(BaseExtensionApp): description = "List the installed labextensions" def run_task(self): - list_extensions(self.app_dir, logger=self.log) + list_extensions( + self.app_dir, logger=self.log, core_config=self.core_config) class EnableLabExtensionsApp(BaseExtensionApp): description = "Enable labextension(s) by name" def run_task(self): - [enable_extension(arg, self.app_dir, logger=self.log) + [enable_extension( + arg, self.app_dir, logger=self.log, core_config=self.core_config) for arg in self.extra_args] @@ -225,7 +243,8 @@ class DisableLabExtensionsApp(BaseExtensionApp): description = "Disable labextension(s) by name" def run_task(self): - [disable_extension(arg, self.app_dir, logger=self.log) + [disable_extension( + arg, self.app_dir, logger=self.log, core_config=self.core_config) for arg in self.extra_args] @@ -241,7 +260,8 @@ def run_task(self): check_extension( arg, self.app_dir, self.should_check_installed_only, - logger=self.log) + logger=self.log, + core_config=self.core_config) for arg in self.extra_args) if not all_enabled: self.exit(1) diff --git a/jupyterlab/staging/package.json b/jupyterlab/staging/package.json index a4ebc0c2e2d4..e2bb1a99c5d2 100644 --- a/jupyterlab/staging/package.json +++ b/jupyterlab/staging/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/application-top", - "version": "1.0.4", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "webpack", @@ -15,81 +15,48 @@ "watch": "webpack --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/application-extension": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/apputils-extension": "^1.0.2", - "@jupyterlab/codemirror-extension": "^1.0.2", - "@jupyterlab/completer-extension": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/console-extension": "^1.0.3", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/csvviewer-extension": "^1.0.2", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docmanager-extension": "^1.0.2", - "@jupyterlab/documentsearch-extension": "^1.0.2", - "@jupyterlab/extensionmanager": "^1.0.2", - "@jupyterlab/extensionmanager-extension": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/filebrowser-extension": "^1.0.4", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/fileeditor-extension": "^1.0.3", - "@jupyterlab/help-extension": "^1.0.2", - "@jupyterlab/htmlviewer-extension": "^1.0.2", - "@jupyterlab/hub-extension": "^1.0.2", - "@jupyterlab/imageviewer": "^1.0.2", - "@jupyterlab/imageviewer-extension": "^1.0.2", - "@jupyterlab/inspector-extension": "^1.0.2", - "@jupyterlab/javascript-extension": "^1.0.2", - "@jupyterlab/json-extension": "^1.0.2", - "@jupyterlab/launcher": "^1.0.2", - "@jupyterlab/launcher-extension": "^1.0.2", - "@jupyterlab/mainmenu-extension": "^1.0.2", - "@jupyterlab/markdownviewer-extension": "^1.0.2", - "@jupyterlab/mathjax2-extension": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/notebook-extension": "^1.0.3", - "@jupyterlab/pdf-extension": "^1.0.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/rendermime-extension": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/running-extension": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/settingeditor-extension": "^1.0.2", - "@jupyterlab/shortcuts-extension": "^1.0.2", - "@jupyterlab/statusbar-extension": "^1.0.2", - "@jupyterlab/tabmanager-extension": "^1.0.2", - "@jupyterlab/terminal": "^1.0.2", - "@jupyterlab/terminal-extension": "^1.0.2", - "@jupyterlab/theme-dark-extension": "^1.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", - "@jupyterlab/tooltip": "^1.0.2", - "@jupyterlab/tooltip-extension": "^1.0.2", - "@jupyterlab/vdom-extension": "^1.0.2", - "@jupyterlab/vega4-extension": "^1.0.1", - "@jupyterlab/vega5-extension": "^1.0.1", - "@phosphor/algorithm": "^1.1.3", - "@phosphor/application": "^1.6.3", - "@phosphor/commands": "^1.6.3", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/datagrid": "^0.1.9", - "@phosphor/disposable": "^1.2.0", - "@phosphor/messaging": "^1.2.3", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.2.3", - "@phosphor/widgets": "^1.8.0", - "ajv": "^6.5.5", - "codemirror": "~5.47.0", - "es6-promise": "~4.2.6", - "json5": "^2.1.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "react": "~16.8.4", - "react-dom": "~16.8.4", - "url-parse": "~1.4.3" + "@jupyterlab/application": "~1.1.0-alpha.1", + "@jupyterlab/application-extension": "~1.1.0-alpha.1", + "@jupyterlab/apputils-extension": "~1.1.0-alpha.1", + "@jupyterlab/codemirror-extension": "~1.1.0-alpha.1", + "@jupyterlab/completer-extension": "~1.1.0-alpha.1", + "@jupyterlab/console-extension": "~1.1.0-alpha.1", + "@jupyterlab/coreutils": "~3.1.0-alpha.1", + "@jupyterlab/csvviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/docmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/documentsearch-extension": "~1.1.0-alpha.1", + "@jupyterlab/extensionmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/filebrowser-extension": "~1.1.0-alpha.1", + "@jupyterlab/fileeditor-extension": "~1.1.0-alpha.1", + "@jupyterlab/help-extension": "~1.1.0-alpha.1", + "@jupyterlab/htmlviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/hub-extension": "~1.1.0-alpha.1", + "@jupyterlab/imageviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/inspector-extension": "~1.1.0-alpha.1", + "@jupyterlab/javascript-extension": "~1.1.0-alpha.1", + "@jupyterlab/json-extension": "~1.1.0-alpha.1", + "@jupyterlab/launcher-extension": "~1.1.0-alpha.1", + "@jupyterlab/mainmenu-extension": "~1.1.0-alpha.1", + "@jupyterlab/markdownviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/mathjax2-extension": "~1.1.0-alpha.1", + "@jupyterlab/notebook-extension": "~1.1.0-alpha.1", + "@jupyterlab/pdf-extension": "~1.1.0-alpha.1", + "@jupyterlab/rendermime-extension": "~1.1.0-alpha.1", + "@jupyterlab/running-extension": "~1.1.0-alpha.1", + "@jupyterlab/settingeditor-extension": "~1.1.0-alpha.1", + "@jupyterlab/shortcuts-extension": "~1.1.0-alpha.1", + "@jupyterlab/statusbar-extension": "~1.1.0-alpha.1", + "@jupyterlab/tabmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/terminal-extension": "~1.1.0-alpha.1", + "@jupyterlab/theme-dark-extension": "~1.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "~1.1.0-alpha.1", + "@jupyterlab/tooltip-extension": "~1.1.0-alpha.1", + "@jupyterlab/vdom-extension": "~1.1.0-alpha.1", + "@jupyterlab/vega4-extension": "~1.1.0-alpha.1", + "@jupyterlab/vega5-extension": "~1.1.0-alpha.1" }, "devDependencies": { - "@jupyterlab/buildutils": "^1.0.2", + "@jupyterlab/buildutils": "^1.1.0-alpha.1", "cross-env": "^5.2.0", "css-loader": "~2.1.1", "duplicate-package-checker-webpack-plugin": "^3.0.0", @@ -116,12 +83,101 @@ "webpack-visualizer-plugin": "^0.1.11", "yarn-deduplicate": "^1.1.1" }, + "resolutions": { + "@jupyterlab/application": "~1.1.0-alpha.1", + "@jupyterlab/application-extension": "~1.1.0-alpha.1", + "@jupyterlab/apputils": "~1.1.0-alpha.1", + "@jupyterlab/apputils-extension": "~1.1.0-alpha.1", + "@jupyterlab/attachments": "~1.1.0-alpha.1", + "@jupyterlab/cells": "~1.1.0-alpha.1", + "@jupyterlab/codeeditor": "~1.1.0-alpha.1", + "@jupyterlab/codemirror": "~1.1.0-alpha.1", + "@jupyterlab/codemirror-extension": "~1.1.0-alpha.1", + "@jupyterlab/completer": "~1.1.0-alpha.1", + "@jupyterlab/completer-extension": "~1.1.0-alpha.1", + "@jupyterlab/console": "~1.1.0-alpha.1", + "@jupyterlab/console-extension": "~1.1.0-alpha.1", + "@jupyterlab/coreutils": "~3.1.0-alpha.1", + "@jupyterlab/csvviewer": "~1.1.0-alpha.1", + "@jupyterlab/csvviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/docmanager": "~1.1.0-alpha.1", + "@jupyterlab/docmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/docregistry": "~1.1.0-alpha.1", + "@jupyterlab/documentsearch": "~1.1.0-alpha.1", + "@jupyterlab/documentsearch-extension": "~1.1.0-alpha.1", + "@jupyterlab/extensionmanager": "~1.1.0-alpha.1", + "@jupyterlab/extensionmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/filebrowser": "~1.1.0-alpha.1", + "@jupyterlab/filebrowser-extension": "~1.1.0-alpha.1", + "@jupyterlab/fileeditor": "~1.1.0-alpha.1", + "@jupyterlab/fileeditor-extension": "~1.1.0-alpha.1", + "@jupyterlab/help-extension": "~1.1.0-alpha.1", + "@jupyterlab/htmlviewer": "~1.1.0-alpha.1", + "@jupyterlab/htmlviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/hub-extension": "~1.1.0-alpha.1", + "@jupyterlab/imageviewer": "~1.1.0-alpha.1", + "@jupyterlab/imageviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/inspector": "~1.1.0-alpha.1", + "@jupyterlab/inspector-extension": "~1.1.0-alpha.1", + "@jupyterlab/javascript-extension": "~1.1.0-alpha.1", + "@jupyterlab/json-extension": "~1.1.0-alpha.1", + "@jupyterlab/launcher": "~1.1.0-alpha.1", + "@jupyterlab/launcher-extension": "~1.1.0-alpha.1", + "@jupyterlab/mainmenu": "~1.1.0-alpha.1", + "@jupyterlab/mainmenu-extension": "~1.1.0-alpha.1", + "@jupyterlab/markdownviewer": "~1.1.0-alpha.1", + "@jupyterlab/markdownviewer-extension": "~1.1.0-alpha.1", + "@jupyterlab/mathjax2": "~1.1.0-alpha.1", + "@jupyterlab/mathjax2-extension": "~1.1.0-alpha.1", + "@jupyterlab/metapackage": "~1.1.0-alpha.1", + "@jupyterlab/nbconvert-css": "~0.2.0-alpha.1", + "@jupyterlab/notebook": "~1.1.0-alpha.1", + "@jupyterlab/notebook-extension": "~1.1.0-alpha.1", + "@jupyterlab/observables": "~2.3.0-alpha.1", + "@jupyterlab/outputarea": "~1.1.0-alpha.1", + "@jupyterlab/pdf-extension": "~1.1.0-alpha.1", + "@jupyterlab/rendermime": "~1.1.0-alpha.1", + "@jupyterlab/rendermime-extension": "~1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "~1.4.0-alpha.1", + "@jupyterlab/running": "~1.1.0-alpha.1", + "@jupyterlab/running-extension": "~1.1.0-alpha.1", + "@jupyterlab/services": "~4.1.0-alpha.1", + "@jupyterlab/settingeditor": "~1.1.0-alpha.1", + "@jupyterlab/settingeditor-extension": "~1.1.0-alpha.1", + "@jupyterlab/shortcuts-extension": "~1.1.0-alpha.1", + "@jupyterlab/statusbar": "~1.1.0-alpha.1", + "@jupyterlab/statusbar-extension": "~1.1.0-alpha.1", + "@jupyterlab/tabmanager-extension": "~1.1.0-alpha.1", + "@jupyterlab/terminal": "~1.1.0-alpha.1", + "@jupyterlab/terminal-extension": "~1.1.0-alpha.1", + "@jupyterlab/theme-dark-extension": "~1.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "~1.1.0-alpha.1", + "@jupyterlab/tooltip": "~1.1.0-alpha.1", + "@jupyterlab/tooltip-extension": "~1.1.0-alpha.1", + "@jupyterlab/ui-components": "~1.1.0-alpha.1", + "@jupyterlab/vdom": "~1.1.0-alpha.1", + "@jupyterlab/vdom-extension": "~1.1.0-alpha.1", + "@jupyterlab/vega4-extension": "~1.1.0-alpha.1", + "@jupyterlab/vega5-extension": "~1.1.0-alpha.1", + "@phosphor/algorithm": "^1.1.3", + "@phosphor/application": "^1.6.3", + "@phosphor/commands": "^1.6.3", + "@phosphor/coreutils": "^1.3.1", + "@phosphor/datagrid": "^0.1.9", + "@phosphor/disposable": "^1.2.0", + "@phosphor/messaging": "^1.2.3", + "@phosphor/properties": "^1.1.3", + "@phosphor/signaling": "^1.2.3", + "@phosphor/widgets": "^1.8.0", + "react": "~16.8.4", + "react-dom": "~16.8.4" + }, "engines": { "node": ">=6.11.5" }, "jupyterlab": { "name": "JupyterLab", - "version": "1.0.4", + "version": "1.1.0a1", "extensions": { "@jupyterlab/application-extension": "", "@jupyterlab/apputils-extension": "", @@ -182,10 +238,6 @@ "@jupyterlab/services", "@jupyterlab/terminal", "@jupyterlab/tooltip", - "@phosphor/coreutils", - "@phosphor/widgets" - ], - "vendor": [ "@phosphor/algorithm", "@phosphor/application", "@phosphor/commands", @@ -199,20 +251,8 @@ "@phosphor/signaling", "@phosphor/virtualdom", "@phosphor/widgets", - "ajv", - "codemirror", - "json5", - "es6-promise", - "marked", - "moment", - "path-posix", "react", - "react-dom", - "react-paginate", - "sanitize-html", - "semver", - "url-parse", - "xterm" + "react-dom" ], "linkedPackages": {}, "staticDir": "../static" diff --git a/jupyterlab/staging/webpack.config.js b/jupyterlab/staging/webpack.config.js index 78c1769a515d..5a2612582ddf 100644 --- a/jupyterlab/staging/webpack.config.js +++ b/jupyterlab/staging/webpack.config.js @@ -189,8 +189,22 @@ module.exports = [ }, { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader' }, { + // in css files, svg is loaded as a url formatted string test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, - use: 'url-loader?limit=10000&mimetype=image/svg+xml' + issuer: { test: /\.css$/ }, + use: { + loader: 'svg-url-loader', + options: { encoding: 'none', limit: 10000 } + } + }, + { + // in ts and tsx files (both of which compile to js), + // svg is loaded as a raw string + test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, + issuer: { test: /\.js$/ }, + use: { + loader: 'raw-loader' + } } ] }, diff --git a/jupyterlab/staging/yarn.lock b/jupyterlab/staging/yarn.lock index 4e0fdbe58dff..6a4cf20ca037 100644 --- a/jupyterlab/staging/yarn.lock +++ b/jupyterlab/staging/yarn.lock @@ -9,62 +9,62 @@ dependencies: regenerator-runtime "^0.13.2" -"@blueprintjs/core@^3.17.0", "@blueprintjs/core@^3.9.0": - version "3.17.1" - resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.17.1.tgz#c6ea0df795e046848a16b3d9242225fef34091ee" - integrity sha512-VROTlhBaNaRN9kfscTQwZqRvGZmZYGfPkzcP8w50+wF/XMiK0xNEF4mRNQKXLNIduIZta5uPagZgIh68UG5dTg== +"@blueprintjs/core@^3.18.0", "@blueprintjs/core@^3.9.0": + version "3.18.0" + resolved "https://registry.yarnpkg.com/@blueprintjs/core/-/core-3.18.0.tgz#8835ead10460e6535076465865d2ad7600ae1a07" + integrity sha512-dr3A6uhpAAWmf5muY6PFQp5EgEzinRLZa/TGQMA05q1P2xrOn/LYlsqJWJBUJ3j9tmh1RP8VPeu1HmosQb3J7w== dependencies: - "@blueprintjs/icons" "^3.8.0" + "@blueprintjs/icons" "^3.10.0" "@types/dom4" "^2.0.1" classnames "^2.2" - dom4 "^2.0.1" - normalize.css "^8.0.0" - popper.js "^1.14.1" - react-popper "^1.0.0" - react-transition-group "^2.2.1" - resize-observer-polyfill "^1.5.0" - tslib "^1.9.0" - -"@blueprintjs/icons@^3.3.0", "@blueprintjs/icons@^3.8.0": - version "3.9.1" - resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-3.9.1.tgz#064d43314313f0feb4b1dd7e0904ddc17c8652d1" - integrity sha512-2EU9Xot0lkztDp8xVnBi5/71jgG1Rmsfz0LycBX/T16H0qGO7i+XEbZbpJjSvmr/UzhTpxQ/Yh5XGBc2U2zG4w== + dom4 "^2.1.5" + normalize.css "^8.0.1" + popper.js "^1.15.0" + react-popper "^1.3.3" + react-transition-group "^2.9.0" + resize-observer-polyfill "^1.5.1" + tslib "~1.9.0" + +"@blueprintjs/icons@^3.10.0", "@blueprintjs/icons@^3.3.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-3.10.0.tgz#45cdb3ca62110e74bcf9e741237a6b4e2cf2c3a4" + integrity sha512-lyAUpkr3qEStPcJpMnxRKuVAPvaRNSce1ySPbkE58zPmD4WBya2gNrWex41xoqRYM0GsiBSwH9CnpY8t6fZKUA== dependencies: classnames "^2.2" - tslib "^1.9.0" + tslib "~1.9.0" "@blueprintjs/select@^3.3.0": - version "3.9.0" - resolved "https://registry.yarnpkg.com/@blueprintjs/select/-/select-3.9.0.tgz#728fd9cea8ff1cb3226db99b3b3a1851da3e766a" - integrity sha512-TmInLtGFc3My78KTmf9JUw5gawxdO7oxn3bEQDQbWPuvb/1K0u0et+dTVlwGTk9GiNopQ2NtoCj+GQ75miF9QA== + version "3.10.0" + resolved "https://registry.yarnpkg.com/@blueprintjs/select/-/select-3.10.0.tgz#e5711a25416e62d236afb8a3062af45b3b4206ef" + integrity sha512-Akm/L5tndrOUuf05od9IJ0WSQgHdbJ4/i2RRoLLH5ZiI8s1OZiCbKJYDSCbCOTviCdZSuL0qkJsBcYhOI/Czeg== dependencies: - "@blueprintjs/core" "^3.17.0" + "@blueprintjs/core" "^3.18.0" classnames "^2.2" - tslib "^1.9.0" + tslib "~1.9.0" -"@jupyterlab/application-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/application-extension/-/application-extension-1.0.2.tgz#050288ac8b17962d82274617c79dceb842931043" - integrity sha512-Q+aT0URJuGuCkO14MyqfWj4Euicehc1vpvjW38HntPVR0LS7hDoI+Jkr6t4j1UGTQP8PUi4/kCapC4vEvqKJ7w== +"@jupyterlab/application-extension@^1.1.0-alpha.1", "@jupyterlab/application-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/application-extension/-/application-extension-1.1.0-alpha.1.tgz#f920bf92a43e57cc468c5e5e74f7a4a664e5a1a4" + integrity sha512-4UBI1xc+CWrp0DVvu7RQh2CYr0sVfFyxHtOgKsBYKB/N9dJl4gljkfxgpazOeIoxV3fjAhCzr4G7BzdEFMyv+Q== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/widgets" "^1.8.0" react "~16.8.4" -"@jupyterlab/application@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-1.0.2.tgz#bdda0d710baa3348c1fe28ce273b9afafb11b29e" - integrity sha512-B0cpY7eLN4e6t6n1ktejfUYb4c1wsizSEhORrLvQ/EiKBG5t++I87SKwxOFyZE2e6QVZoUDkGDM+n4xTX6tFRg== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/rendermime-interfaces" "^1.3.0" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/application@^1.1.0-alpha.1", "@jupyterlab/application@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/application/-/application-1.1.0-alpha.1.tgz#a382d328873609555cc0688bdcba641a91b41c7d" + integrity sha512-rJDQ9WvXyiPWvWlsbPjCXkkXwY8aAnO+/MBDovGuOMXbovXFsGPy8ZIvEMrpIzlf7fON4XMYEzszb+x2Q2fdLA== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/application" "^1.6.3" "@phosphor/commands" "^1.6.3" @@ -76,15 +76,15 @@ "@phosphor/widgets" "^1.8.0" font-awesome "~4.7.0" -"@jupyterlab/apputils-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/apputils-extension/-/apputils-extension-1.0.2.tgz#fd9167d023f5dda6490974d29d447c25eed4fa16" - integrity sha512-CQvb1ef4n6S9VY72YUoTycCMgrC5LEi9PLQqWIeZkiB6o+RxpUnJhUwzPrfmiX8J/cwmwfVq/uxE8+hRnMTO3g== +"@jupyterlab/apputils-extension@^1.1.0-alpha.1", "@jupyterlab/apputils-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/apputils-extension/-/apputils-extension-1.1.0-alpha.1.tgz#2830eebd4538a2daaea551e860143b82066a77a1" + integrity sha512-dZEA5EgqhkfqVM+MHTBxpzXOVkeFIuuc33aeAWvLXPhXiuHpAQqikxfRNKdfIIYdH/bZnujoCK7glhaOvluPCw== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/mainmenu" "^1.0.2" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" @@ -92,14 +92,14 @@ "@phosphor/widgets" "^1.8.0" es6-promise "~4.2.6" -"@jupyterlab/apputils@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-1.0.2.tgz#6c3483d0803ab780f924e70d98b7a8599c135fdb" - integrity sha512-3n/Dqau0s4v6+MjWLRuoZQrr/BdhEgmEj9Kfkw562b/KuXo+JtsLE3FVzvi7gMK2duPHqv4B56QP8sl1Z9Hyaw== +"@jupyterlab/apputils@^1.1.0-alpha.1", "@jupyterlab/apputils@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/apputils/-/apputils-1.1.0-alpha.1.tgz#a1327042df75e76102a7eb6ce132dedd3ac91499" + integrity sha512-t9SQyK7Um6ElsXCZGZl0zHms2HWyfCbt4AfwaZva0MjShoz34pVLXdj2NB3iwYsq+ZKnk9p7719a24HR0ORmiQ== dependencies: - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/ui-components" "^1.0.0" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/ui-components" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" @@ -115,22 +115,22 @@ react-dom "~16.8.4" sanitize-html "~1.20.1" -"@jupyterlab/attachments@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/attachments/-/attachments-1.0.2.tgz#0c6d46043c861e76e9a94c1ecb9045eb452bf3f5" - integrity sha512-M3fDgoaKFUUSM7B3OFCq+iXes4lel4fQpaVxePsYxZbisr1ajMW7mwtM9V1fSY6pujiik6rmbFFJAyhEz/CBZg== +"@jupyterlab/attachments@^1.1.0-alpha.1", "@jupyterlab/attachments@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/attachments/-/attachments-1.1.0-alpha.1.tgz#73618c9344d52bcad4bb1cc63e3456ea801c9a2d" + integrity sha512-y5uvlA9ycNRMzaKN7hNo2y3yQuRzkrQw4hidEBhq59ZQYOl7o+TOq7f+bP4KtDYNI+yarGBRRSs8g3c3zHT/ng== dependencies: - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/rendermime-interfaces" "^1.3.0" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" "@phosphor/disposable" "^1.2.0" "@phosphor/signaling" "^1.2.3" -"@jupyterlab/buildutils@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/buildutils/-/buildutils-1.0.2.tgz#647615b75111cd0427fd0475bedb9b2653a4e07f" - integrity sha512-P0Q4rX7Mt6Pxvfu/L70ae39puWtRYSj6NaL9c4AzFN/FSTH4IfsyjOXiltGbM9+GMXc+uO/KGr6WkZJGIFtLYQ== +"@jupyterlab/buildutils@^1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/buildutils/-/buildutils-1.1.0-alpha.1.tgz#03d55d540087a45581ab35e0c3306675da449f61" + integrity sha512-iSEhEuL6QlnVDGSuWsdwErZyetlm8ZGEImlbq6GI7WTi5pB6sUMr8/vt0mlPSRLhdIHjSO0rNHGGjmdq8deY/w== dependencies: "@phosphor/coreutils" "^1.3.1" "@yarnpkg/lockfile" "^1.1.0" @@ -148,20 +148,20 @@ typescript "~3.5.1" webpack "^4.32.2" -"@jupyterlab/cells@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/cells/-/cells-1.0.2.tgz#188ec23c84e0ea799463e73ab7bea758bbd6cff2" - integrity sha512-KTdYSWnyoRIaTY9FUb2kmtO08kjqTzdUnq9eJMHlJlBMi5sClyZTNU10LpiQo0stEiLsIk1OGuXutNtykVwqoA== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/attachments" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/codemirror" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" - "@jupyterlab/outputarea" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/cells@^1.1.0-alpha.1", "@jupyterlab/cells@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/cells/-/cells-1.1.0-alpha.1.tgz#30f2444e472d2ad8146684a8729be42de71074bb" + integrity sha512-kuY4Eh5mhiS+aa3PTpDTle7tbgpDy/UPfZ1NOZZ9WVB6g2v0DuXkTnGk4Xk3GiOa/4Gxu7C+08ZXEAkX8ebFXw== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/attachments" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/codemirror" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/outputarea" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" @@ -170,13 +170,13 @@ "@phosphor/widgets" "^1.8.0" react "~16.8.4" -"@jupyterlab/codeeditor@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-1.0.0.tgz#62fb62880330c83ecf0194ef91ec8302709f9c55" - integrity sha512-unv4RmDCXsWCW+ieL8je3X6sJValYQNVoHNWA1/RD6mOydh4G9sDmCZ6WM1DboG1OHnMr6pzz0HmA/jvA/JO1w== +"@jupyterlab/codeeditor@^1.1.0-alpha.1", "@jupyterlab/codeeditor@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/codeeditor/-/codeeditor-1.1.0-alpha.1.tgz#d706c67f8f9091e5b69cf0abaacdc9934b33d7b8" + integrity sha512-c69I4J+J1sMQjpZ38znfcTfRsuFxqycUMxutY1wUCCGPh4psz9UCRJMYrrE25nxmN5PLuis4uEJ+PYT8ypZFHw== dependencies: - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" "@phosphor/dragdrop" "^1.3.3" @@ -184,32 +184,32 @@ "@phosphor/signaling" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/codemirror-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror-extension/-/codemirror-extension-1.0.2.tgz#7f2679701154935232aab9204426d9819d4c04ec" - integrity sha512-dru/xli3GTvxp4qL78DNyeE48osBzEvqekxWIcAkejZ8IOVSIcnNEl5CQQzh9NwFfPQPfidiJiTrA3ZqxFziqw== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/codemirror" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/fileeditor" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/codemirror-extension@^1.1.0-alpha.1", "@jupyterlab/codemirror-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror-extension/-/codemirror-extension-1.1.0-alpha.1.tgz#66e21d784f26c56da035133777f9efa5c116460b" + integrity sha512-t7uAn0aOvr3huPlEI1cx4vM5jIseRG8KF6lKdUiOa/X18PAhK9OmEwgtwW9U8n+7Ulfe1MVKaTUe4kyTU2kgNg== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/codemirror" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/fileeditor" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/widgets" "^1.8.0" codemirror "~5.47.0" -"@jupyterlab/codemirror@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-1.0.2.tgz#a72d23b881e9ee4a507ded17e23320d4fd05942b" - integrity sha512-Hkmu7GVb4ke+DRAJpKQac78JjoizoblLicYAr5j1wa5ASxP4EiR+FNdQV61heD2U7ES0rSA9HmlHVFMQgldzCA== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/codemirror@^1.1.0-alpha.1", "@jupyterlab/codemirror@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/codemirror/-/codemirror-1.1.0-alpha.1.tgz#e530c00e0cfc05338291a5dd8bd66aed9158fa9b" + integrity sha512-YTMPiCVpyVfiyRTix06v62eZNpKpo0HY97po9tntOEVZVD98iR6FZewheZMcIhs1VUXKGQJ6lHG5s7jo2LnAJw== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" @@ -219,29 +219,29 @@ codemirror "~5.47.0" react "~16.8.4" -"@jupyterlab/completer-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/completer-extension/-/completer-extension-1.0.2.tgz#7404736628f44c4ddabd17d62d1c719fdf663a84" - integrity sha512-xbd2Fx0ItVhpIiEOKc6PZylmMivIxGzfgFHLeONkHZfh5FaPtrBrID/h241UKQ2AVgBIAHdotX5SPcfQFnzqCw== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/completer" "^1.0.2" - "@jupyterlab/console" "^1.0.2" - "@jupyterlab/fileeditor" "^1.0.2" - "@jupyterlab/notebook" "^1.0.2" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/completer-extension@^1.1.0-alpha.1", "@jupyterlab/completer-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/completer-extension/-/completer-extension-1.1.0-alpha.1.tgz#409101d5d0e1d0e645fceef2efd2daf6315ac647" + integrity sha512-w3OefvS2FeBHWx8WSUMIVdPS4NRgSm8havWcp74uf2EI6P9U8w8Nn3CAgUIvm1q4xOAEGfsBDWaSNFWpbT5+TQ== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/completer" "^1.1.0-alpha.1" + "@jupyterlab/console" "^1.1.0-alpha.1" + "@jupyterlab/fileeditor" "^1.1.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/completer@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/completer/-/completer-1.0.2.tgz#0b8d07c54c1db2d29b27da84cafff33786cfddaa" - integrity sha512-63u1WKqlLvTdTdIdjJO+PCoII2yWMIYjop2iQQqYiRD5lFr366gvQAqq2UuJFaWTaaFDz0bFQsOI3zMVzpVjhA== +"@jupyterlab/completer@^1.1.0-alpha.1", "@jupyterlab/completer@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/completer/-/completer-1.1.0-alpha.1.tgz#5aaec325e7ff0d9703624d1c310a02bfbe1ad0d7" + integrity sha512-mjmghRz2qWHx4BvFW86ysBC76BEH3Xf0jbzf1bCag2Qje9UiFH//mt02v7IDSu03fen+rrPLm8fZsdc/1bg2ow== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/services" "^4.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" @@ -250,38 +250,38 @@ "@phosphor/signaling" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/console-extension@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/console-extension/-/console-extension-1.0.3.tgz#6d9a3c43a3498a8c3d14d327ecb8f3eeec034bc2" - integrity sha512-j/rbbgS0jb+QlyfINT+apJm+iGaq5GE2T7vly9PuB4IiVf6u0tSGnK1Yqck/RZMzlLnNyhTiI1nYnoykjRDrZg== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/console" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/filebrowser" "^1.0.3" - "@jupyterlab/launcher" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" +"@jupyterlab/console-extension@^1.1.0-alpha.1", "@jupyterlab/console-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/console-extension/-/console-extension-1.1.0-alpha.1.tgz#ba24cfacc6920023c3cdb78a93af427b648210b7" + integrity sha512-/Y1dAw71p8yon7VXCEEcf/r1hp2Z60XvMdugeafEaXbUHMzcz4WtLMRGUnhaHOHK66ylCQh7kAfl/TmjTrfxhA== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/console" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/filebrowser" "^1.1.0-alpha.1" + "@jupyterlab/launcher" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" "@phosphor/properties" "^1.1.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/console@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/console/-/console-1.0.2.tgz#a8b6d09e85ddc84481c24ea80e5adcfd75d689ff" - integrity sha512-YcArxobyD6YBkI17GtvYFVb17gRxXRWTtL9Vqg5FOHIWZH+Cahb0VmWLA6iNE2t0ekiV/k1ubjNk8TYZ4pPOlA== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/cells" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/console@^1.1.0-alpha.1", "@jupyterlab/console@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/console/-/console-1.1.0-alpha.1.tgz#91a2f0ac9bd321ca0ee891ce603dd0f63206089f" + integrity sha512-Z8yxn8VhXWF6+V0kPslclgIBWGMjt2ZglyAyny2y6qsQCqulsL81tW/RNwdL3DUpLzyFMZY3NjHb77qdVQbjWg== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/cells" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" @@ -290,10 +290,10 @@ "@phosphor/signaling" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/coreutils@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-3.0.0.tgz#b636e2d478d7098ff12439de3cf4312edd945c09" - integrity sha512-l48G1qhff4CZpsxjje92S6caLUixzfDMAD5vjNZL9obexUAMF+344cpVWsm2r2CQROUW7bPB8wjAtFbp8nK/QQ== +"@jupyterlab/coreutils@^3.1.0-alpha.1", "@jupyterlab/coreutils@~3.1.0-alpha.1": + version "3.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/coreutils/-/coreutils-3.1.0-alpha.1.tgz#5b083e96af52f7d2a0690043c4642bdbd07b6aef" + integrity sha512-uJVRx+tSFh3oRSXD4l0KHELyDGaPyMhTJDsBfbTcbYpjSwxJU0EqcDADdXz5Z52mBJPF2ufH2y+HIrYsRgS7Vw== dependencies: "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" @@ -307,29 +307,29 @@ path-posix "~1.0.0" url-parse "~1.4.3" -"@jupyterlab/csvviewer-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/csvviewer-extension/-/csvviewer-extension-1.0.2.tgz#570ed92f4eebad88be603b59e2156bb429a211ee" - integrity sha512-35lQ/FTDT+ozrhhAbDuXkC0qCVz5uHl3aZDGvFYYgzNx6MvSgRMJjWj2plU853HfZj6GJVoPpeNkHAwxOYse2g== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/csvviewer" "^1.0.2" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/documentsearch" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" +"@jupyterlab/csvviewer-extension@^1.1.0-alpha.1", "@jupyterlab/csvviewer-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/csvviewer-extension/-/csvviewer-extension-1.1.0-alpha.1.tgz#c9e80b54615b98e5ba75074ec0d5700443828787" + integrity sha512-Y/+qrRtdFaBCj+xtquCoedZ/J3ZfXZpOVfLiCHCTKz91j1UamlTGQ5zUZ75/W5mUHrDUwqNTBWVM8aYmDWBROw== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/csvviewer" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/documentsearch" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" "@phosphor/datagrid" "^0.1.9" "@phosphor/signaling" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/csvviewer@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/csvviewer/-/csvviewer-1.0.2.tgz#9948bdb090a6c8507a911ca905756dc5bbc66e94" - integrity sha512-MS3IZKmW/Frm8JzaXmoREYegKF/2NrBlue+7lw1FA82YpMq6XhgCTnbVySjgSD+bFlDuUNFMNHo60sb15TY/tw== +"@jupyterlab/csvviewer@^1.1.0-alpha.1", "@jupyterlab/csvviewer@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/csvviewer/-/csvviewer-1.1.0-alpha.1.tgz#19d3c6d5a32546aa5731b72139098352c182251e" + integrity sha512-LYL3kFuF7K0wbKGtRXlPT65qS+Cu/BrgR9LAuGcgvCmMMw0Jj4ik/cvtFUkKSPKJkcmDBdOC75xq99wPDM4bMw== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/datagrid" "^0.1.9" @@ -338,33 +338,33 @@ "@phosphor/signaling" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/docmanager-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/docmanager-extension/-/docmanager-extension-1.0.2.tgz#c020fd0cfbed4373345a573c1efd2addfc366a03" - integrity sha512-WfmktjxpfP1IPF233OJAcyf6+Tam2b3XROVYYcTzRED7HLS1DFsmXbazFSN03wh/AdsoAxByS919BKcyAc/tkA== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docmanager" "^1.0.2" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/docmanager-extension@^1.1.0-alpha.1", "@jupyterlab/docmanager-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/docmanager-extension/-/docmanager-extension-1.1.0-alpha.1.tgz#058a520418e63cd7c1c67a86e109566bce8daa0f" + integrity sha512-FAwIOqjinpqmRcHH3hfRSF22vSKIIgkpDsm2/SsneabPXhenXJgXT+MHNA/BizXmn3Hm8mfO49wyPc+ltLO8qg== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docmanager" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/disposable" "^1.2.0" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/docmanager@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/docmanager/-/docmanager-1.0.2.tgz#02e27c8f0d5ef1597d9cd144679037c83ee07a35" - integrity sha512-Nc4v7Xn7eUjJpU0Vw/ezvGyKkvbXuEfL1go7QW9UFX4HfcEfelXIaT69EzoTYW6mVCZp2Z1UTYXM9YnaMHkQMg== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/docmanager@^1.1.0-alpha.1", "@jupyterlab/docmanager@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/docmanager/-/docmanager-1.1.0-alpha.1.tgz#4f7d838cf5f883887eb8b9a730330fc7dbe9f95a" + integrity sha512-ZzXXW2iLvUN/EEpe2W0TJZ2ZMhXzufGQJqXRTvYYHt1BtAnh5On8U2Ou2Y1/Kuk5iYdlIwhkLxUhkrPkStMkpw== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" @@ -374,19 +374,19 @@ "@phosphor/widgets" "^1.8.0" react "~16.8.4" -"@jupyterlab/docregistry@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-1.0.2.tgz#fbaeaf16dbae2740a7059a8adf056cbb362c8832" - integrity sha512-d6Z2IOe+48NheTpve2pAI6PfKN8VDx/NChhGE5V0YdQTHyNFea8GMRF9wHyP1o5NPuj3fx00gP73O6gfAwzqoA== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/codemirror" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/rendermime-interfaces" "^1.3.0" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/docregistry@^1.1.0-alpha.1", "@jupyterlab/docregistry@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/docregistry/-/docregistry-1.1.0-alpha.1.tgz#ff1a3d5b22364bb346045e2d0bbf3a4d529aaebb" + integrity sha512-zqKb8s4XMQ05i48tqBQLgxggYwGUvWP/0bthnft2MMvNCP/azUMyrwX9yAZDmx3akrRnGIBMwLlujwcYW2LiJw== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/codemirror" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" @@ -394,29 +394,29 @@ "@phosphor/signaling" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/documentsearch-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/documentsearch-extension/-/documentsearch-extension-1.0.2.tgz#2c173c076c8b50a03684498b24c3ec51712e5308" - integrity sha512-WjGdlNPO3CjewMvvEZ89L4yeH8gH9nfA3pziD9v6nlNduoji+/ox6pFOpSGXw3zZTuRV+gkUfGk94ZGPS+KwXg== +"@jupyterlab/documentsearch-extension@^1.1.0-alpha.1", "@jupyterlab/documentsearch-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/documentsearch-extension/-/documentsearch-extension-1.1.0-alpha.1.tgz#f0b753e315e679d0498b6b3caddb695416ecf1ef" + integrity sha512-UIvFDE9s2mXXkOaCu0fLUujA5e+Skt1l91IwKzYK4RohNbd95G9ceev2poWACCFyeUIFiYtnYj9TMj/W8vA5MA== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/documentsearch" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/documentsearch" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/documentsearch@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/documentsearch/-/documentsearch-1.0.2.tgz#be42fca05ebaeee59a8ca69ec222775dd36eee3c" - integrity sha512-Un/lQbOzU7sBKQrKAaZFPtHlOgTBwlTics0pfc47UcYKSjpWVH1o5D5ChWrPILe/g8tug6e88gjDQ7AK3SKu3A== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/cells" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/codemirror" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/fileeditor" "^1.0.2" - "@jupyterlab/notebook" "^1.0.2" +"@jupyterlab/documentsearch@^1.1.0-alpha.1", "@jupyterlab/documentsearch@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/documentsearch/-/documentsearch-1.1.0-alpha.1.tgz#d163c5772949e41af25664c420be770fd5a21e22" + integrity sha512-qUIPDqm8NLJmrtyVSCmu5S1hZwsKBcxRX6op+qo/PE2Kf4iIPhQ1qQtiyLguaUgylMIiTjlTtGYTH+Yy8i6m7Q== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/cells" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/codemirror" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/fileeditor" "^1.1.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" "@phosphor/signaling" "^1.2.3" @@ -424,60 +424,60 @@ codemirror "~5.47.0" react "~16.8.4" -"@jupyterlab/extensionmanager-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/extensionmanager-extension/-/extensionmanager-extension-1.0.2.tgz#79008a3e1bcb98b7552b33b0cea2e61f33e17cfd" - integrity sha512-LTbLOetXdOvOZhhHIh3T7fudABUBvXvY9bQKKoVOkiu9KlryWwrC6/znG1DoyHXkX+Ca/rvfYvsMkgcr6hHN6g== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/extensionmanager" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - -"@jupyterlab/extensionmanager@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/extensionmanager/-/extensionmanager-1.0.2.tgz#dd3b489f74b1512da65df42eff98efb38d70e448" - integrity sha512-VOKhHQcEblcol/U90foAa514VAJZ5e7llt/TFOCqgtsK7bQOVVJ8TDKUH2Yu6wgwpcR/H8DmTehn5aqLuW/9Vw== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/ui-components" "^1.0.0" +"@jupyterlab/extensionmanager-extension@^1.1.0-alpha.1", "@jupyterlab/extensionmanager-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/extensionmanager-extension/-/extensionmanager-extension-1.1.0-alpha.1.tgz#27701ab46ec5bb022170ec6048dae65e57469921" + integrity sha512-K65vNO1EmQHk+bIsNvgcERgFmMZ9rNvI9u07JhhCeO2IWJjyfvN7x35aoFGxpRGsR4YPz4RZGPwzrmQwhuGopQ== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/extensionmanager" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + +"@jupyterlab/extensionmanager@^1.1.0-alpha.1", "@jupyterlab/extensionmanager@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/extensionmanager/-/extensionmanager-1.1.0-alpha.1.tgz#bc1d1441704a199c3d30df4448d4d964adfc448e" + integrity sha512-WPz//UAKB5F2Q7QVwu8R0bkKjXutCyHEouiPjkfVm0jLPTBVz68YFo9yS1Z4ErwZqy78aiQXLDJaTH8va6wvPQ== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/ui-components" "^1.1.0-alpha.1" "@phosphor/messaging" "^1.2.3" react "~16.8.4" react-paginate "^6.3.0" semver "^6.1.0" -"@jupyterlab/filebrowser-extension@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@jupyterlab/filebrowser-extension/-/filebrowser-extension-1.0.4.tgz#cb63c188fb9e843f6313103a8f3afd0a6a88e8ed" - integrity sha512-MTKKQH3+cZt5vSbymsA7UDNc1Pu94Eorx6gRyGTcLby0hJxWNOtG3wLBIdxOnb28xJkZU0oiAOJhufsD0h5pBQ== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docmanager" "^1.0.2" - "@jupyterlab/filebrowser" "^1.0.3" - "@jupyterlab/launcher" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/filebrowser-extension@^1.1.0-alpha.1", "@jupyterlab/filebrowser-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/filebrowser-extension/-/filebrowser-extension-1.1.0-alpha.1.tgz#3e854d8b76fed14b8401bfcd7bdd068b7d614cbb" + integrity sha512-8cTZSldGyhgiBrgMLCxpvxM7qi9T6A+6Tb9JBFfYpl5Rz1qD60H4tiwRx44KkS19nVUHq3l4MpVtEDAUDzJx/Q== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docmanager" "^1.1.0-alpha.1" + "@jupyterlab/filebrowser" "^1.1.0-alpha.1" + "@jupyterlab/launcher" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/commands" "^1.6.3" "@phosphor/messaging" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/filebrowser@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/filebrowser/-/filebrowser-1.0.3.tgz#9fe887372d4f0488fadd30fa18ea6e00096758fb" - integrity sha512-i55vRjA8NZzRy/IHJrtYh6xjOnHj62xEhHp7OU/FqYjvyQ5B1wXQpTag8nkpxLKKQzuCLxqLO8Q+RZ273LS2mA== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docmanager" "^1.0.2" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/filebrowser@^1.1.0-alpha.1", "@jupyterlab/filebrowser@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/filebrowser/-/filebrowser-1.1.0-alpha.1.tgz#d60b8912f97c5d35e88e270c734c975f01b79b5d" + integrity sha512-3o+o4Py0vhiSfKy6xobtp5JwitkNBpAabOUj3cqEUVgYkpxnHKlQMN0JXsBxFnwjTBtODKAqR7cY6yY7HojRdA== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docmanager" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" @@ -488,151 +488,151 @@ "@phosphor/widgets" "^1.8.0" react "~16.8.4" -"@jupyterlab/fileeditor-extension@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/fileeditor-extension/-/fileeditor-extension-1.0.3.tgz#50b3cababa9e0d314330719ea3f13368d0e48650" - integrity sha512-QaZhBSmofrowvxgWNt/q+pBN1y8OiXSQbdKI1Wn4+mJbVS26a8VMgT/1s3B0T+T2SGtbsdoJRQ06JHo2TTidbQ== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/console" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/filebrowser" "^1.0.3" - "@jupyterlab/fileeditor" "^1.0.2" - "@jupyterlab/launcher" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/fileeditor-extension@^1.1.0-alpha.1", "@jupyterlab/fileeditor-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/fileeditor-extension/-/fileeditor-extension-1.1.0-alpha.1.tgz#4be059f88ec19a3265c232c6a26898971fa29501" + integrity sha512-skwhvHvnveiGBuhlW8i2ICBDF1R2iEU3JsUOoVO6ii/E2y4GUeakmBoIxxV3s6WTWOJVmr7RRFwLpHUCXTB6Sw== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/console" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/filebrowser" "^1.1.0-alpha.1" + "@jupyterlab/fileeditor" "^1.1.0-alpha.1" + "@jupyterlab/launcher" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/fileeditor@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/fileeditor/-/fileeditor-1.0.2.tgz#e0c67241efa2e2dee4866a75fdaf4eb280eb8405" - integrity sha512-6E+hQtepS61ePH9kDZS8UvGSjcXcVCOdNVbcTMb0M0fAKqjaeIe84H27TkZ9WzIawO+G8FfuuD/DYHRUz5OEgQ== +"@jupyterlab/fileeditor@^1.1.0-alpha.1", "@jupyterlab/fileeditor@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/fileeditor/-/fileeditor-1.1.0-alpha.1.tgz#5c89e907e08faab75f8134363daf2f597a26e317" + integrity sha512-vxkinQy4xIMCeYURonXKaCme0qMgn2jrZZk0PJIvmXah4UES063I0qVuDPbuM6XdoWTpgdWwqf4EwBfX2HN3sw== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/statusbar" "^1.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" "@phosphor/widgets" "^1.8.0" react "~16.8.4" -"@jupyterlab/help-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/help-extension/-/help-extension-1.0.2.tgz#9334d6d66c48beb029e831fc8fde2f29ef2a6ea0" - integrity sha512-4kIflYdwBshbgn6GPZO6V0FKrIS+UeZ7n8HMX1Yu+ta5NKgFcA3de6tQsKEXCcqTcz/I/cdNa7NAzc/5z17dRw== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/inspector" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/help-extension@^1.1.0-alpha.1", "@jupyterlab/help-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/help-extension/-/help-extension-1.1.0-alpha.1.tgz#c57b2ddf30164eb9d6a9fc5400cf77ac0a91cff1" + integrity sha512-X66qNqvoWaJw2OSLOv6vg0lZl9rRvFZjtgtzQx5euVIB0Zba19w5BT7O8BprLWnHh8QBs4lS/CjBI0rjGT6qQg== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/inspector" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/widgets" "^1.8.0" react "~16.8.4" -"@jupyterlab/htmlviewer-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/htmlviewer-extension/-/htmlviewer-extension-1.0.2.tgz#737b561a1b87e930a1e1b70eeb08966b17ab02c7" - integrity sha512-hd9MDsL1lZjR5arQafxl4zTSv7PkIFtgZ/L8+pR1UQavH6dURcHEM5ssV2lIm1qzFVa/kEKh9efXww7CUy3ucw== +"@jupyterlab/htmlviewer-extension@^1.1.0-alpha.1", "@jupyterlab/htmlviewer-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/htmlviewer-extension/-/htmlviewer-extension-1.1.0-alpha.1.tgz#6880cc628668e4793da0d3c37959df76d8ee8117" + integrity sha512-+7Ly02XrOiTo8BrFNvlyyjP5aJp2aAVUJfasvaKM7ajsXO4qUt8QGcY0+gUuCA0YwJu1lyzWEcryzIecAPGE/Q== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/htmlviewer" "^1.0.2" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/htmlviewer" "^1.1.0-alpha.1" -"@jupyterlab/htmlviewer@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/htmlviewer/-/htmlviewer-1.0.2.tgz#76c46a5b6df5e24123e9f18ec74d5f0aaee42d67" - integrity sha512-lqpx0N2iwMkbSCAQDgA8R8cZyE0DHOMD/CbAzL91OUYkbgqlkzdF3oNLoZs/5iuld1W7JJP5yFyWeCiUguuxag== +"@jupyterlab/htmlviewer@^1.1.0-alpha.1", "@jupyterlab/htmlviewer@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/htmlviewer/-/htmlviewer-1.1.0-alpha.1.tgz#11b0e2b4c35a8c832a3872fb0643e5e800015a1d" + integrity sha512-PpX1BcEo40v8GmiHqAimrMESSPL1wYANkYfSXaTeEOp6ySunY/lakFQl3yjvRxz8OxDcnywykjxRyl4CHNrXbg== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/signaling" "^1.2.3" react "~16.8.4" -"@jupyterlab/hub-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/hub-extension/-/hub-extension-1.0.2.tgz#2b8547faee15334f6d8b9fb08d74d480644b3d18" - integrity sha512-abFQJYMa9DEFl5XbrVfojQPmaa2cTtp8xuN7Y+6tK6kehDoNbDjNsnCdRVuF7xBfCYVDS1lqlnGNFIaBbENLxA== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - -"@jupyterlab/imageviewer-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/imageviewer-extension/-/imageviewer-extension-1.0.2.tgz#36f0af0cc6265ce13bb59f1589634bb48f60fcf4" - integrity sha512-vVB/5g0wdaJBsuGZNGtw/5Q4T5Od3cYUhD+m+EUnsYZRLlEO4r0/407U0Ix6q8U3IgrKdgK6kfT3xcKhbyquDw== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/imageviewer" "^1.0.2" - -"@jupyterlab/imageviewer@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/imageviewer/-/imageviewer-1.0.2.tgz#65c79f19e963f4a32880e29c96d42f0534bc5ff9" - integrity sha512-28f6WgaSBeMOKyAtbHAHKPSbkKjNf/QOdmcCutuSnGIIL+r4ZkSKZY1uHxIhGNMGaj8DjNiK6VaQ4ZErEVYokQ== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" +"@jupyterlab/hub-extension@^1.1.0-alpha.1", "@jupyterlab/hub-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/hub-extension/-/hub-extension-1.1.0-alpha.1.tgz#58bca42efe77b87b4116f91936692f8bb873072e" + integrity sha512-NttLiIgvlBLMdl/5BYuXDo3ryRMPX883sfs9dAlyye8p1nl0pg+PsJ3hLz8iVm8h3IDgGLrVZ96XiQDkBg/LMQ== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + +"@jupyterlab/imageviewer-extension@^1.1.0-alpha.1", "@jupyterlab/imageviewer-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/imageviewer-extension/-/imageviewer-extension-1.1.0-alpha.1.tgz#854bba504236b2e7ce848e977f134f394ae0768e" + integrity sha512-fFR86eXDN2RKdTqBx/KVdsFS5r78/aZXPEV+Jz6WJ7hiMseqQiT3WF+uxLrmS4J06pePuZhnPQfCfaUPQDKn7A== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/imageviewer" "^1.1.0-alpha.1" + +"@jupyterlab/imageviewer@^1.1.0-alpha.1", "@jupyterlab/imageviewer@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/imageviewer/-/imageviewer-1.1.0-alpha.1.tgz#5720a056a80707184d2001a998f034a900bed404" + integrity sha512-jIiP7wuv2PNQ+rNkfuEvBBZ2gHPEBoQ5i2Qtd0/8tbvup5CZ3DwIIUz5jeR/JPtYT9tMQEozKOoxml7FFhk5aw== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/inspector-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/inspector-extension/-/inspector-extension-1.0.2.tgz#c7c25c9525d848e763174ff7d87112687169ba25" - integrity sha512-QiWxiqFTJCdP4uaTSpa5fIQPhLefP7jIW4HrY9VVufZbbEPQLTjmBJO82WMZOz9HNgPKWq4qztjxuyY75+q8ng== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/console" "^1.0.2" - "@jupyterlab/inspector" "^1.0.2" - "@jupyterlab/launcher" "^1.0.2" - "@jupyterlab/notebook" "^1.0.2" - -"@jupyterlab/inspector@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/inspector/-/inspector-1.0.2.tgz#e4f051c788b580900c4c431316300b70f7636523" - integrity sha512-+w0BSIj8o9a07CTh1vh4GHx2gWjPbeV29Oz3XXA6UUE6tXS/mOqBHrqG6xq2oa7I3Q+hvxkHSH1CKJNlwSJvXA== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/inspector-extension@^1.1.0-alpha.1", "@jupyterlab/inspector-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/inspector-extension/-/inspector-extension-1.1.0-alpha.1.tgz#039f3e39c01db0b73fa80c90bb06f5c3296ac81c" + integrity sha512-cPdH+eDiG4mC1QZVaUQd3B56nC7ft4q3APZQHqhjD0cnnYJr0pasdsKSF3/lLX0vc3rBEPiGJpHfSj1S7rEL5A== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/console" "^1.1.0-alpha.1" + "@jupyterlab/inspector" "^1.1.0-alpha.1" + "@jupyterlab/launcher" "^1.1.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" + +"@jupyterlab/inspector@^1.1.0-alpha.1", "@jupyterlab/inspector@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/inspector/-/inspector-1.1.0-alpha.1.tgz#8ef0923a40e1b1173709eadb9d9c8a1297053d3f" + integrity sha512-9mxubqL84TddWxCWPkoS9W7C4BLxjfMEDS7txhja/hQ9cA2cnbdExPOgTmBTBxMQQ7u3/wW6wfaJDG/xVw9wqQ== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" "@phosphor/signaling" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/javascript-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/javascript-extension/-/javascript-extension-1.0.2.tgz#5c97a458528dc49a2a8777307a97bc55fc9580c9" - integrity sha512-OiNJa4PoZTBRp5CqoM0huSraRd4gTe/xdmVa8rdq7V/YzUF1fsbH55/qDxz6V4Lkx6i9wTuGq2giVvozpXLVIA== +"@jupyterlab/javascript-extension@^1.1.0-alpha.1", "@jupyterlab/javascript-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/javascript-extension/-/javascript-extension-1.1.0-alpha.1.tgz#cae54b72063bfeb7759dded22840ddd49f092b2d" + integrity sha512-9EltEbKV7IPd4nY4WLy/7xLWD3zyW9K/ZseiZyWZacIIUeGwnJgSPZy/kvMv4oMZd+F2eFFdNCgURbKwrJTxGA== dependencies: - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/rendermime-interfaces" "^1.3.0" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" -"@jupyterlab/json-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/json-extension/-/json-extension-1.0.2.tgz#efe8a3f68c0a4477d94c38fd00a8543eb7a7fced" - integrity sha512-4ipkKcVqwIz3x0luBDyUpke1qk93fLnayH0Oej4zMFyAxB8BhT3wjHmfB1EwciOFKirrjJpiRLFKaICr9WHHtQ== +"@jupyterlab/json-extension@^1.1.0-alpha.1", "@jupyterlab/json-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/json-extension/-/json-extension-1.1.0-alpha.1.tgz#a952395bfafd3fe8e3c7fc4ea296bc210a1eb2a6" + integrity sha512-MCnLG6mxdgNhSBRsKw0VtFbdAq340NZ9ySdUI/0JjoxPQ/hLwD3xviXA7P0i/5+NIXxWrB7T86DuFa91O9VZ1w== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/rendermime-interfaces" "^1.3.0" - "@jupyterlab/ui-components" "^1.0.0" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" + "@jupyterlab/ui-components" "^1.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" "@phosphor/widgets" "^1.8.0" @@ -641,24 +641,24 @@ react-highlighter "^0.4.0" react-json-tree "^0.11.0" -"@jupyterlab/launcher-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/launcher-extension/-/launcher-extension-1.0.2.tgz#2790d7814282f70853a6773207472db37c11c242" - integrity sha512-aCeLAOH8nPv1PPU6LETncaN0taQoikudY/N6b4oobTzO0Tj5TVcF7NuIbD1YGKAXzJ0pr6twYsTLZEMYbxNqdw== +"@jupyterlab/launcher-extension@^1.1.0-alpha.1", "@jupyterlab/launcher-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/launcher-extension/-/launcher-extension-1.1.0-alpha.1.tgz#0f1c0c2681950cc4fead30761dcbec9a41a9b76c" + integrity sha512-q2JXk/aLXvFHzYzkEzmd8YQS8Iu39+TA9GpwQm464qCV6FgUftx/BM1skGvTSNoe64ZAfKO3g07GfaNnSErJKQ== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/launcher" "^1.0.2" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/launcher" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/launcher@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/launcher/-/launcher-1.0.2.tgz#80ca71bac5edb322fadc2d9ac0f648fb92c62dbd" - integrity sha512-mQxCkNrPrdjX4/ySzhf0t7FZck3I7VC1Y9mIQyjNTq6COYZWxPxh4oPhedrQHvPf6rMYEEqxE3VqUnxsyOlZRQ== +"@jupyterlab/launcher@^1.1.0-alpha.1", "@jupyterlab/launcher@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/launcher/-/launcher-1.1.0-alpha.1.tgz#278b5111d5bd726d2c01a56852e3f6a81c2c011c" + integrity sha512-BMiXWeuHBv+YwGaLaQq9p8iTkPiLXL6NIlESejxO2QvJK1DT3FQ4+0rtHZxc4GczlrX2Ok3PDVAX9tcZCHglbg== dependencies: - "@jupyterlab/apputils" "^1.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" @@ -667,93 +667,185 @@ "@phosphor/widgets" "^1.8.0" react "~16.8.4" -"@jupyterlab/mainmenu-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/mainmenu-extension/-/mainmenu-extension-1.0.2.tgz#e4ef76e65df03e49e00289039c3d63cd7f7dd2cc" - integrity sha512-ZzTuIutmvNvXbqtedHhqUYj5LXl9bJ2eoPAlu0GzGw22AXcEKppRYFtIEq28LrWqRJenvdZ8fxqtu7arKgxWyw== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/mainmenu-extension@^1.1.0-alpha.1", "@jupyterlab/mainmenu-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/mainmenu-extension/-/mainmenu-extension-1.1.0-alpha.1.tgz#6b663780666eb2b489d6748ce7e2055e2c33a19c" + integrity sha512-05pkQsYX6Sj4sc8XtXvu01MbL0tzjjfaeUiZlEwVj6wZb+H4bt5DPKsBrjxNWMcB4trA9Lwfqkb/IOYpxO3t4Q== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/disposable" "^1.2.0" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/mainmenu@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/mainmenu/-/mainmenu-1.0.2.tgz#990ba4ff5832c762b23f8df355b2dd20dbbfd92f" - integrity sha512-jI3s4SP4ZWy0eFILyM+hThYD5OzB45U3iaWv5HJRJWcOPDu+nbtWY6ms0IVMdJ0dq/blfZXwNVoCFzcIJ8joag== +"@jupyterlab/mainmenu@^1.1.0-alpha.1", "@jupyterlab/mainmenu@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/mainmenu/-/mainmenu-1.1.0-alpha.1.tgz#35ead6d892c9d52804cda1c65101a1fa50b8dcf2" + integrity sha512-HBRNguyY6rt9/JCOiulH9Sv6N0AnOXmMf6zZwYbfRI1zN8tTGC14OL4pU7tEr0Oq5+zmT8U+GwiK8DqNQqxjxA== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/services" "^4.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/markdownviewer-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/markdownviewer-extension/-/markdownviewer-extension-1.0.2.tgz#aaff8ddb91ac534f732a8b74545772efe700782f" - integrity sha512-5hLR1xqgfe1I+/R5AjiWmQ4rSA7MOFKH6B6BdzjneSTY2U6EWTC2YH9HpTw7Wrd/4ZJdsPdGNkza/LFOSVwqPw== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/markdownviewer" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" - -"@jupyterlab/markdownviewer@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/markdownviewer/-/markdownviewer-1.0.2.tgz#caf81799b859064c97b6e39a6b21aca184b2a5bd" - integrity sha512-wDEEdcYBk3l8FtbgN2YymAmCCRHtR1DjDzYZOs3LtrUDiYlEOQaMogmtT0J4ZgMlK2I2mmPbv0kf1fFCeMfmCg== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" +"@jupyterlab/markdownviewer-extension@^1.1.0-alpha.1", "@jupyterlab/markdownviewer-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/markdownviewer-extension/-/markdownviewer-extension-1.1.0-alpha.1.tgz#733099d78dfd496b3a862c11decd7def84391934" + integrity sha512-TOPDkALo3iyfGfxg5IKfheAZJOSdaGM0JVX1lMCgLpuyJdBk61RrmZrI4+2aIpIYEAtHHvrrBmXpE2XVu7lwpw== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/markdownviewer" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + +"@jupyterlab/markdownviewer@^1.1.0-alpha.1", "@jupyterlab/markdownviewer@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/markdownviewer/-/markdownviewer-1.1.0-alpha.1.tgz#865c611f47ddd3aded8c4ad8578ad3552a68eda9" + integrity sha512-Y6u1389hXGXrUUTmL778/ieLebh8Yz9NHMmF0/3fJ5iG/9lE23XFG3uMjJmsHovpC8vQ+H/UKgbX/z6hI8Wt2w== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/mathjax2-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/mathjax2-extension/-/mathjax2-extension-1.0.2.tgz#fd7e810510503bf646310d24e9bdddb9f3115538" - integrity sha512-R8gTunmtKKXEElfgTmLCEMCJmnV8LllCLNu9V+LrTpuz0XGk5TOiPs9cTY+9JeaVtNJkvzda1UJ4xGY3yrOLhQ== +"@jupyterlab/mathjax2-extension@^1.1.0-alpha.1", "@jupyterlab/mathjax2-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/mathjax2-extension/-/mathjax2-extension-1.1.0-alpha.1.tgz#50b054e19e860eaf6d61b3edfcd7734386ddea2a" + integrity sha512-KTnAKyc00bUIVEKlNIvMUuKkSyYMDoZip+Za4KNr21sxKitOi3l5amKS2WEF+gh2I5FM2tIGmkVqiWtbefDbTA== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/mathjax2" "^1.0.0" - "@jupyterlab/rendermime" "^1.0.2" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/mathjax2" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" -"@jupyterlab/mathjax2@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@jupyterlab/mathjax2/-/mathjax2-1.0.0.tgz#00420ae35611e4540f3887d6aa273fe2acf2e5bb" - integrity sha512-1Er/K8v34+aL7f6moVomGIz6eUo/Cj80ijysbqYLiXW1yNK9zle8nzgYL3cx0JTvm7d1fcTqOnZiru/OVt66/g== +"@jupyterlab/mathjax2@^1.1.0-alpha.1", "@jupyterlab/mathjax2@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/mathjax2/-/mathjax2-1.1.0-alpha.1.tgz#480766d560535aa4220cacf4e70105e79c2e55e4" + integrity sha512-LF0bPlAQ7MSP2ik526cW30YBaR6Je1iaciqpZ/iVprcJ/I2a42q8OAxnnloZUoQdNiBVHfs7GAQqxPdjBuDimQ== dependencies: - "@jupyterlab/rendermime-interfaces" "^1.3.0" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" "@phosphor/coreutils" "^1.3.1" -"@jupyterlab/notebook-extension@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@jupyterlab/notebook-extension/-/notebook-extension-1.0.3.tgz#fe9935bab5f2f556dfddb5f8b29d1abda8c4b05c" - integrity sha512-RUzHA0W1lytqlNq/8LP1Cb35vz2DrKx5bgvLzjdGqoQc4oLFWw4tRpgmv0kWJEPAl/852/ig/3BSpRhSoA80ZQ== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/cells" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docmanager" "^1.0.2" - "@jupyterlab/filebrowser" "^1.0.3" - "@jupyterlab/launcher" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/notebook" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/metapackage@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/metapackage/-/metapackage-1.1.0-alpha.1.tgz#8a11b7687277e1ae8c7998ab18742d3cbff969aa" + integrity sha512-Ta4N/PZJjWm5IB9jBQ+hTGIXr7G197DBU1/wfXHB+w2qXmh8BFIRGCYrqnv9C05ZO5tlbpO+u7q3/eWEDFiW5Q== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/application-extension" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/apputils-extension" "^1.1.0-alpha.1" + "@jupyterlab/attachments" "^1.1.0-alpha.1" + "@jupyterlab/cells" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/codemirror" "^1.1.0-alpha.1" + "@jupyterlab/codemirror-extension" "^1.1.0-alpha.1" + "@jupyterlab/completer" "^1.1.0-alpha.1" + "@jupyterlab/completer-extension" "^1.1.0-alpha.1" + "@jupyterlab/console" "^1.1.0-alpha.1" + "@jupyterlab/console-extension" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/csvviewer" "^1.1.0-alpha.1" + "@jupyterlab/csvviewer-extension" "^1.1.0-alpha.1" + "@jupyterlab/docmanager" "^1.1.0-alpha.1" + "@jupyterlab/docmanager-extension" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/documentsearch" "^1.1.0-alpha.1" + "@jupyterlab/documentsearch-extension" "^1.1.0-alpha.1" + "@jupyterlab/extensionmanager" "^1.1.0-alpha.1" + "@jupyterlab/extensionmanager-extension" "^1.1.0-alpha.1" + "@jupyterlab/filebrowser" "^1.1.0-alpha.1" + "@jupyterlab/filebrowser-extension" "^1.1.0-alpha.1" + "@jupyterlab/fileeditor" "^1.1.0-alpha.1" + "@jupyterlab/fileeditor-extension" "^1.1.0-alpha.1" + "@jupyterlab/help-extension" "^1.1.0-alpha.1" + "@jupyterlab/htmlviewer" "^1.1.0-alpha.1" + "@jupyterlab/htmlviewer-extension" "^1.1.0-alpha.1" + "@jupyterlab/hub-extension" "^1.1.0-alpha.1" + "@jupyterlab/imageviewer" "^1.1.0-alpha.1" + "@jupyterlab/imageviewer-extension" "^1.1.0-alpha.1" + "@jupyterlab/inspector" "^1.1.0-alpha.1" + "@jupyterlab/inspector-extension" "^1.1.0-alpha.1" + "@jupyterlab/javascript-extension" "^1.1.0-alpha.1" + "@jupyterlab/json-extension" "^1.1.0-alpha.1" + "@jupyterlab/launcher" "^1.1.0-alpha.1" + "@jupyterlab/launcher-extension" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu-extension" "^1.1.0-alpha.1" + "@jupyterlab/markdownviewer" "^1.1.0-alpha.1" + "@jupyterlab/markdownviewer-extension" "^1.1.0-alpha.1" + "@jupyterlab/mathjax2" "^1.1.0-alpha.1" + "@jupyterlab/mathjax2-extension" "^1.1.0-alpha.1" + "@jupyterlab/nbconvert-css" "^0.2.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" + "@jupyterlab/notebook-extension" "^1.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/outputarea" "^1.1.0-alpha.1" + "@jupyterlab/pdf-extension" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-extension" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" + "@jupyterlab/running" "^1.1.0-alpha.1" + "@jupyterlab/running-extension" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/settingeditor" "^1.1.0-alpha.1" + "@jupyterlab/settingeditor-extension" "^1.1.0-alpha.1" + "@jupyterlab/shortcuts-extension" "^1.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" + "@jupyterlab/statusbar-extension" "^1.1.0-alpha.1" + "@jupyterlab/tabmanager-extension" "^1.1.0-alpha.1" + "@jupyterlab/terminal" "^1.1.0-alpha.1" + "@jupyterlab/terminal-extension" "^1.1.0-alpha.1" + "@jupyterlab/theme-dark-extension" "^1.1.0-alpha.1" + "@jupyterlab/theme-light-extension" "^1.1.0-alpha.1" + "@jupyterlab/tooltip" "^1.1.0-alpha.1" + "@jupyterlab/tooltip-extension" "^1.1.0-alpha.1" + "@jupyterlab/ui-components" "^1.1.0-alpha.1" + "@jupyterlab/vdom" "^1.1.0-alpha.1" + "@jupyterlab/vdom-extension" "^1.1.0-alpha.1" + "@jupyterlab/vega4-extension" "^1.1.0-alpha.1" + "@jupyterlab/vega5-extension" "^1.1.0-alpha.1" + +"@jupyterlab/nbconvert-css@^0.2.0-alpha.1", "@jupyterlab/nbconvert-css@~0.2.0-alpha.1": + version "0.2.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/nbconvert-css/-/nbconvert-css-0.2.0-alpha.1.tgz#b053ed50ab60c998454a4e60ca9bcff184bfb455" + integrity sha512-Kg5LgvmjfYgqic/CGH1KFIiimvrzLYynyiuXfu6WWOWfcuPhCnFt5Angm8ekABfJosYh5QyMnjnuZXKs+wvGog== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/cells" "^1.1.0-alpha.1" + "@jupyterlab/codemirror" "^1.1.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" + "@jupyterlab/outputarea" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + +"@jupyterlab/notebook-extension@^1.1.0-alpha.1", "@jupyterlab/notebook-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/notebook-extension/-/notebook-extension-1.1.0-alpha.1.tgz#9aa3c9974bb01c20628200fc4481f564a31201c6" + integrity sha512-uKBpWGn0TILAIMNPmNI+2CzgEGkspsCjsHxKlI6BWS0QsE2Ebda8jgqTKUAOf4coYeiICrBZ/MxzIJ6rERX8kQ== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/cells" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docmanager" "^1.1.0-alpha.1" + "@jupyterlab/filebrowser" "^1.1.0-alpha.1" + "@jupyterlab/launcher" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" @@ -761,21 +853,21 @@ "@phosphor/messaging" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/notebook@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/notebook/-/notebook-1.0.2.tgz#5f48bbac20f1c4de4f23d0961e72bd5f0ea6ac6b" - integrity sha512-s5hfNRUEuLoPsI5//8DSjJ4/cKKStn0/2i2WegQsX6SSYdj4yqxjwMdveGxK0ROcteVcmok3ECEg6rNDxkFiVw== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/cells" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/observables" "^2.2.0" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/statusbar" "^1.0.2" - "@jupyterlab/ui-components" "^1.0.0" +"@jupyterlab/notebook@^1.1.0-alpha.1", "@jupyterlab/notebook@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/notebook/-/notebook-1.1.0-alpha.1.tgz#08e9d520e8438060cd2d5deabb09ac68efcc1089" + integrity sha512-+mliO6uUqOrWiEzkch19G5EBhLb6zskp8P+24YjB+HZQE9sls1zM2awm8qIA4S9oBWjBTeJ7+lf3pEcQYcpnSA== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/cells" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" + "@jupyterlab/ui-components" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/domutils" "^1.1.3" @@ -787,10 +879,10 @@ "@phosphor/widgets" "^1.8.0" react "~16.8.4" -"@jupyterlab/observables@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-2.2.0.tgz#be29c6cadad88c202e7963ace2410bbe7b101226" - integrity sha512-/oi7vl70yAX5QTXmZafyDSwU8fT1Oa/MdpDDYGkc5IklW0kU3NDqSoawfLovkdgGZvCOCM+6JQqUPRdhn8VZqg== +"@jupyterlab/observables@^2.3.0-alpha.1", "@jupyterlab/observables@~2.3.0-alpha.1": + version "2.3.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/observables/-/observables-2.3.0-alpha.1.tgz#d1598f826fd876a0935c7d05cecae0955c25c0a0" + integrity sha512-qRvVB0Fk70akwlwTz0OfT1SLwQVwamFY+P1Y2A2ZD4oG70JT4Zam31vvKMsAXG27Kd2dbxafeKTl9XDwTIWqBQ== dependencies: "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" @@ -798,17 +890,17 @@ "@phosphor/messaging" "^1.2.3" "@phosphor/signaling" "^1.2.3" -"@jupyterlab/outputarea@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/outputarea/-/outputarea-1.0.2.tgz#8489c88670e0bcbf3ac1680206407c4f005aedad" - integrity sha512-W2LD/emLByNIJ7P1s1u6Xd+Pbq8MviipXAaeZEPF3/diQaCcKjCPZdiY56kXNCFxYupAZahIOA0QzMTLs23Zqg== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/rendermime-interfaces" "^1.3.0" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/outputarea@^1.1.0-alpha.1", "@jupyterlab/outputarea@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/outputarea/-/outputarea-1.1.0-alpha.1.tgz#3cb5140a38e349009ed39bd4f1ee8c8acb312eac" + integrity sha512-AwMEJLMYH+sYUOAa9+8pszKJ3Ln/nY3guao4tVPwe0q9Nj3O1B87HOmlPFJdBSH9BLUYk7mm++lvGXjiXQKy9w== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" @@ -817,44 +909,44 @@ "@phosphor/signaling" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/pdf-extension@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@jupyterlab/pdf-extension/-/pdf-extension-1.0.0.tgz#088e3d4ed9b34846f72e2e23d6df52a993c3c3fc" - integrity sha512-WV9jY5qb3IccZ/I8ofKQk7+P7HgVhG0Fr+oytOIS2MfV3YUuZ++WoLRQl4iP9Ya3S9qxR2QlTBJtMb1pXiMIfQ== +"@jupyterlab/pdf-extension@^1.1.0-alpha.1", "@jupyterlab/pdf-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/pdf-extension/-/pdf-extension-1.1.0-alpha.1.tgz#58891596dbdf797593dd697ed5e31bf780ac612d" + integrity sha512-uZ7LUo2NfCTyaRMpYG4V1laAIxRDeBak2aESj8sMiTjgU2xAzxIFUzQ3dLsvmy+kg2xuv3r0xqxH+ToKpW2L+A== dependencies: - "@jupyterlab/rendermime-interfaces" "^1.3.0" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/rendermime-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-extension/-/rendermime-extension-1.0.2.tgz#21ced6e5bef02041cb151aa8f772bd7a368a7d2e" - integrity sha512-LZ2/mYL58blb1wfRDSl7p5NFLk1UvKc8D25zFoPUXuCLVpw8ZFRQGiqUSWgyYTWl3VeyrEM81sELFpmR6DfeVQ== +"@jupyterlab/rendermime-extension@^1.1.0-alpha.1", "@jupyterlab/rendermime-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-extension/-/rendermime-extension-1.1.0-alpha.1.tgz#5073970384856b413d66896b99ace7cebf00a220" + integrity sha512-/KZ3F7fF2MpFlHwrowa31nYtZyjFuJjhDsH/XeEX2xV2nZHqnJxb+KrPfuLP7yHk5fiJDSzvMoT22NFwzj+Wcw== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/docmanager" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/docmanager" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" -"@jupyterlab/rendermime-interfaces@^1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.3.0.tgz#1911f3da7fda38cb36c0771a02cb75a8af544502" - integrity sha512-04ohT/xdTcdp/TKuNMqY1MLwh7IWyjbMrQXiuwanE8xo52fIe6OIK0DENwc6VDMej1+8NVSU7rX42urLCex0sA== +"@jupyterlab/rendermime-interfaces@^1.4.0-alpha.1", "@jupyterlab/rendermime-interfaces@~1.4.0-alpha.1": + version "1.4.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.4.0-alpha.1.tgz#8387280c1f3a82a088fe3eaaf19e7a924ddb18a6" + integrity sha512-NfyNGXPbrw0BCmEmCF52feZ0KL/UTnkVoROYP1uP0ykENL8HHNmvd7ZiaAFzXY4/Svhu5Xpn2wkWy9E6RryDWQ== dependencies: "@phosphor/coreutils" "^1.3.1" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/rendermime@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-1.0.2.tgz#3290ac71c716beb1a6de346a7f25d5712870a58f" - integrity sha512-J2AyV15j0YL+5NYzRF/I9kencD6FnK1weX25nTIYYEd7XTac3FUAHRAzCDJC0/SFRwdNjNAywoAeswrN4si9LA== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codemirror" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" - "@jupyterlab/rendermime-interfaces" "^1.3.0" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/rendermime@^1.1.0-alpha.1", "@jupyterlab/rendermime@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/rendermime/-/rendermime-1.1.0-alpha.1.tgz#72f32f54928fafee58a0c89133fe05c36b7fb190" + integrity sha512-45WvdZ4ydTw1nD5pLIVoebntlaOLVFgVLxqLyUZx12MkLv4GKuLcjmoTN42yHcnd0BywdDkQVUVOKC/7+8kwbw== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codemirror" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" @@ -863,33 +955,33 @@ lodash.escape "^4.0.1" marked "0.6.2" -"@jupyterlab/running-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/running-extension/-/running-extension-1.0.2.tgz#f334a93d3a8ab8a337f5d3afe52cfe995dfafdf0" - integrity sha512-pld4mDOZiuHt3fGBnkFcQJpXBJzUuLat1RZF5e+TIiLlTZ8818TxnLbFRZqBlxpZkstXd81vb5gT//qlD5fZ4w== +"@jupyterlab/running-extension@^1.1.0-alpha.1", "@jupyterlab/running-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/running-extension/-/running-extension-1.1.0-alpha.1.tgz#5efb5123f6ed325242526ffaf4b2561c44e5414c" + integrity sha512-MOkLXvOA+fo8e38Y8+GTsBvmGEz8NIIQjuS2hCGnOuVczAbhpWoUh6CHVEVIlL/Sihlran8hNBM+WQS60p1Png== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/running" "^1.0.2" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/running" "^1.1.0-alpha.1" -"@jupyterlab/running@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/running/-/running-1.0.2.tgz#a15917fed609859f14b84ee667f205ede831b16c" - integrity sha512-90emLvyWvSrK7YJSwxBRCZonbiHW5yMTtbQUQIbR+2NfGz1wM2Llhwj+JUPRf7AEU1QA0gQ9DCcGboAt56d4rw== +"@jupyterlab/running@^1.1.0-alpha.1", "@jupyterlab/running@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/running/-/running-1.1.0-alpha.1.tgz#346ba112f92235c239dae5be457d3893b5034427" + integrity sha512-2hxUpH6yPh065CJ+SagH3X6eUnroEIfIvuzhlEcxCxc9+l1U/pYV9iPK2Iq7ZCzVGx68VhIclrd36Y9sZUFjMQ== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/services" "^4.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/signaling" "^1.2.3" react "~16.8.4" -"@jupyterlab/services@^4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-4.0.2.tgz#88561f5ef6099bf8462efc1402541738a8b11f23" - integrity sha512-LnmOZuarzT6cN0jW4N1WZ91h9yE5+ArVtRtRZzZQ6pv4ydsuWGjcMVMMvmLLwC+FshKud6kTAB57f3JSkaoECA== +"@jupyterlab/services@^4.1.0-alpha.1", "@jupyterlab/services@~4.1.0-alpha.1": + version "4.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/services/-/services-4.1.0-alpha.1.tgz#3e4a92e26ad423a224a1d113e12ed7452bd125ea" + integrity sha512-5F7BBW+UX42v8Nr/gATuoHs6wfzLWrnDrFcU0I5i5XlCzlvmASRGk2+J+3iBVCN9EU4diEm9W8i0wi9mY2JUlw== dependencies: - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/observables" "^2.2.0" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/observables" "^2.3.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" @@ -897,28 +989,28 @@ node-fetch "^2.6.0" ws "^7.0.0" -"@jupyterlab/settingeditor-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/settingeditor-extension/-/settingeditor-extension-1.0.2.tgz#b23c5b52192f9b3d99f2130a71618579c52da770" - integrity sha512-NeX2QNYjE81ufa4ohuezt+rsaVFVSBOEvAmSWHZXGiBte/3oj4yvUYc7ldrfh+aBe58g/bSlhrq7HsxV53J/sA== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/settingeditor" "^1.0.2" - -"@jupyterlab/settingeditor@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/settingeditor/-/settingeditor-1.0.2.tgz#55c5c2965ff8cd84dbc050ff5e712770462a117e" - integrity sha512-bSXlSDkObbhKnJh3CLah8ImLPBx9HZXTXsmuPJo8GCGdRGRPugMQDowqMgOFR9p3NW3VWubkTax9gYrYFZa6Qw== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/inspector" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" +"@jupyterlab/settingeditor-extension@^1.1.0-alpha.1", "@jupyterlab/settingeditor-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/settingeditor-extension/-/settingeditor-extension-1.1.0-alpha.1.tgz#87233d8cad682693671fa171a21d35f71ab1e637" + integrity sha512-5ZalH1HvEYqnNA9vZVp3rOIOCDvqW4i8HLj2tHikSuUJaUVvFzG93Y57owobaGnOD9YHXCgYSsEmjHnaxY7JVg== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/settingeditor" "^1.1.0-alpha.1" + +"@jupyterlab/settingeditor@^1.1.0-alpha.1", "@jupyterlab/settingeditor@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/settingeditor/-/settingeditor-1.1.0-alpha.1.tgz#5dbca8a7f2fbefdcb59b9ad2e92439248b860d1d" + integrity sha512-fuWxszeguZQnNI04lR1W0CnnoYPUHzBt6pdjp54EWOQH0UFixsnNEQAnV/ms820bCN4MLWSqJJTE87rJ/vpFlA== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/inspector" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" @@ -927,43 +1019,43 @@ react "~16.8.4" react-dom "~16.8.4" -"@jupyterlab/shortcuts-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/shortcuts-extension/-/shortcuts-extension-1.0.2.tgz#c62286e3e641ee9b142b169485345ae17ca22fcb" - integrity sha512-YhSx9t/C+a809LQmOPIg8f7fU/5ClET7tT113iHVpZkN7mXRr1eymEex/AiUdaM/9QmH7AsP8pG3SxPbYz08sg== +"@jupyterlab/shortcuts-extension@^1.1.0-alpha.1", "@jupyterlab/shortcuts-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/shortcuts-extension/-/shortcuts-extension-1.1.0-alpha.1.tgz#f79983ad012888ee982aa47e4b5cf31ae60b97f2" + integrity sha512-HU7Z4NlP5uW7A1+laNBdAMUQYZ2JM8g+/kKX3W/DwFc1CcR3xa4MKjcS9zxB8ceOxP1m7fF32WmDOdstc2zAxg== dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" "@phosphor/commands" "^1.6.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" -"@jupyterlab/statusbar-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/statusbar-extension/-/statusbar-extension-1.0.2.tgz#8f7259080ecadc349698718565bfc0f98a436620" - integrity sha512-Z1Yg5GWwUGTAeyhiei2iigQ2JahRE7qKyjE4JJquCWYOCA4wLhdJZ7FWOueo0+mQcOeWZZ5soe9GV3mI+/HwTA== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/cells" "^1.0.2" - "@jupyterlab/console" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/fileeditor" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/notebook" "^1.0.2" - "@jupyterlab/statusbar" "^1.0.2" +"@jupyterlab/statusbar-extension@^1.1.0-alpha.1", "@jupyterlab/statusbar-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/statusbar-extension/-/statusbar-extension-1.1.0-alpha.1.tgz#bd0de2d19c54a5f9be283fd1b3b8b944055f2957" + integrity sha512-qWbPnI0LmJ8yMV4bHDIAq/gwiq4s8FiukyNe9WbgGqBb8cU6YHKudSKiTl0jDCvYS/BSH0npzhvzPomSFuFrMw== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/cells" "^1.1.0-alpha.1" + "@jupyterlab/console" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/fileeditor" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" + "@jupyterlab/statusbar" "^1.1.0-alpha.1" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/statusbar@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/statusbar/-/statusbar-1.0.2.tgz#3dd796afa62b6ea3ec0d053c6e7dd709d079bc3a" - integrity sha512-edbmu+EwiK7gL2RY7GTNiejOgLEHyBxbZSU841qbdjf6iVrtVGSvvurzHwh/+3AIhQrgbzhB7SkXiCbMFCZz6g== +"@jupyterlab/statusbar@^1.1.0-alpha.1", "@jupyterlab/statusbar@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/statusbar/-/statusbar-1.1.0-alpha.1.tgz#7cb6c0c4b557834e23f8a350b3cede0264af21fc" + integrity sha512-9FHBwNSYoo8l6D1X1xFqig47O7gD6aqS11/v6ftXxe7DjY0MvDpCG+rOprACkNyTSaiGPVqCNdWv0ecQfgCwEg== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/services" "^4.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/disposable" "^1.2.0" @@ -973,119 +1065,119 @@ react "~16.8.4" typestyle "^2.0.1" -"@jupyterlab/tabmanager-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/tabmanager-extension/-/tabmanager-extension-1.0.2.tgz#9c3665186ff44b3bc467165f4a47e4b9b2f597a9" - integrity sha512-1pxs6B0loFj+h309ezILp01g2QIF0jA2g2kgFo4kTgVsrytf7yPIUUHtFM2Iu90ouWKItct6mymkciuiX+ealw== +"@jupyterlab/tabmanager-extension@^1.1.0-alpha.1", "@jupyterlab/tabmanager-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/tabmanager-extension/-/tabmanager-extension-1.1.0-alpha.1.tgz#ee7da3f9d5ea0341251abe6fcde9b7389f98bdbf" + integrity sha512-B1Zh+7z8G94zKigVxXroVDjcWleoE1oMynnTnPvKxy/Xh2DyPNb4QlxYdV5H9o5thu67ciefjGj6gAdGEJJHwg== dependencies: - "@jupyterlab/application" "^1.0.2" + "@jupyterlab/application" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/terminal-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/terminal-extension/-/terminal-extension-1.0.2.tgz#d2f6c0042881654db8c164cf4526bb092483ff7b" - integrity sha512-96XLA2J19fh6+g0thfVxX1XPCl0xf7A578NidarEJgsN0a/fhUd+NsOJWTkj7jVHM+ql25rxPN3v+pWWF/Qd5w== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/launcher" "^1.0.2" - "@jupyterlab/mainmenu" "^1.0.2" - "@jupyterlab/terminal" "^1.0.2" +"@jupyterlab/terminal-extension@^1.1.0-alpha.1", "@jupyterlab/terminal-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/terminal-extension/-/terminal-extension-1.1.0-alpha.1.tgz#295efe28c3526ee1aecad15874619f96d8e24d17" + integrity sha512-QbgLObJgzm09Op05q0Ryc386UyG7NKvrDM0lVm+9Oh5t/s/zTVbYvz+L98bU4iJLQUjCMTD1y67iIa71SApMRA== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/launcher" "^1.1.0-alpha.1" + "@jupyterlab/mainmenu" "^1.1.0-alpha.1" + "@jupyterlab/terminal" "^1.1.0-alpha.1" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/terminal@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/terminal/-/terminal-1.0.2.tgz#86ddac918405431aa5ee62c1532065a68a175fab" - integrity sha512-m0C8BkF23ZY7DZ6vYpY9NwDy/m91WZNtxVlGWKe4mQxy2v8Zmr8g2n1i6c81uHNU/MKrm5t5ImDKvTkGNDBnxQ== +"@jupyterlab/terminal@^1.1.0-alpha.1", "@jupyterlab/terminal@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/terminal/-/terminal-1.1.0-alpha.1.tgz#6e8cef47719080a884f31090315574b79eaab12e" + integrity sha512-tw7z1Gkovn7V9OF4AnJVh+Pv5DDQUAqRLVW6TpcxzJ0Zrhz8u06+RuX1hGAoZhrRPnbQ5hHlPxdcDkNEglpk0w== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/services" "^4.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/domutils" "^1.1.3" "@phosphor/messaging" "^1.2.3" "@phosphor/widgets" "^1.8.0" xterm "~3.13.2" -"@jupyterlab/theme-dark-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/theme-dark-extension/-/theme-dark-extension-1.0.2.tgz#bfc95e37be63043e4e607097d8d885bb2f536b31" - integrity sha512-BaWTxDIWLF/td0fuJLHlycJKOqig2MUMts1tOyQRHq3j/HuGiXJh/wbFfgXesbftYvsqvya2qPvDFAGUV2YpLw== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - -"@jupyterlab/theme-light-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/theme-light-extension/-/theme-light-extension-1.0.2.tgz#f78745c7277d8c19d5bc6ea58ad5284e2b847319" - integrity sha512-m7ooUW1xzvRQmMj+v4QfWYR89U46c62UhTiAq6COEPQN9Hi1+3vFZaddDTOmffyTC/+Hgr91KPMgLNfUHYNG3w== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - -"@jupyterlab/tooltip-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/tooltip-extension/-/tooltip-extension-1.0.2.tgz#b65ba7842e0ef7ef558caeaaa64295b9097f67fa" - integrity sha512-0c1NBnE7xui/TxnN5PAyZlhO0rT1a+HF9nbMkqJ9+l8kvO4rjINlDvxKyQ7o0gWM66o8F4VYvocraAUQKO3nxg== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/console" "^1.0.2" - "@jupyterlab/coreutils" "^3.0.0" - "@jupyterlab/fileeditor" "^1.0.2" - "@jupyterlab/notebook" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/services" "^4.0.2" - "@jupyterlab/tooltip" "^1.0.2" +"@jupyterlab/theme-dark-extension@^1.1.0-alpha.1", "@jupyterlab/theme-dark-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/theme-dark-extension/-/theme-dark-extension-1.1.0-alpha.1.tgz#1ee9173c2fb2e9120addc578f68fef7d5434c1cb" + integrity sha512-uPneTTDjoiUWoIMkKlg1hwh8PeXOVP21IzhWrRb3+yR1bEiBvat4F5ZpkeylkPfoTycYM6v0X4dQs9hZ3cQ2yg== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + +"@jupyterlab/theme-light-extension@^1.1.0-alpha.1", "@jupyterlab/theme-light-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/theme-light-extension/-/theme-light-extension-1.1.0-alpha.1.tgz#21447a42179049985aa9dda60ff0e285f4d315fc" + integrity sha512-y5YBEusCs8qMxH6KEsCdluG/k9e/cbdI1m5692XQYKuQjTGcHSFGeuGtKCMwTyKlnsRLyhWCgB1Q/uWNRYIceA== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + +"@jupyterlab/tooltip-extension@^1.1.0-alpha.1", "@jupyterlab/tooltip-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/tooltip-extension/-/tooltip-extension-1.1.0-alpha.1.tgz#a2bdf1970ddd20cf04b4cff6c46c0713d9dde423" + integrity sha512-9S0ZgCtqcNpS0f5NdUfhOSHaR/7pLxZ/y5QztCdAoeCCIIZhP8WQXOT/+PQPrHHxKrjREJIDLuUw7v3l+9HAeg== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/console" "^1.1.0-alpha.1" + "@jupyterlab/coreutils" "^3.1.0-alpha.1" + "@jupyterlab/fileeditor" "^1.1.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" + "@jupyterlab/tooltip" "^1.1.0-alpha.1" "@phosphor/algorithm" "^1.1.3" "@phosphor/coreutils" "^1.3.1" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/tooltip@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/tooltip/-/tooltip-1.0.2.tgz#eb51d575f990eafab4606e90a486f1f7b290fff6" - integrity sha512-dNuFhMiQkol6Mo7Vpte1QX00yBgHt4MliUNdhgt64b2QkQqyUXKgE8QS3IY6ORKzPRAJOrk1lVtPCMwHJpjDfg== +"@jupyterlab/tooltip@^1.1.0-alpha.1", "@jupyterlab/tooltip@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/tooltip/-/tooltip-1.1.0-alpha.1.tgz#0b0649a8684c2bc61299259b4d15cbc856152a01" + integrity sha512-JhXfMprzO5FpSyEDPnVRZEgWO+mC/LHuXmlYAyr4hPifgom0pfQSYPZ8PW7sX0m7v9RxVtb0w0gsRP5QzGQQlQ== dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/codeeditor" "^1.0.0" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/services" "^4.0.2" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/codeeditor" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" "@phosphor/widgets" "^1.8.0" -"@jupyterlab/ui-components@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@jupyterlab/ui-components/-/ui-components-1.0.0.tgz#f82b00a68a24434ae56bee01d951aa4e087bb687" - integrity sha512-rR9I/wsznbuOj09gYvEWQo0fnze3ehK2dPWLY6ToE4k8qj9s39ViY48/jOoaQSaLLRaMD8M8B8ZWY0Cf+400bA== +"@jupyterlab/ui-components@^1.1.0-alpha.1", "@jupyterlab/ui-components@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/ui-components/-/ui-components-1.1.0-alpha.1.tgz#df368b91d6671c1adb819a94a55ed05e4eb37da9" + integrity sha512-d39XjG8J4wg8pm51vNxh97j69FV+D7fzo4Pf3O/2XJy72299YSSwQoZ+mirnjRPIpPXzyPKDA9E2yU8mHU842Q== dependencies: "@blueprintjs/core" "^3.9.0" "@blueprintjs/icons" "^3.3.0" "@blueprintjs/select" "^3.3.0" react "~16.8.4" -"@jupyterlab/vdom-extension@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/vdom-extension/-/vdom-extension-1.0.2.tgz#c85fa5255ef8dd8a3c257a7ce96441764ea45543" - integrity sha512-KpCXqdRL4FCtjdhof0L3fmzZVxHNR7f3xZSp++DNlcBGRL3WDrQ6KV8qzPTDp/xAAg+AIbhjet+5JwOTQDvGeA== - dependencies: - "@jupyterlab/application" "^1.0.2" - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/notebook" "^1.0.2" - "@jupyterlab/rendermime" "^1.0.2" - "@jupyterlab/vdom" "^1.0.2" - -"@jupyterlab/vdom@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@jupyterlab/vdom/-/vdom-1.0.2.tgz#ce7da3ca827bc7e564930ad3eb03c596960ac4f4" - integrity sha512-nZoiB6S05FxXjqh216uXiExH7QhUa/8JByh9CHCR/yR7OdkHB7Hj2oAGM0aBdD26RyD0BJnEG7Hg1xasaAmJ6g== - dependencies: - "@jupyterlab/apputils" "^1.0.2" - "@jupyterlab/docregistry" "^1.0.2" - "@jupyterlab/rendermime-interfaces" "^1.3.0" - "@jupyterlab/services" "^4.0.2" +"@jupyterlab/vdom-extension@^1.1.0-alpha.1", "@jupyterlab/vdom-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/vdom-extension/-/vdom-extension-1.1.0-alpha.1.tgz#70f9325d0e3a79637776d0bc0b0b91c145ddaf4b" + integrity sha512-E+aoqZhKq2zTp741NJWtBdmS03rrXZ8QPRCHRzVvCDhCxOlqYnyixMhjNCaYe1MSswh6fem6c58+NKEfVSYJvQ== + dependencies: + "@jupyterlab/application" "^1.1.0-alpha.1" + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/notebook" "^1.1.0-alpha.1" + "@jupyterlab/rendermime" "^1.1.0-alpha.1" + "@jupyterlab/vdom" "^1.1.0-alpha.1" + +"@jupyterlab/vdom@^1.1.0-alpha.1", "@jupyterlab/vdom@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/vdom/-/vdom-1.1.0-alpha.1.tgz#6a2b7dc121d9de4d021ff19f34f00e0dee586bdf" + integrity sha512-MA47xiJ/Un6LZQnzfSgc1LySeorhpMIQusKy7mLIMDEW1Ziqr6IJVnugZMzK21bupPL8ohjdILokVTVRjkRTpw== + dependencies: + "@jupyterlab/apputils" "^1.1.0-alpha.1" + "@jupyterlab/docregistry" "^1.1.0-alpha.1" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" + "@jupyterlab/services" "^4.1.0-alpha.1" "@nteract/transform-vdom" "^4.0.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/messaging" "^1.2.3" @@ -1093,24 +1185,21 @@ react "~16.8.4" react-dom "~16.8.4" -"@jupyterlab/vega4-extension@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/vega4-extension/-/vega4-extension-1.0.1.tgz#840b78d352ed1e159846b65c2e3f422c55270575" - integrity sha512-G7dikrND2vNMpq+u6M+trjF8kHK5Nf0k3XBQiNGW4ZfLn3fL8OSP26HcxM4Z8dDXeEyY4QzDHtag6vhhHxsMhA== +"@jupyterlab/vega4-extension@^1.1.0-alpha.1", "@jupyterlab/vega4-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/vega4-extension/-/vega4-extension-1.1.0-alpha.1.tgz#fa92d8aa223dcffbe288cba2900b61a35641e014" + integrity sha512-SVQBfv988/zXDfAFk+UaZSkhzc49jICB+R/OYCEPWCSLHe2mF7JxBWXhPbUPaUw05cQoYzPx3McV4j/KHwelCQ== dependencies: - "@jupyterlab/rendermime-interfaces" "^1.3.0" - "@phosphor/coreutils" "^1.3.0" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" + "@phosphor/coreutils" "^1.3.1" "@phosphor/widgets" "^1.8.0" - vega "^4.4.0" - vega-embed "^4.2.0" - vega-lite "^2.6.0" -"@jupyterlab/vega5-extension@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@jupyterlab/vega5-extension/-/vega5-extension-1.0.1.tgz#416aaba315f22728e4992de9f10b97335219232e" - integrity sha512-1CGr43TDkqaudfjBjYNZRfw1hA9iv4xxKO3BofaJIGbD6mQiLzrNu7HoXxbUMc9fPHlMn42Dsq8D7Hs2J5/maA== +"@jupyterlab/vega5-extension@^1.1.0-alpha.1", "@jupyterlab/vega5-extension@~1.1.0-alpha.1": + version "1.1.0-alpha.1" + resolved "https://registry.yarnpkg.com/@jupyterlab/vega5-extension/-/vega5-extension-1.1.0-alpha.1.tgz#528f6593e4f4eee73d1e38b92800d9c067e06973" + integrity sha512-0g1PHHqaoPEcdX/JwJOfpsVg8Mxt3kNYnsv3HuaP9aT9qUjpenemmtr+LAtp6ozQv3w9YnuCA6+SAMEwj0qb7Q== dependencies: - "@jupyterlab/rendermime-interfaces" "^1.3.0" + "@jupyterlab/rendermime-interfaces" "^1.4.0-alpha.1" "@phosphor/coreutils" "^1.3.1" "@phosphor/widgets" "^1.8.0" @@ -1154,7 +1243,7 @@ "@phosphor/keyboard" "^1.1.3" "@phosphor/signaling" "^1.2.3" -"@phosphor/coreutils@^1.3.0", "@phosphor/coreutils@^1.3.1": +"@phosphor/coreutils@^1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@phosphor/coreutils/-/coreutils-1.3.1.tgz#441e34f42340f7faa742a88b2a181947a88d7226" integrity sha512-9OHCn8LYRcPU/sbHm5v7viCA16Uev3gbdkwqoQqlV+EiauDHl70jmeL7XVDXdigl66Dz0LI11C99XOxp+s3zOA== @@ -1260,11 +1349,6 @@ resolved "https://registry.yarnpkg.com/@types/dom4/-/dom4-2.0.1.tgz#506d5781b9bcab81bd9a878b198aec7dee2a6033" integrity sha512-kSkVAvWmMZiCYtvqjqQEwOmvKwcH+V4uiv3qPQ8pAh1Xl39xggGEo8gHUqV4waYGHezdFw0rKBR8Jt0CrQSDZA== -"@types/json-stable-stringify@^1.0.32": - version "1.0.32" - resolved "https://registry.yarnpkg.com/@types/json-stable-stringify/-/json-stable-stringify-1.0.32.tgz#121f6917c4389db3923640b2e68de5fa64dda88e" - integrity sha512-q9Q6+eUEGwQkv4Sbst3J4PNgDOvpuVuKj79Hl/qnmBMEIPzB5QoFRUtjcgcg2xNUZyYUGXBk5wYIBKHt0A+Mxw== - "@types/prop-types@*": version "15.7.1" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.1.tgz#f1a11e7babb0c3cad68100be381d1e064c68f1f6" @@ -1276,9 +1360,9 @@ integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== "@types/react@~16.8.18": - version "16.8.23" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.23.tgz#ec6be3ceed6353a20948169b6cb4c97b65b97ad2" - integrity sha512-abkEOIeljniUN9qB5onp++g0EY38h7atnDHxwKUFz1r3VH1+yG1OKi2sNPTyObL40goBmfKFpdii2lEzwLX1cA== + version "16.8.24" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.8.24.tgz#8d1ea1fcbfa214220da3d3c04e506f1077b0deac" + integrity sha512-VpFHUoD37YNY2+lr/+c7qL/tZsIU/bKuskUF3tmGUArbxIcQdb5j3zvo4cuuzu2A6UaVmVn7sJ4PgWYNFEBGzg== dependencies: "@types/prop-types" "*" csstype "^2.2.0" @@ -1449,12 +1533,7 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn@^5.2.1: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - -acorn@^6.2.0: +acorn@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== @@ -1464,12 +1543,12 @@ ajv-errors@^1.0.0: resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== -ajv-keywords@^3.1.0: +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== -ajv@^6.1.0, ajv@^6.5.5: +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== @@ -1479,11 +1558,6 @@ ajv@^6.1.0, ajv@^6.5.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -1602,9 +1676,9 @@ async-each@^1.0.1: integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== async-limiter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" - integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== async@^2.5.0: version "2.6.3" @@ -1636,11 +1710,6 @@ base16@^1.0.0: resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= -base62@^1.1.0: - version "1.2.8" - resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.8.tgz#1264cb0fb848d875792877479dbe8bae6bae3428" - integrity sha512-V6YHUbjLxN1ymqNLb1DPHoU1CpfdL7d2YTIp5W3U4hhoG4hhxNmsFDs66M9EXxBiSEke5Bt5dwdfMwwZF70iLA== - base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" @@ -1806,16 +1875,17 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -cacache@^11.3.2: - version "11.3.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" - integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== +cacache@^12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" + integrity sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg== dependencies: bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" glob "^7.1.4" graceful-fs "^4.1.15" + infer-owner "^1.0.3" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" @@ -1862,30 +1932,11 @@ camel-case@3.0.x: no-case "^2.2.0" upper-case "^1.1.1" -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - camelcase@^5.0.0, camelcase@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -canvas-prebuilt@1.6.11: - version "1.6.11" - resolved "https://registry.yarnpkg.com/canvas-prebuilt/-/canvas-prebuilt-1.6.11.tgz#9b37071aa0ddd4f7c2b4a9e279b63fb2dc30db9b" - integrity sha512-ayBAayYLgFbGBX+cwtOzM4iEQP4XB5DuBbtjgvAwQ66/FMzSR7DhlCqtDZIq9UBbpFCb1QpyDgUNVclHDdBixg== - dependencies: - node-pre-gyp "^0.10.0" - -canvas@^1.6.13: - version "1.6.13" - resolved "https://registry.yarnpkg.com/canvas/-/canvas-1.6.13.tgz#8cb4e9abbea9e615a377890ffac50277a1167c73" - integrity sha512-XAfzfEOHZ3JIPjEV+WSI6PpISgUta3dgmndWbsajotz+0TQOX/jDpp2kawjRERatOGv9sMMzk5auB3GKEKA6hg== - dependencies: - nan "^2.10.0" - chalk@2.4.2, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1929,7 +1980,7 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== -chrome-trace-event@^1.0.0: +chrome-trace-event@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== @@ -1978,15 +2029,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -2042,16 +2084,16 @@ color-name@1.1.3: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -commander@2, commander@^2.10.0, commander@^2.20.0, commander@^2.5.0, commander@~2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" - integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== - commander@2.17.x: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +commander@^2.10.0, commander@^2.20.0, commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + commander@~2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -2062,21 +2104,6 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -commoner@^0.10.1: - version "0.10.8" - resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" - integrity sha1-NPw2cs0kOT6LtH5wyqApOBH08sU= - dependencies: - commander "^2.5.0" - detective "^4.3.1" - glob "^5.0.15" - graceful-fs "^4.1.2" - iconv-lite "^0.4.5" - mkdirp "^0.5.0" - private "^0.1.6" - q "^1.1.2" - recast "^0.11.17" - component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -2213,15 +2240,6 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2329,145 +2347,6 @@ cyclist@~0.2.2: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= -d3-array@1, d3-array@^1.1.1, d3-array@^1.2.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" - integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== - -d3-array@^2.0.2, d3-array@^2.0.3: - version "2.2.0" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.2.0.tgz#a9e966b8f8d78f0888d98db1fb840fc8da8ac5c7" - integrity sha512-eE0QmSh6xToqM3sxHiJYg/QFdNn52ZEgmFE8A8abU8GsHvsIOolqH8B70/8+VGAKm5MlwaExhqR3DLIjOJMLPA== - -d3-collection@1, d3-collection@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" - integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== - -d3-color@1, d3-color@^1.2.3: - version "1.2.8" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.2.8.tgz#4eaf9b60ef188c893fcf8b28f3546aafebfbd9f4" - integrity sha512-yeANXzP37PHk0DbSTMNPhnJD+Nn4G//O5E825bR6fAfHH43hobSBpgB9G9oWVl9+XgUaQ4yCnsX1H+l8DoaL9A== - -d3-contour@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-1.3.2.tgz#652aacd500d2264cb3423cee10db69f6f59bead3" - integrity sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg== - dependencies: - d3-array "^1.1.1" - -d3-dispatch@1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.5.tgz#e25c10a186517cd6c82dd19ea018f07e01e39015" - integrity sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g== - -d3-dsv@^1.0.10: - version "1.1.1" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.1.1.tgz#aaa830ecb76c4b5015572c647cc6441e3c7bb701" - integrity sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw== - dependencies: - commander "2" - iconv-lite "0.4" - rw "1" - -d3-force@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.2.1.tgz#fd29a5d1ff181c9e7f0669e4bd72bdb0e914ec0b" - integrity sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg== - dependencies: - d3-collection "1" - d3-dispatch "1" - d3-quadtree "1" - d3-timer "1" - -d3-format@1, d3-format@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.3.2.tgz#6a96b5e31bcb98122a30863f7d92365c00603562" - integrity sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ== - -d3-geo@^1.11.3: - version "1.11.6" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.11.6.tgz#134f2ef035ff75a448075fafdea92702a2e0e0cf" - integrity sha512-z0J8InXR9e9wcgNtmVnPTj0TU8nhYT6lD/ak9may2PdKqXIeHUr8UbFLoCtrPYNsjv6YaLvSDQVl578k6nm7GA== - dependencies: - d3-array "1" - -d3-hierarchy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz#7a6317bd3ed24e324641b6f1e76e978836b008cc" - integrity sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w== - -d3-interpolate@1, d3-interpolate@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68" - integrity sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w== - dependencies: - d3-color "1" - -d3-path@1, d3-path@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.7.tgz#8de7cd693a75ac0b5480d3abaccd94793e58aae8" - integrity sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA== - -d3-quadtree@1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.6.tgz#d1ab2a95a7f27bbde88582c94166f6ae35f32056" - integrity sha512-NUgeo9G+ENQCQ1LsRr2qJg3MQ4DJvxcDNCiohdJGHt5gRhBW6orIB5m5FJ9kK3HNL8g9F4ERVoBzcEwQBfXWVA== - -d3-scale-chromatic@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-1.3.3.tgz#dad4366f0edcb288f490128979c3c793583ed3c0" - integrity sha512-BWTipif1CimXcYfT02LKjAyItX5gKiwxuPRgr4xM58JwlLocWbjPLI7aMEjkcoOQXMkYsmNsvv3d2yl/OKuHHw== - dependencies: - d3-color "1" - d3-interpolate "1" - -d3-scale@^2.1.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.2.2.tgz#4e880e0b2745acaaddd3ede26a9e908a9e17b81f" - integrity sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw== - dependencies: - d3-array "^1.2.0" - d3-collection "1" - d3-format "1" - d3-interpolate "1" - d3-time "1" - d3-time-format "2" - -d3-selection@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.0.tgz#ab9ac1e664cf967ebf1b479cc07e28ce9908c474" - integrity sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg== - -d3-shape@^1.2.2: - version "1.3.5" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.5.tgz#e81aea5940f59f0a79cfccac012232a8987c6033" - integrity sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg== - dependencies: - d3-path "1" - -d3-time-format@2, d3-time-format@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.3.tgz#ae06f8e0126a9d60d6364eac5b1533ae1bac826b" - integrity sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA== - dependencies: - d3-time "1" - -d3-time@1, d3-time@^1.0.10: - version "1.0.11" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.11.tgz#1d831a3e25cd189eb256c17770a666368762bbce" - integrity sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw== - -d3-timer@1, d3-timer@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.9.tgz#f7bb8c0d597d792ff7131e1c24a36dd471a471ba" - integrity sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg== - -d3-voronoi@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.4.tgz#dd3c78d7653d2bb359284ae478645d95944c8297" - integrity sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg== - d3@^3.5.6: version "3.5.17" resolved "https://registry.yarnpkg.com/d3/-/d3-3.5.17.tgz#bc46748004378b21a360c9fc7cf5231790762fb8" @@ -2492,7 +2371,7 @@ debug@^3.2.6: dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2548,11 +2427,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -defined@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -2586,14 +2460,6 @@ detect-libc@^1.0.2: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= -detective@^4.3.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" - integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== - dependencies: - acorn "^5.2.1" - defined "^1.0.0" - diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -2618,14 +2484,14 @@ dom-helpers@^3.4.0: "@babel/runtime" "^7.1.2" dom-serializer@0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + version "0.2.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb" + integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q== dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" + domelementtype "^2.0.1" + entities "^2.0.0" -dom4@^2.0.1: +dom4@^2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/dom4/-/dom4-2.1.5.tgz#f98a94eb67b340f0fa5b42b0ee9c38cda035428e" integrity sha512-gJbnVGq5zaBUY0lUh0LUEVGYrtN75Ks8ZwpwOYvnVFrKy/qzXK4R/1WuLIFExWj/tBxbRAkTzZUGJHXmqsBNjQ== @@ -2635,11 +2501,16 @@ domain-browser@^1.1.1: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: +domelementtype@1, domelementtype@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -2739,13 +2610,10 @@ entities@^1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== -envify@^3.0.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" - integrity sha1-1xIjKejfFoi6dxsSUBkXyc5cvOg= - dependencies: - jstransform "^11.0.3" - through "~2.3.4" +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== errno@^0.1.3, errno@~0.1.7: version "0.1.7" @@ -2793,7 +2661,7 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -eslint-scope@^4.0.0: +eslint-scope@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== @@ -2801,11 +2669,6 @@ eslint-scope@^4.0.0: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima-fb@^15001.1.0-dev-harmony-fb: - version "15001.1.0-dev-harmony-fb" - resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" - integrity sha1-MKlHMDxrjV6VW+4rmbHSMyBqaQE= - esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -2841,19 +2704,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -2940,17 +2790,6 @@ fastparse@^1.1.1: resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== -fbjs@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.6.1.tgz#9636b7705f5ba9684d44b72f78321254afc860f7" - integrity sha1-lja3cF9bqWhNRLcveDISVK/IYPc= - dependencies: - core-js "^1.0.0" - loose-envify "^1.0.0" - promise "^7.0.3" - ua-parser-js "^0.7.9" - whatwg-fetch "^0.9.0" - fbjs@^0.8.0, fbjs@^0.8.9: version "0.8.17" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" @@ -3002,7 +2841,7 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -find-cache-dir@^2.0.0: +find-cache-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== @@ -3016,13 +2855,6 @@ find-root@^1.0.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3136,21 +2968,11 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3178,17 +3000,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^5.0.15: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^7.1.3, glob@^7.1.4, glob@~7.1.2: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -3424,7 +3235,7 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -iconv-lite@0.4, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@^0.4.5, iconv-lite@~0.4.13: +iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -3478,6 +3289,11 @@ indexes-of@^1.0.1: resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -3525,11 +3341,6 @@ interpret@1.2.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -3757,18 +3568,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= - dependencies: - jsonify "~0.0.0" - -json-stringify-pretty-compact@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz#e77c419f52ff00c45a31f07f4c820c2433143885" - integrity sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ== - json5@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -3795,22 +3594,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jstransform@^11.0.3: - version "11.0.3" - resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" - integrity sha1-CaeJk+CuTU70SH9hVakfYZDLQiM= - dependencies: - base62 "^1.1.0" - commoner "^0.10.1" - esprima-fb "^15001.1.0-dev-harmony-fb" - object-assign "^2.0.0" - source-map "^0.4.2" - keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -3842,13 +3625,6 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -3856,7 +3632,7 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" -loader-runner@^2.3.0: +loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== @@ -3880,14 +3656,6 @@ loader-utils@^0.2.16: json5 "^0.5.0" object-assign "^4.0.1" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -3963,14 +3731,6 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -4029,13 +3789,6 @@ mdn-data@~1.1.0: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -4045,7 +3798,7 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memory-fs@^0.4.0, memory-fs@~0.4.1: +memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -4053,7 +3806,7 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -4120,7 +3873,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -"minimatch@2 || 3", minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -4176,7 +3929,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -4215,7 +3968,7 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.10.0, nan@^2.12.1: +nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -4246,7 +3999,7 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" -neo-async@^2.5.0, neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== @@ -4271,12 +4024,12 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-fetch@^2.3.0, node-fetch@^2.6.0: +node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== -node-libs-browser@^2.0.0: +node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== @@ -4305,22 +4058,6 @@ node-libs-browser@^2.0.0: util "^0.11.0" vm-browserify "^1.0.1" -node-pre-gyp@^0.10.0: - version "0.10.3" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" - integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - node-pre-gyp@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" @@ -4371,7 +4108,7 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee" integrity sha512-0NLtR71o4k6GLP+mr6Ty34c5GA6CMoEsncKJxvQd8NzPxaHRJNnb5gZE8R1XF4CPIS7QPHLJ74IFszwtNVAHVQ== -normalize.css@^8.0.0: +normalize.css@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" integrity sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg== @@ -4418,11 +4155,6 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -object-assign@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" - integrity sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo= - object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -4506,16 +4238,7 @@ os-homedir@^1.0.0: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-locale@^3.0.0, os-locale@^3.1.0: +os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== @@ -4557,13 +4280,6 @@ p-is-promise@^2.0.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" @@ -4571,13 +4287,6 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -4585,11 +4294,6 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -4709,7 +4413,7 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -popper.js@^1.14.1, popper.js@^1.14.4: +popper.js@^1.14.4, popper.js@^1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.15.0.tgz#5560b99bbad7647e9faa475c6b8056621f5a4ff2" integrity sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA== @@ -4787,7 +4491,7 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -private@^0.1.6, private@~0.1.5: +private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -4807,7 +4511,7 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= -promise@^7.0.3, promise@^7.1.1: +promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== @@ -4828,11 +4532,6 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -4957,12 +4656,7 @@ react-base16-styling@^0.5.1: lodash.flow "^3.3.0" pure-color "^1.2.0" -react-dom@^0.14.0: - version "0.14.9" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.14.9.tgz#05064a3dcf0fb1880a3b2bfc9d58c55d8d9f6293" - integrity sha1-BQZKPc8PsYgKOyv8nVjFXY2fYpM= - -react-dom@~16.8.4: +react-dom@^0.14.0, react-dom@~16.8.4: version "16.8.6" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.6.tgz#71d6303f631e8b0097f56165ef608f051ff6e10f" integrity sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA== @@ -5008,7 +4702,7 @@ react-paginate@^6.3.0: dependencies: prop-types "^15.6.1" -react-popper@^1.0.0: +react-popper@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.3.tgz#2c6cef7515a991256b4f0536cd4bdcb58a7b6af6" integrity sha512-ynMZBPkXONPc5K4P5yFWgZx5JGAUIP3pGGLNs58cfAPgK67olx7fmLp+AdpZ0+GoQ+ieFDa/z4cdV6u7sioH6w== @@ -5020,7 +4714,7 @@ react-popper@^1.0.0: typed-styles "^0.0.7" warning "^4.0.2" -react-transition-group@^2.2.1: +react-transition-group@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.9.0.tgz#df9cdb025796211151a436c69a8f3b97b5b07c8d" integrity sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg== @@ -5030,15 +4724,7 @@ react-transition-group@^2.2.1: prop-types "^15.6.2" react-lifecycles-compat "^3.0.4" -react@^0.14.0: - version "0.14.9" - resolved "https://registry.yarnpkg.com/react/-/react-0.14.9.tgz#9110a6497c49d44ba1c0edd317aec29c2e0d91d1" - integrity sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE= - dependencies: - envify "^3.0.0" - fbjs "^0.6.1" - -react@~16.8.4: +react@^0.14.0, react@~16.8.4: version "16.8.6" resolved "https://registry.yarnpkg.com/react/-/react-16.8.6.tgz#ad6c3a9614fd3a4e9ef51117f54d888da01f2bbe" integrity sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw== @@ -5079,7 +4765,7 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -recast@^0.11.17, recast@~0.11.12: +recast@~0.11.12: version "0.11.23" resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= @@ -5158,11 +4844,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -5173,7 +4854,7 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resize-observer-polyfill@^1.5.0: +resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== @@ -5252,11 +4933,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rw@1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= - rxjs@^6.4.0: version "6.5.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" @@ -5324,7 +5000,7 @@ semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.1.0, semver@^6.2.0, semver@^6.3.0: +semver@^6.1.0, semver@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -5454,9 +5130,9 @@ source-map-resolve@^0.5.0: urix "^0.1.0" source-map-support@~0.5.12: - version "0.5.12" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" - integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -5466,13 +5142,6 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -5569,7 +5238,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -5682,7 +5351,7 @@ svgo@~1.2.1: unquote "~1.1.1" util.promisify "~1.0.0" -tapable@^1.0.0, tapable@^1.1.0: +tapable@^1.0.0, tapable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== @@ -5700,26 +5369,25 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" - integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== +terser-webpack-plugin@^1.3.0, terser-webpack-plugin@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" + integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== dependencies: - cacache "^11.3.2" - find-cache-dir "^2.0.0" + cacache "^12.0.2" + find-cache-dir "^2.1.0" is-wsl "^1.1.0" - loader-utils "^1.2.3" schema-utils "^1.0.0" serialize-javascript "^1.7.0" source-map "^0.6.1" - terser "^4.0.0" - webpack-sources "^1.3.0" + terser "^4.1.2" + webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.2.tgz#b2656c8a506f7ce805a3f300a2ff48db022fa391" - integrity sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw== +terser@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.1.3.tgz#6074fbcf3517561c3272ea885f422c7a8c32d689" + integrity sha512-on13d+cnpn5bMouZu+J8tPYQecsdRJCJuxFJ+FVoPBoLJgk5bCBkp+Uen2hWyi0KIUm6eDarnlAlH+KgIx/PuQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -5733,7 +5401,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@^2.3.6, through@~2.3.4, through@~2.3.6: +through@^2.3.6, through@~2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -5787,22 +5455,15 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -topojson-client@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.0.0.tgz#1f99293a77ef42a448d032a81aa982b73f360d2f" - integrity sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8= - dependencies: - commander "2" - toposort@^1.0.0: version "1.0.7" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= -tslib@^1.9.0, tslib@^1.9.2: - version "1.10.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" - integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tslib@^1.9.0, tslib@~1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== tty-browserify@0.0.0: version "0.0.0" @@ -5832,7 +5493,7 @@ typestyle@^2.0.1: csstype "^2.4.0" free-style "2.6.1" -ua-parser-js@^0.7.18, ua-parser-js@^0.7.9: +ua-parser-js@^0.7.18: version "0.7.20" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.20.tgz#7527178b82f6a62a0f243d1f94fd30e3e3c21098" integrity sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw== @@ -5988,304 +5649,6 @@ v8-compile-cache@2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== -vega-canvas@^1.0.1, vega-canvas@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/vega-canvas/-/vega-canvas-1.2.1.tgz#ee0586e2a1f096f6a5d1710df61ef501562c2bd4" - integrity sha512-k/S3EPeJ37D7fYDhv4sEg7fNWVpLheQY7flfLyAmJU7aSwCMgw8cZJi0CKHchJeculssfH+41NCqvRB1QtaJnw== - -vega-crossfilter@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vega-crossfilter/-/vega-crossfilter-3.0.1.tgz#8b4394fb5e354e5c6f79ca9f491531a292c04209" - integrity sha512-GNCP0k1otJKtE9SnYm1cDBqUfBvWTaxJ3/bdMpWvGNUtAdDBAlrtspDBTpwMu4MLNWbAy1zp9jN0ztCXBZF29Q== - dependencies: - d3-array "^2.0.2" - vega-dataflow "^4.1.0" - vega-util "^1.7.0" - -vega-dataflow@^4.0.0, vega-dataflow@^4.0.4, vega-dataflow@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/vega-dataflow/-/vega-dataflow-4.1.0.tgz#c63abee8502eedf42a972ad5d3a2ce7475aab7d8" - integrity sha512-LuXoN3LkYWNYTPeMiOgSlw2TZAWjmN46Q9HmHM8ClhXYAj+pYme3IPdtYn1OmcvWe4rKeiYgNYrtJCgTOvCepg== - dependencies: - vega-loader "^3.1.0" - vega-util "^1.7.0" - -vega-embed@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/vega-embed/-/vega-embed-4.2.2.tgz#94f0d88fca7518bb18781979207de3ee3f3180c5" - integrity sha512-0CkTK8EQu7tzojhTMRfWDv1QKBy6debQRFpJ+QWKxgA+6O6fV3UkufpZaD2XccMAkCRDAFUl6tmxsLta2HBHRQ== - dependencies: - d3-selection "^1.4.0" - json-stringify-pretty-compact "^2.0.0" - semver "^6.3.0" - vega-schema-url-parser "^1.1.0" - vega-themes "^2.3.2" - vega-tooltip "^0.18.1" - -vega-encode@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/vega-encode/-/vega-encode-3.2.2.tgz#b7bdee200629b1d54de8267b1b8aafef9f1be8b7" - integrity sha512-Hmk+ReH6R1wTnz56gWyk8CnzgAzq11QYkrEzw794MMY2l61EG3sX9veyZ9AdtDufOq9oDa58/kfgk65UD9A+sA== - dependencies: - d3-array "^2.0.2" - d3-format "^1.3.2" - d3-interpolate "^1.3.2" - vega-dataflow "^4.1.0" - vega-scale "^2.5.0" - vega-util "^1.7.0" - -vega-event-selector@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/vega-event-selector/-/vega-event-selector-2.0.0.tgz#6af8dc7345217017ceed74e9155b8d33bad05d42" - integrity sha512-EZeStM/7LNfJiRuop0lvhOR52Q1l9i/EIYUnm/XddhjR+UqhPkeCmZcffMTr41z3aGm/zciVLlKanUWNT+jQ1A== - -vega-expression@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/vega-expression/-/vega-expression-2.6.0.tgz#9955887b53b05da8e1d101c41a7ddce414edfb6d" - integrity sha512-c2FFrIfKtlTtLCR3BnZDm6O2ey7u+5YRukLnNobRe+hoiqeH86C2+FkjXotE63cYGj39R5OS+SK+VBSDz3bmVw== - dependencies: - vega-util "^1.8.0" - -vega-force@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vega-force/-/vega-force-3.0.0.tgz#f5d10bb0a49e41c47f2d83441e407510948eb89a" - integrity sha512-Uar26RDxDQEpIdWBIFKnOr6/B30RU8/2qBtoiux1C3goZIWBRkXNlCR5kMDkll8Mg60deD6ynflsXXNwyGS69w== - dependencies: - d3-force "^1.1.0" - vega-dataflow "^4.0.0" - vega-util "^1.7.0" - -vega-geo@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/vega-geo/-/vega-geo-3.1.1.tgz#5ff84061dea93d89a453e1b56b3444a6031810f6" - integrity sha512-EltBQmid6DZ7d4iArgTnsGRsx4ZaHrwvaegq6iIwWp7GHtJ8i+8bzPFfHo1pBuRVmHG4ZA2NH+cNaW2IIgWcPg== - dependencies: - d3-array "^2.0.2" - d3-contour "^1.3.2" - d3-geo "^1.11.3" - vega-dataflow "^4.1.0" - vega-projection "^1.2.0" - vega-util "^1.7.0" - -vega-hierarchy@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/vega-hierarchy/-/vega-hierarchy-3.1.0.tgz#ce3df9ab09b3324144df9273d650391f082696ec" - integrity sha512-zPxOsQbswVDMfn9JdDG0ihZA4qhQL5WJxBsSRFsMeuyDTFuE6biBInpm/g0QDGmHMF2EOY4AwD2WRyF+jAyTqw== - dependencies: - d3-collection "^1.0.7" - d3-hierarchy "^1.1.8" - vega-dataflow "^4.0.4" - vega-util "^1.7.0" - -vega-lib@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/vega-lib/-/vega-lib-4.4.0.tgz#37d99514c5496a0ce001033bdacb504361ef6880" - integrity sha512-bfOsO5wks+ctnJ94fIPWH/B0qocdFs4WZ8teIgjF7m5XE+EVln+1nq9Z+sV7wdw7vftzGg0GAx9UH/kJxyopKg== - dependencies: - vega-crossfilter "^3.0.1" - vega-dataflow "^4.1.0" - vega-encode "^3.2.2" - vega-event-selector "^2.0.0" - vega-expression "^2.4.0" - vega-force "^3.0.0" - vega-geo "^3.1.1" - vega-hierarchy "^3.1.0" - vega-loader "^3.1.0" - vega-parser "^3.9.0" - vega-projection "^1.2.0" - vega-runtime "^3.2.0" - vega-scale "^2.5.1" - vega-scenegraph "^3.2.3" - vega-statistics "^1.2.3" - vega-transforms "^2.3.1" - vega-typings "*" - vega-util "^1.7.0" - vega-view "^3.4.1" - vega-view-transforms "^2.0.3" - vega-voronoi "^3.0.0" - vega-wordcloud "^3.0.0" - -vega-lite@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/vega-lite/-/vega-lite-2.7.0.tgz#4535a2f8651f0d037b685131943d30f9fa5de6d1" - integrity sha512-SqUDFD+1bHP6UgaFnI418XLW1ffcVMlQMdzI4Xh0HGjPKDPdLTF71iNjcTUwtTYt9rRLXRcRKdmCbBzuLtkg8g== - dependencies: - "@types/json-stable-stringify" "^1.0.32" - json-stable-stringify "^1.0.1" - tslib "^1.9.2" - vega-event-selector "^2.0.0" - vega-typings "^0.3.17" - vega-util "^1.10.0" - yargs "^11.0.0" - -vega-loader@^3.0.1, vega-loader@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-3.1.0.tgz#21caa0e78e158a676eafd0e7cb5bae4c18996c5a" - integrity sha512-FD9KJdPxBOa+fTnjC2dfY5+kB05hXyVOfjIkssmgyyhELJPp2FwclcF4mVy7Ay1E8fUHY3GgbwSE5jL8k4pYUg== - dependencies: - d3-dsv "^1.0.10" - d3-time-format "^2.1.3" - node-fetch "^2.3.0" - topojson-client "^3.0.0" - vega-util "^1.7.0" - -vega-parser@3.9.0, vega-parser@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/vega-parser/-/vega-parser-3.9.0.tgz#a7bbe380c5ae70ddd501163302a948f25aadd686" - integrity sha512-/fdPt5wcZgbPi0zwzJsBgi/k2GO3s53j7kJUYFGff75+wLJ2n/XtLCU295Wo7+cGCfkCZs0FfYKWa8AJrQZiag== - dependencies: - d3-array "^2.0.2" - d3-color "^1.2.3" - d3-format "^1.3.2" - d3-geo "^1.11.3" - d3-time-format "^2.1.3" - vega-dataflow "^4.1.0" - vega-event-selector "^2.0.0" - vega-expression "^2.4.0" - vega-scale "^2.5.1" - vega-scenegraph "^3.2.3" - vega-statistics "^1.2.3" - vega-util "^1.7.0" - -vega-projection@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/vega-projection/-/vega-projection-1.2.1.tgz#f3425238fadab0b875f2ce92e5bba9dfc983f367" - integrity sha512-7ouWSDdBV8kBQFA26RHUtp39DDO7g3NcEJlhhBywvCQ0nEtqZinERW3bIOxVxZ5H1OKkmhBrxQUPHok2AC06aA== - dependencies: - d3-geo "^1.11.3" - -vega-runtime@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/vega-runtime/-/vega-runtime-3.2.0.tgz#ad4152079989058db90ce1993f16b3876f628d8b" - integrity sha512-aoWqH+U5tiByj3cIGZsTDPMTb10tUN2nm4zWa3Z7lOUilbw/+gEaOuy1qvr4VrVhUShsnytudED4OpQNUkKy3Q== - dependencies: - vega-dataflow "^4.1.0" - vega-util "^1.7.0" - -vega-scale@^2.1.1, vega-scale@^2.5.0, vega-scale@^2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/vega-scale/-/vega-scale-2.5.1.tgz#5b5ce7752e904c17077db9a924418dabd6ffb991" - integrity sha512-EOpUDOjTAD7DhXglyOquXTzXFXjnNvrGyMDCOsfRL/XUTsbjYYNkdl0Q30c9fVN1I+H65lMz52xwN16yxwMuTw== - dependencies: - d3-array "^2.0.2" - d3-interpolate "^1.3.2" - d3-scale "^2.1.2" - d3-scale-chromatic "^1.3.3" - d3-time "^1.0.10" - vega-util "^1.7.0" - -vega-scenegraph@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/vega-scenegraph/-/vega-scenegraph-3.2.3.tgz#72060c7f3b0e4421c4317a2f7a9a901870920a25" - integrity sha512-L4mZ6LpEKvW5Q0c8gyqozGuoY5miJI4DiRipiAG0BQ6rB67tK+8qlaTfslX4tNBz88mu+CyVO9ZjNW/M4nBI3w== - dependencies: - d3-path "^1.0.7" - d3-shape "^1.2.2" - vega-canvas "^1.1.0" - vega-loader "^3.0.1" - vega-util "^1.7.0" - -vega-schema-url-parser@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vega-schema-url-parser/-/vega-schema-url-parser-1.1.0.tgz#39168ec04e5468ce278a06c16ec0d126035a85b5" - integrity sha512-Tc85J2ofMZZOsxiqDM9sbvfsa+Vdo3GwNLjEEsPOsCDeYqsUHKAlc1IpbbhPLZ6jusyM9Lk0e1izF64GGklFDg== - -vega-statistics@^1.2.1, vega-statistics@^1.2.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/vega-statistics/-/vega-statistics-1.4.0.tgz#e96b4d3c87f0b72ad88ef62ed4c6f4a610c62f92" - integrity sha512-FdkM8fGJf1zFgpmAD3wE4eWrGgDphE0uZze20Lv5x3s2pAamtYhQV3m36Hd7R+5UFFljiAkspNrGjG9HlFPNVQ== - dependencies: - d3-array "^2.0.3" - -vega-themes@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/vega-themes/-/vega-themes-2.3.2.tgz#a04ed6a5544ba91682168888858497db07151a46" - integrity sha512-+Yc7JyViAeLxMf97bZTctVtFWRuLE8JGHi3qNLXx+/8XPawORVHz67lp5bqehrvphPKN7yF6fnyfnUqufpVm5g== - -vega-tooltip@^0.18.1: - version "0.18.1" - resolved "https://registry.yarnpkg.com/vega-tooltip/-/vega-tooltip-0.18.1.tgz#2599b99c8faec8eaae13c55f540e3cbdf8e19432" - integrity sha512-g/i69QLTVhGeHNT8k646Qr8SFss9kbnt6XmU9ujjqgaW5B/p1FPUrMzFh/88rMF704EHYyBH7Aj3t0ds1cCHbQ== - dependencies: - vega-util "^1.10.0" - -vega-transforms@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/vega-transforms/-/vega-transforms-2.3.1.tgz#a31a1ff8086c6909384ddfcc973bd58d53d801ae" - integrity sha512-jvDz33ohZiP6cN74quEvesHr0sbSMMQ69ZZqgL6cRDHBqfiuHPhZofBKWDXE1nEWDmJqTEyvg0gsnA8vpHzpjQ== - dependencies: - d3-array "^2.0.2" - vega-dataflow "^4.1.0" - vega-statistics "^1.2.3" - vega-util "^1.7.0" - -vega-typings@*, vega-typings@^0.3.17: - version "0.3.53" - resolved "https://registry.yarnpkg.com/vega-typings/-/vega-typings-0.3.53.tgz#a70b9730ebe1e4c557019ccccc5fd98035b0aab0" - integrity sha512-XQRd66eL62ll6tHENQIJHtdwXemqXoB4KnVVbGUwGJIHjQkHHluCbkoWVRvPYuRd+OLM1RXVc+EBxA015hJ1SQ== - dependencies: - vega-util "^1.7.0" - -vega-util@^1.10.0, vega-util@^1.7.0, vega-util@^1.8.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.10.0.tgz#edfd8c04f1d269f903976c228820153902c270d4" - integrity sha512-fTGnTG7FhtTG9tiYDL3k5s8YHqB71Ml5+aC9B7eaBygeB8GKXBrcbTXLOzoCRxT3Jr5cRhr99PMBu0AkqmhBog== - -vega-view-transforms@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/vega-view-transforms/-/vega-view-transforms-2.0.3.tgz#9999f83301efbe65ed1971018f538f5aeb62a16e" - integrity sha512-m42sP2G72KIIEhbno5P3wYXuGe4C5fj0ztfg1TrSEmGsIHOqoehRvte/1e9q/dV+1rB3TqfcWXgQVEDHCFLEvQ== - dependencies: - vega-dataflow "^4.0.4" - vega-scenegraph "^3.2.3" - vega-util "^1.7.0" - -vega-view@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/vega-view/-/vega-view-3.4.1.tgz#8f36fea88792b3b1ee3a535c5322dc7ecd975532" - integrity sha512-hT9Bj9qRCGz+4umid8tFuADyUF7xOHTQmeu18XtRgEkNOtTALlDYLmCSpcGkP1N6eeZm3aRWBtkUz/XE7/6d+Q== - dependencies: - d3-array "^2.0.2" - d3-timer "^1.0.9" - vega-dataflow "^4.1.0" - vega-parser "^3.9.0" - vega-runtime "^3.2.0" - vega-scenegraph "^3.2.3" - vega-util "^1.7.0" - -vega-voronoi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vega-voronoi/-/vega-voronoi-3.0.0.tgz#e83d014c0d8d083592d5246122e3a9d4af0ce434" - integrity sha512-ZkQw4UprxqiS3IjrdLOoQq1oEeH0REqWonf7Wz5zt2pKDHyMPlFX89EueoDYOKnfQjk9/7IiptBDK1ruAbDNiQ== - dependencies: - d3-voronoi "^1.1.2" - vega-dataflow "^4.0.0" - vega-util "^1.7.0" - -vega-wordcloud@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/vega-wordcloud/-/vega-wordcloud-3.0.0.tgz#3843d5233673a36a93f78c849d3c7568c1cdc2ce" - integrity sha512-/2F09L2tNTQ8aqK/ZLjd7m+fYwJR8/waE8YWuexLZob4+4BEByzqFfRMATE39ZpdTHOreCEQ5uUKyvv0qA6O0A== - dependencies: - vega-canvas "^1.0.1" - vega-dataflow "^4.0.0" - vega-scale "^2.1.1" - vega-statistics "^1.2.1" - vega-util "^1.7.0" - -vega@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/vega/-/vega-4.4.0.tgz#e27051278061da635e08478d94ef9299dd6923ec" - integrity sha512-siNRf6F3Ihoku0T9LebtaguWd88SVcf8yWJmHQUO5ZcZKREjTYO0LmLHUOH1plSEQSqHBAQPtAjQ3xZYQKgSdQ== - dependencies: - vega-lib "4.4.0" - vega-parser "3.9.0" - vega-typings "*" - yargs "12" - optionalDependencies: - canvas "^1.6.13" - canvas-prebuilt "1.6.11" - vm-browserify@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" @@ -6298,7 +5661,7 @@ warning@^4.0.2: dependencies: loose-envify "^1.0.0" -watchpack@^1.5.0: +watchpack@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== @@ -6331,10 +5694,10 @@ webpack-merge@^4.2.1: dependencies: lodash "^4.17.5" -webpack-sources@^1.1.0, webpack-sources@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" - integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.1.tgz#b91b2c5b1c4e890ff50d1d35b7fa3657040da1da" + integrity sha512-XSz38193PTo/1csJabKaV4b53uRVotlMgqJXm3s3eje0Bu6gQTxYDqpD38CmQfDBA+gN+QqaGjasuC8I/7eW3Q== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" @@ -6350,44 +5713,39 @@ webpack-visualizer-plugin@^0.1.11: react-dom "^0.14.0" webpack@^4.32.2: - version "4.38.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.38.0.tgz#6d77108404b08883c78f4e7e45a43c4e5c47c931" - integrity sha512-lbuFsVOq8PZY+1Ytz/mYOvYOo+d4IJ31hHk/7iyoeWtwN33V+5HYotSH+UIb9tq914ey0Hot7z6HugD+je3sWw== + version "4.39.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.39.1.tgz#60ed9fb2b72cd60f26ea526c404d2a4cc97a1bd8" + integrity sha512-/LAb2TJ2z+eVwisldp3dqTEoNhzp/TLCZlmZm3GGGAlnfIWDgOEE758j/9atklNLfRyhKbZTCOIoPqLJXeBLbQ== dependencies: "@webassemblyjs/ast" "1.8.5" "@webassemblyjs/helper-module-context" "1.8.5" "@webassemblyjs/wasm-edit" "1.8.5" "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.0" - ajv "^6.1.0" - ajv-keywords "^3.1.0" - chrome-trace-event "^1.0.0" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" enhanced-resolve "^4.1.0" - eslint-scope "^4.0.0" + eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" - loader-runner "^2.3.0" - loader-utils "^1.1.0" - memory-fs "~0.4.1" - micromatch "^3.1.8" - mkdirp "~0.5.0" - neo-async "^2.5.0" - node-libs-browser "^2.0.0" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" schema-utils "^1.0.0" - tapable "^1.1.0" - terser-webpack-plugin "^1.1.0" - watchpack "^1.5.0" - webpack-sources "^1.3.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.1" + watchpack "^1.6.0" + webpack-sources "^1.4.1" whatwg-fetch@>=0.10.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q== -whatwg-fetch@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" - integrity sha1-DjaExsuZlbQ+/J3wPkw2XZX9nMA= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -6419,14 +5777,6 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -6458,34 +5808,16 @@ xterm@~3.13.2: resolved "https://registry.yarnpkg.com/xterm/-/xterm-3.13.2.tgz#987c3a7fe3d23d6c03ce0eaf06c0554c38935570" integrity sha512-4utKoF16/pzH6+EkFaaay+qPCozf5RP2P0JuH6rvIGHY0CRwgU2LwbQ/24DY+TvaZ5m+kwvIUvPqIBoMZYfgOg== -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: +y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - yargs-parser@^13.1.0: version "13.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" @@ -6494,31 +5826,6 @@ yargs-parser@^13.1.0: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= - dependencies: - camelcase "^4.1.0" - -yargs@12: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - yargs@13.2.4: version "13.2.4" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" @@ -6536,24 +5843,6 @@ yargs@13.2.4: y18n "^4.0.0" yargs-parser "^13.1.0" -yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^2.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - yarn-deduplicate@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/yarn-deduplicate/-/yarn-deduplicate-1.1.1.tgz#19b4a87654b66f55bf3a4bd6b153b4e4ab1b6e6d" diff --git a/jupyterlab/tests/mock_packages/extension/package.json b/jupyterlab/tests/mock_packages/extension/package.json index 43252785b3e1..0b1e9fee2031 100644 --- a/jupyterlab/tests/mock_packages/extension/package.json +++ b/jupyterlab/tests/mock_packages/extension/package.json @@ -1,9 +1,9 @@ { "name": "@jupyterlab/mock-extension", - "version": "0.2.3", + "version": "0.3.0-alpha.1", "private": true, "dependencies": { - "@jupyterlab/launcher": "^1.0.2" + "@jupyterlab/launcher": "^1.1.0-alpha.1" }, "jupyterlab": { "extension": true diff --git a/jupyterlab/tests/test_jupyterlab.py b/jupyterlab/tests/test_jupyterlab.py index 4072de5c3cc9..947cdcda5941 100644 --- a/jupyterlab/tests/test_jupyterlab.py +++ b/jupyterlab/tests/test_jupyterlab.py @@ -5,6 +5,7 @@ # Distributed under the terms of the Modified BSD License. import glob import json +import logging import os import shutil import sys @@ -27,9 +28,9 @@ install_extension, uninstall_extension, list_extensions, build, link_package, unlink_package, build_check, disable_extension, enable_extension, get_app_info, - check_extension, _test_overlap, _get_core_data, - update_extension + check_extension, _test_overlap, update_extension ) +from jupyterlab.coreconfig import CoreConfig, _get_default_core_data here = os.path.dirname(os.path.abspath(__file__)) @@ -438,6 +439,51 @@ def test_build_custom(self): assert data['jupyterlab']['version'] == '1.0' assert data['jupyterlab']['staticUrl'] == 'bar' + def test_build_custom_minimal_core_config(self): + default_config = CoreConfig() + core_config = CoreConfig() + core_config.clear_packages() + logger = logging.getLogger('jupyterlab_test_logger') + logger.setLevel('DEBUG') + extensions = ( + '@jupyterlab/application-extension', + '@jupyterlab/apputils-extension', + ) + singletons = ( + "@jupyterlab/application", + "@jupyterlab/apputils", + "@jupyterlab/coreutils", + "@jupyterlab/services", + ) + for name in extensions: + semver = default_config.extensions[name] + core_config.add(name, semver, extension=True) + for name in singletons: + semver = default_config.singletons[name] + core_config.add(name, semver) + + assert install_extension(self.mock_extension) is True + build(core_config=core_config, logger=logger) + + # check static directory. + entry = pjoin(self.app_dir, 'static', 'index.out.js') + with open(entry) as fid: + data = fid.read() + assert self.pkg_names['extension'] in data + + pkg = pjoin(self.app_dir, 'static', 'package.json') + with open(pkg) as fid: + data = json.load(fid) + assert list(data['jupyterlab']['extensions'].keys()) == [ + '@jupyterlab/application-extension', + '@jupyterlab/apputils-extension', + self.pkg_names['extension'], + ] + assert data['jupyterlab']['mimeExtensions'] == {} + for pkg in data['jupyterlab']['singletonPackages']: + if pkg.startswith('@jupyterlab/'): + assert pkg in singletons + def test_load_extension(self): app = NotebookApp() stderr = sys.stderr @@ -536,7 +582,7 @@ def test_compatibility(self): assert _test_overlap('<0.6', '0.1') is None def test_install_compatible(self): - core_data = _get_core_data() + core_data = _get_default_core_data() current_app_dep = core_data['dependencies']['@jupyterlab/application'] def _gen_dep(ver): return { "dependencies": { diff --git a/package.json b/package.json index 0790ee3d7fbd..98273ec575d3 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "lerna": "^3.13.2", "lint-staged": "^8.1.5", "open-cli": "^5.0.0", - "prettier": "^1.17.0", + "prettier": "^1.18.2", "tslint": "^5.15.0", "tslint-config-prettier": "^1.18.0", "tslint-plugin-prettier": "^2.0.1", diff --git a/packages/application-extension/package.json b/packages/application-extension/package.json index 907d527c5c54..902626523c74 100644 --- a/packages/application-extension/package.json +++ b/packages/application-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/application-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Application Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,9 +36,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/widgets": "^1.8.0", "react": "~16.8.4" diff --git a/packages/application/package.json b/packages/application/package.json index bdaa95fb018f..f1a0ee521bda 100644 --- a/packages/application/package.json +++ b/packages/application/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/application", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Application", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,12 +36,13 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/application": "^1.6.3", "@phosphor/commands": "^1.6.3", diff --git a/packages/application/src/shell.ts b/packages/application/src/shell.ts index 25d3f821849b..ca9778a0cdae 100644 --- a/packages/application/src/shell.ts +++ b/packages/application/src/shell.ts @@ -5,6 +5,8 @@ import { Debouncer } from '@jupyterlab/coreutils'; import { DocumentRegistry } from '@jupyterlab/docregistry'; +import { DockPanelSvg, TabBarSvg } from '@jupyterlab/ui-components'; + import { ArrayExt, find, IIterator, iter, toArray } from '@phosphor/algorithm'; import { PromiseDelegate, Token } from '@phosphor/coreutils'; @@ -176,7 +178,9 @@ export class LabShell extends Widget implements JupyterFrontEnd.IShell { let bottomPanel = (this._bottomPanel = new BoxPanel()); let topPanel = (this._topPanel = new Panel()); let hboxPanel = new BoxPanel(); - let dockPanel = (this._dockPanel = new DockPanel()); + let dockPanel = (this._dockPanel = new DockPanelSvg({ + kind: 'dockPanelBar' + })); let headerPanel = (this._headerPanel = new Panel()); MessageLoop.installMessageHook(dockPanel, this._dockChildHook); @@ -1028,7 +1032,8 @@ namespace Private { * Construct a new side bar handler. */ constructor(side: string) { - this._sideBar = new TabBar({ + this._sideBar = new TabBarSvg({ + kind: 'sideBar', insertBehavior: 'none', removeBehavior: 'none', allowDeselect: true diff --git a/packages/application/style/icons.css b/packages/application/style/icons.css index 3b59b877e285..a21e91197379 100644 --- a/packages/application/style/icons.css +++ b/packages/application/style/icons.css @@ -3,6 +3,204 @@ | Distributed under the terms of the Modified BSD License. |----------------------------------------------------------------------------*/ +/** + * Support for icons as inline SVG HTMLElements + */ + +/* recolor the primary elements of an icon */ +.jp-icon0[fill] { + fill: var(--jp-inverse-layout-color0); +} +.jp-icon1[fill] { + fill: var(--jp-inverse-layout-color1); +} +.jp-icon2[fill] { + fill: var(--jp-inverse-layout-color2); +} +.jp-icon3[fill] { + fill: var(--jp-inverse-layout-color3); +} +.jp-icon4[fill] { + fill: var(--jp-inverse-layout-color4); +} + +.jp-icon0[stroke] { + stroke: var(--jp-inverse-layout-color0); +} +.jp-icon1[stroke] { + stroke: var(--jp-inverse-layout-color1); +} +.jp-icon2[stroke] { + stroke: var(--jp-inverse-layout-color2); +} +.jp-icon3[stroke] { + stroke: var(--jp-inverse-layout-color3); +} +.jp-icon4[stroke] { + stroke: var(--jp-inverse-layout-color4); +} + +/* recolor the accent elements of an icon */ +.jp-icon-accent0[fill] { + fill: var(--jp-layout-color0); +} +.jp-icon-accent1[fill] { + fill: var(--jp-layout-color1); +} +.jp-icon-accent2[fill] { + fill: var(--jp-layout-color2); +} +.jp-icon-accent3[fill] { + fill: var(--jp-layout-color3); +} +.jp-icon-accent4[fill] { + fill: var(--jp-layout-color4); +} + +.jp-icon-accent0[stroke] { + stroke: var(--jp-layout-color0); +} +.jp-icon-accent1[stroke] { + stroke: var(--jp-layout-color1); +} +.jp-icon-accent2[stroke] { + stroke: var(--jp-layout-color2); +} +.jp-icon-accent3[stroke] { + stroke: var(--jp-layout-color3); +} +.jp-icon-accent4[stroke] { + stroke: var(--jp-layout-color4); +} + +/* brand icon colors. Same for light and dark */ +.jp-icon-brand0[fill] { + fill: var(--jp-brand-color0); +} +.jp-icon-brand1[fill] { + fill: var(--jp-brand-color1); +} +.jp-icon-brand2[fill] { + fill: var(--jp-brand-color2); +} +.jp-icon-brand3[fill] { + fill: var(--jp-brand-color3); +} +.jp-icon-brand4[fill] { + fill: var(--jp-brand-color4); +} + +.jp-icon-brand0[stroke] { + stroke: var(--jp-brand-color0); +} +.jp-icon-brand1[stroke] { + stroke: var(--jp-brand-color1); +} +.jp-icon-brand2[stroke] { + stroke: var(--jp-brand-color2); +} +.jp-icon-brand3[stroke] { + stroke: var(--jp-brand-color3); +} +.jp-icon-brand4[stroke] { + stroke: var(--jp-brand-color4); +} + +/* warn icon colors. Same for light and dark */ +.jp-icon-warn0[fill] { + fill: var(--jp-warn-color0); +} +.jp-icon-warn1[fill] { + fill: var(--jp-warn-color1); +} +.jp-icon-warn2[fill] { + fill: var(--jp-warn-color2); +} +.jp-icon-warn3[fill] { + fill: var(--jp-warn-color3); +} + +.jp-icon-warn0[stroke] { + stroke: var(--jp-warn-color0); +} +.jp-icon-warn1[stroke] { + stroke: var(--jp-warn-color1); +} +.jp-icon-warn2[stroke] { + stroke: var(--jp-warn-color2); +} +.jp-icon-warn3[stroke] { + stroke: var(--jp-warn-color3); +} + +/* icon colors that contrast well with each other and most backgrounds */ +.jp-icon-contrast0[fill] { + fill: var(--jp-icon-contrast-color0); +} +.jp-icon-contrast1[fill] { + fill: var(--jp-icon-contrast-color1); +} +.jp-icon-contrast2[fill] { + fill: var(--jp-icon-contrast-color2); +} +.jp-icon-contrast3[fill] { + fill: var(--jp-icon-contrast-color3); +} + +.jp-icon-contrast0[stroke] { + stroke: var(--jp-icon-contrast-color0); +} +.jp-icon-contrast1[stroke] { + stroke: var(--jp-icon-contrast-color1); +} +.jp-icon-contrast2[stroke] { + stroke: var(--jp-icon-contrast-color2); +} +.jp-icon-contrast3[stroke] { + stroke: var(--jp-icon-contrast-color3); +} + +/* CSS for icons in selected items in the settings editor */ +#setting-editor .jp-PluginList .jp-mod-selected .jp-icon-selectable[fill] { + fill: white; +} + +#setting-editor + .jp-PluginList + .jp-mod-selected + .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* CSS for icons in selected filebrowser listing items */ +.jp-DirListing-item.jp-mod-selected .jp-icon-selectable[fill] { + fill: white; +} + +.jp-DirListing-item.jp-mod-selected .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* CSS for icons in selected tabs in the sidebar tab manager */ +#tab-manager .p-TabBar-tab.jp-mod-active .jp-icon-selectable[fill] { + fill: white; +} + +#tab-manager .p-TabBar-tab.jp-mod-active .jp-icon-selectable-inverse[fill] { + fill: var(--jp-brand-color1); +} + +/* special handling for splash icon CSS. While the theme CSS reloads during + splash, the splash icon can loose theming. To prevent that, we set a + default for its color variable */ +:root { + --jp-warn-color0: var(--md-orange-700); +} + +/** + * (DEPRECATED) Support for icons as CSS `background-images` + */ + .jp-MaterialIcon { min-width: 16px; min-height: 16px; @@ -95,12 +293,8 @@ background-image: var(--jp-icon-ellipses); } -.jp-ExtensionIcon { - background-image: var(--jp-icon-extension); -} - -.jp-FileIcon { - background-image: var(--jp-icon-file); +.jp-FileUploadIcon { + background-image: var(--jp-icon-file-upload); } .jp-FilledCircleIcon { @@ -111,10 +305,6 @@ background-image: var(--jp-icon-filter-list); } -.jp-FolderIcon { - background-image: var(--jp-icon-folder); -} - .jp-HomeIcon { background-image: var(--jp-icon-home); min-width: 16px; @@ -123,14 +313,6 @@ vertical-align: sub; } -.jp-ImageIcon { - background-image: var(--jp-icon-image); -} - -.jp-JSONIcon { - background-image: var(--jp-icon-json); -} - .jp-JupyterIcon { background-image: var(--jp-image-jupyter); background-size: 16px; @@ -140,10 +322,6 @@ padding-right: 0px; } -.jp-KernelIcon { - background-image: var(--jp-icon-kernel); -} - .jp-KeyboardIcon { background-image: var(--jp-icon-keyboard); } @@ -169,10 +347,6 @@ width: 20px; } -.jp-MarkdownIcon { - background-image: var(--jp-icon-markdown); -} - .jp-MoreHorizIcon { background-image: var(--jp-icon-more); } @@ -181,30 +355,10 @@ background-image: var(--jp-icon-new-folder); } -.jp-NotebookIcon { - background-image: var(--jp-icon-notebook); -} - -.jp-FolderIcon { - background-image: var(--jp-icon-folder); -} - -.jp-PaletteIcon { - background-image: var(--jp-icon-palette); -} - .jp-PasteIcon { background-image: var(--jp-icon-paste); } -.jp-PythonIcon { - background-image: var(--jp-icon-python); -} - -.jp-RKernelIcon { - background-image: var(--jp-icon-r); -} - .jp-RefreshIcon { background-image: var(--jp-icon-refresh); } @@ -213,10 +367,6 @@ background-image: var(--jp-icon-run); } -.jp-RunningIcon { - background-image: var(--jp-icon-stop-circle); -} - .jp-SaveIcon { background-image: var(--jp-icon-save); } @@ -225,22 +375,10 @@ background-image: var(--jp-icon-settings); } -.jp-SpreadsheetIcon { - background-image: var(--jp-icon-spreadsheet); -} - .jp-StopIcon { background-image: var(--jp-icon-stop); } -.jp-TabIcon { - background-image: var(--jp-icon-tab); -} - -.jp-TerminalIcon { - background-image: var(--jp-icon-terminal); -} - .jp-TextEditorIcon { background-image: var(--jp-icon-text-editor); } @@ -249,14 +387,6 @@ background-image: var(--jp-icon-undo); } -.jp-FileUploadIcon { - background-image: var(--jp-icon-file-upload); -} - -.jp-YAMLIcon { - background-image: var(--jp-icon-yaml); -} - .jp-VegaIcon { background-image: var(--jp-icon-vega); } diff --git a/packages/application/style/images.css b/packages/application/style/images.css index 6c966fe3036f..51cedf03ee4b 100644 --- a/packages/application/style/images.css +++ b/packages/application/style/images.css @@ -3,6 +3,8 @@ | Distributed under the terms of the Modified BSD License. |----------------------------------------------------------------------------*/ +/* CSS for specific icons */ + .jp-ImageJupyterLab { background-image: var(--jp-image-jupyterlab); } @@ -11,10 +13,6 @@ background-image: var(--jp-image-jupyterlab-wordmark); } -.jp-ImageJupyter-favicon { - background-image: var(--jp-image-jupyter-favicon); -} - .jp-JupyterIcon { background-image: var(--jp-image-jupyter); background-size: 16px; diff --git a/packages/application/style/index.css b/packages/application/style/index.css index 664fa92bba98..6ece208121b6 100644 --- a/packages/application/style/index.css +++ b/packages/application/style/index.css @@ -5,6 +5,7 @@ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ @import url('~@phosphor/widgets/style/index.css'); +@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@jupyterlab/apputils/style/index.css'); @import url('~@jupyterlab/docregistry/style/index.css'); @import url('~font-awesome/css/font-awesome.min.css'); diff --git a/packages/application/tsconfig.json b/packages/application/tsconfig.json index 3dfa87de215c..27ada107b7cf 100644 --- a/packages/application/tsconfig.json +++ b/packages/application/tsconfig.json @@ -23,6 +23,9 @@ }, { "path": "../services" + }, + { + "path": "../ui-components" } ] } diff --git a/packages/apputils-extension/package.json b/packages/apputils-extension/package.json index 37e83978565e..9dac53222948 100644 --- a/packages/apputils-extension/package.json +++ b/packages/apputils-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/apputils-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Application Utilities Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -37,10 +37,11 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/mainmenu": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", diff --git a/packages/apputils-extension/src/index.ts b/packages/apputils-extension/src/index.ts index e447f9540b69..c07def7b84f6 100644 --- a/packages/apputils-extension/src/index.ts +++ b/packages/apputils-extension/src/index.ts @@ -34,6 +34,8 @@ import { import { IMainMenu } from '@jupyterlab/mainmenu'; +import { defaultIconRegistry } from '@jupyterlab/ui-components'; + import { PromiseDelegate } from '@phosphor/coreutils'; import { DisposableDelegate } from '@phosphor/disposable'; @@ -291,6 +293,13 @@ const splash: JupyterFrontEndPlugin = { galaxy.id = 'galaxy'; logo.id = 'main-logo'; + defaultIconRegistry.icon({ + name: 'jupyter-favicon', + container: logo, + center: true, + kind: 'splash' + }); + galaxy.appendChild(logo); ['1', '2', '3'].forEach(id => { const moon = document.createElement('div'); diff --git a/packages/apputils-extension/style/images/jupyter-favicon.svg b/packages/apputils-extension/style/images/jupyter-favicon.svg deleted file mode 100644 index 41d846fc9d5f..000000000000 --- a/packages/apputils-extension/style/images/jupyter-favicon.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - logo - Created with Sketch. - - - - - \ No newline at end of file diff --git a/packages/apputils-extension/style/index.css b/packages/apputils-extension/style/index.css index 39f879fb3639..0f1065092855 100644 --- a/packages/apputils-extension/style/index.css +++ b/packages/apputils-extension/style/index.css @@ -5,6 +5,7 @@ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ @import url('~@phosphor/widgets/style/index.css'); +@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@jupyterlab/apputils/style/index.css'); @import url('~@jupyterlab/application/style/index.css'); @import url('~@jupyterlab/mainmenu/style/index.css'); diff --git a/packages/apputils-extension/style/splash.css b/packages/apputils-extension/style/splash.css index c810edccd31b..891adef97267 100644 --- a/packages/apputils-extension/style/splash.css +++ b/packages/apputils-extension/style/splash.css @@ -33,18 +33,6 @@ height: 100%; } -#main-logo { - background-image: url('./images/jupyter-favicon.svg'); - background-repeat: no-repeat; - background-size: 100px; - position: absolute; - background-position: center; - width: 100%; - height: 100%; - z-index: 1; - animation: 0.3s fade-in linear forwards; -} - .planet { background-repeat: no-repeat; background-size: cover; diff --git a/packages/apputils-extension/tsconfig.json b/packages/apputils-extension/tsconfig.json index 17ecbea70fb2..298728e8d135 100644 --- a/packages/apputils-extension/tsconfig.json +++ b/packages/apputils-extension/tsconfig.json @@ -17,6 +17,9 @@ }, { "path": "../mainmenu" + }, + { + "path": "../ui-components" } ] } diff --git a/packages/apputils/package.json b/packages/apputils/package.json index eef0455dbad8..accc9ac3654b 100644 --- a/packages/apputils/package.json +++ b/packages/apputils/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/apputils", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Application Utilities", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,9 +35,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/ui-components": "^1.0.0", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", diff --git a/packages/apputils/src/domutils.ts b/packages/apputils/src/domutils.ts index 8237b231f50f..ee14f99fdc98 100644 --- a/packages/apputils/src/domutils.ts +++ b/packages/apputils/src/domutils.ts @@ -34,6 +34,18 @@ export namespace DOMUtils { return parent.querySelector(`.${className}`) as HTMLElement; } + /** + * Find the first element matching a class name. + */ + export function findElements( + parent: HTMLElement, + className: string + ): HTMLCollectionOf { + return parent.getElementsByClassName(className) as HTMLCollectionOf< + HTMLElement + >; + } + /** * Create a DOM id with prefix "id-" to solve bug for UUIDs beginning with numbers. */ diff --git a/packages/apputils/style/index.css b/packages/apputils/style/index.css index 9a38dcba26bc..38810a9cb009 100644 --- a/packages/apputils/style/index.css +++ b/packages/apputils/style/index.css @@ -4,7 +4,7 @@ |----------------------------------------------------------------------------*/ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ -@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@phosphor/widgets/style/index.css'); +@import url('~@jupyterlab/ui-components/style/index.css'); @import url('./base.css'); diff --git a/packages/attachments/package.json b/packages/attachments/package.json index 3bbc045ac7ee..be8f5cf58102 100644 --- a/packages/attachments/package.json +++ b/packages/attachments/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/attachments", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Notebook Cell Attachments", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,10 +35,10 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", "@phosphor/disposable": "^1.2.0", "@phosphor/signaling": "^1.2.3" }, diff --git a/packages/cells/package.json b/packages/cells/package.json index 1bbd94cd0455..9179a25eb248 100644 --- a/packages/cells/package.json +++ b/packages/cells/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/cells", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Notebook Cells", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,15 +35,15 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/attachments": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/outputarea": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/attachments": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/outputarea": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/packages/codeeditor/package.json b/packages/codeeditor/package.json index 706c4bd645b1..f67d35de2ba3 100644 --- a/packages/codeeditor/package.json +++ b/packages/codeeditor/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/codeeditor", - "version": "1.0.0", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Abstract Code Editor", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,8 +35,8 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", "@phosphor/dragdrop": "^1.3.3", diff --git a/packages/codemirror-extension/package.json b/packages/codemirror-extension/package.json index 308a497054ac..dd89d53e2726 100644 --- a/packages/codemirror-extension/package.json +++ b/packages/codemirror-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/codemirror-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - CodeMirror Provider Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,14 +36,14 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", "@phosphor/widgets": "^1.8.0", "codemirror": "~5.47.0" }, diff --git a/packages/codemirror-extension/src/index.ts b/packages/codemirror-extension/src/index.ts index 16c0e1a5f3ad..f07a96c45419 100644 --- a/packages/codemirror-extension/src/index.ts +++ b/packages/codemirror-extension/src/index.ts @@ -71,13 +71,18 @@ const commands: JupyterFrontEndPlugin = { export const editorSyntaxStatus: JupyterFrontEndPlugin = { id: '@jupyterlab/codemirror-extension:editor-syntax-status', autoStart: true, - requires: [IStatusBar, IEditorTracker, ILabShell], + requires: [IEditorTracker, ILabShell], + optional: [IStatusBar], activate: ( app: JupyterFrontEnd, - statusBar: IStatusBar, tracker: IEditorTracker, - labShell: ILabShell + labShell: ILabShell, + statusBar: IStatusBar | null ) => { + if (!statusBar) { + // Automatically disable if statusbar missing + return; + } let item = new EditorSyntaxStatus({ commands: app.commands }); labShell.currentChanged.connect(() => { const current = labShell.currentWidget; diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index 5e9a08ecbd60..91843b782eeb 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/codemirror", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - CodeMirror Editor Provider", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -33,11 +33,11 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", diff --git a/packages/completer-extension/package.json b/packages/completer-extension/package.json index da16c0f0f437..be93a9246e87 100644 --- a/packages/completer-extension/package.json +++ b/packages/completer-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/completer-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Completer Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,12 +36,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/completer": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/completer": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/widgets": "^1.8.0" }, diff --git a/packages/completer/package.json b/packages/completer/package.json index 1328454ff960..42b571401d4f 100644 --- a/packages/completer/package.json +++ b/packages/completer/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/completer", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Completer", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,10 +35,10 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/console-extension/package.json b/packages/console-extension/package.json index 5c96e25bb403..c563cf6d65a8 100644 --- a/packages/console-extension/package.json +++ b/packages/console-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/console-extension", - "version": "1.0.3", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Code Console Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,15 +36,15 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/launcher": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/filebrowser": "^1.1.0-alpha.1", + "@jupyterlab/launcher": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/console/package.json b/packages/console/package.json index 4c3e5c68da57..3e9d1c9601cc 100644 --- a/packages/console/package.json +++ b/packages/console/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/console", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Code Console", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,13 +35,13 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/coreutils/package.json b/packages/coreutils/package.json index c81e083c3e47..cfc65cf03ad7 100644 --- a/packages/coreutils/package.json +++ b/packages/coreutils/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/coreutils", - "version": "3.0.0", + "version": "3.1.0-alpha.1", "description": "JupyterLab - Core Utilities", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { diff --git a/packages/coreutils/src/path.ts b/packages/coreutils/src/path.ts index b7ee7919dce7..db1b57d12514 100644 --- a/packages/coreutils/src/path.ts +++ b/packages/coreutils/src/path.ts @@ -61,6 +61,23 @@ export namespace PathExt { return posix.extname(path); } + /** + * Get the last portion of a path, without its extension (if any). + * + * @param path - The file path. + * + * @returns the last part of the path, sans extension. + */ + export function stem(path: string): string { + return path + .split('\\') + .pop() + .split('/') + .pop() + .split('.') + .shift(); + } + /** * Normalize a string path, reducing '..' and '.' parts. * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. diff --git a/packages/coreutils/src/text.ts b/packages/coreutils/src/text.ts index ef8de712b5fb..7892a1b11a7e 100644 --- a/packages/coreutils/src/text.ts +++ b/packages/coreutils/src/text.ts @@ -71,6 +71,29 @@ export namespace Text { return jsIdx; } + /** + * Given a 'snake-case', 'snake_case', or 'snake case' string, + * will return the camel case version: 'snakeCase'. + * + * @param str: the snake-case input string. + * + * @param upper: default = false. If true, the first letter of the + * returned string will be capitalized. + * + * @returns the camel case version of the input string. + */ + export function camelCase(str: string, upper: boolean = false): string { + return str.replace(/(?:^\w|[A-Z]|\b\w|\s+|-+|_+)/g, function(match, index) { + if (+match === 0 || match[0] === '-') { + return ''; + } else if (index === 0 && !upper) { + return match.toLowerCase(); + } else { + return match.toUpperCase(); + } + }); + } + /** * Given a string, title case the words in the string. * diff --git a/packages/csvviewer-extension/package.json b/packages/csvviewer-extension/package.json index 567e56294f15..ac1534cd12f8 100644 --- a/packages/csvviewer-extension/package.json +++ b/packages/csvviewer-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/csvviewer-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - CSV Widget Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,12 +35,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/csvviewer": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/documentsearch": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/csvviewer": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/documentsearch": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", "@phosphor/datagrid": "^0.1.9", "@phosphor/signaling": "^1.2.3", "@phosphor/widgets": "^1.8.0" diff --git a/packages/csvviewer-extension/src/index.ts b/packages/csvviewer-extension/src/index.ts index db69d5773750..a8f21c14b66c 100644 --- a/packages/csvviewer-extension/src/index.ts +++ b/packages/csvviewer-extension/src/index.ts @@ -35,8 +35,13 @@ const FACTORY_TSV = 'TSVTable'; const csv: JupyterFrontEndPlugin = { activate: activateCsv, id: '@jupyterlab/csvviewer-extension:csv', - requires: [ILayoutRestorer, IThemeManager, IMainMenu], - optional: [ISearchProviderRegistry], + requires: [], + optional: [ + ILayoutRestorer, + IThemeManager, + IMainMenu, + ISearchProviderRegistry + ], autoStart: true }; @@ -46,8 +51,13 @@ const csv: JupyterFrontEndPlugin = { const tsv: JupyterFrontEndPlugin = { activate: activateTsv, id: '@jupyterlab/csvviewer-extension:tsv', - requires: [ILayoutRestorer, IThemeManager, IMainMenu], - optional: [ISearchProviderRegistry], + requires: [], + optional: [ + ILayoutRestorer, + IThemeManager, + IMainMenu, + ISearchProviderRegistry + ], autoStart: true }; @@ -66,7 +76,7 @@ function addMenuEntries( title: 'Go to Line', value: 0 }).then(value => { - if (value.button.accept) { + if (value.button.accept && value.value !== null) { widget.content.goToLine(value.value); } }); @@ -79,10 +89,10 @@ function addMenuEntries( */ function activateCsv( app: JupyterFrontEnd, - restorer: ILayoutRestorer, - themeManager: IThemeManager, - mainMenu: IMainMenu, - searchregistry: ISearchProviderRegistry = null + restorer: ILayoutRestorer | null, + themeManager: IThemeManager | null, + mainMenu: IMainMenu | null, + searchregistry: ISearchProviderRegistry | null ): void { const factory = new CSVViewerFactory({ name: FACTORY_CSV, @@ -98,12 +108,14 @@ function activateCsv( let style: DataGrid.IStyle = Private.LIGHT_STYLE; let rendererConfig: TextRenderConfig = Private.LIGHT_TEXT_CONFIG; - // Handle state restoration. - void restorer.restore(tracker, { - command: 'docmanager:open', - args: widget => ({ path: widget.context.path, factory: FACTORY_CSV }), - name: widget => widget.context.path - }); + if (restorer) { + // Handle state restoration. + void restorer.restore(tracker, { + command: 'docmanager:open', + args: widget => ({ path: widget.context.path, factory: FACTORY_CSV }), + name: widget => widget.context.path + }); + } app.docRegistry.addWidgetFactory(factory); let ft = app.docRegistry.getFileType('csv'); @@ -116,8 +128,8 @@ function activateCsv( }); if (ft) { - widget.title.iconClass = ft.iconClass; - widget.title.iconLabel = ft.iconLabel; + widget.title.iconClass = ft.iconClass!; + widget.title.iconLabel = ft.iconLabel!; } // Set the theme for the new widget. widget.content.style = style; @@ -126,7 +138,10 @@ function activateCsv( // Keep the themes up-to-date. const updateThemes = () => { - const isLight = themeManager.isLight(themeManager.theme); + const isLight = + themeManager && themeManager.theme + ? themeManager.isLight(themeManager.theme) + : true; style = isLight ? Private.LIGHT_STYLE : Private.DARK_STYLE; rendererConfig = isLight ? Private.LIGHT_TEXT_CONFIG @@ -136,9 +151,13 @@ function activateCsv( grid.content.rendererConfig = rendererConfig; }); }; - themeManager.themeChanged.connect(updateThemes); + if (themeManager) { + themeManager.themeChanged.connect(updateThemes); + } - addMenuEntries(mainMenu, tracker); + if (mainMenu) { + addMenuEntries(mainMenu, tracker); + } if (searchregistry) { searchregistry.register('csv', CSVSearchProvider); } @@ -149,10 +168,10 @@ function activateCsv( */ function activateTsv( app: JupyterFrontEnd, - restorer: ILayoutRestorer, - themeManager: IThemeManager, - mainMenu: IMainMenu, - searchregistry: ISearchProviderRegistry = null + restorer: ILayoutRestorer | null, + themeManager: IThemeManager | null, + mainMenu: IMainMenu | null, + searchregistry: ISearchProviderRegistry | null ): void { const factory = new TSVViewerFactory({ name: FACTORY_TSV, @@ -168,12 +187,14 @@ function activateTsv( let style: DataGrid.IStyle = Private.LIGHT_STYLE; let rendererConfig: TextRenderConfig = Private.LIGHT_TEXT_CONFIG; - // Handle state restoration. - void restorer.restore(tracker, { - command: 'docmanager:open', - args: widget => ({ path: widget.context.path, factory: FACTORY_TSV }), - name: widget => widget.context.path - }); + if (restorer) { + // Handle state restoration. + void restorer.restore(tracker, { + command: 'docmanager:open', + args: widget => ({ path: widget.context.path, factory: FACTORY_TSV }), + name: widget => widget.context.path + }); + } app.docRegistry.addWidgetFactory(factory); let ft = app.docRegistry.getFileType('tsv'); @@ -186,8 +207,8 @@ function activateTsv( }); if (ft) { - widget.title.iconClass = ft.iconClass; - widget.title.iconLabel = ft.iconLabel; + widget.title.iconClass = ft.iconClass!; + widget.title.iconLabel = ft.iconLabel!; } // Set the theme for the new widget. widget.content.style = style; @@ -196,7 +217,10 @@ function activateTsv( // Keep the themes up-to-date. const updateThemes = () => { - const isLight = themeManager.isLight(themeManager.theme); + const isLight = + themeManager && themeManager.theme + ? themeManager.isLight(themeManager.theme) + : true; style = isLight ? Private.LIGHT_STYLE : Private.DARK_STYLE; rendererConfig = isLight ? Private.LIGHT_TEXT_CONFIG @@ -206,9 +230,13 @@ function activateTsv( grid.content.rendererConfig = rendererConfig; }); }; - themeManager.themeChanged.connect(updateThemes); + if (themeManager) { + themeManager.themeChanged.connect(updateThemes); + } - addMenuEntries(mainMenu, tracker); + if (mainMenu) { + addMenuEntries(mainMenu, tracker); + } if (searchregistry) { searchregistry.register('tsv', CSVSearchProvider); } diff --git a/packages/csvviewer/package.json b/packages/csvviewer/package.json index 842f2fb264c6..7c1df1d7bf91 100644 --- a/packages/csvviewer/package.json +++ b/packages/csvviewer/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/csvviewer", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - CSV Widget", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,9 +35,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/datagrid": "^0.1.9", diff --git a/packages/docmanager-extension/package.json b/packages/docmanager-extension/package.json index 395aa43996b8..a2905cd9efc2 100644 --- a/packages/docmanager-extension/package.json +++ b/packages/docmanager-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/docmanager-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Document Manager Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,14 +36,14 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/disposable": "^1.2.0", "@phosphor/widgets": "^1.8.0" diff --git a/packages/docmanager-extension/src/index.ts b/packages/docmanager-extension/src/index.ts index d1fec3d07a71..0e52205b8457 100644 --- a/packages/docmanager-extension/src/index.ts +++ b/packages/docmanager-extension/src/index.ts @@ -167,13 +167,18 @@ const docManagerPlugin: JupyterFrontEndPlugin = { export const savingStatusPlugin: JupyterFrontEndPlugin = { id: '@jupyterlab/docmanager-extension:saving-status', autoStart: true, - requires: [IStatusBar, IDocumentManager, ILabShell], + requires: [IDocumentManager, ILabShell], + optional: [IStatusBar], activate: ( _: JupyterFrontEnd, - statusBar: IStatusBar, docManager: IDocumentManager, - labShell: ILabShell + labShell: ILabShell, + statusBar: IStatusBar | null ) => { + if (!statusBar) { + // Automatically disable if statusbar missing + return; + } const saving = new SavingStatus({ docManager }); // Keep the currently active widget synchronized. @@ -197,13 +202,18 @@ export const savingStatusPlugin: JupyterFrontEndPlugin = { export const pathStatusPlugin: JupyterFrontEndPlugin = { id: '@jupyterlab/docmanager-extension:path-status', autoStart: true, - requires: [IStatusBar, IDocumentManager, ILabShell], + requires: [IDocumentManager, ILabShell], + optional: [IStatusBar], activate: ( _: JupyterFrontEnd, - statusBar: IStatusBar, docManager: IDocumentManager, - labShell: ILabShell + labShell: ILabShell, + statusBar: IStatusBar | null ) => { + if (!statusBar) { + // Automatically disable if statusbar missing + return; + } const path = new PathStatus({ docManager }); // Keep the file path widget up-to-date with the application active widget. diff --git a/packages/docmanager/package.json b/packages/docmanager/package.json index 029b71549fbe..b8da8b272c08 100644 --- a/packages/docmanager/package.json +++ b/packages/docmanager/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/docmanager", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Document Manager", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,11 +35,11 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/docregistry/package.json b/packages/docregistry/package.json index 2b1d9548f795..cc9070e45573 100644 --- a/packages/docregistry/package.json +++ b/packages/docregistry/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/docregistry", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Document Registry", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,14 +35,14 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/docregistry/src/registry.ts b/packages/docregistry/src/registry.ts index f234672f5963..cebc01a43648 100644 --- a/packages/docregistry/src/registry.ts +++ b/packages/docregistry/src/registry.ts @@ -1120,7 +1120,7 @@ export namespace DocumentRegistry { name: 'default', extensions: [], mimeTypes: [], - iconClass: 'jp-MaterialIcon jp-FileIcon', + iconClass: 'jp-FileIcon', iconLabel: '', contentType: 'file', fileFormat: 'text' @@ -1171,7 +1171,7 @@ export namespace DocumentRegistry { extensions: ['.ipynb'], contentType: 'notebook', fileFormat: 'json', - iconClass: 'jp-MaterialIcon jp-NotebookIcon' + iconClass: 'jp-NotebookIcon' }; /** @@ -1183,7 +1183,7 @@ export namespace DocumentRegistry { extensions: [], mimeTypes: ['text/directory'], contentType: 'directory', - iconClass: 'jp-MaterialIcon jp-FolderIcon' + iconClass: 'jp-FolderIcon' }; /** @@ -1198,56 +1198,56 @@ export namespace DocumentRegistry { displayName: 'Markdown File', extensions: ['.md'], mimeTypes: ['text/markdown'], - iconClass: 'jp-MaterialIcon jp-MarkdownIcon' + iconClass: 'jp-MarkdownIcon' }, { name: 'python', displayName: 'Python File', extensions: ['.py'], mimeTypes: ['text/x-python'], - iconClass: 'jp-MaterialIcon jp-PythonIcon' + iconClass: 'jp-PythonIcon' }, { name: 'json', displayName: 'JSON File', extensions: ['.json'], mimeTypes: ['application/json'], - iconClass: 'jp-MaterialIcon jp-JSONIcon' + iconClass: 'jp-JsonIcon' }, { name: 'csv', displayName: 'CSV File', extensions: ['.csv'], mimeTypes: ['text/csv'], - iconClass: 'jp-MaterialIcon jp-SpreadsheetIcon' + iconClass: 'jp-SpreadsheetIcon' }, { name: 'tsv', displayName: 'TSV File', extensions: ['.tsv'], mimeTypes: ['text/csv'], - iconClass: 'jp-MaterialIcon jp-SpreadsheetIcon' + iconClass: 'jp-SpreadsheetIcon' }, { name: 'r', displayName: 'R File', mimeTypes: ['text/x-rsrc'], extensions: ['.r'], - iconClass: 'jp-MaterialIcon jp-RKernelIcon' + iconClass: 'jp-RKernelIcon' }, { name: 'yaml', displayName: 'YAML File', mimeTypes: ['text/x-yaml', 'text/yaml'], extensions: ['.yaml', '.yml'], - iconClass: 'jp-MaterialIcon jp-YAMLIcon' + iconClass: 'jp-YamlIcon' }, { name: 'svg', displayName: 'Image', mimeTypes: ['image/svg+xml'], extensions: ['.svg'], - iconClass: 'jp-MaterialIcon jp-ImageIcon', + iconClass: 'jp-ImageIcon', fileFormat: 'base64' }, { @@ -1255,7 +1255,7 @@ export namespace DocumentRegistry { displayName: 'Image', mimeTypes: ['image/tiff'], extensions: ['.tif', '.tiff'], - iconClass: 'jp-MaterialIcon jp-ImageIcon', + iconClass: 'jp-ImageIcon', fileFormat: 'base64' }, { @@ -1263,7 +1263,7 @@ export namespace DocumentRegistry { displayName: 'Image', mimeTypes: ['image/jpeg'], extensions: ['.jpg', '.jpeg'], - iconClass: 'jp-MaterialIcon jp-ImageIcon', + iconClass: 'jp-ImageIcon', fileFormat: 'base64' }, { @@ -1271,7 +1271,7 @@ export namespace DocumentRegistry { displayName: 'Image', mimeTypes: ['image/gif'], extensions: ['.gif'], - iconClass: 'jp-MaterialIcon jp-ImageIcon', + iconClass: 'jp-ImageIcon', fileFormat: 'base64' }, { @@ -1279,7 +1279,7 @@ export namespace DocumentRegistry { displayName: 'Image', mimeTypes: ['image/png'], extensions: ['.png'], - iconClass: 'jp-MaterialIcon jp-ImageIcon', + iconClass: 'jp-ImageIcon', fileFormat: 'base64' }, { @@ -1287,7 +1287,7 @@ export namespace DocumentRegistry { displayName: 'Image', mimeTypes: ['image/bmp'], extensions: ['.bmp'], - iconClass: 'jp-MaterialIcon jp-ImageIcon', + iconClass: 'jp-ImageIcon', fileFormat: 'base64' } ]; diff --git a/packages/documentsearch-extension/package.json b/packages/documentsearch-extension/package.json index d54082a39e3d..d56fbb5f2d24 100644 --- a/packages/documentsearch-extension/package.json +++ b/packages/documentsearch-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/documentsearch-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "Search document types", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -33,10 +33,10 @@ "watch": "tsc -w --listEmittedFiles" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/documentsearch": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/documentsearch": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", "@phosphor/widgets": "^1.8.0" }, "devDependencies": { diff --git a/packages/documentsearch/package.json b/packages/documentsearch/package.json index dbc37177d782..a9aa7a73a020 100644 --- a/packages/documentsearch/package.json +++ b/packages/documentsearch/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/documentsearch", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "Document Search", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -32,13 +32,13 @@ "watch": "tsc -w --listEmittedFiles" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", "@phosphor/signaling": "^1.2.3", diff --git a/packages/extensionmanager-extension/package.json b/packages/extensionmanager-extension/package.json index 4e5922b66bb0..ac37853488d4 100644 --- a/packages/extensionmanager-extension/package.json +++ b/packages/extensionmanager-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/extensionmanager-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Extension Manager Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,11 +36,11 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/extensionmanager": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/extensionmanager": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/extensionmanager/package.json b/packages/extensionmanager/package.json index 6ffe3ebd5c55..6ec38370a1cf 100644 --- a/packages/extensionmanager/package.json +++ b/packages/extensionmanager/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/extensionmanager", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Extension Manager", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,9 +35,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/ui-components": "^1.0.0", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/messaging": "^1.2.3", "react": "~16.8.4", "react-paginate": "^6.3.0", diff --git a/packages/filebrowser-extension/package.json b/packages/filebrowser-extension/package.json index ab8798f1b3b2..944e08b9d03c 100644 --- a/packages/filebrowser-extension/package.json +++ b/packages/filebrowser-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/filebrowser-extension", - "version": "1.0.4", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Filebrowser Widget Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,15 +36,16 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/launcher": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser": "^1.1.0-alpha.1", + "@jupyterlab/launcher": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/messaging": "^1.2.3", diff --git a/packages/filebrowser-extension/src/index.ts b/packages/filebrowser-extension/src/index.ts index 50f5b6b4db22..9ec7efe84655 100644 --- a/packages/filebrowser-extension/src/index.ts +++ b/packages/filebrowser-extension/src/index.ts @@ -43,6 +43,8 @@ import { Contents } from '@jupyterlab/services'; import { IStatusBar } from '@jupyterlab/statusbar'; +import { IIconRegistry } from '@jupyterlab/ui-components'; + import { IIterator, map, reduce, toArray } from '@phosphor/algorithm'; import { CommandRegistry } from '@phosphor/commands'; @@ -128,7 +130,7 @@ const factory: JupyterFrontEndPlugin = { activate: activateFactory, id: '@jupyterlab/filebrowser-extension:factory', provides: IFileBrowserFactory, - requires: [IDocumentManager, IStateDB] + requires: [IIconRegistry, IDocumentManager, IStateDB] }; /** @@ -155,12 +157,17 @@ const shareFile: JupyterFrontEndPlugin = { export const fileUploadStatus: JupyterFrontEndPlugin = { id: '@jupyterlab/filebrowser-extension:file-upload-status', autoStart: true, - requires: [IStatusBar, IFileBrowserFactory], + requires: [IFileBrowserFactory], + optional: [IStatusBar], activate: ( app: JupyterFrontEnd, - statusBar: IStatusBar, - browser: IFileBrowserFactory + browser: IFileBrowserFactory, + statusBar: IStatusBar | null ) => { + if (!statusBar) { + // Automatically disable if statusbar missing + return; + } const item = new FileUploadStatus({ tracker: browser.tracker }); @@ -200,6 +207,7 @@ export default plugins; */ function activateFactory( app: JupyterFrontEnd, + icoReg: IIconRegistry, docManager: IDocumentManager, state: IStateDB ): IFileBrowserFactory { @@ -210,6 +218,7 @@ function activateFactory( options: IFileBrowserFactory.IOptions = {} ) => { const model = new FileBrowserModel({ + iconRegistry: icoReg, manager: docManager, driveName: options.driveName || '', refreshInterval: options.refreshInterval, diff --git a/packages/filebrowser-extension/tsconfig.json b/packages/filebrowser-extension/tsconfig.json index ccbf069617a4..863de97f9c19 100644 --- a/packages/filebrowser-extension/tsconfig.json +++ b/packages/filebrowser-extension/tsconfig.json @@ -32,6 +32,9 @@ }, { "path": "../statusbar" + }, + { + "path": "../ui-components" } ] } diff --git a/packages/filebrowser/package.json b/packages/filebrowser/package.json index 4b36bea45bc3..7f31b361607f 100644 --- a/packages/filebrowser/package.json +++ b/packages/filebrowser/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/filebrowser", - "version": "1.0.3", + "version": "1.1.0-alpha.1", "description": "JupyterLab - FileBrowser Widget", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,12 +35,13 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/filebrowser/src/crumbs.ts b/packages/filebrowser/src/crumbs.ts index 542677e4cbc8..7aa2989c45d1 100644 --- a/packages/filebrowser/src/crumbs.ts +++ b/packages/filebrowser/src/crumbs.ts @@ -17,6 +17,8 @@ import { PathExt, PageConfig } from '@jupyterlab/coreutils'; import { renameFile } from '@jupyterlab/docmanager'; +import { defaultIconRegistry } from '@jupyterlab/ui-components'; + import { FileBrowserModel } from './model'; /** @@ -30,10 +32,15 @@ const MATERIAL_CLASS = 'jp-MaterialIcon'; const BREADCRUMB_CLASS = 'jp-BreadCrumbs'; /** - * The class name added to add the folder icon for the breadcrumbs + * The class name for the folder icon for the breadcrumbs home */ const BREADCRUMB_HOME = 'jp-FolderIcon'; +/** + * The class name for the breadcrumbs home node + */ +const BREADCRUMB_HOME_CLASS = 'jp-BreadCrumbs-home'; + /** * The class named associated to the ellipses icon */ @@ -159,7 +166,10 @@ export class BreadCrumbs extends Widget { // Find a valid click target. let node = event.target as HTMLElement; while (node && node !== this.node) { - if (node.classList.contains(BREADCRUMB_ITEM_CLASS)) { + if ( + node.classList.contains(BREADCRUMB_ITEM_CLASS) || + node.classList.contains(BREADCRUMB_HOME_CLASS) + ) { let index = ArrayExt.findFirstIndex( this._crumbs, value => value === node @@ -353,7 +363,12 @@ namespace Private { */ export function createCrumbs(): ReadonlyArray { let home = document.createElement('span'); - home.className = `${MATERIAL_CLASS} ${BREADCRUMB_HOME} ${BREADCRUMB_ITEM_CLASS}`; + defaultIconRegistry.icon({ + name: BREADCRUMB_HOME, + className: BREADCRUMB_HOME_CLASS, + container: home, + kind: 'breadCrumb' + }); home.title = PageConfig.getOption('serverRoot') || 'Jupyter Server Root'; let ellipsis = document.createElement('span'); ellipsis.className = diff --git a/packages/filebrowser/src/listing.ts b/packages/filebrowser/src/listing.ts index ff507164f9cc..98aa5425ead6 100644 --- a/packages/filebrowser/src/listing.ts +++ b/packages/filebrowser/src/listing.ts @@ -20,6 +20,8 @@ import { DocumentRegistry } from '@jupyterlab/docregistry'; import { Contents } from '@jupyterlab/services'; +import { IIconRegistry } from '@jupyterlab/ui-components'; + import { ArrayExt, ArrayIterator, @@ -186,7 +188,9 @@ export class DirListing extends Widget { */ constructor(options: DirListing.IOptions) { super({ - node: (options.renderer || DirListing.defaultRenderer).createNode() + node: (options.renderer = + options.renderer || + new DirListing.Renderer(options.model.iconRegistry)).createNode() }); this.addClass(DIR_LISTING_CLASS); this._model = options.model; @@ -196,7 +200,7 @@ export class DirListing extends Widget { this._editNode = document.createElement('input'); this._editNode.className = EDITOR_CLASS; this._manager = this._model.manager; - this._renderer = options.renderer || DirListing.defaultRenderer; + this._renderer = options.renderer; const headerNode = DOMUtils.findElement(this.node, HEADER_CLASS); this._renderer.populateHeaderNode(headerNode); @@ -736,11 +740,14 @@ export class DirListing extends Widget { content.appendChild(node); } - // Remove extra classes from the nodes. + // Remove extra classes/data from the nodes. nodes.forEach(item => { item.classList.remove(SELECTED_CLASS); item.classList.remove(RUNNING_CLASS); item.classList.remove(CUT_CLASS); + if (item.children[0]) { + delete (item.children[0] as HTMLElement).dataset.icon; + } }); // Add extra classes to item nodes based on widget state. @@ -1638,6 +1645,10 @@ export namespace DirListing { * The default implementation of an `IRenderer`. */ export class Renderer implements IRenderer { + constructor(icoReg: IIconRegistry) { + this._iconRegistry = icoReg; + } + /** * Create the DOM node for a dir listing. */ @@ -1757,9 +1768,23 @@ export namespace DirListing { let modified = DOMUtils.findElement(node, ITEM_MODIFIED_CLASS); if (fileType) { - icon.textContent = fileType.iconLabel || ''; - icon.className = `${ITEM_ICON_CLASS} ${fileType.iconClass || ''}`; + // add icon as svg node. Can be styled using CSS + if ( + !this._iconRegistry.icon({ + name: fileType.iconClass, + className: ITEM_ICON_CLASS, + title: fileType.iconLabel, + container: icon, + center: true, + kind: 'listing' + }) + ) { + // add icon as CSS background image. Can't be styled using CSS + icon.className = `${ITEM_ICON_CLASS} ${fileType.iconClass || ''}`; + icon.textContent = fileType.iconLabel || ''; + } } else { + // use default icon as CSS background image icon.textContent = ''; icon.className = ITEM_ICON_CLASS; } @@ -1843,12 +1868,8 @@ export namespace DirListing { node.appendChild(icon); return node; } + _iconRegistry: IIconRegistry; } - - /** - * The default `IRenderer` instance. - */ - export const defaultRenderer = new Renderer(); } /** diff --git a/packages/filebrowser/src/model.ts b/packages/filebrowser/src/model.ts index 18ccc6c17448..5f6392759a5c 100644 --- a/packages/filebrowser/src/model.ts +++ b/packages/filebrowser/src/model.ts @@ -1,6 +1,8 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. +import { showDialog, Dialog } from '@jupyterlab/apputils'; + import { IChangedArgs, IStateDB, @@ -13,6 +15,8 @@ import { IDocumentManager, shouldOverwrite } from '@jupyterlab/docmanager'; import { Contents, Kernel, Session } from '@jupyterlab/services'; +import { IIconRegistry } from '@jupyterlab/ui-components'; + import { ArrayIterator, each, @@ -28,8 +32,6 @@ import { IDisposable } from '@phosphor/disposable'; import { ISignal, Signal } from '@phosphor/signaling'; -import { showDialog, Dialog } from '@jupyterlab/apputils'; - /** * The default duration of the auto-refresh in ms */ @@ -68,6 +70,7 @@ export class FileBrowserModel implements IDisposable { * Construct a new file browser model. */ constructor(options: FileBrowserModel.IOptions) { + this.iconRegistry = options.iconRegistry; this.manager = options.manager; this._driveName = options.driveName || ''; let rootPath = this._driveName ? this._driveName + ':' : ''; @@ -109,6 +112,11 @@ export class FileBrowserModel implements IDisposable { }); } + /** + * The icon registry instance used by the file browser model. + */ + readonly iconRegistry: IIconRegistry; + /** * The document manager instance used by the file browser model. */ @@ -312,24 +320,18 @@ export class FileBrowserModel implements IDisposable { * @returns A promise which resolves when the file has begun * downloading. */ - download(path: string): Promise { - return this.manager.services.contents.getDownloadUrl(path).then(url => { - // Check the browser is Chrome https://stackoverflow.com/a/9851769 - const chrome = (window as any).chrome; - const isChrome = !!chrome && (!!chrome.webstore || !!chrome.runtime); - if (isChrome) { - // Workaround https://bugs.chromium.org/p/chromium/issues/detail?id=455987 - window.open(url); - } else { - let element = document.createElement('a'); - document.body.appendChild(element); - element.setAttribute('href', url); - element.setAttribute('download', ''); - element.click(); - document.body.removeChild(element); - return void 0; - } - }); + async download(path: string): Promise { + const url = await this.manager.services.contents.getDownloadUrl(path); + let element = document.createElement('a'); + document.body.appendChild(element); + element.setAttribute('href', url); + // Chrome doesn't get the right name automatically + const parts = path.split('/'); + const name = parts[parts.length - 1]; + element.setAttribute('download', name); + element.click(); + document.body.removeChild(element); + return void 0; } /** @@ -643,6 +645,11 @@ export namespace FileBrowserModel { * An options object for initializing a file browser. */ export interface IOptions { + /** + * An icon registry instance. + */ + iconRegistry: IIconRegistry; + /** * A document manager instance. */ @@ -656,15 +663,15 @@ export namespace FileBrowserModel { driveName?: string; /** - * An optional state database. If provided, the model will restore which - * folder was last opened when it is restored. + * The time interval for browser refreshing, in ms. */ - state?: IStateDB; + refreshInterval?: number; /** - * The time interval for browser refreshing, in ms. + * An optional state database. If provided, the model will restore which + * folder was last opened when it is restored. */ - refreshInterval?: number; + state?: IStateDB; } } diff --git a/packages/filebrowser/style/base.css b/packages/filebrowser/style/base.css index 4290aa23651e..8253a2287bb4 100644 --- a/packages/filebrowser/style/base.css +++ b/packages/filebrowser/style/base.css @@ -225,10 +225,7 @@ color: limegreen; content: '\25CF'; font-size: 8px; - position: relative; - width: 100%; - height: 100%; - top: -2px; + position: absolute; left: -8px; } @@ -256,7 +253,7 @@ background-image: var(--jp-icon-python-selected); } -.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemIcon.jp-JSONIcon { +.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemIcon.jp-JsonIcon { background-image: var(--jp-icon-json-selected); } @@ -268,7 +265,7 @@ background-image: var(--jp-icon-r-selected); } -.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemIcon.jp-YAMLIcon { +.jp-DirListing-item.jp-mod-selected .jp-DirListing-itemIcon.jp-YamlIcon { background-image: var(--jp-icon-yaml-selected); } diff --git a/packages/filebrowser/style/index.css b/packages/filebrowser/style/index.css index a04ddc3c646f..edbcab7a21dd 100644 --- a/packages/filebrowser/style/index.css +++ b/packages/filebrowser/style/index.css @@ -5,6 +5,7 @@ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ @import url('~@phosphor/widgets/style/index.css'); +@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@jupyterlab/apputils/style/index.css'); @import url('~@phosphor/dragdrop/style/index.css'); @import url('~@jupyterlab/docregistry/style/index.css'); diff --git a/packages/filebrowser/tsconfig.json b/packages/filebrowser/tsconfig.json index cb06e46e40c7..19a64feeabb3 100644 --- a/packages/filebrowser/tsconfig.json +++ b/packages/filebrowser/tsconfig.json @@ -23,6 +23,9 @@ }, { "path": "../statusbar" + }, + { + "path": "../ui-components" } ] } diff --git a/packages/fileeditor-extension/package.json b/packages/fileeditor-extension/package.json index b49642b27100..2988175fb993 100644 --- a/packages/fileeditor-extension/package.json +++ b/packages/fileeditor-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/fileeditor-extension", - "version": "1.0.3", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Editor Widget Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,17 +36,17 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/launcher": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/launcher": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/widgets": "^1.8.0" }, diff --git a/packages/fileeditor-extension/src/index.ts b/packages/fileeditor-extension/src/index.ts index 2379f659544c..0454f9cf2eea 100644 --- a/packages/fileeditor-extension/src/index.ts +++ b/packages/fileeditor-extension/src/index.ts @@ -54,7 +54,7 @@ const EDITOR_ICON_CLASS = 'jp-MaterialIcon jp-TextEditorIcon'; /** * The class name for the text editor icon from the default theme. */ -const MARKDOWN_ICON_CLASS = 'jp-MaterialIcon jp-MarkdownIcon'; +const MARKDOWN_ICON_CLASS = 'jp-MarkdownIcon'; /** * The name of the factory that creates editor widgets. @@ -114,13 +114,18 @@ const plugin: JupyterFrontEndPlugin = { export const tabSpaceStatus: JupyterFrontEndPlugin = { id: '@jupyterlab/fileeditor-extension:tab-space-status', autoStart: true, - requires: [IStatusBar, IEditorTracker, ISettingRegistry], + requires: [IEditorTracker, ISettingRegistry], + optional: [IStatusBar], activate: ( app: JupyterFrontEnd, - statusBar: IStatusBar, editorTracker: IEditorTracker, - settingRegistry: ISettingRegistry + settingRegistry: ISettingRegistry, + statusBar: IStatusBar | null ) => { + if (!statusBar) { + // Automatically disable if statusbar missing + return; + } // Create a menu for switching tabs vs spaces. const menu = new Menu({ commands: app.commands }); const command = 'fileeditor:change-tabs'; diff --git a/packages/fileeditor/package.json b/packages/fileeditor/package.json index 1ab189726863..cf6c9d83f67b 100644 --- a/packages/fileeditor/package.json +++ b/packages/fileeditor/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/fileeditor", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Editor Widget", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,10 +35,10 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0", diff --git a/packages/help-extension/package.json b/packages/help-extension/package.json index 8b94140f8675..8d92a6b1d471 100644 --- a/packages/help-extension/package.json +++ b/packages/help-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/help-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Help Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,12 +36,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/inspector": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/inspector": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/widgets": "^1.8.0", "react": "~16.8.4" }, diff --git a/packages/htmlviewer-extension/package.json b/packages/htmlviewer-extension/package.json index c8c95c9e05b3..ec3a2fe7395a 100644 --- a/packages/htmlviewer-extension/package.json +++ b/packages/htmlviewer-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/htmlviewer-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab extension to render HTML files", "keywords": [ "jupyter", @@ -34,10 +34,10 @@ "watch": "tsc -w" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/htmlviewer": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/htmlviewer": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/htmlviewer-extension/src/index.tsx b/packages/htmlviewer-extension/src/index.tsx index 4d6d6ed24589..59b1876bb301 100644 --- a/packages/htmlviewer-extension/src/index.tsx +++ b/packages/htmlviewer-extension/src/index.tsx @@ -20,9 +20,9 @@ import { } from '@jupyterlab/htmlviewer'; /** - * The CSS class for an HTML5 icon. + * The name for an HTML5 icon. */ -const CSS_ICON_CLASS = 'jp-MaterialIcon jp-HTMLIcon'; +const ICON_NAME = 'html5'; /** * Command IDs used by the plugin. @@ -58,7 +58,7 @@ function activateHTMLViewer( displayName: 'HTML File', extensions: ['.html'], mimeTypes: ['text/html'], - iconClass: CSS_ICON_CLASS + iconClass: ICON_NAME }; app.docRegistry.addFileType(ft); @@ -98,6 +98,7 @@ function activateHTMLViewer( app.commands.notifyCommandChanged(CommandIDs.trustHTML); }); + // widget.node.appendChild(HTML5Icon); widget.title.iconClass = ft.iconClass; widget.title.iconLabel = ft.iconLabel; }); diff --git a/packages/htmlviewer-extension/style/base.css b/packages/htmlviewer-extension/style/base.css deleted file mode 100644 index 8ef6cabcc54a..000000000000 --- a/packages/htmlviewer-extension/style/base.css +++ /dev/null @@ -1,9 +0,0 @@ -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Distributed under the terms of the Modified BSD License. -|----------------------------------------------------------------------------*/ - -/* Document icon */ -.jp-HTMLIcon { - background-image: url('./html5-icon.svg'); -} diff --git a/packages/htmlviewer-extension/style/html5-icon.svg b/packages/htmlviewer-extension/style/html5-icon.svg deleted file mode 100644 index b8b075fa046b..000000000000 --- a/packages/htmlviewer-extension/style/html5-icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - HTML5 Logo - - - - - - \ No newline at end of file diff --git a/packages/htmlviewer-extension/style/index.css b/packages/htmlviewer-extension/style/index.css index cbc7122d5fbc..32422713a5d6 100644 --- a/packages/htmlviewer-extension/style/index.css +++ b/packages/htmlviewer-extension/style/index.css @@ -8,5 +8,3 @@ @import url('~@jupyterlab/docregistry/style/index.css'); @import url('~@jupyterlab/application/style/index.css'); @import url('~@jupyterlab/htmlviewer/style/index.css'); - -@import url('./base.css'); diff --git a/packages/htmlviewer/package.json b/packages/htmlviewer/package.json index 74c359d252b0..60dc66afaee8 100644 --- a/packages/htmlviewer/package.json +++ b/packages/htmlviewer/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/htmlviewer", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "A viewer for HTML documents.", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -32,9 +32,9 @@ "watch": "tsc -w --listEmittedFiles" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/signaling": "^1.2.3", "react": "~16.8.4" diff --git a/packages/hub-extension/package.json b/packages/hub-extension/package.json index 1abf6220ddaa..618db9004c32 100644 --- a/packages/hub-extension/package.json +++ b/packages/hub-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/hub-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab integration for JupyterHub", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -33,11 +33,11 @@ "watch": "tsc -w --listEmittedFiles" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/services": "^4.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/imageviewer-extension/package.json b/packages/imageviewer-extension/package.json index 66c8acd4383e..954dcd7b533a 100644 --- a/packages/imageviewer-extension/package.json +++ b/packages/imageviewer-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/imageviewer-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Image Widget Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,10 +36,10 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/imageviewer": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/imageviewer": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/imageviewer/package.json b/packages/imageviewer/package.json index 4689b3afdcab..e5282863f6c0 100644 --- a/packages/imageviewer/package.json +++ b/packages/imageviewer/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/imageviewer", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Image Widget", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,9 +35,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0" diff --git a/packages/inspector-extension/package.json b/packages/inspector-extension/package.json index 2476df2b55ab..8dd9e078cf17 100644 --- a/packages/inspector-extension/package.json +++ b/packages/inspector-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/inspector-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Code Inspector Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,12 +36,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/inspector": "^1.0.2", - "@jupyterlab/launcher": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/inspector": "^1.1.0-alpha.1", + "@jupyterlab/launcher": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/inspector/package.json b/packages/inspector/package.json index fccfcaac9678..76c84420ffdc 100644 --- a/packages/inspector/package.json +++ b/packages/inspector/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/inspector", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Code Inspector", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,11 +35,11 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", "@phosphor/signaling": "^1.2.3", diff --git a/packages/inspector/style/base.css b/packages/inspector/style/base.css index 23845d44dc48..db6824015db3 100644 --- a/packages/inspector/style/base.css +++ b/packages/inspector/style/base.css @@ -24,7 +24,6 @@ .jp-Inspector-content { background: var(--jp-layout-color1); - display: flex; border: none; } @@ -48,6 +47,7 @@ } .jp-Inspector-default-content { + display: flex; align-items: center; justify-content: center; font-size: xx-large; diff --git a/packages/javascript-extension/package.json b/packages/javascript-extension/package.json index c70d4fe4dc4b..c60a3711868c 100644 --- a/packages/javascript-extension/package.json +++ b/packages/javascript-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/javascript-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Javascript Renderer", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -34,8 +34,8 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0" + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/json-extension/package.json b/packages/json-extension/package.json index 067a4046f187..53a03b14abbe 100644 --- a/packages/json-extension/package.json +++ b/packages/json-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/json-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - JSON Renderer", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -34,9 +34,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/ui-components": "^1.0.0", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0", diff --git a/packages/json-extension/style/index.css b/packages/json-extension/style/index.css index 3a4b711feb1e..bacc5f067317 100644 --- a/packages/json-extension/style/index.css +++ b/packages/json-extension/style/index.css @@ -4,8 +4,8 @@ |----------------------------------------------------------------------------*/ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ -@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@phosphor/widgets/style/index.css'); +@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@jupyterlab/apputils/style/index.css'); @import url('./base.css'); diff --git a/packages/launcher-extension/package.json b/packages/launcher-extension/package.json index 21fa3509f92e..766d15725d47 100644 --- a/packages/launcher-extension/package.json +++ b/packages/launcher-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/launcher-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Launcher Page Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,9 +36,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/launcher": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/launcher": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/widgets": "^1.8.0" diff --git a/packages/launcher/package.json b/packages/launcher/package.json index 9dc3b0e75d85..7d87d19a3445 100644 --- a/packages/launcher/package.json +++ b/packages/launcher/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/launcher", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Launcher Panel", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,7 +35,8 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", diff --git a/packages/launcher/src/index.tsx b/packages/launcher/src/index.tsx index 4bc885919dec..021fefa89f76 100644 --- a/packages/launcher/src/index.tsx +++ b/packages/launcher/src/index.tsx @@ -7,6 +7,12 @@ import { VDomRenderer } from '@jupyterlab/apputils'; +import { + combineClasses, + DefaultIconReact, + defaultIconRegistry +} from '@jupyterlab/ui-components'; + import { ArrayExt, ArrayIterator, @@ -188,17 +194,31 @@ export class Launcher extends VDomRenderer { // Now create the sections for each category orderedCategories.forEach(cat => { const item = categories[cat][0] as ILauncher.IItemOptions; - let iconClass = - `${this._commands.iconClass(item.command, { - ...item.args, - cwd: this.cwd - })} ` + 'jp-Launcher-sectionIcon jp-Launcher-icon'; + let iconClass = this._commands.iconClass(item.command, { + ...item.args, + cwd: this.cwd + }); let kernel = KERNEL_CATEGORIES.indexOf(cat) > -1; if (cat in categories) { section = (
- {kernel &&
} + {kernel && defaultIconRegistry.contains(iconClass) ? ( + + ) : ( +
+ )}

{cat}

@@ -384,6 +404,7 @@ function Card( }; // Return the VDOM element. + const iconClass = kernel ? '' : commands.iconClass(command, args); return (
-
- {item.kernelIconUrl && kernel && ( - - )} - {!item.kernelIconUrl && !kernel && ( -
- )} - {!item.kernelIconUrl && kernel && ( -
- {label[0].toUpperCase()} -
- )} -
+ {kernel ? ( +
+ {item.kernelIconUrl ? ( + + ) : ( +
+ {label[0].toUpperCase()} +
+ )} +
+ ) : defaultIconRegistry.contains(iconClass) ? ( + + ) : ( +
+
+
+ )}

{label}

diff --git a/packages/launcher/style/index.css b/packages/launcher/style/index.css index 546e18daa8a5..bacc5f067317 100644 --- a/packages/launcher/style/index.css +++ b/packages/launcher/style/index.css @@ -5,6 +5,7 @@ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ @import url('~@phosphor/widgets/style/index.css'); +@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@jupyterlab/apputils/style/index.css'); @import url('./base.css'); diff --git a/packages/launcher/tsconfig.json b/packages/launcher/tsconfig.json index 1a4f97efe5ff..58ebc16e0a36 100644 --- a/packages/launcher/tsconfig.json +++ b/packages/launcher/tsconfig.json @@ -8,6 +8,9 @@ "references": [ { "path": "../apputils" + }, + { + "path": "../ui-components" } ] } diff --git a/packages/mainmenu-extension/package.json b/packages/mainmenu-extension/package.json index 71972813a316..5a7d6aafb9c8 100644 --- a/packages/mainmenu-extension/package.json +++ b/packages/mainmenu-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/mainmenu-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Main Menu Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,11 +36,11 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/disposable": "^1.2.0", "@phosphor/widgets": "^1.8.0" diff --git a/packages/mainmenu/package.json b/packages/mainmenu/package.json index d757b75d0b03..7ffa6e2d2c81 100644 --- a/packages/mainmenu/package.json +++ b/packages/mainmenu/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/mainmenu", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Main Menu", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,8 +35,8 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", diff --git a/packages/markdownviewer-extension/package.json b/packages/markdownviewer-extension/package.json index 5635739c138d..eac21be92f3d 100644 --- a/packages/markdownviewer-extension/package.json +++ b/packages/markdownviewer-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/markdownviewer-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Markdown Renderer Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,11 +36,11 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/markdownviewer": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/markdownviewer": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/markdownviewer/package.json b/packages/markdownviewer/package.json index 389f70e66390..3e6cac06fa69 100644 --- a/packages/markdownviewer/package.json +++ b/packages/markdownviewer/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/markdownviewer", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Markdown viewer Widget", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,10 +35,10 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0" diff --git a/packages/mathjax2-extension/package.json b/packages/mathjax2-extension/package.json index 9d2aa83d1911..727c8fe1c297 100644 --- a/packages/mathjax2-extension/package.json +++ b/packages/mathjax2-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/mathjax2-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "A JupyterLab extension providing MathJax 2 Typesetting", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -33,10 +33,10 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/mathjax2": "^1.0.0", - "@jupyterlab/rendermime": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/mathjax2": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/mathjax2/package.json b/packages/mathjax2/package.json index a7aa069543c3..cf882c9c3686 100644 --- a/packages/mathjax2/package.json +++ b/packages/mathjax2/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/mathjax2", - "version": "1.0.0", + "version": "1.1.0-alpha.1", "description": "A MathJax 2 Typesetting provider for JupyterLab", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -33,7 +33,7 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/rendermime-interfaces": "^1.3.0", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", "@phosphor/coreutils": "^1.3.1" }, "devDependencies": { diff --git a/packages/metapackage/package.json b/packages/metapackage/package.json index 8e3fe896bbca..dd0f3a67767c 100644 --- a/packages/metapackage/package.json +++ b/packages/metapackage/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/metapackage", - "version": "1.0.4", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Meta Package. All of the packages used by the core JupyterLab application", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -31,80 +31,81 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/application-extension": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/apputils-extension": "^1.0.2", - "@jupyterlab/attachments": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/codemirror-extension": "^1.0.2", - "@jupyterlab/completer": "^1.0.2", - "@jupyterlab/completer-extension": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/console-extension": "^1.0.3", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/csvviewer": "^1.0.2", - "@jupyterlab/csvviewer-extension": "^1.0.2", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docmanager-extension": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/documentsearch": "^1.0.2", - "@jupyterlab/documentsearch-extension": "^1.0.2", - "@jupyterlab/extensionmanager": "^1.0.2", - "@jupyterlab/extensionmanager-extension": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/filebrowser-extension": "^1.0.4", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/fileeditor-extension": "^1.0.3", - "@jupyterlab/help-extension": "^1.0.2", - "@jupyterlab/htmlviewer": "^1.0.2", - "@jupyterlab/htmlviewer-extension": "^1.0.2", - "@jupyterlab/hub-extension": "^1.0.2", - "@jupyterlab/imageviewer": "^1.0.2", - "@jupyterlab/imageviewer-extension": "^1.0.2", - "@jupyterlab/inspector": "^1.0.2", - "@jupyterlab/inspector-extension": "^1.0.2", - "@jupyterlab/javascript-extension": "^1.0.2", - "@jupyterlab/json-extension": "^1.0.2", - "@jupyterlab/launcher": "^1.0.2", - "@jupyterlab/launcher-extension": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/mainmenu-extension": "^1.0.2", - "@jupyterlab/markdownviewer": "^1.0.2", - "@jupyterlab/markdownviewer-extension": "^1.0.2", - "@jupyterlab/mathjax2": "^1.0.0", - "@jupyterlab/mathjax2-extension": "^1.0.2", - "@jupyterlab/nbconvert-css": "^0.1.5", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/notebook-extension": "^1.0.3", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/outputarea": "^1.0.2", - "@jupyterlab/pdf-extension": "^1.0.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/rendermime-extension": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/running": "^1.0.2", - "@jupyterlab/running-extension": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/settingeditor": "^1.0.2", - "@jupyterlab/settingeditor-extension": "^1.0.2", - "@jupyterlab/shortcuts-extension": "^1.0.2", - "@jupyterlab/statusbar": "^1.0.2", - "@jupyterlab/statusbar-extension": "^1.0.2", - "@jupyterlab/tabmanager-extension": "^1.0.2", - "@jupyterlab/terminal": "^1.0.2", - "@jupyterlab/terminal-extension": "^1.0.2", - "@jupyterlab/theme-dark-extension": "^1.0.2", - "@jupyterlab/theme-light-extension": "^1.0.2", - "@jupyterlab/tooltip": "^1.0.2", - "@jupyterlab/tooltip-extension": "^1.0.2", - "@jupyterlab/ui-components": "^1.0.0", - "@jupyterlab/vdom": "^1.0.2", - "@jupyterlab/vdom-extension": "^1.0.2", - "@jupyterlab/vega4-extension": "^1.0.1", - "@jupyterlab/vega5-extension": "^1.0.1" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/application-extension": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/apputils-extension": "^1.1.0-alpha.1", + "@jupyterlab/attachments": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/codemirror-extension": "^1.1.0-alpha.1", + "@jupyterlab/completer": "^1.1.0-alpha.1", + "@jupyterlab/completer-extension": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/console-extension": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/csvviewer": "^1.1.0-alpha.1", + "@jupyterlab/csvviewer-extension": "^1.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/docmanager-extension": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/documentsearch": "^1.1.0-alpha.1", + "@jupyterlab/documentsearch-extension": "^1.1.0-alpha.1", + "@jupyterlab/extensionmanager": "^1.1.0-alpha.1", + "@jupyterlab/extensionmanager-extension": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser-extension": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor-extension": "^1.1.0-alpha.1", + "@jupyterlab/help-extension": "^1.1.0-alpha.1", + "@jupyterlab/htmlviewer": "^1.1.0-alpha.1", + "@jupyterlab/htmlviewer-extension": "^1.1.0-alpha.1", + "@jupyterlab/hub-extension": "^1.1.0-alpha.1", + "@jupyterlab/imageviewer": "^1.1.0-alpha.1", + "@jupyterlab/imageviewer-extension": "^1.1.0-alpha.1", + "@jupyterlab/inspector": "^1.1.0-alpha.1", + "@jupyterlab/inspector-extension": "^1.1.0-alpha.1", + "@jupyterlab/javascript-extension": "^1.1.0-alpha.1", + "@jupyterlab/json-extension": "^1.1.0-alpha.1", + "@jupyterlab/launcher": "^1.1.0-alpha.1", + "@jupyterlab/launcher-extension": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu-extension": "^1.1.0-alpha.1", + "@jupyterlab/markdownviewer": "^1.1.0-alpha.1", + "@jupyterlab/markdownviewer-extension": "^1.1.0-alpha.1", + "@jupyterlab/mathjax2": "^1.1.0-alpha.1", + "@jupyterlab/mathjax2-extension": "^1.1.0-alpha.1", + "@jupyterlab/nbconvert-css": "^0.2.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/notebook-extension": "^1.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/outputarea": "^1.1.0-alpha.1", + "@jupyterlab/pdf-extension": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-extension": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", + "@jupyterlab/running": "^1.1.0-alpha.1", + "@jupyterlab/running-extension": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/settingeditor": "^1.1.0-alpha.1", + "@jupyterlab/settingeditor-extension": "^1.1.0-alpha.1", + "@jupyterlab/shortcuts-extension": "^1.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", + "@jupyterlab/statusbar-extension": "^1.1.0-alpha.1", + "@jupyterlab/tabmanager-extension": "^1.1.0-alpha.1", + "@jupyterlab/terminal": "^1.1.0-alpha.1", + "@jupyterlab/terminal-extension": "^1.1.0-alpha.1", + "@jupyterlab/theme-dark-extension": "^1.1.0-alpha.1", + "@jupyterlab/theme-light-extension": "^1.1.0-alpha.1", + "@jupyterlab/tooltip": "^1.1.0-alpha.1", + "@jupyterlab/tooltip-extension": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", + "@jupyterlab/ui-components-extension": "^1.1.0-alpha.1", + "@jupyterlab/vdom": "^1.1.0-alpha.1", + "@jupyterlab/vdom-extension": "^1.1.0-alpha.1", + "@jupyterlab/vega4-extension": "^1.1.0-alpha.1", + "@jupyterlab/vega5-extension": "^1.1.0-alpha.1" }, "devDependencies": { "fs-extra": "^8.0.1", diff --git a/packages/metapackage/tsconfig.json b/packages/metapackage/tsconfig.json index dc0d758dfaf5..2c99cf8e1b42 100644 --- a/packages/metapackage/tsconfig.json +++ b/packages/metapackage/tsconfig.json @@ -213,6 +213,9 @@ { "path": "../ui-components" }, + { + "path": "../ui-components-extension" + }, { "path": "../vdom" }, diff --git a/packages/nbconvert-css/package.json b/packages/nbconvert-css/package.json index 006fdc73a774..31a6852bdd07 100644 --- a/packages/nbconvert-css/package.json +++ b/packages/nbconvert-css/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/nbconvert-css", - "version": "0.1.5", + "version": "0.2.0-alpha.1", "description": "CSS bundle for the JupyterLab nbconvert template", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -34,20 +34,20 @@ "watch": "webpack --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/outputarea": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2" + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/outputarea": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1" }, "devDependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/outputarea": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/outputarea": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", "css-loader": "~2.1.1", "file-loader": "~3.0.1", "mini-css-extract-plugin": "~0.6.0", diff --git a/packages/notebook-extension/package.json b/packages/notebook-extension/package.json index 38e91fb33a01..56c4850e6637 100644 --- a/packages/notebook-extension/package.json +++ b/packages/notebook-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/notebook-extension", - "version": "1.0.3", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Notebook Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,19 +36,19 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/launcher": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser": "^1.1.0-alpha.1", + "@jupyterlab/launcher": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", diff --git a/packages/notebook-extension/src/index.ts b/packages/notebook-extension/src/index.ts index e88150e6230a..2e769795de7c 100644 --- a/packages/notebook-extension/src/index.ts +++ b/packages/notebook-extension/src/index.ts @@ -306,12 +306,17 @@ const tools: JupyterFrontEndPlugin = { export const commandEditItem: JupyterFrontEndPlugin = { id: '@jupyterlab/notebook-extension:mode-status', autoStart: true, - requires: [IStatusBar, INotebookTracker], + requires: [INotebookTracker], + optional: [IStatusBar], activate: ( app: JupyterFrontEnd, - statusBar: IStatusBar, - tracker: INotebookTracker + tracker: INotebookTracker, + statusBar: IStatusBar | null ) => { + if (!statusBar) { + // Automatically disable if statusbar missing + return; + } const { shell } = app; const item = new CommandEditStatus(); @@ -339,12 +344,17 @@ export const commandEditItem: JupyterFrontEndPlugin = { export const notebookTrustItem: JupyterFrontEndPlugin = { id: '@jupyterlab/notebook-extension:trust-status', autoStart: true, - requires: [IStatusBar, INotebookTracker, ILabShell], + requires: [INotebookTracker], + optional: [IStatusBar], activate: ( app: JupyterFrontEnd, - statusBar: IStatusBar, - tracker: INotebookTracker + tracker: INotebookTracker, + statusBar: IStatusBar | null ) => { + if (!statusBar) { + // Automatically disable if statusbar missing + return; + } const { shell } = app; const item = new NotebookTrustStatus(); diff --git a/packages/notebook/package.json b/packages/notebook/package.json index df61fb0a0686..673e685aa3c4 100644 --- a/packages/notebook/package.json +++ b/packages/notebook/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/notebook", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Notebook", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,16 +35,16 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/statusbar": "^1.0.2", - "@jupyterlab/ui-components": "^1.0.0", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/domutils": "^1.1.3", diff --git a/packages/notebook/src/truststatus.tsx b/packages/notebook/src/truststatus.tsx index 99d7b0d0e242..e6761424c35f 100644 --- a/packages/notebook/src/truststatus.tsx +++ b/packages/notebook/src/truststatus.tsx @@ -6,7 +6,7 @@ import { INotebookModel, Notebook } from '.'; import { Cell } from '@jupyterlab/cells'; -import { IconItem } from '@jupyterlab/statusbar'; +import { DefaultIconReact } from '@jupyterlab/ui-components'; import { toArray } from '@phosphor/algorithm'; @@ -44,8 +44,13 @@ function cellTrust( function NotebookTrustComponent( props: NotebookTrustComponent.IProps ): React.ReactElement { - const source = cellTrust(props)[1]; - return ; + if (props.allCellsTrusted) { + return ; + } else { + return ( + + ); + } } /** diff --git a/packages/notebook/style/base.css b/packages/notebook/style/base.css index b289c121f49a..0f75309ccfac 100644 --- a/packages/notebook/style/base.css +++ b/packages/notebook/style/base.css @@ -19,7 +19,6 @@ |----------------------------------------------------------------------------*/ @import './toolbar.css'; -@import './status.css'; /*----------------------------------------------------------------------------- | Notebook diff --git a/packages/notebook/style/index.css b/packages/notebook/style/index.css index 9927f8adda6c..7b77c736221c 100644 --- a/packages/notebook/style/index.css +++ b/packages/notebook/style/index.css @@ -4,8 +4,8 @@ |----------------------------------------------------------------------------*/ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ -@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@phosphor/widgets/style/index.css'); +@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@jupyterlab/apputils/style/index.css'); @import url('~@phosphor/dragdrop/style/index.css'); @import url('~@jupyterlab/codeeditor/style/index.css'); diff --git a/packages/notebook/style/not-trusted-icon-dark.svg b/packages/notebook/style/not-trusted-icon-dark.svg deleted file mode 100644 index 8439a93c6e70..000000000000 --- a/packages/notebook/style/not-trusted-icon-dark.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packages/notebook/style/not-trusted-icon-light.svg b/packages/notebook/style/not-trusted-icon-light.svg deleted file mode 100644 index cb63b74c2de6..000000000000 --- a/packages/notebook/style/not-trusted-icon-light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/packages/notebook/style/status.css b/packages/notebook/style/status.css deleted file mode 100644 index 6a6fd3f01564..000000000000 --- a/packages/notebook/style/status.css +++ /dev/null @@ -1,28 +0,0 @@ -/*----------------------------------------------------------------------------- -| Copyright (c) Jupyter Development Team. -| Distributed under the terms of the Modified BSD License. -|----------------------------------------------------------------------------*/ - -/* - * icons for light themes - */ - -[data-jp-theme-light='true'] .jp-StatusItem-untrusted { - background-image: url('./not-trusted-icon-light.svg'); -} - -[data-jp-theme-light='true'] .jp-StatusItem-trusted { - background-image: url('./trusted-icon-light.svg'); -} - -/* - * icons for dark themes - */ - -[data-jp-theme-light='false'] .jp-StatusItem-untrusted { - background-image: url('./not-trusted-icon-dark.svg'); -} - -[data-jp-theme-light='false'] .jp-StatusItem-trusted { - background-image: url('./trusted-icon-dark.svg'); -} diff --git a/packages/notebook/style/trusted-icon-dark.svg b/packages/notebook/style/trusted-icon-dark.svg deleted file mode 100644 index b92040c37a58..000000000000 --- a/packages/notebook/style/trusted-icon-dark.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/notebook/style/trusted-icon-light.svg b/packages/notebook/style/trusted-icon-light.svg deleted file mode 100644 index 7f4fc23bac83..000000000000 --- a/packages/notebook/style/trusted-icon-light.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/observables/package.json b/packages/observables/package.json index 7fc5821722d1..a77d2162dfba 100644 --- a/packages/observables/package.json +++ b/packages/observables/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/observables", - "version": "2.2.0", + "version": "2.3.0-alpha.1", "description": "Data structures which may be observed for changes.", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { diff --git a/packages/outputarea/package.json b/packages/outputarea/package.json index b233d4641430..fff9cacbb532 100644 --- a/packages/outputarea/package.json +++ b/packages/outputarea/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/outputarea", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Notebook Output Area", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,12 +35,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/pdf-extension/package.json b/packages/pdf-extension/package.json index b08ff9182aa9..df6aad56a334 100644 --- a/packages/pdf-extension/package.json +++ b/packages/pdf-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/pdf-extension", - "version": "1.0.0", + "version": "1.1.0-alpha.1", "description": "JupyterLab - PDF Viewer", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,7 +35,7 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/rendermime-interfaces": "^1.3.0", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", "@phosphor/widgets": "^1.8.0" diff --git a/packages/rendermime-extension/package.json b/packages/rendermime-extension/package.json index 53d4f6673612..68512721baf4 100644 --- a/packages/rendermime-extension/package.json +++ b/packages/rendermime-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/rendermime-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "A rendermime extension for JupyterLab", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -33,9 +33,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/rendermime-extension/src/index.ts b/packages/rendermime-extension/src/index.ts index abb205600cb8..3796135852c9 100644 --- a/packages/rendermime-extension/src/index.ts +++ b/packages/rendermime-extension/src/index.ts @@ -26,8 +26,8 @@ namespace CommandIDs { */ const plugin: JupyterFrontEndPlugin = { id: '@jupyterlab/rendermime-extension:plugin', - requires: [IDocumentManager], - optional: [ILatexTypesetter], + requires: [], + optional: [IDocumentManager, ILatexTypesetter], provides: IRenderMimeRegistry, activate: activate, autoStart: true @@ -43,45 +43,49 @@ export default plugin; */ function activate( app: JupyterFrontEnd, - docManager: IDocumentManager, + docManager: IDocumentManager | null, latexTypesetter: ILatexTypesetter | null ) { - app.commands.addCommand(CommandIDs.handleLink, { - label: 'Handle Local Link', - execute: args => { - const path = args['path'] as string | undefined | null; - const id = args['id'] as string | undefined | null; - if (!path) { - return; - } - // First check if the path exists on the server. - return docManager.services.contents - .get(path, { content: false }) - .then(() => { - // Open the link with the default rendered widget factory, - // if applicable. - const factory = docManager.registry.defaultRenderedWidgetFactory( - path - ); - const widget = docManager.openOrReveal(path, factory.name); + if (docManager) { + app.commands.addCommand(CommandIDs.handleLink, { + label: 'Handle Local Link', + execute: args => { + const path = args['path'] as string | undefined | null; + const id = args['id'] as string | undefined | null; + if (!path) { + return; + } + // First check if the path exists on the server. + return docManager.services.contents + .get(path, { content: false }) + .then(() => { + // Open the link with the default rendered widget factory, + // if applicable. + const factory = docManager.registry.defaultRenderedWidgetFactory( + path + ); + const widget = docManager.openOrReveal(path, factory.name); - // Handle the hash if one has been provided. - if (widget && id) { - widget.setFragment(id); - } - }); - } - }); + // Handle the hash if one has been provided. + if (widget && id) { + widget.setFragment(id); + } + }); + } + }); + } return new RenderMimeRegistry({ initialFactories: standardRendererFactories, - linkHandler: { - handleLink: (node: HTMLElement, path: string, id?: string) => { - app.commandLinker.connectNode(node, CommandIDs.handleLink, { - path, - id - }); - } - }, + linkHandler: !docManager + ? null + : { + handleLink: (node: HTMLElement, path: string, id?: string) => { + app.commandLinker.connectNode(node, CommandIDs.handleLink, { + path, + id + }); + } + }, latexTypesetter }); } diff --git a/packages/rendermime-interfaces/package.json b/packages/rendermime-interfaces/package.json index 3e5a857331e2..f0462771838a 100644 --- a/packages/rendermime-interfaces/package.json +++ b/packages/rendermime-interfaces/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/rendermime-interfaces", - "version": "1.3.0", + "version": "1.4.0-alpha.1", "description": "JupyterLab - Interfaces for Mime Renderers", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { diff --git a/packages/rendermime/package.json b/packages/rendermime/package.json index d3d8509a9899..7d8af4a2f314 100644 --- a/packages/rendermime/package.json +++ b/packages/rendermime/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/rendermime", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - RenderMime", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,12 +35,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/packages/running-extension/package.json b/packages/running-extension/package.json index 22e839896eb2..ed21e1ae7cf7 100644 --- a/packages/running-extension/package.json +++ b/packages/running-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/running-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Running Sessions Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,8 +35,8 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/running": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/running": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/running/package.json b/packages/running/package.json index 6774947552f9..13628ec404d0 100644 --- a/packages/running/package.json +++ b/packages/running/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/running", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Running Sessions Panel", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,9 +35,9 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/signaling": "^1.2.3", "react": "~16.8.4" diff --git a/packages/services/examples/browser/package.json b/packages/services/examples/browser/package.json index ef177d296fe7..c99ee03fa0f2 100644 --- a/packages/services/examples/browser/package.json +++ b/packages/services/examples/browser/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/example-services-browser", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc && webpack", @@ -8,8 +8,8 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/services": "^4.0.2" + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/services/examples/node/package.json b/packages/services/examples/node/package.json index f0d919bd9ede..61df42ef799d 100644 --- a/packages/services/examples/node/package.json +++ b/packages/services/examples/node/package.json @@ -1,13 +1,13 @@ { "name": "node-example", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "clean": "rimraf node_modules", "update": "rimraf node_modules/@jupyterlab/services && npm install" }, "dependencies": { - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/services": "^4.1.0-alpha.1", "node-fetch": "^2.6.0", "ws": "^7.0.0" }, diff --git a/packages/services/examples/typescript-browser-with-output/package.json b/packages/services/examples/typescript-browser-with-output/package.json index 57f493b8a400..1566bc9c3a6b 100644 --- a/packages/services/examples/typescript-browser-with-output/package.json +++ b/packages/services/examples/typescript-browser-with-output/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/example-services-outputarea", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "files": [ "style/index.css", @@ -16,10 +16,10 @@ "prepublishOnly": "npm run build" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/outputarea": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2" + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/outputarea": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1" }, "devDependencies": { "css-loader": "~2.1.1", diff --git a/packages/services/package.json b/packages/services/package.json index 02e70e19eae4..4205e8657b4d 100644 --- a/packages/services/package.json +++ b/packages/services/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/services", - "version": "4.0.2", + "version": "4.1.0-alpha.1", "description": "Client APIs for the Jupyter services REST APIs", "keywords": [ "jupyter", @@ -41,8 +41,8 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/observables": "^2.2.0", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/services/src/contents/index.ts b/packages/services/src/contents/index.ts index 79be3a6c5f27..c6959d236ee1 100644 --- a/packages/services/src/contents/index.ts +++ b/packages/services/src/contents/index.ts @@ -1044,9 +1044,12 @@ export class Drive implements Contents.IDrive { */ getDownloadUrl(localPath: string): Promise { let baseUrl = this.serverSettings.baseUrl; - return Promise.resolve( - URLExt.join(baseUrl, FILES_URL, URLExt.encodeParts(localPath)) - ); + let url = URLExt.join(baseUrl, FILES_URL, URLExt.encodeParts(localPath)); + const xsrfTokenMatch = document.cookie.match('\\b_xsrf=([^;]*)\\b'); + if (xsrfTokenMatch) { + url = URLExt.join(url, `?_xsrf=${xsrfTokenMatch[1]}`); + } + return Promise.resolve(url); } /** diff --git a/packages/services/src/kernel/default.ts b/packages/services/src/kernel/default.ts index 42d699d0e5be..266b4828e8c7 100644 --- a/packages/services/src/kernel/default.ts +++ b/packages/services/src/kernel/default.ts @@ -5,7 +5,7 @@ import { URLExt } from '@jupyterlab/coreutils'; import { UUID } from '@phosphor/coreutils'; -import { ArrayExt, each, find } from '@phosphor/algorithm'; +import { ArrayExt, each, find, some } from '@phosphor/algorithm'; import { JSONExt, JSONObject, PromiseDelegate } from '@phosphor/coreutils'; @@ -61,6 +61,8 @@ export class DefaultKernel implements Kernel.IKernel { options.serverSettings || ServerConnection.makeSettings(); this._clientId = options.clientId || UUID.uuid4(); this._username = options.username || ''; + this.handleComms = + options.handleComms === undefined ? true : options.handleComms; void this._readyPromise.promise.then(() => { this._sendPending(); @@ -82,6 +84,18 @@ export class DefaultKernel implements Kernel.IKernel { */ readonly serverSettings: ServerConnection.ISettings; + /** + * Handle comm messages + * + * #### Notes + * The comm message protocol currently has implicit assumptions that only + * one kernel connection is handling comm messages. This option allows a + * kernel connection to opt out of handling comms. + * + * See https://github.com/jupyter/jupyter_client/issues/263 + */ + readonly handleComms: boolean; + /** * A signal emitted when the kernel status changes. */ @@ -215,12 +229,14 @@ export class DefaultKernel implements Kernel.IKernel { /** * Clone the current kernel with a new clientId. */ - clone(): Kernel.IKernel { + clone(options: Kernel.IOptions = {}): Kernel.IKernel { return new DefaultKernel( { name: this._name, username: this._username, - serverSettings: this.serverSettings + serverSettings: this.serverSettings, + handleComms: this.handleComms, + ...options }, this._id ); @@ -712,11 +728,16 @@ export class DefaultKernel implements Kernel.IKernel { * * #### Notes * If a client-side comm already exists with the given commId, it is returned. + * An error is thrown if the kernel does not handle comms. */ connectToComm( targetName: string, commId: string = UUID.uuid4() ): Kernel.IComm { + if (!this.handleComms) { + throw new Error('Comms are disabled on this kernel connection'); + } + if (this._comms.has(commId)) { return this._comms.get(commId); } @@ -752,6 +773,10 @@ export class DefaultKernel implements Kernel.IKernel { msg: KernelMessage.ICommOpenMsg ) => void | PromiseLike ): void { + if (!this.handleComms) { + return; + } + this._targetRegistry[targetName] = callback; } @@ -763,7 +788,7 @@ export class DefaultKernel implements Kernel.IKernel { * @param callback - The callback to remove. * * #### Notes - * The comm target is only removed the callback argument matches. + * The comm target is only removed if the callback argument matches. */ removeCommTarget( targetName: string, @@ -772,6 +797,10 @@ export class DefaultKernel implements Kernel.IKernel { msg: KernelMessage.ICommOpenMsg ) => void | PromiseLike ): void { + if (!this.handleComms) { + return; + } + if (!this.isDisposed && this._targetRegistry[targetName] === callback) { delete this._targetRegistry[targetName]; } @@ -1280,13 +1309,19 @@ export class DefaultKernel implements Kernel.IKernel { } break; case 'comm_open': - await this._handleCommOpen(msg as KernelMessage.ICommOpenMsg); + if (this.handleComms) { + await this._handleCommOpen(msg as KernelMessage.ICommOpenMsg); + } break; case 'comm_msg': - await this._handleCommMsg(msg as KernelMessage.ICommMsgMsg); + if (this.handleComms) { + await this._handleCommMsg(msg as KernelMessage.ICommMsgMsg); + } break; case 'comm_close': - await this._handleCommClose(msg as KernelMessage.ICommCloseMsg); + if (this.handleComms) { + await this._handleCommClose(msg as KernelMessage.ICommCloseMsg); + } break; default: break; @@ -1663,7 +1698,16 @@ namespace Private { return value.id === model.id; }); if (kernel) { - return kernel.clone(); + // If there is already a kernel connection handling comms, don't handle + // them in our clone, since the comm message protocol has implicit + // assumptions that only one connection is handling comm messages. + // See https://github.com/jupyter/jupyter_client/issues/263 + const handleComms = !some( + runningKernels, + k => k.id === model.id && k.handleComms + ); + const newKernel = kernel.clone({ handleComms }); + return newKernel; } return new DefaultKernel({ name: model.name, serverSettings }, model.id); diff --git a/packages/services/src/kernel/kernel.ts b/packages/services/src/kernel/kernel.ts index 121719918b5b..148e0c01c3b9 100644 --- a/packages/services/src/kernel/kernel.ts +++ b/packages/services/src/kernel/kernel.ts @@ -90,6 +90,18 @@ export namespace Kernel { */ readonly ready: Promise; + /** + * Whether the kernel connection handles comm messages. + * + * #### Notes + * The comm message protocol currently has implicit assumptions that only + * one kernel connection is handling comm messages. This option allows a + * kernel connection to opt out of handling comms. + * + * See https://github.com/jupyter/jupyter_client/issues/263 + */ + handleComms: boolean; + /** * Get the kernel spec. * @@ -637,6 +649,18 @@ export namespace Kernel { */ username?: string; + /** + * Whether the kernel connection should handle comm messages + * + * #### Notes + * The comm message protocol currently has implicit assumptions that only + * one kernel connection is handling comm messages. This option allows a + * kernel connection to opt out of handling comms. + * + * See https://github.com/jupyter/jupyter_client/issues/263 + */ + handleComms?: boolean; + /** * The unique identifier for the kernel client. */ diff --git a/packages/services/src/kernel/messages.ts b/packages/services/src/kernel/messages.ts index 83d401f0be00..8c1bd6561581 100644 --- a/packages/services/src/kernel/messages.ts +++ b/packages/services/src/kernel/messages.ts @@ -143,6 +143,18 @@ export namespace KernelMessage { ): T; export function createMessage(options: IOptions): T { + // Backwards compatibility workaround for services 4.0 defining the wrong + // comm_info_request content. This should be removed with the deprecated + // `target` content option in services 5.0. See + // https://github.com/jupyterlab/jupyterlab/issues/6947 + if (options.msgType === 'comm_info_request') { + const content = options.content as ICommInfoRequestMsg['content']; + if (content.target_name === undefined) { + content.target_name = content.target; + } + delete content.target; + } + return { buffers: options.buffers || [], channel: options.channel, @@ -1076,10 +1088,22 @@ export namespace KernelMessage { * * **See also:** [[ICommInfoReplyMsg]], [[IKernel.commInfo]] */ - export interface ICommInfoRequestMsg extends IShellMessage<'comm_info_request'> { content: { + /** + * The comm target name to filter returned comms + */ + target_name?: string; + + /** + * Filter for returned comms + * + * @deprecated - this is a non-standard field. Use target_name instead + * + * #### Notes + * See https://github.com/jupyterlab/jupyterlab/issues/6947 + */ target?: string; }; } @@ -1091,7 +1115,6 @@ export namespace KernelMessage { * * **See also:** [[ICommInfoRequest]], [[IKernel.commInfo]] */ - export interface ICommInfoReply extends IReplyOkContent { /** * Mapping of comm ids to target names. diff --git a/packages/settingeditor-extension/package.json b/packages/settingeditor-extension/package.json index 4fd9733cf5c8..1c3ab4a73f50 100644 --- a/packages/settingeditor-extension/package.json +++ b/packages/settingeditor-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/settingeditor-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Setting Editor Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,12 +36,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/settingeditor": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/settingeditor": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/settingeditor/package.json b/packages/settingeditor/package.json index e49d9825be67..7629367600be 100644 --- a/packages/settingeditor/package.json +++ b/packages/settingeditor/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/settingeditor", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "The JupyterLab default setting editor interface", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -35,11 +35,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/inspector": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/inspector": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/packages/settingeditor/src/pluginlist.tsx b/packages/settingeditor/src/pluginlist.tsx index 1f7dd5977e68..5daada29c4d2 100644 --- a/packages/settingeditor/src/pluginlist.tsx +++ b/packages/settingeditor/src/pluginlist.tsx @@ -5,6 +5,12 @@ import { ISettingRegistry } from '@jupyterlab/coreutils'; +import { + combineClasses, + DefaultIconReact, + defaultIconRegistry +} from '@jupyterlab/ui-components'; + import { Message } from '@phosphor/messaging'; import { ISignal, Signal } from '@phosphor/signaling'; @@ -253,9 +259,11 @@ namespace Private { const { id, schema, version } = plugin; const itemTitle = `${schema.description}\n${id}\n${version}`; const image = getHint(ICON_CLASS_KEY, registry, plugin); - const iconClass = `jp-MaterialIcon jp-PluginList-icon${ - image ? ' ' + image : '' - }`; + const iconClass = combineClasses( + image, + 'jp-PluginList-icon', + 'jp-MaterialIcon' + ); const iconTitle = getHint(ICON_LABEL_KEY, registry, plugin); return ( @@ -265,7 +273,17 @@ namespace Private { key={id} title={itemTitle} > - + {defaultIconRegistry.contains(image) ? ( + + ) : ( + + )} {schema.title || id} ); diff --git a/packages/settingeditor/style/index.css b/packages/settingeditor/style/index.css index 8e4c3c1c1782..fd84f4f05eda 100644 --- a/packages/settingeditor/style/index.css +++ b/packages/settingeditor/style/index.css @@ -5,6 +5,7 @@ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ @import url('~@phosphor/widgets/style/index.css'); +@import url('~@jupyterlab/ui-components/style/index.css'); @import url('~@jupyterlab/apputils/style/index.css'); @import url('~@jupyterlab/codeeditor/style/index.css'); @import url('~@jupyterlab/rendermime/style/index.css'); diff --git a/packages/settingeditor/tsconfig.json b/packages/settingeditor/tsconfig.json index e38e704a2b31..75553a5273ab 100644 --- a/packages/settingeditor/tsconfig.json +++ b/packages/settingeditor/tsconfig.json @@ -20,6 +20,9 @@ }, { "path": "../rendermime" + }, + { + "path": "../ui-components" } ] } diff --git a/packages/shortcuts-extension/package.json b/packages/shortcuts-extension/package.json index dea928a8ab92..45b5bcf717e5 100644 --- a/packages/shortcuts-extension/package.json +++ b/packages/shortcuts-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/shortcuts-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Shortcuts Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -32,8 +32,8 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0" diff --git a/packages/statusbar-extension/package.json b/packages/statusbar-extension/package.json index d8a1b14e1179..daf55146f17a 100644 --- a/packages/statusbar-extension/package.json +++ b/packages/statusbar-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/statusbar-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Statusbar Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -36,16 +36,16 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/statusbar": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", "@phosphor/widgets": "^1.8.0" }, "devDependencies": { diff --git a/packages/statusbar/package.json b/packages/statusbar/package.json index 047cc5bb9894..7dc5e6123832 100644 --- a/packages/statusbar/package.json +++ b/packages/statusbar/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/statusbar", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab statusbar package.", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -31,10 +31,11 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/packages/statusbar/src/components/icon.tsx b/packages/statusbar/src/components/icon.tsx deleted file mode 100644 index 74bcd444c583..000000000000 --- a/packages/statusbar/src/components/icon.tsx +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Jupyter Development Team. -// Distributed under the terms of the Modified BSD License. - -import * as React from 'react'; - -import { classes, style } from 'typestyle/lib'; - -import icon from '../style/icon'; - -/** - * A namespace for IconItem statics. - */ -export namespace IconItem { - /** - * Props for an IconItem - */ - export interface IProps { - /** - * A CSS class name for the icon. - */ - source: string; - } -} - -/** - * A functional tsx component for an icon. - */ -export function IconItem( - props: IconItem.IProps & React.HTMLAttributes -): React.ReactElement { - const { source, className, ...rest } = props; - return ( -
- ); -} diff --git a/packages/statusbar/src/components/index.ts b/packages/statusbar/src/components/index.ts index 1f2699acab31..bd165a2abf5a 100644 --- a/packages/statusbar/src/components/index.ts +++ b/packages/statusbar/src/components/index.ts @@ -1,7 +1,6 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. -export * from './icon'; export * from './progressBar'; export * from './text'; export * from './group'; diff --git a/packages/statusbar/src/defaults/lineCol.tsx b/packages/statusbar/src/defaults/lineCol.tsx index 2240c2da940c..d46425ace093 100644 --- a/packages/statusbar/src/defaults/lineCol.tsx +++ b/packages/statusbar/src/defaults/lineCol.tsx @@ -7,7 +7,11 @@ import { VDomRenderer, VDomModel, ReactWidget } from '@jupyterlab/apputils'; import { CodeEditor } from '@jupyterlab/codeeditor'; -import { interactiveItem, showPopup, Popup, TextItem } from '..'; +import { DefaultIconReact } from '@jupyterlab/ui-components'; + +import { classes } from 'typestyle/lib'; + +import { interactiveItem, Popup, showPopup, TextItem } from '..'; import { lineFormWrapper, @@ -15,11 +19,11 @@ import { lineFormSearch, lineFormWrapperFocusWithin, lineFormCaption, + lineFormButtonDiv, + lineFormButtonIcon, lineFormButton } from '../style/lineForm'; -import { classes } from 'typestyle/lib'; - /** * A namespace for LineFormComponent statics. */ @@ -111,12 +115,14 @@ class LineFormComponent extends React.Component< this._textInput = input; }} /> - - +
+ + +
} /> @@ -69,18 +69,11 @@ export const InputGroup = (props: IInputGroupProps & CommonProps) => { return ( ); }; -export const Icon = (props: IIconProps) => ( - -); - export const Collapse = (props: ICollapseProps & CommonProps) => ( ); @@ -88,13 +81,13 @@ export const Collapse = (props: ICollapseProps & CommonProps) => ( export const HTMLSelect = (props: IHTMLSelectProps & CommonProps) => ( ); export const Select = (props: ISelectProps & CommonProps) => ( ); diff --git a/packages/ui-components/src/icon/iconimports.ts b/packages/ui-components/src/icon/iconimports.ts new file mode 100644 index 000000000000..3a9151eae78a --- /dev/null +++ b/packages/ui-components/src/icon/iconimports.ts @@ -0,0 +1,62 @@ +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */ + +import { Icon } from './interfaces'; + +// icon svg import statements +import fileSvg from '../../style/icons/filetype/file.svg'; +import folderSvg from '../../style/icons/filetype/folder.svg'; +import html5Svg from '../../style/icons/filetype/html5.svg'; +import imageSvg from '../../style/icons/filetype/image.svg'; +import jsonSvg from '../../style/icons/filetype/json.svg'; +import markdownSvg from '../../style/icons/filetype/markdown.svg'; +import notebookSvg from '../../style/icons/filetype/notebook.svg'; +import pythonSvg from '../../style/icons/filetype/python.svg'; +import rKernelSvg from '../../style/icons/filetype/r-kernel.svg'; +import reactSvg from '../../style/icons/filetype/react.svg'; +import spreadsheetSvg from '../../style/icons/filetype/spreadsheet.svg'; +import yamlSvg from '../../style/icons/filetype/yaml.svg'; +import buildSvg from '../../style/icons/sidebar/build.svg'; +import extensionSvg from '../../style/icons/sidebar/extension.svg'; +import paletteSvg from '../../style/icons/sidebar/palette.svg'; +import runningSvg from '../../style/icons/sidebar/running.svg'; +import tabSvg from '../../style/icons/sidebar/tab.svg'; +import jupyterFaviconSvg from '../../style/icons/splash/jupyter-favicon.svg'; +import kernelSvg from '../../style/icons/statusbar/kernel.svg'; +import lineFormSvg from '../../style/icons/statusbar/line-form.svg'; +import notTrustedSvg from '../../style/icons/statusbar/not-trusted.svg'; +import terminalSvg from '../../style/icons/statusbar/terminal.svg'; +import trustedSvg from '../../style/icons/statusbar/trusted.svg'; + +// defaultIcons definition +export namespace IconImports { + export const defaultIcons: ReadonlyArray = [ + { name: 'file', svg: fileSvg }, + { name: 'folder', svg: folderSvg }, + { name: 'html5', svg: html5Svg }, + { name: 'image', svg: imageSvg }, + { name: 'json', svg: jsonSvg }, + { name: 'markdown', svg: markdownSvg }, + { name: 'notebook', svg: notebookSvg }, + { name: 'python', svg: pythonSvg }, + { name: 'r-kernel', svg: rKernelSvg }, + { name: 'react', svg: reactSvg }, + { name: 'spreadsheet', svg: spreadsheetSvg }, + { name: 'yaml', svg: yamlSvg }, + { name: 'build', svg: buildSvg }, + { name: 'extension', svg: extensionSvg }, + { name: 'palette', svg: paletteSvg }, + { name: 'running', svg: runningSvg }, + { name: 'tab', svg: tabSvg }, + { name: 'jupyter-favicon', svg: jupyterFaviconSvg }, + { name: 'kernel', svg: kernelSvg }, + { name: 'line-form', svg: lineFormSvg }, + { name: 'not-trusted', svg: notTrustedSvg }, + { name: 'terminal', svg: terminalSvg }, + { name: 'trusted', svg: trustedSvg } + ]; +} diff --git a/packages/ui-components/src/icon/iconregistry.tsx b/packages/ui-components/src/icon/iconregistry.tsx new file mode 100644 index 000000000000..d2a5d70b6bfe --- /dev/null +++ b/packages/ui-components/src/icon/iconregistry.tsx @@ -0,0 +1,212 @@ +// Copyright (c) Jupyter Development Team. +// Distributed under the terms of the Modified BSD License. + +import React from 'react'; +import { classes } from 'typestyle/lib'; + +import { Text } from '@jupyterlab/coreutils'; + +import { IIconRegistry, Icon } from './interfaces'; +import { IconImports } from './iconimports'; +import { iconStyle, iconStyleFlat } from '../style/icon'; + +import badSvg from '../../style/debug/bad.svg'; +import blankSvg from '../../style/debug/blank.svg'; + +/** + * The icon registry class. + */ +export class IconRegistry implements IIconRegistry { + constructor(options: IconRegistry.IOptions = {}) { + this._debug = !!options.debug; + + let icons = options.initialIcons || IconImports.defaultIcons; + this.addIcon(...icons); + + // add the bad state and blank icons + this.addIcon( + { name: 'bad', svg: badSvg }, + { name: 'blank', svg: blankSvg } + ); + } + + addIcon(...icons: Icon.IModel[]): void { + icons.forEach((icon: Icon.IModel) => { + let className = icon.className + ? icon.className + : IconRegistry.iconClassName(icon.name); + this._classNameToName[className] = icon.name; + this._nameToClassName[icon.name] = className; + this._svg[icon.name] = icon.svg; + }); + } + + contains(name: string): boolean { + return name in this._svg || name in this._classNameToName; + } + + /** + * Get the icon as an HTMLElement of tag + */ + icon( + props: Icon.INodeOptions & { container?: HTMLElement } + ): HTMLElement | null { + const { name, className, title, container, ...propsStyle } = props; + + // we may have been handed a className in place of name + let resolvedName = this.resolveName(name); + if ( + !resolvedName || + (container && + container.dataset.icon && + container.dataset.icon === resolvedName) + ) { + // bail if failing silently or icon node is already set + return; + } + + let svgNode = Private.parseSvg(this.svg(resolvedName)); + + if (title) { + Private.setTitleSvg(svgNode, title); + } + + if (container) { + // clear any existing icon in container (and all other child elements) + container.textContent = ''; + container.dataset.icon = resolvedName; + container.appendChild(svgNode); + + let styleClass = propsStyle ? iconStyle(propsStyle) : ''; + if (className || className === '') { + // override the className, if explicitly passed + container.className = classes(className, styleClass); + } else if (!container.classList.contains(styleClass)) { + // add icon styling class to the container's class, if not already present + container.className = classes(container.className, styleClass); + } + } else { + // add icon styling class directly to the svg node + svgNode.setAttribute( + 'class', + classes(className, propsStyle ? iconStyleFlat(propsStyle) : '') + ); + } + + return svgNode; + } + + /** + * Get the icon as a ReactElement of tag + * TODO: figure out how to remove the unnecessary outer + */ + iconReact( + props: Icon.INodeOptions & { tag?: 'div' | 'span' } + ): React.ReactElement { + const { name, className, title, tag, ...propsStyle } = props; + const Tag = tag || 'div'; + + // we may have been handed a className in place of name + let resolvedName = this.resolveName(name); + if (!resolvedName) { + // bail if failing silently + return <>; + } + + return ( + + ); + } + + resolveName(name: string): string { + if (!(name in this._svg)) { + // assume name is really a className, split the className into parts and check each part + for (let className of name.split(/\s+/)) { + if (className in this._classNameToName) { + return this._classNameToName[className]; + } + } + if (this._debug) { + // couldn't resolve name, mark as bad and warn + console.error(`Invalid icon name: ${name}`); + return 'bad'; + } else { + // couldn't resolve name, fail silently + return ''; + } + } + + return name; + } + + svg(name: string): string { + return this._svg[name]; + } + + static iconClassName(name: string): string { + return 'jp-' + Text.camelCase(name, true) + 'Icon'; + } + + private _classNameToName: { [key: string]: string } = Object.create(null); + private _debug: boolean = false; + private _nameToClassName: { [key: string]: string } = Object.create(null); + private _svg: { [key: string]: string } = Object.create(null); +} + +/** + * The defaultIconRegistry instance. + */ +export const defaultIconRegistry: IconRegistry = new IconRegistry(); + +/** + * Alias for defaultIconRegistry.iconReact that can be used as a React component + */ +export const DefaultIconReact = ( + props: Icon.INodeOptions & { tag?: 'div' | 'span' } +): React.ReactElement => { + return defaultIconRegistry.iconReact(props); +}; + +export namespace IconRegistry { + /** + * The options used to create an icon registry. + */ + export interface IOptions { + /** + * The initial icons for the registry. + * The [[Icon.defaultIcons]] will be used if not given. + */ + initialIcons?: Icon.IModel[]; + + /** + * If the debug flag is set, missing icons will raise a warning + * and be visually marked with an "X". Otherwise, missing icons + * will fail silently. + */ + debug?: boolean; + } +} + +namespace Private { + export function parseSvg(svg: string): HTMLElement { + let parser = new DOMParser(); + return parser.parseFromString(svg, 'image/svg+xml').documentElement; + } + + export function setTitleSvg(svgNode: HTMLElement, title: string): void { + // add a title node to the top level svg node + let titleNodes = svgNode.getElementsByTagName('title'); + if (titleNodes) { + titleNodes[0].textContent = title; + } else { + let titleNode = document.createElement('title'); + titleNode.textContent = title; + svgNode.appendChild(titleNode); + } + } +} diff --git a/packages/ui-components/src/icon/index.ts b/packages/ui-components/src/icon/index.ts new file mode 100644 index 000000000000..c64a470388c7 --- /dev/null +++ b/packages/ui-components/src/icon/index.ts @@ -0,0 +1,7 @@ +// Copyright (c) Jupyter Development Team. +// Distributed under the terms of the Modified BSD License. + +export * from './iconimports'; +export * from './iconregistry'; +export * from './interfaces'; +export * from './tabbarsvg'; diff --git a/packages/ui-components/src/icon/interfaces.ts b/packages/ui-components/src/icon/interfaces.ts new file mode 100644 index 000000000000..e1f6e7c6c74d --- /dev/null +++ b/packages/ui-components/src/icon/interfaces.ts @@ -0,0 +1,63 @@ +import { Token } from '@phosphor/coreutils'; + +import { IIconStyle } from '../style/icon'; +import React from 'react'; + +/** + * The interface for an object that keeps a registry of inline + * svg icons. Has methods for setting up inline svg icons as + * either `HTMLElement` or `ReactElement` + */ +export interface IIconRegistry { + /** + * Add the raw text representation of an svg icon to this registry + */ + addIcon(...icons: Icon.IModel[]): void; + + /** + * Check if any icon of name `name` has been registered. + * Exact matches only + */ + contains(name: string): boolean; + + /** + * Get the icon as an HTMLElement of tag + */ + icon( + props: Icon.INodeOptions & { container: HTMLElement } + ): HTMLElement | null; + + /** + * Get the icon as a ReactElement of tag + */ + iconReact( + props: Icon.INodeOptions & { tag?: 'div' | 'span' } + ): React.ReactElement; +} + +/** + * The IIconRegistry token. + */ +export const IIconRegistry = new Token( + '@jupyterlab/ui-components:IIconRegistry' +); + +export namespace Icon { + /** + * A representation of the resources underlying an inline svg icon + */ + export interface IModel { + name: string; + className?: string; + svg: string; + } + + /** + * The options used when creating an icon node + */ + export interface INodeOptions extends IIconStyle { + name: string; + className?: string; + title?: string; + } +} diff --git a/packages/ui-components/src/icon/tabbarsvg.ts b/packages/ui-components/src/icon/tabbarsvg.ts new file mode 100644 index 000000000000..f48845193340 --- /dev/null +++ b/packages/ui-components/src/icon/tabbarsvg.ts @@ -0,0 +1,140 @@ +import { Message } from '@phosphor/messaging'; + +import { h, VirtualElement } from '@phosphor/virtualdom'; + +import { DockPanel, TabBar, Widget } from '@phosphor/widgets'; + +import { IconKindType } from '../style/icon'; +import { defaultIconRegistry } from './iconregistry'; + +/** + * A widget which displays titles as a single row or column of tabs. Tweaked + * to enable the use of inline svgs as tab icons. + */ +export class TabBarSvg extends TabBar { + /** + * Construct a new tab bar. Sets the (icon) kind and overrides + * the default renderer. + * + * @param options - The options for initializing the tab bar. + */ + constructor(options: TabBarSvg.IOptions) { + options.renderer = options.renderer || TabBarSvg.defaultRenderer; + super(options); + + this._kind = options.kind; + } + + /** + * A message handler invoked on an `'update-request'` message. Adds svg + * nodes to icon nodes as appropriate + */ + protected onUpdateRequest(msg: Message): void { + super.onUpdateRequest(msg); + + for (let itab in this.contentNode.children) { + let tab = this.contentNode.children[itab]; + let title = this.titles[itab]; + let iconNode = tab.children ? (tab.children[0] as HTMLElement) : null; + + if (iconNode) { + // add the svg node, if not already present + defaultIconRegistry.icon({ + name: title.iconClass, + className: '', + container: iconNode, + center: true, + kind: this._kind + }); + } + } + } + + protected _kind: IconKindType; +} + +export namespace TabBarSvg { + export interface IOptions extends TabBar.IOptions { + /** + * The kind of icon this tab bar widget should render. + * Adds preset styling to the icons. + */ + kind?: IconKindType; + } + + /** + * A modified implementation of the TabBar Renderer. + */ + export class Renderer extends TabBar.Renderer { + /** + * Render the icon element for a tab. This version avoids clobbering + * the icon node's children. + * + * @param data - The data to use for rendering the tab. + * + * @returns A virtual element representing the tab icon. + */ + renderIcon(data: TabBar.IRenderData): VirtualElement { + let className = this.createIconClass(data); + return h.div({ className }); + } + } + + export const defaultRenderer = new Renderer(); +} + +/** + * A widget which provides a flexible docking area for widgets.Tweaked + * to enable the use of inline svgs as tab icons. + */ +export class DockPanelSvg extends DockPanel { + /** + * Construct a new dock panel. Overrides the default renderer + * and sets the (icon) kind + * + * @param options - The options for initializing the panel. + */ + constructor(options: DockPanelSvg.IOptions) { + if (!options.renderer) { + options.renderer = new DockPanelSvg.Renderer(options.kind); + } + + super(options); + } +} + +export namespace DockPanelSvg { + export interface IOptions extends DockPanel.IOptions { + /** + * The kind of icon this dock panel widget should render. + * Adds preset styling to the icons. + */ + kind?: IconKindType; + } + + /** + * A modified implementation of the DockPanel Renderer. + */ + export class Renderer extends DockPanel.Renderer { + constructor(kind?: IconKindType) { + super(); + this._kind = kind; + } + + /** + * Create a new tab bar (with inline svg icons enabled + * for use with a dock panel. + * + * @returns A new tab bar for a dock panel. + */ + createTabBar(): TabBarSvg { + let bar = new TabBarSvg({ + kind: this._kind + }); + bar.addClass('p-DockPanel-tabBar'); + return bar; + } + + _kind: IconKindType; + } +} diff --git a/packages/ui-components/src/index.ts b/packages/ui-components/src/index.ts new file mode 100644 index 000000000000..cabb6173cab6 --- /dev/null +++ b/packages/ui-components/src/index.ts @@ -0,0 +1,6 @@ +// Copyright (c) Jupyter Development Team. +// Distributed under the terms of the Modified BSD License. + +export * from './blueprint'; +export * from './icon'; +export * from './utils'; diff --git a/packages/ui-components/src/style/icon.ts b/packages/ui-components/src/style/icon.ts new file mode 100644 index 000000000000..b4f9910eec7f --- /dev/null +++ b/packages/ui-components/src/style/icon.ts @@ -0,0 +1,260 @@ +// Copyright (c) Jupyter Development Team. +// Distributed under the terms of the Modified BSD License. + +import { cssRule, style } from 'typestyle/lib'; +import { NestedCSSProperties } from 'typestyle/lib/types'; + +/** + * - breadCrumb: The path icons above the filebrowser + * - dockPanelBar: The tab icons above the main area + * - launcherCard: The icons for the cards at the bottom of the launcher + * - launcherSection: The icons to left of the Launcher section headers + * - listing: The icons to the left of the filebrowser listing items + * - settingsEditor: The icons to the left of each section of the settings editor + * - sideBar: The icons for the sidebar (default to the left of the main window) + * - splash: The icon used for the splash screen + * - tabManager: The icons for the tabManager in the sidebar + */ +export type IconKindType = + | 'breadCrumb' + | 'dockPanelBar' + | 'launcherCard' + | 'launcherSection' + | 'listing' + | 'settingsEditor' + | 'sideBar' + | 'splash' + | 'statusBar' + | 'tabManager' + | 'unset'; + +export interface IIconStyle extends NestedCSSProperties { + /** + * center the icon svg in its container + */ + center?: boolean; + + /** + * the kind of the icon, associated with a default stylesheet + */ + kind?: IconKindType; +} + +/** + * styles for centering node inside of containers + */ +const containerCSSCenter: NestedCSSProperties = { + alignItems: 'center', + display: 'flex' +}; + +const iconCSSCenter: NestedCSSProperties = { + display: 'block', + margin: '0 auto', + width: '100%' +}; + +/** + * icon kind specific styles + */ +const iconCSSBreadCrumb: NestedCSSProperties = { + borderRadius: 'var(--jp-border-radius)', + cursor: 'pointer', + margin: '0px 2px', + padding: '0px 2px', + height: '16px', + width: '16px', + verticalAlign: 'middle', + $nest: { + '&:hover': { + backgroundColor: 'var(--jp-layout-color2)' + }, + '&:first-child': { + marginLeft: '0px' + }, + ['.jp-mod-dropTarget']: { + backgroundColor: 'var(--jp-brand-color2)', + opacity: 0.7 + } + } +}; + +const iconCSSDockPanelBar: NestedCSSProperties = { + height: '14px', + width: '14px' +}; + +const iconCSSLauncherCard: NestedCSSProperties = { + height: 'var(--jp-private-launcher-large-icon-size)', + width: 'var(--jp-private-launcher-large-icon-size)' +}; + +const iconCSSLauncherSection: NestedCSSProperties = { + marginRight: '12px', + height: 'var(--jp-private-launcher-small-icon-size)', + width: 'var(--jp-private-launcher-small-icon-size)' +}; + +const iconCSSListing: NestedCSSProperties = { + height: '16px', + width: '16px' +}; + +const iconCSSSettingsEditor: NestedCSSProperties = { + height: '16px', + width: '16px' +}; + +const iconCSSSideBar: NestedCSSProperties = { + width: '20px' +}; + +const iconCSSSplash: NestedCSSProperties = { + width: '100px' +}; + +const iconCSSStatusBar: NestedCSSProperties = { + left: '0px', + top: '0px', + height: '18px', + width: '20px', + position: 'relative' +}; + +const iconCSSTabManager: NestedCSSProperties = { + height: '16px', + width: '16px' +}; + +const iconCSSKind: { [k in IconKindType]: NestedCSSProperties } = { + breadCrumb: iconCSSBreadCrumb, + dockPanelBar: iconCSSDockPanelBar, + launcherCard: iconCSSLauncherCard, + launcherSection: iconCSSLauncherSection, + listing: iconCSSListing, + settingsEditor: iconCSSSettingsEditor, + sideBar: iconCSSSideBar, + splash: iconCSSSplash, + statusBar: iconCSSStatusBar, + tabManager: iconCSSTabManager, + unset: {} +}; + +/** + * container kind specific styles + */ +const containerCSSDockPanelBar: NestedCSSProperties = { + marginRight: '4px' +}; + +const containerCSSLauncherCard: NestedCSSProperties = { + height: 'var(--jp-private-launcher-card-icon-height)' +}; + +const containerCSSListing: NestedCSSProperties = { + flex: '0 0 20px', + marginRight: '4px', + position: 'relative' +}; + +const containerCSSSettingsEditor: NestedCSSProperties = { + display: 'inline-block', + flex: '0 0 20px', + marginLeft: '2px', + marginRight: '1px', + position: 'relative', + height: '20px', + width: '20px' +}; + +const containerCSSSideBar: NestedCSSProperties = { + transform: 'rotate(90deg)' +}; + +const containerCSSSplash: NestedCSSProperties = { + animation: '0.3s fade-in linear forwards', + height: '100%', + width: '100%', + zIndex: 1 +}; + +const containerCSSTabManager: NestedCSSProperties = { + marginRight: '2px', + position: 'relative' +}; + +const containerCSSKind: { [k in IconKindType]: NestedCSSProperties } = { + breadCrumb: {}, + dockPanelBar: containerCSSDockPanelBar, + launcherCard: containerCSSLauncherCard, + launcherSection: {}, + listing: containerCSSListing, + settingsEditor: containerCSSSettingsEditor, + sideBar: containerCSSSideBar, + splash: containerCSSSplash, + statusBar: {}, + tabManager: containerCSSTabManager, + unset: {} +}; + +/** + * for putting together the icon kind style with any user input styling, + * as well as styling from optional flags like `center` + */ +function iconCSS(props: IIconStyle): NestedCSSProperties { + const { kind, center, ...propsCSS } = props; + + return { + ...(center ? iconCSSCenter : {}), + ...(kind ? iconCSSKind[kind] : {}), + ...propsCSS + }; +} + +/** + * for putting together the container kind style with any + * styling from optional flags like `center` + */ +function containerCSS(props: IIconStyle): NestedCSSProperties { + const { kind, center } = props; + + return { + ...(center ? containerCSSCenter : {}), + ...(kind ? containerCSSKind[kind] : {}) + }; +} + +/** + * for setting the style on the container of an svg node representing an icon + */ +export const iconStyle = (props: IIconStyle): string => { + return style({ + ...containerCSS(props), + $nest: { + ['svg']: iconCSS(props) + } + }); +}; + +/** + * for setting the style directly on the svg node representing an icon + */ +export const iconStyleFlat = (props: IIconStyle): string => { + return style(iconCSS(props)); +}; + +// TODO: Figure out a better cludge for styling current sidebar tab selection +cssRule( + `.p-TabBar-tab.p-mod-current .${iconStyle({ + center: true, + kind: 'sideBar' + })}`, + { + transform: + 'rotate(90deg)\n' + + ' translate(\n' + + ' calc(-0.5 * var(--jp-border-width)),\n' + + ' calc(-0.5 * var(--jp-border-width))\n' + + ' )' + } +); diff --git a/packages/ui-components/src/svg.d.ts b/packages/ui-components/src/svg.d.ts new file mode 100644 index 000000000000..90e4deda5555 --- /dev/null +++ b/packages/ui-components/src/svg.d.ts @@ -0,0 +1,58 @@ +// Copyright (c) Jupyter Development Team. +// Distributed under the terms of the Modified BSD License. + +// including this file in a package allows for the use of import statements +// with svg files. Example: `import xSvg from 'path/xSvg.svg'` + +// for use with raw-loader in Webpack. +// The svg will be imported as a raw string + +declare module '*.svg' { + const value: string; + export default value; +} + +// for use with svg-react-loader in Webpack. +// The svg will be imported as a ReactElement + +// declare module '*.svg' { +// import { HTMLAttributes } from 'react'; +// const value: React.ComponentType>; +// export default value; +// } + +// as an alternative to importing svgs one at a time, you can do a glob import +// using `context.requires`. This is a Webpack only extension. Implementation: + +// import { PathExt } from '@jupyterlab/coreutils'; +// +// /** +// * Import all svgs from a directory. The input argument should be +// * of the form `require.context('raw-loader!', true, /\.svg$/)`. +// * should be a string literal path, as this is needed by `require`. +// */ +// export function importSvgs(r: any, exclude: string[] = []): IModel[] { +// const excset = new Set(exclude); +// +// return r.keys().reduce((svgs: IModel[], item: string, index: number) => { +// const name = PathExt.stem(item); +// if (!excset.has(name)) { +// svgs.push({ name: name, svg: r(item).default }); +// } +// return svgs; +// }, []); +// } +// +// // create the array of default icon models +// let icons: IModel[]; +// try { +// // require.context is supplied by Webpack, and doesn't play nice with jest +// icons = importSvgs( +// require.context('raw-loader!../../style/icons', true, /\.svg$/), +// ['bad', 'blank'] +// ); +// } catch (e) { +// // fallback for jest tests +// icons = []; +// } +// export const defaultIcons: ReadonlyArray = icons; diff --git a/packages/ui-components/src/utils.ts b/packages/ui-components/src/utils.ts index 69ba135d38a8..ba5a549a732b 100644 --- a/packages/ui-components/src/utils.ts +++ b/packages/ui-components/src/utils.ts @@ -1,6 +1,6 @@ // Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. -export function combineClassNames(...classNames: (string | undefined)[]) { - return classNames.join(' '); +export function combineClasses(...classNames: (string | undefined)[]) { + return classNames.filter(c => !!c).join(' '); } diff --git a/packages/ui-components/style/base.css b/packages/ui-components/style/base.css index 8adb7976093f..d8730de3cf3f 100644 --- a/packages/ui-components/style/base.css +++ b/packages/ui-components/style/base.css @@ -112,3 +112,7 @@ input::placeholder { select { box-sizing: border-box; } + +/* Sibling imports */ +@import './deprecated.css'; +@import './deprecatedExtra.css'; diff --git a/packages/ui-components/style/debug/bad.svg b/packages/ui-components/style/debug/bad.svg new file mode 100644 index 000000000000..1fe7dcd245ef --- /dev/null +++ b/packages/ui-components/style/debug/bad.svg @@ -0,0 +1,7 @@ + + + diff --git a/packages/ui-components/style/debug/blank.svg b/packages/ui-components/style/debug/blank.svg new file mode 100644 index 000000000000..d44952fd4948 --- /dev/null +++ b/packages/ui-components/style/debug/blank.svg @@ -0,0 +1,7 @@ + + + diff --git a/packages/ui-components/style/deprecated.css b/packages/ui-components/style/deprecated.css new file mode 100644 index 000000000000..70ec78758d03 --- /dev/null +++ b/packages/ui-components/style/deprecated.css @@ -0,0 +1,110 @@ +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/* This file was auto-generated by ensureUiComponents() in @jupyterlab/buildutils */ + +/** + * (DEPRECATED) Support for consuming icons as CSS background images + */ + +/* Icons urls */ + +:root { + --jp-icon-file: url('icons/filetype/file.svg'); + --jp-icon-folder: url('icons/filetype/folder.svg'); + --jp-icon-html5: url('icons/filetype/html5.svg'); + --jp-icon-image: url('icons/filetype/image.svg'); + --jp-icon-json: url('icons/filetype/json.svg'); + --jp-icon-markdown: url('icons/filetype/markdown.svg'); + --jp-icon-notebook: url('icons/filetype/notebook.svg'); + --jp-icon-python: url('icons/filetype/python.svg'); + --jp-icon-r-kernel: url('icons/filetype/r-kernel.svg'); + --jp-icon-react: url('icons/filetype/react.svg'); + --jp-icon-spreadsheet: url('icons/filetype/spreadsheet.svg'); + --jp-icon-yaml: url('icons/filetype/yaml.svg'); + --jp-icon-build: url('icons/sidebar/build.svg'); + --jp-icon-extension: url('icons/sidebar/extension.svg'); + --jp-icon-palette: url('icons/sidebar/palette.svg'); + --jp-icon-running: url('icons/sidebar/running.svg'); + --jp-icon-tab: url('icons/sidebar/tab.svg'); + --jp-icon-jupyter-favicon: url('icons/splash/jupyter-favicon.svg'); + --jp-icon-kernel: url('icons/statusbar/kernel.svg'); + --jp-icon-line-form: url('icons/statusbar/line-form.svg'); + --jp-icon-not-trusted: url('icons/statusbar/not-trusted.svg'); + --jp-icon-terminal: url('icons/statusbar/terminal.svg'); + --jp-icon-trusted: url('icons/statusbar/trusted.svg'); +} + +/* Icon CSS class declarations */ + +.jp-FileIcon { + background-image: var(--jp-icon-file); +} +.jp-FolderIcon { + background-image: var(--jp-icon-folder); +} +.jp-Html5Icon { + background-image: var(--jp-icon-html5); +} +.jp-ImageIcon { + background-image: var(--jp-icon-image); +} +.jp-JsonIcon { + background-image: var(--jp-icon-json); +} +.jp-MarkdownIcon { + background-image: var(--jp-icon-markdown); +} +.jp-NotebookIcon { + background-image: var(--jp-icon-notebook); +} +.jp-PythonIcon { + background-image: var(--jp-icon-python); +} +.jp-RKernelIcon { + background-image: var(--jp-icon-r-kernel); +} +.jp-ReactIcon { + background-image: var(--jp-icon-react); +} +.jp-SpreadsheetIcon { + background-image: var(--jp-icon-spreadsheet); +} +.jp-YamlIcon { + background-image: var(--jp-icon-yaml); +} +.jp-BuildIcon { + background-image: var(--jp-icon-build); +} +.jp-ExtensionIcon { + background-image: var(--jp-icon-extension); +} +.jp-PaletteIcon { + background-image: var(--jp-icon-palette); +} +.jp-RunningIcon { + background-image: var(--jp-icon-running); +} +.jp-TabIcon { + background-image: var(--jp-icon-tab); +} +.jp-JupyterFaviconIcon { + background-image: var(--jp-icon-jupyter-favicon); +} +.jp-KernelIcon { + background-image: var(--jp-icon-kernel); +} +.jp-LineFormIcon { + background-image: var(--jp-icon-line-form); +} +.jp-NotTrustedIcon { + background-image: var(--jp-icon-not-trusted); +} +.jp-TerminalIcon { + background-image: var(--jp-icon-terminal); +} +.jp-TrustedIcon { + background-image: var(--jp-icon-trusted); +} diff --git a/packages/theme-dark-extension/style/icons/jupyter/csv_selected.svg b/packages/ui-components/style/deprecated/selected/csv_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/csv_selected.svg rename to packages/ui-components/style/deprecated/selected/csv_selected.svg diff --git a/packages/theme-dark-extension/style/icons/jupyter/file_selected.svg b/packages/ui-components/style/deprecated/selected/file_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/file_selected.svg rename to packages/ui-components/style/deprecated/selected/file_selected.svg diff --git a/packages/theme-dark-extension/style/icons/md/ic_folder_24px_selected.svg b/packages/ui-components/style/deprecated/selected/ic_folder_24px_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/md/ic_folder_24px_selected.svg rename to packages/ui-components/style/deprecated/selected/ic_folder_24px_selected.svg diff --git a/packages/theme-dark-extension/style/icons/md/ic_memory_24px_selected.svg b/packages/ui-components/style/deprecated/selected/ic_memory_24px_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/md/ic_memory_24px_selected.svg rename to packages/ui-components/style/deprecated/selected/ic_memory_24px_selected.svg diff --git a/packages/theme-dark-extension/style/icons/jupyter/image_selected.svg b/packages/ui-components/style/deprecated/selected/image_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/image_selected.svg rename to packages/ui-components/style/deprecated/selected/image_selected.svg diff --git a/packages/theme-dark-extension/style/icons/jupyter/json_selected.svg b/packages/ui-components/style/deprecated/selected/json_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/json_selected.svg rename to packages/ui-components/style/deprecated/selected/json_selected.svg diff --git a/packages/theme-dark-extension/style/icons/jupyter/markdown_selected.svg b/packages/ui-components/style/deprecated/selected/markdown_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/markdown_selected.svg rename to packages/ui-components/style/deprecated/selected/markdown_selected.svg diff --git a/packages/theme-dark-extension/style/icons/jupyter/notebook_selected.svg b/packages/ui-components/style/deprecated/selected/notebook_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/notebook_selected.svg rename to packages/ui-components/style/deprecated/selected/notebook_selected.svg diff --git a/packages/theme-dark-extension/style/icons/jupyter/python_selected.svg b/packages/ui-components/style/deprecated/selected/python_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/python_selected.svg rename to packages/ui-components/style/deprecated/selected/python_selected.svg diff --git a/packages/theme-dark-extension/style/icons/jupyter/r_selected.svg b/packages/ui-components/style/deprecated/selected/r_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/r_selected.svg rename to packages/ui-components/style/deprecated/selected/r_selected.svg diff --git a/packages/theme-dark-extension/style/icons/jupyter/yml_selected.svg b/packages/ui-components/style/deprecated/selected/yml_selected.svg similarity index 100% rename from packages/theme-dark-extension/style/icons/jupyter/yml_selected.svg rename to packages/ui-components/style/deprecated/selected/yml_selected.svg diff --git a/packages/ui-components/style/deprecatedExtra.css b/packages/ui-components/style/deprecatedExtra.css new file mode 100644 index 000000000000..25bd79e43ebb --- /dev/null +++ b/packages/ui-components/style/deprecatedExtra.css @@ -0,0 +1,25 @@ +/*----------------------------------------------------------------------------- +| Copyright (c) Jupyter Development Team. +| Distributed under the terms of the Modified BSD License. +|----------------------------------------------------------------------------*/ + +/** + * This file contains support for deprecated CSS not covered in the + * auto-generated `deprecated.css`. + */ + +/* vars for consuming "selected" icons as CSS background images */ + +:root { + --jp-icon-file-selected: url('deprecated/selected/file_selected.svg'); + --jp-icon-folder-selected: url('deprecated/selected/ic_folder_24px_selected.svg'); + --jp-icon-image-selected: url('deprecated/selected/image_selected.svg'); + --jp-icon-json-selected: url('deprecated/selected/json_selected.svg'); + --jp-icon-kernel-selected: url('deprecated/selected/ic_memory_24px_selected.svg'); + --jp-icon-markdown-selected: url('deprecated/selected/markdown_selected.svg'); + --jp-icon-notebook-selected: url('deprecated/selected/notebook_selected.svg'); + --jp-icon-python-selected: url('deprecated/selected/python_selected.svg'); + --jp-icon-r-selected: url('deprecated/selected/r_selected.svg'); + --jp-icon-spreadsheet-selected: url('deprecated/selected/csv_selected.svg'); + --jp-icon-yaml-selected: url('deprecated/selected/yml_selected.svg'); +} diff --git a/packages/ui-components/style/icons/filetype/file.svg b/packages/ui-components/style/icons/filetype/file.svg new file mode 100644 index 000000000000..0526ea36ef24 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/file.svg @@ -0,0 +1,7 @@ + + + + diff --git a/packages/ui-components/style/icons/filetype/folder.svg b/packages/ui-components/style/icons/filetype/folder.svg new file mode 100644 index 000000000000..e4d6d832d610 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/folder.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/ui-components/style/icons/filetype/html5.svg b/packages/ui-components/style/icons/filetype/html5.svg new file mode 100644 index 000000000000..d4c7978c5d4c --- /dev/null +++ b/packages/ui-components/style/icons/filetype/html5.svg @@ -0,0 +1,11 @@ + + + + + + + + + + > + diff --git a/packages/ui-components/style/icons/filetype/image.svg b/packages/ui-components/style/icons/filetype/image.svg new file mode 100644 index 000000000000..7035ee0c4747 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/image.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/packages/ui-components/style/icons/filetype/json.svg b/packages/ui-components/style/icons/filetype/json.svg new file mode 100644 index 000000000000..b840e84d4718 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/json.svg @@ -0,0 +1,16 @@ + + + + diff --git a/packages/ui-components/style/icons/filetype/markdown.svg b/packages/ui-components/style/icons/filetype/markdown.svg new file mode 100644 index 000000000000..691d2037ef02 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/markdown.svg @@ -0,0 +1,10 @@ + + + + diff --git a/packages/ui-components/style/icons/filetype/notebook.svg b/packages/ui-components/style/icons/filetype/notebook.svg new file mode 100644 index 000000000000..cbf8bba2f6d2 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/notebook.svg @@ -0,0 +1,8 @@ + + + + diff --git a/packages/ui-components/style/icons/filetype/python.svg b/packages/ui-components/style/icons/filetype/python.svg new file mode 100644 index 000000000000..57e750cc0281 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/python.svg @@ -0,0 +1,13 @@ + + + + diff --git a/packages/ui-components/style/icons/filetype/r-kernel.svg b/packages/ui-components/style/icons/filetype/r-kernel.svg new file mode 100644 index 000000000000..28353efbe037 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/r-kernel.svg @@ -0,0 +1,9 @@ + + + + diff --git a/packages/ui-components/style/icons/filetype/react.svg b/packages/ui-components/style/icons/filetype/react.svg new file mode 100644 index 000000000000..be0691e3aa1c --- /dev/null +++ b/packages/ui-components/style/icons/filetype/react.svg @@ -0,0 +1,32 @@ + + + diff --git a/packages/ui-components/style/icons/filetype/spreadsheet.svg b/packages/ui-components/style/icons/filetype/spreadsheet.svg new file mode 100644 index 000000000000..97b81167ca2a --- /dev/null +++ b/packages/ui-components/style/icons/filetype/spreadsheet.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/ui-components/style/icons/filetype/yaml.svg b/packages/ui-components/style/icons/filetype/yaml.svg new file mode 100644 index 000000000000..9a1772a39826 --- /dev/null +++ b/packages/ui-components/style/icons/filetype/yaml.svg @@ -0,0 +1,10 @@ + + + + diff --git a/packages/ui-components/style/icons/sidebar/build.svg b/packages/ui-components/style/icons/sidebar/build.svg new file mode 100755 index 000000000000..32ddc5709bea --- /dev/null +++ b/packages/ui-components/style/icons/sidebar/build.svg @@ -0,0 +1,7 @@ + + + diff --git a/packages/ui-components/style/icons/sidebar/extension.svg b/packages/ui-components/style/icons/sidebar/extension.svg new file mode 100644 index 000000000000..e7c930bdad64 --- /dev/null +++ b/packages/ui-components/style/icons/sidebar/extension.svg @@ -0,0 +1,7 @@ + + + diff --git a/packages/ui-components/style/icons/sidebar/palette.svg b/packages/ui-components/style/icons/sidebar/palette.svg new file mode 100644 index 000000000000..bccca056d078 --- /dev/null +++ b/packages/ui-components/style/icons/sidebar/palette.svg @@ -0,0 +1,7 @@ + + + diff --git a/packages/ui-components/style/icons/sidebar/running.svg b/packages/ui-components/style/icons/sidebar/running.svg new file mode 100644 index 000000000000..b10ef9c297cb --- /dev/null +++ b/packages/ui-components/style/icons/sidebar/running.svg @@ -0,0 +1,7 @@ + + > + diff --git a/packages/ui-components/style/icons/sidebar/tab.svg b/packages/ui-components/style/icons/sidebar/tab.svg new file mode 100644 index 000000000000..4ce0b473dcb6 --- /dev/null +++ b/packages/ui-components/style/icons/sidebar/tab.svg @@ -0,0 +1,7 @@ + + + diff --git a/packages/ui-components/style/icons/splash/jupyter-favicon.svg b/packages/ui-components/style/icons/splash/jupyter-favicon.svg new file mode 100644 index 000000000000..755b30eec9ca --- /dev/null +++ b/packages/ui-components/style/icons/splash/jupyter-favicon.svg @@ -0,0 +1,5 @@ + + Jupyter Favicon + + + diff --git a/packages/ui-components/style/icons/statusbar/kernel.svg b/packages/ui-components/style/icons/statusbar/kernel.svg new file mode 100644 index 000000000000..e97ce48f2349 --- /dev/null +++ b/packages/ui-components/style/icons/statusbar/kernel.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/statusbar/style/line-form.svg b/packages/ui-components/style/icons/statusbar/line-form.svg similarity index 57% rename from packages/statusbar/style/line-form.svg rename to packages/ui-components/style/icons/statusbar/line-form.svg index 7491cb849bab..b4fd1ef77088 100644 --- a/packages/statusbar/style/line-form.svg +++ b/packages/ui-components/style/icons/statusbar/line-form.svg @@ -1,4 +1,4 @@ - + diff --git a/packages/ui-components/style/icons/statusbar/not-trusted.svg b/packages/ui-components/style/icons/statusbar/not-trusted.svg new file mode 100644 index 000000000000..4a0936fee37a --- /dev/null +++ b/packages/ui-components/style/icons/statusbar/not-trusted.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/ui-components/style/icons/statusbar/terminal.svg b/packages/ui-components/style/icons/statusbar/terminal.svg new file mode 100644 index 000000000000..e8d49b4e91a1 --- /dev/null +++ b/packages/ui-components/style/icons/statusbar/terminal.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/ui-components/style/icons/statusbar/trusted.svg b/packages/ui-components/style/icons/statusbar/trusted.svg new file mode 100644 index 000000000000..8da29db6c18f --- /dev/null +++ b/packages/ui-components/style/icons/statusbar/trusted.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/ui-components/style/index.css b/packages/ui-components/style/index.css index ee417b10abe9..f7e375acb680 100644 --- a/packages/ui-components/style/index.css +++ b/packages/ui-components/style/index.css @@ -5,7 +5,7 @@ /* This file was auto-generated by ensurePackage() in @jupyterlab/buildutils */ @import url('~@blueprintjs/core/lib/css/blueprint.css'); -@import url('~@blueprintjs/icons/lib/css/blueprint-icons.css'); @import url('~@blueprintjs/select/lib/css/blueprint-select.css'); +@import url('~@phosphor/widgets/style/index.css'); @import url('./base.css'); diff --git a/packages/ui-components/tdoptions.json b/packages/ui-components/tdoptions.json index 60d100d16c84..330558b24eac 100644 --- a/packages/ui-components/tdoptions.json +++ b/packages/ui-components/tdoptions.json @@ -7,7 +7,8 @@ "lib.es2015.d.ts", "lib.es2015.collection.d.ts", "lib.es2015.promise.d.ts", - "lib.dom.d.ts" + "lib.dom.d.ts", + "lib.dom.iterable.d.ts" ], "out": "../../docs/api/ui-components", "baseUrl": ".", @@ -16,5 +17,5 @@ }, "esModuleInterop": true, "jsx": "react", - "types": ["webpack-env"] + "types": ["webpack-env", "node"] } diff --git a/packages/ui-components/tsconfig.json b/packages/ui-components/tsconfig.json index b25ed53167d9..3460c40ab1d8 100644 --- a/packages/ui-components/tsconfig.json +++ b/packages/ui-components/tsconfig.json @@ -2,9 +2,13 @@ "extends": "../../tsconfigbase", "compilerOptions": { "outDir": "lib", - "types": ["webpack-env"], + "types": ["webpack-env", "node"], "rootDir": "src" }, - "include": ["src/*"], - "references": [] + "include": ["src/**/*"], + "references": [ + { + "path": "../coreutils" + } + ] } diff --git a/packages/vdom-extension/package.json b/packages/vdom-extension/package.json index 120ac250eeeb..13eaa698ed3a 100644 --- a/packages/vdom-extension/package.json +++ b/packages/vdom-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/vdom-extension", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - VDOM Renderer", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -34,12 +34,12 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/vdom": "^1.0.2" + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/vdom": "^1.1.0-alpha.1" }, "devDependencies": { "rimraf": "~2.6.2", diff --git a/packages/vdom-extension/src/index.ts b/packages/vdom-extension/src/index.ts index 682cd834130a..8b009b2cf1cd 100644 --- a/packages/vdom-extension/src/index.ts +++ b/packages/vdom-extension/src/index.ts @@ -18,9 +18,9 @@ import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import { RenderedVDOM, IVDOMTracker } from '@jupyterlab/vdom'; /** - * The CSS class for a VDOM icon. + * The name for a VDOM icon. */ -const CSS_ICON_CLASS = 'jp-MaterialIcon jp-VDOMIcon'; +const ICON_NAME = 'react'; /** * The MIME type for VDOM. @@ -34,14 +34,15 @@ const FACTORY_NAME = 'VDOM'; const plugin: JupyterFrontEndPlugin = { id: '@jupyterlab/vdom-extension:factory', - requires: [IRenderMimeRegistry, INotebookTracker, ILayoutRestorer], + requires: [IRenderMimeRegistry], + optional: [INotebookTracker, ILayoutRestorer], provides: IVDOMTracker, autoStart: true, activate: ( app: JupyterFrontEnd, rendermime: IRenderMimeRegistry, - notebooks: INotebookTracker, - restorer: ILayoutRestorer + notebooks: INotebookTracker | null, + restorer: ILayoutRestorer | null ) => { const tracker = new WidgetTracker({ namespace: 'vdom-widget' @@ -57,29 +58,31 @@ const plugin: JupyterFrontEndPlugin = { 0 ); - notebooks.widgetAdded.connect((sender, panel) => { - // Get the notebook's context and rendermime; - const { - context, - content: { rendermime } - } = panel; - - // Add the renderer factory to the notebook's rendermime registry; - rendermime.addFactory( - { - safe: false, - mimeTypes: [MIME_TYPE], - createRenderer: options => new RenderedVDOM(options, context) - }, - 0 - ); - }); + if (notebooks) { + notebooks.widgetAdded.connect((sender, panel) => { + // Get the notebook's context and rendermime; + const { + context, + content: { rendermime } + } = panel; + + // Add the renderer factory to the notebook's rendermime registry; + rendermime.addFactory( + { + safe: false, + mimeTypes: [MIME_TYPE], + createRenderer: options => new RenderedVDOM(options, context) + }, + 0 + ); + }); + } app.docRegistry.addFileType({ name: 'vdom', mimeTypes: [MIME_TYPE], extensions: ['.vdom', '.vdom.json'], - iconClass: CSS_ICON_CLASS + iconClass: ICON_NAME }); const factory = new MimeDocumentFactory({ @@ -87,7 +90,7 @@ const plugin: JupyterFrontEndPlugin = { dataType: 'json', rendermime, name: FACTORY_NAME, - primaryFileType: app.docRegistry.getFileType('vdom'), + primaryFileType: app.docRegistry.getFileType('vdom')!, fileTypes: ['vdom', 'json'], defaultFor: ['vdom'] }); @@ -102,15 +105,17 @@ const plugin: JupyterFrontEndPlugin = { // Add widget factory to document registry. app.docRegistry.addWidgetFactory(factory); - // Handle state restoration. - void restorer.restore(tracker, { - command: 'docmanager:open', - args: widget => ({ - path: widget.context.path, - factory: FACTORY_NAME - }), - name: widget => widget.context.path - }); + if (restorer) { + // Handle state restoration. + void restorer.restore(tracker, { + command: 'docmanager:open', + args: widget => ({ + path: widget.context.path, + factory: FACTORY_NAME + }), + name: widget => widget.context.path + }); + } return tracker; } diff --git a/packages/vdom-extension/style/base.css b/packages/vdom-extension/style/base.css deleted file mode 100644 index 3aa74aba24ad..000000000000 --- a/packages/vdom-extension/style/base.css +++ /dev/null @@ -1,29 +0,0 @@ -/** - Copyright (c) Jupyter Development Team. - Distributed under the terms of the Modified BSD License. -*/ - -/* Add CSS variables to :root */ -:root { - --jp-icon-vdom: url('./react.svg'); -} - -/* Base styles */ -.jp-RenderedVDOM { - width: 100%; - height: 100%; - padding: 0; - overflow: auto; -} - -/* Document styles */ -.jp-MimeDocument .jp-RenderedVDOM { - padding: 5px; -} - -/* Document icon */ -.jp-VDOMIcon { - background-image: var(--jp-icon-vdom); - background-size: 24px; - background-position: center !important; -} diff --git a/packages/vdom-extension/style/index.css b/packages/vdom-extension/style/index.css index c6533b9403f0..6300595458a5 100644 --- a/packages/vdom-extension/style/index.css +++ b/packages/vdom-extension/style/index.css @@ -10,5 +10,3 @@ @import url('~@jupyterlab/application/style/index.css'); @import url('~@jupyterlab/notebook/style/index.css'); @import url('~@jupyterlab/vdom/style/index.css'); - -@import url('./base.css'); diff --git a/packages/vdom-extension/style/react.svg b/packages/vdom-extension/style/react.svg deleted file mode 100644 index 5592ebec6d60..000000000000 --- a/packages/vdom-extension/style/react.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - diff --git a/packages/vdom/package.json b/packages/vdom/package.json index 86170479b969..674f65a274e3 100644 --- a/packages/vdom/package.json +++ b/packages/vdom/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/vdom", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "A viewer for VDOM documents.", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -34,10 +34,10 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/rendermime-interfaces": "^1.3.0", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@nteract/transform-vdom": "^4.0.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/packages/vdom/style/base.css b/packages/vdom/style/base.css index 3aa74aba24ad..850eccd402f0 100644 --- a/packages/vdom/style/base.css +++ b/packages/vdom/style/base.css @@ -3,11 +3,6 @@ Distributed under the terms of the Modified BSD License. */ -/* Add CSS variables to :root */ -:root { - --jp-icon-vdom: url('./react.svg'); -} - /* Base styles */ .jp-RenderedVDOM { width: 100%; @@ -20,10 +15,3 @@ .jp-MimeDocument .jp-RenderedVDOM { padding: 5px; } - -/* Document icon */ -.jp-VDOMIcon { - background-image: var(--jp-icon-vdom); - background-size: 24px; - background-position: center !important; -} diff --git a/packages/vdom/style/react.svg b/packages/vdom/style/react.svg deleted file mode 100644 index 5592ebec6d60..000000000000 --- a/packages/vdom/style/react.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - diff --git a/packages/vega4-extension/package.json b/packages/vega4-extension/package.json index 6d2522062aa8..f98a2599d347 100644 --- a/packages/vega4-extension/package.json +++ b/packages/vega4-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/vega4-extension", - "version": "1.0.1", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Vega 4 and Vega-Lite 2 Mime Renderer Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -34,7 +34,7 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/rendermime-interfaces": "^1.3.0", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/widgets": "^1.8.0" }, diff --git a/packages/vega5-extension/package.json b/packages/vega5-extension/package.json index dee96bfb16d3..607ef3e2f439 100644 --- a/packages/vega5-extension/package.json +++ b/packages/vega5-extension/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/vega5-extension", - "version": "1.0.1", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Vega 5 and Vega-Lite 3 Mime Renderer Extension", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -34,7 +34,7 @@ "watch": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/rendermime-interfaces": "^1.3.0", + "@jupyterlab/rendermime-interfaces": "^1.4.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/widgets": "^1.8.0" }, diff --git a/tests/package.json b/tests/package.json index 35a59adfb888..f2b336d90056 100644 --- a/tests/package.json +++ b/tests/package.json @@ -1,32 +1,32 @@ { "name": "@jupyterlab/test-root", - "version": "1.0.3", + "version": "1.1.0-alpha.1", "private": true, "dependencies": { "@babel/preset-env": "^7.4.3", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/completer": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/csvviewer": "^1.0.2", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/imageviewer": "^1.0.2", - "@jupyterlab/inspector": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/mathjax2-extension": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/outputarea": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/terminal": "^1.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/completer": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/csvviewer": "^1.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/imageviewer": "^1.1.0-alpha.1", + "@jupyterlab/inspector": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/mathjax2-extension": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/outputarea": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/terminal": "^1.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", diff --git a/tests/test-application/package.json b/tests/test-application/package.json index df8a4a61df95..07533ef3220e 100644 --- a/tests/test-application/package.json +++ b/tests/test-application/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-application", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,10 +12,10 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/application": "^1.0.2", - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/application": "^1.1.0-alpha.1", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/tests/test-apputils/package.json b/tests/test-apputils/package.json index 358bd37089dd..70afe652a080 100644 --- a/tests/test-apputils/package.json +++ b/tests/test-apputils/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-apputils", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,9 +12,9 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/coreutils": "^1.3.1", diff --git a/tests/test-cells/package.json b/tests/test-cells/package.json index 6acc13c498bd..f1747d7c0800 100644 --- a/tests/test-cells/package.json +++ b/tests/test-cells/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-cells", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,12 +12,12 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/outputarea": "^1.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/outputarea": "^1.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/tests/test-codeeditor/package.json b/tests/test-codeeditor/package.json index e494c22ebf33..191577ac2edd 100644 --- a/tests/test-codeeditor/package.json +++ b/tests/test-codeeditor/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-codeeditor", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,10 +12,10 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0", "chai": "^4.2.0", diff --git a/tests/test-codemirror/package.json b/tests/test-codemirror/package.json index 3db837ffe9c1..ae6b60385124 100644 --- a/tests/test-codemirror/package.json +++ b/tests/test-codemirror/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-codemirror", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,9 +12,9 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "chai": "^4.2.0", "codemirror": "~5.47.0", "jest": "^24.7.1", diff --git a/tests/test-completer/package.json b/tests/test-completer/package.json index 2d473b56abb0..5ac0f3e00f48 100644 --- a/tests/test-completer/package.json +++ b/tests/test-completer/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-completer", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,11 +12,11 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/completer": "^1.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/completer": "^1.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/tests/test-console/package.json b/tests/test-console/package.json index 6b7e025ca2fe..7bd57b7a99d6 100644 --- a/tests/test-console/package.json +++ b/tests/test-console/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-console", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -16,13 +16,13 @@ "watch:src": "tsc -p src --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/console": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/console": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", "@phosphor/signaling": "^1.2.3", diff --git a/tests/test-coreutils/package.json b/tests/test-coreutils/package.json index 23f05349ecaf..eb516ef94173 100644 --- a/tests/test-coreutils/package.json +++ b/tests/test-coreutils/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-coreutils", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,8 +12,8 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", "@phosphor/signaling": "^1.2.3", diff --git a/tests/test-csvviewer/package.json b/tests/test-csvviewer/package.json index c6a95150df7b..faabc151bde8 100644 --- a/tests/test-csvviewer/package.json +++ b/tests/test-csvviewer/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-csvviewer", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -16,10 +16,10 @@ "watch:src": "tsc -p src --watch" }, "dependencies": { - "@jupyterlab/csvviewer": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/csvviewer": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/datagrid": "^0.1.9", "@phosphor/widgets": "^1.8.0", diff --git a/tests/test-docmanager/package.json b/tests/test-docmanager/package.json index 9906e17314c5..8cfb54cf4ebe 100644 --- a/tests/test-docmanager/package.json +++ b/tests/test-docmanager/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-docmanager", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -16,10 +16,10 @@ "watch:src": "tsc -p src --watch" }, "dependencies": { - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0", diff --git a/tests/test-docregistry/package.json b/tests/test-docregistry/package.json index c209a5dd053e..cdc379b9b213 100644 --- a/tests/test-docregistry/package.json +++ b/tests/test-docregistry/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-docregistry", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,10 +12,10 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/disposable": "^1.2.0", diff --git a/tests/test-filebrowser/package.json b/tests/test-filebrowser/package.json index 4544cd3e5728..e04486bc16e4 100644 --- a/tests/test-filebrowser/package.json +++ b/tests/test-filebrowser/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-filebrowser", - "version": "1.0.3", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -16,12 +16,13 @@ "watch:src": "tsc -p src --watch" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docmanager": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/filebrowser": "^1.0.3", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docmanager": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/filebrowser": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", + "@jupyterlab/ui-components": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/tests/test-filebrowser/src/crumbs.spec.ts b/tests/test-filebrowser/src/crumbs.spec.ts index df06b2607ee6..8ce03e54c59a 100644 --- a/tests/test-filebrowser/src/crumbs.spec.ts +++ b/tests/test-filebrowser/src/crumbs.spec.ts @@ -7,19 +7,23 @@ import { DocumentManager, IDocumentManager } from '@jupyterlab/docmanager'; import { DocumentRegistry, TextModelFactory } from '@jupyterlab/docregistry'; +import { BreadCrumbs, FileBrowserModel } from '@jupyterlab/filebrowser'; + import { ServiceManager } from '@jupyterlab/services'; +import { framePromise, signalToPromise } from '@jupyterlab/testutils'; + +import { defaultIconRegistry, IIconRegistry } from '@jupyterlab/ui-components'; + import { Message, MessageLoop } from '@phosphor/messaging'; import { Widget } from '@phosphor/widgets'; import { simulate } from 'simulate-event'; -import { BreadCrumbs, FileBrowserModel } from '@jupyterlab/filebrowser'; - -import { framePromise, signalToPromise } from '@jupyterlab/testutils'; - +const HOME_ITEM_CLASS = 'jp-BreadCrumbs-home'; const ITEM_CLASS = 'jp-BreadCrumbs-item'; +const ITEM_QUERY = `.${HOME_ITEM_CLASS}, .${ITEM_CLASS}`; class LogCrumbs extends BreadCrumbs { methods: string[] = []; @@ -47,6 +51,7 @@ class LogCrumbs extends BreadCrumbs { } describe('filebrowser/model', () => { + let iconRegistry: IIconRegistry; let manager: IDocumentManager; let serviceManager: ServiceManager.IManager; let registry: DocumentRegistry; @@ -68,6 +73,7 @@ describe('filebrowser/model', () => { textModelFactory: new TextModelFactory() }); serviceManager = new ServiceManager({ standby: 'never' }); + iconRegistry = defaultIconRegistry; manager = new DocumentManager({ registry, opener, @@ -91,7 +97,7 @@ describe('filebrowser/model', () => { }); beforeEach(async () => { - model = new FileBrowserModel({ manager }); + model = new FileBrowserModel({ iconRegistry, manager }); await model.cd(path); crumbs = new LogCrumbs({ model }); }); @@ -105,7 +111,7 @@ describe('filebrowser/model', () => { it('should create a new BreadCrumbs instance', () => { const bread = new BreadCrumbs({ model }); expect(bread).to.be.an.instanceof(BreadCrumbs); - const items = crumbs.node.getElementsByClassName(ITEM_CLASS); + const items = crumbs.node.querySelectorAll(ITEM_QUERY); expect(items.length).to.equal(1); }); @@ -119,26 +125,26 @@ describe('filebrowser/model', () => { it('should switch to the parent directory', async () => { Widget.attach(crumbs, document.body); MessageLoop.sendMessage(crumbs, Widget.Msg.UpdateRequest); - let items = crumbs.node.getElementsByClassName(ITEM_CLASS); + let items = crumbs.node.querySelectorAll(ITEM_QUERY); expect(items.length).to.equal(4); const promise = signalToPromise(model.pathChanged); expect(items[2].textContent).to.equal(second); simulate(items[2], 'click'); await promise; MessageLoop.sendMessage(crumbs, Widget.Msg.UpdateRequest); - items = crumbs.node.getElementsByClassName(ITEM_CLASS); + items = crumbs.node.querySelectorAll(ITEM_QUERY); expect(items.length).to.equal(3); }); it('should switch to the home directory', async () => { Widget.attach(crumbs, document.body); MessageLoop.sendMessage(crumbs, Widget.Msg.UpdateRequest); - let items = crumbs.node.getElementsByClassName(ITEM_CLASS); + let items = crumbs.node.querySelectorAll(ITEM_QUERY); const promise = signalToPromise(model.pathChanged); simulate(items[0], 'click'); await promise; MessageLoop.sendMessage(crumbs, Widget.Msg.UpdateRequest); - items = crumbs.node.getElementsByClassName(ITEM_CLASS); + items = crumbs.node.querySelectorAll(ITEM_QUERY); expect(items.length).to.equal(1); expect(model.path).to.equal(''); }); @@ -146,12 +152,12 @@ describe('filebrowser/model', () => { it('should switch to the grandparent directory', async () => { Widget.attach(crumbs, document.body); MessageLoop.sendMessage(crumbs, Widget.Msg.UpdateRequest); - let items = crumbs.node.getElementsByClassName(ITEM_CLASS); + let items = crumbs.node.querySelectorAll(ITEM_QUERY); const promise = signalToPromise(model.pathChanged); simulate(items[1], 'click'); await promise; MessageLoop.sendMessage(crumbs, Widget.Msg.UpdateRequest); - items = crumbs.node.getElementsByClassName(ITEM_CLASS); + items = crumbs.node.querySelectorAll(ITEM_QUERY); expect(items.length).to.equal(2); expect(model.path).to.equal(first); }); @@ -159,13 +165,13 @@ describe('filebrowser/model', () => { it('should refresh the current directory', async () => { Widget.attach(crumbs, document.body); MessageLoop.sendMessage(crumbs, Widget.Msg.UpdateRequest); - let items = crumbs.node.getElementsByClassName(ITEM_CLASS); + let items = crumbs.node.querySelectorAll(ITEM_QUERY); const promise = signalToPromise(model.refreshed); expect(items[3].textContent).to.equal(third); simulate(items[3], 'click'); await promise; MessageLoop.sendMessage(crumbs, Widget.Msg.UpdateRequest); - items = crumbs.node.getElementsByClassName(ITEM_CLASS); + items = crumbs.node.querySelectorAll(ITEM_QUERY); expect(items.length).to.equal(4); expect(model.path).to.equal(path); }); @@ -198,14 +204,14 @@ describe('filebrowser/model', () => { describe('#onUpdateRequest()', () => { it('should be called when the model updates', async () => { - const model = new FileBrowserModel({ manager }); + const model = new FileBrowserModel({ iconRegistry, manager }); await model.cd(path); crumbs = new LogCrumbs({ model }); await model.cd('..'); await framePromise(); expect(crumbs.methods).to.contain('onUpdateRequest'); - const items = crumbs.node.getElementsByClassName(ITEM_CLASS); + const items = crumbs.node.querySelectorAll(ITEM_QUERY); expect(items.length).to.equal(3); model.dispose(); }); diff --git a/tests/test-filebrowser/src/model.spec.ts b/tests/test-filebrowser/src/model.spec.ts index b9886109012b..cd2542ba0c79 100644 --- a/tests/test-filebrowser/src/model.spec.ts +++ b/tests/test-filebrowser/src/model.spec.ts @@ -11,24 +11,27 @@ import { DocumentManager, IDocumentManager } from '@jupyterlab/docmanager'; import { DocumentRegistry, TextModelFactory } from '@jupyterlab/docregistry'; -import { - Contents, - ContentsManager, - ServiceManager -} from '@jupyterlab/services'; - import { FileBrowserModel, LARGE_FILE_SIZE, CHUNK_SIZE } from '@jupyterlab/filebrowser'; +import { + Contents, + ContentsManager, + ServiceManager +} from '@jupyterlab/services'; + import { acceptDialog, dismissDialog, signalToPromises, sleep } from '@jupyterlab/testutils'; + +import { defaultIconRegistry, IIconRegistry } from '@jupyterlab/ui-components'; + import { toArray } from '@phosphor/algorithm'; /** @@ -55,6 +58,7 @@ class DelayedContentsManager extends ContentsManager { } describe('filebrowser/model', () => { + let iconRegistry: IIconRegistry; let manager: IDocumentManager; let serviceManager: ServiceManager.IManager; let registry: DocumentRegistry; @@ -73,6 +77,7 @@ describe('filebrowser/model', () => { textModelFactory: new TextModelFactory() }); serviceManager = new ServiceManager({ standby: 'never' }); + iconRegistry = defaultIconRegistry; manager = new DocumentManager({ registry, opener, @@ -83,7 +88,7 @@ describe('filebrowser/model', () => { beforeEach(async () => { await state.clear(); - model = new FileBrowserModel({ manager, state }); + model = new FileBrowserModel({ iconRegistry, manager, state }); const contents = await manager.newUntitled({ type: 'file' }); name = contents.name; return model.cd(); @@ -96,7 +101,7 @@ describe('filebrowser/model', () => { describe('FileBrowserModel', () => { describe('#constructor()', () => { it('should construct a new file browser model', () => { - model = new FileBrowserModel({ manager }); + model = new FileBrowserModel({ iconRegistry, manager }); expect(model).to.be.an.instanceof(FileBrowserModel); }); }); @@ -260,7 +265,7 @@ describe('filebrowser/model', () => { opener, manager: delayedServiceManager }); - model = new FileBrowserModel({ manager, state }); // Should delay 1000ms + model = new FileBrowserModel({ iconRegistry, manager, state }); // Should delay 1000ms // An initial refresh is called in the constructor. // If it is too slow, it can come in after the directory change, @@ -280,7 +285,7 @@ describe('filebrowser/model', () => { describe('#restore()', () => { it('should restore based on ID', async () => { const id = 'foo'; - const model2 = new FileBrowserModel({ manager, state }); + const model2 = new FileBrowserModel({ iconRegistry, manager, state }); await model.restore(id); await model.cd('src'); expect(model.path).to.equal('src'); @@ -292,7 +297,7 @@ describe('filebrowser/model', () => { it('should be safe to call multiple times', async () => { const id = 'bar'; - const model2 = new FileBrowserModel({ manager, state }); + const model2 = new FileBrowserModel({ iconRegistry, manager, state }); await model.restore(id); await model.cd('src'); expect(model.path).to.equal('src'); diff --git a/tests/test-filebrowser/tsconfig.json b/tests/test-filebrowser/tsconfig.json index bae9b844966a..fe415b7aed6a 100644 --- a/tests/test-filebrowser/tsconfig.json +++ b/tests/test-filebrowser/tsconfig.json @@ -25,6 +25,9 @@ }, { "path": "../../testutils" + }, + { + "path": "../../packages/ui-components" } ] } diff --git a/tests/test-fileeditor/package.json b/tests/test-fileeditor/package.json index 193b32c53e01..e400b8af7dbc 100644 --- a/tests/test-fileeditor/package.json +++ b/tests/test-fileeditor/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-fileeditor", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,11 +12,11 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/fileeditor": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/fileeditor": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0", diff --git a/tests/test-imageviewer/package.json b/tests/test-imageviewer/package.json index 4ecb2838dd21..e6b3eb313719 100644 --- a/tests/test-imageviewer/package.json +++ b/tests/test-imageviewer/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-imageviewer", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,10 +12,10 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/imageviewer": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/imageviewer": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0", diff --git a/tests/test-inspector/package.json b/tests/test-inspector/package.json index eeff48657b23..d0bcbdfb72e3 100644 --- a/tests/test-inspector/package.json +++ b/tests/test-inspector/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-inspector", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,8 +12,8 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/inspector": "^1.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/inspector": "^1.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/signaling": "^1.2.3", "@phosphor/widgets": "^1.8.0", "chai": "^4.2.0", diff --git a/tests/test-mainmenu/package.json b/tests/test-mainmenu/package.json index 075d0d73bcb5..fd9e78fb17cd 100644 --- a/tests/test-mainmenu/package.json +++ b/tests/test-mainmenu/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-mainmenu", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,9 +12,9 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/mainmenu": "^1.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/mainmenu": "^1.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/commands": "^1.6.3", "@phosphor/widgets": "^1.8.0", diff --git a/tests/test-notebook/package.json b/tests/test-notebook/package.json index faeb1d7585e8..202b434cf3af 100644 --- a/tests/test-notebook/package.json +++ b/tests/test-notebook/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-notebook", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -18,14 +18,14 @@ "watch:src": "tsc -p src --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/messaging": "^1.2.3", diff --git a/tests/test-observables/package.json b/tests/test-observables/package.json index 6e0858c93bcc..351fa4562822 100644 --- a/tests/test-observables/package.json +++ b/tests/test-observables/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-observables", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,8 +12,8 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/observables": "^2.2.0", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/observables": "^2.3.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "chai": "^4.2.0", diff --git a/tests/test-outputarea/package.json b/tests/test-outputarea/package.json index bbb39f5c1f80..4957ae9f80f4 100644 --- a/tests/test-outputarea/package.json +++ b/tests/test-outputarea/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-outputarea", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,11 +12,11 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/outputarea": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/outputarea": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0", "chai": "^4.2.0", diff --git a/tests/test-rendermime/package.json b/tests/test-rendermime/package.json index c1a351df81a5..21b457e82774 100644 --- a/tests/test-rendermime/package.json +++ b/tests/test-rendermime/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-rendermime", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -16,12 +16,12 @@ "watch:src": "tsc -p src --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/mathjax2": "^1.0.0", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/mathjax2": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/widgets": "^1.8.0", diff --git a/tests/test-services/package.json b/tests/test-services/package.json index d46e039ab298..31c709a11fee 100644 --- a/tests/test-services/package.json +++ b/tests/test-services/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-services", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,9 +12,9 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/algorithm": "^1.1.3", "@phosphor/coreutils": "^1.3.1", "@phosphor/signaling": "^1.2.3", diff --git a/tests/test-services/src/config/config.spec.ts b/tests/test-services/src/config/config.spec.ts index f5fa177c09cf..50ecb63e514b 100644 --- a/tests/test-services/src/config/config.spec.ts +++ b/tests/test-services/src/config/config.spec.ts @@ -9,12 +9,9 @@ import { JSONObject } from '@phosphor/coreutils'; import { ConfigSection, ConfigWithDefaults } from '@jupyterlab/services'; -import { - expectFailure, - handleRequest, - makeSettings, - getRequestHandler -} from '../utils'; +import { expectFailure } from '@jupyterlab/testutils'; + +import { handleRequest, makeSettings, getRequestHandler } from '../utils'; /** * Generate a random config section name. diff --git a/tests/test-services/src/contents/index.spec.ts b/tests/test-services/src/contents/index.spec.ts index 63ee387b6c9c..d9be9de1a9b7 100644 --- a/tests/test-services/src/contents/index.spec.ts +++ b/tests/test-services/src/contents/index.spec.ts @@ -10,12 +10,9 @@ import { ServerConnection } from '@jupyterlab/services'; -import { - DEFAULT_FILE, - makeSettings, - expectFailure, - handleRequest -} from '../utils'; +import { expectFailure } from '@jupyterlab/testutils'; + +import { DEFAULT_FILE, makeSettings, handleRequest } from '../utils'; const DEFAULT_DIR: Contents.IModel = { name: 'bar', diff --git a/tests/test-services/src/kernel/comm.spec.ts b/tests/test-services/src/kernel/comm.spec.ts index c1fe9698b050..346ca807eb78 100644 --- a/tests/test-services/src/kernel/comm.spec.ts +++ b/tests/test-services/src/kernel/comm.spec.ts @@ -7,6 +7,8 @@ import { PromiseDelegate } from '@phosphor/coreutils'; import { KernelMessage, Kernel } from '@jupyterlab/services'; +import { isFulfilled } from '@jupyterlab/testutils'; + import { init } from '../utils'; // Initialize fetch override. @@ -82,6 +84,15 @@ describe('jupyter.services - Comm', () => { const comm2 = kernel.connectToComm('test', '1234'); expect(comm).to.equal(comm2); }); + + it('should throw an error when the kernel does not handle comms', async () => { + const kernel2 = await Kernel.startNew({ + name: 'ipython', + handleComms: false + }); + expect(kernel2.handleComms).to.be.false; + expect(() => kernel2.connectToComm('test', '1234')).to.throw(); + }); }); describe('#registerCommTarget()', () => { @@ -105,6 +116,37 @@ describe('jupyter.services - Comm', () => { kernel.removeCommTarget('test', hook); comm.dispose(); }); + + it('should do nothing if the kernel does not handle comms', async () => { + const promise = new PromiseDelegate< + [Kernel.IComm, KernelMessage.ICommOpenMsg] + >(); + const hook = (comm: Kernel.IComm, msg: KernelMessage.ICommOpenMsg) => { + promise.resolve([comm, msg]); + }; + const kernel2 = await Kernel.startNew({ + name: 'ipython', + handleComms: false + }); + kernel2.registerCommTarget('test', hook); + + // Request the comm creation. + await kernel2.requestExecute({ code: SEND }, true).done; + + // The promise above should not be fulfilled, even after a short delay. + expect(await isFulfilled(promise.promise, 300)).to.be.false; + + // The kernel comm has not been closed - we just completely ignored it. + let reply = await kernel2.requestExecute( + { code: `assert comm._closed is False` }, + true + ).done; + // If the assert was false, we would get an 'error' status + expect(reply.content.status).to.equal('ok'); + + // Clean up + kernel2.removeCommTarget('test', hook); + }); }); describe('#commInfo()', () => { diff --git a/tests/test-services/src/kernel/ikernel.spec.ts b/tests/test-services/src/kernel/ikernel.spec.ts index 524c679a7756..313630a85bdf 100644 --- a/tests/test-services/src/kernel/ikernel.spec.ts +++ b/tests/test-services/src/kernel/ikernel.spec.ts @@ -11,12 +11,9 @@ import { PromiseDelegate } from '@phosphor/coreutils'; import { Kernel, KernelMessage } from '@jupyterlab/services'; -import { - expectFailure, - KernelTester, - handleRequest, - testEmission -} from '../utils'; +import { expectFailure, testEmission } from '@jupyterlab/testutils'; + +import { KernelTester, handleRequest } from '../utils'; describe('Kernel.IKernel', () => { let defaultKernel: Kernel.IKernel; diff --git a/tests/test-services/src/kernel/kernel.spec.ts b/tests/test-services/src/kernel/kernel.spec.ts index 2f23df8bb4f5..c67df74c3ad8 100644 --- a/tests/test-services/src/kernel/kernel.spec.ts +++ b/tests/test-services/src/kernel/kernel.spec.ts @@ -9,13 +9,13 @@ import { toArray } from '@phosphor/algorithm'; import { Kernel } from '@jupyterlab/services'; +import { expectFailure, testEmission } from '@jupyterlab/testutils'; + import { - expectFailure, KernelTester, makeSettings, PYTHON_SPEC, - getRequestHandler, - testEmission + getRequestHandler } from '../utils'; const PYTHON3_SPEC = JSON.parse(JSON.stringify(PYTHON_SPEC)); @@ -164,6 +164,24 @@ describe('kernel', () => { expect(kernel.id).to.equal(id); kernel.dispose(); }); + + it('should turn off comm handling in the new connection if it was enabled in first kernel', async () => { + const kernel = await Kernel.startNew(); + expect(kernel.handleComms).to.be.true; + const kernel2 = Kernel.connectTo(kernel.model); + expect(kernel2.handleComms).to.be.false; + kernel.dispose(); + kernel2.dispose(); + }); + + it('should turn on comm handling in the new connection if it was disabled in all other connections', async () => { + const kernel = await Kernel.startNew({ handleComms: false }); + expect(kernel.handleComms).to.be.false; + const kernel2 = Kernel.connectTo(defaultKernel.model); + expect(kernel2.handleComms).to.be.true; + kernel.dispose(); + kernel2.dispose(); + }); }); describe('Kernel.shutdown()', () => { diff --git a/tests/test-services/src/kernel/manager.spec.ts b/tests/test-services/src/kernel/manager.spec.ts index 513ecff69588..077257ef2f00 100644 --- a/tests/test-services/src/kernel/manager.spec.ts +++ b/tests/test-services/src/kernel/manager.spec.ts @@ -9,12 +9,13 @@ import { JSONExt } from '@phosphor/coreutils'; import { KernelManager, Kernel } from '@jupyterlab/services'; +import { testEmission } from '@jupyterlab/testutils'; + import { PYTHON_SPEC, KERNELSPECS, handleRequest, - makeSettings, - testEmission + makeSettings } from '../utils'; class TestManager extends KernelManager { diff --git a/tests/test-services/src/kernel/messages.spec.ts b/tests/test-services/src/kernel/messages.spec.ts index 493951d4426a..9224380701f5 100644 --- a/tests/test-services/src/kernel/messages.spec.ts +++ b/tests/test-services/src/kernel/messages.spec.ts @@ -168,4 +168,33 @@ describe('kernel/messages', () => { expect(KernelMessage.isInputRequestMsg(msg2)).to.equal(false); }); }); + + describe('KernelMessage.createMessage()', () => { + // Tests deprecated option workaround. Should be deleted in services 5.0. + // See https://github.com/jupyterlab/jupyterlab/pull/6949 + it('contains a backwards-compatibility workaround for services 4.0 for a deprecated comm_info_request content', () => { + let commRequest = KernelMessage.createMessage({ + msgType: 'comm_info_request', + channel: 'shell', + session: 'baz', + content: { + target: 'example' + } + }); + expect(commRequest.content.target_name).to.equal('example'); + expect(commRequest.content.target).to.be.undefined; + + commRequest = KernelMessage.createMessage({ + msgType: 'comm_info_request', + channel: 'shell', + session: 'baz', + content: { + target_name: 'real_target', + target: 'example' + } + }); + expect(commRequest.content.target_name).to.equal('real_target'); + expect(commRequest.content.target).to.be.undefined; + }); + }); }); diff --git a/tests/test-services/src/session/isession.spec.ts b/tests/test-services/src/session/isession.spec.ts index 97d17ee8444b..6bde03d648d1 100644 --- a/tests/test-services/src/session/isession.spec.ts +++ b/tests/test-services/src/session/isession.spec.ts @@ -13,13 +13,9 @@ import { Kernel, KernelMessage } from '@jupyterlab/services'; import { Session } from '@jupyterlab/services'; -import { - expectFailure, - handleRequest, - SessionTester, - init, - testEmission -} from '../utils'; +import { expectFailure, testEmission } from '@jupyterlab/testutils'; + +import { handleRequest, SessionTester, init } from '../utils'; init(); diff --git a/tests/test-services/src/session/manager.spec.ts b/tests/test-services/src/session/manager.spec.ts index 6881f7d3af1c..4e512cd76ba0 100644 --- a/tests/test-services/src/session/manager.spec.ts +++ b/tests/test-services/src/session/manager.spec.ts @@ -16,7 +16,9 @@ import { Session } from '@jupyterlab/services'; -import { KERNELSPECS, handleRequest, testEmission } from '../utils'; +import { testEmission } from '@jupyterlab/testutils'; + +import { KERNELSPECS, handleRequest } from '../utils'; class TestManager extends SessionManager { intercept: Kernel.ISpecModels | null = null; diff --git a/tests/test-services/src/session/session.spec.ts b/tests/test-services/src/session/session.spec.ts index 9c17bf7406f6..a98d55200ab9 100644 --- a/tests/test-services/src/session/session.spec.ts +++ b/tests/test-services/src/session/session.spec.ts @@ -11,8 +11,9 @@ import { ServerConnection } from '@jupyterlab/services'; import { Session } from '@jupyterlab/services'; +import { expectFailure } from '@jupyterlab/testutils'; + import { - expectFailure, makeSettings, SessionTester, createSessionModel, diff --git a/tests/test-services/src/terminal/manager.spec.ts b/tests/test-services/src/terminal/manager.spec.ts index f92f1ec87937..7e6195890a0b 100644 --- a/tests/test-services/src/terminal/manager.spec.ts +++ b/tests/test-services/src/terminal/manager.spec.ts @@ -10,7 +10,8 @@ import { TerminalSession, TerminalManager } from '@jupyterlab/services'; -import { testEmission } from '../utils'; + +import { testEmission } from '@jupyterlab/testutils'; describe('terminal', () => { let manager: TerminalSession.IManager; diff --git a/tests/test-services/src/terminal/terminal.spec.ts b/tests/test-services/src/terminal/terminal.spec.ts index 83e1010644ac..5ad865a5f9ea 100644 --- a/tests/test-services/src/terminal/terminal.spec.ts +++ b/tests/test-services/src/terminal/terminal.spec.ts @@ -9,7 +9,9 @@ import { UUID } from '@phosphor/coreutils'; import { TerminalSession } from '@jupyterlab/services'; -import { handleRequest, testEmission } from '../utils'; +import { testEmission } from '@jupyterlab/testutils'; + +import { handleRequest } from '../utils'; describe('terminal', () => { let defaultSession: TerminalSession.ISession; diff --git a/tests/test-services/src/utils.spec.ts b/tests/test-services/src/utils.spec.ts index 889a909e3f84..03b58ba2aeb8 100644 --- a/tests/test-services/src/utils.spec.ts +++ b/tests/test-services/src/utils.spec.ts @@ -7,7 +7,11 @@ import { PromiseDelegate } from '@phosphor/coreutils'; import { Signal } from '@phosphor/signaling'; -import { expectFailure, isFulfilled, testEmission } from './utils'; +import { + expectFailure, + isFulfilled, + testEmission +} from '@jupyterlab/testutils'; describe('test/utils', () => { describe('testEmission', () => { diff --git a/tests/test-services/src/utils.ts b/tests/test-services/src/utils.ts index b0ca718750bc..081d19d6490c 100644 --- a/tests/test-services/src/utils.ts +++ b/tests/test-services/src/utils.ts @@ -15,8 +15,6 @@ import { import { Response } from 'node-fetch'; -import { ISignal, Signal } from '@phosphor/signaling'; - import { Contents, TerminalSession, @@ -177,35 +175,6 @@ export function handleRequest(item: IService, status: number, body: any) { (item.serverSettings as any).fetch = temp; } -/** - * Expect a failure on a promise with the given message. - */ -export async function expectFailure( - promise: Promise, - message?: string -): Promise { - let called = false; - try { - await promise; - called = true; - } catch (err) { - if (message && err.message.indexOf(message) === -1) { - throw Error(`Error "${message}" not in: "${err.message}"`); - } - } - if (called) { - throw Error(`Failure was not triggered, message was: ${message}`); - } -} - -/** - * Do something in the future ensuring total ordering wrt to Promises. - */ -export async function doLater(cb: () => void): Promise { - await Promise.resolve(void 0); - cb(); -} - /** * Socket class test rig. */ @@ -717,70 +686,6 @@ export class TerminalTester extends SocketTester { private _onMessage: (msg: TerminalSession.IMessage) => void = null; } -/** - * Test a single emission from a signal. - * - * @param signal - The signal we are listening to. - * @param find - An optional function to determine which emission to test, - * defaulting to the first emission. - * @param test - An optional function which contains the tests for the emission. - * @param value - An optional value that the promise resolves to if it is - * successful. - * - * @returns a promise that rejects if the function throws an error (e.g., if an - * expect test doesn't pass), and resolves otherwise. - * - * #### Notes - * The first emission for which the find function returns true will be tested in - * the test function. If the find function is not given, the first signal - * emission will be tested. - * - * You can test to see if any signal comes which matches a criteria by just - * giving a find function. You can test the very first signal by just giving a - * test function. And you can test the first signal matching the find criteria - * by giving both. - * - * The reason this function is asynchronous is so that the thing causing the - * signal emission (such as a websocket message) can be asynchronous. - */ -export async function testEmission( - signal: ISignal, - options: { - find?: (a: T, b: U) => boolean; - test?: (a: T, b: U) => void; - value?: V; - } -): Promise { - const done = new PromiseDelegate(); - const object = {}; - signal.connect((sender: T, args: U) => { - if (!options.find || options.find(sender, args)) { - try { - Signal.disconnectReceiver(object); - if (options.test) { - options.test(sender, args); - } - } catch (e) { - done.reject(e); - } - done.resolve(options.value || undefined); - } - }, object); - return done.promise; -} - -/** - * Test to see if a promise is fulfilled. - * - * @returns true if the promise is fulfilled (either resolved or rejected), and - * false if the promise is still pending. - */ -export async function isFulfilled(p: PromiseLike): Promise { - const x = Object.create(null); - const result = await Promise.race([p, x]).catch(() => false); - return result !== x; -} - /** * Make a new type with the given keys declared as optional. * diff --git a/tests/test-statusbar/package.json b/tests/test-statusbar/package.json index 06882836b24a..5cf3737411e3 100644 --- a/tests/test-statusbar/package.json +++ b/tests/test-statusbar/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-statusbar", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -12,8 +12,8 @@ "watch:src": "tsc -b --watch" }, "dependencies": { - "@jupyterlab/statusbar": "^1.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/statusbar": "^1.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/signaling": "^1.2.3", "@phosphor/widgets": "^1.8.0", "chai": "^4.2.0", diff --git a/tests/test-terminal/package.json b/tests/test-terminal/package.json index b12180535e25..f8960e73037a 100644 --- a/tests/test-terminal/package.json +++ b/tests/test-terminal/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/test-terminal", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "private": true, "scripts": { "build": "tsc -b", @@ -16,9 +16,9 @@ "watch:src": "tsc -p src --watch" }, "dependencies": { - "@jupyterlab/services": "^4.0.2", - "@jupyterlab/terminal": "^1.0.2", - "@jupyterlab/testutils": "^1.0.2", + "@jupyterlab/services": "^4.1.0-alpha.1", + "@jupyterlab/terminal": "^1.1.0-alpha.1", + "@jupyterlab/testutils": "^1.1.0-alpha.1", "@phosphor/messaging": "^1.2.3", "@phosphor/widgets": "^1.8.0", "chai": "^4.2.0" diff --git a/testutils/package.json b/testutils/package.json index 0e41b0e7150a..f395f7c1e0da 100644 --- a/testutils/package.json +++ b/testutils/package.json @@ -1,6 +1,6 @@ { "name": "@jupyterlab/testutils", - "version": "1.0.2", + "version": "1.1.0-alpha.1", "description": "JupyterLab - Test Utilities", "homepage": "https://github.com/jupyterlab/jupyterlab", "bugs": { @@ -31,15 +31,15 @@ "watch": "tsc --watch" }, "dependencies": { - "@jupyterlab/apputils": "^1.0.2", - "@jupyterlab/cells": "^1.0.2", - "@jupyterlab/codeeditor": "^1.0.0", - "@jupyterlab/codemirror": "^1.0.2", - "@jupyterlab/coreutils": "^3.0.0", - "@jupyterlab/docregistry": "^1.0.2", - "@jupyterlab/notebook": "^1.0.2", - "@jupyterlab/rendermime": "^1.0.2", - "@jupyterlab/services": "^4.0.2", + "@jupyterlab/apputils": "^1.1.0-alpha.1", + "@jupyterlab/cells": "^1.1.0-alpha.1", + "@jupyterlab/codeeditor": "^1.1.0-alpha.1", + "@jupyterlab/codemirror": "^1.1.0-alpha.1", + "@jupyterlab/coreutils": "^3.1.0-alpha.1", + "@jupyterlab/docregistry": "^1.1.0-alpha.1", + "@jupyterlab/notebook": "^1.1.0-alpha.1", + "@jupyterlab/rendermime": "^1.1.0-alpha.1", + "@jupyterlab/services": "^4.1.0-alpha.1", "@phosphor/coreutils": "^1.3.1", "@phosphor/signaling": "^1.2.3", "fs-extra": "^8.0.1", diff --git a/testutils/src/index.ts b/testutils/src/index.ts index cdb4c462d9b4..3dc36ccfd3bd 100644 --- a/testutils/src/index.ts +++ b/testutils/src/index.ts @@ -48,7 +48,7 @@ export { defaultRenderMime } from './rendermime'; * The reason this function is asynchronous is so that the thing causing the * signal emission (such as a websocket message) can be asynchronous. */ -export function testEmission( +export async function testEmission( signal: ISignal, options: { find?: (a: T, b: U) => boolean; @@ -74,6 +74,35 @@ export function testEmission( return done.promise; } +/** + * Expect a failure on a promise with the given message. + */ +export async function expectFailure( + promise: Promise, + message?: string +): Promise { + let called = false; + try { + await promise; + called = true; + } catch (err) { + if (message && err.message.indexOf(message) === -1) { + throw Error(`Error "${message}" not in: "${err.message}"`); + } + } + if (called) { + throw Error(`Failure was not triggered, message was: ${message}`); + } +} + +/** + * Do something in the future ensuring total ordering with respect to promises. + */ +export async function doLater(cb: () => void): Promise { + await Promise.resolve(void 0); + cb(); +} + /** * Convert a signal into an array of promises. * @@ -124,12 +153,22 @@ export function signalToPromise(signal: ISignal): Promise<[T, U]> { /** * Test to see if a promise is fulfilled. * + * @param delay - optional delay in milliseconds before checking * @returns true if the promise is fulfilled (either resolved or rejected), and * false if the promise is still pending. */ -export async function isFulfilled(p: PromiseLike): Promise { +export async function isFulfilled( + p: PromiseLike, + delay = 0 +): Promise { let x = Object.create(null); - let result = await Promise.race([p, x]).catch(() => false); + let race: any; + if (delay > 0) { + race = sleep(delay, x); + } else { + race = x; + } + let result = await Promise.race([p, race]).catch(() => false); return result !== x; } diff --git a/yarn.lock b/yarn.lock index 252bdcf304e0..e1caed24660d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -641,7 +641,7 @@ resize-observer-polyfill "^1.5.0" tslib "^1.9.0" -"@blueprintjs/icons@^3.3.0", "@blueprintjs/icons@^3.8.0": +"@blueprintjs/icons@^3.8.0": version "3.9.0" resolved "https://registry.yarnpkg.com/@blueprintjs/icons/-/icons-3.9.0.tgz#173f70b0d6a573d2a97066c54b4d110ffadeee51" integrity sha512-kq1Bh6PtOF4PcuxcDme8NmnSlkfO0IV89FriZGo6zSA1+OOzSwzvoKqa6S7vJe8xCPPLO5r7lE9AjeOuGeH97g== @@ -2018,6 +2018,11 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/prettier@^1.16.4": + version "1.18.0" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.18.0.tgz#d2dbe4d5f76b455138f13a2d881278e2c06a733d" + integrity sha512-5N6WK/XXs9PLPpge2KOmOSaIym2vIo32GsrxM5YOFs7uZ8R9L/acg+hQzWsfwoHEpasqQkH0+3LzLTbiF1GFLQ== + "@types/prop-types@*": version "15.7.1" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.1.tgz#f1a11e7babb0c3cad68100be381d1e064c68f1f6" @@ -7617,7 +7622,7 @@ karma-ie-launcher@^1.0.0: resolved "https://registry.yarnpkg.com/karma-ie-launcher/-/karma-ie-launcher-1.0.0.tgz#497986842c490190346cd89f5494ca9830c6d59c" integrity sha1-SXmGhCxJAZA0bNifVJTKmDDG1Zw= dependencies: - lodash "^4.6.2" + lodash "^4.6.1" karma-mocha-reporter@^2.2.5: version "2.2.5" @@ -9723,7 +9728,7 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^1.17.0: +prettier@^1.17.0, prettier@^1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== @@ -10689,7 +10694,7 @@ sanitize-html@~1.20.1: lodash.escaperegexp "^4.1.2" lodash.isplainobject "^4.0.6" lodash.isstring "^4.0.1" - lodash.mergewith "^4.6.2" + lodash.mergewith "^4.6.1" postcss "^7.0.5" srcset "^1.0.0" xtend "^4.0.1"