diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b01fc6d3d..0dbbcbc98 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,12 +9,12 @@ on: description: Upload build artifacts push: paths-ignore: - - 'CHANGELOG.md' - branches: [ main ] + - "CHANGELOG.md" + branches: [main] pull_request: - branches: [ main ] + branches: [main] schedule: - - cron: '0 11 * * 4' + - cron: "0 11 * * 4" permissions: # All nested workflows will inherit these permissions and so no need to declare @@ -34,25 +34,29 @@ jobs: uses: ./.github/workflows/step_pre-commit.yml codeql: - needs: [ pre-commit ] + needs: [pre-commit] uses: ./.github/workflows/step_static-analysis.yml test-pip: - needs: [ codeql ] + needs: [codeql] uses: ./.github/workflows/step_tests-pip.yml test-conda: - needs: [ codeql ] + needs: [codeql] uses: ./.github/workflows/step_tests-conda.yml + test-ui: + needs: [codeql] + uses: ./.github/workflows/step_tests-ui.yml + build: - needs: [ test-pip, test-conda ] + needs: [test-pip, test-conda, test-ui] uses: ./.github/workflows/step_build.yml with: upload: ${{ inputs.upload-build-artifacts || false }} pass: - needs: [ pre-commit, codeql, test-pip, test-conda, build ] + needs: [pre-commit, codeql, test-pip, test-conda, test-ui, build] runs-on: ubuntu-latest steps: - name: Check jobs diff --git a/.github/workflows/step_tests-ui.yml b/.github/workflows/step_tests-ui.yml new file mode 100644 index 000000000..5cbb050c1 --- /dev/null +++ b/.github/workflows/step_tests-ui.yml @@ -0,0 +1,46 @@ +name: test-ui +run-name: Run UI tests with Galata + +on: + workflow_call: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-ui-test + cancel-in-progress: true + +jobs: + test-ui: + continue-on-error: false + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Base Setup + uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1 + + - name: Install from source (required for the pre-commit tests) + run: python -m pip install -e '.[test-cov]' + + - name: Install galata + working-directory: jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests + env: + PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 + run: jlpm install + + - name: Install browser + working-directory: jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests + run: jlpm playwright install chromium + + - name: Integration tests + working-directory: jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests + run: jlpm playwright test + + - name: Upload UI Test artifacts + if: failure() + uses: actions/upload-artifact@v3 + with: + name: ui-test-output + path: | + jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/test-results diff --git a/docs/images/jupyterlab_launcher.png b/docs/images/jupyterlab_launcher.png new file mode 100644 index 000000000..39bbbabea Binary files /dev/null and b/docs/images/jupyterlab_launcher.png differ diff --git a/docs/images/jupyterlab_main_menu.png b/docs/images/jupyterlab_main_menu.png new file mode 100644 index 000000000..243db3a01 Binary files /dev/null and b/docs/images/jupyterlab_main_menu.png differ diff --git a/docs/images/jupyterlab_settings.png b/docs/images/jupyterlab_settings.png new file mode 100644 index 000000000..dc7a4316e Binary files /dev/null and b/docs/images/jupyterlab_settings.png differ diff --git a/docs/index.md b/docs/index.md index 80a4bbb51..06538f3a6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,6 +10,7 @@ install.md text-notebooks.md paired-notebooks.md +jupyterlab-extension.md config.md advanced-options.md formats-scripts.md diff --git a/docs/jupyterlab-extension.md b/docs/jupyterlab-extension.md new file mode 100644 index 000000000..eb6982261 --- /dev/null +++ b/docs/jupyterlab-extension.md @@ -0,0 +1,31 @@ +# Frontend extension + +Recent versions of Jupytext (`>=1.16.0`) ships frontend extension that enables users +to create text notebooks and pair notebooks from main menu of JupyterLab 4 and +Notebook 7. In addition, the frontend extension adds selected Jupytext text +notebook formats to launcher in the `Jupytext` section so that users can launch text +notebooks as they launch a regular notebook from JupyterLab launcher. + +## Launcher icons + +After installing Jupytext extension, users will have a new category in the launcher +called Jupytext as shown below: + +![](images/jupyterlab_launcher.png) + +Users can remove and/or add new formats to the Jupytext section _via_ `Settings>Jupytext`. + +![](images/jupyterlab_settings.png) + +By clicking `Add` and adding a new format, say `qmd`, will +add the Quatro Text Notebook to the launcher. **Note** that users need to refresh the current browser tab when they modify the settings for them to take effect. + +Besides, users can also change the category of Text Notebook launcher icons using +`Category` field in the Settings. For example, by using `Notebook` as category, all +Text Notebook launchers will be moved into `Notebook` category. + +## Main menu + +It is also possible to launch text notebooks and/or pair existing notebooks from the dedicated Jupytext main menu as shown below. + +![](images/jupyterlab_main_menu.png) diff --git a/jupyterlab/.gitignore b/jupyterlab/.gitignore index 56078241f..4598cc2e9 100644 --- a/jupyterlab/.gitignore +++ b/jupyterlab/.gitignore @@ -25,3 +25,7 @@ lib/ *.egg-info/ .ipynb_checkpoints *.tsbuildinfo + +# Ignore playwright stuff +**/playwright-report +**/test-results diff --git a/jupyterlab/package.json b/jupyterlab/package.json index d2e7da9b9..2d3017670 100644 --- a/jupyterlab/package.json +++ b/jupyterlab/package.json @@ -61,7 +61,7 @@ ], "parser": "@typescript-eslint/parser", "parserOptions": { - "project": "tsconfig.eslint.json", + "project": "packages/**/tsconfig.json", "sourceType": "module", "tsconfigRootDir": "." }, diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/README.md b/jupyterlab/packages/jupyterlab-jupytext-extension/README.md index d36e2d420..e6dbe22e3 100644 --- a/jupyterlab/packages/jupyterlab-jupytext-extension/README.md +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/README.md @@ -23,15 +23,33 @@ jupyter labextension install jupyterlab-jupytext@1.1.1 # for JupyterLab 1.x # How to develop this extension -Please follow the instructions at [developing.md](../../../docs/developing.md), i.e. -create a Python environment with a recent version of `nodejs`, and install -a development version of Jupytext by running +For fine-grained access to the `jlpm` command and various build steps: ```bash pip install -e '.[dev]' +cd jupyterlab/packages/jupyterlab-jupytext +jlpm +jlpm install:extension # Symlink into `{sys.prefix}/share/jupyter/labextensions` ``` -at the root of the Jupytext repository. +(see also the instructions at [developing.md](../../../docs/developing.md) on how to create a Python environment with a recent version of `nodejs`) + +Watch the source directory and automatically rebuild the `lib` folder: + +```bash +cd jupyterlab/packages/jupyterlab-jupytext +# Watch the source directory in one terminal, automatically rebuilding when needed +jlpm watch +# Run JupyterLab in another terminal +jupyter lab +``` + +While running `jlpm watch`, every saved change to a `.ts` file will immediately be +built locally and available in your running Jupyter client. "Hard" refresh JupyterLab or Notebook +with CTRL-F5 or ⌘-F5 to load the change in your browser +(you may need to wait several seconds for the extension to be fully rebuilt). + +Read more on this on the [JupyterLab documentation](https://jupyterlab.readthedocs.io/en/latest/extension/extension_dev.html#developing-a-prebuilt-extension). # How to publish a new version of the extension on npm diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/package.json b/jupyterlab/packages/jupyterlab-jupytext-extension/package.json index 8b1c9c6d0..92bea16b3 100644 --- a/jupyterlab/packages/jupyterlab-jupytext-extension/package.json +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/package.json @@ -24,6 +24,9 @@ "type": "git", "url": "https://github.com/mwouts/jupytext.git" }, + "workspaces": [ + "ui-tests" + ], "scripts": { "build": "jlpm run build:lib && jlpm run build:labextension:dev && jlpm run copy:extensioncfgfile", "build:labextension": "jupyter labextension build .", @@ -35,7 +38,7 @@ "clean:all": "jlpm run clean:lib && jlpm run clean:labextension", "clean:labextension": "rimraf ../../jupyterlab_jupytext/labextension", "clean:lib": "rimraf lib tsconfig.tsbuildinfo", - "install:extension": "jupyter labextension develop --overwrite .", + "install:extension": "python ../../scripts/install_extension.py", "watch": "run-p watch:src watch:labextension", "watch:labextension": "jupyter labextension watch .", "watch:src": "tsc -w" @@ -65,18 +68,23 @@ "@jupyterlab/application": "^4.0.0", "@jupyterlab/apputils": "^4.0.0", "@jupyterlab/codeeditor": "^4.0.0", + "@jupyterlab/docregistry": "^4.0.0", + "@jupyterlab/filebrowser": "^4.0.0", + "@jupyterlab/launcher": "^4.0.0", "@jupyterlab/nbformat": "^4.0.0", "@jupyterlab/notebook": "^4.0.0", "@jupyterlab/rendermime": "^4.0.0", "@jupyterlab/settingregistry": "^4.0.0", "@jupyterlab/translation": "^4.0.0", "@jupyterlab/ui-components": "^4.0.0", + "@lumino/coreutils": "^2.0.0", + "@lumino/disposable": "^2.0.0", "jupyterlab-rise": "^0.41.0" }, "devDependencies": { "@jupyterlab/builder": "^4.0.0", "npm-run-all": "^4.1.5", - "rimraf": "^3.0.2", - "typescript": "~5.0.1" + "rimraf": "^4.4.1", + "typescript": "~5.0.2" } } diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/schema/plugin.json b/jupyterlab/packages/jupyterlab-jupytext-extension/schema/plugin.json new file mode 100644 index 000000000..2dcfc2b60 --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/schema/plugin.json @@ -0,0 +1,182 @@ +{ + "title": "Jupytext", + "description": "Jupytext Menu Settings.", + "properties": { + "category": { + "title": "Category", + "description": "Category under which Jupytext Text Notebooks will be placed. Refresh the current browser tab for the changes to take effect.", + "type": "string", + "default": "Jupytext" + }, + "format": { + "title": "Jupytext Text Notebook Launcher Items Formats", + "description": "List of Jupytext Text Notebook formats that will be added to launcher. Refresh the current browser tab for the changes to take effect.", + "items": { + "type": "string" + }, + "type": "array", + "default": ["auto:light", "auto:percent", "md", "md:myst", "Rmd"] + } + }, + "jupyter.lab.menus": { + "main": [ + { + "id": "jp-mainmenu-jupytext-menu", + "label": "Jupytext", + "rank": 80, + "items": [ + { + "type": "submenu", + "submenu": { + "id": "jp-mainmenu-jupytext-new", + "label": "New Text Notebook", + "items": [ + { + "command": "jupytext:create-new-text-noteboook-auto:percent", + "rank": 1 + }, + { + "type": "separator", + "rank": 2 + }, + { + "command": "jupytext:create-new-text-noteboook-auto:light", + "rank": 5 + }, + { + "command": "jupytext:create-new-text-noteboook-auto:hydrogen", + "rank": 10 + }, + { + "command": "jupytext:create-new-text-noteboook-auto:nomarker", + "rank": 15 + }, + { + "type": "separator", + "rank": 16 + }, + { + "command": "jupytext:create-new-text-noteboook-md", + "rank": 20 + }, + { + "command": "jupytext:create-new-text-noteboook-md:myst", + "rank": 25 + }, + { + "type": "separator", + "rank": 26 + }, + { + "command": "jupytext:create-new-text-noteboook-Rmd", + "rank": 30 + }, + { + "command": "jupytext:create-new-text-noteboook-qmd", + "rank": 35 + } + ] + }, + "rank": 1 + }, + { + "type": "submenu", + "submenu": { + "id": "jp-mainmenu-jupytext-new", + "label": "Pair Notebook", + "items": [ + { + "command": "jupytext:ipynb", + "rank": 1 + }, + { + "type": "separator", + "rank": 2 + }, + { + "command": "jupytext:auto:light", + "rank": 5 + }, + { + "command": "jupytext:auto:percent", + "rank": 10 + }, + { + "command": "jupytext:auto:hydrogen", + "rank": 15 + }, + { + "command": "jupytext:auto:nomarker", + "rank": 20 + }, + { + "type": "separator", + "rank": 25 + }, + { + "command": "jupytext:md", + "rank": 30 + }, + { + "command": "jupytext:md:myst", + "rank": 35 + }, + { + "type": "separator", + "rank": 40 + }, + { + "command": "jupytext:Rmd", + "rank": 45 + }, + { + "command": "jupytext:qmd", + "rank": 50 + }, + { + "type": "separator", + "rank": 55 + }, + { + "command": "jupytext:custom", + "rank": 60 + }, + { + "type": "separator", + "rank": 65 + }, + { + "command": "jupytext:none", + "rank": 70 + } + ] + }, + "rank": 10 + }, + { + "type": "separator", + "rank": 11 + }, + { + "command": "jupytext:metadata", + "rank": 30 + }, + { + "type": "separator", + "rank": 31 + }, + { + "command": "jupytext:faq", + "rank": 40 + }, + { + "command": "jupytext:reference", + "rank": 41 + } + ] + } + ] + }, + "additionalProperties": false, + "type": "object" +} diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/src/index.ts b/jupyterlab/packages/jupyterlab-jupytext-extension/src/index.ts index 06a2c1064..a700e7ed4 100644 --- a/jupyterlab/packages/jupyterlab-jupytext-extension/src/index.ts +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/src/index.ts @@ -5,552 +5,193 @@ import { import { ICommandPalette, - showErrorMessage, IToolbarWidgetRegistry, createToolbarFactory, + showErrorMessage, } from '@jupyterlab/apputils'; +import { IDocumentManager } from '@jupyterlab/docmanager'; + +import { Contents } from '@jupyterlab/services'; + +import { ILauncher } from '@jupyterlab/launcher'; + import { ISettingRegistry } from '@jupyterlab/settingregistry'; import { IEditorServices } from '@jupyterlab/codeeditor'; -import * as nbformat from '@jupyterlab/nbformat'; - import { INotebookTracker, INotebookWidgetFactory, NotebookPanel, NotebookWidgetFactory, } from '@jupyterlab/notebook'; + import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; -import { - ITranslator, - nullTranslator, - TranslationBundle, -} from '@jupyterlab/translation'; +import { IDefaultFileBrowser } from '@jupyterlab/filebrowser'; -import { markdownIcon } from '@jupyterlab/ui-components'; +import { IDocumentWidget } from '@jupyterlab/docregistry'; -import { IRisePreviewFactory } from 'jupyterlab-rise'; +import { ITranslator, nullTranslator } from '@jupyterlab/translation'; -interface IJupytextFormat { - /** - * Conversion format - */ - format: string; - /** - * Command label - */ - label: string; -} - -interface IJupytextRepresentation { - format_name: string; - extension: string; -} - -interface IJupytextSection { - formats?: string; - notebook_metadata_filter?: string; - cell_metadata_filter?: string; - text_representation?: IJupytextRepresentation; -} - -function getJupytextFormats(trans: TranslationBundle): IJupytextFormat[] { - return [ - { - format: 'ipynb', - label: trans.__('Pair Notebook with ipynb document'), - }, - { - format: 'auto:light', - label: trans.__('Pair Notebook with light Script'), - }, - { - format: 'auto:percent', - label: trans.__('Pair Notebook with percent Script'), - }, - { - format: 'auto:hydrogen', - label: trans.__('Pair Notebook with Hydrogen Script'), - }, - { - format: 'auto:nomarker', - label: trans.__('Pair Notebook with nomarker Script'), - }, - { - format: 'md', - label: trans.__('Pair Notebook with Markdown'), - }, - { - format: 'md:myst', - label: trans.__('Pair Notebook with MyST Markdown'), - }, - { - format: 'Rmd', - label: trans.__('Pair Notebook with R Markdown'), - }, - { - format: 'qmd', - label: trans.__('Pair Notebook with Quarto (qmd)'), - }, - { - format: 'custom', - label: trans.__('Custom pairing'), - }, - { - format: 'none', - label: trans.__('Unpair Notebook'), - }, - ]; -} +import { markdownIcon, notebookIcon } from '@jupyterlab/ui-components'; -/** - * Supported file formats. - */ -const LANGUAGE_INDEPENDENT_NOTEBOOK_EXTENSIONS = ['ipynb', 'md', 'Rmd', 'qmd']; - -// will get updated upon activation -// default is true, and we will turn this off only iff -// app.name is "JupyterLab" and the version is 3.x or below -let JLAB4 = true; - -function get_jupytext_formats( - notebook_tracker: INotebookTracker -): Array { - if (!notebook_tracker.currentWidget) { - return []; - } - - const model = notebook_tracker.currentWidget.context.model; - - const jupytext: IJupytextSection = ( - JLAB4 - ? (model as any).getMetadata('jupytext') - : (model.metadata as any)?.get('jupytext') - ) as IJupytextSection; - if (!jupytext) { - return []; - } - const formats: Array = - jupytext && jupytext.formats ? jupytext.formats.split(',') : []; - return formats.filter((fmt) => { - return fmt !== ''; - }); -} - -function get_selected_formats( - notebook_tracker: INotebookTracker -): Array { - if (!notebook_tracker.currentWidget) { - return []; - } - - let formats = get_jupytext_formats(notebook_tracker); - - const model = notebook_tracker.currentWidget.context.model; - - const lang = ( - JLAB4 - ? (model as any).getMetadata('language_info') - : (model.metadata as any)?.get('language_info') - ) as nbformat.ILanguageInfoMetadata; - if (lang && lang.file_extension) { - const script_ext = lang.file_extension.substring(1); - formats = formats.map((fmt) => { - if (fmt === script_ext) { - return 'auto:light'; - } - return fmt.replace(script_ext + ':', 'auto:'); - }); - } - - let notebook_extension: string | undefined = - notebook_tracker.currentWidget.context.path.split('.').pop(); - if (!notebook_extension) { - return formats; - } - - notebook_extension = - LANGUAGE_INDEPENDENT_NOTEBOOK_EXTENSIONS.indexOf(notebook_extension) === -1 - ? 'auto' - : notebook_extension; - for (const i in formats) { - const ext = formats[i].split(':')[0]; - if (ext === notebook_extension) { - return formats; - } - } - - // the notebook extension was not found among the formats - if ( - LANGUAGE_INDEPENDENT_NOTEBOOK_EXTENSIONS.indexOf(notebook_extension) !== -1 - ) { - formats.push(notebook_extension); - } else { - let format_name = 'light'; - - const model = notebook_tracker.currentWidget.context.model; - const jupytext: IJupytextSection = ( - JLAB4 - ? (model as any).getMetadata('jupytext') - : (model.metadata as any)?.get('jupytext') - ) as IJupytextSection; - if ( - jupytext && - jupytext.text_representation && - jupytext.text_representation.format_name - ) { - format_name = jupytext.text_representation.format_name; - } +import { DisposableSet } from '@lumino/disposable'; - formats.push('auto:' + format_name); - } - return formats; -} +import { JSONExt, ReadonlyJSONValue } from '@lumino/coreutils'; + +import { IRisePreviewFactory } from 'jupyterlab-rise'; + +import { + JUPYTEXT_EXTENSION_ID, + FILE_TYPES, + TEXT_NOTEBOOKS_LAUNCHER_ICONS, + FACTORY, + CommandIDs, + IJupytextFormat, +} from './tokens'; + +import { + getAvailJupytextFormats, + isPairCommandToggled, + isPairCommandEnabled, + executePairCommand, + isMetadataCommandToggled, + isMetadataCommandEnabled, + executeMetadataCommand, +} from './jupytext'; /** * Initialization data for the jupyterlab-jupytext extension. */ const extension: JupyterFrontEndPlugin = { - id: 'jupyterlab-jupytext', + id: JUPYTEXT_EXTENSION_ID, autoStart: true, - optional: [ITranslator, ICommandPalette, IRisePreviewFactory], + optional: [ + ILauncher, + IDefaultFileBrowser, + ITranslator, + ICommandPalette, + IRisePreviewFactory, + ], requires: [ NotebookPanel.IContentFactory, IEditorServices, + IDocumentManager, IRenderMimeRegistry, INotebookWidgetFactory, INotebookTracker, ISettingRegistry, IToolbarWidgetRegistry, ], - activate: ( + activate: async ( app: JupyterFrontEnd, contentFactory: NotebookPanel.IContentFactory, editorServices: IEditorServices, + docManager: IDocumentManager, rendermime: IRenderMimeRegistry, notebookFactory: NotebookWidgetFactory.IFactory, notebookTracker: INotebookTracker, settingRegistry: ISettingRegistry, toolbarRegistry: IToolbarWidgetRegistry, + launcher: ILauncher | null, + defaultBrowser: IDefaultFileBrowser | null, translator: ITranslator | null, palette: ICommandPalette | null, riseFactory: IRisePreviewFactory | null ) => { - // https://semver.org/#semantic-versioning-specification-semver - // npm semver requires pre-release versions to come with a hyphen - // so 7.0.0rc2 won't work with semver - // in addition, when running in the notebook7 context, app refers - // to the notebook7 application, not the jupyterlab application - if (app.name === 'JupyterLab') { - const app_numbers = app.version.match(/[0-9]+/); - if (app_numbers) { - JLAB4 = parseInt(app_numbers[0], 10) >= 4; - } - } console.log('JupyterLab extension jupytext is activating...'); - console.debug(`bundled jupytext labextension: JLAB4=${JLAB4}`); const trans = (translator ?? nullTranslator).load('jupytext'); - // Jupytext formats - const JUPYTEXT_FORMATS = getJupytextFormats(trans); - JUPYTEXT_FORMATS.forEach((args, rank) => { + // Load settings + let launcherItems = TEXT_NOTEBOOKS_LAUNCHER_ICONS; + let launcherItemsCategory = 'Jupytext'; + if (settingRegistry) { + const settings = await settingRegistry.load(extension.id); + launcherItems = settings.get('format').composite as string[]; + launcherItemsCategory = settings.get('category').composite as string; + } + + // Unpack necessary components + const { commands, serviceManager, docRegistry } = app; + + // Get all Jupytext formats + const JUPYTEXT_FORMATS = getAvailJupytextFormats(trans); + + // Register all pairing commands + JUPYTEXT_FORMATS.forEach((args: IJupytextFormat, rank: number) => { const format: string = args['format']; - const command: string = 'jupytext:' + format; - app.commands.addCommand(command, { + const command = `jupytext:${format}`; + commands.addCommand(command, { label: args['label'], isToggled: () => { - if (!notebookTracker.currentWidget) { - return false; - } - const jupytext_formats = get_selected_formats(notebookTracker); - - if (format === 'custom') { - for (const i in jupytext_formats) { - const fmt = jupytext_formats[i]; - if ( - [ - 'ipynb', - 'auto:light', - 'auto:percent', - 'auto:hydrogen', - 'auto:nomarker', - 'md', - 'Rmd', - 'qmd', - 'md:myst', - ].indexOf(fmt) === -1 - ) { - return true; - } - } - return false; - } - return jupytext_formats.indexOf(format) !== -1; + return isPairCommandToggled(format, notebookTracker); }, isEnabled: () => { - if (!notebookTracker.currentWidget) { - return false; - } - - const notebook_extension: string | undefined = - notebookTracker.currentWidget.context.path.split('.').pop(); - if (format === notebook_extension) { - return false; - } - - if (format === 'none') { - const formats = get_selected_formats(notebookTracker); - return formats.length > 1; - } - - return true; + return isPairCommandEnabled(format, notebookTracker); }, execute: () => { - if (notebookTracker.currentWidget === null) { - return; - } - const model = notebookTracker.currentWidget.context.model; - let jupytext: IJupytextSection = ( - JLAB4 - ? (model as any).getMetadata('jupytext') - : (model.metadata as any)?.get('jupytext') - ) as IJupytextSection | undefined; - let formats: Array = get_selected_formats(notebookTracker); - - // Toggle the selected format - console.log('Jupytext: executing command=' + command); - if (format === 'custom') { - showErrorMessage( - trans.__('Error'), - trans.__( - 'Please edit the notebook metadata directly if you wish a custom configuration.' - ) - ); - return; - } - // Toggle the selected format - let notebook_extension: string = - notebookTracker.currentWidget.context.path - .split('.') - .pop() as string; - notebook_extension = - LANGUAGE_INDEPENDENT_NOTEBOOK_EXTENSIONS.indexOf( - notebook_extension - ) === -1 - ? 'auto' - : notebook_extension; - - // Toggle the selected format - const index = formats.indexOf(format); - if (format === 'none') { - // Only keep one format - one that matches the current extension - for (const i in formats) { - const fmt = formats[i]; - if (fmt.split(':')[0] === notebook_extension) { - formats = [fmt]; - break; - } - } - } else if (index !== -1) { - formats.splice(index, 1); - - // The current file extension can't be unpaired - let ext_found = false; - for (const i in formats) { - const fmt = formats[i]; - if (fmt.split(':')[0] === notebook_extension) { - ext_found = true; - break; - } - } - - if (!ext_found) { - return; - } - } else { - // We can't have the same extension multiple times - const new_formats = []; - for (const i in formats) { - const fmt = formats[i]; - if (fmt.split(':')[0] !== format.split(':')[0]) { - new_formats.push(fmt); - } - } - - formats = new_formats; - formats.push(format); - } - - if (formats.length === 1) { - if (notebook_extension !== 'auto') { - formats = []; - } else if (jupytext?.text_representation) { - const format_name = formats[0].split(':')[1]; - jupytext.text_representation.format_name = format_name; - formats = []; - } - } - - if (formats.length === 0) { - // an older version was re-fetching the jupytext metadata here - // but this is not necessary, as the metadata is already available - if (!jupytext) { - return; - } - - if (jupytext.formats) { - delete jupytext.formats; - } - if (Object.keys(jupytext).length === 0) { - JLAB4 - ? (model as any).deleteMetadata('jupytext') - : (model.metadata as any).delete('jupytext'); - } else if (JLAB4) { - (model as any).setMetadata('jupytext', jupytext); - } - return; - } - - // set the desired format - if (jupytext) { - jupytext.formats = formats.join(); - } else { - jupytext = { formats: formats.join() }; - if (!JLAB4) { - (model.metadata as any)?.set('jupytext', jupytext); - } - } - if (JLAB4) { - (model as any).setMetadata('jupytext', jupytext); - } + return executePairCommand(command, format, notebookTracker, trans); }, }); console.log( - 'Jupytext: adding command=' + command + ' with rank=' + (rank + 1) + 'Registering pairing command=' + command + ' with rank=' + (rank + 1) ); palette?.addItem({ command, rank: rank + 2, category: 'Jupytext' }); }); - // Jupytext's documentation - palette?.addItem({ - args: { - text: trans.__('Jupytext Reference'), - url: 'https://jupytext.readthedocs.io/en/latest/', - }, - command: 'help:open', - category: 'Jupytext', - rank: 0, - }); - - palette?.addItem({ - args: { - text: trans.__('Jupytext FAQ'), - url: 'https://jupytext.readthedocs.io/en/latest/faq.html', - }, - command: 'help:open', - category: 'Jupytext', - rank: 1, - }); - // Metadata in text representation - app.commands.addCommand('jupytext_metadata', { + commands.addCommand(CommandIDs.metadata, { label: trans.__('Include Metadata'), isToggled: () => { - if (!notebookTracker.currentWidget) { - return false; - } - - const model = notebookTracker.currentWidget.context.model; - const jupytext_metadata = JLAB4 - ? (model as any).getMetadata('jupytext') - : (model.metadata as any)?.get('jupytext'); - if (!jupytext_metadata) { - return false; - } - - const jupytext: IJupytextSection = - jupytext_metadata as unknown as IJupytextSection; - - if (jupytext.notebook_metadata_filter === '-all') { - return false; - } - - return true; + return isMetadataCommandToggled(notebookTracker); }, isEnabled: () => { - if (!notebookTracker.currentWidget) { - return false; - } - - const model = notebookTracker.currentWidget.context.model; - const jupytext_metadata = JLAB4 - ? (model as any).getMetadata('jupytext') - : (model.metadata as any)?.get('jupytext'); - if (!jupytext_metadata) { - return false; - } - - const jupytext: IJupytextSection = - jupytext_metadata as unknown as IJupytextSection; - - if (jupytext.notebook_metadata_filter === undefined) { - return true; - } - - if (jupytext.notebook_metadata_filter === '-all') { - return true; - } - - return false; + return isMetadataCommandEnabled(notebookTracker); }, execute: () => { - console.log('Jupytext: toggling YAML header'); - if (!notebookTracker.currentWidget) { - return; - } - - const model = notebookTracker.currentWidget.context.model; - const jupytext_metadata = JLAB4 - ? (model as any).getMetadata('jupytext') - : (model.metadata as any)?.get('jupytext'); - if (!jupytext_metadata) { - return; - } + return executeMetadataCommand(notebookTracker); + }, + }); + palette?.addItem({ + command: CommandIDs.metadata, + rank: JUPYTEXT_FORMATS.length + 3, + category: 'Jupytext', + }); - const jupytext = ((jupytext_metadata as unknown) ?? - {}) as IJupytextSection; - - if (jupytext.notebook_metadata_filter) { - delete jupytext.notebook_metadata_filter; - if (jupytext.cell_metadata_filter === '-all') { - delete jupytext.cell_metadata_filter; - } - } else { - jupytext.notebook_metadata_filter = '-all'; - if (jupytext.cell_metadata_filter === undefined) { - jupytext.cell_metadata_filter = '-all'; - } - } - if (JLAB4) { - (model as any).setMetadata('jupytext', jupytext); - } + // Register Jupytext FAQ command + commands.addCommand(CommandIDs.faq, { + label: trans.__('Jupytext FAQ'), + execute: () => { + window.open('https://jupytext.readthedocs.io/en/latest/faq.html'); }, }); + palette?.addItem({ + command: CommandIDs.faq, + rank: 99, + category: 'Jupytext', + }); + // Register Jupytext Reference + commands.addCommand(CommandIDs.reference, { + label: trans.__('Jupytext Reference'), + execute: () => { + window.open('https://jupytext.readthedocs.io/en/latest/'); + }, + }); palette?.addItem({ - command: 'jupytext_metadata', - rank: JUPYTEXT_FORMATS.length + 3, + command: CommandIDs.faq, + rank: 100, category: 'Jupytext', }); // Define file types - app.docRegistry.addFileType( + docRegistry.addFileType( { name: 'myst', + contentType: 'notebook', displayName: trans.__('MyST Markdown Notebook'), extensions: ['.myst', '.mystnb', '.mnb'], icon: markdownIcon, @@ -558,20 +199,22 @@ const extension: JupyterFrontEndPlugin = { ['Notebook'] ); - app.docRegistry.addFileType( + docRegistry.addFileType( { name: 'r-markdown', + contentType: 'notebook', displayName: trans.__('R Markdown Notebook'), // Extension file are transformed to lower case... - extensions: ['.rmd'], + extensions: ['.Rmd'], icon: markdownIcon, }, ['Notebook'] ); - app.docRegistry.addFileType( + docRegistry.addFileType( { name: 'quarto', + contentType: 'notebook', displayName: trans.__('Quarto Notebook'), extensions: ['.qmd'], icon: markdownIcon, @@ -579,40 +222,23 @@ const extension: JupyterFrontEndPlugin = { ['Notebook'] ); - // the way to create the toolbar factory is different in JupyterLab 3 and 4 - let toolbarFactory; - if (!JLAB4) { - toolbarFactory = notebookFactory.toolbarFactory; - } else { - // primarily this block is copied/pasted from jlab4 code and specifically - // jupyterlab/packages/notebook-extension/src/index.ts - // inside the function `activateWidgetFactory` at line 1150 as of this writing - // - const FACTORY = 'Notebook'; - const PANEL_SETTINGS = '@jupyterlab/notebook-extension:panel'; - - toolbarFactory = createToolbarFactory( - toolbarRegistry, - settingRegistry, - FACTORY, - PANEL_SETTINGS, - translator - ); - } + // primarily this block is copied/pasted from jlab4 code and specifically + // jupyterlab/packages/notebook-extension/src/index.ts + // inside the function `activateWidgetFactory` at line 1150 as of this writing + // + const toolbarFactory = createToolbarFactory( + toolbarRegistry, + settingRegistry, + 'Notebook', + '@jupyterlab/notebook-extension:panel', + translator + ); // Duplicate notebook factory to apply it on Jupytext notebooks - // Mirror: https://github.com/jupyterlab/jupyterlab/blob/8a8c3752564f37493d4eb6b4c59008027fa83880/packages/notebook-extension/src/index.ts#L860 + // Mirror: https://github.com/jupyterlab/jupyterlab/blob/8a8c3752564f37493d4eb6b4c59008027fa83880/packages/notebook-extension/src/index.ts#L860 const factory = new NotebookWidgetFactory({ - name: 'Jupytext Notebook', - label: trans.__('Jupytext Notebook'), - fileTypes: [ - 'markdown', - 'myst', - 'r-markdown', - 'quarto', - 'julia', - 'python', - 'r', - ], + name: FACTORY, + label: trans.__(FACTORY), + fileTypes: FILE_TYPES, modelName: notebookFactory.modelName ?? 'notebook', preferKernel: notebookFactory.preferKernel ?? true, canStartKernel: notebookFactory.canStartKernel ?? true, @@ -624,12 +250,12 @@ const extension: JupyterFrontEndPlugin = { toolbarFactory: toolbarFactory, translator, }); - app.docRegistry.addWidgetFactory(factory); + docRegistry.addWidgetFactory(factory); // Register widget created with the new factory in the notebook tracker - // This is required to activate notebook commands (and therefore shortcuts) + // This is required to activate notebook commands (and therefore shortcuts) let id = 0; // The ID counter for notebook panels. - const ft = app.docRegistry.getFileType('notebook'); + const ft = docRegistry.getFileType('notebook'); factory.widgetCreated.connect((sender, widget) => { // If the notebook panel does not have an ID, assign it one. @@ -652,14 +278,151 @@ const extension: JupyterFrontEndPlugin = { // Add support for RISE slides if (riseFactory) { - riseFactory.addFileType('markdown'); - riseFactory.addFileType('myst'); - riseFactory.addFileType('r-markdown'); - riseFactory.addFileType('quarto'); - riseFactory.addFileType('julia'); - riseFactory.addFileType('python'); - riseFactory.addFileType('r'); + for (const fileType of FILE_TYPES) { + riseFactory.addFileType(fileType); + } } + + // All supported format extensions bar ipynb, custom and none + // must be added to create new text notebook commands + const jupytextTextNotebookFormats = JUPYTEXT_FORMATS.filter( + (jupytextFormat: IJupytextFormat) => { + return !['ipynb', 'custom', 'none'].includes(jupytextFormat.format); + } + ); + + // Register a new command to create untitled file. This snippet is taken + // from docManager package https://github.com/jupyterlab/jupyterlab/blob/c106f0a19110efad7c5e1b136144985819e21100/packages/docmanager-extension/src/index.tsx#L679-L680 + // We are "duplicating" it as base command adds extension to the options + // only if it is of type file. But we are interested in creating notebook type + // files with different Jupytext supported extensions. So we create a dedicated + // create new text notebook command here and make sure we pass extension in options + commands.addCommand(CommandIDs.newUntitled, { + execute: async (args) => { + const errorTitle = (args['error'] as string) || trans.__('Error'); + const path = + typeof args['path'] === 'undefined' ? '' : (args['path'] as string); + const options: Partial = { + type: args['type'] as Contents.ContentType, + path, + }; + + // Ensure we pass extension to command always + options.ext = (args['ext'] as string) || '.txt'; + + return docManager.services.contents + .newUntitled(options) + .catch((error) => showErrorMessage(errorTitle, error)); + }, + label: (args) => + (args['label'] as string) || `New ${args['type'] as string}`, + }); + palette?.addItem({ + command: CommandIDs.newUntitled, + rank: 50, + category: 'Jupytext', + }); + + // Register all the commands that create text notebooks with different formats + // Nicked from notebook-extension package in JupyterLab + // https://github.com/jupyterlab/jupyterlab/blob/c106f0a19110efad7c5e1b136144985819e21100/packages/notebook-extension/src/index.ts#L1902-L1965 + jupytextTextNotebookFormats.forEach( + (jupytextFormat: IJupytextFormat, rank: number) => { + const command = `jupytext:create-new-text-noteboook-${jupytextFormat.format}`; + const label = trans.__(jupytextFormat.label.split('with')[1].trim()); + console.log('Registering text notebook command=', command); + commands.addCommand(command, { + label: (args) => { + if (args['isLauncher']) { + return trans.__(label); + } + if (args['isPalette'] || args['isContextMenu']) { + return trans.__(`New Text Notebook with ${label}`); + } + return trans.__(label); + }, + caption: trans.__(`Create New Text Notebook with ${label}`), + icon: (args) => (args['isPalette'] ? undefined : notebookIcon), + execute: (args) => { + const cwd = + (args['cwd'] as string) || (defaultBrowser?.model.path ?? ''); + const kernelId = (args['kernelId'] as string) || ''; + const kernelName = (args['kernelName'] as string) || ''; + return createNew(cwd, kernelId, kernelName, jupytextFormat.format); + }, + }); + palette?.addItem({ + command, + args: { isPalette: true }, + rank: rank + 51, + category: 'Jupytext', + }); + + // Add a launcher item if the launcher is available. + if (launcher && launcherItems.includes(jupytextFormat.format)) { + void serviceManager.ready.then(() => { + let disposables: DisposableSet | null = null; + const onSpecsChanged = () => { + if (disposables) { + disposables.dispose(); + disposables = null; + } + const specs = serviceManager.kernelspecs.specs; + if (!specs) { + return; + } + disposables = new DisposableSet(); + + for (const name in specs.kernelspecs) { + const rank = name === specs.default ? 0 : Infinity; + const spec = specs.kernelspecs[name]!; + const kernelIconUrl = + spec.resources['logo-svg'] || spec.resources['logo-64x64']; + disposables.add( + launcher.add({ + command: command, + args: { isLauncher: true, kernelName: name }, + category: trans.__(launcherItemsCategory), + rank, + kernelIconUrl, + metadata: { + kernel: JSONExt.deepCopy( + spec.metadata || {} + ) as ReadonlyJSONValue, + }, + }) + ); + } + }; + onSpecsChanged(); + serviceManager.kernelspecs.specsChanged.connect(onSpecsChanged); + }); + } + } + ); + + // Utility function to create a new notebook. + const createNew = async ( + cwd: string, + kernelId: string, + kernelName: string, + format: string + ) => { + const model = await commands.execute(CommandIDs.newUntitled, { + path: cwd, + type: 'notebook', + ext: format.replace('auto', 'py'), // Replace auto with py + }); + if (model !== undefined) { + const widget = (await commands.execute('docmanager:open', { + path: model.path, + factory: FACTORY, + kernel: { id: kernelId, name: kernelName }, + })) as unknown as IDocumentWidget; + widget.isUntitled = true; + return widget; + } + }; }, }; diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/src/jupytext.ts b/jupyterlab/packages/jupyterlab-jupytext-extension/src/jupytext.ts new file mode 100644 index 000000000..faab6b3d2 --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/src/jupytext.ts @@ -0,0 +1,373 @@ +import { showErrorMessage } from '@jupyterlab/apputils'; + +import { INotebookTracker } from '@jupyterlab/notebook'; + +import * as nbformat from '@jupyterlab/nbformat'; + +import { TranslationBundle } from '@jupyterlab/translation'; + +import { + LANGUAGE_INDEPENDENT_NOTEBOOK_EXTENSIONS, + ALL_JUPYTEXT_FORMATS, + ALL_JUPYTEXT_FORMAT_EXTENSIONS, + IJupytextFormat, + IJupytextSection, +} from './tokens'; + +/** + * Get a list of all supported Jupytext formats + */ +export function getAvailJupytextFormats( + trans: TranslationBundle +): IJupytextFormat[] { + return ALL_JUPYTEXT_FORMATS.map((formatObj) => { + return { format: formatObj.format, label: trans.__(formatObj.label) }; + }); +} + +/** + * Get Jupytext format of current widget if it is a text notebook + */ +function getWidgetJupytextFormats( + notebookTracker: INotebookTracker +): Array { + const model = notebookTracker.currentWidget.context.model; + + const jupytext: IJupytextSection = (model as any).getMetadata('jupytext'); + if (!jupytext) { + return []; + } + const formats: Array = jupytext.formats + ? jupytext.formats.split(',') + : []; + return formats.filter((format) => { + return format !== ''; + }); +} + +/** + * Get file extension of current notebook widget + */ +function getNotebookFileExtension(notebookTracker: INotebookTracker): string { + let notebookFileExtension: string | undefined = + notebookTracker.currentWidget.context.path.split('.').pop(); + if (!notebookFileExtension) { + return ''; + } + + notebookFileExtension = LANGUAGE_INDEPENDENT_NOTEBOOK_EXTENSIONS.includes( + notebookFileExtension + ) + ? notebookFileExtension + : 'auto'; + return notebookFileExtension; +} + +/** + * Get a list of all selected formats + */ +function getSelectedFormats(notebookTracker: INotebookTracker): Array { + if (!notebookTracker.currentWidget) { + return []; + } + + let formats = getWidgetJupytextFormats(notebookTracker); + + const model = notebookTracker.currentWidget.context.model; + + const languageInfo = (model as any).getMetadata( + 'language_info' + ) as nbformat.ILanguageInfoMetadata; + if (languageInfo && languageInfo.file_extension) { + const scriptExt = languageInfo.file_extension.substring(1); + formats = formats.map((format) => { + // By default use light format + if (format === scriptExt) { + return 'auto:light'; + } + // Replace language specific extension with auto + return format.replace(`${scriptExt}:`, 'auto:'); + }); + } + + const notebookFileExtension = getNotebookFileExtension(notebookTracker); + if (!notebookFileExtension) { + return formats; + } + // Remove variant after : in format + const formatExtensions = formats.map((format) => { + return format.split(':')[0]; + }); + // If current notebook file extension in formats, return + if (formatExtensions.includes(notebookFileExtension)) { + return formats; + } + + // When notebook loads for the first time, ipynb extension would not be + // in the formats. Here we add it and return formats + if ( + LANGUAGE_INDEPENDENT_NOTEBOOK_EXTENSIONS.includes(notebookFileExtension) + ) { + formats.push(notebookFileExtension); + } else { + const model = notebookTracker.currentWidget.context.model; + const jupytext: IJupytextSection = (model as any).getMetadata( + 'jupytext' + ) as IJupytextSection; + const formatName = jupytext + ? jupytext?.text_representation?.formatName || 'light' + : 'light'; + formats.push(`auto:${formatName}`); + } + return formats; +} + +/** + * Toggle pair command + */ +export function isPairCommandToggled( + format: string, + notebookTracker: INotebookTracker +): boolean { + if (!notebookTracker.currentWidget) { + return false; + } + + // Get selected formats on current widget + const selectedFormats = getSelectedFormats(notebookTracker); + + if (format === 'custom') { + for (const selecFormat of selectedFormats) { + if (!ALL_JUPYTEXT_FORMAT_EXTENSIONS.includes(selecFormat)) { + return true; + } + } + return false; + } + return selectedFormats.includes(format); +} + +/** + * Enable pair command + */ +export function isPairCommandEnabled( + format: string, + notebookTracker: INotebookTracker +): boolean { + if (!notebookTracker.currentWidget) { + return false; + } + + const notebookFileExtension: string | undefined = + notebookTracker.currentWidget.context.path.split('.').pop(); + if (format === notebookFileExtension) { + return false; + } + + // Get selected formats on current widget + const selectedFormats = getSelectedFormats(notebookTracker); + + if (format === 'none') { + return selectedFormats.length > 1; + } + + return true; +} + +/** + * Execute pair command + */ +export function executePairCommand( + command: string, + format: string, + notebookTracker: INotebookTracker, + trans: TranslationBundle +): void { + if (!notebookTracker.currentWidget) { + return; + } + const model = notebookTracker.currentWidget.context.model; + let jupytext: IJupytextSection = (model as any).getMetadata('jupytext') as + | IJupytextSection + | undefined; + + // Get selected formats on current widget + let selectedFormats = getSelectedFormats(notebookTracker); + + // Toggle the selected format + console.log('Jupytext: executing command=' + command, selectedFormats); + if (format === 'custom') { + showErrorMessage( + trans.__('Error'), + trans.__( + 'Please edit the notebook metadata directly if you wish a custom configuration.' + ) + ); + return; + } + + // Get current notebook widget extension + const notebookFileExtension = getNotebookFileExtension(notebookTracker); + + // Toggle the selected format + const index = selectedFormats.indexOf(format); + if (format === 'none') { + // Only keep one format - one that matches the current extension + for (const selectedFormat of selectedFormats) { + if (selectedFormat.split(':')[0] === notebookFileExtension) { + selectedFormats = [selectedFormat]; + break; + } + } + } else if (index !== -1) { + selectedFormats.splice(index, 1); + + // The current file extension can't be unpaired + let extFound = false; + for (const selectedFormat of selectedFormats) { + if (selectedFormat.split(':')[0] === notebookFileExtension) { + extFound = true; + break; + } + } + + if (!extFound) { + return; + } + } else { + // We can't have the same extension multiple times + const newFormats = []; + for (const selectedFormat of selectedFormats) { + if (selectedFormat.split(':')[0] !== format.split(':')[0]) { + newFormats.push(selectedFormat); + } + } + + selectedFormats = newFormats; + selectedFormats.push(format); + } + + if (selectedFormats.length === 1) { + if (notebookFileExtension !== 'auto') { + selectedFormats = []; + } else if (jupytext?.text_representation) { + jupytext.text_representation.formatName = + selectedFormats[0].split(':')[1]; + selectedFormats = []; + } + } + + if (selectedFormats.length === 0) { + // an older version was re-fetching the jupytext metadata here + // but this is not necessary, as the metadata is already available + if (!jupytext) { + return; + } + + if (jupytext.formats) { + delete jupytext.formats; + } + if (Object.keys(jupytext).length === 0) { + (model as any).deleteMetadata('jupytext'); + (model as any).setMetadata('jupytext', jupytext); + } + return; + } + + // set the desired format + if (jupytext) { + jupytext.formats = selectedFormats.join(); + } else { + jupytext = { formats: selectedFormats.join() }; + } + (model as any).setMetadata('jupytext', jupytext); +} + +/** + * Toggle metadata command + */ +export function isMetadataCommandToggled( + notebookTracker: INotebookTracker +): boolean { + if (!notebookTracker.currentWidget) { + return false; + } + + const model = notebookTracker.currentWidget.context.model; + const jupytextMetadata = (model as any).getMetadata('jupytext'); + if (!jupytextMetadata) { + return false; + } + + const jupytext: IJupytextSection = + jupytextMetadata as unknown as IJupytextSection; + + if (jupytext.notebook_metadata_filter === '-all') { + return false; + } + + return true; +} + +/** + * Enable metadata command + */ +export function isMetadataCommandEnabled( + notebookTracker: INotebookTracker +): boolean { + if (!notebookTracker.currentWidget) { + return false; + } + + const model = notebookTracker.currentWidget.context.model; + const jupytextMetadata = (model as any).getMetadata('jupytext'); + if (!jupytextMetadata) { + return false; + } + + const jupytext: IJupytextSection = + jupytextMetadata as unknown as IJupytextSection; + + if (jupytext.notebook_metadata_filter === undefined) { + return true; + } + + if (jupytext.notebook_metadata_filter === '-all') { + return true; + } + + return false; +} + +/** + * Execute metadata command + */ +export function executeMetadataCommand( + notebookTracker: INotebookTracker +): void { + console.log('Jupytext: toggling YAML header'); + if (!notebookTracker.currentWidget) { + return; + } + + const model = notebookTracker.currentWidget.context.model; + const jupytextMetadata = (model as any).getMetadata('jupytext'); + if (!jupytextMetadata) { + return; + } + + const jupytext = ((jupytextMetadata as unknown) ?? {}) as IJupytextSection; + + if (jupytext.notebook_metadata_filter) { + delete jupytext.notebook_metadata_filter; + if (jupytext.notebook_metadata_filter === '-all') { + delete jupytext.notebook_metadata_filter; + } + } else { + jupytext.notebook_metadata_filter = '-all'; + if (jupytext.notebook_metadata_filter === undefined) { + jupytext.notebook_metadata_filter = '-all'; + } + } + (model as any).setMetadata('jupytext', jupytext); +} diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/src/tokens.ts b/jupyterlab/packages/jupyterlab-jupytext-extension/src/tokens.ts new file mode 100644 index 000000000..2a3c22cbe --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/src/tokens.ts @@ -0,0 +1,149 @@ +/** + * Jupytext extension ID + */ +export const JUPYTEXT_EXTENSION_ID = 'jupyterlab-jupytext:plugin'; + +/** + * Jupytext widget factory + */ +export const FACTORY = 'Jupytext Notebook'; + +/** + * Supported file formats. + */ +export const LANGUAGE_INDEPENDENT_NOTEBOOK_EXTENSIONS = [ + 'ipynb', + 'md', + 'Rmd', + 'qmd', +]; + +/** + * Supported file types. + */ +export const FILE_TYPES = [ + 'markdown', + 'myst', + 'r-markdown', + 'quarto', + 'julia', + 'python', + 'r', +]; + +/** + * The short namespace for commands, etc. + */ +export const NS = 'jupytext'; + +/** + * Command IDs of Jupytext + */ +export namespace CommandIDs { + export const metadata = `${NS}:metadata`; + export const reference = `${NS}:reference`; + export const faq = `${NS}:faq`; + export const newUntitled = `${NS}:new-untitled-text-notebook`; +} + +/** + * Supported Jupytext formats with metadata. + */ +export const ALL_JUPYTEXT_FORMATS = [ + { + format: 'ipynb', + label: 'Pair Notebook with ipynb document', + }, + { + format: 'auto:light', + label: 'Pair Notebook with Light Script', + }, + { + format: 'auto:percent', + label: 'Pair Notebook with Percent Script', + }, + { + format: 'auto:hydrogen', + label: 'Pair Notebook with Hydrogen Script', + }, + { + format: 'auto:nomarker', + label: 'Pair Notebook with Nomarker Script', + }, + { + format: 'md', + label: 'Pair Notebook with Markdown', + }, + { + format: 'md:myst', + label: 'Pair Notebook with MyST Markdown', + }, + { + format: 'Rmd', + label: 'Pair Notebook with R Markdown', + }, + { + format: 'qmd', + label: 'Pair Notebook with Quarto (qmd)', + }, + { + format: 'custom', + label: 'Custom pairing', + }, + { + format: 'none', + label: 'Unpair Notebook', + }, +]; + +/** + * Supported Jupytext format extensions bar custom and none + */ +export const ALL_JUPYTEXT_FORMAT_EXTENSIONS = ALL_JUPYTEXT_FORMATS.map( + (formatObj) => { + return formatObj.format; + } +).filter((format) => { + return !['custom', 'none'].includes(format); +}); + +/** + * List of formats that would be added to launcher icons + */ +export const TEXT_NOTEBOOKS_LAUNCHER_ICONS = + ALL_JUPYTEXT_FORMAT_EXTENSIONS.filter((format) => { + return ![ + 'ipynb', + 'auto:hydrogen', + 'auto:nomarker', + 'qmd', + 'custom', + 'none', + ].includes(format); + }); + +/** + * An interface for Jupytext format + */ +export interface IJupytextFormat { + format: string; + label: string; +} + +/** + * An interface for Jupytext representation + */ +export interface IJupytextRepresentation { + formatName: string; + extension: string; +} + +/** + * An interface for Jupytext metadata + */ +export interface IJupytextSection { + formats?: string; + notebook_metadata_filter?: string; + cell_metadata_filer?: string; + text_representation?: IJupytextRepresentation; +} diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/README.md b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/README.md new file mode 100644 index 000000000..a17c158d9 --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/README.md @@ -0,0 +1,167 @@ +# Integration Testing + +This folder contains the integration tests of the extension. + +They are defined using [Playwright](https://playwright.dev/docs/intro) test runner +and [Galata](https://github.com/jupyterlab/jupyterlab/tree/main/galata) helper. + +The Playwright configuration is defined in [playwright.config.js](./playwright.config.js). + +The JupyterLab server configuration to use for the integration test is defined +in [jupyter_server_test_config.py](./jupyter_server_test_config.py). + +The default configuration will produce video for failing tests and an HTML report. + +> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). + +## Run the tests + +> All commands are assumed to be executed from the _main-menu_ directory + +To run the tests, you need to: + +1. Compile the extension: + +```sh +jlpm install +jlpm build:prod +``` + +> Check the extension is installed in JupyterLab. + +2. Install test dependencies (needed only once): + +```sh +cd ./ui-tests +jlpm install +jlpm playwright install +cd .. +``` + +3. Execute the [Playwright](https://playwright.dev/docs/intro) tests: + +```sh +cd ./ui-tests +jlpm playwright test +``` + +Test results will be shown in the terminal. In case of any test failures, the test report +will be opened in your browser at the end of the tests execution; see +[Playwright documentation](https://playwright.dev/docs/test-reporters#html-reporter) +for configuring that behavior. + +## Update the tests snapshots + +> All commands are assumed to be executed from the _main-menu_ directory + +If you are comparing snapshots to validate your tests, you may need to update +the reference snapshots stored in the repository. To do that, you need to: + +1. Compile the extension: + +```sh +jlpm install +jlpm build:prod +``` + +> Check the extension is installed in JupyterLab. + +2. Install test dependencies (needed only once): + +```sh +cd ./ui-tests +jlpm install +jlpm playwright install +cd .. +``` + +3. Execute the [Playwright](https://playwright.dev/docs/intro) command: + +```sh +cd ./ui-tests +jlpm playwright test -u +``` + +> Some discrepancy may occurs between the snapshots generated on your computer and +> the one generated on the CI. To ease updating the snapshots on a PR, you can +> type `please update playwright snapshots` to trigger the update by a bot on the CI. +> Once the bot has computed new snapshots, it will commit them to the PR branch. + +## Create tests + +> All commands are assumed to be executed from the _main-menu_ directory + +To create tests, the easiest way is to use the code generator tool of playwright: + +1. Compile the extension: + +```sh +jlpm install +jlpm build:prod +``` + +> Check the extension is installed in JupyterLab. + +2. Install test dependencies (needed only once): + +```sh +cd ./ui-tests +jlpm install +jlpm playwright install +cd .. +``` + +3. Start the server: + +```sh +cd ./ui-tests +jlpm start +``` + +4. Execute the [Playwright code generator](https://playwright.dev/docs/codegen) in **another terminal**: + +```sh +cd ./ui-tests +jlpm playwright codegen localhost:8888 +``` + +## Debug tests + +> All commands are assumed to be executed from the _main-menu_ directory + +To debug tests, a good way is to use the inspector tool of playwright: + +1. Compile the extension: + +```sh +jlpm install +jlpm build:prod +``` + +> Check the extension is installed in JupyterLab. + +2. Install test dependencies (needed only once): + +```sh +cd ./ui-tests +jlpm install +jlpm playwright install +cd .. +``` + +3. Execute the Playwright tests in [debug mode](https://playwright.dev/docs/debug): + +```sh +cd ./ui-tests +jlpm playwright test --debug +``` + +## Upgrade Playwright and the browsers + +To update the web browser versions, you must update the package `@playwright/test`: + +```sh +cd ./ui-tests +jlpm up "@playwright/test" +jlpm playwright install +``` diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/jupyter_server_test_config.py b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/jupyter_server_test_config.py new file mode 100644 index 000000000..301b94c23 --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/jupyter_server_test_config.py @@ -0,0 +1,12 @@ +"""Server configuration for integration tests. + +!! Never use this configuration in production because it +opens the server to the world and provide access to JupyterLab +JavaScript objects through the global window variable. +""" +from jupyterlab.galata import configure_jupyter_server + +configure_jupyter_server(c) # noqa: F821 + +# Uncomment to set server log level to debug level +# c.ServerApp.log_level = "DEBUG" diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/package.json b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/package.json new file mode 100644 index 000000000..3cb137857 --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/package.json @@ -0,0 +1,15 @@ +{ + "name": "jupyterlab-jupytext-ui-tests", + "version": "1.4.0", + "description": "Basic Integration Tests", + "private": true, + "scripts": { + "start": "jupyter lab --config jupyter_server_test_config.py", + "test": "jlpm playwright test", + "test:update": "jlpm playwright test --update-snapshots" + }, + "devDependencies": { + "@jupyterlab/galata": "^5.0.0", + "@playwright/test": "^1.32.0" + } +} diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/playwright.config.js b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/playwright.config.js new file mode 100644 index 000000000..52f61336e --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/playwright.config.js @@ -0,0 +1,38 @@ +/** + * Configuration for Playwright using default from @jupyterlab/galata + */ +const baseConfig = require('@jupyterlab/galata/lib/playwright-config'); + +module.exports = { + ...baseConfig, + projects: [ + { + name: 'jupytext', + testMatch: 'tests/*.ts', + testIgnore: '**/.ipynb_checkpoints/**', + timeout: 60000, + // use: { + // launchOptions: { + // // Force slow motion + // slowMo: 1000, + // }, + // }, + }, + ], + // Visual comparison of screenshots can be flaky. Use a tolerance + expect: { + toMatchSnapshot: { + maxDiffPixelRatio: 0.02, + }, + }, + webServer: { + command: 'jlpm start', + url: 'http://localhost:8888/lab', + timeout: 120 * 1000, + reuseExistingServer: !process.env.CI, + }, + // Switch to 'always' to keep raw assets for all tests + preserveOutput: 'failures-only', // Breaks HTML report if use.video == 'on' + // Try one retry as some tests are flaky + // retries: process.env.CI ? 1 : 0, +}; diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts new file mode 100644 index 000000000..2ec21b2d5 --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts @@ -0,0 +1,27 @@ +import { expect, test } from '@jupyterlab/galata'; + +// Main Jupytext menu +const jupytextMenu = [ + 'Jupytext', + 'Jupytext>New Text Notebook', + 'Jupytext>Pair Notebook', +]; + +test.describe('Jupytext Menu Tests', () => { + test.use({ autoGoto: false }); + + jupytextMenu.forEach((menuPath) => { + test(`Open menu item ${menuPath}`, async ({ page }) => { + await page.goto(); + await page.menu.open(menuPath); + expect(await page.menu.isOpen(menuPath)).toBeTruthy(); + + const imageName = `opened-jupytext-menu-${menuPath.replace( + />/g, + '-' + )}.png`; + const menu = await page.menu.getOpenMenu(); + expect(await menu!.screenshot()).toMatchSnapshot(imageName.toLowerCase()); + }); + }); +}); diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-jupytext-linux.png new file mode 100644 index 000000000..b3752b77e Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-new-text-notebook-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-new-text-notebook-jupytext-linux.png new file mode 100644 index 000000000..9607460ca Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-new-text-notebook-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-pair-notebook-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-pair-notebook-jupytext-linux.png new file mode 100644 index 000000000..b46dc3d37 Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-menu.spec.ts-snapshots/opened-jupytext-menu-jupytext-pair-notebook-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts new file mode 100644 index 000000000..5bf16f212 --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts @@ -0,0 +1,101 @@ +import { expect, test } from '@jupyterlab/galata'; + +// Define all formats that we would like to test +// We dont test Rmd and qmd formats here. Rmd cannot be +// opened by JupyterLab in the markdown format. +// Quarto must be available for qmd to work +const formats = [ + { label: 'Light Script', extension: '.py' }, + { label: 'Percent Script', extension: '.py' }, + { label: 'Hydrogen Script', extension: '.py' }, + { label: 'Nomarker Script', extension: '.py' }, + { label: 'Markdown', extension: '.md' }, + { label: 'MyST Markdown', extension: '.md' }, +]; + +// Get all possible menuPaths +const createNewMenuPaths = formats.map((format) => { + return { + menuPath: `Jupytext>New Text Notebook>${format.label}`, + extension: format.extension, + }; +}); + +const pairMenuPaths = formats.map((format) => { + return { + menuPath: `Jupytext>Pair Notebook>Pair Notebook with ${format.label}`, + extension: format.extension, + }; +}); + +// Name of notebook file +const fileName = 'notebook.ipynb'; + +/** + * Helper function to populate notebook cells and run them + */ +async function populateNotebook(page) { + await page.notebook.setCell(0, 'raw', 'Just a raw cell'); + await page.notebook.addCell( + 'markdown', + '## This is **bold** and *italic* [link to jupyter.org!](http://jupyter.org)' + ); + await page.notebook.runCell(1, true); + await page.notebook.addCell('code', '2 ** 3'); + await page.notebook.runCell(2, true); +} + +test.describe('Jupytext Create Text Notebooks from Menu Tests', () => { + createNewMenuPaths.forEach((paths) => { + test(`Open menu item ${paths.menuPath}`, async ({ page }) => { + // await page.goto(); + // Create new text notebook by clicking menupath item + await page.menu.clickMenuItem(paths.menuPath); + + // Wait for the kernel dialog and accept it + await page.waitForSelector('.jp-Dialog'); + await page.click('.jp-Dialog .jp-mod-accept'); + + // Populate page + await populateNotebook(page); + // Save notebook + await page.notebook.save(); + + // // Compare screenshots + // let imageName = `opened-${paths.menuPath.replace(/>/g, '-')}.png`; + // expect(await page.screenshot()).toMatchSnapshot(imageName.toLowerCase()); + + // Try to open saved text notebook with Editor factory + await page.filebrowser.open(`Untitled${paths.extension}`, 'Editor'); + + // Compare text notebook contents + const imageName = `opened-${paths.menuPath.replace(/>/g, '-')}-text.png`; + expect(await page.screenshot()).toMatchSnapshot(imageName.toLowerCase()); + }); + }); +}); + +test.describe('Jupytext Pair Notebooks from Menu Tests', () => { + // Before each test start a new notebook and add some cell data + test.beforeEach(async ({ page }) => { + await page.notebook.createNew(fileName); + await populateNotebook(page); + }); + + pairMenuPaths.forEach((paths) => { + test(`Open menu item ${paths.menuPath}`, async ({ page }) => { + // Click pairing command + await page.menu.clickMenuItem(paths.menuPath); + // Wait until we save notebook. Once we save it, paired file appears + await page.notebook.save(); + // Try to open paired file + await page.filebrowser.open(fileName.replace('.ipynb', paths.extension)); + + const imageName = `paired-jupytext-${paths.menuPath.replace( + />/g, + '-' + )}.png`; + expect(await page.screenshot()).toMatchSnapshot(imageName.toLowerCase()); + }); + }); +}); diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-hydrogen-script-text-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-hydrogen-script-text-jupytext-linux.png new file mode 100644 index 000000000..02ea8dee7 Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-hydrogen-script-text-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-light-script-text-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-light-script-text-jupytext-linux.png new file mode 100644 index 000000000..264b3d4ee Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-light-script-text-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-markdown-text-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-markdown-text-jupytext-linux.png new file mode 100644 index 000000000..2c1ad656e Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-markdown-text-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-myst-markdown-text-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-myst-markdown-text-jupytext-linux.png new file mode 100644 index 000000000..c4ee4723c Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-myst-markdown-text-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-nomarker-script-text-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-nomarker-script-text-jupytext-linux.png new file mode 100644 index 000000000..3b4e95c00 Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-nomarker-script-text-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-percent-script-text-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-percent-script-text-jupytext-linux.png new file mode 100644 index 000000000..000bf25dd Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/opened-jupytext-new-text-notebook-percent-script-text-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-hydrogen-script-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-hydrogen-script-jupytext-linux.png new file mode 100644 index 000000000..4c6b5eacb Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-hydrogen-script-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-light-script-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-light-script-jupytext-linux.png new file mode 100644 index 000000000..a99d41b88 Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-light-script-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-markdown-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-markdown-jupytext-linux.png new file mode 100644 index 000000000..1de955e18 Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-markdown-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-myst-markdown-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-myst-markdown-jupytext-linux.png new file mode 100644 index 000000000..3156a8b45 Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-myst-markdown-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-nomarker-script-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-nomarker-script-jupytext-linux.png new file mode 100644 index 000000000..9a5d75adc Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-nomarker-script-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-percent-script-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-percent-script-jupytext-linux.png new file mode 100644 index 000000000..6e0c61c4c Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-notebook.spec.ts-snapshots/paired-jupytext-jupytext-pair-notebook-pair-notebook-with-percent-script-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts new file mode 100644 index 000000000..21d51230b --- /dev/null +++ b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts @@ -0,0 +1,27 @@ +import { expect, test } from '@jupyterlab/galata'; + +test('Open the settings editor with a Jupytext query', async ({ page }) => { + await page.evaluate(async () => { + await window.jupyterapp.commands.execute('settingeditor:open', { + query: 'Jupytext', + }); + }); + + expect( + await page.locator('.jp-PluginList .jp-FilterBox input').inputValue() + ).toEqual('Jupytext'); + + await expect(page.locator('.jp-SettingsForm')).toHaveCount(1); + + const pluginList = page.locator('.jp-PluginList'); + + expect(await pluginList.screenshot()).toMatchSnapshot( + 'jupytext-settings-plugin-list.png' + ); + + const settingsPanel = page.locator('.jp-SettingsPanel'); + + expect(await settingsPanel.screenshot()).toMatchSnapshot( + 'jupytext-settings-panel.png' + ); +}); diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts-snapshots/jupytext-settings-panel-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts-snapshots/jupytext-settings-panel-jupytext-linux.png new file mode 100644 index 000000000..6c275d46c Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts-snapshots/jupytext-settings-panel-jupytext-linux.png differ diff --git a/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts-snapshots/jupytext-settings-plugin-list-jupytext-linux.png b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts-snapshots/jupytext-settings-plugin-list-jupytext-linux.png new file mode 100644 index 000000000..f04e45c9d Binary files /dev/null and b/jupyterlab/packages/jupyterlab-jupytext-extension/ui-tests/tests/jupytext-settings.spec.ts-snapshots/jupytext-settings-plugin-list-jupytext-linux.png differ diff --git a/jupyterlab/scripts/install_extension.py b/jupyterlab/scripts/install_extension.py new file mode 100644 index 000000000..3c3133044 --- /dev/null +++ b/jupyterlab/scripts/install_extension.py @@ -0,0 +1,48 @@ +# This script does the "same" job as `jupyter labextension develop --overwrite .` +# +# Seems like we cannot use the upstream script on our repo organization. +# If we want to use the upstream script we need to have a setup.py or pyproject.toml +# in jupyterlab/jupyterlab-jupytext folder with the name of the package. +# +# We are only interested in making a symlink to the +# sys.prefix/share/jupyter/labextensions folder for developement. We should be able +# to do it in simple script +# + +import os + +import jupyterlab_jupytext +from jupyterlab.federated_labextensions import build_labextension, develop_labextension + + +def main(): + """Create symlink in sys.prefix based on name of extension""" + + labexts = jupyterlab_jupytext._jupyter_labextension_paths() + base_path = os.path.join( + os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + "jupyterlab_jupytext", + ) + + for labext in labexts: + src = os.path.join(base_path, labext["src"]) + dest = labext["dest"] + print(f"Installing {src} -> {dest}") + + if not os.path.exists(src): + build_labextension(base_path) + + full_dest = develop_labextension( + src, + overwrite=True, + symlink=True, + user=False, + sys_prefix=True, + labextensions_dir="", + destination=dest, + ) + print(f"Creating symlink at {full_dest}") + + +if __name__ == "__main__": + main() diff --git a/jupyterlab/tsconfig.eslint.json b/jupyterlab/tsconfig.eslint.json index 02079091c..0075cb598 100644 --- a/jupyterlab/tsconfig.eslint.json +++ b/jupyterlab/tsconfig.eslint.json @@ -14,5 +14,6 @@ "types": [], "esModuleInterop": true }, + "extends": "../../tsconfig.eslint.json", "include": ["**/src/*"] } diff --git a/jupyterlab/yarn.lock b/jupyterlab/yarn.lock index 1148728fe..4bd48a121 100644 --- a/jupyterlab/yarn.lock +++ b/jupyterlab/yarn.lock @@ -231,8 +231,8 @@ __metadata: linkType: hard "@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0": - version: 6.9.1 - resolution: "@codemirror/language@npm:6.9.1" + version: 6.9.2 + resolution: "@codemirror/language@npm:6.9.2" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 @@ -240,7 +240,7 @@ __metadata: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 style-mod: ^4.0.0 - checksum: 62265f1042d2edfd3a091c408d9d0071f23889099b2f6ce8275fa910118bd2c45b8c4b29228c7be6e6d5f0e0812a522de902bc75ba8d8b2e62e42ade1692a49a + checksum: eee7b861b5591114cac7502cd532d5b923639740081a4cd7e28696c252af8d759b14686aaf6d5eee7e0969ff647b7aaf03a5eea7235fb6d9858ee19433f1c74d languageName: node linkType: hard @@ -283,13 +283,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.9.6": - version: 6.21.3 - resolution: "@codemirror/view@npm:6.21.3" + version: 6.22.0 + resolution: "@codemirror/view@npm:6.22.0" dependencies: "@codemirror/state": ^6.1.4 style-mod: ^4.1.0 w3c-keyname: ^2.2.4 - checksum: 7fda5a60e04fe1ac3d22ee478d4a90fc307953b8c900752ef5ca33af06c4e7851356e460f14b05034230b3a1677f36379ea01d85a3ea3b3a3e85e871ed62346a + checksum: 2a24674687fbde06898d0a131abe5f86a812d79e111cf8dc94110dac86eed8c20a2094b547c1b3c379fe8edf0c66318d03a7594158e4f6628ee060a03a5d1bab languageName: node linkType: hard @@ -321,15 +321,15 @@ __metadata: linkType: hard "@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": - version: 4.9.1 - resolution: "@eslint-community/regexpp@npm:4.9.1" - checksum: 06fb839e9c756f6375cc545c2f2e05a0a64576bd6370e8e3c07983fd29a3d6e164ef4aa48a361f7d27e6713ab79c83053ff6a2ccb78748bc955e344279c4a3b6 + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.1.2": - version: 2.1.2 - resolution: "@eslint/eslintrc@npm:2.1.2" +"@eslint/eslintrc@npm:^2.1.3": + version: 2.1.3 + resolution: "@eslint/eslintrc@npm:2.1.3" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -340,14 +340,14 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 + checksum: 5c6c3878192fe0ddffa9aff08b4e2f3bcc8f1c10d6449b7295a5f58b662019896deabfc19890455ffd7e60a5bd28d25d0eaefb2f78b2d230aae3879af92b89e5 languageName: node linkType: hard -"@eslint/js@npm:8.51.0": - version: 8.51.0 - resolution: "@eslint/js@npm:8.51.0" - checksum: 0228bf1e1e0414843e56d9ff362a2a72d579c078f93174666f29315690e9e30a8633ad72c923297f7fd7182381b5a476805ff04dac8debe638953eb1ded3ac73 +"@eslint/js@npm:8.53.0": + version: 8.53.0 + resolution: "@eslint/js@npm:8.53.0" + checksum: e0d5cfb0000aaee237c8e6d6d6e366faa60b1ef7f928ce17778373aa44d3b886368f6d5e1f97f913f0f16801aad016db8b8df78418c9d18825c15590328028af languageName: node linkType: hard @@ -365,14 +365,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.11": - version: 0.11.11 - resolution: "@humanwhocodes/config-array@npm:0.11.11" +"@humanwhocodes/config-array@npm:^0.11.13": + version: 0.11.13 + resolution: "@humanwhocodes/config-array@npm:0.11.13" dependencies: - "@humanwhocodes/object-schema": ^1.2.1 + "@humanwhocodes/object-schema": ^2.0.1 debug: ^4.1.1 minimatch: ^3.0.5 - checksum: db84507375ab77b8ffdd24f498a5b49ad6b64391d30dd2ac56885501d03964d29637e05b1ed5aefa09d57ac667e28028bc22d2da872bfcd619652fbdb5f4ca19 + checksum: f8ea57b0d7ed7f2d64cd3944654976829d9da91c04d9c860e18804729a33f7681f78166ef4c761850b8c324d362f7d53f14c5c44907a6b38b32c703ff85e4805 languageName: node linkType: hard @@ -383,10 +383,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^1.2.1": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 +"@humanwhocodes/object-schema@npm:^2.0.1": + version: 2.0.1 + resolution: "@humanwhocodes/object-schema@npm:2.0.1" + checksum: 24929487b1ed48795d2f08346a0116cc5ee4634848bce64161fb947109352c562310fd159fc64dda0e8b853307f5794605191a9547f7341158559ca3c8262a45 languageName: node linkType: hard @@ -493,20 +493,20 @@ __metadata: languageName: node linkType: hard -"@jupyterlab/application@npm:^4.0.0, @jupyterlab/application@npm:^4.0.2": - version: 4.0.7 - resolution: "@jupyterlab/application@npm:4.0.7" +"@jupyterlab/application@npm:^4.0.0, @jupyterlab/application@npm:^4.0.2, @jupyterlab/application@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/application@npm:4.0.8" dependencies: "@fortawesome/fontawesome-free": ^5.12.0 - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/docregistry": ^4.0.7 - "@jupyterlab/rendermime": ^4.0.7 - "@jupyterlab/rendermime-interfaces": ^3.8.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/statedb": ^4.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/docregistry": ^4.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/rendermime-interfaces": ^3.8.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/statedb": ^4.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/application": ^2.2.1 "@lumino/commands": ^2.1.3 @@ -517,23 +517,23 @@ __metadata: "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 - checksum: 4684edfcf7dfe9724e86938cf50a45a3518650dba3535bea9d13e024dcc9cd80a5862d2c1564b6498f6f086253766c0952eded677c93ce56b8b7265d739892c4 + checksum: e6c50720992d50f8d6151752a31bf8dda2a21e912e896bbe9037f72086bddb515836fb9554603df8773313b27f45a39e01bda7e7b75cb2aca70ef15bcae1bc5e languageName: node linkType: hard -"@jupyterlab/apputils@npm:^4.0.0, @jupyterlab/apputils@npm:^4.0.2, @jupyterlab/apputils@npm:^4.1.7": - version: 4.1.7 - resolution: "@jupyterlab/apputils@npm:4.1.7" - dependencies: - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/rendermime-interfaces": ^3.8.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/settingregistry": ^4.0.7 - "@jupyterlab/statedb": ^4.0.7 - "@jupyterlab/statusbar": ^4.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 +"@jupyterlab/apputils@npm:^4.0.0, @jupyterlab/apputils@npm:^4.0.2, @jupyterlab/apputils@npm:^4.1.8": + version: 4.1.8 + resolution: "@jupyterlab/apputils@npm:4.1.8" + dependencies: + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime-interfaces": ^3.8.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/settingregistry": ^4.0.8 + "@jupyterlab/statedb": ^4.0.8 + "@jupyterlab/statusbar": ^4.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/commands": ^2.1.3 "@lumino/coreutils": ^2.1.2 @@ -546,27 +546,27 @@ __metadata: "@types/react": ^18.0.26 react: ^18.2.0 sanitize-html: ~2.7.3 - checksum: d8a3739ea4b74244b0e14e6a9bced973cc2fc8eb645fe25d36da960e3413492c5451332f44975ba601daecbe6b1e80073f36860f65482da16e94ed24f11a5947 + checksum: 1b028893ac0358d9f90585edd5fbb89a4fe251c31789cf6d809fb316b91c958c6ba33884d463dbe78dfdd864b579535e1e1849bcb9b16853002271a71418d31e languageName: node linkType: hard -"@jupyterlab/attachments@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/attachments@npm:4.0.7" +"@jupyterlab/attachments@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/attachments@npm:4.0.8" dependencies: - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/rendermime": ^4.0.7 - "@jupyterlab/rendermime-interfaces": ^3.8.7 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/rendermime-interfaces": ^3.8.8 "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 - checksum: ff118f55b8fbf08d112aef9f1f9867a6310578afacff9953af3c30205d338ed88bc44204112597bd325bc6b2eeb88e5f901187628e869853c9e9b5c2b77e4eb8 + checksum: 17e14257fb28006144bd7824e9f78e5c4c792c9dfa60e67efdd0bb6e6e33109b52e1e10b18d8a76f4d8e5e8d4ab9a22254e92f13d8c8f9ed0803961f5de8ece0 languageName: node linkType: hard "@jupyterlab/builder@npm:^4.0.0": - version: 4.0.7 - resolution: "@jupyterlab/builder@npm:4.0.7" + version: 4.0.8 + resolution: "@jupyterlab/builder@npm:4.0.8" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/application": ^2.2.1 @@ -601,32 +601,32 @@ __metadata: worker-loader: ^3.0.2 bin: build-labextension: lib/build-labextension.js - checksum: 67b034c7843a41f63b314304a224480583d02b4d958fd874b3ea4b7fd9a2ec8df110edaaf0379937a7a1850cb19cf1178fbbadfe535f3dbd9acdc0c3a96b8f8a + checksum: 9a1feeba36ba85ac0f1538f8df1b5a2140e5d1786530b7351880b8fb45b2902e961a48c2625d619c0b5c09b68299d9fea045adf139e439fd0f7f3cce41794662 languageName: node linkType: hard -"@jupyterlab/cells@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/cells@npm:4.0.7" +"@jupyterlab/cells@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/cells@npm:4.0.8" dependencies: "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.9.6 "@jupyter/ydoc": ^1.0.2 - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/attachments": ^4.0.7 - "@jupyterlab/codeeditor": ^4.0.7 - "@jupyterlab/codemirror": ^4.0.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/documentsearch": ^4.0.7 - "@jupyterlab/filebrowser": ^4.0.7 - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/outputarea": ^4.0.7 - "@jupyterlab/rendermime": ^4.0.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/toc": ^6.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/attachments": ^4.0.8 + "@jupyterlab/codeeditor": ^4.0.8 + "@jupyterlab/codemirror": ^4.0.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/documentsearch": ^4.0.8 + "@jupyterlab/filebrowser": ^4.0.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/outputarea": ^4.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/toc": ^6.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/domutils": ^2.0.1 @@ -637,22 +637,22 @@ __metadata: "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.0 react: ^18.2.0 - checksum: 3b986c3fb734031ce998e7a67208d06b0c0892a972db1d8123767bdcc9e14109f7e79be3f116f788bcfc2194e7a5a14d5918671c9021b9de51e82ca7f0421436 + checksum: 42e4464574a603f48df299ccf2d84bf5f90f0aa39b0a9c680c9db5d254b416ee784ec3b5a1475ed72a10e6dcf1075715d66bf3afeee55e365c42656daea3f002 languageName: node linkType: hard -"@jupyterlab/codeeditor@npm:^4.0.0, @jupyterlab/codeeditor@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/codeeditor@npm:4.0.7" +"@jupyterlab/codeeditor@npm:^4.0.0, @jupyterlab/codeeditor@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/codeeditor@npm:4.0.8" dependencies: "@codemirror/state": ^6.2.0 "@jupyter/ydoc": ^1.0.2 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/statusbar": ^4.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/statusbar": ^4.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/dragdrop": ^2.1.3 @@ -660,13 +660,13 @@ __metadata: "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 react: ^18.2.0 - checksum: d6c1c072b77f0afdc4c61ed9392297b43afa5ef0a3279e05631ead870122f9195eb9d5b6182b1ee984aa4fa7aee56051e710d601c550e43af27d43fc3397c333 + checksum: 151be40c60bcedf463d01b9c53466afc4b4747dd341fb4d5c2b9fc8b3c181af2ba391f867e10e78bb948848cdd300139b4b112634dec9f8aac9c36c5a13e1654 languageName: node linkType: hard -"@jupyterlab/codemirror@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/codemirror@npm:4.0.7" +"@jupyterlab/codemirror@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/codemirror@npm:4.0.8" dependencies: "@codemirror/autocomplete": ^6.5.1 "@codemirror/commands": ^6.2.3 @@ -689,11 +689,11 @@ __metadata: "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.9.6 "@jupyter/ydoc": ^1.0.2 - "@jupyterlab/codeeditor": ^4.0.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/documentsearch": ^4.0.7 - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/codeeditor": ^4.0.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/documentsearch": ^4.0.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/translation": ^4.0.8 "@lezer/common": ^1.0.2 "@lezer/generator": ^1.2.2 "@lezer/highlight": ^1.1.4 @@ -702,13 +702,40 @@ __metadata: "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 yjs: ^13.5.40 - checksum: 8b813dc5144a5adbfd535fe4c817ba96a2c123e60999674ea60ac207fa2b7d06d34314b46bf07564b9c6ca3c21077c5ee34279a857c9191b3133a488f0bf1c22 + checksum: 2edd2ac9d695f8107d444379289b4cecf3603c118d748608738abe2a1af9d311d0407c5709ccbe016dd0a16c3a52d7f0132446173678246841c8ddf8ade371c7 + languageName: node + linkType: hard + +"@jupyterlab/console@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/console@npm:4.0.8" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/cells": ^4.0.8 + "@jupyterlab/codeeditor": ^4.0.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 0d8461167377dfecd9d42427c1941fa932877ceae839d6c7043a690e71a675f7e1979c49bb1b1c7124bfe74f3351d5ff35845c6e9585f8e79fa9221f7ad74a54 languageName: node linkType: hard -"@jupyterlab/coreutils@npm:^6.0.2, @jupyterlab/coreutils@npm:^6.0.7": - version: 6.0.7 - resolution: "@jupyterlab/coreutils@npm:6.0.7" +"@jupyterlab/coreutils@npm:^6.0.2, @jupyterlab/coreutils@npm:^6.0.8": + version: 6.0.8 + resolution: "@jupyterlab/coreutils@npm:6.0.8" dependencies: "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 @@ -716,21 +743,58 @@ __metadata: minimist: ~1.2.0 path-browserify: ^1.0.0 url-parse: ~1.5.4 - checksum: 18a14e0bc957bf087c3de3e86c5dc7ee568027906edf5dc820d9c794af6c9dece84d0b396e837786849f9144bb156746e3d4f2e838fd023a42eee94ebeb9014f + checksum: b56e3b95c0ce52745b79549ef5b18a27e620086b87cf997b3a743b59d18dc529e403c812751b7e294a4abc60ac957381301e14327e1a4b9c1afb232f181f3a4d languageName: node linkType: hard -"@jupyterlab/docmanager@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/docmanager@npm:4.0.7" - dependencies: - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/docregistry": ^4.0.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/statusbar": ^4.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 +"@jupyterlab/debugger@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/debugger@npm:4.0.8" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/application": ^4.0.8 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/cells": ^4.0.8 + "@jupyterlab/codeeditor": ^4.0.8 + "@jupyterlab/codemirror": ^4.0.8 + "@jupyterlab/console": ^4.0.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/docregistry": ^4.0.8 + "@jupyterlab/fileeditor": ^4.0.8 + "@jupyterlab/notebook": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/datagrid": ^2.2.0 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + "@vscode/debugprotocol": ^1.51.0 + react: ^18.2.0 + checksum: 54d9f065f22f355e13300ba4578c328f715148faee855a62794c8f2f1662f6ef6e74e8133a524d16b6feede8a765efaad1d3c9dcb2178f238da913601c4e7535 + languageName: node + linkType: hard + +"@jupyterlab/docmanager@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/docmanager@npm:4.0.8" + dependencies: + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/docregistry": ^4.0.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/statusbar": ^4.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 @@ -739,24 +803,24 @@ __metadata: "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 react: ^18.2.0 - checksum: 4ccbcfa431563cb0cdfa12d0f1ffed107816b8bcd420de5b6dc85e6c124ff1f691e72ce421102663880dc340717bfb71bdceb25eb8fc4074e08adb58ae6ba371 + checksum: 70eea965bb9edd6a4042c92d2cb98f8b1b145b6727a354e12e3f5ab84ff2ab7207c5d9433c43c03d01f4377f9dc901359d789d0f47d2c725e56f41c487295550 languageName: node linkType: hard -"@jupyterlab/docregistry@npm:^4.0.2, @jupyterlab/docregistry@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/docregistry@npm:4.0.7" +"@jupyterlab/docregistry@npm:^4.0.0, @jupyterlab/docregistry@npm:^4.0.2, @jupyterlab/docregistry@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/docregistry@npm:4.0.8" dependencies: "@jupyter/ydoc": ^1.0.2 - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/codeeditor": ^4.0.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/rendermime": ^4.0.7 - "@jupyterlab/rendermime-interfaces": ^3.8.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/codeeditor": ^4.0.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/rendermime-interfaces": ^3.8.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 @@ -764,17 +828,17 @@ __metadata: "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 - checksum: 1d420696305dc17b2e96b22bf31af2caf2b16e31529c57b824bf859c71ac5caecb5a0a00d32ebc34ca1af65f720cec2c442d786c0460da60d7f65deb402dd891 + checksum: 280697f97ca146cc711c5dafa1b27eaa89d96bc53fc92ade7d4b78c44c997feb9d2495b392c31e75ed3c836797865e2f3fa6ea8f3207f46a4ab2d26061dc9498 languageName: node linkType: hard -"@jupyterlab/documentsearch@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/documentsearch@npm:4.0.7" +"@jupyterlab/documentsearch@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/documentsearch@npm:4.0.8" dependencies: - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 @@ -782,23 +846,23 @@ __metadata: "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 react: ^18.2.0 - checksum: 96f51844b22a2c8e234c85e32915a9af41a54d5bd21a49de63d37181083089c84d18265c14d7d8d5adeb460771ba044e87caafdb82fd0e805837a23d56aa2fe3 + checksum: 5ee4c4b910af158b4ca488c617b12b2a84d391cfb6be94a38136a1eb80f639ec4b446fd862748a76732bc3eccd290750c0e9f6b6211d3c15d0776073173a5343 languageName: node linkType: hard -"@jupyterlab/filebrowser@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/filebrowser@npm:4.0.7" - dependencies: - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/docmanager": ^4.0.7 - "@jupyterlab/docregistry": ^4.0.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/statedb": ^4.0.7 - "@jupyterlab/statusbar": ^4.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 +"@jupyterlab/filebrowser@npm:^4.0.0, @jupyterlab/filebrowser@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/filebrowser@npm:4.0.8" + dependencies: + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/docmanager": ^4.0.8 + "@jupyterlab/docregistry": ^4.0.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/statedb": ^4.0.8 + "@jupyterlab/statusbar": ^4.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 @@ -810,20 +874,90 @@ __metadata: "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.0 react: ^18.2.0 - checksum: 586b8a07fbe0a9bb0b0cd13a9d6fb083e797831a41fc5273d70124bb2daeeeb641e6b4584fc752a4799a5961bb14acc1379fd09847ef7f38b2908516b9f254e3 + checksum: 907dade3b9ab6bde667cdf2acc76c0fb2d631c06d794115a456cb6b1995a3b89b2a9f5c53a75824b337833cd05967c55fd919ca1311f24279aa5f067f948378a languageName: node linkType: hard -"@jupyterlab/lsp@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/lsp@npm:4.0.7" - dependencies: - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/codeeditor": ^4.0.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/docregistry": ^4.0.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/translation": ^4.0.7 +"@jupyterlab/fileeditor@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/fileeditor@npm:4.0.8" + dependencies: + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/codeeditor": ^4.0.8 + "@jupyterlab/codemirror": ^4.0.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/docregistry": ^4.0.8 + "@jupyterlab/documentsearch": ^4.0.8 + "@jupyterlab/lsp": ^4.0.8 + "@jupyterlab/statusbar": ^4.0.8 + "@jupyterlab/toc": ^6.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + regexp-match-indices: ^1.0.2 + checksum: 0e31402e889f5519a380ab62f46efaff6787be03736daec46d4608f127a9335304963e2a20f37a3269a4aec7d358eee70a01fe8446968f0df96711b9e9cb9123 + languageName: node + linkType: hard + +"@jupyterlab/galata@npm:^5.0.0": + version: 5.0.8 + resolution: "@jupyterlab/galata@npm:5.0.8" + dependencies: + "@jupyterlab/application": ^4.0.8 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/debugger": ^4.0.8 + "@jupyterlab/docmanager": ^4.0.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/notebook": ^4.0.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/settingregistry": ^4.0.8 + "@lumino/coreutils": ^2.1.2 + "@playwright/test": ^1.32.2 + "@stdlib/stats": ~0.0.13 + fs-extra: ^10.1.0 + json5: ^2.2.3 + path: ~0.12.7 + systeminformation: ^5.8.6 + vega: ^5.20.0 + vega-lite: ^5.6.1 + vega-statistics: ^1.7.9 + checksum: 7874d8e54abb3d449e0a3962726101738e40a760ee047f20485567113bb2fc76d43f9d9e86c84a7b7a72dd8e0ae32c3f62a8ad025336b95f42bc3c89a547a7b5 + languageName: node + linkType: hard + +"@jupyterlab/launcher@npm:^4.0.0": + version: 4.0.8 + resolution: "@jupyterlab/launcher@npm:4.0.8" + dependencies: + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 90d64e9a7ff8ceb936a1dc04cb5639bd1f792bb8d1c587a19cb36bfb0d3ca37ea6ce4e30d65eb0a0800466634be33daae0c2af81311afd19ad5c5cffec8a4b2b + languageName: node + linkType: hard + +"@jupyterlab/lsp@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/lsp@npm:4.0.8" + dependencies: + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/codeeditor": ^4.0.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/docregistry": ^4.0.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/translation": ^4.0.8 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 @@ -831,56 +965,56 @@ __metadata: vscode-jsonrpc: ^6.0.0 vscode-languageserver-protocol: ^3.17.0 vscode-ws-jsonrpc: ~1.0.2 - checksum: a038fb51648b082652850e8a7190e0b9726be3be3b478258954a7a119df78df1b97182c53a4c8e6adb3ca22dbeaf2f5a40935b916a7dccb99952ebe44e112d9c + checksum: baf2d42800a617a9d06d8cbb9c755e0cc40994c25c7c5d31bca1b7ac4fc4ad67d77fadb53de020e52d499a46e41dea1d84abb388b9bc20d468a5e888c687f301 languageName: node linkType: hard "@jupyterlab/mainmenu@npm:^4.0.2": - version: 4.0.7 - resolution: "@jupyterlab/mainmenu@npm:4.0.7" + version: 4.0.8 + resolution: "@jupyterlab/mainmenu@npm:4.0.8" dependencies: - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/commands": ^2.1.3 "@lumino/coreutils": ^2.1.2 "@lumino/widgets": ^2.3.0 - checksum: 7ed86d4c2a02d38b7ef5a1544528729e35b92a5393db509564122922736aeb7f0332688f2643e519324dd9a3314762ba6afc453a50ca64bc03ff6b9fe585a668 + checksum: 761e625450d9e56ca3f23ebbe5e2d2af7c12d2e12cb2dd9823946b8b55596fa30393cb6ce3e00d2fcb991d6757535195387112cc97e382a2b94faa028a581d80 languageName: node linkType: hard -"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.0, @jupyterlab/nbformat@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/nbformat@npm:4.0.7" +"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.0, @jupyterlab/nbformat@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/nbformat@npm:4.0.8" dependencies: "@lumino/coreutils": ^2.1.2 - checksum: 32a14a6a3e6d068fa34aec385090531100170480869681156dfb510ea9154141277e678031a0df770af8ae5a0f06dc7c00570089c9187485552e1aeba5130ca8 + checksum: 2d8255ac7c7c20dbfa8497ce4d8d2f5840568adefb2feaec8eb8ddbb4892f50706ce60e8c4719113485c5523f720802f7e4e7b63ed43fac90f870ff1134bed7a languageName: node linkType: hard -"@jupyterlab/notebook@npm:^4.0.0, @jupyterlab/notebook@npm:^4.0.2": - version: 4.0.7 - resolution: "@jupyterlab/notebook@npm:4.0.7" +"@jupyterlab/notebook@npm:^4.0.0, @jupyterlab/notebook@npm:^4.0.2, @jupyterlab/notebook@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/notebook@npm:4.0.8" dependencies: "@jupyter/ydoc": ^1.0.2 - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/cells": ^4.0.7 - "@jupyterlab/codeeditor": ^4.0.7 - "@jupyterlab/codemirror": ^4.0.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/docregistry": ^4.0.7 - "@jupyterlab/documentsearch": ^4.0.7 - "@jupyterlab/lsp": ^4.0.7 - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/rendermime": ^4.0.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/settingregistry": ^4.0.7 - "@jupyterlab/statusbar": ^4.0.7 - "@jupyterlab/toc": ^6.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/cells": ^4.0.8 + "@jupyterlab/codeeditor": ^4.0.8 + "@jupyterlab/codemirror": ^4.0.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/docregistry": ^4.0.8 + "@jupyterlab/documentsearch": ^4.0.8 + "@jupyterlab/lsp": ^4.0.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/settingregistry": ^4.0.8 + "@jupyterlab/statusbar": ^4.0.8 + "@jupyterlab/toc": ^6.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/domutils": ^2.0.1 @@ -891,34 +1025,34 @@ __metadata: "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.0 react: ^18.2.0 - checksum: 75fe89a1c59d47cb861a66b1c36d5e22593e93b8e0f8b3195e43e79e67e87542ccc00f245f3cdbd55617f889f1f7baa0a868d6be7d8fcfdc6ccab53e93f69bf4 + checksum: 64ea11e1923fcae46d263c732cfa6a69a51099bdd637f40599da5359fb884600179a3c5b6f3c176c6ffa725f425b33f435be6391f8d087b443e5fc6d6d11ced2 languageName: node linkType: hard -"@jupyterlab/observables@npm:^5.0.7": - version: 5.0.7 - resolution: "@jupyterlab/observables@npm:5.0.7" +"@jupyterlab/observables@npm:^5.0.8": + version: 5.0.8 + resolution: "@jupyterlab/observables@npm:5.0.8" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 - checksum: 459ec3ec77a12534cd16864892d8d3af3ead32a56956daeb89ab68e16c53651c8f20021e088e5a601b214eed46398bbbaea8bc3dc23f23b2700660558fa7c317 + checksum: 833c6af7f66a338d53e4ebfae2c10c57a55b8a1710730eed89e7a0103a4dd27b7b5634d0e7cf9c7db47d891fd4c8e72235de9816833482ef68356846200613be languageName: node linkType: hard -"@jupyterlab/outputarea@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/outputarea@npm:4.0.7" - dependencies: - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/rendermime": ^4.0.7 - "@jupyterlab/rendermime-interfaces": ^3.8.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/translation": ^4.0.7 +"@jupyterlab/outputarea@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/outputarea@npm:4.0.8" + dependencies: + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/rendermime-interfaces": ^3.8.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/translation": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 @@ -926,65 +1060,65 @@ __metadata: "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 - checksum: ea5ff9052408a117f5a74ce5c3938cda53f88d3dd227bea330cf042b69094c17d33d0b64d556f31b763bfe352bde29dc977cdaab69337159f0c9d9301e50a632 + checksum: 4e97a367d6d06b05838056ef6da48891484fe84e5c06a08f0928f7359fa8362f48903434d033e8ddabdc193ef4b61859855fecbebda3949703583275fd099339 languageName: node linkType: hard -"@jupyterlab/rendermime-interfaces@npm:^3.8.7": - version: 3.8.7 - resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.7" +"@jupyterlab/rendermime-interfaces@npm:^3.8.8": + version: 3.8.8 + resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.8" dependencies: "@lumino/coreutils": ^1.11.0 || ^2.1.2 "@lumino/widgets": ^1.37.2 || ^2.3.0 - checksum: 8095fc99f89e49ef6793e37d7864511cc182fd2260219d3fe94dc974ac34411d4daf898f237279bd5e097aea19cca04196356bf31bd774e94c77b54894baf71b + checksum: b356cc18acedd7eebbf9e6f03329ad58f0aadb676ef7ef6b64dec610857a53593662df54752bb58780d34f39938ec35c6940918513e3a3cef7c5893bd0909684 languageName: node linkType: hard -"@jupyterlab/rendermime@npm:^4.0.0, @jupyterlab/rendermime@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/rendermime@npm:4.0.7" - dependencies: - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/rendermime-interfaces": ^3.8.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/translation": ^4.0.7 +"@jupyterlab/rendermime@npm:^4.0.0, @jupyterlab/rendermime@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/rendermime@npm:4.0.8" + dependencies: + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime-interfaces": ^3.8.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/translation": ^4.0.8 "@lumino/coreutils": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 lodash.escape: ^4.0.1 - checksum: 8e7bc7dc8d569fa8748783d0d23b716deb64af530d2f6861f6a08fe66ace5ff0d75e3cc67eb4ebb50b2089574917fe0b65da0dcf5368c3539fdb78f595560885 + checksum: c1f9ebffc746fdc13c1b14a148fd2ae10132b5ca4e1eab27d18ac5bf3d3ae70cf2850b06f6c05a799f2c769792d81dab1447885d0cda7206c7cf63af10bbe4f2 languageName: node linkType: hard -"@jupyterlab/services@npm:^7.0.7": - version: 7.0.7 - resolution: "@jupyterlab/services@npm:7.0.7" +"@jupyterlab/services@npm:^7.0.8": + version: 7.0.8 + resolution: "@jupyterlab/services@npm:7.0.8" dependencies: "@jupyter/ydoc": ^1.0.2 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/settingregistry": ^4.0.7 - "@jupyterlab/statedb": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/settingregistry": ^4.0.8 + "@jupyterlab/statedb": ^4.0.8 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/polling": ^2.1.2 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 ws: ^8.11.0 - checksum: 203f9e9eeab55eac9251c43d14ebaad881e8152a1337156ed7f2abbada54177237128c108f91a49f45df00226df8ba6a374d02afbd3bbd80ebb795cb5bc62e23 + checksum: b0112854d3014eff9d9855a6840d1efd0d866d4c011e7a9c4c1c5fba404dd13107b62de6ce845902d12cc6404aafdfee95127a2af43560ade53a00fc7b73378a languageName: node linkType: hard -"@jupyterlab/settingregistry@npm:^4.0.0, @jupyterlab/settingregistry@npm:^4.0.2, @jupyterlab/settingregistry@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/settingregistry@npm:4.0.7" +"@jupyterlab/settingregistry@npm:^4.0.0, @jupyterlab/settingregistry@npm:^4.0.2, @jupyterlab/settingregistry@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/settingregistry@npm:4.0.8" dependencies: - "@jupyterlab/nbformat": ^4.0.7 - "@jupyterlab/statedb": ^4.0.7 + "@jupyterlab/nbformat": ^4.0.8 + "@jupyterlab/statedb": ^4.0.8 "@lumino/commands": ^2.1.3 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 @@ -994,28 +1128,28 @@ __metadata: json5: ^2.2.3 peerDependencies: react: ">=16" - checksum: f13dd888c42ccbcb1764037e94ea6b9ee6aa82a232cbb0d8b506212b9e9d5d58965215768110f83a310585482d71dfb649a7c2bbb187553d39dd1292b5919dbe + checksum: e9661539357edae60e4b300dff68b369e95e96acb343aeb25e23bdbcd6964c59dd40118ce3a856afaf969833958f3872c480e75cc488a5e882546cb88587c461 languageName: node linkType: hard -"@jupyterlab/statedb@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/statedb@npm:4.0.7" +"@jupyterlab/statedb@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/statedb@npm:4.0.8" dependencies: "@lumino/commands": ^2.1.3 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 - checksum: 4f4217fa1fceb40be8837cb450b1e66d4f6758531603c82ac277412ec43e3b94a5207bdeb74339307509a1b059ae6436d653beaff2fadfbc8136434ff0967190 + checksum: bfd016e91158daf47e07e760126c0c2c3f6d01ecc8e9cad3e17241e5873decbc5fdfce82bf039fa83633b8760245af8003008f38272dafba56b73ac24768a99f languageName: node linkType: hard -"@jupyterlab/statusbar@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/statusbar@npm:4.0.7" +"@jupyterlab/statusbar@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/statusbar@npm:4.0.8" dependencies: - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 @@ -1023,52 +1157,52 @@ __metadata: "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 react: ^18.2.0 - checksum: 7a2f75215789722a7b9a63548e91a1b179e8c315513d1b8741b508a58937569d723f2207bf542400674767246ad871432a09d1e87779151e43fa3749aa1ade06 + checksum: a07345a173e1c4500e5ce9aca6c8d619e5fecd928de0f6e88fd29241b39c09b85b26722279cc8119031d3015f2b32a0d3b9d85fd3cf9370c7605ebcd37d0d31a languageName: node linkType: hard -"@jupyterlab/toc@npm:^6.0.7": - version: 6.0.7 - resolution: "@jupyterlab/toc@npm:6.0.7" +"@jupyterlab/toc@npm:^6.0.8": + version: 6.0.8 + resolution: "@jupyterlab/toc@npm:6.0.8" dependencies: - "@jupyterlab/apputils": ^4.1.7 - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/docregistry": ^4.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/rendermime": ^4.0.7 - "@jupyterlab/translation": ^4.0.7 - "@jupyterlab/ui-components": ^4.0.7 + "@jupyterlab/apputils": ^4.1.8 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/docregistry": ^4.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime": ^4.0.8 + "@jupyterlab/translation": ^4.0.8 + "@jupyterlab/ui-components": ^4.0.8 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.0 react: ^18.2.0 - checksum: 6d0c17f79f8d077074a20d78f81fdda010f43edd5ffa423837c90dc9edd6810f7b7445c008ff7f0b04f917e6d37d76c7817bd1b2cedda48961c3e8c0553bbc16 + checksum: 5d4373c5e0b3ea302275cdf117e17a201a6ab8337288cbdb7e6048b87de2ed8e293e3dd203fb23f7d25db080e06e8271559b1d5aa5e33202130cc95d0972b95f languageName: node linkType: hard -"@jupyterlab/translation@npm:^4.0.0, @jupyterlab/translation@npm:^4.0.2, @jupyterlab/translation@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/translation@npm:4.0.7" +"@jupyterlab/translation@npm:^4.0.0, @jupyterlab/translation@npm:^4.0.2, @jupyterlab/translation@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/translation@npm:4.0.8" dependencies: - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/rendermime-interfaces": ^3.8.7 - "@jupyterlab/services": ^7.0.7 - "@jupyterlab/statedb": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/rendermime-interfaces": ^3.8.8 + "@jupyterlab/services": ^7.0.8 + "@jupyterlab/statedb": ^4.0.8 "@lumino/coreutils": ^2.1.2 - checksum: 15ad212d9447049f5d77d24681018efd52e61b861e73cdba4b09f4530801bdfa317c0eadde0b71016a9f45b68fbf91f723f9a63de9cbbe568c88923a9676ffab + checksum: 998d42d85ccd779237ac69abfaf2e341d865374ed5a1a4d234470337f498636511eec0562c741ad44a6a75fae930a510a0a76e176f72665499be2b7edb0dc5f8 languageName: node linkType: hard -"@jupyterlab/ui-components@npm:^4.0.0, @jupyterlab/ui-components@npm:^4.0.2, @jupyterlab/ui-components@npm:^4.0.7": - version: 4.0.7 - resolution: "@jupyterlab/ui-components@npm:4.0.7" +"@jupyterlab/ui-components@npm:^4.0.0, @jupyterlab/ui-components@npm:^4.0.2, @jupyterlab/ui-components@npm:^4.0.8": + version: 4.0.8 + resolution: "@jupyterlab/ui-components@npm:4.0.8" dependencies: - "@jupyterlab/coreutils": ^6.0.7 - "@jupyterlab/observables": ^5.0.7 - "@jupyterlab/rendermime-interfaces": ^3.8.7 - "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.8 + "@jupyterlab/observables": ^5.0.8 + "@jupyterlab/rendermime-interfaces": ^3.8.8 + "@jupyterlab/translation": ^4.0.8 "@lumino/algorithm": ^2.0.1 "@lumino/commands": ^2.1.3 "@lumino/coreutils": ^2.1.2 @@ -1086,7 +1220,7 @@ __metadata: typestyle: ^2.0.4 peerDependencies: react: ^18.2.0 - checksum: 92e722b8b4fe96a1df6644de8f955fdf48f2bf568a5aaf5f450f721659afc0ecdd9c89f833d73cbad8684849caec4316d4c6b6b0575e7da5a6c3058f5e99d03e + checksum: 7bf11f5ee3c1f88656175c0d3b290be0670d7787076a1eba944875e4780bc2b34c0b9a3af038806ff925620b3056cee36daff08f3ff91acc6c46fd1438bf004d languageName: node linkType: hard @@ -1262,12 +1396,12 @@ __metadata: linkType: hard "@lezer/javascript@npm:^1.0.0": - version: 1.4.8 - resolution: "@lezer/javascript@npm:1.4.8" + version: 1.4.9 + resolution: "@lezer/javascript@npm:1.4.9" dependencies: "@lezer/highlight": ^1.1.3 "@lezer/lr": ^1.3.0 - checksum: d0c1de5dd756c0a64b440984273cf5a9ef0d227d6b059d2db96c62fde869e34427b46389d56401d067c82222f11373e2d20f9280e4c403bf681ec6a35ae16126 + checksum: adac0048e4ab33dc48db42014f02d53a2eab81d12c990b23f237a3e83b125bda271607442aaa50dc0ac870a803e678135111366235f7c29a5052a288c1003960 languageName: node linkType: hard @@ -1282,11 +1416,11 @@ __metadata: linkType: hard "@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0": - version: 1.3.13 - resolution: "@lezer/lr@npm:1.3.13" + version: 1.3.14 + resolution: "@lezer/lr@npm:1.3.14" dependencies: "@lezer/common": ^1.0.0 - checksum: aad0cb8908796a6b49116842fd490093aa0de54b48150a60a4f418815c014f7a1b4355615832e305caea5c0ba8c5ab577f82aebcd0ea04586b8199284ef0fec8 + checksum: 07be41edcb6c332a3567436d2c626131544181c4d680811baf23f6157db3dce4ebfef325cbd0b88dc8b128b83fbe6363c5dcf3e0a4ff369ddfae05d9f207daee languageName: node linkType: hard @@ -1311,12 +1445,12 @@ __metadata: linkType: hard "@lezer/python@npm:^1.1.4": - version: 1.1.8 - resolution: "@lezer/python@npm:1.1.8" + version: 1.1.9 + resolution: "@lezer/python@npm:1.1.9" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 - checksum: e4a4e0b0fd871acff25111d4f767944b5015479776504b85c4431859c8a2859fdfa6362f204f3027cf9858c7ea907fd57244852a18b67da9eba3b2fe38d31b03 + checksum: cc7e712665f0b7990fd00ba798c2e377f8393d0034a85da33b370e256322d92f668f51b70aa91585ed165718bad60fba6e86203f877d537819874be2549ec31f languageName: node linkType: hard @@ -1331,12 +1465,12 @@ __metadata: linkType: hard "@lezer/xml@npm:^1.0.0": - version: 1.0.2 - resolution: "@lezer/xml@npm:1.0.2" + version: 1.0.3 + resolution: "@lezer/xml@npm:1.0.3" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 - checksum: e834bcc5c0dee3eecb5362b3f10187e80908b6a293ebacf5750547a64b57ec710a068497334f109ecf4e5ea05e09e7e9c00e48ebbd30050673ea67b0929e5398 + checksum: a4758859abcab3bc3f8680f79f7fb7dbbb6842c7d552888f95cc85a845450342a18731fbf49cbaec5f39970b9e5b96a66c8381eda036d3ebf7c952da5ddd7666 languageName: node linkType: hard @@ -1348,13 +1482,13 @@ __metadata: linkType: hard "@lumino/application@npm:^2.2.1": - version: 2.2.1 - resolution: "@lumino/application@npm:2.2.1" + version: 2.3.0 + resolution: "@lumino/application@npm:2.3.0" dependencies: - "@lumino/commands": ^2.1.3 + "@lumino/commands": ^2.2.0 "@lumino/coreutils": ^2.1.2 - "@lumino/widgets": ^2.3.0 - checksum: a33e661703728440bc7d2ddb4674261f4de0d20eb8c9846646cbd6debac03b5c65e78d739a500903550fd83b8f47b47fa82ec178c97bc9967ca3ac4014075cde + "@lumino/widgets": ^2.3.1 + checksum: 9d1eb5bc972ed158bf219604a53bbac1262059bc5b0123d3e041974486b9cbb8288abeeec916f3b62f62d7c32e716cccf8b73e4832ae927e4f9dd4e4b0cd37ed languageName: node linkType: hard @@ -1367,9 +1501,9 @@ __metadata: languageName: node linkType: hard -"@lumino/commands@npm:^2.0.1, @lumino/commands@npm:^2.1.3": - version: 2.1.3 - resolution: "@lumino/commands@npm:2.1.3" +"@lumino/commands@npm:^2.0.1, @lumino/commands@npm:^2.1.3, @lumino/commands@npm:^2.2.0": + version: 2.2.0 + resolution: "@lumino/commands@npm:2.2.0" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 @@ -1378,7 +1512,7 @@ __metadata: "@lumino/keyboard": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 - checksum: e4e3ee279f2a5e8d68e4ce142c880333f5542f90c684972402356936ecb5cf5e07163800b59e7cb8c911cbdb4e5089edcc5dd2990bc8db10c87517268de1fc5d + checksum: 093e9715491e5cef24bc80665d64841417b400f2fa595f9b60832a3b6340c405c94a6aa276911944a2c46d79a6229f3cc087b73f50852bba25ece805abd0fae9 languageName: node linkType: hard @@ -1389,6 +1523,23 @@ __metadata: languageName: node linkType: hard +"@lumino/datagrid@npm:^2.2.0": + version: 2.3.0 + resolution: "@lumino/datagrid@npm:2.3.0" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.4 + "@lumino/keyboard": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.1 + checksum: 906ecd8d02a4ccbd6d09384e181f809ef4c165ca7bbc2388b43276f28d0a7d2949093f8b1782f8e11c988640ffaaeca9fe889722a51ee424cad3314674658695 + languageName: node + linkType: hard + "@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^2.0.0, @lumino/disposable@npm:^2.1.2": version: 2.1.2 resolution: "@lumino/disposable@npm:2.1.2" @@ -1405,13 +1556,13 @@ __metadata: languageName: node linkType: hard -"@lumino/dragdrop@npm:^2.1.3": - version: 2.1.3 - resolution: "@lumino/dragdrop@npm:2.1.3" +"@lumino/dragdrop@npm:^2.1.3, @lumino/dragdrop@npm:^2.1.4": + version: 2.1.4 + resolution: "@lumino/dragdrop@npm:2.1.4" dependencies: "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 - checksum: d5f7eb4cc9f9a084cb9af10f02d6741b25d683350878ecbc324e24ba9d4b5246451a410e2ca5fff227aab1c191d1e73a2faf431f93e13111d67a4e426e126258 + checksum: 43d82484b13b38b612e7dfb424a840ed6a38d0db778af10655c4ba235c67b5b12db1683929b35a36ab2845f77466066dfd1ee25c1c273e8e175677eba9dc560d languageName: node linkType: hard @@ -1469,22 +1620,22 @@ __metadata: languageName: node linkType: hard -"@lumino/widgets@npm:^1.37.2 || ^2.3.0, @lumino/widgets@npm:^2.0.1, @lumino/widgets@npm:^2.3.0": - version: 2.3.0 - resolution: "@lumino/widgets@npm:2.3.0" +"@lumino/widgets@npm:^1.37.2 || ^2.3.0, @lumino/widgets@npm:^2.0.1, @lumino/widgets@npm:^2.3.0, @lumino/widgets@npm:^2.3.1": + version: 2.3.1 + resolution: "@lumino/widgets@npm:2.3.1" dependencies: "@lumino/algorithm": ^2.0.1 - "@lumino/commands": ^2.1.3 + "@lumino/commands": ^2.2.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/domutils": ^2.0.1 - "@lumino/dragdrop": ^2.1.3 + "@lumino/dragdrop": ^2.1.4 "@lumino/keyboard": ^2.0.1 "@lumino/messaging": ^2.0.1 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 - checksum: a8559bd3574b7fc16e7679e05994c515b0d3e78dada35786d161f67c639941d134e92ce31d95c2e4ac06709cdf83b0e7fb4b6414a3f7779579222a2fb525d025 + checksum: ba7b8f8839c1cd2a41dbda13281094eb6981a270cccf4f25a0cf83686dcc526a2d8044a20204317630bb7dd4a04d65361408c7623a921549c781afca84b91c67 languageName: node linkType: hard @@ -1515,6 +1666,19 @@ __metadata: languageName: node linkType: hard +"@npmcli/agent@npm:^2.0.0": + version: 2.2.0 + resolution: "@npmcli/agent@npm:2.2.0" + dependencies: + agent-base: ^7.1.0 + http-proxy-agent: ^7.0.0 + https-proxy-agent: ^7.0.1 + lru-cache: ^10.0.1 + socks-proxy-agent: ^8.0.1 + checksum: 3b25312edbdfaa4089af28e2d423b6f19838b945e47765b0c8174c1395c79d43c3ad6d23cb364b43f59fd3acb02c93e3b493f72ddbe3dfea04c86843a7311fc4 + languageName: node + linkType: hard + "@npmcli/arborist@npm:6.2.3": version: 6.2.3 resolution: "@npmcli/arborist@npm:6.2.3" @@ -2011,9 +2175,20 @@ __metadata: languageName: node linkType: hard +"@playwright/test@npm:^1.32.0, @playwright/test@npm:^1.32.2": + version: 1.39.0 + resolution: "@playwright/test@npm:1.39.0" + dependencies: + playwright: 1.39.0 + bin: + playwright: cli.js + checksum: e93e58fc1af4239f239b890374f066c9a758e2492d25e2c1a532f3f00782ab8e7706956a07540fd14882c74e75f5de36273621adce9b79afb8e36e6c15f1d539 + languageName: node + linkType: hard + "@rjsf/core@npm:^5.1.0": - version: 5.13.2 - resolution: "@rjsf/core@npm:5.13.2" + version: 5.13.4 + resolution: "@rjsf/core@npm:5.13.4" dependencies: lodash: ^4.17.21 lodash-es: ^4.17.21 @@ -2023,13 +2198,13 @@ __metadata: peerDependencies: "@rjsf/utils": ^5.12.x react: ^16.14.0 || >=17 - checksum: e977c33bc74075fe2035a22d242bd1a8433468834e3e45fe9b8edaf9e14e14793c43936917805f105960b3d71385fc6616ce502b5273fd6ee1c4539aa3c4e69c + checksum: a263eca0064a62815a1e6a0492072c70834415a35dd67dd24a17f5ca77866c5878b57a1867b216a9a11e56f115b18822b4e20423dec984e22d0d7a8eed52eb22 languageName: node linkType: hard "@rjsf/utils@npm:^5.1.0": - version: 5.13.2 - resolution: "@rjsf/utils@npm:5.13.2" + version: 5.13.4 + resolution: "@rjsf/utils@npm:5.13.4" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -2038,7 +2213,7 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: 06834669205fa0429355f04fc551986ca6899c7b656feb2f2f0477c02e6da625bf198bd292b06e703e2c029436d899a2c802fe28d1bfe5017b2a2d016a361180 + checksum: 9c55dd102a850cded70edc9de1a68b1d0b181d04abe59cbfd9b1cd42500dae6a271ff4e991925843447f881a579790ba28bc578a1373133fd164cad40b8f826e languageName: node linkType: hard @@ -2086,6 +2261,410 @@ __metadata: languageName: node linkType: hard +"@stdlib/array@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/array@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 0d95690461f0c4560eabef0796d1170274415cd03de80333c6d39814d0484a6873ef4be04a64941ebf3a600747e84c3a4f23b21c7020e53842c07985331b39f1 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/assert@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/assert@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: d4dcbeabbfb86ba56cdd972ff785f43e7d25018b2b1800cab8b0deb9e5c54c795d6ead3d142f4dd13c351f636deba4dc1857c85147d6b059fdc78eb2c9510b99 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/bigint@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/bigint@npm:0.0.11" + dependencies: + "@stdlib/utils": ^0.0.x + checksum: 7bf825d116e4b010e214209af239706ac1ef923eecb5c8b0af9229c9975450081355e441ecc7b4765d81a9e653141868e0492b8061d1e65724fa42fb8283aabd + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/blas@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/blas@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 67ea00a968f7a9c710b37f718b7f756e2830e479a1a1ee44cbf6ec3cc27dd8863078928867707d9d1624007e81de89d040f2326d10f435e2cce913cab121975e + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/buffer@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/buffer@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 93df02e3bf548e940ff9cef65121566e7bf93b554f0614d62336c9dbccfc07c9f1b1c4e9a7aebbe4819ef16a6d2a33a7010c2fdf908fface8298a3109c3c4ef0 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/cli@npm:^0.0.x": + version: 0.0.10 + resolution: "@stdlib/cli@npm:0.0.10" + dependencies: + "@stdlib/utils": ^0.0.x + minimist: ^1.2.0 + checksum: bbece8d3dbff2835518582a7726c6c4c22743dc408d2303d9e35a3b72151d5d0a8e78d61bc896663d4c3fb702e966abea7a1bd621ed943723a359f57053f121f + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/complex@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/complex@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 8eda35027495417f1b0dd9bbbc2d4983f50ad3cf9e2276ffe0945ccdbe78f0fc66b9fc36ab71926d2a125c8fb7467c8970a222b230b42ff4bb8042c53314ca09 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/constants@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/constants@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: fc19d055a4e71ae84b6c92e4a3a88371d50693da8f0a813df4063dc549374d19b9cf23f4fdae2fb7b2013e13929f713c3e1b9e4054767e741b75561ed43d15c3 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/fs@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/fs@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + checksum: 33ac5ee4844d4599fe3a8a8402f1a3e2cafee31a5c9cf5b85df530a61a2b54ef17dc30a67be98dacdc2958219413edd0e4cdc3c28266f4bc30277ee024f6a49e + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/math@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/math@npm:0.0.11" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/strided": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + checksum: 6c4c9dda36fbce50553e1437354c5286aa782c42399534dbed8e696ddeb1b91ef6cff5fe5962f1c9e1eb2ef63c63d9bd58f7ca4b87d59018aaac20099c3fb79a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/ndarray@npm:^0.0.x": + version: 0.0.13 + resolution: "@stdlib/ndarray@npm:0.0.13" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/bigint": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/complex": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/number": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 842a94afce5fc74bf8a964b75a302ddb8713eadbc79616e6799f1310c8bce860ed9e9877adc4a39338d9136b8798947ee21cf03368d46408308a313c8075d49a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/nlp@npm:^0.0.x": + version: 0.0.11 + resolution: "@stdlib/nlp@npm:0.0.11" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 398fe2853fb95404bb6598e3e199ca3e0435b94447d50e14e2e30582cadfb91f43464f23d80a0e1da4d64567a4a108a7299d7440509f1ab26b02aea7bb16e9a8 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/number@npm:^0.0.x": + version: 0.0.10 + resolution: "@stdlib/number@npm:0.0.10" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 326190956c787cbf9321c332beedab5ba4b3fa97d52a82aa708a0349b4678c0df7a351424f00a606f4eaca4fb4ba4cc191580c99d7c64ee0f08d37baa3de14f2 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/os@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/os@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 37156b0c723da70d7740d92d08fc592eae803461c1d546cff6ac044765d6e40722fdad342219277e747c39344b513096ac1d0aa1e733cf3079bd8a9a8578612a + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/process@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/process@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 6d5c3d943f9914d1ae39bd36ad7436f783cf64baa2bff67a808035c99258676ae3f704c328a78d62754951cf85fe99d8e9af5f4fa7d5f8cba347bca72767e357 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/random@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/random@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/stats": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + readable-stream: ^2.1.4 + checksum: 67fcb5553274f8596ceae91153e96ae297bacfd55279821cb09f19f2844845aaf892802e4a5962965323dbfded0c7df8a89a6ce77d60d5c8a5899d483055a964 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/regexp@npm:^0.0.x": + version: 0.0.13 + resolution: "@stdlib/regexp@npm:0.0.13" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: dd52adb096ff9a02d1c4818be2889ae01bc04a0cdbc0d52473685e0a7a4eaa13e1be603b964f140f7488d11450b644dc5f8c97029d77db1ed4a563554245ff1c + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/stats@npm:^0.0.x, @stdlib/stats@npm:~0.0.13": + version: 0.0.13 + resolution: "@stdlib/stats@npm:0.0.13" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 5ca12b2e123543f56a59aca828e14afaf525ad4aa40467bee7037a9178e21e55d4ce8ba3de9387cc9a0efe3e0d035d6c58705b12f634f77a2b3f87d334dfb076 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/streams@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/streams@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + debug: ^2.6.9 + readable-stream: ^2.1.4 + checksum: 231b4607d082ea81d9dadbeab08002ec398a29c7eb5d611d8a4183f9db6964428e2f8a9e0f8edd085ca12b5d58258576987a575e9d8f6fcabcb5a62c6b8efe88 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/strided@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/strided@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/ndarray": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 55ccc8543596894a2e3ad734b394700c69697b499a54b3bfbcf80cddd8d91509792c23931f5cebf7c89269676ac3f44352582e4f42e2c2c2898363cc3a76403d + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/string@npm:^0.0.x": + version: 0.0.14 + resolution: "@stdlib/string@npm:0.0.14" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/nlp": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/types": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: aaaaaddf381cccc67f15dbab76f43ce81cb71a4f5595bfa06ef915b6747458deca3c25c60ff3c002c0c36482687d92a150f364069559dfea915f63a040d5f603 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/symbol@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/symbol@npm:0.0.12" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 2263341ce0296de2063d26038902bd63bf1d7b820307402fdf38c3b248bd026f17d96bccdc3189fd9fcc9c83a778eaab797dc11805bd66203b8ac9c6934f6588 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/time@npm:^0.0.x": + version: 0.0.14 + resolution: "@stdlib/time@npm:0.0.14" + dependencies: + "@stdlib/assert": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/utils": ^0.0.x + checksum: 6e8a1b985a09936ab09c98d44bf1b2c79e08995c3c73401494bc1f6f708747ef136d769af4809a8af92a9ceb3d390db6c4c4e01608cd8d794a86c4b57e343eb1 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/types@npm:^0.0.x": + version: 0.0.14 + resolution: "@stdlib/types@npm:0.0.14" + checksum: 5680a655ddb3ad730f5c7eb2363a43e089f3e6a1b85b12546cab49f7749bb3baf293bd50fbfe55486f233f4227f1020b65eb461b754b94fb4a4bc2799647ec22 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + +"@stdlib/utils@npm:^0.0.x": + version: 0.0.12 + resolution: "@stdlib/utils@npm:0.0.12" + dependencies: + "@stdlib/array": ^0.0.x + "@stdlib/assert": ^0.0.x + "@stdlib/blas": ^0.0.x + "@stdlib/buffer": ^0.0.x + "@stdlib/cli": ^0.0.x + "@stdlib/constants": ^0.0.x + "@stdlib/fs": ^0.0.x + "@stdlib/math": ^0.0.x + "@stdlib/os": ^0.0.x + "@stdlib/process": ^0.0.x + "@stdlib/random": ^0.0.x + "@stdlib/regexp": ^0.0.x + "@stdlib/streams": ^0.0.x + "@stdlib/string": ^0.0.x + "@stdlib/symbol": ^0.0.x + "@stdlib/time": ^0.0.x + "@stdlib/types": ^0.0.x + debug: ^2.6.9 + checksum: e0c3671c5f62c11bb3abd721f2958c41641b00a75d449bd25fbb62bcb8689cfe9c1f600c0688e7b6819ae870d6e5974d0fc7b2ec86081c45d9194b316b2a2ec2 + conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) + languageName: node + linkType: hard + "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" @@ -2121,19 +2700,26 @@ __metadata: linkType: hard "@types/eslint@npm:*": - version: 8.44.5 - resolution: "@types/eslint@npm:8.44.5" + version: 8.44.6 + resolution: "@types/eslint@npm:8.44.6" dependencies: "@types/estree": "*" "@types/json-schema": "*" - checksum: 0fba768ecffbd9eccf07207979ffa82e748bfb67203be107d8fb6c9b1215054d57ca12062577878e73353ef8feb43591951c2a750452fde639858f501e03304a + checksum: ed8de582ab3dbd7ec0bf97d41f4f3de28dd8a37fc48bc423e1c406bbb70d1fd8c4175ba17ad6495ef9ef99a43df71421277b7a2a0355097489c4c4cf6bb266ff languageName: node linkType: hard "@types/estree@npm:*, @types/estree@npm:^1.0.0": - version: 1.0.3 - resolution: "@types/estree@npm:1.0.3" - checksum: f21a5448995f8aa61ab2248d10590d275666b11d26c27fe75b3c23420b07b469d5ce820deefcf7399671faa09d56eb7ce012322948e484d94686fda154be5221 + version: 1.0.4 + resolution: "@types/estree@npm:1.0.4" + checksum: dcd08e6e967def3afff745774b6b9b912d6394ddacbb3e8be05bb291c1803f5f03f1ab0eeb852bf8a85ca14842663f461f3dac82179dcdccbf45fbc067673bbc + languageName: node + linkType: hard + +"@types/geojson@npm:7946.0.4": + version: 7946.0.4 + resolution: "@types/geojson@npm:7946.0.4" + checksum: 541aea46540c918b9fe21ab73f497fe17b1eaf4d0d3baeb5f5614029b7f488c37f63843b644c024a8178dc2fb66d3d6623c25d9cf61d7b553aa19c8dc7f99047 languageName: node linkType: hard @@ -2159,75 +2745,75 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 20.8.6 - resolution: "@types/node@npm:20.8.6" + version: 20.8.10 + resolution: "@types/node@npm:20.8.10" dependencies: - undici-types: ~5.25.1 - checksum: ccfb7ac482c5a96edeb239893c5c099f5257fcc2ed9ae62fefdfbc782b79e16dbc2af9a85b379665237bf759904b44ca2be68e75d239e0297882aad42f61905c + undici-types: ~5.26.4 + checksum: 7c61190e43e8074a1b571e52ff14c880bc67a0447f2fe5ed0e1a023eb8a23d5f815658edb98890f7578afe0f090433c4a635c7c87311762544e20dd78723e515 languageName: node linkType: hard "@types/normalize-package-data@npm:^2.4.0": - version: 2.4.2 - resolution: "@types/normalize-package-data@npm:2.4.2" - checksum: 2132e4054711e6118de967ae3a34f8c564e58d71fbcab678ec2c34c14659f638a86c35a0fd45237ea35a4a03079cf0a485e3f97736ffba5ed647bfb5da086b03 + version: 2.4.3 + resolution: "@types/normalize-package-data@npm:2.4.3" + checksum: 6f60e157c0fc39b80d80eb9043cdd78e4090f25c5264ef0317f5701648a5712fd453d364569675a19aef44a18c6f14f6e4809bdc0b97a46a0ed9ce4a320bbe42 languageName: node linkType: hard "@types/parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "@types/parse-json@npm:4.0.0" - checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b + version: 4.0.1 + resolution: "@types/parse-json@npm:4.0.1" + checksum: 467c5fb95f4b03ea10fac007b4de7c9db103e8fce87b039ba5b37f17b374911833724624c311f3591435e4c42e376cab219400af1aef1dc314d5bd495d22fde7 languageName: node linkType: hard "@types/prop-types@npm:*": - version: 15.7.8 - resolution: "@types/prop-types@npm:15.7.8" - checksum: 61dfad79da8b1081c450bab83b77935df487ae1cdd4660ec7df6be8e74725c15fa45cf486ce057addc956ca4ae78300b97091e2a25061133d1b9a1440bc896ae + version: 15.7.9 + resolution: "@types/prop-types@npm:15.7.9" + checksum: c7591d3ff7593e243908a07e1d3e2bb6e8879008af5800d8378115a90d0fdf669a1cae72a6d7f69e59c4fa7bb4c8ed61f6ebc1c520fe110c6f2b03ac02414072 languageName: node linkType: hard "@types/react@npm:^18.0.26": - version: 18.2.28 - resolution: "@types/react@npm:18.2.28" + version: 18.2.35 + resolution: "@types/react@npm:18.2.35" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 81381bedeba83278f4c9febb0b83e0bd3f42a25897a50b9cb36ef53651d34b3d50f87ebf11211ea57ea575131f85d31e93e496ce46478a00b0f9bf7b26b5917a + checksum: d3f1c39116c82e3a504f3332b9198f94f34a33d8535604434b1e387ecabd41ec995961775e2e1c08feefdde878a5b86220879350900137980d681ae3983db462 languageName: node linkType: hard "@types/scheduler@npm:*": - version: 0.16.4 - resolution: "@types/scheduler@npm:0.16.4" - checksum: a57b0f10da1b021e6bd5eeef8a1917dd3b08a8715bd8029e2ded2096d8f091bb1bb1fef2d66e139588a983c4bfbad29b59e48011141725fa83c76e986e1257d7 + version: 0.16.5 + resolution: "@types/scheduler@npm:0.16.5" + checksum: 5aae67331bb7877edc65f77f205fb03c3808d9e51c186afe26945ce69f4072886629580a751e9ce8573e4a7538d0dfa1e4ce388c7c451fa689a4c592fdf1ea45 languageName: node linkType: hard "@types/semver@npm:^7.3.12": - version: 7.5.3 - resolution: "@types/semver@npm:7.5.3" - checksum: 349fdd1ab6c213bac5c991bac766bd07b8b12e63762462bb058740dcd2eb09c8193d068bb226f134661275f2022976214c0e727a4e5eb83ec1b131127c980d3e + version: 7.5.4 + resolution: "@types/semver@npm:7.5.4" + checksum: 120c0189f6fec5f2d12d0d71ac8a4cfa952dc17fa3d842e8afddb82bba8828a4052f8799c1653e2b47ae1977435f38e8985658fde971905ce5afb8e23ee97ecf languageName: node linkType: hard "@types/source-list-map@npm:*": - version: 0.1.3 - resolution: "@types/source-list-map@npm:0.1.3" - checksum: a001098786d75b82eef00a6e4f1f7bb73f9f2fdf3e97333f8b741183c3fbf92db91af8bcfc410c7e6c23c4497523a3210f3eee2077b1be93595206f9baf3d909 + version: 0.1.4 + resolution: "@types/source-list-map@npm:0.1.4" + checksum: c18896ead356c77aa7a5bb6bd0ad72a5e8dea4c7ec1e5162c3f4d7e5afa6f547ace66ce506c47d1726adb34aee9758f9367b35ddd03126f3c9d4bde4700cddf4 languageName: node linkType: hard "@types/webpack-sources@npm:^0.1.5": - version: 0.1.10 - resolution: "@types/webpack-sources@npm:0.1.10" + version: 0.1.11 + resolution: "@types/webpack-sources@npm:0.1.11" dependencies: "@types/node": "*" "@types/source-list-map": "*" source-map: ^0.6.1 - checksum: 95817c13bc663b1b8b2c9b26d0f8ceadb3b583bb2549b554b660e900245a430dd2ed0b534f14b85153a0121450e01ebdbcefbade9305ed1e80b2190a50659aee + checksum: da64fc4b7d774dca57a0b40c20641fd387bc6c02ed3245dfd62af75a9ab0c3bb752773e6c2a023e35ce151563302af4d427ee4e81698ec3f3a7ed9f81f3390f4 languageName: node linkType: hard @@ -2352,6 +2938,20 @@ __metadata: languageName: node linkType: hard +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 + languageName: node + linkType: hard + +"@vscode/debugprotocol@npm:^1.51.0": + version: 1.64.0 + resolution: "@vscode/debugprotocol@npm:1.64.0" + checksum: 1c8a3d6dba035674a9b4ec1b2f5e98d75170fe86cd98cf3d05cdced40d0ee0c3371f3d291516a1903f70cc5a9beadb70048d1ffc71a778bca6767bbeecb716ab + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5": version: 1.11.6 resolution: "@webassemblyjs/ast@npm:1.11.6" @@ -2639,11 +3239,11 @@ __metadata: linkType: hard "acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": - version: 8.10.0 - resolution: "acorn@npm:8.10.0" + version: 8.11.2 + resolution: "acorn@npm:8.11.2" bin: acorn: bin/acorn - checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + checksum: 818450408684da89423e3daae24e4dc9b68692db8ab49ea4569c7c5abb7a3f23669438bf129cc81dfdada95e1c9b944ee1bfca2c57a05a4dc73834a612fbf6a7 languageName: node linkType: hard @@ -2663,6 +3263,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: ^4.3.4 + checksum: f7828f991470a0cc22cb579c86a18cbae83d8a3cbed39992ab34fc7217c4d126017f1c74d0ab66be87f71455318a8ea3e757d6a37881b8d0f2a2c6aa55e5418f + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.5.0 resolution: "agentkeepalive@npm:4.5.0" @@ -2913,9 +3522,9 @@ __metadata: linkType: hard "async@npm:^3.2.3": - version: 3.2.4 - resolution: "async@npm:3.2.4" - checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + version: 3.2.5 + resolution: "async@npm:3.2.5" + checksum: 5ec77f1312301dee02d62140a6b1f7ee0edd2a0f983b6fd2b0849b969f245225b990b47b8243e7b9ad16451a53e7f68e753700385b706198ced888beedba3af4 languageName: node linkType: hard @@ -2941,13 +3550,13 @@ __metadata: linkType: hard "axios@npm:^1.0.0": - version: 1.5.1 - resolution: "axios@npm:1.5.1" + version: 1.6.0 + resolution: "axios@npm:1.6.0" dependencies: follow-redirects: ^1.15.0 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 4444f06601f4ede154183767863d2b8e472b4a6bfc5253597ed6d21899887e1fd0ee2b3de792ac4f8459fe2e359d2aa07c216e45fd8b9e4e0688a6ebf48a5a8d + checksum: c7c9f2ae9e0b9bad7d6f9a4dff030930b12ee667dedf54c3c776714f91681feb743c509ac0796ae5c01e12c4ab4a2bee74905068dd200fbc1ab86f9814578fb0 languageName: node linkType: hard @@ -3147,13 +3756,34 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind@npm:1.0.2" +"cacache@npm:^18.0.0": + version: 18.0.0 + resolution: "cacache@npm:18.0.0" dependencies: - function-bind: ^1.1.1 - get-intrinsic: ^1.0.2 - checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^10.0.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 2cd6bf15551abd4165acb3a4d1ef0593b3aa2fd6853ae16b5bb62199c2faecf27d36555a9545c0e07dd03347ec052e782923bdcece724a24611986aafb53e152 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.4, call-bind@npm:^1.0.5": + version: 1.0.5 + resolution: "call-bind@npm:1.0.5" + dependencies: + function-bind: ^1.1.2 + get-intrinsic: ^1.2.1 + set-function-length: ^1.1.1 + checksum: 449e83ecbd4ba48e7eaac5af26fea3b50f8f6072202c2dd7c5a6e7a6308f2421abe5e13a3bbd55221087f76320c5e09f25a8fdad1bab2b77c68ae74d92234ea5 languageName: node linkType: hard @@ -3183,9 +3813,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001541": - version: 1.0.30001550 - resolution: "caniuse-lite@npm:1.0.30001550" - checksum: b48d5a0bd25d634d61f410e0130c5e6c328724285c3c6065644eb41f86a227f5db0eb77da25d0fe3c6c9b04bbd040c9c164bf8dc50dd75cb30fc578aaae562f1 + version: 1.0.30001561 + resolution: "caniuse-lite@npm:1.0.30001561" + checksum: 949829fe037e23346595614e01d362130245920503a12677f2506ce68e1240360113d6383febed41e8aa38cd0f5fd9c69c21b0af65a71c0246d560db489f1373 languageName: node linkType: hard @@ -3342,9 +3972,9 @@ __metadata: linkType: hard "cmd-shim@npm:^6.0.0": - version: 6.0.1 - resolution: "cmd-shim@npm:6.0.1" - checksum: 359006b3a5bb4a0ff161a44ccc18fbba947db748ef0dd12273e476792e316a5edb0945d74bfa1e91cd88ce0511025fde87901eda092c479d83cfcd6734562683 + version: 6.0.2 + resolution: "cmd-shim@npm:6.0.2" + checksum: df3a01fc4d72a49b450985b991205e65774b28e7f74a2e4d2a11fd0df8732e3828f9e7b644050def3cd0be026cbd3ee46a1f50ce5f57d0b3fb5afe335bdfacde languageName: node linkType: hard @@ -3422,6 +4052,20 @@ __metadata: languageName: node linkType: hard +"commander@npm:2, commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"commander@npm:7": + version: 7.2.0 + resolution: "commander@npm:7.2.0" + checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc + languageName: node + linkType: hard + "commander@npm:^10.0.1": version: 10.0.1 resolution: "commander@npm:10.0.1" @@ -3429,13 +4073,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0": - version: 2.20.3 - resolution: "commander@npm:2.20.3" - checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e - languageName: node - linkType: hard - "commander@npm:^9.4.1": version: 9.5.0 resolution: "commander@npm:9.5.0" @@ -3740,6 +4377,189 @@ __metadata: languageName: node linkType: hard +"d3-array@npm:1 - 3, d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:^3.2.2": + version: 3.2.4 + resolution: "d3-array@npm:3.2.4" + dependencies: + internmap: 1 - 2 + checksum: a5976a6d6205f69208478bb44920dd7ce3e788c9dceb86b304dbe401a4bfb42ecc8b04c20facde486e9adcb488b5d1800d49393a3f81a23902b68158e12cddd0 + languageName: node + linkType: hard + +"d3-array@npm:3.2.2": + version: 3.2.2 + resolution: "d3-array@npm:3.2.2" + dependencies: + internmap: 1 - 2 + checksum: 98af3db792685ceca5d9c3721efba0c567520da5532b2c7a590fd83627a598ea225d11c2cecbad404dc154120feb5ea6df0ded38f82ddf342c714cfd0c6143d1 + languageName: node + linkType: hard + +"d3-color@npm:1 - 3, d3-color@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-color@npm:3.1.0" + checksum: 4931fbfda5d7c4b5cfa283a13c91a954f86e3b69d75ce588d06cde6c3628cebfc3af2069ccf225e982e8987c612aa7948b3932163ce15eb3c11cd7c003f3ee3b + languageName: node + linkType: hard + +"d3-delaunay@npm:^6.0.2": + version: 6.0.4 + resolution: "d3-delaunay@npm:6.0.4" + dependencies: + delaunator: 5 + checksum: ce6d267d5ef21a8aeadfe4606329fc80a22ab6e7748d47bc220bcc396ee8be84b77a5473033954c5ac4aa522d265ddc45d4165d30fe4787dd60a15ea66b9bbb4 + languageName: node + linkType: hard + +"d3-dispatch@npm:1 - 3": + version: 3.0.1 + resolution: "d3-dispatch@npm:3.0.1" + checksum: fdfd4a230f46463e28e5b22a45dd76d03be9345b605e1b5dc7d18bd7ebf504e6c00ae123fd6d03e23d9e2711e01f0e14ea89cd0632545b9f0c00b924ba4be223 + languageName: node + linkType: hard + +"d3-dsv@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-dsv@npm:3.0.1" + dependencies: + commander: 7 + iconv-lite: 0.6 + rw: 1 + bin: + csv2json: bin/dsv2json.js + csv2tsv: bin/dsv2dsv.js + dsv2dsv: bin/dsv2dsv.js + dsv2json: bin/dsv2json.js + json2csv: bin/json2dsv.js + json2dsv: bin/json2dsv.js + json2tsv: bin/json2dsv.js + tsv2csv: bin/dsv2dsv.js + tsv2json: bin/dsv2json.js + checksum: 5fc0723647269d5dccd181d74f2265920ab368a2868b0b4f55ffa2fecdfb7814390ea28622cd61ee5d9594ab262879509059544e9f815c54fe76fbfb4ffa4c8a + languageName: node + linkType: hard + +"d3-force@npm:^3.0.0": + version: 3.0.0 + resolution: "d3-force@npm:3.0.0" + dependencies: + d3-dispatch: 1 - 3 + d3-quadtree: 1 - 3 + d3-timer: 1 - 3 + checksum: 6c7e96438cab62fa32aeadb0ade3297b62b51f81b1b38b0a60a5ec9fd627d74090c1189654d92df2250775f31b06812342f089f1d5947de9960a635ee3581def + languageName: node + linkType: hard + +"d3-format@npm:1 - 3, d3-format@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-format@npm:3.1.0" + checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 + languageName: node + linkType: hard + +"d3-geo-projection@npm:^4.0.0": + version: 4.0.0 + resolution: "d3-geo-projection@npm:4.0.0" + dependencies: + commander: 7 + d3-array: 1 - 3 + d3-geo: 1.12.0 - 3 + bin: + geo2svg: bin/geo2svg.js + geograticule: bin/geograticule.js + geoproject: bin/geoproject.js + geoquantize: bin/geoquantize.js + geostitch: bin/geostitch.js + checksum: 631422b10dd78d1047ba5a3b073148bea27721060bd7087a5fa6c053ca80445d26432e505e0e3acbd6e0d76cf577c61bf9a5db70dabbc9310c493de1f7ff736d + languageName: node + linkType: hard + +"d3-geo@npm:1.12.0 - 3, d3-geo@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-geo@npm:3.1.0" + dependencies: + d3-array: 2.5.0 - 3 + checksum: adf82b0c105c0c5951ae0a833d4dfc479a563791ad7938579fa14e1cffd623b469d8aa7a37dc413a327fb6ac56880f3da3f6c43d4abe3c923972dd98f34f37d1 + languageName: node + linkType: hard + +"d3-hierarchy@npm:^3.1.2": + version: 3.1.2 + resolution: "d3-hierarchy@npm:3.1.2" + checksum: 0fd946a8c5fd4686d43d3e11bbfc2037a145fda29d2261ccd0e36f70b66af6d7638e2c0c7112124d63fc3d3127197a00a6aecf676bd5bd392a94d7235a214263 + languageName: node + linkType: hard + +"d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-interpolate@npm:3.0.1" + dependencies: + d3-color: 1 - 3 + checksum: a42ba314e295e95e5365eff0f604834e67e4a3b3c7102458781c477bd67e9b24b6bb9d8e41ff5521050a3f2c7c0c4bbbb6e187fd586daa3980943095b267e78b + languageName: node + linkType: hard + +"d3-path@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-path@npm:3.1.0" + checksum: 2306f1bd9191e1eac895ec13e3064f732a85f243d6e627d242a313f9777756838a2215ea11562f0c7630c7c3b16a19ec1fe0948b1c82f3317fac55882f6ee5d8 + languageName: node + linkType: hard + +"d3-quadtree@npm:1 - 3": + version: 3.0.1 + resolution: "d3-quadtree@npm:3.0.1" + checksum: 5469d462763811475f34a7294d984f3eb100515b0585ca5b249656f6b1a6e99b20056a2d2e463cc9944b888896d2b1d07859c50f9c0cf23438df9cd2e3146066 + languageName: node + linkType: hard + +"d3-scale@npm:^4.0.2": + version: 4.0.2 + resolution: "d3-scale@npm:4.0.2" + dependencies: + d3-array: 2.10.0 - 3 + d3-format: 1 - 3 + d3-interpolate: 1.2.0 - 3 + d3-time: 2.1.1 - 3 + d3-time-format: 2 - 4 + checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e + languageName: node + linkType: hard + +"d3-shape@npm:^3.2.0": + version: 3.2.0 + resolution: "d3-shape@npm:3.2.0" + dependencies: + d3-path: ^3.1.0 + checksum: de2af5fc9a93036a7b68581ca0bfc4aca2d5a328aa7ba7064c11aedd44d24f310c20c40157cb654359d4c15c3ef369f95ee53d71221017276e34172c7b719cfa + languageName: node + linkType: hard + +"d3-time-format@npm:2 - 4, d3-time-format@npm:^4.1.0": + version: 4.1.0 + resolution: "d3-time-format@npm:4.1.0" + dependencies: + d3-time: 1 - 3 + checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 + languageName: node + linkType: hard + +"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.1.0": + version: 3.1.0 + resolution: "d3-time@npm:3.1.0" + dependencies: + d3-array: 2 - 3 + checksum: 613b435352a78d9f31b7f68540788186d8c331b63feca60ad21c88e9db1989fe888f97f242322ebd6365e45ec3fb206a4324cd4ca0dfffa1d9b5feb856ba00a7 + languageName: node + linkType: hard + +"d3-timer@npm:1 - 3, d3-timer@npm:^3.0.1": + version: 3.0.1 + resolution: "d3-timer@npm:3.0.1" + checksum: 1cfddf86d7bca22f73f2c427f52dfa35c49f50d64e187eb788dcad6e927625c636aa18ae4edd44d084eb9d1f81d8ca4ec305dae7f733c15846a824575b789d73 + languageName: node + linkType: hard + "dargs@npm:^7.0.0": version: 7.0.0 resolution: "dargs@npm:7.0.0" @@ -3777,6 +4597,15 @@ __metadata: languageName: node linkType: hard +"debug@npm:^2.6.9": + version: 2.6.9 + resolution: "debug@npm:2.6.9" + dependencies: + ms: 2.0.0 + checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 + languageName: node + linkType: hard + "decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" @@ -3824,7 +4653,7 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1": +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.1": version: 1.1.1 resolution: "define-data-property@npm:1.1.1" dependencies: @@ -3869,6 +4698,15 @@ __metadata: languageName: node linkType: hard +"delaunator@npm:5": + version: 5.0.0 + resolution: "delaunator@npm:5.0.0" + dependencies: + robust-predicates: ^3.0.0 + checksum: d6764188442b7f7c6bcacebd96edc00e35f542a96f1af3ef600e586bfb9849a3682c489c0ab423440c90bc4c7cac77f28761babff76fa29e193e1cf50a95b860 + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -4016,9 +4854,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.535": - version: 1.4.557 - resolution: "electron-to-chromium@npm:1.4.557" - checksum: 16f24e8d648489f0bfe7c2ffd4ada282bd68465862779f1f2e0afff5357e96536b075731c4b721dd27e2eae72008dc66d79e7bce6315e1c8f02947d41d988b78 + version: 1.4.576 + resolution: "electron-to-chromium@npm:1.4.576" + checksum: cf26065d95b0ecdd01f6daeec15b1e684a3b39680ae9f6d5d33c1391a6c1aa5ea2cb81cce699878e4fbb942328fc1076726f2d9ab1e8df9fbe02c84f1a5bbf1f languageName: node linkType: hard @@ -4095,11 +4933,11 @@ __metadata: linkType: hard "envinfo@npm:^7.7.3, envinfo@npm:^7.7.4": - version: 7.10.0 - resolution: "envinfo@npm:7.10.0" + version: 7.11.0 + resolution: "envinfo@npm:7.11.0" bin: envinfo: dist/cli.js - checksum: 05e81a5768c42cbd5c580dc3f274db3401facadd53e9bd52e2aa49dfbb5d8b26f6181c25a6652d79618a6994185bd2b1c137673101690b147f758e4e71d42f7d + checksum: c45a7d20409d5f4cda72483b150d3816b15b434f2944d72c1495d8838bd7c4e7b2f32c12128ffb9b92b5f66f436237b8a525eb3a9a5da2d20013bc4effa28aef languageName: node linkType: hard @@ -4120,24 +4958,24 @@ __metadata: linkType: hard "es-abstract@npm:^1.22.1": - version: 1.22.2 - resolution: "es-abstract@npm:1.22.2" + version: 1.22.3 + resolution: "es-abstract@npm:1.22.3" dependencies: array-buffer-byte-length: ^1.0.0 arraybuffer.prototype.slice: ^1.0.2 available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 + call-bind: ^1.0.5 es-set-tostringtag: ^2.0.1 es-to-primitive: ^1.2.1 function.prototype.name: ^1.1.6 - get-intrinsic: ^1.2.1 + get-intrinsic: ^1.2.2 get-symbol-description: ^1.0.0 globalthis: ^1.0.3 gopd: ^1.0.1 - has: ^1.0.3 has-property-descriptors: ^1.0.0 has-proto: ^1.0.1 has-symbols: ^1.0.3 + hasown: ^2.0.0 internal-slot: ^1.0.5 is-array-buffer: ^3.0.2 is-callable: ^1.2.7 @@ -4147,7 +4985,7 @@ __metadata: is-string: ^1.0.7 is-typed-array: ^1.1.12 is-weakref: ^1.0.2 - object-inspect: ^1.12.3 + object-inspect: ^1.13.1 object-keys: ^1.1.1 object.assign: ^4.1.4 regexp.prototype.flags: ^1.5.1 @@ -4161,8 +4999,8 @@ __metadata: typed-array-byte-offset: ^1.0.0 typed-array-length: ^1.0.4 unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.11 - checksum: cc70e592d360d7d729859013dee7a610c6b27ed8630df0547c16b0d16d9fe6505a70ee14d1af08d970fdd132b3f88c9ca7815ce72c9011608abf8ab0e55fc515 + which-typed-array: ^1.1.13 + checksum: b1bdc962856836f6e72be10b58dc128282bdf33771c7a38ae90419d920fc3b36cc5d2b70a222ad8016e3fc322c367bf4e9e89fc2bc79b7e933c05b218e83d79a languageName: node linkType: hard @@ -4174,13 +5012,13 @@ __metadata: linkType: hard "es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" + version: 2.0.2 + resolution: "es-set-tostringtag@npm:2.0.2" dependencies: - get-intrinsic: ^1.1.3 - has: ^1.0.3 + get-intrinsic: ^1.2.2 has-tostringtag: ^1.0.0 - checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + hasown: ^2.0.0 + checksum: afcec3a4c9890ae14d7ec606204858441c801ff84f312538e1d1ccf1e5493c8b17bd672235df785f803756472cb4f2d49b87bde5237aef33411e74c22f194e07 languageName: node linkType: hard @@ -4270,16 +5108,17 @@ __metadata: linkType: hard "eslint@npm:^8.36.0": - version: 8.51.0 - resolution: "eslint@npm:8.51.0" + version: 8.53.0 + resolution: "eslint@npm:8.53.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 - "@eslint/eslintrc": ^2.1.2 - "@eslint/js": 8.51.0 - "@humanwhocodes/config-array": ^0.11.11 + "@eslint/eslintrc": ^2.1.3 + "@eslint/js": 8.53.0 + "@humanwhocodes/config-array": ^0.11.13 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 @@ -4312,7 +5151,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 214fa5d1fcb67af1b8992ce9584ccd85e1aa7a482f8b8ea5b96edc28fa838a18a3b69456db45fc1ed3ef95f1e9efa9714f737292dc681e572d471d02fda9649c + checksum: 2da808655c7aa4b33f8970ba30d96b453c3071cc4d6cd60d367163430677e32ff186b65270816b662d29139283138bff81f28dddeb2e73265495245a316ed02c languageName: node linkType: hard @@ -4738,7 +5577,26 @@ __metadata: languageName: node linkType: hard -"function-bind@npm:^1.1.1": +"fsevents@npm:2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: latest + checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@2.3.2#~builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 @@ -4803,15 +5661,15 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1": - version: 1.2.1 - resolution: "get-intrinsic@npm:1.2.1" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2": + version: 1.2.2 + resolution: "get-intrinsic@npm:1.2.2" dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 + function-bind: ^1.1.2 has-proto: ^1.0.1 has-symbols: ^1.0.3 - checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f + hasown: ^2.0.0 + checksum: 447ff0724df26829908dc033b62732359596fcf66027bc131ab37984afb33842d9cd458fd6cecadfe7eac22fd8a54b349799ed334cf2726025c921c7250e7417 languageName: node linkType: hard @@ -4964,7 +5822,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2": +"glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.3.10 resolution: "glob@npm:10.3.10" dependencies: @@ -5168,11 +6026,11 @@ __metadata: linkType: hard "has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" + version: 1.0.1 + resolution: "has-property-descriptors@npm:1.0.1" dependencies: - get-intrinsic: ^1.1.1 - checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + get-intrinsic: ^1.2.2 + checksum: 2bcc6bf6ec6af375add4e4b4ef586e43674850a91ad4d46666d0b28ba8e1fd69e424c7677d24d60f69470ad0afaa2f3197f508b20b0bb7dd99a8ab77ffc4b7c4 languageName: node linkType: hard @@ -5206,10 +6064,12 @@ __metadata: languageName: node linkType: hard -"has@npm:^1.0.3": - version: 1.0.4 - resolution: "has@npm:1.0.4" - checksum: 8a11ba062e0627c9578a1d08285401e39f1d071a9692ddf793199070edb5648b21c774dd733e2a181edd635bf6862731885f476f4ccf67c998d7a5ff7cef2550 +"hasown@npm:^2.0.0": + version: 2.0.0 + resolution: "hasown@npm:2.0.0" + dependencies: + function-bind: ^1.1.2 + checksum: 6151c75ca12554565098641c98a40f4cc86b85b0fd5b6fe92360967e4605a4f9610f7757260b4e8098dd1c2ce7f4b095f2006fe72a570e3b6d2d28de0298c176 languageName: node linkType: hard @@ -5293,6 +6153,16 @@ __metadata: languageName: node linkType: hard +"http-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "http-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^7.1.0 + debug: ^4.3.4 + checksum: 48d4fac997917e15f45094852b63b62a46d0c8a4f0b9c6c23ca26d27b8df8d178bed88389e604745e748bd9a01f5023e25093722777f0593c3f052009ff438b6 + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -5303,6 +6173,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.1": + version: 7.0.2 + resolution: "https-proxy-agent@npm:7.0.2" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: 088969a0dd476ea7a0ed0a2cf1283013682b08f874c3bc6696c83fa061d2c157d29ef0ad3eb70a2046010bb7665573b2388d10fdcb3e410a66995e5248444292 + languageName: node + linkType: hard + "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -5319,6 +6199,15 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + "iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -5328,15 +6217,6 @@ __metadata: languageName: node linkType: hard -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - "icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": version: 5.1.0 resolution: "icss-utils@npm:5.1.0" @@ -5445,6 +6325,13 @@ __metadata: languageName: node linkType: hard +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 + languageName: node + linkType: hard + "ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:^1.3.5": version: 1.3.8 resolution: "ini@npm:1.3.8" @@ -5514,13 +6401,20 @@ __metadata: linkType: hard "internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" + version: 1.0.6 + resolution: "internal-slot@npm:1.0.6" dependencies: - get-intrinsic: ^1.2.0 - has: ^1.0.3 + get-intrinsic: ^1.2.2 + hasown: ^2.0.0 side-channel: ^1.0.4 - checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + checksum: 7872454888047553ce97a3fa1da7cc054a28ec5400a9c2e9f4dbe4fe7c1d041cb8e8301467614b80d4246d50377aad2fb58860b294ed74d6700cc346b6f89549 + languageName: node + linkType: hard + +"internmap@npm:1 - 2": + version: 2.0.3 + resolution: "internmap@npm:2.0.3" + checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241 languageName: node linkType: hard @@ -5594,11 +6488,11 @@ __metadata: linkType: hard "is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": - version: 2.13.0 - resolution: "is-core-module@npm:2.13.0" + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" dependencies: - has: ^1.0.3 - checksum: 053ab101fb390bfeb2333360fd131387bed54e476b26860dc7f5a700bbf34a0ec4454f7c8c4d43e8a0030957e4b3db6e16d35e1890ea6fb654c833095e040355 + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c languageName: node linkType: hard @@ -5848,6 +6742,13 @@ __metadata: languageName: node linkType: hard +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e + languageName: node + linkType: hard + "isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" @@ -6006,6 +6907,13 @@ __metadata: languageName: node linkType: hard +"json-stringify-pretty-compact@npm:~3.0.0": + version: 3.0.0 + resolution: "json-stringify-pretty-compact@npm:3.0.0" + checksum: 01ab5c5c8260299414868d96db97f53aef93c290fe469edd9a1363818e795006e01c952fa2fd7b47cbbab506d5768998eccc25e1da4fa2ccfebd1788c6098791 + languageName: node + linkType: hard + "json-stringify-safe@npm:^5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" @@ -6075,6 +6983,15 @@ __metadata: languageName: unknown linkType: soft +"jupyterlab-jupytext-ui-tests@workspace:packages/jupyterlab-jupytext-extension/ui-tests": + version: 0.0.0-use.local + resolution: "jupyterlab-jupytext-ui-tests@workspace:packages/jupyterlab-jupytext-extension/ui-tests" + dependencies: + "@jupyterlab/galata": ^5.0.0 + "@playwright/test": ^1.32.0 + languageName: unknown + linkType: soft + "jupyterlab-jupytext@workspace:packages/jupyterlab-jupytext-extension": version: 0.0.0-use.local resolution: "jupyterlab-jupytext@workspace:packages/jupyterlab-jupytext-extension" @@ -6083,16 +7000,21 @@ __metadata: "@jupyterlab/apputils": ^4.0.0 "@jupyterlab/builder": ^4.0.0 "@jupyterlab/codeeditor": ^4.0.0 + "@jupyterlab/docregistry": ^4.0.0 + "@jupyterlab/filebrowser": ^4.0.0 + "@jupyterlab/launcher": ^4.0.0 "@jupyterlab/nbformat": ^4.0.0 "@jupyterlab/notebook": ^4.0.0 "@jupyterlab/rendermime": ^4.0.0 "@jupyterlab/settingregistry": ^4.0.0 "@jupyterlab/translation": ^4.0.0 "@jupyterlab/ui-components": ^4.0.0 + "@lumino/coreutils": ^2.0.0 + "@lumino/disposable": ^2.0.0 jupyterlab-rise: ^0.41.0 npm-run-all: ^4.1.5 - rimraf: ^3.0.2 - typescript: ~5.0.1 + rimraf: ^4.4.1 + typescript: ~5.0.2 languageName: unknown linkType: soft @@ -6459,6 +7381,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -6475,13 +7404,6 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^9.1.1 || ^10.0.0": - version: 10.0.1 - resolution: "lru-cache@npm:10.0.1" - checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 - languageName: node - linkType: hard - "make-dir@npm:3.1.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -6501,7 +7423,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.6": +"make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" dependencies: @@ -6525,7 +7447,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^11.0.0, make-fetch-happen@npm:^11.0.1, make-fetch-happen@npm:^11.0.3, make-fetch-happen@npm:^11.1.1": +"make-fetch-happen@npm:^11.0.0, make-fetch-happen@npm:^11.0.1, make-fetch-happen@npm:^11.1.1": version: 11.1.1 resolution: "make-fetch-happen@npm:11.1.1" dependencies: @@ -6548,6 +7470,25 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" + dependencies: + "@npmcli/agent": ^2.0.0 + cacache: ^18.0.0 + http-cache-semantics: ^4.1.1 + is-lambda: ^1.0.1 + minipass: ^7.0.2 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + ssri: ^10.0.0 + checksum: 7c7a6d381ce919dd83af398b66459a10e2fe8f4504f340d1d090d3fa3d1b0c93750220e1d898114c64467223504bd258612ba83efbc16f31b075cd56de24b4af + languageName: node + linkType: hard + "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -6869,7 +7810,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": version: 7.0.4 resolution: "minipass@npm:7.0.4" checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 @@ -6913,6 +7854,13 @@ __metadata: languageName: node linkType: hard +"ms@npm:2.0.0": + version: 2.0.0 + resolution: "ms@npm:2.0.0" + checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 + languageName: node + linkType: hard + "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -6948,11 +7896,11 @@ __metadata: linkType: hard "nanoid@npm:^3.3.6": - version: 3.3.6 - resolution: "nanoid@npm:3.3.6" + version: 3.3.7 + resolution: "nanoid@npm:3.3.7" bin: nanoid: bin/nanoid.cjs - checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 + checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 languageName: node linkType: hard @@ -7039,15 +7987,15 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^9.0.0, node-gyp@npm:latest": - version: 9.4.0 - resolution: "node-gyp@npm:9.4.0" +"node-gyp@npm:^9.0.0": + version: 9.4.1 + resolution: "node-gyp@npm:9.4.1" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 glob: ^7.1.4 graceful-fs: ^4.2.6 - make-fetch-happen: ^11.0.3 + make-fetch-happen: ^10.0.3 nopt: ^6.0.0 npmlog: ^6.0.0 rimraf: ^3.0.2 @@ -7056,7 +8004,27 @@ __metadata: which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + checksum: 8576c439e9e925ab50679f87b7dfa7aa6739e42822e2ad4e26c36341c0ba7163fdf5a946f0a67a476d2f24662bc40d6c97bd9e79ced4321506738e6b760a1577 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^4.0.0 + bin: + node-gyp: bin/node-gyp.js + checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f languageName: node linkType: hard @@ -7449,10 +8417,10 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": - version: 1.13.0 - resolution: "object-inspect@npm:1.13.0" - checksum: 21353e910a3079466cb44adca71d8bef15bd8b87e518eb68bb33d82c5c70b83193993edce432cc92268f7dd02c4a8ab338663a011844367d0bd0559f6dde1fed +"object-inspect@npm:^1.13.1, object-inspect@npm:^1.9.0": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f languageName: node linkType: hard @@ -7873,6 +8841,16 @@ __metadata: languageName: node linkType: hard +"path@npm:~0.12.7": + version: 0.12.7 + resolution: "path@npm:0.12.7" + dependencies: + process: ^0.11.1 + util: ^0.10.3 + checksum: 5dedb71e78fc008fcba797defc0b4e1cf06c1f18e0a631e03ba5bb505136f587ff017afc14f9a3d481cbe77aeedff7dc0c1d2ce4d820c1ebf3c4281ca49423a1 + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -7933,6 +8911,30 @@ __metadata: languageName: node linkType: hard +"playwright-core@npm:1.39.0": + version: 1.39.0 + resolution: "playwright-core@npm:1.39.0" + bin: + playwright-core: cli.js + checksum: 556e78dee4f9890facf2af8249972e0d6e01a5ae98737b0f6b0166c660a95ffee4cb79350335b1ef96430a0ef01d3669daae9099fa46c8d403d11c623988238b + languageName: node + linkType: hard + +"playwright@npm:1.39.0": + version: 1.39.0 + resolution: "playwright@npm:1.39.0" + dependencies: + fsevents: 2.3.2 + playwright-core: 1.39.0 + dependenciesMeta: + fsevents: + optional: true + bin: + playwright: cli.js + checksum: 96d8ca5aa25465c1c5d554d0d6071981d55e22477800ff8f5d47a53ca75193d60ece2df538a01b7165b3277dd5493c67603a5acda713029df7fbd95ce2417bc9 + languageName: node + linkType: hard + "postcss-media-query-parser@npm:^0.2.3": version: 0.2.3 resolution: "postcss-media-query-parser@npm:0.2.3" @@ -8085,7 +9087,7 @@ __metadata: languageName: node linkType: hard -"process@npm:^0.11.10": +"process@npm:^0.11.1, process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 @@ -8165,9 +9167,9 @@ __metadata: linkType: hard "punycode@npm:^2.1.0, punycode@npm:^2.1.1": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 languageName: node linkType: hard @@ -8377,20 +9379,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^4.1.0": - version: 4.4.2 - resolution: "readable-stream@npm:4.4.2" - dependencies: - abort-controller: ^3.0.0 - buffer: ^6.0.3 - events: ^3.3.0 - process: ^0.11.10 - string_decoder: ^1.3.0 - checksum: 6f4063763dbdb52658d22d3f49ca976420e1fbe16bbd241f744383715845350b196a2f08b8d6330f8e219153dff34b140aeefd6296da828e1041a7eab1f20d5e - languageName: node - linkType: hard - -"readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.1.4, readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: @@ -8405,6 +9394,19 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:^4.1.0": + version: 4.4.2 + resolution: "readable-stream@npm:4.4.2" + dependencies: + abort-controller: ^3.0.0 + buffer: ^6.0.3 + events: ^3.3.0 + process: ^0.11.10 + string_decoder: ^1.3.0 + checksum: 6f4063763dbdb52658d22d3f49ca976420e1fbe16bbd241f744383715845350b196a2f08b8d6330f8e219153dff34b140aeefd6296da828e1041a7eab1f20d5e + languageName: node + linkType: hard + "rechoir@npm:^0.8.0": version: 0.8.0 resolution: "rechoir@npm:0.8.0" @@ -8424,6 +9426,24 @@ __metadata: languageName: node linkType: hard +"regexp-match-indices@npm:^1.0.2": + version: 1.0.2 + resolution: "regexp-match-indices@npm:1.0.2" + dependencies: + regexp-tree: ^0.1.11 + checksum: 8cc779f6cf8f404ead828d09970a7d4bd66bd78d43ab9eb2b5e65f2ef2ba1ed53536f5b5fa839fb90b350365fb44b6a851c7f16289afc3f37789c113ab2a7916 + languageName: node + linkType: hard + +"regexp-tree@npm:^0.1.11": + version: 0.1.27 + resolution: "regexp-tree@npm:0.1.27" + bin: + regexp-tree: bin/regexp-tree + checksum: 129aebb34dae22d6694ab2ac328be3f99105143737528ab072ef624d599afecbcfae1f5c96a166fa9e5f64fa1ecf30b411c4691e7924c3e11bbaf1712c260c54 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.5.1": version: 1.5.1 resolution: "regexp.prototype.flags@npm:1.5.1" @@ -8551,6 +9571,13 @@ __metadata: languageName: node linkType: hard +"robust-predicates@npm:^3.0.0": + version: 3.0.2 + resolution: "robust-predicates@npm:3.0.2" + checksum: 36854c1321548ceca96d36ad9d6e0a5a512986029ec6929ad6ed3ec1612c22cc8b46cc72d2c5674af42e8074a119d793f6f0ea3a5b51373e3ab926c64b172d7a + languageName: node + linkType: hard + "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" @@ -8567,6 +9594,13 @@ __metadata: languageName: node linkType: hard +"rw@npm:1": + version: 1.3.3 + resolution: "rw@npm:1.3.3" + checksum: c20d82421f5a71c86a13f76121b751553a99cd4a70ea27db86f9b23f33db941f3f06019c30f60d50c356d0bd674c8e74764ac146ea55e217c091bde6fba82aa3 + languageName: node + linkType: hard + "rxjs@npm:^7.5.5": version: 7.8.1 resolution: "rxjs@npm:7.8.1" @@ -8733,6 +9767,18 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.1.1": + version: 1.1.1 + resolution: "set-function-length@npm:1.1.1" + dependencies: + define-data-property: ^1.1.1 + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: c131d7569cd7e110cafdfbfbb0557249b538477624dfac4fc18c376d879672fa52563b74029ca01f8f4583a8acb35bb1e873d573a24edb80d978a7ee607c6e06 + languageName: node + linkType: hard + "set-function-name@npm:^2.0.0": version: 2.0.1 resolution: "set-function-name@npm:2.0.1" @@ -8868,7 +9914,18 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.6.2": +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: ^7.0.2 + debug: ^4.3.4 + socks: ^2.7.1 + checksum: 4fb165df08f1f380881dcd887b3cdfdc1aba3797c76c1e9f51d29048be6e494c5b06d68e7aea2e23df4572428f27a3ec22b3d7c75c570c5346507433899a4b6d + languageName: node + linkType: hard + +"socks@npm:^2.6.2, socks@npm:^2.7.1": version: 2.7.1 resolution: "socks@npm:2.7.1" dependencies: @@ -9328,6 +10385,16 @@ __metadata: languageName: node linkType: hard +"systeminformation@npm:^5.8.6": + version: 5.21.15 + resolution: "systeminformation@npm:5.21.15" + bin: + systeminformation: lib/cli.js + checksum: 664d4821c23ab704c02fc020ac5c140849a415bdee4be8188256a6ef5d5f418b4373383636bfff94d10304e47b1765ba9c8bec04fd05ec81e7552e1e94593054 + conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) + languageName: node + linkType: hard + "table@npm:^6.8.1": version: 6.8.1 resolution: "table@npm:6.8.1" @@ -9439,8 +10506,8 @@ __metadata: linkType: hard "terser@npm:^5.16.8": - version: 5.22.0 - resolution: "terser@npm:5.22.0" + version: 5.24.0 + resolution: "terser@npm:5.24.0" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 @@ -9448,7 +10515,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: ee95981c54ebd381e0b7f5872c646e7a05543e53960f8e0c2f240863c368989d43a3ca80b7e9f691683c92ba199eb4b91d61785fef0b9ca4a887eb55866001f4 + checksum: d88f774b6fa711a234fcecefd7657f99189c367e17dbe95a51c2776d426ad0e4d98d1ffe6edfdf299877c7602e495bdd711d21b2caaec188410795e5447d0f6c languageName: node linkType: hard @@ -9519,6 +10586,19 @@ __metadata: languageName: node linkType: hard +"topojson-client@npm:^3.1.0": + version: 3.1.0 + resolution: "topojson-client@npm:3.1.0" + dependencies: + commander: 2 + bin: + topo2geo: bin/topo2geo + topomerge: bin/topomerge + topoquantize: bin/topoquantize + checksum: 8c029a4f18324ace0b8b55dd90edbd40c9e3c6de18bafbb5da37ca20ebf20e26fbd4420891acb3c2c264e214185f7557871f5651a9eee517028663be98d836de + languageName: node + linkType: hard + "tr46@npm:^2.1.0": version: 2.1.0 resolution: "tr46@npm:2.1.0" @@ -9567,7 +10647,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0": +"tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:~2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad @@ -9718,7 +10798,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~5.0.1": +"typescript@npm:~5.0.2": version: 5.0.4 resolution: "typescript@npm:5.0.4" bin: @@ -9738,7 +10818,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~5.0.1#~builtin": +"typescript@patch:typescript@~5.0.2#~builtin": version: 5.0.4 resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=85af82" bin: @@ -9779,10 +10859,10 @@ __metadata: languageName: node linkType: hard -"undici-types@npm:~5.25.1": - version: 5.25.3 - resolution: "undici-types@npm:5.25.3" - checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 languageName: node linkType: hard @@ -9832,16 +10912,16 @@ __metadata: linkType: hard "universal-user-agent@npm:^6.0.0": - version: 6.0.0 - resolution: "universal-user-agent@npm:6.0.0" - checksum: 5092bbc80dd0d583cef0b62c17df0043193b74f425112ea6c1f69bc5eda21eeec7a08d8c4f793a277eb2202ffe9b44bec852fa3faff971234cd209874d1b79ef + version: 6.0.1 + resolution: "universal-user-agent@npm:6.0.1" + checksum: fdc8e1ae48a05decfc7ded09b62071f571c7fe0bd793d700704c80cea316101d4eac15cc27ed2bb64f4ce166d2684777c3198b9ab16034f547abea0d3aa1c93c languageName: node linkType: hard "universalify@npm:^2.0.0": - version: 2.0.0 - resolution: "universalify@npm:2.0.0" - checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 languageName: node linkType: hard @@ -9892,6 +10972,15 @@ __metadata: languageName: node linkType: hard +"util@npm:^0.10.3": + version: 0.10.4 + resolution: "util@npm:0.10.4" + dependencies: + inherits: 2.0.3 + checksum: 913f9a90d05a60e91f91af01b8bd37e06bca4cc02d7b49e01089f9d5b78be2fffd61fb1a41b517de7238c5fc7337fa939c62d1fb4eb82e014894c7bee6637aaf + languageName: node + linkType: hard + "uuid@npm:8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" @@ -9992,6 +11081,403 @@ __metadata: languageName: node linkType: hard +"vega-canvas@npm:^1.2.6, vega-canvas@npm:^1.2.7": + version: 1.2.7 + resolution: "vega-canvas@npm:1.2.7" + checksum: 6ff92fcdf0c359f2f662909c859a7f4cb4a502436136ab2f4c02373c47a621996ec0eea23e2108f11d62a618be301de86cd8528b5058c2e207a53ddd7ff58d1b + languageName: node + linkType: hard + +"vega-crossfilter@npm:~4.1.1": + version: 4.1.1 + resolution: "vega-crossfilter@npm:4.1.1" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: e399f7e92d7ba273ad5c1a9e29d362a9ec7feaeacb976eff3aa205b318382fb37a9fac3150ec1cb806364cd2b2cb54d5f23aea3285db684df2b4c27836422464 + languageName: node + linkType: hard + +"vega-dataflow@npm:^5.7.3, vega-dataflow@npm:^5.7.5, vega-dataflow@npm:~5.7.5": + version: 5.7.5 + resolution: "vega-dataflow@npm:5.7.5" + dependencies: + vega-format: ^1.1.1 + vega-loader: ^4.5.1 + vega-util: ^1.17.1 + checksum: 917ed63e88b0871169a883f68da127a404d88e50c9ed6fa3f063a706016b064594fb804a2bf99f09bc4a899819cac320bdde12467edc861af1acc024552dd202 + languageName: node + linkType: hard + +"vega-encode@npm:~4.9.2": + version: 4.9.2 + resolution: "vega-encode@npm:4.9.2" + dependencies: + d3-array: ^3.2.2 + d3-interpolate: ^3.0.1 + vega-dataflow: ^5.7.5 + vega-scale: ^7.3.0 + vega-util: ^1.17.1 + checksum: fcba123d2efb865b4f6cf8e9d64e0752ebae163dcfe61013f4874f7fe6fce3003ea9dd83b89db3ffab2a1530532a7c902dd24dfec226eb53d08dcf69189f308d + languageName: node + linkType: hard + +"vega-event-selector@npm:^3.0.1, vega-event-selector@npm:~3.0.1": + version: 3.0.1 + resolution: "vega-event-selector@npm:3.0.1" + checksum: 66d09b5800a19a9b0c75f28811b140a1a2e70e84be6d6f87c568cdbce6e17c8e195f130f4e3de5d6dc737142d1f46f4fe7645177e154582cc8ba27c6845b54e8 + languageName: node + linkType: hard + +"vega-expression@npm:^5.0.1, vega-expression@npm:^5.1.0, vega-expression@npm:~5.1.0": + version: 5.1.0 + resolution: "vega-expression@npm:5.1.0" + dependencies: + "@types/estree": ^1.0.0 + vega-util: ^1.17.1 + checksum: 0355ebb6edd8f2ccc2dcf277a29b42b13f971725443212ce8a64cb8a02049f75f0add7ca9afcd3bc6744b93be791b526e7f983d9080d5052e9b0ca55bd488ae5 + languageName: node + linkType: hard + +"vega-force@npm:~4.2.0": + version: 4.2.0 + resolution: "vega-force@npm:4.2.0" + dependencies: + d3-force: ^3.0.0 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: 8a371ca8d0892bc3e932cc279bbf54fe8b88e2b384c42f8df9877c801191953f3ee3e2f516f675a69ecb052ed081232dfb3438989620e8ad5c2a316ccee60277 + languageName: node + linkType: hard + +"vega-format@npm:^1.1.1, vega-format@npm:~1.1.1": + version: 1.1.1 + resolution: "vega-format@npm:1.1.1" + dependencies: + d3-array: ^3.2.2 + d3-format: ^3.1.0 + d3-time-format: ^4.1.0 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: d506acb8611a6340ff419ebf308a758a54aaf3cf141863553df83980dcf8dc7bf806bee257d11a52d43682d159d7be03ab8a92bdd4d018d8c9f39a70c45cb197 + languageName: node + linkType: hard + +"vega-functions@npm:^5.13.1, vega-functions@npm:~5.13.2": + version: 5.13.2 + resolution: "vega-functions@npm:5.13.2" + dependencies: + d3-array: ^3.2.2 + d3-color: ^3.1.0 + d3-geo: ^3.1.0 + vega-dataflow: ^5.7.5 + vega-expression: ^5.1.0 + vega-scale: ^7.3.0 + vega-scenegraph: ^4.10.2 + vega-selections: ^5.4.1 + vega-statistics: ^1.8.1 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: 178498cf93c3d9ef392fb57a5c7992dbb9118c546a6acb4cff9783f911fb30dbf50634cbfd6e3a9bc358c4aec9a571bd55f9cf3de551213cd386f152ac882986 + languageName: node + linkType: hard + +"vega-geo@npm:~4.4.1": + version: 4.4.1 + resolution: "vega-geo@npm:4.4.1" + dependencies: + d3-array: ^3.2.2 + d3-color: ^3.1.0 + d3-geo: ^3.1.0 + vega-canvas: ^1.2.7 + vega-dataflow: ^5.7.5 + vega-projection: ^1.6.0 + vega-statistics: ^1.8.1 + vega-util: ^1.17.1 + checksum: e9c62d9134c2449a1a80cd5cb71ed6dc455d893a36fdcb1a696bcae3897670c32687cf14a0f366b0ec76905e5be406131dc671e5d607ffcbef74e94b8c697007 + languageName: node + linkType: hard + +"vega-hierarchy@npm:~4.1.1": + version: 4.1.1 + resolution: "vega-hierarchy@npm:4.1.1" + dependencies: + d3-hierarchy: ^3.1.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: beb23948922f1b52bf03b836d71d3a5a36db3a6bfe2af74b6a5fc45a2e2e877226313e2389772be62a459728467618175d8c02a07e88330844fdec45fd5f69ac + languageName: node + linkType: hard + +"vega-label@npm:~1.2.1": + version: 1.2.1 + resolution: "vega-label@npm:1.2.1" + dependencies: + vega-canvas: ^1.2.6 + vega-dataflow: ^5.7.3 + vega-scenegraph: ^4.9.2 + vega-util: ^1.15.2 + checksum: 2704c99328ead677441e746acd8f4529301437d08b2758933fc13353d2eab9af353e4ebcc4ff1f09f41d600401b097e2df3c9e8e56d4861e5216222dd9e29185 + languageName: node + linkType: hard + +"vega-lite@npm:^5.6.1": + version: 5.16.1 + resolution: "vega-lite@npm:5.16.1" + dependencies: + json-stringify-pretty-compact: ~3.0.0 + tslib: ~2.6.2 + vega-event-selector: ~3.0.1 + vega-expression: ~5.1.0 + vega-util: ~1.17.2 + yargs: ~17.7.2 + peerDependencies: + vega: ^5.24.0 + bin: + vl2pdf: bin/vl2pdf + vl2png: bin/vl2png + vl2svg: bin/vl2svg + vl2vg: bin/vl2vg + checksum: 4de40199b664700d9a8f0fa3571f5addc32e07c1ca12ef36c9238e23368abfa601ead7a27874249d6a31a7bea1cdf0a867d486dd6ff98e1d0ac4a910df418550 + languageName: node + linkType: hard + +"vega-loader@npm:^4.5.1, vega-loader@npm:~4.5.1": + version: 4.5.1 + resolution: "vega-loader@npm:4.5.1" + dependencies: + d3-dsv: ^3.0.1 + node-fetch: ^2.6.7 + topojson-client: ^3.1.0 + vega-format: ^1.1.1 + vega-util: ^1.17.1 + checksum: 95f6eebc75a97665cf34faaea431934047e1b2e9d7532f48f62dab4884d606a7d9da53962e1631a5790a7a867f720581852a3db9be1a7f667882062f6c102ee0 + languageName: node + linkType: hard + +"vega-parser@npm:~6.2.0": + version: 6.2.0 + resolution: "vega-parser@npm:6.2.0" + dependencies: + vega-dataflow: ^5.7.5 + vega-event-selector: ^3.0.1 + vega-functions: ^5.13.1 + vega-scale: ^7.3.0 + vega-util: ^1.17.1 + checksum: 19872153c16aab30c4df338e0df7bd331e0bf74c7c6afce5428df555b9bdb0c4acf76b54092cacd4726a1349912ea803c90e1b30d53f4a02044e0559873969a7 + languageName: node + linkType: hard + +"vega-projection@npm:^1.6.0, vega-projection@npm:~1.6.0": + version: 1.6.0 + resolution: "vega-projection@npm:1.6.0" + dependencies: + d3-geo: ^3.1.0 + d3-geo-projection: ^4.0.0 + vega-scale: ^7.3.0 + checksum: 9c52848e294ff68051fe9f44fa536656c4e6be3d474bd3359e21aa154ab282755eaee624ac31b1ca01816227900e1d81a6d191e36f46e47525ed6648397f0fa0 + languageName: node + linkType: hard + +"vega-regression@npm:~1.2.0": + version: 1.2.0 + resolution: "vega-regression@npm:1.2.0" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.3 + vega-statistics: ^1.9.0 + vega-util: ^1.15.2 + checksum: 5f79db18c7849b465550e00ca8fec9d896aa3cf6d6279daac8b862beb632d841dcb6a93136d6b827c37e3d1cbd2bb2f7dec58f96c572763870c2d38f2cc4e0b3 + languageName: node + linkType: hard + +"vega-runtime@npm:^6.1.4, vega-runtime@npm:~6.1.4": + version: 6.1.4 + resolution: "vega-runtime@npm:6.1.4" + dependencies: + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: a1da40ddb3109f1ced8e61d2e7b52784fbb29936ee4c47cb5630dbbeb12ef6e0c3cd3cd189c34377f82402bf19c61dd148d90330fec743b8667635ac48e4ba29 + languageName: node + linkType: hard + +"vega-scale@npm:^7.3.0, vega-scale@npm:~7.3.0": + version: 7.3.0 + resolution: "vega-scale@npm:7.3.0" + dependencies: + d3-array: ^3.2.2 + d3-interpolate: ^3.0.1 + d3-scale: ^4.0.2 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: 8e434f27a51a913dd18374ec0d2bc33758eda7db1ee6342721644f977e705268b8df6b3e89813774d776d03a0cd24f91d4d59f9e80951f67dfbbf8637f5a69ad + languageName: node + linkType: hard + +"vega-scenegraph@npm:^4.10.2, vega-scenegraph@npm:^4.9.2, vega-scenegraph@npm:~4.10.2": + version: 4.10.2 + resolution: "vega-scenegraph@npm:4.10.2" + dependencies: + d3-path: ^3.1.0 + d3-shape: ^3.2.0 + vega-canvas: ^1.2.7 + vega-loader: ^4.5.1 + vega-scale: ^7.3.0 + vega-util: ^1.17.1 + checksum: 6caf3e298297b918c8b6a72f019e51e2bfbaecd316e4d1c37d855ac9366d177cdbf16e9c8857c5ccde128bcd9645af7ee7dc81111bcd743d192e1a3b9a9d7185 + languageName: node + linkType: hard + +"vega-selections@npm:^5.4.1": + version: 5.4.1 + resolution: "vega-selections@npm:5.4.1" + dependencies: + d3-array: 3.2.2 + vega-expression: ^5.0.1 + vega-util: ^1.17.1 + checksum: c594d41ec3886af94976e4dc4e152bea9b3975a22d435aa38dac2aab105851cb83fd4aa0f1e81a47f8bc0bea1677af93816331e3ed084ab3ec2e51b3544c109f + languageName: node + linkType: hard + +"vega-statistics@npm:^1.7.9, vega-statistics@npm:^1.8.1, vega-statistics@npm:^1.9.0, vega-statistics@npm:~1.9.0": + version: 1.9.0 + resolution: "vega-statistics@npm:1.9.0" + dependencies: + d3-array: ^3.2.2 + checksum: bbf2ea088c5a6a662c6aed1bf57996c06a82a98228730ada8a97e57824a6ed391999ea974f16dcde6e73bf88799976d91aff748842848d38ab45dbb9fafba3f9 + languageName: node + linkType: hard + +"vega-time@npm:^2.1.1, vega-time@npm:~2.1.1": + version: 2.1.1 + resolution: "vega-time@npm:2.1.1" + dependencies: + d3-array: ^3.2.2 + d3-time: ^3.1.0 + vega-util: ^1.17.1 + checksum: 3d6a50f779be4b5e7f27bd2aae766035c29e59e03e62d2e96b94a2f759ed3104c1102c1006dd416e7b819ee501880ae7a722c2fa9aabf9efac86503c1aada14a + languageName: node + linkType: hard + +"vega-transforms@npm:~4.10.2": + version: 4.10.2 + resolution: "vega-transforms@npm:4.10.2" + dependencies: + d3-array: ^3.2.2 + vega-dataflow: ^5.7.5 + vega-statistics: ^1.8.1 + vega-time: ^2.1.1 + vega-util: ^1.17.1 + checksum: 2dbe4c767542a5dc4dbb453fd1317b00912e47dbdb3de637259b2552497dd8039c20c795318ad57341eb0d30b69712c55a2da16dc9ad2329a68c35fb75b4fee6 + languageName: node + linkType: hard + +"vega-typings@npm:~0.24.0": + version: 0.24.2 + resolution: "vega-typings@npm:0.24.2" + dependencies: + "@types/geojson": 7946.0.4 + vega-event-selector: ^3.0.1 + vega-expression: ^5.0.1 + vega-util: ^1.17.1 + checksum: 9c06430b2c8a5e6a8b29448333aa95b0946aa69c181933f52eb69f0e3594a0f308be7760f0febe13253a0b7414721841fce790b2b3812a7fb3b0a3f0391e6ace + languageName: node + linkType: hard + +"vega-util@npm:^1.15.2, vega-util@npm:^1.17.1, vega-util@npm:~1.17.2": + version: 1.17.2 + resolution: "vega-util@npm:1.17.2" + checksum: 5d681cb1a6ffda7af1b74df7c1c46a32f1d874daef54f9c9c65c7d7c7bfc4271dc6d9b1c1c7a853b14eb6e4cc8ec811b0132cd3ea25fa85259eac92e1b4f07fa + languageName: node + linkType: hard + +"vega-view-transforms@npm:~4.5.9": + version: 4.5.9 + resolution: "vega-view-transforms@npm:4.5.9" + dependencies: + vega-dataflow: ^5.7.5 + vega-scenegraph: ^4.10.2 + vega-util: ^1.17.1 + checksum: aeeaf3c2f1a02b1303c16a586dbcb20f208c101d06d7e988e18ab71fb67d87be5d8ff228ebf25971535d6e41dc816168cfa68b8676e7250df07a40aefdea32a7 + languageName: node + linkType: hard + +"vega-view@npm:~5.11.1": + version: 5.11.1 + resolution: "vega-view@npm:5.11.1" + dependencies: + d3-array: ^3.2.2 + d3-timer: ^3.0.1 + vega-dataflow: ^5.7.5 + vega-format: ^1.1.1 + vega-functions: ^5.13.1 + vega-runtime: ^6.1.4 + vega-scenegraph: ^4.10.2 + vega-util: ^1.17.1 + checksum: 82ddc74593b3a359d0b3458bc06573673ff9bf13f84020cb36fb4676c5d7f547e9650eb6faaa76799fbcedd27bcd266603dbd08c420e2d2229cc6b9f48a4a66d + languageName: node + linkType: hard + +"vega-voronoi@npm:~4.2.1": + version: 4.2.1 + resolution: "vega-voronoi@npm:4.2.1" + dependencies: + d3-delaunay: ^6.0.2 + vega-dataflow: ^5.7.5 + vega-util: ^1.17.1 + checksum: f618174ad5f451c507a80e373288bb2c0da7a8a908d62f885bc77b354c4334504ae2d1042742f68ad419ade7b548aeca9ca1042ae5541bebd7f5297afc23bb35 + languageName: node + linkType: hard + +"vega-wordcloud@npm:~4.1.4": + version: 4.1.4 + resolution: "vega-wordcloud@npm:4.1.4" + dependencies: + vega-canvas: ^1.2.7 + vega-dataflow: ^5.7.5 + vega-scale: ^7.3.0 + vega-statistics: ^1.8.1 + vega-util: ^1.17.1 + checksum: 34d1882651d3a2f34ce40a6eaeed700de126f627cdf041ec2bcc7ada46d7b4b68a38a2974236eec87ee876d9abd095af7ab17e7698b0e2fbc831460767969d7a + languageName: node + linkType: hard + +"vega@npm:^5.20.0": + version: 5.25.0 + resolution: "vega@npm:5.25.0" + dependencies: + vega-crossfilter: ~4.1.1 + vega-dataflow: ~5.7.5 + vega-encode: ~4.9.2 + vega-event-selector: ~3.0.1 + vega-expression: ~5.1.0 + vega-force: ~4.2.0 + vega-format: ~1.1.1 + vega-functions: ~5.13.2 + vega-geo: ~4.4.1 + vega-hierarchy: ~4.1.1 + vega-label: ~1.2.1 + vega-loader: ~4.5.1 + vega-parser: ~6.2.0 + vega-projection: ~1.6.0 + vega-regression: ~1.2.0 + vega-runtime: ~6.1.4 + vega-scale: ~7.3.0 + vega-scenegraph: ~4.10.2 + vega-statistics: ~1.9.0 + vega-time: ~2.1.1 + vega-transforms: ~4.10.2 + vega-typings: ~0.24.0 + vega-util: ~1.17.2 + vega-view: ~5.11.1 + vega-view-transforms: ~4.5.9 + vega-voronoi: ~4.2.1 + vega-wordcloud: ~4.1.4 + checksum: ddc7b1f2a70c72b842e111d32bdd8ff050992a50e385e8ddc6e35c02e7c481a652383c81c547b7ebfd31cda04ab9f9acf0a8cc47c6bd19b91765b254aac30d24 + languageName: node + linkType: hard + "vscode-jsonrpc@npm:8.2.0, vscode-jsonrpc@npm:^8.0.2": version: 8.2.0 resolution: "vscode-jsonrpc@npm:8.2.0" @@ -10217,16 +11703,16 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.11": - version: 1.1.11 - resolution: "which-typed-array@npm:1.1.11" +"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "which-typed-array@npm:1.1.13" dependencies: available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 + call-bind: ^1.0.4 for-each: ^0.3.3 gopd: ^1.0.1 has-tostringtag: ^1.0.0 - checksum: 711ffc8ef891ca6597b19539075ec3e08bb9b4c2ca1f78887e3c07a977ab91ac1421940505a197758fb5939aa9524976d0a5bbcac34d07ed6faa75cedbb17206 + checksum: 3828a0d5d72c800e369d447e54c7620742a4cc0c9baf1b5e8c17e9b6ff90d8d861a3a6dd4800f1953dbf80e5e5cec954a289e5b4a223e3bee4aeb1f8c5f33309 languageName: node linkType: hard @@ -10263,6 +11749,17 @@ __metadata: languageName: node linkType: hard +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: ^3.1.1 + bin: + node-which: bin/which.js + checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 + languageName: node + linkType: hard + "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" @@ -10494,7 +11991,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.6.2": +"yargs@npm:^17.6.2, yargs@npm:~17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: diff --git a/tests/test_contentsmanager.py b/tests/test_contentsmanager.py index 1a9ec42e4..19556a671 100644 --- a/tests/test_contentsmanager.py +++ b/tests/test_contentsmanager.py @@ -1857,12 +1857,22 @@ def test_new_untitled(tmpdir): assert untitled assert ext == "ipynb" + # Jupytext related files assert cm.new_untitled(type="notebook", ext=".md")["path"] == untitled + "1.md" assert cm.new_untitled(type="notebook", ext=".py")["path"] == untitled + "2.py" - assert cm.new_untitled(type="notebook")["path"] == untitled + "3.ipynb" + assert cm.new_untitled(type="notebook", ext=".md:myst")["path"] == untitled + "3.md" assert ( cm.new_untitled(type="notebook", ext=".py:percent")["path"] == untitled + "4.py" ) + assert cm.new_untitled(type="notebook", ext=".Rmd")["path"] == untitled + "5.Rmd" + + # Test native formats that should not be changed by Jupytext and model should + # not contain any Jupytext metadata neither file name should start with Uppercase + for ext in [".py", ".md"]: + model = cm.new_untitled(type="file", ext=ext) + assert model["content"] is None + assert model["path"] == f"untitled{ext}" + assert cm.new_untitled(type="directory")["path"] == "Untitled Folder" def test_nested_prefix(tmpdir):