-Paste the output from running `jupyter troubleshoot` from the command line here.
-You may want to sanitize the paths in the output.
-
-
-
-Command Line Output
-
-Paste the output from your command line running `jupyter notebook` here, use `--debug` if possible.
-
-
-
-Browser Output
-
-
-Paste the output from your browser Javascript console here, if applicable.
-
-
-
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
deleted file mode 100644
index 3fb09a63d..000000000
--- a/.github/ISSUE_TEMPLATE/config.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-blank_issues_enabled: false
-contact_links:
- - name: Is this a common issue? See our Docs.
- url: https://jupyter-notebook.readthedocs.io/en/latest/troubleshooting.html#what-to-do-when-things-go-wrong
- about: Before opening an issue, make sure your issue hasn't already been addressed in the documentation.
- - name: 馃 Support and all other questions, including if you're not sure what to do.
- url: https://discourse.jupyter.org/c/notebook/31
- about: If you have a question or you're having issues installing Jupyter Notebook, try posting on Discourse.
- - name: 馃挰 Chat with the devs
- url: https://jupyter.zulipchat.com/
- about: Ask short questions about using Jupyter Notebook
- - name: 馃摑 Do you have a feature request that may be applied upstream? See JupyterLab.
- url: https://github.com/jupyterlab/jupyterlab
- about: We recommend that you cross-reference JupyterLab for information when requesting new features and support for Notebook 7. We won't likely accept new features for Jupyter Notebook 6.x.
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
deleted file mode 100644
index 4904f7223..000000000
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ /dev/null
@@ -1,41 +0,0 @@
----
-name: "\U0001F680 Feature Request"
-about: Suggest a new feature or a change
-labels: enhancement, status:Needs Triage
----
-
-
-
-
-
-### Problem
-
-
-
-### Proposed Solution
-
-
-
-### Additional context
-
-
diff --git a/.github/actions/build-dist/action.yml b/.github/actions/build-dist/action.yml
deleted file mode 100644
index 4747b6954..000000000
--- a/.github/actions/build-dist/action.yml
+++ /dev/null
@@ -1,44 +0,0 @@
-name: 'Build Jupyter Notebook'
-description: 'Build Jupyter Notebook from source'
-runs:
- using: 'composite'
- steps:
- - name: Base Setup
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
-
- - name: Install dependencies
- shell: bash
- run: |
- python -m pip install hatch
-
- - name: Build pypi distributions
- shell: bash
- run: |
- hatch build
-
- - name: Build npm distributions
- shell: bash
- run: |
- mkdir pkgs
- hatch run npm_pack
- cp packages/*/*.tgz pkgs
-
- - name: Build checksum file
- shell: bash
- run: |
- cd dist
- sha256sum * | tee SHA256SUMS
- cd ../pkgs
- sha256sum * | tee SHA256SUMS
-
- - name: Upload distributions
- uses: actions/upload-artifact@v4
- with:
- name: notebook-dist-${{ github.run_number }}
- path: ./dist
-
- - name: Upload distributions
- uses: actions/upload-artifact@v4
- with:
- name: notebook-pkgs-${{ github.run_number }}
- path: ./pkgs
diff --git a/.github/answered.yml b/.github/answered.yml
deleted file mode 100644
index e01cf284c..000000000
--- a/.github/answered.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-# This action automatically schedules issues to be closed that have been
-# labeled as answered if there is no activity on them for 30 days. This takes
-# care of the common usecase of an issue being answered to the best of our
-# ability and no other follow-up from the submitter.
-name: 'Close answered issues'
-on:
- schedule:
- - cron: '30 1 * * *'
-
-jobs:
- stale:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/stale@v3
- with:
- skip-stale-issue-message: true
- days-before-stale: 30
- days-before-close: 7
- stale-issue-label: 'status:Closing as Answered'
- only-issue-labels: 'status:Answered'
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index 7bec22842..000000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-version: 2
-updates:
- - package-ecosystem: 'github-actions'
- directory: '/'
- schedule:
- interval: 'weekly'
- groups:
- actions:
- patterns:
- - "*"
- - package-ecosystem: 'pip'
- directory: '/'
- schedule:
- interval: 'weekly'
diff --git a/.github/jupyterlab-probot.yml b/.github/jupyterlab-probot.yml
deleted file mode 100644
index bc128e667..000000000
--- a/.github/jupyterlab-probot.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-addBinderLink: false
-triageLabel: 'status:Needs Triage'
diff --git a/.github/workflows/auto_author_assign.yml b/.github/workflows/auto_author_assign.yml
deleted file mode 100644
index 5d16e8d48..000000000
--- a/.github/workflows/auto_author_assign.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# https://github.com/marketplace/actions/auto-author-assign
-name: 'Auto Author Assign'
-
-on:
- pull_request_target:
- types: [opened, reopened]
-
-permissions:
- contents: read
-
-jobs:
- assign-author:
- runs-on: ubuntu-latest
- permissions:
- pull-requests: write
- steps:
- - uses: toshimaru/auto-author-assign@v2.1.1
diff --git a/.github/workflows/binder.yml b/.github/workflows/binder.yml
deleted file mode 100644
index 1ff492bb0..000000000
--- a/.github/workflows/binder.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-name: Binder Badge
-on:
- pull_request_target:
- types: [opened]
-
-permissions:
- contents: read
-
-jobs:
- binder:
- runs-on: ubuntu-latest
- permissions:
- pull-requests: write
- steps:
- - uses: jupyterlab/maintainer-tools/.github/actions/binder-link@v1
- with:
- github_token: ${{ secrets.github_token }}
- url_path: tree
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
deleted file mode 100644
index f2963ebd1..000000000
--- a/.github/workflows/build.yml
+++ /dev/null
@@ -1,214 +0,0 @@
-name: Build
-
-on:
- push:
- branches: ['main']
- pull_request:
- schedule:
- - cron: '0 0 * * *'
-
-permissions:
- contents: read
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
- cancel-in-progress: true
-
-env:
- PIP_DISABLE_PIP_VERSION_CHECK: 1
-
-defaults:
- run:
- shell: bash -eux {0}
-
-jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v6
-
- - name: Build
- uses: ./.github/actions/build-dist
-
- test:
- runs-on: ubuntu-latest
- timeout-minutes: 20
- strategy:
- fail-fast: false
- matrix:
- # used by the jupyterlab/maintainer-tools base-setup action
- python-version: ['3.9', '3.10', '3.11', '3.12', '3.13']
- steps:
- - name: Checkout
- uses: actions/checkout@v6
-
- - name: Base Setup
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
-
- - name: Test the package
- run: hatch run cov:test
-
- - name: JavaScript tests
- run: |
- hatch run js_test
-
- - name: Integration Tests
- run: |
- pip install .
- cd
- jupyter labextension list 2>&1 | grep -ie "@jupyter-notebook/lab-extension.*enabled.*ok" -
- jupyter server extension list 2>&1 | grep -ie "notebook.*enabled" -
- python -m jupyterlab.browser_check
-
- - uses: jupyterlab/maintainer-tools/.github/actions/upload-coverage@v1
-
- coverage:
- runs-on: ubuntu-latest
- needs:
- - test
- steps:
- - uses: actions/checkout@v6
- - uses: jupyterlab/maintainer-tools/.github/actions/report-coverage@v1
- with:
- fail_under: 78
-
- test_docs:
- name: Test Docs
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v6
- - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
- - run: |
- sudo apt-get update
- sudo apt install enchant-2 # for spelling
-
- # pandoc is not up to date in the ubuntu repos, so we install directly
- wget https://github.com/jgm/pandoc/releases/download/2.14.2/pandoc-2.14.2-1-amd64.deb && sudo dpkg -i pandoc-2.14.2-1-amd64.deb
- - run: hatch run docs:build
-
- test_minimum_versions:
- name: Test Minimum Versions
- timeout-minutes: 20
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v6
- - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
- with:
- dependency_type: minimum
- python_version: '3.10'
- - name: Run the unit tests
- run: |
- hatch run test:nowarn || hatch run test:nowarn --lf
-
- test_prereleases:
- name: Test Prereleases
- runs-on: ubuntu-latest
- timeout-minutes: 20
- steps:
- - uses: actions/checkout@v6
- - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
- with:
- dependency_type: pre
- - name: Run the tests
- run: |
- hatch run test:nowarn || hatch run test:nowarn --lf
-
- install:
- needs: [build]
- runs-on: ${{ matrix.os }}
- timeout-minutes: 15
- strategy:
- fail-fast: false
- matrix:
- os: [ubuntu-latest, macos-latest, windows-latest]
- python: ['3.9', '3.11', '3.13']
- include:
- - python: '3.9'
- dist: 'notebook*.tar.gz'
- - python: '3.11'
- dist: 'notebook*.whl'
- - python: '3.13'
- dist: 'notebook*.whl'
- - os: windows-latest
- py_cmd: python
- - os: macos-latest
- py_cmd: python3
- - os: ubuntu-latest
- py_cmd: python
- steps:
- - name: Install Python
- uses: actions/setup-python@v6
- with:
- python-version: ${{ matrix.python }}
- allow-prereleases: true
- - uses: actions/download-artifact@v6
- with:
- name: notebook-dist-${{ github.run_number }}
- path: ./dist
- - name: Install the prerequisites
- run: |
- ${{ matrix.py_cmd }} -m pip install -U pip wheel
- - name: Install the package
- run: |
- cd dist
- ${{ matrix.py_cmd }} -m pip install -vv ${{ matrix.dist }}
- - name: Validate environment
- run: |
- ${{ matrix.py_cmd }} -m pip freeze
- ${{ matrix.py_cmd }} -m pip check
- - name: Validate the install
- run: |
- jupyter labextension list
- jupyter labextension list 2>&1 | grep -ie "@jupyter-notebook/lab-extension.*enabled.*ok" -
- jupyter server extension list
- jupyter server extension list 2>&1 | grep -ie "notebook.*enabled" -
- jupyter notebook --version
- jupyter notebook --help
-
- check_links:
- runs-on: ubuntu-latest
- timeout-minutes: 10
- steps:
- - uses: actions/checkout@v6
- - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
- - uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1
- with:
- ignore_links: 'https://playwright.dev/docs/test-cli/ https://blog.jupyter.org/.* https://mybinder.org/v2/gh/jupyter/notebook/main https://nbviewer.jupyter.org https://stackoverflow.com https://github.com/[^/]+/?$'
- ignore_glob: 'ui-tests/test/notebooks/*'
-
- test_lint:
- name: Test Lint
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v6
- - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
- - name: Run Linters
- run: |
- hatch run typing:test
- hatch run lint:build
- pipx run interrogate -v .
- pipx run doc8 --max-line-length=200 docs/source *.md
- npm install -g yarn
- yarn
- yarn eslint:check
- yarn prettier:check
- yarn build:utils
- yarn integrity
-
- tests_check: # This job does nothing and is only used for the branch protection
- if: always()
- needs:
- - coverage
- - install
- - test_lint
- - test_docs
- - test_minimum_versions
- - test_prereleases
- - check_links
- runs-on: ubuntu-latest
- steps:
- - name: Decide whether the needed jobs succeeded or failed
- uses: re-actors/alls-green@release/v1
- with:
- jobs: ${{ toJSON(needs) }}
diff --git a/.github/workflows/buildutils.yml b/.github/workflows/buildutils.yml
deleted file mode 100644
index ab59fd96a..000000000
--- a/.github/workflows/buildutils.yml
+++ /dev/null
@@ -1,84 +0,0 @@
-name: Build Utilities
-
-on:
- push:
- branches: ['main']
- pull_request:
-
-defaults:
- run:
- shell: bash -l {0}
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
- cancel-in-progress: true
-
-permissions:
- contents: read
-
-jobs:
- versioning:
- runs-on: ubuntu-latest
- timeout-minutes: 10
- steps:
- - name: Checkout
- uses: actions/checkout@v6
-
- - name: Base Setup
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
-
- - name: Install dependencies
- run: |
- python -m pip install -U "jupyterlab>=4.6.0a0,<4.7" hatch
- jlpm
- jlpm run build
-
- - name: Configure git identity to commit
- run: |
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
-
- - name: Reset version
- run: |
- hatch version 9.8.7
- jlpm run lerna version 9.8.7 --no-push --force-publish --no-git-tag-version --yes
- git commit -am "Release 9.8.7"
-
- - name: Patch Release
- run: |
- jlpm release:patch --force
-
- - name: Minor Release
- run: |
- jlpm release:bump minor --force
-
- - name: Release Cycle
- run: |
- # beta
- jlpm release:bump release --force
- # rc
- jlpm release:bump release --force
- # final
- jlpm release:bump release --force
-
- - name: Major Release
- run: |
- jlpm release:bump major --force
-
- npm:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v6
-
- - name: Install Python
- uses: actions/setup-python@v6
- with:
- python-version: '3.10'
- architecture: 'x64'
-
- - name: Install dependencies
- run: |
- python -m pip install -U "jupyterlab>=4.6.0a0,<4.7" pip
- jlpm
- jlpm run build
diff --git a/.github/workflows/check-release.yml b/.github/workflows/check-release.yml
deleted file mode 100644
index ef463c60a..000000000
--- a/.github/workflows/check-release.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-name: Check Release
-on:
- push:
- branches: ['main']
- pull_request:
-
-permissions:
- contents: read
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
- cancel-in-progress: true
-
-jobs:
- check_release:
- runs-on: ubuntu-latest
- timeout-minutes: 30
- steps:
- - name: Checkout
- uses: actions/checkout@v6
- - name: Base Setup
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
- - name: Check Release
- uses: jupyter-server/jupyter_releaser/.github/actions/check-release@v2
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- version_spec: next
-
- - name: Upload Distributions
- uses: actions/upload-artifact@v5
- with:
- name: notebook-jupyter-releaser-dist-${{ github.run_number }}
- path: .jupyter_releaser_checkout/dist
diff --git a/.github/workflows/enforce-label.yml b/.github/workflows/enforce-label.yml
deleted file mode 100644
index 2217a7b76..000000000
--- a/.github/workflows/enforce-label.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: Enforce PR label
-
-permissions:
- contents: read
-
-on:
- pull_request:
- types: [labeled, unlabeled, opened, edited, synchronize]
-jobs:
- enforce-label:
- runs-on: ubuntu-latest
- permissions:
- pull-requests: write
- steps:
- - name: enforce-triage-label
- uses: jupyterlab/maintainer-tools/.github/actions/enforce-label@v1
diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml
deleted file mode 100644
index a0b1b732b..000000000
--- a/.github/workflows/lock.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-name: 'Lock Closed Threads'
-
-on:
- schedule:
- - cron: '0 0 * * *'
-
-permissions:
- contents: read
-
-jobs:
- lock:
- runs-on: ubuntu-latest
- permissions:
- issues: write
- pull-requests: write
- steps:
- - uses: dessant/lock-threads@v5
- with:
- github-token: ${{ github.token }}
- issue-lock-inactive-days: '180'
- issue-lock-labels: 'status:resolved-locked'
- pr-lock-inactive-days: '180'
- pr-lock-labels: 'status:resolved-locked'
diff --git a/.github/workflows/playwright-update.yml b/.github/workflows/playwright-update.yml
deleted file mode 100644
index 4df92af12..000000000
--- a/.github/workflows/playwright-update.yml
+++ /dev/null
@@ -1,117 +0,0 @@
-name: Update Playwright Snapshots
-
-on:
- issue_comment:
- types: [created, edited]
-
-permissions:
- contents: read
-
-jobs:
- update-snapshots:
- if: >
- (
- github.event.issue.author_association == 'OWNER' ||
- github.event.issue.author_association == 'COLLABORATOR' ||
- github.event.issue.author_association == 'MEMBER' ||
- github.event.comment.author_association == 'OWNER' ||
- github.event.comment.author_association == 'COLLABORATOR' ||
- github.event.comment.author_association == 'MEMBER'
- ) && github.event.issue.pull_request && (
- contains(github.event.comment.body, 'please update playwright snapshots') ||
- contains(github.event.comment.body, 'please update galata snapshots') ||
- contains(github.event.comment.body, 'please update snapshots')
- )
- runs-on: ubuntu-latest
- permissions:
- # Required by actions/update-snapshots
- contents: write
- pull-requests: write
- strategy:
- fail-fast: false
- matrix:
- browser: [firefox, chromium]
-
- steps:
- - name: Checkout
- uses: actions/checkout@v6
-
- - name: React to the triggering comment
- run: |
- gh api repos/${{ github.repository }}/issues/comments/${{ github.event.comment.id }}/reactions --raw-field 'content=+1'
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Configure git to use https
- run: git config --global hub.protocol https
-
- - name: Get PR Info
- id: pr
- env:
- PR_NUMBER: ${{ github.event.issue.number }}
- GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- GH_REPO: ${{ github.repository }}
- COMMENT_AT: ${{ github.event.comment.created_at }}
- run: |
- pr="$(gh api /repos/${GH_REPO}/pulls/${PR_NUMBER})"
- head_sha="$(echo "$pr" | jq -r .head.sha)"
- pushed_at="$(echo "$pr" | jq -r .pushed_at)"
-
- if [[ $(date -d "$pushed_at" +%s) -gt $(date -d "$COMMENT_AT" +%s) ]]; then
- echo "Updating is not allowed because the PR was pushed to (at $pushed_at) after the triggering comment was issued (at $COMMENT_AT)"
- exit 1
- fi
-
- echo "head_sha=$head_sha" >> $GITHUB_OUTPUT
-
- - name: Checkout the branch from the PR that triggered the job
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: gh pr checkout ${{ github.event.issue.number }}
-
- - name: Validate the fetched branch HEAD revision
- env:
- EXPECTED_SHA: ${{ steps.pr.outputs.head_sha }}
- run: |
- actual_sha="$(git rev-parse HEAD)"
-
- if [[ "$actual_sha" != "$EXPECTED_SHA" ]]; then
- echo "The HEAD of the checked out branch ($actual_sha) differs from the HEAD commit available at the time when trigger comment was submitted ($EXPECTED_SHA)"
- exit 1
- fi
-
- - name: Base Setup
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
-
- - name: Build
- uses: ./.github/actions/build-dist
-
- - uses: actions/download-artifact@v6
- with:
- name: notebook-dist-${{ github.run_number }}
- path: ./dist
-
- - name: Install the package
- run: |
- cd dist
- python -m pip install -vv notebook*.whl
-
- # disable git hooks
- git config core.hooksPath no-hooks
-
- - name: Install the test dependencies
- run: |
- cd ui-tests
- jlpm
- jlpm playwright install
-
- - name: Update snapshots
- uses: jupyterlab/maintainer-tools/.github/actions/update-snapshots@v1
- with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- npm_client: jlpm
- test_folder: ui-tests
- start_server_script: 'null'
- update_script: test:update --browser ${{ matrix.browser }}
- env:
- DEBUG: pw:webserver
diff --git a/.github/workflows/prep-release.yml b/.github/workflows/prep-release.yml
deleted file mode 100644
index 396330bb9..000000000
--- a/.github/workflows/prep-release.yml
+++ /dev/null
@@ -1,49 +0,0 @@
-name: "Step 1: Prep Release"
-on:
- workflow_dispatch:
- inputs:
- version_spec:
- description: "New Version Specifier"
- default: "next"
- required: false
- branch:
- description: "The branch to target"
- required: false
- post_version_spec:
- description: "Post Version Specifier"
- required: false
- silent:
- description: "Set a placeholder in the changelog and don't publish the release."
- required: false
- type: boolean
- since:
- description: "Use PRs with activity since this date or git reference"
- required: false
- since_last_stable:
- description: "Use PRs with activity since the last stable git tag"
- required: false
- type: boolean
-jobs:
- prep_release:
- runs-on: ubuntu-latest
- permissions:
- contents: write
- steps:
- - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
-
- - name: Prep Release
- id: prep-release
- uses: jupyter-server/jupyter_releaser/.github/actions/prep-release@v2
- with:
- token: ${{ secrets.GITHUB_TOKEN }}
- version_spec: ${{ github.event.inputs.version_spec }}
- silent: ${{ github.event.inputs.silent }}
- post_version_spec: ${{ github.event.inputs.post_version_spec }}
- target: ${{ github.event.inputs.target }}
- branch: ${{ github.event.inputs.branch }}
- since: ${{ github.event.inputs.since }}
- since_last_stable: ${{ github.event.inputs.since_last_stable }}
-
- - name: "** Next Step **"
- run: |
- echo "Optional): Review Draft Release: ${{ steps.prep-release.outputs.release_url }}"
diff --git a/.github/workflows/publish-changelog.yml b/.github/workflows/publish-changelog.yml
deleted file mode 100644
index c576a5487..000000000
--- a/.github/workflows/publish-changelog.yml
+++ /dev/null
@@ -1,34 +0,0 @@
-name: "Publish Changelog"
-on:
- release:
- types: [published]
-
- workflow_dispatch:
- inputs:
- branch:
- description: "The branch to target"
- required: false
-
-jobs:
- publish_changelog:
- runs-on: ubuntu-latest
- environment: release
- steps:
- - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
-
- - uses: actions/create-github-app-token@v2
- id: app-token
- with:
- app-id: ${{ vars.APP_ID }}
- private-key: ${{ secrets.APP_PRIVATE_KEY }}
-
- - name: Publish changelog
- id: publish-changelog
- uses: jupyter-server/jupyter_releaser/.github/actions/publish-changelog@v2
- with:
- token: ${{ steps.app-token.outputs.token }}
- branch: ${{ github.event.inputs.branch }}
-
- - name: "** Next Step **"
- run: |
- echo "Merge the changelog update PR: ${{ steps.publish-changelog.outputs.pr_url }}"
diff --git a/.github/workflows/publish-release.yml b/.github/workflows/publish-release.yml
deleted file mode 100644
index 5235ff4df..000000000
--- a/.github/workflows/publish-release.yml
+++ /dev/null
@@ -1,60 +0,0 @@
-name: "Step 2: Publish Release"
-on:
- workflow_dispatch:
- inputs:
- branch:
- description: "The target branch"
- required: false
- release_url:
- description: "The URL of the draft GitHub release"
- required: false
- steps_to_skip:
- description: "Comma separated list of steps to skip"
- required: false
-
-jobs:
- publish_release:
- runs-on: ubuntu-latest
- environment: release
- permissions:
- id-token: write
- steps:
- - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
- with:
- node_version: '24'
-
- - uses: actions/create-github-app-token@v2
- id: app-token
- with:
- app-id: ${{ vars.APP_ID }}
- private-key: ${{ secrets.APP_PRIVATE_KEY }}
-
- - name: Populate Release
- id: populate-release
- uses: jupyter-server/jupyter_releaser/.github/actions/populate-release@v2
- with:
- token: ${{ steps.app-token.outputs.token }}
- branch: ${{ github.event.inputs.branch }}
- release_url: ${{ github.event.inputs.release_url }}
- steps_to_skip: ${{ github.event.inputs.steps_to_skip }}
-
- - name: Finalize Release
- id: finalize-release
- env:
- NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- uses: jupyter-server/jupyter_releaser/.github/actions/finalize-release@v2
- with:
- token: ${{ steps.app-token.outputs.token }}
- release_url: ${{ steps.populate-release.outputs.release_url }}
-
- - name: "** Next Step **"
- if: ${{ success() }}
- run: |
- echo "Verify the final release"
- echo ${{ steps.finalize-release.outputs.release_url }}
-
- - name: "** Failure Message **"
- if: ${{ failure() }}
- run: |
- echo "Failed to Publish the Draft Release Url:"
- echo ${{ steps.populate-release.outputs.release_url }}
diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml
deleted file mode 100644
index 4a81f4658..000000000
--- a/.github/workflows/ui-tests.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-name: UI Tests
-
-on:
- push:
- branches: ['main']
- pull_request:
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
- cancel-in-progress: true
-
-permissions:
- contents: read
-
-jobs:
- build:
- name: Build
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout
- uses: actions/checkout@v6
-
- - name: Build
- uses: ./.github/actions/build-dist
-
- ui-tests:
- needs: [build]
- runs-on: ubuntu-latest
- timeout-minutes: 20
- strategy:
- fail-fast: false
- matrix:
- browser: [firefox, chromium]
- steps:
- - name: Checkout
- uses: actions/checkout@v6
-
- - name: Base Setup
- uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
-
- - uses: actions/download-artifact@v6
- with:
- name: notebook-dist-${{ github.run_number }}
- path: ./dist
-
- - name: Install the package
- run: |
- cd dist
- python -m pip install -vv notebook*.whl
-
- - name: Install the test dependencies
- run: |
- cd ui-tests
- jlpm
- jlpm playwright install
-
- - name: Test
- run: |
- cd ui-tests
- jlpm test --browser ${{ matrix.browser }}
-
- - name: Upload Playwright Test assets
- if: always()
- uses: actions/upload-artifact@v5
- with:
- name: notebook-${{ matrix.browser }}-test-assets
- path: |
- ui-tests/test-results
-
- - name: Upload Playwright Test report
- if: always()
- uses: actions/upload-artifact@v5
- with:
- name: notebook-${{ matrix.browser }}-test-report
- path: |
- ui-tests/playwright-report
-
- - name: Update snapshots
- if: failure()
- run: |
- cd ui-tests
- # remove previous snapshots from other browser
- jlpm rimraf "test/**/*-snapshots/*.png"
- # generate new snapshots
- jlpm run test:update --browser ${{ matrix.browser }}
-
- - name: Upload updated snapshots
- if: failure()
- uses: actions/upload-artifact@v5
- with:
- name: notebook-${{ matrix.browser }}-updated-snapshots
- path: ui-tests/test
diff --git a/.github/workflows/upgrade-jupyterlab-dependencies.yml b/.github/workflows/upgrade-jupyterlab-dependencies.yml
deleted file mode 100644
index 372834e5b..000000000
--- a/.github/workflows/upgrade-jupyterlab-dependencies.yml
+++ /dev/null
@@ -1,128 +0,0 @@
-name: Check for latest JupyterLab releases
-
-on:
- # schedule:
- # - cron: 30 17 * * *
- workflow_dispatch:
- inputs:
- version:
- description: 'JupyterLab version'
- default: latest
- required: true
- type: string
- branch:
- description: 'The branch to target'
- default: main
- required: false
- type: string
- target_repo:
- description: 'Target repository'
- required: false
- default: jupyter/notebook
- type: string
-
-env:
- version_tag: 'latest'
-
-permissions:
- actions: write
- contents: write
- pull-requests: write
-
-jobs:
- check_for_lab_updates:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout code
- uses: actions/checkout@v6
- with:
- ref: ${{ inputs.branch || 'main' }}
-
- - name: Set up Python
- uses: actions/setup-python@v6
- with:
- python-version: '3.11'
-
- - name: Install Node
- uses: actions/setup-node@v6
- with:
- node-version: '20.x'
-
- - name: Install npm dependencies and build buildutils
- run: |
- python -m pip install -e ".[dev]"
-
- jlpm
- jlpm run build:utils
-
- - name: Check for new releases and update
- shell: bash
- run: |
- set -eux
- for version in ${{ inputs.version || env.version_tag }}
- do
- if [[ "${version}" == "latest" ]]; then
- export LATEST=$(jlpm run get:lab:version --set-version ${version})
- else
- export LATEST=${version}
- fi
- done
-
- echo "latest=${LATEST}" >> $GITHUB_ENV
- jlpm upgrade:lab:dependencies --set-version ${LATEST}
- if [[ ! -z "$(git status --porcelain package.json)" ]]; then
- jlpm
- jlpm deduplicate
-
- cd ui-tests
- jlpm
- jlpm deduplicate
- fi
- - uses: prefix-dev/setup-pixi@v0.9.3
- with:
- pixi-version: v0.41.4
- manifest-path: pyproject.toml
- locked: false
-
- - name: Update pixi.lock
- run: pixi install
-
- - name: Create a PR
- env:
- GITHUB_TOKEN: ${{ secrets.PERSONAL_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
- run: |
- set -eux
-
- export LATEST=${{ env.latest }}
- export BRANCH_NAME=update-to-v${LATEST}
-
- # if resulted in any change:
- if [[ ! -z "$(git status --porcelain package.json)" ]]; then
- # if branch already exists.
- if git ls-remote --heads origin | grep "refs/heads/${BRANCH_NAME}$" > /dev/null; then
- echo "Branch '${BRANCH_NAME}' exists."
- else
- # new branch is created
- git checkout -b "${BRANCH_NAME}"
- git config user.name "github-actions[bot]"
- git config user.email 'github-actions[bot]@users.noreply.github.com'
-
- git commit . -m "Update to JupyterLab v${LATEST}"
-
- git push --set-upstream origin "${BRANCH_NAME}"
-
- PR_ARGS=(
- --base "${{ inputs.branch || 'main' }}"
- --title "Update to JupyterLab v${LATEST}"
- --body "New JupyterLab release [v${LATEST}](https://github.com/jupyterlab/jupyterlab/releases/tag/v${LATEST}) is available. Please review the lock file carefully."
- )
-
- # Add --repo flag only if target_repo is specified
- if [[ -n "${{ inputs.target_repo }}" ]]; then
- PR_ARGS+=(--repo "${{ inputs.target_repo }}")
- fi
-
- gh pr create "${PR_ARGS[@]}"
- fi
- fi
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index e64792f0d..000000000
--- a/.gitignore
+++ /dev/null
@@ -1,20 +0,0 @@
-# Python缓存文件
-__pycache__/
-*.pyc
-*.pyo
-ECHO 处于打开状态。
-# 临时文件
-*.swp
-*.swo
-ECHO 处于打开状态。
-# IDE配置文件
-.vscode/
-.idea/
-ECHO 处于打开状态。
-# 系统文件
-.DS_Store
-Thumbs.db
-ECHO 处于打开状态。
-# 大型依赖目录
-node_modules/
-.yarn/
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
deleted file mode 100644
index 902b27f4d..000000000
--- a/.pre-commit-config.yaml
+++ /dev/null
@@ -1,86 +0,0 @@
-ci:
- autoupdate_schedule: monthly
- autoupdate_commit_msg: 'chore: update pre-commit hooks'
-
-repos:
- - repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v5.0.0
- hooks:
- - id: check-case-conflict
- - id: check-ast
- - id: check-docstring-first
- - id: check-executables-have-shebangs
- - id: check-added-large-files
- - id: check-case-conflict
- - id: check-merge-conflict
- - id: check-json
- - id: check-toml
- - id: check-yaml
- - id: debug-statements
- - id: end-of-file-fixer
- - id: trailing-whitespace
-
- - repo: https://github.com/python-jsonschema/check-jsonschema
- rev: 0.30.0
- hooks:
- - id: check-github-workflows
-
- - repo: https://github.com/codespell-project/codespell
- rev: 'v2.3.0'
- hooks:
- - id: codespell
- args: ['-L', 'hart,noteable', '--skip', "*.spec.ts"]
- exclude: |
- (?x)^(
- yarn.lock|
- pixi.lock|
- binder/example.ipynb|
- docs/source/examples/images/FrontendKernel.graffle/data.plist|
- )$
-
- - repo: https://github.com/pre-commit/mirrors-mypy
- rev: "v1.14.1"
- hooks:
- - id: mypy
- files: "^notebook"
- stages: [manual]
- args: ["--install-types", "--non-interactive"]
- additional_dependencies: ["traitlets>=5.13", "tornado", "jupyter_server>=2.10", "jupyterlab_server>=2.25", "jupyterlab>=4.6.0a0,<4.7"]
-
- - repo: https://github.com/pre-commit/pygrep-hooks
- rev: 'v1.10.0'
- hooks:
- - id: rst-backticks
- - id: rst-directive-colons
- - id: rst-inline-touching-normal
-
- - repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.8.6
- hooks:
- - id: ruff
- types_or: [ python, jupyter ]
- exclude: '^docs/source/examples/Notebook/Importing Notebooks.ipynb'
- args: ['--fix', '--show-fixes']
- - id: ruff-format
- types_or: [ python, jupyter ]
- exclude: '^docs/source/examples/Notebook/Importing Notebooks.ipynb'
-
- - repo: https://github.com/scientific-python/cookie
- rev: '2024.08.19'
- hooks:
- - id: sp-repo-review
- additional_dependencies: ['repo-review[cli]']
-
- - repo: local
- hooks:
- - id: prettier
- name: prettier
- entry: 'npm run prettier:files'
- language: node
- types_or: [json, ts, tsx, javascript, jsx, css, markdown]
- stages: [manual]
- - id: integrity
- name: integrity
- entry: 'npm run integrity --force'
- language: node
- stages: [pre-push]
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index 8eba6956b..000000000
--- a/.prettierignore
+++ /dev/null
@@ -1,12 +0,0 @@
-node_modules
-.mypy_cache
-.ruff_cache
-**/node_modules
-**/lib
-**/package.json
-**/static
-**/labextension
-build
-CHANGELOG.md
-app/index.template.js
-.pixi
diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index 544138be4..000000000
--- a/.prettierrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "singleQuote": true
-}
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
deleted file mode 100644
index 52d94a4a3..000000000
--- a/.readthedocs.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-version: 2
-sphinx:
- configuration: docs/source/conf.py
-build:
- os: ubuntu-22.04
- tools:
- python: '3.9'
- nodejs: '16'
-python:
- install:
- # install notebook itself
- - method: pip
- path: '.[docs]'
diff --git a/.yarnrc.yml b/.yarnrc.yml
deleted file mode 100644
index 72353e525..000000000
--- a/.yarnrc.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-enableImmutableInstalls: false
-enableInlineBuilds: false
-enableTelemetry: false
-httpTimeout: 60000
-nodeLinker: node-modules
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 9a6092566..000000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,3894 +0,0 @@
-# Changelog
-
-A summary of changes in the Jupyter notebook. For more detailed
-information, see [GitHub](https://github.com/jupyter/notebook).
-
-Use `pip install notebook --upgrade` or `conda upgrade notebook` to
-upgrade to the latest release.
-
-We strongly recommend that you upgrade pip to version 9+ of pip before
-upgrading `notebook`.
-
-Use `pip install pip --upgrade` to upgrade pip. Check pip version with
-`pip --version`.
-
-## 7.5
-
-Jupyter Notebook 7.5 is based on JupyterLab 4.5, and includes a number of new features, bug fixes, and enhancements for extension developers. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are recommended to consult the [Extension Migration Guide](https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-4-to-4-5) which lists deprecations and changes to the public API.
-
-Below are a few highlights for this new release. Most of the new features and improvements come from the update to JupyterLab 4.5, although they may not all be supported in Notebook 7.5.
-
-For reference you may have a look at the [JupyterLab 4.5 changelog](https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html#v4-5) to learn more.
-
-### Notebook improvements
-
-The default windowing mode is now `contentVisibility` which improves cell rendering and alleviates previously reported issues. The minimap can be enabled for all windowing modes and all notebooks via the `Settings` menu, or by toggling the minimap per notebook with the `View` -> `Show Minimap` option.
-
-Additional fixes improve layout containment and scrollbar behavior when working with long cells.
-
-### Debugger and console enhancements
-
-The debugger's evaluate dialog has been replaced with an interactive console featuring syntax highlighting and code completion. The variables panel now preserves state when switching editors. Visual improvements include highlighted selected breakpoints, improved empty line handling, and a paused indicator. Debugger panels now reference cell execution counts.
-
-
-
-Log Console users can configure default log levels and customize toolbars.
-
-### Terminal enhancements
-
-The terminal now includes search functionality, with search highlights that adapt to theme changes.
-
-### Media and content support
-
-Built-in audio and video viewers allow direct file playback within Jupyter Notebook.
-
-
-
-### File browser enhancements
-
-- There is a new `allowFileUploads` setting to control upload permissions.
-- Menu options for creating Python, R, or Julia files are now available from the New menu.
-- The "Select All" command is now available with the Ctrl + A (or Cmd + A on macOS) keyboard shortcut in the file browser.
-- Breadcrumbs are now configurable through `breadcrumbsLeftItems` and `breadcrumbsRightItems` settings.
-
-### Settings editor improvements
-
-The `addExtraLineOnCellMerge` setting removes extra lines when merging cells, matching classic notebook behavior.
-
-### Cell toolbar settings
-
-The cell toolbar settings are now exposed in the Settings Editor, making it easier to customize the cell toolbar appearance and behavior.
-
-### Keyboard shortcuts
-
-The `O` key has been defined as the keyboard shortcut to toggle cell outputs, restoring this familiar functionality from the classic notebook.
-
-### User interface and accessibility
-
-Automatic theme switching between light and dark modes is now available when system synchronization is enabled. Dialog components display buttons and checkboxes on separate lines for improved readability. Terminal selections show better visibility under high-contrast themes. Keyboard navigation and status bar tab ordering have been improved.
-
-### Breaking changes
-
-Python 3.8 support has been dropped in this release.
-
-
-
-## 7.6.0a0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.1...e7f5e5d50ea18b0b17fe8a9df674025fcc6ab5d1))
-
-### Maintenance and upkeep improvements
-
-- Bump systeminformation from 5.23.14 to 5.27.14 in /ui-tests [#7788](https://github.com/jupyter/notebook/pull/7788) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab `4.6.0a0` [#7787](https://github.com/jupyter/notebook/pull/7787) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-The following people contributed discussions, new ideas, code and documentation contributions, and review.
-See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/#how-does-this-tool-define-contributions-in-the-reports).
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-12-16&to=2025-12-17&type=c))
-
-@jtpio ([activity](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-12-16..2025-12-17&type=Issues))
-
-
-
-## 7.5.1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.0...fccf56801be0a27a3de76c00d2710a941f255b10))
-
-### Bugs fixed
-
-- Fix selector for the `O` keyboard shortcut [#7782](https://github.com/jupyter/notebook/pull/7782) ([@jtpio](https://github.com/jtpio), [@krassowski](https://github.com/krassowski))
-- Fix missing debugger display provider in Notebook [#7774](https://github.com/jupyter/notebook/pull/7774) ([@arjxn-py](https://github.com/arjxn-py), [@jtpio](https://github.com/jtpio), [@martinRenou](https://github.com/martinRenou))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab v4.5.1 [#7785](https://github.com/jupyter/notebook/pull/7785) ([@jtpio](https://github.com/jtpio))
-- Fix link to the IPython install page [#7783](https://github.com/jupyter/notebook/pull/7783) ([@jtpio](https://github.com/jtpio))
-- Fix `hatch build`, ignore links to `blog.jupyter.org` [#7780](https://github.com/jupyter/notebook/pull/7780) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group with 4 updates [#7773](https://github.com/jupyter/notebook/pull/7773) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-The following people contributed discussions, new ideas, code and documentation contributions, and review.
-See [our definition of contributors](https://github-activity.readthedocs.io/en/latest/#how-does-this-tool-define-contributions-in-the-reports).
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-11-19&to=2025-12-16&type=c))
-
-@arjxn-py ([activity](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aarjxn-py+updated%3A2025-11-19..2025-12-16&type=Issues)) | @jtpio ([activity](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-11-19..2025-12-16&type=Issues)) | @krassowski ([activity](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2025-11-19..2025-12-16&type=Issues)) | @martinRenou ([activity](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AmartinRenou+updated%3A2025-11-19..2025-12-16&type=Issues))
-
-## 7.5.0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0...be53ec8bc96cdbcb64b6f1c5ec39c123c087a348))
-
-### Enhancements made
-
-- Update to JupyterLab v4.5.0b1 [#7746](https://github.com/jupyter/notebook/pull/7746) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.5.0b0 [#7739](https://github.com/jupyter/notebook/pull/7739) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.5.0a4 [#7728](https://github.com/jupyter/notebook/pull/7728) ([@jtpio](https://github.com/jtpio))
-- Increase the checkpoint polling interval to 30s [#7711](https://github.com/jupyter/notebook/pull/7711) ([@jtpio](https://github.com/jtpio))
-- Define `O` as the keyboard shortcut to toggle cell outputs [#7709](https://github.com/jupyter/notebook/pull/7709) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.5.0a3 [#7703](https://github.com/jupyter/notebook/pull/7703) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Expose the cell toolbar settings [#7766](https://github.com/jupyter/notebook/pull/7766) ([@jtpio](https://github.com/jtpio))
-- Handle file rename errors [#7710](https://github.com/jupyter/notebook/pull/7710) ([@jtpio](https://github.com/jtpio))
-- Fix open file with 鈥#鈥 in the filename [#7698](https://github.com/jupyter/notebook/pull/7698) ([@itsmevichu](https://github.com/itsmevichu))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab v4.5.0 [#7768](https://github.com/jupyter/notebook/pull/7768) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.5.0rc1 [#7764](https://github.com/jupyter/notebook/pull/7764) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.5.0rc0 [#7755](https://github.com/jupyter/notebook/pull/7755) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group across 1 directory with 3 updates [#7751](https://github.com/jupyter/notebook/pull/7751) ([@dependabot](https://github.com/dependabot))
-- Use Node.js 24 / npm 11 to publish releases [#7749](https://github.com/jupyter/notebook/pull/7749) ([@jtpio](https://github.com/jtpio))
-- Revert "Pin `click<8.3`" [#7733](https://github.com/jupyter/notebook/pull/7733) ([@jtpio](https://github.com/jtpio))
-- Remove link to `npmjs.com` [#7730](https://github.com/jupyter/notebook/pull/7730) ([@jtpio](https://github.com/jtpio))
-- Pin `click<8.3` [#7729](https://github.com/jupyter/notebook/pull/7729) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group across 1 directory with 3 updates [#7704](https://github.com/jupyter/notebook/pull/7704) ([@dependabot](https://github.com/dependabot))
-- Update to JupyterLab v4.5.0a2 [#7694](https://github.com/jupyter/notebook/pull/7694) ([@jtpio](https://github.com/jtpio))
-- Pin `httpx` [#7691](https://github.com/jupyter/notebook/pull/7691) ([@jtpio](https://github.com/jtpio))
-- Bump prefix-dev/setup-pixi from 0.8.10 to 0.8.11 in the actions group [#7675](https://github.com/jupyter/notebook/pull/7675) ([@dependabot](https://github.com/dependabot))
-- Bump prefix-dev/setup-pixi from 0.8.8 to 0.8.10 in the actions group [#7665](https://github.com/jupyter/notebook/pull/7665) ([@dependabot](https://github.com/dependabot))
-- Bump brace-expansion from 1.1.11 to 1.1.12 in /ui-tests [#7664](https://github.com/jupyter/notebook/pull/7664) ([@dependabot](https://github.com/dependabot))
-- Revert "CI: pin to `jupyter-core<5.8.0` on Windows" [#7657](https://github.com/jupyter/notebook/pull/7657) ([@minrk](https://github.com/minrk))
-- Update to JupyterLab v4.5.0a1 [#7656](https://github.com/jupyter/notebook/pull/7656) ([@jtpio](https://github.com/jtpio))
-- CI: pin to `jupyter-core<5.8.0` on Windows [#7655](https://github.com/jupyter/notebook/pull/7655) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.5.0a0 [#7650](https://github.com/jupyter/notebook/pull/7650) ([@jtpio](https://github.com/jtpio))
-- Run UI tests on `ubuntu-latest` [#7639](https://github.com/jupyter/notebook/pull/7639) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.1 [#7638](https://github.com/jupyter/notebook/pull/7638) ([@jtpio](https://github.com/jtpio))
-- Bump prefix-dev/setup-pixi from 0.8.5 to 0.8.8 in the actions group [#7637](https://github.com/jupyter/notebook/pull/7637) ([@dependabot](https://github.com/dependabot))
-- chore: Fix UP006 [#7633](https://github.com/jupyter/notebook/pull/7633) ([@honnix](https://github.com/honnix))
-- Bump prefix-dev/setup-pixi from 0.8.4 to 0.8.5 in the actions group [#7632](https://github.com/jupyter/notebook/pull/7632) ([@dependabot](https://github.com/dependabot))
-- Drop support for Python 3.8 [#7628](https://github.com/jupyter/notebook/pull/7628) ([@honnix](https://github.com/honnix))
-
-### Documentation improvements
-
-- User facing changelog for 7.5 [#7770](https://github.com/jupyter/notebook/pull/7770) ([@jtpio](https://github.com/jtpio))
-- Clean up references to Gitpod [#7767](https://github.com/jupyter/notebook/pull/7767) ([@jtpio](https://github.com/jtpio))
-- Fix link to Code of Conduct in CONTRIBUTING.md [#7758](https://github.com/jupyter/notebook/pull/7758) ([@jtpio](https://github.com/jtpio))
-- Remove JupyterCon 2025 announcement banner [#7757](https://github.com/jupyter/notebook/pull/7757) ([@jasongrout](https://github.com/jasongrout))
-- Update JupyterCon 2025 announcement links [#7744](https://github.com/jupyter/notebook/pull/7744) ([@krassowski](https://github.com/krassowski))
-- Add JupyterCon banner and add Jupyter colors [#7727](https://github.com/jupyter/notebook/pull/7727) ([@choldgraf](https://github.com/choldgraf))
-- Fix grammatical issues in Contributing.md [#7669](https://github.com/jupyter/notebook/pull/7669) ([@sangampaudel530](https://github.com/sangampaudel530))
-- Fixed grammar and typos in CONTRIBUTING.md [#7645](https://github.com/jupyter/notebook/pull/7645) ([@jchen1223](https://github.com/jchen1223))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-04-09&to=2025-11-19&type=c))
-
-[@afshin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafshin+updated%3A2025-04-09..2025-11-19&type=Issues) | [@choldgraf](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Acholdgraf+updated%3A2025-04-09..2025-11-19&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2025-04-09..2025-11-19&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-04-09..2025-11-19&type=Issues) | [@honnix](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ahonnix+updated%3A2025-04-09..2025-11-19&type=Issues) | [@itsmevichu](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aitsmevichu+updated%3A2025-04-09..2025-11-19&type=Issues) | [@jasongrout](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajasongrout+updated%3A2025-04-09..2025-11-19&type=Issues) | [@jchen1223](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajchen1223+updated%3A2025-04-09..2025-11-19&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-04-09..2025-11-19&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2025-04-09..2025-11-19&type=Issues) | [@lumberbot-app](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Alumberbot-app+updated%3A2025-04-09..2025-11-19&type=Issues) | [@minrk](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aminrk+updated%3A2025-04-09..2025-11-19&type=Issues) | [@nkn2022](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ankn2022+updated%3A2025-04-09..2025-11-19&type=Issues) | [@sangampaudel530](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Asangampaudel530+updated%3A2025-04-09..2025-11-19&type=Issues)
-
-## 7.5.0rc1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.0-rc.0...7533ccab5e4adc765e57a35b1791850daf952044))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab v4.5.0rc1 [#7764](https://github.com/jupyter/notebook/pull/7764) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group across 1 directory with 3 updates [#7751](https://github.com/jupyter/notebook/pull/7751) ([@dependabot](https://github.com/dependabot))
-
-### Documentation improvements
-
-- Fix link to Code of Conduct in CONTRIBUTING.md [#7758](https://github.com/jupyter/notebook/pull/7758) ([@jtpio](https://github.com/jtpio))
-- Remove JupyterCon 2025 announcement banner [#7757](https://github.com/jupyter/notebook/pull/7757) ([@jasongrout](https://github.com/jasongrout))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-11-03&to=2025-11-14&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2025-11-03..2025-11-14&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-11-03..2025-11-14&type=Issues) | [@jasongrout](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajasongrout+updated%3A2025-11-03..2025-11-14&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-11-03..2025-11-14&type=Issues)
-
-## 7.5.0rc0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.0-beta.1...18ba796a58402999044b7e8c4401319b76fed0ce))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab v4.5.0rc0 [#7755](https://github.com/jupyter/notebook/pull/7755) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-10-20&to=2025-11-03&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2025-10-20..2025-11-03&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-10-20..2025-11-03&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-10-20..2025-11-03&type=Issues)
-
-## 7.5.0b1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.0-beta.0...7f84b95ed6550508f9de03d27cd8c2cb84777648))
-
-### Enhancements made
-
-- Update to JupyterLab v4.5.0b1 [#7746](https://github.com/jupyter/notebook/pull/7746) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Use Node.js 24 / npm 11 to publish releases [#7749](https://github.com/jupyter/notebook/pull/7749) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Update JupyterCon 2025 announcement links [#7744](https://github.com/jupyter/notebook/pull/7744) ([@krassowski](https://github.com/krassowski))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-09-29&to=2025-10-20&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-09-29..2025-10-20&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-09-29..2025-10-20&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2025-09-29..2025-10-20&type=Issues) | [@nkn2022](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ankn2022+updated%3A2025-09-29..2025-10-20&type=Issues)
-
-## 7.5.0b0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.0-alpha.3...828708ec26cc4d2ff9f8b725b00024481ae42d2d))
-
-### Enhancements made
-
-- Update to JupyterLab v4.5.0b0 [#7739](https://github.com/jupyter/notebook/pull/7739) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Add JupyterCon banner and add Jupyter colors [#7727](https://github.com/jupyter/notebook/pull/7727) ([@choldgraf](https://github.com/choldgraf))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-09-24&to=2025-09-29&type=c))
-
-[@choldgraf](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Acholdgraf+updated%3A2025-09-24..2025-09-29&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-09-24..2025-09-29&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-09-24..2025-09-29&type=Issues)
-
-## 7.5.0a3
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.0-alpha.2...254b06ca4b232a0a96ad2dddde560e41df371e57))
-
-### Enhancements made
-
-- Update to JupyterLab v4.5.0a4 [#7728](https://github.com/jupyter/notebook/pull/7728) ([@jtpio](https://github.com/jtpio))
-- Increase the checkpoint polling interval to 30s [#7711](https://github.com/jupyter/notebook/pull/7711) ([@jtpio](https://github.com/jtpio))
-- Define `O` as the keyboard shortcut to toggle cell outputs [#7709](https://github.com/jupyter/notebook/pull/7709) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Handle file rename errors [#7710](https://github.com/jupyter/notebook/pull/7710) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Revert "Pin `click<8.3`" [#7733](https://github.com/jupyter/notebook/pull/7733) ([@jtpio](https://github.com/jtpio))
-- Remove link to `npmjs.com` [#7730](https://github.com/jupyter/notebook/pull/7730) ([@jtpio](https://github.com/jtpio))
-- Pin `click<8.3` [#7729](https://github.com/jupyter/notebook/pull/7729) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group across 1 directory with 3 updates [#7704](https://github.com/jupyter/notebook/pull/7704) ([@dependabot](https://github.com/dependabot))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-08-18&to=2025-09-24&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2025-08-18..2025-09-24&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-08-18..2025-09-24&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-08-18..2025-09-24&type=Issues) | [@nkn2022](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ankn2022+updated%3A2025-08-18..2025-09-24&type=Issues)
-
-## 7.5.0a2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.0-alpha.1...3100d879bfe09c629b4add998bd2ac408ffa2af8))
-
-### Enhancements made
-
-- Update to JupyterLab v4.5.0a3 [#7703](https://github.com/jupyter/notebook/pull/7703) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix open file with 鈥#鈥 in the filename [#7698](https://github.com/jupyter/notebook/pull/7698) ([@itsmevichu](https://github.com/itsmevichu))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-08-11&to=2025-08-18&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-08-11..2025-08-18&type=Issues) | [@itsmevichu](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aitsmevichu+updated%3A2025-08-11..2025-08-18&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-08-11..2025-08-18&type=Issues)
-
-## 7.5.0a1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.5.0-alpha.0...f56a27c17bfd85f37a27dea9512c675120571e63))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab v4.5.0a2 [#7694](https://github.com/jupyter/notebook/pull/7694) ([@jtpio](https://github.com/jtpio))
-- Pin `httpx` [#7691](https://github.com/jupyter/notebook/pull/7691) ([@jtpio](https://github.com/jtpio))
-- Bump prefix-dev/setup-pixi from 0.8.10 to 0.8.11 in the actions group [#7675](https://github.com/jupyter/notebook/pull/7675) ([@dependabot](https://github.com/dependabot))
-- Bump prefix-dev/setup-pixi from 0.8.8 to 0.8.10 in the actions group [#7665](https://github.com/jupyter/notebook/pull/7665) ([@dependabot](https://github.com/dependabot))
-- Bump brace-expansion from 1.1.11 to 1.1.12 in /ui-tests [#7664](https://github.com/jupyter/notebook/pull/7664) ([@dependabot](https://github.com/dependabot))
-- Revert "CI: pin to `jupyter-core<5.8.0` on Windows" [#7657](https://github.com/jupyter/notebook/pull/7657) ([@minrk](https://github.com/minrk))
-- Update to JupyterLab v4.5.0a1 [#7656](https://github.com/jupyter/notebook/pull/7656) ([@jtpio](https://github.com/jtpio))
-- CI: pin to `jupyter-core<5.8.0` on Windows [#7655](https://github.com/jupyter/notebook/pull/7655) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Fix grammatical issues in Contributing.md [#7669](https://github.com/jupyter/notebook/pull/7669) ([@sangampaudel530](https://github.com/sangampaudel530))
-- Fixed grammar and typos in CONTRIBUTING.md [#7645](https://github.com/jupyter/notebook/pull/7645) ([@jchen1223](https://github.com/jchen1223))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-05-07&to=2025-08-11&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2025-05-07..2025-08-11&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-05-07..2025-08-11&type=Issues) | [@jchen1223](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajchen1223+updated%3A2025-05-07..2025-08-11&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-05-07..2025-08-11&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2025-05-07..2025-08-11&type=Issues) | [@minrk](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aminrk+updated%3A2025-05-07..2025-08-11&type=Issues) | [@sangampaudel530](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Asangampaudel530+updated%3A2025-05-07..2025-08-11&type=Issues)
-
-## 7.5.0a0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0...22e29fc41901ef8116670bc8a04eeb833858ff51))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab v4.5.0a0 [#7650](https://github.com/jupyter/notebook/pull/7650) ([@jtpio](https://github.com/jtpio))
-- Run UI tests on `ubuntu-latest` [#7639](https://github.com/jupyter/notebook/pull/7639) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.1 [#7638](https://github.com/jupyter/notebook/pull/7638) ([@jtpio](https://github.com/jtpio))
-- Bump prefix-dev/setup-pixi from 0.8.5 to 0.8.8 in the actions group [#7637](https://github.com/jupyter/notebook/pull/7637) ([@dependabot](https://github.com/dependabot))
-- chore: Fix UP006 [#7633](https://github.com/jupyter/notebook/pull/7633) ([@honnix](https://github.com/honnix))
-- Bump prefix-dev/setup-pixi from 0.8.4 to 0.8.5 in the actions group [#7632](https://github.com/jupyter/notebook/pull/7632) ([@dependabot](https://github.com/dependabot))
-- Drop support for Python 3.8 [#7628](https://github.com/jupyter/notebook/pull/7628) ([@honnix](https://github.com/honnix))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-04-09&to=2025-05-07&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2025-04-09..2025-05-07&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-04-09..2025-05-07&type=Issues) | [@honnix](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ahonnix+updated%3A2025-04-09..2025-05-07&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-04-09..2025-05-07&type=Issues)
-
-## 7.4
-
-Jupyter Notebook 7.4 is based on JupyterLab 4.4, and includes a number of new features, bug fixes, and enhancements for extension developers. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are recommended to consult the [Extension Migration Guide](https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-3-to-4-4) which lists deprecations and changes to the public API.
-
-Below are a few highlights for this new release. Most of the new features and improvements come from the update to JupyterLab 4.4, although they may not all be supported in Notebook 7.4.
-
-For reference you may have a look at the [JupyterLab 4.4 changelog](https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html#v4-4) to learn more.
-
-### Code console improvements
-
-The code console prompt can now be positioned on the top, left, or right side of the console,
-in addition to the default bottom placement. The placement is persisted in the Prompt Cell
-Position setting.
-
-The console toolbar now includes buttons to:
-- Execute code
-- Restart the kernel
-- Clear the cells
-- Switch the kernel
-
-
-
-Additional settings for console behavior have been added:
-- Clear Code Content on Execute (enabled by default) 鈥 When disabled, the code submitted for execution remains in the code editor, allowing for further edits.
-- Hide Code Input 鈥 When enabled, only the execution output is shown in the console.
-- Clear Cells on Execute 鈥 When enabled, only the last cell is displayed.
-
-Toggling all the three new settings transforms the console into an interactive editor
-resembling an ephemeral notebook with a single cell.
-
-
-
-### Settings import and export
-
-Settings can now be exported to `overrides.json` from the Settings Editor,
-which can be used to pre-configure defaults in deployments or to restore settings.
-
-
-
-### Support for collaboration without `RTC:` drive
-
-Real time collaboration in previous versions of JupyterLab and Jupyter Notebook
-(which can be enabled by installing jupyter-collaboration package)
-was implemented by swapping the default JupyterLab file system
-drive to a collaborative drive with the `RTC:` prefix.
-This approach was incompatible with multiple extensions.
-JupyterLab 4.4 introduces the Content Providers API, which allows the next version of `jupyter-collaboration` to work without changing the drive prefix.
-This improves compatibility with extensions that do not support arbitrary drives.
-
-### Context menu opt-out
-
-The context menu, available under right mouse click in browsers, can now be disabled globally
-by toggling the `Enable Context Menu` option available in the Command Palette,
-or via the JSON Settings Editor in the Application Context Menu.
-
-## 7.4.0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.2...fbfe36574e04b16ed7ba9303c5e819330f402f87))
-
-### Highlights 鉁
-
-To learn more about the highlights of the 7.4.0 release: https://jupyter-notebook.readthedocs.io/en/latest/changelog.html
-
-### Enhancements made
-
-- Update to JupyterLab v4.4.0rc1 [#7622](https://github.com/jupyter/notebook/pull/7622) ([@jtpio](https://github.com/jtpio))
-- Add support for a `down` area [#7619](https://github.com/jupyter/notebook/pull/7619) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.0rc0 [#7618](https://github.com/jupyter/notebook/pull/7618) ([@jtpio](https://github.com/jtpio))
-- Support `ServiceManagerPlugin` [#7616](https://github.com/jupyter/notebook/pull/7616) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab `v4.4.0b1` [#7607](https://github.com/jupyter/notebook/pull/7607) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.0b0 [#7591](https://github.com/jupyter/notebook/pull/7591) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.0a3 [#7577](https://github.com/jupyter/notebook/pull/7577) ([@jtpio](https://github.com/jtpio))
-- Add active cell border padding, remove double cell padding [#7570](https://github.com/jupyter/notebook/pull/7570) ([@andrii-i](https://github.com/andrii-i))
-
-### Bugs fixed
-
-- Fix undefined error when checkpoints is empty [#7567](https://github.com/jupyter/notebook/pull/7567) ([@jdavid](https://github.com/jdavid))
-
-### Maintenance and upkeep improvements
-
-- Bump the actions group with 2 updates [#7626](https://github.com/jupyter/notebook/pull/7626) ([@dependabot](https://github.com/dependabot))
-- Update to JupyterLab v4.4.0b2 [#7614](https://github.com/jupyter/notebook/pull/7614) ([@jtpio](https://github.com/jtpio))
-- Add pixi step to the update workflow [#7608](https://github.com/jupyter/notebook/pull/7608) ([@jtpio](https://github.com/jtpio))
-- Update `@babel` dependencies [#7605](https://github.com/jupyter/notebook/pull/7605) ([@jtpio](https://github.com/jtpio))
-- Add devcontainer support, backed by pixi [#7602](https://github.com/jupyter/notebook/pull/7602) ([@jtpio](https://github.com/jtpio))
-- Manual dependabot bumps [#7599](https://github.com/jupyter/notebook/pull/7599) ([@jtpio](https://github.com/jtpio))
-- Bump vega-selections from 5.4.1 to 5.5.0 in /ui-tests [#7592](https://github.com/jupyter/notebook/pull/7592) ([@dependabot](https://github.com/dependabot))
-- Improve handling of optional notebook tracker [#7581](https://github.com/jupyter/notebook/pull/7581) ([@jtpio](https://github.com/jtpio))
-- Fix upgrade script [#7579](https://github.com/jupyter/notebook/pull/7579) ([@jtpio](https://github.com/jtpio))
-- Allow owners/members/collab to trigger galata update on other's PR [#7572](https://github.com/jupyter/notebook/pull/7572) ([@krassowski](https://github.com/krassowski))
-- Update `typescript` and `lerna` [#7562](https://github.com/jupyter/notebook/pull/7562) ([@jtpio](https://github.com/jtpio))
-- Update pre-commit hooks [#7561](https://github.com/jupyter/notebook/pull/7561) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.0a2 [#7559](https://github.com/jupyter/notebook/pull/7559) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group across 1 directory with 2 updates [#7558](https://github.com/jupyter/notebook/pull/7558) ([@dependabot](https://github.com/dependabot))
-- Improve update script [#7556](https://github.com/jupyter/notebook/pull/7556) ([@jtpio](https://github.com/jtpio))
-- Disable cron scheduling for now [#7555](https://github.com/jupyter/notebook/pull/7555) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.0a1 [#7554](https://github.com/jupyter/notebook/pull/7554) ([@jtpio](https://github.com/jtpio))
-- Update workflow improvements [#7552](https://github.com/jupyter/notebook/pull/7552) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- User facing changelog for 7.4 [#7612](https://github.com/jupyter/notebook/pull/7612) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-12-21&to=2025-04-09&type=c))
-
-[@andrii-i](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandrii-i+updated%3A2024-12-21..2025-04-09&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2024-12-21..2025-04-09&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-12-21..2025-04-09&type=Issues) | [@jdavid](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajdavid+updated%3A2024-12-21..2025-04-09&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-12-21..2025-04-09&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-12-21..2025-04-09&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2024-12-21..2025-04-09&type=Issues)
-
-## 7.4.0rc0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0-beta.3...7fa19999c9e01d713a684e0f25d8017dbc999528))
-
-### Enhancements made
-
-- Update to JupyterLab v4.4.0rc1 [#7622](https://github.com/jupyter/notebook/pull/7622) ([@jtpio](https://github.com/jtpio))
-- Add support for a `down` area [#7619](https://github.com/jupyter/notebook/pull/7619) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-03-26&to=2025-04-03&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-03-26..2025-04-03&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-03-26..2025-04-03&type=Issues)
-
-## 7.4.0b3
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0-beta.2...434221c0fe3de3df3b4b54ed1005712e07957352))
-
-### Enhancements made
-
-- Update to JupyterLab v4.4.0rc0 [#7618](https://github.com/jupyter/notebook/pull/7618) ([@jtpio](https://github.com/jtpio))
-- Support `ServiceManagerPlugin` [#7616](https://github.com/jupyter/notebook/pull/7616) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-03-20&to=2025-03-26&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-03-20..2025-03-26&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-03-20..2025-03-26&type=Issues)
-
-## 7.4.0b2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0-beta.1...be2fd12f91a64796d9919ee8b8242f3093aac8a5))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab v4.4.0b2 [#7614](https://github.com/jupyter/notebook/pull/7614) ([@jtpio](https://github.com/jtpio))
-- Add pixi step to the update workflow [#7608](https://github.com/jupyter/notebook/pull/7608) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- User facing changelog for 7.4 [#7612](https://github.com/jupyter/notebook/pull/7612) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-03-14&to=2025-03-20&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-03-14..2025-03-20&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-03-14..2025-03-20&type=Issues)
-
-## 7.4.0b1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0-beta.0...6d06d97302bd1bb77e25864214ade2277f2e50d4))
-
-### Enhancements made
-
-- Update to JupyterLab `v4.4.0b1` [#7607](https://github.com/jupyter/notebook/pull/7607) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Update `@babel` dependencies [#7605](https://github.com/jupyter/notebook/pull/7605) ([@jtpio](https://github.com/jtpio))
-- Add devcontainer support, backed by pixi [#7602](https://github.com/jupyter/notebook/pull/7602) ([@jtpio](https://github.com/jtpio))
-- Manual dependabot bumps [#7599](https://github.com/jupyter/notebook/pull/7599) ([@jtpio](https://github.com/jtpio))
-- Bump vega-selections from 5.4.1 to 5.5.0 in /ui-tests [#7592](https://github.com/jupyter/notebook/pull/7592) ([@dependabot](https://github.com/dependabot))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-02-20&to=2025-03-14&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2025-02-20..2025-03-14&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-02-20..2025-03-14&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-02-20..2025-03-14&type=Issues)
-
-## 7.4.0b0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0-alpha.3...48243197bbd004555008cd7cfa14c907147aceca))
-
-### Enhancements made
-
-- Update to JupyterLab v4.4.0b0 [#7591](https://github.com/jupyter/notebook/pull/7591) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-02-05&to=2025-02-20&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-02-05..2025-02-20&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-02-05..2025-02-20&type=Issues)
-
-## 7.4.0a3
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0-alpha.2...48e52c759ffec0cea47dfef59f48d8e9fa6112d3))
-
-### Enhancements made
-
-- Add active cell border padding, remove double cell padding [#7570](https://github.com/jupyter/notebook/pull/7570) ([@andrii-i](https://github.com/andrii-i))
-
-### Maintenance and upkeep improvements
-
-- Improve handling of optional notebook tracker [#7581](https://github.com/jupyter/notebook/pull/7581) ([@jtpio](https://github.com/jtpio))
-- Fix upgrade script [#7579](https://github.com/jupyter/notebook/pull/7579) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-02-03&to=2025-02-05&type=c))
-
-[@andrii-i](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandrii-i+updated%3A2025-02-03..2025-02-05&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-02-03..2025-02-05&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-02-03..2025-02-05&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2025-02-03..2025-02-05&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2025-02-03..2025-02-05&type=Issues)
-
-## 7.4.0a2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0-alpha.1...ef4f6346cd6b377ade271fcd61810b5d2a7d0f41))
-
-### Enhancements made
-
-- Update to JupyterLab v4.4.0a3 [#7577](https://github.com/jupyter/notebook/pull/7577) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix undefined error when checkpoints is empty [#7567](https://github.com/jupyter/notebook/pull/7567) ([@jdavid](https://github.com/jdavid))
-
-### Maintenance and upkeep improvements
-
-- Allow owners/members/collab to trigger galata update on other's PR [#7572](https://github.com/jupyter/notebook/pull/7572) ([@krassowski](https://github.com/krassowski))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2025-01-07&to=2025-02-03&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2025-01-07..2025-02-03&type=Issues) | [@jdavid](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajdavid+updated%3A2025-01-07..2025-02-03&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2025-01-07..2025-02-03&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2025-01-07..2025-02-03&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2025-01-07..2025-02-03&type=Issues)
-
-## 7.4.0a1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.4.0-alpha.0...18672b7e85ec5181e4c5c18d2e32c3e9eab7260c))
-
-### Maintenance and upkeep improvements
-
-- Update `typescript` and `lerna` [#7562](https://github.com/jupyter/notebook/pull/7562) ([@jtpio](https://github.com/jtpio))
-- Update pre-commit hooks [#7561](https://github.com/jupyter/notebook/pull/7561) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.0a2 [#7559](https://github.com/jupyter/notebook/pull/7559) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group across 1 directory with 2 updates [#7558](https://github.com/jupyter/notebook/pull/7558) ([@dependabot](https://github.com/dependabot))
-- Improve update script [#7556](https://github.com/jupyter/notebook/pull/7556) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-12-21&to=2025-01-07&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2024-12-21..2025-01-07&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-12-21..2025-01-07&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-12-21..2025-01-07&type=Issues)
-
-## 7.4.0a0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.2...12efbe601858c317bf677dc835d314489357e20d))
-
-### Maintenance and upkeep improvements
-
-- Disable cron scheduling for now [#7555](https://github.com/jupyter/notebook/pull/7555) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab v4.4.0a1 [#7554](https://github.com/jupyter/notebook/pull/7554) ([@jtpio](https://github.com/jtpio))
-- Update workflow improvements [#7552](https://github.com/jupyter/notebook/pull/7552) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-12-21&to=2024-12-21&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-12-21..2024-12-21&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-12-21..2024-12-21&type=Issues)
-
-## 7.3
-
-Jupyter Notebook 7.3 is based on JupyterLab 4.3, and includes a number of new features, bug fixes, and enhancements for extension developers. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are recommended to consult the [Extension Migration Guide](https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-2-to-4-3) which lists deprecations and changes to the public API.
-
-Below are a few highlights for this new release. Most of the new features and improvements come from the update to JupyterLab 4.3, although they may not all be supported in Notebook 7.3.
-
-For reference you may have a look at the [JupyterLab 4.3 changelog](https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html#v4-3) to learn more.
-
-### Minimap
-
-The virtual scrollbar now acts as a minimap and exposes information on whether a cell:
-
-- is running/scheduled (`[*]`), idle (`[ ]`) or was already run (e.g. `[1]`)
-- was modified since it was last executed (鈥渄irty鈥) - orange background
-- has an output that contains an error - red background
-- is markdown/code (`[ ]`/`[*]`/`[1]` for code, nothing for markdown)
-- how much text/code it contains
-
-
-
-To enable the minimap, click on the hamburger icon (鈮) which appears in the notebook鈥檚 toolbar. If you do not see the hamburger icon, go to `Settings 鈫 Notebook 鈫 Windowing mode` and choose 鈥渇ull鈥.
-
-### File browser enhancements
-
-The file browser now:
-
-- supports resizing the columns and remembers the column sizes after reloading JupyterLab
-- supports uploading folders by drag-and-drop
-- supports navigation with a single click
-- adds a file filter collapsed by default (funnel icon)
-
-
-
-In Jupyter Notebook, the single click navigation is enabled by default. If you would like to disable it to get the same experience as in JupyterLab, go to `Settings 鈫 File Browser` and make sure "Navigate files and directories with single click" is unchecked.
-
-### Improved kernel and server interactions
-
-The previous release enabled connecting to external kernels, such as those spawned by a third-party application like Blender. In this release the kernel selector dialog was improved to also show the external kernels.
-
-The previous release improved the awareness of the kernel/kernel specification distinction by providing both tree and list view in the kernels sidebar panel, but only the tree view featured the kernel identifiers. In this release both the list and tree view show the kernel identifier stub.
-
-A new toolbar button was added in the kernel allowing to shut down unused kernels (kernels with no widget attached).
-
-
-
-### Full Width Notebook
-
-It is now possible to configure the notebook to take up the full width of the page via:
-
-- a setting that can be defined by a user via the Settings Editor
-- the `View > Enable Full Width Notebook` menu entry
-- the command palette, searching for `Enable Full Width Notebook`
-
-
-
-This is particularly useful on large displays, or for those who prefer working with a wider notebook.
-
-It is also possible to use the JupyterLab interface for a more fully-featured experience, which allows for full-width notebooks too, and offers a "Simple Interface" mode for only showing a single notebook at a time.
-
-You can open JupyterLab by clicking on `View > Open JupyterLab`.
-
-## 7.3.2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.1...7959ba0de553e9c541d2716d76108a8bc0bc2d6c))
-
-### Maintenance and upkeep improvements
-
-- Fix update script [#7550](https://github.com/jupyter/notebook/pull/7550) ([@jtpio](https://github.com/jtpio))
-- Fix workflow to update the JupyterLab version [#7548](https://github.com/jupyter/notebook/pull/7548) ([@jtpio](https://github.com/jtpio))
-- Bump nanoid from 3.3.7 to 3.3.8 in /ui-tests [#7547](https://github.com/jupyter/notebook/pull/7547) ([@dependabot](https://github.com/dependabot))
-- Bump systeminformation from 5.21.8 to 5.23.14 in /ui-tests [#7546](https://github.com/jupyter/notebook/pull/7546) ([@dependabot](https://github.com/dependabot))
-- Workflow to update JupyterLab dependencies automatically [#7281](https://github.com/jupyter/notebook/pull/7281) ([@itsmevichu](https://github.com/itsmevichu))
-- Update to JupyterLab v4.3.4 [#7551](https://github.com/jupyter/notebook/pull/7551) ([@github-actions](https://github.com/apps/github-actions))
-
-### Documentation improvements
-
-- Update chat links to Zulip. [#7539](https://github.com/jupyter/notebook/pull/7539) ([@ericsnekbytes](https://github.com/ericsnekbytes))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-12-04&to=2024-12-21&type=c))
-
-[@Carreau](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ACarreau+updated%3A2024-12-04..2024-12-21&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2024-12-04..2024-12-21&type=Issues) | [@ericsnekbytes](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aericsnekbytes+updated%3A2024-12-04..2024-12-21&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-12-04..2024-12-21&type=Issues) | [@itsmevichu](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aitsmevichu+updated%3A2024-12-04..2024-12-21&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-12-04..2024-12-21&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-12-04..2024-12-21&type=Issues)
-
-## 7.3.1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.0...21d0306ecef93ea23bf063bc1d8a0580450cd4df))
-
-### Maintenance and upkeep improvements
-
-- Adds jupyter-ui-toolkit packages in shared scope [#7530](https://github.com/jupyter/notebook/pull/7530) ([@brichet](https://github.com/brichet))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-12-04&to=2024-12-04&type=c))
-
-[@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2024-12-04..2024-12-04&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-12-04..2024-12-04&type=Issues)
-
-## 7.3.0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.2.0...b16eed26eff8e357eeccbef3f3434df77fb8ab48))
-
-### Enhancements made
-
-- Fix for auto scroll output option [#7511](https://github.com/jupyter/notebook/pull/7511) ([@gjmooney](https://github.com/gjmooney))
-- Add a setting to enable the notebook to take up the full width [#7487](https://github.com/jupyter/notebook/pull/7487) ([@jtpio](https://github.com/jtpio))
-- Add the file filter button to the file browser toolbar [#7479](https://github.com/jupyter/notebook/pull/7479) ([@jtpio](https://github.com/jtpio))
-- Redirect paths from the notebooks route to the tree route if they are directories [#7446](https://github.com/jupyter/notebook/pull/7446) ([@andyscho](https://github.com/andyscho))
-- Update to JupyterLab `4.3.0a1` [#7416](https://github.com/jupyter/notebook/pull/7416) ([@jtpio](https://github.com/jtpio))
-- Support custom page_data_hook function [#7387](https://github.com/jupyter/notebook/pull/7387) ([@bluestealth](https://github.com/bluestealth))
-- Add missing "Open..." file menu [#7385](https://github.com/jupyter/notebook/pull/7385) ([@martinRenou](https://github.com/martinRenou))
-- Duplicate notebook menu option [#7374](https://github.com/jupyter/notebook/pull/7374) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Bugs fixed
-
-- Move handling of the file browser settings to a separate plugin, enable file browser single click navigation [#7481](https://github.com/jupyter/notebook/pull/7481) ([@jtpio](https://github.com/jtpio))
-- Remove pseudoelement obstructing the cell collapser [#7392](https://github.com/jupyter/notebook/pull/7392) ([@krassowski](https://github.com/krassowski))
-- "Close and Shut Down Notebook" shuts down without the confirmation dialog [#7384](https://github.com/jupyter/notebook/pull/7384) ([@JasonWeill](https://github.com/JasonWeill))
-- Adds message about building code before running 'develop' [#7382](https://github.com/jupyter/notebook/pull/7382) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Maintenance and upkeep improvements
-
-- Bump Python version used on CI [#7528](https://github.com/jupyter/notebook/pull/7528) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.3.2 [#7527](https://github.com/jupyter/notebook/pull/7527) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.3.1 [#7521](https://github.com/jupyter/notebook/pull/7521) ([@jtpio](https://github.com/jtpio))
-- Add webpack prod config [#7513](https://github.com/jupyter/notebook/pull/7513) ([@gjmooney](https://github.com/gjmooney))
-- Update to JupyterLab 4.3 final [#7507](https://github.com/jupyter/notebook/pull/7507) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab `4.3.0rc1` [#7497](https://github.com/jupyter/notebook/pull/7497) ([@jtpio](https://github.com/jtpio))
-- Remove the `StateDB` file browser trick [#7477](https://github.com/jupyter/notebook/pull/7477) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab `4.3.0rc0` [#7423](https://github.com/jupyter/notebook/pull/7423) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.3.0a0 [#7378](https://github.com/jupyter/notebook/pull/7378) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Fix link to the JupyterLab 4.3 changelog [#7529](https://github.com/jupyter/notebook/pull/7529) ([@jtpio](https://github.com/jtpio))
-- Rename some header links to fit better [#7508](https://github.com/jupyter/notebook/pull/7508) ([@gjmooney](https://github.com/gjmooney))
-- Add user facing changelog for `7.3.0` [#7494](https://github.com/jupyter/notebook/pull/7494) ([@jtpio](https://github.com/jtpio))
-- Fix typos [#7472](https://github.com/jupyter/notebook/pull/7472) ([@algonell](https://github.com/algonell))
-- Adds message about building code before running 'develop' [#7382](https://github.com/jupyter/notebook/pull/7382) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-05-16&to=2024-12-04&type=c))
-
-[@algonell](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aalgonell+updated%3A2024-05-16..2024-12-04&type=Issues) | [@andyscho](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandyscho+updated%3A2024-05-16..2024-12-04&type=Issues) | [@bluestealth](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abluestealth+updated%3A2024-05-16..2024-12-04&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-05-16..2024-12-04&type=Issues) | [@gjmooney](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agjmooney+updated%3A2024-05-16..2024-12-04&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJasonWeill+updated%3A2024-05-16..2024-12-04&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-05-16..2024-12-04&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-05-16..2024-12-04&type=Issues) | [@martinRenou](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AmartinRenou+updated%3A2024-05-16..2024-12-04&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2024-05-16..2024-12-04&type=Issues)
-
-## 7.3.0rc0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.0-beta.2...b34449747a84fe0ba7951ae0fa8f2bb011444a60))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab 4.3.1 [#7521](https://github.com/jupyter/notebook/pull/7521) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-11-06&to=2024-11-18&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-11-06..2024-11-18&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-11-06..2024-11-18&type=Issues)
-
-## 7.3.0b2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.0-beta.1...110e728e4a239ffc7217bd07b9a50cf4eff0dff5))
-
-### Enhancements made
-
-- Fix for auto scroll output option [#7511](https://github.com/jupyter/notebook/pull/7511) ([@gjmooney](https://github.com/gjmooney))
-
-### Maintenance and upkeep improvements
-
-- Add webpack prod config [#7513](https://github.com/jupyter/notebook/pull/7513) ([@gjmooney](https://github.com/gjmooney))
-- Update to JupyterLab 4.3 final [#7507](https://github.com/jupyter/notebook/pull/7507) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Rename some header links to fit better [#7508](https://github.com/jupyter/notebook/pull/7508) ([@gjmooney](https://github.com/gjmooney))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-10-24&to=2024-11-06&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-10-24..2024-11-06&type=Issues) | [@gjmooney](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agjmooney+updated%3A2024-10-24..2024-11-06&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-10-24..2024-11-06&type=Issues)
-
-## 7.3.0b1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.0-beta.0...f614f7c6387cc7da82e0307b70e10593b2cd6bff))
-
-### Enhancements made
-
-- Add a setting to enable the notebook to take up the full width [#7487](https://github.com/jupyter/notebook/pull/7487) ([@jtpio](https://github.com/jtpio))
-- Add the file filter button to the file browser toolbar [#7479](https://github.com/jupyter/notebook/pull/7479) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Move handling of the file browser settings to a separate plugin, enable file browser single click navigation [#7481](https://github.com/jupyter/notebook/pull/7481) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab `4.3.0rc1` [#7497](https://github.com/jupyter/notebook/pull/7497) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Add user facing changelog for `7.3.0` [#7494](https://github.com/jupyter/notebook/pull/7494) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-10-15&to=2024-10-24&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-10-15..2024-10-24&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-10-15..2024-10-24&type=Issues)
-
-## 7.3.0b0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.0-alpha.1...fec4431305b2fd857ff81b7b60c2894dd125bec2))
-
-### Enhancements made
-
-- Redirect paths from the notebooks route to the tree route if they are directories [#7446](https://github.com/jupyter/notebook/pull/7446) ([@andyscho](https://github.com/andyscho))
-
-### Maintenance and upkeep improvements
-
-- Remove the `StateDB` file browser trick [#7477](https://github.com/jupyter/notebook/pull/7477) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab `4.3.0rc0` [#7423](https://github.com/jupyter/notebook/pull/7423) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Fix typos [#7472](https://github.com/jupyter/notebook/pull/7472) ([@algonell](https://github.com/algonell))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-07-01&to=2024-10-15&type=c))
-
-[@algonell](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aalgonell+updated%3A2024-07-01..2024-10-15&type=Issues) | [@andyscho](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandyscho+updated%3A2024-07-01..2024-10-15&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-07-01..2024-10-15&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-07-01..2024-10-15&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-07-01..2024-10-15&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2024-07-01..2024-10-15&type=Issues)
-
-## 7.3.0a1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.3.0-alpha.0...ff2b822d066dc8d733a259f955177da4bd4d668c))
-
-### Enhancements made
-
-- Update to JupyterLab `4.3.0a1` [#7416](https://github.com/jupyter/notebook/pull/7416) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Remove pseudoelement obstructing the cell collapser [#7392](https://github.com/jupyter/notebook/pull/7392) ([@krassowski](https://github.com/krassowski))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-05-31&to=2024-07-01&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-05-31..2024-07-01&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-05-31..2024-07-01&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-05-31..2024-07-01&type=Issues)
-
-## 7.3.0a0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.2.0...1a03b9d8e502f8177684e39d7b627bed1c772bb2))
-
-### Enhancements made
-
-- Support custom page_data_hook function [#7387](https://github.com/jupyter/notebook/pull/7387) ([@bluestealth](https://github.com/bluestealth))
-- Add missing "Open..." file menu [#7385](https://github.com/jupyter/notebook/pull/7385) ([@martinRenou](https://github.com/martinRenou))
-- Duplicate notebook menu option [#7374](https://github.com/jupyter/notebook/pull/7374) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Bugs fixed
-
-- "Close and Shut Down Notebook" shuts down without the confirmation dialog [#7384](https://github.com/jupyter/notebook/pull/7384) ([@JasonWeill](https://github.com/JasonWeill))
-- Adds message about building code before running 'develop' [#7382](https://github.com/jupyter/notebook/pull/7382) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab 4.3.0a0 [#7378](https://github.com/jupyter/notebook/pull/7378) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Adds message about building code before running 'develop' [#7382](https://github.com/jupyter/notebook/pull/7382) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-05-16&to=2024-05-31&type=c))
-
-[@bluestealth](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abluestealth+updated%3A2024-05-16..2024-05-31&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-05-16..2024-05-31&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJasonWeill+updated%3A2024-05-16..2024-05-31&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-05-16..2024-05-31&type=Issues) | [@martinRenou](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AmartinRenou+updated%3A2024-05-16..2024-05-31&type=Issues)
-
-## 7.2
-
-Jupyter Notebook 7.2 is based on JupyterLab 4.2, and includes a number of new features, bug fixes, and enhancements for extension developers. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are recommended to consult the [Extension Migration Guide](https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-0-to-4-1) which lists deprecations and changes to the public API.
-
-Below are a few highlights for this new release. Most of the new features and improvements come from the update to JupyterLab 4.2, although they are not all supported in Notebook 7.2.
-
-For reference you may have a look at the JupyterLab 4.2 changelog to learn more: https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html#v4-2
-
-### Full notebook windowing mode by default
-
-Notebooks in the `full` windowing mode only render the visible cells, significantly improving the performance of the application. One limitation of `full` mode is that the search function in your browser may produce false negatives; using the search function is recommended. To revert to the behaviour from Notebook 7.2, go to Settings 鈫 Settings Editor 鈫 Notebook, scroll to 鈥淲indowing mode鈥, and choose `defer`.
-
-### Improved Shortcuts Editor
-
-Among the numerous improvements and bug fixes for the keyboard shortcuts editor:
-
-- it is now possible to remove the default shortcuts,
-- shortcuts are correctly sorted when using a language pack,
-- shortcuts with different arguments are now correctly displayed as individual entries.
-
-
-
-### Dark high contrast theme
-
-A new theme, JupyterLab Dark High Contrast, which is intended to benefit users with the need for higher contrast, following the WCAG AAA accessibility standard for color contrast. To select this theme, from the menu bar, choose Settings 鈫 Theme 鈫 JupyterLab Dark High Contrast. Please provide feedback and suggestions on further improvements to this theme.
-
-
-
-## 7.2.0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.1.2...31bf294e85175bbf39816a90dc8858dedaf73bde))
-
-### Enhancements made
-
-- Update to JupyterLab 4.2.0 [#7357](https://github.com/jupyter/notebook/pull/7357) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.2.0rc0 [#7333](https://github.com/jupyter/notebook/pull/7333) ([@jtpio](https://github.com/jtpio))
-- Add `@jupyterlab/theme-dark-high-contrast-extension` [#7331](https://github.com/jupyter/notebook/pull/7331) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.2.0a2 [#7307](https://github.com/jupyter/notebook/pull/7307) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Add the `@jupyterlab/notebook-extension:copy-output` plugin [#7353](https://github.com/jupyter/notebook/pull/7353) ([@jtpio](https://github.com/jtpio))
-- Fix CSS for `full` windowing mode [#7337](https://github.com/jupyter/notebook/pull/7337) ([@jtpio](https://github.com/jtpio))
-- Force notebook windowing mode to `defer` [#7335](https://github.com/jupyter/notebook/pull/7335) ([@jtpio](https://github.com/jtpio))
-- Fix scrollbar always showing up by default [#7327](https://github.com/jupyter/notebook/pull/7327) ([@jtpio](https://github.com/jtpio))
-- Default to the `full` windowing mode [#7321](https://github.com/jupyter/notebook/pull/7321) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Fix emoji in create issue screen [#7363](https://github.com/jupyter/notebook/pull/7363) ([@JasonWeill](https://github.com/JasonWeill))
-- Update `@jupyterlab/galata` [#7361](https://github.com/jupyter/notebook/pull/7361) ([@jtpio](https://github.com/jtpio))
-- Pin on `macos-12` on CI for now [#7346](https://github.com/jupyter/notebook/pull/7346) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab `4.2.0b1` [#7319](https://github.com/jupyter/notebook/pull/7319) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.2.0b0 [#7312](https://github.com/jupyter/notebook/pull/7312) ([@jtpio](https://github.com/jtpio))
-- Ignore links to GitHub user and organisation profiles [#7308](https://github.com/jupyter/notebook/pull/7308) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Add user facing changelog for 7.2 [#7372](https://github.com/jupyter/notebook/pull/7372) ([@jtpio](https://github.com/jtpio))
-- Fix emoji in create issue screen [#7363](https://github.com/jupyter/notebook/pull/7363) ([@JasonWeill](https://github.com/JasonWeill))
-- update RISE extension installation instructions [#7299](https://github.com/jupyter/notebook/pull/7299) ([@afeld](https://github.com/afeld))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-03-14&to=2024-05-16&type=c))
-
-[@afeld](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafeld+updated%3A2024-03-14..2024-05-16&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-03-14..2024-05-16&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJasonWeill+updated%3A2024-03-14..2024-05-16&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-03-14..2024-05-16&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-03-14..2024-05-16&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2024-03-14..2024-05-16&type=Issues) | [@takluyver](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atakluyver+updated%3A2024-03-14..2024-05-16&type=Issues)
-
-## 7.2.0rc1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.2.0rc0...f5d8aea3bdc3eea25213792f9d101738f2a1f627))
-
-### Enhancements made
-
-- Update to JupyterLab 4.2.0 [#7357](https://github.com/jupyter/notebook/pull/7357) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Add the `@jupyterlab/notebook-extension:copy-output` plugin [#7353](https://github.com/jupyter/notebook/pull/7353) ([@jtpio](https://github.com/jtpio))
-- Default to the `full` windowing mode [#7321](https://github.com/jupyter/notebook/pull/7321) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- update RISE extension installation instructions [#7299](https://github.com/jupyter/notebook/pull/7299) ([@afeld](https://github.com/afeld))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-05-01&to=2024-05-13&type=c))
-
-[@afeld](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafeld+updated%3A2024-05-01..2024-05-13&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-05-01..2024-05-13&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-05-01..2024-05-13&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-05-01..2024-05-13&type=Issues) | [@takluyver](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atakluyver+updated%3A2024-05-01..2024-05-13&type=Issues)
-
-## 7.2.0rc0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.2.0b1...49ddd0fe1e4d4bfa24f74042f2232c5b91d1c36e))
-
-### Enhancements made
-
-- Update to JupyterLab 4.2.0rc0 [#7333](https://github.com/jupyter/notebook/pull/7333) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix CSS for `full` windowing mode [#7337](https://github.com/jupyter/notebook/pull/7337) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Pin on `macos-12` on CI for now [#7346](https://github.com/jupyter/notebook/pull/7346) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-04-19&to=2024-05-01&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-04-19..2024-05-01&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-04-19..2024-05-01&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-04-19..2024-05-01&type=Issues)
-
-## 7.2.0b1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.2.0-beta.0...b45d666d5ee1ee053b55ac9cb6e9aecde5d53945))
-
-### Enhancements made
-
-- Add `@jupyterlab/theme-dark-high-contrast-extension` [#7331](https://github.com/jupyter/notebook/pull/7331) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Force notebook windowing mode to `defer` [#7335](https://github.com/jupyter/notebook/pull/7335) ([@jtpio](https://github.com/jtpio))
-- Fix scrollbar always showing up by default [#7327](https://github.com/jupyter/notebook/pull/7327) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-04-12&to=2024-04-19&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-04-12..2024-04-19&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-04-12..2024-04-19&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2024-04-12..2024-04-19&type=Issues)
-
-## 7.2.0b0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.2.0-alpha.0...09bcd99e6dfffce92acc9a7f9d11a2a2122131c0))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab `4.2.0b1` [#7319](https://github.com/jupyter/notebook/pull/7319) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.2.0b0 [#7312](https://github.com/jupyter/notebook/pull/7312) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-03-29&to=2024-04-12&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-03-29..2024-04-12&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-03-29..2024-04-12&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2024-03-29..2024-04-12&type=Issues)
-
-## 7.2.0a0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.1.2...80b582bce69e33e36e936af2ea981bcb22a4d285))
-
-### Enhancements made
-
-- Update to JupyterLab 4.2.0a2 [#7307](https://github.com/jupyter/notebook/pull/7307) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Ignore links to GitHub user and organisation profiles [#7308](https://github.com/jupyter/notebook/pull/7308) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-03-14&to=2024-03-29&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-03-14..2024-03-29&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-03-14..2024-03-29&type=Issues)
-
-## v7.1
-
-Jupyter Notebook 7.1 is based on JupyterLab 4.1, and includes a number of new features, bug fixes, and enhancements for extension developers. This release is compatible with extensions supporting JupyterLab 4.0. Extension authors are recommended to consult the [Extension Migration Guide](https://jupyterlab.readthedocs.io/en/latest/extension/extension_migration.html#jupyterlab-4-0-to-4-1) which lists deprecations and changes to the public API.
-
-Below are a few highlights for this new release. Most of the new features and improvements come from the update to JupyterLab 4.1, although they are not all supported in Notebook 7.1.
-
-For reference you may have a look at the JupyterLab 4.1 changelog to learn more: https://jupyterlab.readthedocs.io/en/latest/getting_started/changelog.html#v4-1
-
-### Diagrams in Markdown
-
-Matching GitHub-Flavoured Markdown, JupyterLab 4.1 now supports [Mermaid](https://github.com/mermaid-js/mermaid) diagrams.
-To create a mermaid diagram use the `mermaid` language specifier for a code block in a markdown cell or document, for example:
-
-~~~
-```mermaid
-flowchart LR
-
-A[Hard] -->|Text| B(Round)
-B --> C{Decision}
-C -->|One| D[Result 1]
-C -->|Two| E[Result 2]
-```
-~~~
-
-which renders as:
-
-
-
-### Inline completer
-
-JupyterLab now supports completion presented as ghost text in the cell and file editors,
-allowing generative AI models to provide multi-line completions. This can now also be leveraged in Jupyter Notebook.
-
-The suggestions are provided by plugins implementing the ``IInlineCompletionProvider`` API;
-by default a single provider which uses kernel history is available.
-
-
-
-The suggestions can be invoked as-you-type or manually using a configurable shortcut (by default Alt + \\).
-The default keyboard shortcuts are displayed in the small widget shown when hovering over the ghost suggestion:
-- Alt + End - accept suggestion
-- Alt + [ - previous suggestion
-- Alt + ] - next suggestion
-
-To enable the inline suggestions based on the kernel history, go to Settings 鈫 Inline Completer 鈫 History provider 鈫 check the "enabled" checkbox.
-
-In addition to the built-in history suggestions,
-the [`jupyter-ai`](https://github.com/jupyterlab/jupyter-ai) extension will provide
-suggestions from supported models.
-
-Note that the Jupyter AI extension is not yet compatible with Jupyter Notebook 7.
-
-### Keyboard navigation improvements
-
-Numerous improvements to keyboard navigation with focus on accessibility and usability are included in this release:
-- the notebook cells now retain focus
-- the focus can now be moved beyond the active notebook
-- the toolbars can now be navigated using arrow keys
-
-For more details, see [this post on Jupyter Blog](https://blog.jupyter.org/recent-keyboard-navigation-improvements-in-jupyter-4df32f97628d).
-
-### Execution history in notebook
-
-The code from previously executed cells can be used to populate empty cells,
-allowing to iterate on code from previous cells or even sessions
-(depending on how a specific kernel stores history).
-
-To cycle between history items press Alt + Arrow Up and Alt + Arrow Down.
-
-To enable execution history, go to Settings 鈫 Notebook 鈫 check the "Kernel history access" checkbox.
-
-This feature was already available in the console in previous releases; it only works with kernels supporting execution history requests.
-To clear the execution history consult the documentation of the kernel you are using (e.g., IPython/ipykernel).
-
-### Error indicator in the table of contents
-
-When a cell fails during execution, an error indicator will be displayed by the corresponding heading,
-increasing awareness of the notebook state and enabling users to quickly navigate to the cell which requires attention.
-
-
-
-### Search improvements
-
-- The search box will now grow automatically to accommodate longer text
-- Search in selection can now be toggled using Alt + L and automatic search in selection can be configured in settings
-- Tooltips with shortcuts were added to the buttons in the search box to improve discoverability of the shortcuts
-
-### Miscellaneous
-
-- The current theme (dark/light) can now be synced with the browser/system preference (Settings menu 鈫 Theme 鈫 Synchronise with System Settings)
-- A blue "read-only" status indicator is now displayed in the toolbar of documents which cannot be saved because their model is read-only.
-- Native support for viewing jsonl/ndjson files was added
-- Collapsing of breadcrumbs in the File Browser can be disabled in File Browser settings
-
-## 7.1.2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.1.1...ca41222a9c8d75356c6d67d3bd36e34d71cce2d8))
-
-### Maintenance and upkeep improvements
-
-- Update Release Scripts [#7295](https://github.com/jupyter/notebook/pull/7295) ([@blink1073](https://github.com/blink1073))
-- Fix jupyterlab install command in the releaser hook [#7294](https://github.com/jupyter/notebook/pull/7294) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.5 packages [#7291](https://github.com/jupyter/notebook/pull/7291) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Add a section to use local dependencies [#7292](https://github.com/jupyter/notebook/pull/7292) ([@brichet](https://github.com/brichet))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-02-26&to=2024-03-14&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2024-02-26..2024-03-14&type=Issues) | [@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2024-02-26..2024-03-14&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-02-26..2024-03-14&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-02-26..2024-03-14&type=Issues)
-
-## 7.1.1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.1.0...da7b8d400e96ceff0eec834badd891bc5d5f154d))
-
-### Bugs fixed
-
-- Grayout "Edit Notebook Metadata" for other file formats. [#7265](https://github.com/jupyter/notebook/pull/7265) ([@itsmevichu](https://github.com/itsmevichu))
-
-### Maintenance and upkeep improvements
-
-- Fix flaky mobile UI tests [#7278](https://github.com/jupyter/notebook/pull/7278) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.2 packages [#7277](https://github.com/jupyter/notebook/pull/7277) ([@jtpio](https://github.com/jtpio))
-- Ignore stackoverflow link [#7274](https://github.com/jupyter/notebook/pull/7274) ([@jtpio](https://github.com/jtpio))
-- Expose `version_info` [#7273](https://github.com/jupyter/notebook/pull/7273) ([@jtpio](https://github.com/jtpio))
-- Bump ip from 2.0.0 to 2.0.1 in /ui-tests [#7268](https://github.com/jupyter/notebook/pull/7268) ([@dependabot](https://github.com/dependabot))
-- Bump ip from 2.0.0 to 2.0.1 [#7267](https://github.com/jupyter/notebook/pull/7267) ([@dependabot](https://github.com/dependabot))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-02-13&to=2024-02-26&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2024-02-13..2024-02-26&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-02-13..2024-02-26&type=Issues) | [@itsmevichu](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aitsmevichu+updated%3A2024-02-13..2024-02-26&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-02-13..2024-02-26&type=Issues)
-
-## 7.1.0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.0.6...b8ec7e4a8eda70a8d7dca19799acd3e96e019160))
-
-### Enhancements made
-
-- Create a new notebook with a specific kernel from the new dropdown [#7255](https://github.com/jupyter/notebook/pull/7255) ([@jtpio](https://github.com/jtpio))
-- Add the plugin manager [#7198](https://github.com/jupyter/notebook/pull/7198) ([@jtpio](https://github.com/jtpio))
-- Fix toggle functionality for widgets. [#7178](https://github.com/jupyter/notebook/pull/7178) ([@haok1402](https://github.com/haok1402))
-- Bump to JupyterLab 4.1.0a4 bis [#7172](https://github.com/jupyter/notebook/pull/7172) ([@brichet](https://github.com/brichet))
-- Update to JupyterLab `4.1.0a3` [#7161](https://github.com/jupyter/notebook/pull/7161) ([@jtpio](https://github.com/jtpio))
-- Added Lumino Plugin Description (#7008) [#7127](https://github.com/jupyter/notebook/pull/7127) ([@Dilip-Jain](https://github.com/Dilip-Jain))
-- Added Edit Notebook Metadata Option (#6402) [#7099](https://github.com/jupyter/notebook/pull/7099) ([@Dilip-Jain](https://github.com/Dilip-Jain))
-- Update to JupyterLab 4.1 [#7096](https://github.com/jupyter/notebook/pull/7096) ([@jtpio](https://github.com/jtpio))
-- Add the JupyterLab resources plugin [#6968](https://github.com/jupyter/notebook/pull/6968) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix spurious kernel selection dialog on notebook creation [#7258](https://github.com/jupyter/notebook/pull/7258) ([@jtpio](https://github.com/jtpio))
-- Workaround for the file browser tracker focus issue [#7224](https://github.com/jupyter/notebook/pull/7224) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab 4.1.1 [#7256](https://github.com/jupyter/notebook/pull/7256) ([@jtpio](https://github.com/jtpio))
-- Follow JupyterLab minor versions [#7250](https://github.com/jupyter/notebook/pull/7250) ([@jtpio](https://github.com/jtpio))
-- chore: update pre-commit hooks [#7237](https://github.com/jupyter/notebook/pull/7237) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Update to JupyterLab 4.1.0 final [#7234](https://github.com/jupyter/notebook/pull/7234) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.0rc1 [#7230](https://github.com/jupyter/notebook/pull/7230) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.0rc0 [#7227](https://github.com/jupyter/notebook/pull/7227) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.0b2 [#7222](https://github.com/jupyter/notebook/pull/7222) ([@jtpio](https://github.com/jtpio))
-- Fix `check_links` on CI [#7219](https://github.com/jupyter/notebook/pull/7219) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group with 1 update [#7218](https://github.com/jupyter/notebook/pull/7218) ([@dependabot](https://github.com/dependabot))
-- Bump the actions group with 2 updates [#7207](https://github.com/jupyter/notebook/pull/7207) ([@dependabot](https://github.com/dependabot))
-- chore: update pre-commit hooks [#7206](https://github.com/jupyter/notebook/pull/7206) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Add nbviewer.jupyter.org to the ignore list [#7197](https://github.com/jupyter/notebook/pull/7197) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.0b0 [#7196](https://github.com/jupyter/notebook/pull/7196) ([@jtpio](https://github.com/jtpio))
-- Update ruff config [#7190](https://github.com/jupyter/notebook/pull/7190) ([@blink1073](https://github.com/blink1073))
-- Bump @babel/traverse from 7.23.0 to 7.23.6 [#7187](https://github.com/jupyter/notebook/pull/7187) ([@dependabot](https://github.com/dependabot))
-- Bump actions/setup-python from 4 to 5 [#7180](https://github.com/jupyter/notebook/pull/7180) ([@dependabot](https://github.com/dependabot))
-- Update publish-release workflow for PyPI trusted publisher [#7176](https://github.com/jupyter/notebook/pull/7176) ([@jtpio](https://github.com/jtpio))
-- chore: update pre-commit hooks [#7174](https://github.com/jupyter/notebook/pull/7174) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Update `yarn.lock` [#7170](https://github.com/jupyter/notebook/pull/7170) ([@jtpio](https://github.com/jtpio))
-- Bump axios from 1.5.1 to 1.6.2 [#7165](https://github.com/jupyter/notebook/pull/7165) ([@dependabot](https://github.com/dependabot))
-- Bump dessant/lock-threads from 4 to 5 [#7159](https://github.com/jupyter/notebook/pull/7159) ([@dependabot](https://github.com/dependabot))
-- Update ruff config and typing [#7145](https://github.com/jupyter/notebook/pull/7145) ([@blink1073](https://github.com/blink1073))
-- chore: update pre-commit hooks [#7143](https://github.com/jupyter/notebook/pull/7143) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Clean up lint handling [#7142](https://github.com/jupyter/notebook/pull/7142) ([@blink1073](https://github.com/blink1073))
-- Adopt ruff format [#7132](https://github.com/jupyter/notebook/pull/7132) ([@blink1073](https://github.com/blink1073))
-- Fix python bumping to `minor` [#7131](https://github.com/jupyter/notebook/pull/7131) ([@jtpio](https://github.com/jtpio))
-- Add Python 3.12 classifier [#7111](https://github.com/jupyter/notebook/pull/7111) ([@jtpio](https://github.com/jtpio))
-- Remove viewport workaround in the UI tests [#6887](https://github.com/jupyter/notebook/pull/6887) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Add documentation for updating `notebook` imports [#7244](https://github.com/jupyter/notebook/pull/7244) ([@jtpio](https://github.com/jtpio))
-- Fix link in `CONTRIBUTING.md` [#7235](https://github.com/jupyter/notebook/pull/7235) ([@jtpio](https://github.com/jtpio))
-- Add user facing changelog for 7.1 [#7232](https://github.com/jupyter/notebook/pull/7232) ([@jtpio](https://github.com/jtpio))
-- Clarify README about supported versions (post v7 release) [#7193](https://github.com/jupyter/notebook/pull/7193) ([@akx](https://github.com/akx))
-- Set `navigation_with_keys` to `False` [#7129](https://github.com/jupyter/notebook/pull/7129) ([@jtpio](https://github.com/jtpio))
-- Updated ui-tests Configuration in Contributing.md [#7124](https://github.com/jupyter/notebook/pull/7124) ([@jayeshsingh9767](https://github.com/jayeshsingh9767))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-10-17&to=2024-02-13&type=c))
-
-[@akx](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aakx+updated%3A2023-10-17..2024-02-13&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2023-10-17..2024-02-13&type=Issues) | [@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2023-10-17..2024-02-13&type=Issues) | [@d5423197](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ad5423197+updated%3A2023-10-17..2024-02-13&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-10-17..2024-02-13&type=Issues) | [@Dilip-Jain](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ADilip-Jain+updated%3A2023-10-17..2024-02-13&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-10-17..2024-02-13&type=Issues) | [@haok1402](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ahaok1402+updated%3A2023-10-17..2024-02-13&type=Issues) | [@jayeshsingh9767](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajayeshsingh9767+updated%3A2023-10-17..2024-02-13&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-10-17..2024-02-13&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2023-10-17..2024-02-13&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-10-17..2024-02-13&type=Issues) | [@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AZsailer+updated%3A2023-10-17..2024-02-13&type=Issues)
-
-## 7.1.0rc1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.1.0rc0...376a2f97c883e6e91f321d0a676e1ee9ff3b8d87))
-
-### Maintenance and upkeep improvements
-
-- Follow JupyterLab minor versions [#7250](https://github.com/jupyter/notebook/pull/7250) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Add documentation for updating `notebook` imports [#7244](https://github.com/jupyter/notebook/pull/7244) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-02-07&to=2024-02-09&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-02-07..2024-02-09&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-02-07..2024-02-09&type=Issues)
-
-## 7.1.0rc0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.1.0b0...2d717f5896a1d4310baa2499c7e6197d1914201d))
-
-### Enhancements made
-
-- Added Edit Notebook Metadata Option (#6402) [#7099](https://github.com/jupyter/notebook/pull/7099) ([@Dilip-Jain](https://github.com/Dilip-Jain))
-
-### Maintenance and upkeep improvements
-
-- chore: update pre-commit hooks [#7237](https://github.com/jupyter/notebook/pull/7237) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Update to JupyterLab 4.1.0 final [#7234](https://github.com/jupyter/notebook/pull/7234) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.0rc1 [#7230](https://github.com/jupyter/notebook/pull/7230) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.0rc0 [#7227](https://github.com/jupyter/notebook/pull/7227) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Fix link in `CONTRIBUTING.md` [#7235](https://github.com/jupyter/notebook/pull/7235) ([@jtpio](https://github.com/jtpio))
-- Add user facing changelog for 7.1 [#7232](https://github.com/jupyter/notebook/pull/7232) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2024-01-26&to=2024-02-07&type=c))
-
-[@Dilip-Jain](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ADilip-Jain+updated%3A2024-01-26..2024-02-07&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2024-01-26..2024-02-07&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2024-01-26..2024-02-07&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2024-01-26..2024-02-07&type=Issues)
-
-## 7.1.0b0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.1.0a2...5d265b90ed5f097af4ca22d283ecdc705229ff92))
-
-### Bugs fixed
-
-- Workaround for the file browser tracker focus issue [#7224](https://github.com/jupyter/notebook/pull/7224) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab 4.1.0b2 [#7222](https://github.com/jupyter/notebook/pull/7222) ([@jtpio](https://github.com/jtpio))
-- Fix `check_links` on CI [#7219](https://github.com/jupyter/notebook/pull/7219) ([@jtpio](https://github.com/jtpio))
-- Bump the actions group with 1 update [#7218](https://github.com/jupyter/notebook/pull/7218) ([@dependabot](https://github.com/dependabot))
-- Bump the actions group with 2 updates [#7207](https://github.com/jupyter/notebook/pull/7207) ([@dependabot](https://github.com/dependabot))
-- chore: update pre-commit hooks [#7206](https://github.com/jupyter/notebook/pull/7206) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-12-27&to=2024-01-26&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-12-27..2024-01-26&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-12-27..2024-01-26&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-12-27..2024-01-26&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-12-27..2024-01-26&type=Issues) | [@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AZsailer+updated%3A2023-12-27..2024-01-26&type=Issues)
-
-## 7.1.0a2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.1.0a1...251e0e360603b6e63b280b3bd04a5406f7da28da))
-
-### Enhancements made
-
-- Add the plugin manager [#7198](https://github.com/jupyter/notebook/pull/7198) ([@jtpio](https://github.com/jtpio))
-- Fix toggle functionality for widgets. [#7178](https://github.com/jupyter/notebook/pull/7178) ([@haok1402](https://github.com/haok1402))
-
-### Maintenance and upkeep improvements
-
-- Add nbviewer.jupyter.org to the ignore list [#7197](https://github.com/jupyter/notebook/pull/7197) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.1.0b0 [#7196](https://github.com/jupyter/notebook/pull/7196) ([@jtpio](https://github.com/jtpio))
-- Update ruff config [#7190](https://github.com/jupyter/notebook/pull/7190) ([@blink1073](https://github.com/blink1073))
-- Bump @babel/traverse from 7.23.0 to 7.23.6 [#7187](https://github.com/jupyter/notebook/pull/7187) ([@dependabot](https://github.com/dependabot))
-- Bump actions/setup-python from 4 to 5 [#7180](https://github.com/jupyter/notebook/pull/7180) ([@dependabot](https://github.com/dependabot))
-- Update publish-release workflow for PyPI trusted publisher [#7176](https://github.com/jupyter/notebook/pull/7176) ([@jtpio](https://github.com/jtpio))
-- chore: update pre-commit hooks [#7174](https://github.com/jupyter/notebook/pull/7174) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Remove viewport workaround in the UI tests [#6887](https://github.com/jupyter/notebook/pull/6887) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Clarify README about supported versions (post v7 release) [#7193](https://github.com/jupyter/notebook/pull/7193) ([@akx](https://github.com/akx))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-12-04&to=2023-12-27&type=c))
-
-[@akx](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aakx+updated%3A2023-12-04..2023-12-27&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2023-12-04..2023-12-27&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-12-04..2023-12-27&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-12-04..2023-12-27&type=Issues) | [@haok1402](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ahaok1402+updated%3A2023-12-04..2023-12-27&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-12-04..2023-12-27&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-12-04..2023-12-27&type=Issues)
-
-## 7.1.0a1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.1.0-alpha.0...a74cd91871fcc6037d384fe59af8986557e783e5))
-
-### Enhancements made
-
-- Bump to JupyterLab 4.1.0a4 bis [#7172](https://github.com/jupyter/notebook/pull/7172) ([@brichet](https://github.com/brichet))
-- Update to JupyterLab `4.1.0a3` [#7161](https://github.com/jupyter/notebook/pull/7161) ([@jtpio](https://github.com/jtpio))
-- Add the JupyterLab resources plugin [#6968](https://github.com/jupyter/notebook/pull/6968) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Update `yarn.lock` [#7170](https://github.com/jupyter/notebook/pull/7170) ([@jtpio](https://github.com/jtpio))
-- Bump axios from 1.5.1 to 1.6.2 [#7165](https://github.com/jupyter/notebook/pull/7165) ([@dependabot](https://github.com/dependabot))
-- Bump dessant/lock-threads from 4 to 5 [#7159](https://github.com/jupyter/notebook/pull/7159) ([@dependabot](https://github.com/dependabot))
-- Update ruff config and typing [#7145](https://github.com/jupyter/notebook/pull/7145) ([@blink1073](https://github.com/blink1073))
-- chore: update pre-commit hooks [#7143](https://github.com/jupyter/notebook/pull/7143) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Clean up lint handling [#7142](https://github.com/jupyter/notebook/pull/7142) ([@blink1073](https://github.com/blink1073))
-- Adopt ruff format [#7132](https://github.com/jupyter/notebook/pull/7132) ([@blink1073](https://github.com/blink1073))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-10-27&to=2023-12-04&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2023-10-27..2023-12-04&type=Issues) | [@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2023-10-27..2023-12-04&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-10-27..2023-12-04&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-10-27..2023-12-04&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-10-27..2023-12-04&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2023-10-27..2023-12-04&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-10-27..2023-12-04&type=Issues)
-
-## 7.1.0a0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/application-extension@7.0.6...0cd6104b926a398b419f2433538cef437592796f))
-
-### Enhancements made
-
-- Added Lumino Plugin Description (#7008) [#7127](https://github.com/jupyter/notebook/pull/7127) ([@Dilip-Jain](https://github.com/Dilip-Jain))
-- Update to JupyterLab 4.1 [#7096](https://github.com/jupyter/notebook/pull/7096) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Fix python bumping to `minor` [#7131](https://github.com/jupyter/notebook/pull/7131) ([@jtpio](https://github.com/jtpio))
-- Add Python 3.12 classifier [#7111](https://github.com/jupyter/notebook/pull/7111) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Set `navigation_with_keys` to `False` [#7129](https://github.com/jupyter/notebook/pull/7129) ([@jtpio](https://github.com/jtpio))
-- Updated ui-tests Configuration in Contributing.md [#7124](https://github.com/jupyter/notebook/pull/7124) ([@jayeshsingh9767](https://github.com/jayeshsingh9767))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-10-17&to=2023-10-27&type=c))
-
-[@Dilip-Jain](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ADilip-Jain+updated%3A2023-10-17..2023-10-27&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-10-17..2023-10-27&type=Issues) | [@jayeshsingh9767](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajayeshsingh9767+updated%3A2023-10-17..2023-10-27&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-10-17..2023-10-27&type=Issues)
-
-## v7.0
-
-## 7.0.6
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/app@7.0.5...c62caffb02856737870cbc79a2cdb43b3e89c363))
-
-### Bugs fixed
-
-- Updated fav-icon Base URL from JupyterLab PageConfig. [#7109](https://github.com/jupyter/notebook/pull/7109) ([@jayeshsingh9767](https://github.com/jayeshsingh9767))
-
-### Maintenance and upkeep improvements
-
-- Fix typings [#7110](https://github.com/jupyter/notebook/pull/7110) ([@jtpio](https://github.com/jtpio))
-- Bump postcss from 8.4.27 to 8.4.31 [#7089](https://github.com/jupyter/notebook/pull/7089) ([@dependabot](https://github.com/dependabot))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-10-12&to=2023-10-17&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-10-12..2023-10-17&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-10-12..2023-10-17&type=Issues) | [@jayeshsingh9767](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajayeshsingh9767+updated%3A2023-10-12..2023-10-17&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-10-12..2023-10-17&type=Issues)
-
-## 7.0.5
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/app@7.0.4...839193d07f0780ded6f559892517f061f3776b02))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.7 [#7103](https://github.com/jupyter/notebook/pull/7103) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Update `permissions` in the galata snapshot workflow [#7105](https://github.com/jupyter/notebook/pull/7105) ([@jtpio](https://github.com/jtpio))
-- Fix typings check on CI [#7104](https://github.com/jupyter/notebook/pull/7104) ([@jtpio](https://github.com/jtpio))
-- Ignore yarn.lock for codespell [#7098](https://github.com/jupyter/notebook/pull/7098) ([@jtpio](https://github.com/jtpio))
-- Remove link to the PDF documentation [#7094](https://github.com/jupyter/notebook/pull/7094) ([@jtpio](https://github.com/jtpio))
-- Bump postcss from 8.4.23 to 8.4.31 in /ui-tests [#7088](https://github.com/jupyter/notebook/pull/7088) ([@dependabot](https://github.com/dependabot))
-- React to the galata update comment [#7086](https://github.com/jupyter/notebook/pull/7086) ([@jtpio](https://github.com/jtpio))
-- Switch from `hub` to `gh` in the Playwright snapshots update workflow [#7085](https://github.com/jupyter/notebook/pull/7085) ([@jtpio](https://github.com/jtpio))
-- chore: update pre-commit hooks [#7084](https://github.com/jupyter/notebook/pull/7084) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Fix traitlets typing [#7082](https://github.com/jupyter/notebook/pull/7082) ([@jtpio](https://github.com/jtpio))
-- Bump toshimaru/auto-author-assign from 2.0.0 to 2.0.1 [#7080](https://github.com/jupyter/notebook/pull/7080) ([@dependabot](https://github.com/dependabot))
-- Bump toshimaru/auto-author-assign from 1.6.2 to 2.0.0 [#7072](https://github.com/jupyter/notebook/pull/7072) ([@dependabot](https://github.com/dependabot))
-- ci: set minimal permissions to workflows [#7070](https://github.com/jupyter/notebook/pull/7070) ([@diogoteles08](https://github.com/diogoteles08))
-- Bump systeminformation from 5.17.12 to 5.21.8 in /ui-tests [#7064](https://github.com/jupyter/notebook/pull/7064) ([@dependabot](https://github.com/dependabot))
-
-### Documentation improvements
-
-- Improve docs setup (SVG logos, repo links) [#7074](https://github.com/jupyter/notebook/pull/7074) ([@krassowski](https://github.com/krassowski))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-09-20&to=2023-10-12&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-09-20..2023-10-12&type=Issues) | [@diogoteles08](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adiogoteles08+updated%3A2023-09-20..2023-10-12&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-09-20..2023-10-12&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-09-20..2023-10-12&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2023-09-20..2023-10-12&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-09-20..2023-10-12&type=Issues)
-
-## 7.0.4
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/app@7.0.3...0e62386fc71ed4bd424c989f9d5493ca346f1d9a))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.6 [#7049](https://github.com/jupyter/notebook/pull/7049) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix `app_version` [#7061](https://github.com/jupyter/notebook/pull/7061) ([@jtpio](https://github.com/jtpio))
-- fix trusted status indication [#7036](https://github.com/jupyter/notebook/pull/7036) ([@adigaboy](https://github.com/adigaboy))
-
-### Maintenance and upkeep improvements
-
-- Update Binder environment [#7059](https://github.com/jupyter/notebook/pull/7059) ([@jtpio](https://github.com/jtpio))
-- Add `deduplicate` top-level script [#7058](https://github.com/jupyter/notebook/pull/7058) ([@jtpio](https://github.com/jtpio))
-- Move opening path in new browser tabs to a separate plugin [#7056](https://github.com/jupyter/notebook/pull/7056) ([@jtpio](https://github.com/jtpio))
-- Enable the Playwright trace [#7050](https://github.com/jupyter/notebook/pull/7050) ([@jtpio](https://github.com/jtpio))
-- Bump actions/checkout from 3 to 4 [#7040](https://github.com/jupyter/notebook/pull/7040) ([@dependabot](https://github.com/dependabot))
-- Adopt sp-repo-review [#7039](https://github.com/jupyter/notebook/pull/7039) ([@blink1073](https://github.com/blink1073))
-- Add `datetime.datetime.utc()` to the filter list [#7037](https://github.com/jupyter/notebook/pull/7037) ([@jtpio](https://github.com/jtpio))
-- Fix docs build on Gitpod [#7026](https://github.com/jupyter/notebook/pull/7026) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-08-30&to=2023-09-20&type=c))
-
-[@adigaboy](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aadigaboy+updated%3A2023-08-30..2023-09-20&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2023-08-30..2023-09-20&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-08-30..2023-09-20&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-08-30..2023-09-20&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-08-30..2023-09-20&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-08-30..2023-09-20&type=Issues)
-
-## 7.0.3
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/app@7.0.2...e2eb8f2a166ba7b339309b8bfbff40e6c9e0a9b9))
-
-### Bugs fixed
-
-- Require importlib_resources for testing on Python \< 3.10 [#7016](https://github.com/jupyter/notebook/pull/7016) ([@bnavigator](https://github.com/bnavigator))
-- Fix Python 3.12 compatibility [#6965](https://github.com/jupyter/notebook/pull/6965) ([@frenzymadness](https://github.com/frenzymadness))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab 4.0.5 [#7013](https://github.com/jupyter/notebook/pull/7013) ([@jtpio](https://github.com/jtpio))
-- Test against Python 3.12 [#6999](https://github.com/jupyter/notebook/pull/6999) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Mention the nx graph in the contributing guide [#7001](https://github.com/jupyter/notebook/pull/7001) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-08-04&to=2023-08-30&type=c))
-
-[@bnavigator](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abnavigator+updated%3A2023-08-04..2023-08-30&type=Issues) | [@defjaf](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adefjaf+updated%3A2023-08-04..2023-08-30&type=Issues) | [@frenzymadness](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afrenzymadness+updated%3A2023-08-04..2023-08-30&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-08-04..2023-08-30&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-08-04..2023-08-30&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2023-08-04..2023-08-30&type=Issues)
-
-## 7.0.2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/app@7.0.1...af5edd42374cadba65feed2e6828b1ef96295daf))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.4 packages [#6998](https://github.com/jupyter/notebook/pull/6998) ([@jtpio](https://github.com/jtpio))
-- Improve about dialog [#6996](https://github.com/jupyter/notebook/pull/6996) ([@yjrab](https://github.com/yjrab))
-- Added documentation link in Help menu [#6993](https://github.com/jupyter/notebook/pull/6993) ([@Mikil03](https://github.com/Mikil03))
-
-### Bugs fixed
-
-- Remove `RedirectHandler` [#6997](https://github.com/jupyter/notebook/pull/6997) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-07-31&to=2023-08-04&type=c))
-
-[@echarles](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aecharles+updated%3A2023-07-31..2023-08-04&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-07-31..2023-08-04&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-07-31..2023-08-04&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2023-07-31..2023-08-04&type=Issues) | [@Mikil03](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AMikil03+updated%3A2023-07-31..2023-08-04&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-07-31..2023-08-04&type=Issues) | [@shaneknapp](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ashaneknapp+updated%3A2023-07-31..2023-08-04&type=Issues) | [@yjrab](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ayjrab+updated%3A2023-07-31..2023-08-04&type=Issues) | [@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AZsailer+updated%3A2023-07-31..2023-08-04&type=Issues)
-
-## 7.0.1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/@jupyter-notebook/app@7.0.0...ac3c882a246b46c15c1963ef4b65427a4257b132))
-
-### Enhancements made
-
-- Update accessibly compliance section in the docs [#6982](https://github.com/jupyter/notebook/pull/6982) ([@andrii-i](https://github.com/andrii-i))
-- Update the browser tab favicon on kernel busy [#6980](https://github.com/jupyter/notebook/pull/6980) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Bump `word-wrap` and `semver` [#6979](https://github.com/jupyter/notebook/pull/6979) ([@jtpio](https://github.com/jtpio))
-- Enable lerna caching for build scripts [#6767](https://github.com/jupyter/notebook/pull/6767) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Update accessibly compliance section in the docs [#6982](https://github.com/jupyter/notebook/pull/6982) ([@andrii-i](https://github.com/andrii-i))
-- Fix link in `README.md` [#6973](https://github.com/jupyter/notebook/pull/6973) ([@jtpio](https://github.com/jtpio))
-- The future is now [#6972](https://github.com/jupyter/notebook/pull/6972) ([@frenzymadness](https://github.com/frenzymadness))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-07-19&to=2023-07-31&type=c))
-
-[@andrii-i](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandrii-i+updated%3A2023-07-19..2023-07-31&type=Issues) | [@echarles](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aecharles+updated%3A2023-07-19..2023-07-31&type=Issues) | [@frenzymadness](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afrenzymadness+updated%3A2023-07-19..2023-07-31&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-07-19..2023-07-31&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-07-19..2023-07-31&type=Issues) | [@prof-lupin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aprof-lupin+updated%3A2023-07-19..2023-07-31&type=Issues)
-
-## 7.0.0
-
-Jupyter Notebook 7 is released :tada:
-
-Check the changelog: https://jupyter-notebook.readthedocs.io/en/latest/changelog.html
-
-And the new features in Notebook 7: https://jupyter-notebook.readthedocs.io/en/latest/notebook_7_features.html
-
-Migration Guide: https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html
-
-______________________________________________________________________
-
-For reference here is the changelog since the last `7.0.0rc2` release.
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0rc2...2be98e8f39af7f3ec2729006018f6baf0998f94b))
-
-### Bugs fixed
-
-- Update Jupytext Notebook url path [#6961](https://github.com/jupyter/notebook/pull/6961) ([@RRosio](https://github.com/RRosio))
-
-### Maintenance and upkeep improvements
-
-- Fix hatch version when going from rc [#6971](https://github.com/jupyter/notebook/pull/6971) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.0.3 [#6967](https://github.com/jupyter/notebook/pull/6967) ([@jtpio](https://github.com/jtpio))
-- Bump semver from 7.5.0 to 7.5.3 in /ui-tests [#6950](https://github.com/jupyter/notebook/pull/6950) ([@dependabot](https://github.com/dependabot))
-
-### Documentation improvements
-
-- fix: update link to troubleshooting guidelines [#6964](https://github.com/jupyter/notebook/pull/6964) ([@emmanuel-ferdman](https://github.com/emmanuel-ferdman))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-06-26&to=2023-07-19&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-06-26..2023-07-19&type=Issues) | [@emmanuel-ferdman](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aemmanuel-ferdman+updated%3A2023-06-26..2023-07-19&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-06-26..2023-07-19&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-06-26..2023-07-19&type=Issues) | [@parmentelat](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aparmentelat+updated%3A2023-06-26..2023-07-19&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-06-26..2023-07-19&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2023-06-26..2023-07-19&type=Issues)
-
-## 7.0.0rc2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0rc1...27c00bc56afaa5b89713f760b0cc6eb88079224e))
-
-### Bugs fixed
-
-- Fix opening files from the CLI [#6946](https://github.com/jupyter/notebook/pull/6946) ([@jtpio](https://github.com/jtpio))
-- Fix handling of the base url [#6943](https://github.com/jupyter/notebook/pull/6943) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-06-22&to=2023-06-26&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-06-22..2023-06-26&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-06-22..2023-06-26&type=Issues) | [@parmentelat](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aparmentelat+updated%3A2023-06-22..2023-06-26&type=Issues)
-
-## 7.0.0rc1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0rc0...8493e1ba21ebaca5c192d68bdc829ccc5b29a799))
-
-### Enhancements made
-
-- Close the browser tab when clicking on "Close and Shut Down Notebook" [#6937](https://github.com/jupyter/notebook/pull/6937) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix the redirect handler [#6941](https://github.com/jupyter/notebook/pull/6941) ([@jtpio](https://github.com/jtpio))
-- Make jupyter logo select properly (#6927) [#6938](https://github.com/jupyter/notebook/pull/6938) ([@Cheukting](https://github.com/Cheukting))
-
-### Documentation improvements
-
-- Update issue templates [#6939](https://github.com/jupyter/notebook/pull/6939) ([@RRosio](https://github.com/RRosio))
-- Docs parity for find with JupyterLab. [#6917](https://github.com/jupyter/notebook/pull/6917) ([@ericsnekbytes](https://github.com/ericsnekbytes))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-06-19&to=2023-06-22&type=c))
-
-[@andrii-i](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandrii-i+updated%3A2023-06-19..2023-06-22&type=Issues) | [@Cheukting](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ACheukting+updated%3A2023-06-19..2023-06-22&type=Issues) | [@ericsnekbytes](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aericsnekbytes+updated%3A2023-06-19..2023-06-22&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-06-19..2023-06-22&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-06-19..2023-06-22&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2023-06-19..2023-06-22&type=Issues)
-
-## 7.0.0rc0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0b4...d0692112a4b2db20c2178205d4b5630184acbf7b))
-
-### Enhancements made
-
-- Update JupyterLab, audit document viewers [#6922](https://github.com/jupyter/notebook/pull/6922) ([@jtpio](https://github.com/jtpio))
-- Customize the shell layout with the settings [#6921](https://github.com/jupyter/notebook/pull/6921) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix default viewers override [#6923](https://github.com/jupyter/notebook/pull/6923) ([@jtpio](https://github.com/jtpio))
-- Align JupyterHub config with JupyterLab [#6918](https://github.com/jupyter/notebook/pull/6918) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Added example of custom css files [#6919](https://github.com/jupyter/notebook/pull/6919) ([@RRosio](https://github.com/RRosio))
-
-### API and Breaking Changes
-
-- Customize the shell layout with the settings [#6921](https://github.com/jupyter/notebook/pull/6921) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-06-12&to=2023-06-19&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-06-12..2023-06-19&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-06-12..2023-06-19&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2023-06-12..2023-06-19&type=Issues)
-
-## 7.0.0b4
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0b3...ee3e1c221226d482ca1c9bec6362c8af36f1da56))
-
-### Enhancements made
-
-- Rename browser tab title to Home [#6913](https://github.com/jupyter/notebook/pull/6913) ([@Cheukting](https://github.com/Cheukting))
-- Add the notification plugin [#6900](https://github.com/jupyter/notebook/pull/6900) ([@jtpio](https://github.com/jtpio))
-- Configurable `default_url` for JupyterNotebookApp [#6899](https://github.com/jupyter/notebook/pull/6899) ([@paulgb](https://github.com/paulgb))
-- Enhancement: Added drop shadows to markdown, text, and tree views [#6893](https://github.com/jupyter/notebook/pull/6893) ([@rielAsh24](https://github.com/rielAsh24))
-- Update to JupyterLab 4.0.1 [#6892](https://github.com/jupyter/notebook/pull/6892) ([@jtpio](https://github.com/jtpio))
-- Add file browser actions to the file browser toolbar [#6888](https://github.com/jupyter/notebook/pull/6888) ([@jtpio](https://github.com/jtpio))
-- Add option to open a notebook in NbClassic if it is installed; show "Open in..." dropdown menu if there are multiple options, show single button otherwise [#6866](https://github.com/jupyter/notebook/pull/6866) ([@andrii-i](https://github.com/andrii-i))
-- Load custom CSS [#6841](https://github.com/jupyter/notebook/pull/6841) ([@RRosio](https://github.com/RRosio))
-
-### Bugs fixed
-
-- Add an empty splash screen on notebook launch to avoid a flash of unstyled content [#6911](https://github.com/jupyter/notebook/pull/6911) ([@andrii-i](https://github.com/andrii-i))
-- Fix for "find searches only part of the file" bug [#6905](https://github.com/jupyter/notebook/pull/6905) ([@ericsnekbytes](https://github.com/ericsnekbytes))
-- Provide a custom rendermime plugin to handle local links [#6885](https://github.com/jupyter/notebook/pull/6885) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Fix check links on CI [#6910](https://github.com/jupyter/notebook/pull/6910) ([@jtpio](https://github.com/jtpio))
-- Add `JSONLicenseWebpackPlugin` [#6896](https://github.com/jupyter/notebook/pull/6896) ([@jtpio](https://github.com/jtpio))
-- Simplify Gitpod setup [#6894](https://github.com/jupyter/notebook/pull/6894) ([@jtpio](https://github.com/jtpio))
-- Fix action name in update workflow [#6884](https://github.com/jupyter/notebook/pull/6884) ([@jtpio](https://github.com/jtpio))
-- Fix playwright bot [#6880](https://github.com/jupyter/notebook/pull/6880) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Document how to manage plugins and extensions [#6909](https://github.com/jupyter/notebook/pull/6909) ([@jtpio](https://github.com/jtpio))
-- Jupyter Notebook ecosystem docs improvements [#6877](https://github.com/jupyter/notebook/pull/6877) ([@ericsnekbytes](https://github.com/ericsnekbytes))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-05-25&to=2023-06-12&type=c))
-
-[@andrii-i](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandrii-i+updated%3A2023-05-25..2023-06-12&type=Issues) | [@Cheukting](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ACheukting+updated%3A2023-05-25..2023-06-12&type=Issues) | [@echarles](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aecharles+updated%3A2023-05-25..2023-06-12&type=Issues) | [@ericsnekbytes](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aericsnekbytes+updated%3A2023-05-25..2023-06-12&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-05-25..2023-06-12&type=Issues) | [@henryiii](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ahenryiii+updated%3A2023-05-25..2023-06-12&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-05-25..2023-06-12&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2023-05-25..2023-06-12&type=Issues) | [@paulgb](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apaulgb+updated%3A2023-05-25..2023-06-12&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-05-25..2023-06-12&type=Issues) | [@rielAsh24](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ArielAsh24+updated%3A2023-05-25..2023-06-12&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2023-05-25..2023-06-12&type=Issues) | [@yuvipanda](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ayuvipanda+updated%3A2023-05-25..2023-06-12&type=Issues)
-
-## 7.0.0b3
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0b2...93e4d5e1c6ed7a3a4875eed284255587ac293819))
-
-### Enhancements made
-
-- Copy edits for `migrate_to_notebook7` [#6879](https://github.com/jupyter/notebook/pull/6879) ([@JasonWeill](https://github.com/JasonWeill))
-- Enable add a cell button [#6872](https://github.com/jupyter/notebook/pull/6872) ([@tuncbkose](https://github.com/tuncbkose))
-- Update to JupyterLab 4 final [#6871](https://github.com/jupyter/notebook/pull/6871) ([@jtpio](https://github.com/jtpio))
-- Remove "Close Tab" menu entry [#6843](https://github.com/jupyter/notebook/pull/6843) ([@timmerk3](https://github.com/timmerk3))
-
-### Bugs fixed
-
-- Fix handling of the default factory in the URL [#6873](https://github.com/jupyter/notebook/pull/6873) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Update to Playwright 1.33 [#6874](https://github.com/jupyter/notebook/pull/6874) ([@jtpio](https://github.com/jtpio))
-- Fix check links on CI [#6870](https://github.com/jupyter/notebook/pull/6870) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Copy edits for `migrate_to_notebook7` [#6879](https://github.com/jupyter/notebook/pull/6879) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-05-09&to=2023-05-25&type=c))
-
-[@andrii-i](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandrii-i+updated%3A2023-05-09..2023-05-25&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-05-09..2023-05-25&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJasonWeill+updated%3A2023-05-09..2023-05-25&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-05-09..2023-05-25&type=Issues) | [@timmerk3](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atimmerk3+updated%3A2023-05-09..2023-05-25&type=Issues) | [@tuncbkose](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atuncbkose+updated%3A2023-05-09..2023-05-25&type=Issues)
-
-## 7.0.0b2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0b1...c0071d796019c0221df4900313b51c0529438bcf))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0rc1 [#6864](https://github.com/jupyter/notebook/pull/6864) ([@jtpio](https://github.com/jtpio))
-- Change "Interface" menu to "Open in...", shorten names of menu items inside [#6847](https://github.com/jupyter/notebook/pull/6847) ([@andrii-i](https://github.com/andrii-i))
-- Add Skip Link to Notebook [#6844](https://github.com/jupyter/notebook/pull/6844) ([@seirani](https://github.com/seirani))
-
-### Bugs fixed
-
-- Fix top bar visibility not picking up settings overrides (#6833) [#6836](https://github.com/jupyter/notebook/pull/6836) ([@yumyumqing](https://github.com/yumyumqing))
-
-### Maintenance and upkeep improvements
-
-- Update RTD image [#6861](https://github.com/jupyter/notebook/pull/6861) ([@blink1073](https://github.com/blink1073))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-04-28&to=2023-05-09&type=c))
-
-[@andrii-i](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aandrii-i+updated%3A2023-04-28..2023-05-09&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2023-04-28..2023-05-09&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-04-28..2023-05-09&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-04-28..2023-05-09&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-04-28..2023-05-09&type=Issues) | [@seirani](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aseirani+updated%3A2023-04-28..2023-05-09&type=Issues) | [@yumyumqing](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ayumyumqing+updated%3A2023-04-28..2023-05-09&type=Issues)
-
-## 7.0.0b1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0b0...4b6af274b24bcc20e43ad2330c9243c8d2c7d552))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0rc0 [#6853](https://github.com/jupyter/notebook/pull/6853) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab `4.0.0b1` and `4.0.0b2` [#6838](https://github.com/jupyter/notebook/pull/6838) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fixes the notebooktools [#6834](https://github.com/jupyter/notebook/pull/6834) ([@brichet](https://github.com/brichet))
-
-### Maintenance and upkeep improvements
-
-- Use local coverage [#6839](https://github.com/jupyter/notebook/pull/6839) ([@blink1073](https://github.com/blink1073))
-
-### Documentation improvements
-
-- Added extra information and user-action summaries to 7 migration docs. [#6850](https://github.com/jupyter/notebook/pull/6850) ([@ericsnekbytes](https://github.com/ericsnekbytes))
-- Rename migration file to `migrate_to_notebook7` [#6831](https://github.com/jupyter/notebook/pull/6831) ([@jtpio](https://github.com/jtpio))
-- Use correct canonical URL while building docs [#6829](https://github.com/jupyter/notebook/pull/6829) ([@ashwinvis](https://github.com/ashwinvis))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-04-04&to=2023-04-28&type=c))
-
-[@ashwinvis](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aashwinvis+updated%3A2023-04-04..2023-04-28&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2023-04-04..2023-04-28&type=Issues) | [@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2023-04-04..2023-04-28&type=Issues) | [@ericsnekbytes](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aericsnekbytes+updated%3A2023-04-04..2023-04-28&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-04-04..2023-04-28&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-04-04..2023-04-28&type=Issues)
-
-## 7.0.0b0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a18...b99718f57a8beac7b4019901a57c94984781dd49))
-
-### Enhancements made
-
-- Update to JupyterLab `4.0.0b0` [#6803](https://github.com/jupyter/notebook/pull/6803) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- added white space to bottom of edit files [#6804](https://github.com/jupyter/notebook/pull/6804) ([@jesuscastillx](https://github.com/jesuscastillx))
-- Hides 'micro' toolbars in notebook [#6791](https://github.com/jupyter/notebook/pull/6791) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Maintenance and upkeep improvements
-
-- Add missing singleton packages for RTC [#6816](https://github.com/jupyter/notebook/pull/6816) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Improve the documentation for Notebook 7 [#6813](https://github.com/jupyter/notebook/pull/6813) ([@jtpio](https://github.com/jtpio))
-- fix typo in the migration guide [#6812](https://github.com/jupyter/notebook/pull/6812) ([@Tiksagol](https://github.com/Tiksagol))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-03-24&to=2023-04-04&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-03-24..2023-04-04&type=Issues) | [@j-publius](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aj-publius+updated%3A2023-03-24..2023-04-04&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJasonWeill+updated%3A2023-03-24..2023-04-04&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-03-24..2023-04-04&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-03-24..2023-04-04&type=Issues) | [@Tiksagol](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ATiksagol+updated%3A2023-03-24..2023-04-04&type=Issues)
-
-## 7.0.0a18
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a17...253efe279f8c8005f016f3dfe28c22233ee1d2dd))
-
-### Enhancements made
-
-- Add back the `csvviewer-extension` [#6799](https://github.com/jupyter/notebook/pull/6799) ([@jtpio](https://github.com/jtpio))
-- Fix JSON setting editor not opening issue [#6795](https://github.com/jupyter/notebook/pull/6795) ([@yumyumqing](https://github.com/yumyumqing))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-03-20&to=2023-03-24&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-03-20..2023-03-24&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-03-20..2023-03-24&type=Issues) | [@yumyumqing](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ayumyumqing+updated%3A2023-03-20..2023-03-24&type=Issues)
-
-## 7.0.0a17
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a16...7903de83e83a6ce342d71895dc1e8c2ec8128174))
-
-### Highlights
-
-This major change in this release is the update to the latest JupyterLab `4.0.0a37`.
-
-Check out the [JupyterLab `4.0.0a37` release notes](https://github.com/jupyterlab/jupyterlab/releases/tag/v4.0.0a37) for more details.
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0a37 [#6777](https://github.com/jupyter/notebook/pull/6777) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Replace the use of `toArray` by `Array.from` [#6775](https://github.com/jupyter/notebook/pull/6775) (`@tarunsamanta2k20`)
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-03-15&to=2023-03-20&type=c))
-
-[@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-03-15..2023-03-20&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-03-15..2023-03-20&type=Issues) | [@tarunsamanta2k20](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atarunsamanta2k20+updated%3A2023-03-15..2023-03-20&type=Issues)
-
-## 7.0.0a16
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a15...0faa88c8b65e0302f1904e4ca9cd2e551525f352))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0a36 [#6773](https://github.com/jupyter/notebook/pull/6773) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Clean up interface switcher plugin in preparation for release [#6766](https://github.com/jupyter/notebook/pull/6766) ([@afshin](https://github.com/afshin))
-- Remove empty `py.test` file [#6764](https://github.com/jupyter/notebook/pull/6764) ([@frenzymadness](https://github.com/frenzymadness))
-
-### Documentation improvements
-
-- Add documentation for contributing to the docs [#6771](https://github.com/jupyter/notebook/pull/6771) ([@jtpio](https://github.com/jtpio))
-- Convert docs to Markdown [#6770](https://github.com/jupyter/notebook/pull/6770) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-03-08&to=2023-03-15&type=c))
-
-[@afshin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafshin+updated%3A2023-03-08..2023-03-15&type=Issues) | [@frenzymadness](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afrenzymadness+updated%3A2023-03-08..2023-03-15&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-03-08..2023-03-15&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-03-08..2023-03-15&type=Issues)
-
-## 7.0.0a15
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a14...1ccb8f15d6bf3557eed2405438a9df3c1d6cd040))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0a35 [#6757](https://github.com/jupyter/notebook/pull/6757) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Bump vega from 5.22.1 to 5.23.0 in /ui-tests [#6756](https://github.com/jupyter/notebook/pull/6756) ([@dependabot](https://github.com/dependabot))
-- Bump vega-functions from 5.13.0 to 5.13.1 in /ui-tests [#6754](https://github.com/jupyter/notebook/pull/6754) ([@dependabot](https://github.com/dependabot))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-03-01&to=2023-03-08&type=c))
-
-[@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2023-03-01..2023-03-08&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-03-01..2023-03-08&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-03-01..2023-03-08&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-03-01..2023-03-08&type=Issues)
-
-## 7.0.0a14
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a13...f9e427cf4e92dbaa5794fe0331ca92b41d45d52c))
-
-### Enhancements made
-
-- Fix loading of plugins [#6750](https://github.com/jupyter/notebook/pull/6750) ([@jtpio](https://github.com/jtpio))
-- Add the extension manager [#6747](https://github.com/jupyter/notebook/pull/6747) ([@jtpio](https://github.com/jtpio))
-- File browser CSS tweaks [#6738](https://github.com/jupyter/notebook/pull/6738) ([@jtpio](https://github.com/jtpio))
-- Add trusted indicator [#6736](https://github.com/jupyter/notebook/pull/6736) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Clean up license [#6743](https://github.com/jupyter/notebook/pull/6743) ([@dcsaba89](https://github.com/dcsaba89))
-- Update to TypeScript 5 [#6735](https://github.com/jupyter/notebook/pull/6735) ([@jtpio](https://github.com/jtpio))
-- Enable `nx` [#6718](https://github.com/jupyter/notebook/pull/6718) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Corrected "Recomment" to "Recommend" [#6741](https://github.com/jupyter/notebook/pull/6741) ([@Tony-j77](https://github.com/Tony-j77))
-- Docs: add migrate to notebook7 page [#6737](https://github.com/jupyter/notebook/pull/6737) ([@echarles](https://github.com/echarles))
-- Add section about updating reference snapshots [#6733](https://github.com/jupyter/notebook/pull/6733) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-02-15&to=2023-03-01&type=c))
-
-[@dcsaba89](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adcsaba89+updated%3A2023-02-15..2023-03-01&type=Issues) | [@echarles](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aecharles+updated%3A2023-02-15..2023-03-01&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-02-15..2023-03-01&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-02-15..2023-03-01&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2023-02-15..2023-03-01&type=Issues) | [@Tony-j77](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ATony-j77+updated%3A2023-02-15..2023-03-01&type=Issues)
-
-## 7.0.0a13
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a12...ef67879306b27dfa78b8d639d9cc142b50f8c7ba))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0a34 [#6732](https://github.com/jupyter/notebook/pull/6732) ([@jtpio](https://github.com/jtpio))
-- Hide the debugger button on mobile [#6731](https://github.com/jupyter/notebook/pull/6731) ([@jtpio](https://github.com/jtpio))
-- Adds translator to the NotebookShell [#6725](https://github.com/jupyter/notebook/pull/6725) ([@brichet](https://github.com/brichet))
-- Resolving some accessibility issues [#6719](https://github.com/jupyter/notebook/pull/6719) ([@brichet](https://github.com/brichet))
-
-### Maintenance and upkeep improvements
-
-- Fix Playwright snapshot update workflow [#6724](https://github.com/jupyter/notebook/pull/6724) ([@jtpio](https://github.com/jtpio))
-- Add workflow to update snapshots [#6723](https://github.com/jupyter/notebook/pull/6723) ([@jtpio](https://github.com/jtpio))
-- Use Playwright `webServer` [#6720](https://github.com/jupyter/notebook/pull/6720) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-02-08&to=2023-02-15&type=c))
-
-[@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2023-02-08..2023-02-15&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-02-08..2023-02-15&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-02-08..2023-02-15&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2023-02-08..2023-02-15&type=Issues)
-
-## 7.0.0a12
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a11...27c2bfbb80d42a3fd2541b13fae6143e2e91e4dd))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0a33 [#6713](https://github.com/jupyter/notebook/pull/6713) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Add more lint checks [#6706](https://github.com/jupyter/notebook/pull/6706) ([@blink1073](https://github.com/blink1073))
-- Reintroduce desktop file [#6705](https://github.com/jupyter/notebook/pull/6705) ([@frenzymadness](https://github.com/frenzymadness))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-01-19&to=2023-02-08&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2023-01-19..2023-02-08&type=Issues) | [@frenzymadness](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afrenzymadness+updated%3A2023-01-19..2023-02-08&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-01-19..2023-02-08&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-01-19..2023-02-08&type=Issues)
-
-## 7.0.0a11
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a10...6d4eeed9d176e2523be7874ae4d9f46a99422d72))
-
-### Enhancements made
-
-- Tree view enhancement [#6588](https://github.com/jupyter/notebook/pull/6588) ([@brichet](https://github.com/brichet))
-- Add the Settings Editor to the landing page [#6316](https://github.com/jupyter/notebook/pull/6316) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix console error when adding a widget to a side panel [#6694](https://github.com/jupyter/notebook/pull/6694) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Help-extension split into multiple plugins [#6700](https://github.com/jupyter/notebook/pull/6700) ([@RRosio](https://github.com/RRosio))
-- Add releaser workflows [#6698](https://github.com/jupyter/notebook/pull/6698) ([@blink1073](https://github.com/blink1073))
-- Create `auto_author_assign.yml` workflow [#6696](https://github.com/jupyter/notebook/pull/6696) ([@jtpio](https://github.com/jtpio))
-- Add back `# type:ignore` [#6695](https://github.com/jupyter/notebook/pull/6695) ([@jtpio](https://github.com/jtpio))
-- Fix environment activation on Gitpod [#6693](https://github.com/jupyter/notebook/pull/6693) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2023-01-09&to=2023-01-19&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2023-01-09..2023-01-19&type=Issues) | [@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2023-01-09..2023-01-19&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2023-01-09..2023-01-19&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2023-01-09..2023-01-19&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2023-01-09..2023-01-19&type=Issues)
-
-## 7.0.0a10
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a9...6205bf376f783b7202af71e1074f44086ee7056c))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0a32 [#6678](https://github.com/jupyter/notebook/pull/6678) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Bump json5 from 2.2.1 to 2.2.3 in /ui-tests [#6684](https://github.com/jupyter/notebook/pull/6684) ([@dependabot](https://github.com/dependabot))
-- Bump json5 from 1.0.1 to 1.0.2 [#6681](https://github.com/jupyter/notebook/pull/6681) ([@dependabot](https://github.com/dependabot))
-- Update the copyright date to 2023 in the about dialog [#6679](https://github.com/jupyter/notebook/pull/6679) ([@jtpio](https://github.com/jtpio))
-- Fix `check_links` and `Test Lint` CI failures [#6675](https://github.com/jupyter/notebook/pull/6675) ([@jtpio](https://github.com/jtpio))
-- Add spelling and docstring enforcement [#6669](https://github.com/jupyter/notebook/pull/6669) ([@blink1073](https://github.com/blink1073))
-- CI Cleanup [#6667](https://github.com/jupyter/notebook/pull/6667) ([@blink1073](https://github.com/blink1073))
-- Adopt ruff and typing [#6658](https://github.com/jupyter/notebook/pull/6658) ([@blink1073](https://github.com/blink1073))
-- Bump decode-uri-component from 0.2.0 to 0.2.2 [#6651](https://github.com/jupyter/notebook/pull/6651) ([@dependabot](https://github.com/dependabot))
-- Bump dessant/lock-threads from 3 to 4 [#6650](https://github.com/jupyter/notebook/pull/6650) ([@dependabot](https://github.com/dependabot))
-- Update to TypeScript 4.9 [#6640](https://github.com/jupyter/notebook/pull/6640) ([@jtpio](https://github.com/jtpio))
-- Add more Python tests [#6639](https://github.com/jupyter/notebook/pull/6639) ([@blink1073](https://github.com/blink1073))
-- use main branch for config [#6638](https://github.com/jupyter/notebook/pull/6638) ([@blink1073](https://github.com/blink1073))
-- Clean up workflows [#6635](https://github.com/jupyter/notebook/pull/6635) ([@blink1073](https://github.com/blink1073))
-- CI Cleanup [#6631](https://github.com/jupyter/notebook/pull/6631) ([@blink1073](https://github.com/blink1073))
-- Fix issue template formatting [#6626](https://github.com/jupyter/notebook/pull/6626) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Remove PDF link to Jupyter Notebook docs [#6648](https://github.com/jupyter/notebook/pull/6648) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-11-21&to=2023-01-09&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2022-11-21..2023-01-09&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2022-11-21..2023-01-09&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-11-21..2023-01-09&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-11-21..2023-01-09&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2022-11-21..2023-01-09&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2022-11-21..2023-01-09&type=Issues) | [@yacchin1205](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ayacchin1205+updated%3A2022-11-21..2023-01-09&type=Issues)
-
-## 7.0.0a9
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a8...b4006ce47bf37b31a7049a77971d7e5db1070660))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0a31 [#6627](https://github.com/jupyter/notebook/pull/6627) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Explicitly specify favicon for /tree view in Notebook [#6608](https://github.com/jupyter/notebook/pull/6608) ([@mcrutch](https://github.com/mcrutch))
-
-### Maintenance and upkeep improvements
-
-- Add run-p (npm-run-all) to dev dependencies [#6629](https://github.com/jupyter/notebook/pull/6629) ([@gabalafou](https://github.com/gabalafou))
-- Moves panel related objects to a dedicated module file [#6625](https://github.com/jupyter/notebook/pull/6625) ([@brichet](https://github.com/brichet))
-- Use pathlib instead of os.path.join in `tests/conftest.py` [#6624](https://github.com/jupyter/notebook/pull/6624) ([@kianelbo](https://github.com/kianelbo))
-- Bump loader-utils from 1.4.1 to 1.4.2 [#6623](https://github.com/jupyter/notebook/pull/6623) ([@dependabot](https://github.com/dependabot))
-- Bump to Python 3.11 on CI [#6600](https://github.com/jupyter/notebook/pull/6600) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-11-11&to=2022-11-21&type=c))
-
-[@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2022-11-11..2022-11-21&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2022-11-11..2022-11-21&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afcollonval+updated%3A2022-11-11..2022-11-21&type=Issues) | [@gabalafou](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agabalafou+updated%3A2022-11-11..2022-11-21&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-11-11..2022-11-21&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-11-11..2022-11-21&type=Issues) | [@kianelbo](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akianelbo+updated%3A2022-11-11..2022-11-21&type=Issues) | [@mcrutch](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Amcrutch+updated%3A2022-11-11..2022-11-21&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2022-11-11..2022-11-21&type=Issues)
-
-## 7.0.0a8
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a7...9141f3eabb6a10a5bf742b26713405f9768cb6d2))
-
-### Enhancements made
-
-- Restyle about dialog [#6592](https://github.com/jupyter/notebook/pull/6592) ([@kostyafarber](https://github.com/kostyafarber))
-
-### Bugs fixed
-
-- Fix async contents handling and add test [#6616](https://github.com/jupyter/notebook/pull/6616) ([@blink1073](https://github.com/blink1073))
-- Fix PDF renderer [#6584](https://github.com/jupyter/notebook/pull/6584) ([@brichet](https://github.com/brichet))
-- Fix HTML viewer [#6583](https://github.com/jupyter/notebook/pull/6583) ([@brichet](https://github.com/brichet))
-
-### Maintenance and upkeep improvements
-
-- Bump loader-utils from 1.4.0 to 1.4.1 [#6615](https://github.com/jupyter/notebook/pull/6615) ([@dependabot](https://github.com/dependabot))
-- Bump dessant/lock-threads from 2 to 3 [#6587](https://github.com/jupyter/notebook/pull/6587) ([@dependabot](https://github.com/dependabot))
-- Add dependabot config to update GitHub Actions [#6586](https://github.com/jupyter/notebook/pull/6586) ([@jtpio](https://github.com/jtpio))
-- Update `actions/checkout` and `actions/download-artifact` [#6585](https://github.com/jupyter/notebook/pull/6585) ([@jtpio](https://github.com/jtpio))
-- Maintenance cleanup [#6581](https://github.com/jupyter/notebook/pull/6581) ([@blink1073](https://github.com/blink1073))
-- Update to lerna 6 [#6579](https://github.com/jupyter/notebook/pull/6579) ([@jtpio](https://github.com/jtpio))
-- Remove the `nbclassic` explicit uninstall on Binder [#6548](https://github.com/jupyter/notebook/pull/6548) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-10-13&to=2022-11-11&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2022-10-13..2022-11-11&type=Issues) | [@bnavigator](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abnavigator+updated%3A2022-10-13..2022-11-11&type=Issues) | [@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2022-10-13..2022-11-11&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2022-10-13..2022-11-11&type=Issues) | [@echarles](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aecharles+updated%3A2022-10-13..2022-11-11&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afcollonval+updated%3A2022-10-13..2022-11-11&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-10-13..2022-11-11&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-10-13..2022-11-11&type=Issues) | [@kostyafarber](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akostyafarber+updated%3A2022-10-13..2022-11-11&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2022-10-13..2022-11-11&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2022-10-13..2022-11-11&type=Issues) | [@venkatasg](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Avenkatasg+updated%3A2022-10-13..2022-11-11&type=Issues)
-
-## 7.0.0a7
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a6...caa0a11e36901c08ae80100fe2bbc5161c47dfee))
-
-### Enhancements made
-
-- Fixed user menu alignment [#6565](https://github.com/jupyter/notebook/pull/6565) ([@Mieju](https://github.com/Mieju))
-- Support for Left and Right panels [#6487](https://github.com/jupyter/notebook/pull/6487) ([@brichet](https://github.com/brichet))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab 4.0.0a30 [#6566](https://github.com/jupyter/notebook/pull/6566) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- Fix typo in CHANGELOG.md [#6561](https://github.com/jupyter/notebook/pull/6561) ([@eltociear](https://github.com/eltociear))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-10-03&to=2022-10-13&type=c))
-
-[@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2022-10-03..2022-10-13&type=Issues) | [@eltociear](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aeltociear+updated%3A2022-10-03..2022-10-13&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-10-03..2022-10-13&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-10-03..2022-10-13&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2022-10-03..2022-10-13&type=Issues) | [@Mieju](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AMieju+updated%3A2022-10-03..2022-10-13&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2022-10-03..2022-10-13&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2022-10-03..2022-10-13&type=Issues)
-
-## 7.0.0a6
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a5...acbec17feca2ae8a0f56c5ec04ba2475a42619ee))
-
-### Enhancements made
-
-- Add token on tree widget [#6496](https://github.com/jupyter/notebook/pull/6496) ([@brichet](https://github.com/brichet))
-- Updates README to document maintained versions [#6480](https://github.com/jupyter/notebook/pull/6480) ([@JasonWeill](https://github.com/JasonWeill))
-- Change the tab renderer to allow adding closable tab [#6477](https://github.com/jupyter/notebook/pull/6477) ([@brichet](https://github.com/brichet))
-
-### Bugs fixed
-
-- Fix: No mouse pointer when hovering on the Jupyter icon [#6550](https://github.com/jupyter/notebook/pull/6550) ([@hawkeyes21](https://github.com/hawkeyes21))
-
-### Maintenance and upkeep improvements
-
-- Switch to hatch for python version [#6544](https://github.com/jupyter/notebook/pull/6544) ([@blink1073](https://github.com/blink1073))
-- Update to Lumino 2 and JupyterLab 4.0.0a29 [#6539](https://github.com/jupyter/notebook/pull/6539) ([@afshin](https://github.com/afshin))
-- Update lerna version [#6535](https://github.com/jupyter/notebook/pull/6535) ([@blink1073](https://github.com/blink1073))
-- Add task to auto activate the dev environment on Gitpod [#6527](https://github.com/jupyter/notebook/pull/6527) ([@jtpio](https://github.com/jtpio))
-- Troubleshoot failing `macos` check on CI [#6523](https://github.com/jupyter/notebook/pull/6523) ([@jtpio](https://github.com/jtpio))
-- Update reference snapshots [#6520](https://github.com/jupyter/notebook/pull/6520) ([@jtpio](https://github.com/jtpio))
-- Add Gitpod files [#6518](https://github.com/jupyter/notebook/pull/6518) ([@jtpio](https://github.com/jtpio))
-- Adding jupyterlab-probot yml file for labeling new issues [#6506](https://github.com/jupyter/notebook/pull/6506) ([@RRosio](https://github.com/RRosio))
-- Uninstall `nbclassic` on Binder so Notebook v7 can load [#6505](https://github.com/jupyter/notebook/pull/6505) ([@jtpio](https://github.com/jtpio))
-- Pin `ypy-websocket` to `0.2` [#6499](https://github.com/jupyter/notebook/pull/6499) ([@jtpio](https://github.com/jtpio))
-- Bump moment from 2.29.3 to 2.29.4 [#6483](https://github.com/jupyter/notebook/pull/6483) ([@dependabot](https://github.com/dependabot))
-- Bump moment from 2.29.2 to 2.29.4 in /ui-tests [#6482](https://github.com/jupyter/notebook/pull/6482) ([@dependabot](https://github.com/dependabot))
-- Bump terser from 5.13.1 to 5.14.2 [#6481](https://github.com/jupyter/notebook/pull/6481) ([@dependabot](https://github.com/dependabot))
-- Bump parse-url from 6.0.0 to 6.0.2 [#6465](https://github.com/jupyter/notebook/pull/6465) ([@dependabot](https://github.com/dependabot))
-- Fix tests [#6464](https://github.com/jupyter/notebook/pull/6464) ([@jtpio](https://github.com/jtpio))
-- Bump jpeg-js from 0.4.3 to 0.4.4 in /ui-tests [#6455](https://github.com/jupyter/notebook/pull/6455) ([@dependabot](https://github.com/dependabot))
-
-### Documentation improvements
-
-- Updates README to document maintained versions [#6480](https://github.com/jupyter/notebook/pull/6480) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-06-14&to=2022-10-03&type=c))
-
-[@afshin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafshin+updated%3A2022-06-14..2022-10-03&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2022-06-14..2022-10-03&type=Issues) | [@brichet](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abrichet+updated%3A2022-06-14..2022-10-03&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2022-06-14..2022-10-03&type=Issues) | [@echarles](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aecharles+updated%3A2022-06-14..2022-10-03&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-06-14..2022-10-03&type=Issues) | [@hawkeyes21](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ahawkeyes21+updated%3A2022-06-14..2022-10-03&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-06-14..2022-10-03&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJasonWeill+updated%3A2022-06-14..2022-10-03&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2022-06-14..2022-10-03&type=Issues) | [@RRosio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ARRosio+updated%3A2022-06-14..2022-10-03&type=Issues)
-
-## 7.0.0a5
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a4...614e4780b88f5cf5e2bfda39a55357a0be5ef161))
-
-### Enhancements made
-
-- Add shadow to cells [#6433](https://github.com/jupyter/notebook/pull/6433) ([@trungleduc](https://github.com/trungleduc))
-
-### Maintenance and upkeep improvements
-
-- Fix docs build [#6447](https://github.com/jupyter/notebook/pull/6447) ([@jtpio](https://github.com/jtpio))
-- \[pre-commit.ci\] pre-commit autoupdate [#6444](https://github.com/jupyter/notebook/pull/6444) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- \[pre-commit.ci\] pre-commit autoupdate [#6439](https://github.com/jupyter/notebook/pull/6439) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- \[pre-commit.ci\] pre-commit autoupdate [#6434](https://github.com/jupyter/notebook/pull/6434) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Use hatch backend [#6425](https://github.com/jupyter/notebook/pull/6425) ([@blink1073](https://github.com/blink1073))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-05-20&to=2022-06-14&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2022-05-20..2022-06-14&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-05-20..2022-06-14&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-05-20..2022-06-14&type=Issues) | [@ofek](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aofek+updated%3A2022-05-20..2022-06-14&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2022-05-20..2022-06-14&type=Issues) | [@trungleduc](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atrungleduc+updated%3A2022-05-20..2022-06-14&type=Issues)
-
-## 7.0.0a4
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a3...4bfaaac148a25ba76fcc7416e3a7b2c714b36fcd))
-
-### Enhancements made
-
-- Update to JupyterLab 4.0.0a25 [#6429](https://github.com/jupyter/notebook/pull/6429) ([@jtpio](https://github.com/jtpio))
-- Add cell toolbar extension [#6418](https://github.com/jupyter/notebook/pull/6418) ([@jtpio](https://github.com/jtpio))
-- add the show header command to the command palette [#6415](https://github.com/jupyter/notebook/pull/6415) ([@jeewonkoo](https://github.com/jeewonkoo))
-- Remove the "Appearance" menu entry [#6412](https://github.com/jupyter/notebook/pull/6412) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- \[pre-commit.ci\] pre-commit autoupdate [#6426](https://github.com/jupyter/notebook/pull/6426) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Allow bot PRs to be automatically labeled [#6414](https://github.com/jupyter/notebook/pull/6414) ([@blink1073](https://github.com/blink1073))
-- Add Visual Regression Test for the export submenu [#6383](https://github.com/jupyter/notebook/pull/6383) ([@jtpio](https://github.com/jtpio))
-- Fix ESLint config for tests [#6382](https://github.com/jupyter/notebook/pull/6382) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-04-27&to=2022-05-20&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2022-04-27..2022-05-20&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-04-27..2022-05-20&type=Issues) | [@jeewonkoo](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajeewonkoo+updated%3A2022-04-27..2022-05-20&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-04-27..2022-05-20&type=Issues) | [@ofek](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aofek+updated%3A2022-04-27..2022-05-20&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2022-04-27..2022-05-20&type=Issues)
-
-## 7.0.0a3
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a2...4076882c0e08875dd719945835f8cbe5b10eac9e))
-
-### Enhancements made
-
-- Show file checkboxes by default in the file browser [#6377](https://github.com/jupyter/notebook/pull/6377) ([@jtpio](https://github.com/jtpio))
-- Remove blank space at the bottom of the notebook [#6376](https://github.com/jupyter/notebook/pull/6376) ([@jtpio](https://github.com/jtpio))
-- Add a label to the upload button [#6374](https://github.com/jupyter/notebook/pull/6374) ([@jtpio](https://github.com/jtpio))
-- Update to JupyterLab 4.0.0a24 [#6371](https://github.com/jupyter/notebook/pull/6371) ([@jtpio](https://github.com/jtpio))
-- Initialize handler page_config from Server traitlets [#6366](https://github.com/jupyter/notebook/pull/6366) ([@bollwyvl](https://github.com/bollwyvl))
-- Add project URLs to setup.cfg [#6346](https://github.com/jupyter/notebook/pull/6346) ([@tlinhart](https://github.com/tlinhart))
-- Update to JupyterLab 4.0.0a23 [#6336](https://github.com/jupyter/notebook/pull/6336) ([@jtpio](https://github.com/jtpio))
-
-### Bugs fixed
-
-- Fix opening JupyterLab from Notebook [#6379](https://github.com/jupyter/notebook/pull/6379) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Add UI tests for a simple notebook [#6380](https://github.com/jupyter/notebook/pull/6380) ([@jtpio](https://github.com/jtpio))
-- Bump async from 2.6.3 to 2.6.4 in /ui-tests [#6370](https://github.com/jupyter/notebook/pull/6370) ([@dependabot](https://github.com/dependabot))
-- Fix build workflow on CI [#6369](https://github.com/jupyter/notebook/pull/6369) ([@jtpio](https://github.com/jtpio))
-- \[pre-commit.ci\] pre-commit autoupdate [#6365](https://github.com/jupyter/notebook/pull/6365) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- \[pre-commit.ci\] pre-commit autoupdate [#6355](https://github.com/jupyter/notebook/pull/6355) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Bump moment from 2.29.1 to 2.29.2 [#6352](https://github.com/jupyter/notebook/pull/6352) ([@dependabot](https://github.com/dependabot))
-- Bump moment from 2.29.1 to 2.29.2 in /ui-tests [#6351](https://github.com/jupyter/notebook/pull/6351) ([@dependabot](https://github.com/dependabot))
-- Clean up pre-commit [#6349](https://github.com/jupyter/notebook/pull/6349) ([@blink1073](https://github.com/blink1073))
-- Update to TypeScript 4.6 [#6345](https://github.com/jupyter/notebook/pull/6345) ([@jtpio](https://github.com/jtpio))
-- \[pre-commit.ci\] pre-commit autoupdate [#6343](https://github.com/jupyter/notebook/pull/6343) ([@pre-commit-ci](https://github.com/pre-commit-ci))
-- Add pytest and handle warnings [#6338](https://github.com/jupyter/notebook/pull/6338) ([@blink1073](https://github.com/blink1073))
-- Add flake8 and git-blame-ignore-revs [#6337](https://github.com/jupyter/notebook/pull/6337) ([@blink1073](https://github.com/blink1073))
-- Run Autoformatters [#6335](https://github.com/jupyter/notebook/pull/6335) ([@blink1073](https://github.com/blink1073))
-- Bump minimist from 1.2.5 to 1.2.6 [#6334](https://github.com/jupyter/notebook/pull/6334) ([@dependabot](https://github.com/dependabot))
-- Bump minimist from 1.2.5 to 1.2.6 in /ui-tests [#6333](https://github.com/jupyter/notebook/pull/6333) ([@dependabot](https://github.com/dependabot))
-- Bump ansi-regex from 3.0.0 to 3.0.1 in /ui-tests [#6332](https://github.com/jupyter/notebook/pull/6332) ([@dependabot](https://github.com/dependabot))
-- Adopt pre-commit [#6331](https://github.com/jupyter/notebook/pull/6331) ([@blink1073](https://github.com/blink1073))
-
-### Documentation improvements
-
-- Link to v6 plan in the README [#6375](https://github.com/jupyter/notebook/pull/6375) ([@echarles](https://github.com/echarles))
-- Copy edits in config, edits bug report template [#6364](https://github.com/jupyter/notebook/pull/6364) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-03-21&to=2022-04-27&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2022-03-21..2022-04-27&type=Issues) | [@bollwyvl](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abollwyvl+updated%3A2022-03-21..2022-04-27&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2022-03-21..2022-04-27&type=Issues) | [@echarles](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aecharles+updated%3A2022-03-21..2022-04-27&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-03-21..2022-04-27&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-03-21..2022-04-27&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJasonWeill+updated%3A2022-03-21..2022-04-27&type=Issues) | [@pre-commit-ci](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apre-commit-ci+updated%3A2022-03-21..2022-04-27&type=Issues) | [@tlinhart](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atlinhart+updated%3A2022-03-21..2022-04-27&type=Issues)
-
-## 7.0.0a2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v7.0.0a1...9be03f5f27232d50b16dbbaa50a222260166694c))
-
-### Enhancements made
-
-- Add support for opening a document with a different factory [#6315](https://github.com/jupyter/notebook/pull/6315) ([@jtpio](https://github.com/jtpio))
-- Minor copy edit in README [#6313](https://github.com/jupyter/notebook/pull/6313) ([@JasonWeill](https://github.com/JasonWeill))
-
-### Bugs fixed
-
-- Fix rendering of markdown [#6318](https://github.com/jupyter/notebook/pull/6318) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Update to JupyterLab 4.0.0a22 [#6314](https://github.com/jupyter/notebook/pull/6314) ([@jtpio](https://github.com/jtpio))
-
-### Documentation improvements
-
-- docs: fix spelling [#6317](https://github.com/jupyter/notebook/pull/6317) ([@dijonkitchen](https://github.com/dijonkitchen))
-- Minor copy edit in README [#6313](https://github.com/jupyter/notebook/pull/6313) ([@JasonWeill](https://github.com/JasonWeill))
-- Update example notebook on Binder [#6306](https://github.com/jupyter/notebook/pull/6306) ([@jtpio](https://github.com/jtpio))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-03-09&to=2022-03-21&type=c))
-
-[@dijonkitchen](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adijonkitchen+updated%3A2022-03-09..2022-03-21&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afcollonval+updated%3A2022-03-09..2022-03-21&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-03-09..2022-03-21&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-03-09..2022-03-21&type=Issues) | [@JasonWeill](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJasonWeill+updated%3A2022-03-09..2022-03-21&type=Issues)
-
-## 7.0.0a1
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v6.4.8...22fe46f3e806aa346625f6ef2f2a024d030a068d))
-
-### Enhancements made
-
-- Notebook v7 scaffolding [#6294](https://github.com/jupyter/notebook/pull/6294) ([@jtpio](https://github.com/jtpio))
-
-### Maintenance and upkeep improvements
-
-- Clean up CI [#6304](https://github.com/jupyter/notebook/pull/6304) ([@blink1073](https://github.com/blink1073))
-- Remove the custom run keyboard shortcut [#6303](https://github.com/jupyter/notebook/pull/6303) ([@jtpio](https://github.com/jtpio))
-- Bump nanoid from 3.1.30 to 3.3.1 in /ui-tests [#6302](https://github.com/jupyter/notebook/pull/6302) ([@dependabot](https://github.com/dependabot))
-- Bump simple-get from 3.1.0 to 3.1.1 in /ui-tests [#6301](https://github.com/jupyter/notebook/pull/6301) ([@dependabot](https://github.com/dependabot))
-- Bump url-parse from 1.5.4 to 1.5.10 in /ui-tests [#6300](https://github.com/jupyter/notebook/pull/6300) ([@dependabot](https://github.com/dependabot))
-- Bump node-fetch from 2.6.6 to 2.6.7 in /ui-tests [#6299](https://github.com/jupyter/notebook/pull/6299) ([@dependabot](https://github.com/dependabot))
-- Bump follow-redirects from 1.14.5 to 1.14.9 in /ui-tests [#6298](https://github.com/jupyter/notebook/pull/6298) ([@dependabot](https://github.com/dependabot))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-01-25&to=2022-03-09&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2022-01-25..2022-03-09&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adependabot+updated%3A2022-01-25..2022-03-09&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agithub-actions+updated%3A2022-01-25..2022-03-09&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2022-01-25..2022-03-09&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2022-01-25..2022-03-09&type=Issues) | [@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AZsailer+updated%3A2022-01-25..2022-03-09&type=Issues)
-
-## 6.4.8
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v6.4.7...479902d83a691253e0cff8439a33577e82408317))
-
-### Bugs fixed
-
-- Fix to remove potential memory leak on Jupyter Notebooks ZMQChannelHandler code [#6251](https://github.com/jupyter/notebook/pull/6251) ([@Vishwajeet0510](https://github.com/Vishwajeet0510))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2022-01-12&to=2022-01-25&type=c))
-
-[@Vishwajeet0510](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AVishwajeet0510+updated%3A2022-01-12..2022-01-25&type=Issues)
-
-## 6.4.7
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v6.4.6...b77b5e38b8fa1a20150d7fa4d735dbf1c4f00418))
-
-### Bugs fixed
-
-- Fix Chinese punctuation [#6268](https://github.com/jupyter/notebook/pull/6268) ([@LiHua-Official](https://github.com/LiHua-Official))
-- Add date field to kernel message header [#6265](https://github.com/jupyter/notebook/pull/6265) ([@kevin-bates](https://github.com/kevin-bates))
-- Fix deprecation warning [#6253](https://github.com/jupyter/notebook/pull/6253) ([@tornaria](https://github.com/tornaria))
-
-### Maintenance and upkeep improvements
-
-- Enforce labels on PRs [#6235](https://github.com/jupyter/notebook/pull/6235) ([@blink1073](https://github.com/blink1073))
-- Fix: CI error for python 3.6 & macOS [#6215](https://github.com/jupyter/notebook/pull/6215) ([@penguinolog](https://github.com/penguinolog))
-
-### Other merged PRs
-
-- handle KeyError when get session [#6245](https://github.com/jupyter/notebook/pull/6245) ([@ccw630](https://github.com/ccw630))
-- Updated doc for passwd [#6209](https://github.com/jupyter/notebook/pull/6209) ([@antoinecarme](https://github.com/antoinecarme))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2021-11-16&to=2022-01-12&type=c))
-
-[@antoinecarme](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aantoinecarme+updated%3A2021-11-16..2022-01-12&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2021-11-16..2022-01-12&type=Issues) | [@ccw630](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Accw630+updated%3A2021-11-16..2022-01-12&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2021-11-16..2022-01-12&type=Issues) | [@LiHua-Official](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ALiHua-Official+updated%3A2021-11-16..2022-01-12&type=Issues) | [@penguinolog](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Apenguinolog+updated%3A2021-11-16..2022-01-12&type=Issues) | [@tornaria](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atornaria+updated%3A2021-11-16..2022-01-12&type=Issues)
-
-## 6.4.6
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v6.4.5...160c27d3c23dafe8b42240571db21b0d5cbae2fe))
-
-### Bugs fixed
-
-- Fix `asyncio` error when opening notebooks [#6221](https://github.com/jupyter/notebook/pull/6221) ([@dleen](https://github.com/dleen))
-- Change to use a universal Chinese translation on certain words [#6218](https://github.com/jupyter/notebook/pull/6218) ([@jackexu](https://github.com/jackexu))
-- Fix Chinese translation typo [#6211](https://github.com/jupyter/notebook/pull/6211) ([@maliubiao](https://github.com/maliubiao)
-- Fix `send2trash` tests failing on Windows [#6127](https://github.com/jupyter/notebook/pull/6127) ([@dolfinus](https://github.com/dolfinus))
-
-### Maintenance and upkeep improvements
-
-- TST: don't look in user site for serverextensions [#6233](https://github.com/jupyter/notebook/pull/6233) ([@bnavigator](https://github.com/bnavigator))
-- Enable terminal tests as `pywinpty` is ported for python 3.9 [#6228](https://github.com/jupyter/notebook/pull/6228) (`@nsait-linaro`)
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2021-10-19&to=2021-11-16&type=c))
-
-[@bnavigator](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abnavigator+updated%3A2021-10-19..2021-11-16&type=Issues) | [@dleen](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adleen+updated%3A2021-10-19..2021-11-16&type=Issues) | [@dolfinus](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adolfinus+updated%3A2021-10-19..2021-11-16&type=Issues) | [@jackexu](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajackexu+updated%3A2021-10-19..2021-11-16&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2021-10-19..2021-11-16&type=Issues) | [@maliubiao](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Amaliubiao+updated%3A2021-10-19..2021-11-16&type=Issues) | `@nsait-linaro` | [@takluyver](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atakluyver+updated%3A2021-10-19..2021-11-16&type=Issues) | [@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AZsailer+updated%3A2021-10-19..2021-11-16&type=Issues)
-
-## 6.4.5
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v6.4.4...ccd9665571107e02a325a738b8baebd6532b2d3d))
-
-### Bug fixes
-
-- Recover from failure to render mimetype [#6181](https://github.com/jupyter/notebook/pull/6181) ([@martinRenou](https://github.com/martinRenou))
-
-### Maintenance and upkeep improvements
-
-- Fix crypto handling [#6197](https://github.com/jupyter/notebook/pull/6197) ([@blink1073](https://github.com/blink1073))
-- Fix `jupyter_client` warning [#6178](https://github.com/jupyter/notebook/pull/6178) ([@martinRenou](https://github.com/martinRenou))
-
-### Documentation improvements
-
-- Fix nbsphinx settings [#6200](https://github.com/jupyter/notebook/pull/6200) ([@mgeier](https://github.com/mgeier))
-- Fully revert the pinning of `nbsphinx` to 0.8.6 [#6201](https://github.com/jupyter/notebook/pull/6201) ([@kevin-bates](https://github.com/kevin-bates))
-- Pin `nbsphinx` to 0.8.6, clean up orphaned resources [#6194](https://github.com/jupyter/notebook/pull/6194) ([@kevin-bates](https://github.com/kevin-bates))
-- Fix typo in docstring [#6188](https://github.com/jupyter/notebook/pull/6188) ([@jgarte](https://github.com/jgarte))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2021-09-03&to=2021-10-19&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2021-09-03..2021-10-19&type=Issues) | [@jgarte](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajgarte+updated%3A2021-09-03..2021-10-19&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2021-09-03..2021-10-19&type=Issues) | [@martinRenou](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AmartinRenou+updated%3A2021-09-03..2021-10-19&type=Issues) | [@mgeier](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Amgeier+updated%3A2021-09-03..2021-10-19&type=Issues)
-
-## 6.4.4
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v6.4.3...c06c340574e1d2207940c5bd1190eb73d82ab945))
-
-### Documentation improvements
-
-- Update Manual Release Instructions [#6152](https://github.com/jupyter/notebook/pull/6152) ([@blink1073](https://github.com/blink1073))
-
-### Other merged PRs
-
-- Use default JupyterLab CSS sanitizer options for Markdown [#6160](https://github.com/jupyter/notebook/pull/6160) ([@krassowski](https://github.com/krassowski))
-- Fix syntax highlight [#6128](https://github.com/jupyter/notebook/pull/6128) ([@massongit](https://github.com/massongit))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2021-08-11&to=2021-09-03&type=c))
-
-[@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2021-08-11..2021-09-03&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2021-08-11..2021-09-03&type=Issues) | [@krassowski](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akrassowski+updated%3A2021-08-11..2021-09-03&type=Issues) | [@massongit](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Amassongit+updated%3A2021-08-11..2021-09-03&type=Issues) | [@minrk](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aminrk+updated%3A2021-08-11..2021-09-03&type=Issues) | [@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AZsailer+updated%3A2021-08-11..2021-09-03&type=Issues)
-
-## 6.4.3
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v6.4.2...c373bd89adaaddffbb71747ebbcfe8a749cae0a8))
-
-### Bugs fixed
-
-- Add @babel/core dependency [#6133](https://github.com/jupyter/notebook/pull/6133) ([@afshin](https://github.com/afshin))
-- Switch webpack to production mode [#6131](https://github.com/jupyter/notebook/pull/6131) ([@afshin](https://github.com/afshin))
-
-### Maintenance and upkeep improvements
-
-- Clean up link checking [#6130](https://github.com/jupyter/notebook/pull/6130) ([@blink1073](https://github.com/blink1073))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2021-08-06&to=2021-08-10&type=c))
-
-[@afshin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafshin+updated%3A2021-08-06..2021-08-10&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2021-08-06..2021-08-10&type=Issues) | [@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AZsailer+updated%3A2021-08-06..2021-08-10&type=Issues)
-
-## 6.4.2
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/v6.4.0...999e8322bcd24e0ed62b180c19ec13db3f48165b))
-
-### Bugs fixed
-
-- Add missing file to manifest [#6122](https://github.com/jupyter/notebook/pull/6122) ([@afshin](https://github.com/afshin))
-- Fix issue #3218 [#6108](https://github.com/jupyter/notebook/pull/6108) ([@Nazeeh21](https://github.com/Nazeeh21))
-- Fix version of jupyter-packaging in pyproject.toml [#6101](https://github.com/jupyter/notebook/pull/6101) ([@frenzymadness](https://github.com/frenzymadness))
-- "#element".tooltip is not a function on home page fixed. [#6070](https://github.com/jupyter/notebook/pull/6070) @ilayh123
-
-### Maintenance and upkeep improvements
-
-- Enhancements to the desktop entry [#6099](https://github.com/jupyter/notebook/pull/6099) ([@Amr-Ibra](https://github.com/Amr-Ibra))
-- Add missing spaces to help messages in config file [#6085](https://github.com/jupyter/notebook/pull/6085) ([@saiwing-yeung](https://github.com/saiwing-yeung))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2021-05-17&to=2021-08-06&type=c))
-
-[@afshin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafshin+updated%3A2021-05-17..2021-08-06&type=Issues) | [@Amr-Ibra](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AAmr-Ibra+updated%3A2021-05-17..2021-08-06&type=Issues) | [@frenzymadness](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afrenzymadness+updated%3A2021-05-17..2021-08-06&type=Issues) | [@ilayh123](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ailayh123+updated%3A2021-05-17..2021-08-06&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2021-05-17..2021-08-06&type=Issues) | [@Nazeeh21](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ANazeeh21+updated%3A2021-05-17..2021-08-06&type=Issues) | [@saiwing-yeung](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Asaiwing-yeung+updated%3A2021-05-17..2021-08-06&type=Issues)
-
-## 6.4.0
-
-([Full Changelog](https://github.com/jupyter/notebook/compare/6.3.0...80eb286f316838afc76a9a84b06f54e7dccb6c86))
-
-### Bugs fixed
-
-- Fix Handling of Encoded Paths in Save As Dialog [#6030](https://github.com/jupyter/notebook/pull/6030) ([@afshin](https://github.com/afshin))
-- Fix: split_cell doesn't always split cell [#6017](https://github.com/jupyter/notebook/pull/6017) ([@gamestrRUS](https://github.com/gamestrRUS))
-- Correct 'Content-Type' headers [#6026](https://github.com/jupyter/notebook/pull/6026) ([@faucct](https://github.com/faucct))
-- Fix skipped tests & remove deprecation warnings [#6018](https://github.com/jupyter/notebook/pull/6018) ([@befeleme](https://github.com/befeleme))
-- \[Gateway\] Track only this server's kernels [#5980](https://github.com/jupyter/notebook/pull/5980) ([@kevin-bates](https://github.com/kevin-bates))
-- Bind the HTTPServer in start [#6061](https://github.com/jupyter/notebook/pull/6061)
-
-### Maintenance and upkeep improvements
-
-- Revert "do not apply asyncio patch for tornado >=6.1" [#6052](https://github.com/jupyter/notebook/pull/6052) ([@minrk](https://github.com/minrk))
-- Use Jupyter Releaser [#6048](https://github.com/jupyter/notebook/pull/6048) ([@afshin](https://github.com/afshin))
-- Add Workflow Permissions for Lock Bot [#6042](https://github.com/jupyter/notebook/pull/6042) ([@jtpio](https://github.com/jtpio))
-- Fixes related to the recent changes in the documentation [#6021](https://github.com/jupyter/notebook/pull/6021) ([@frenzymadness](https://github.com/frenzymadness))
-- Add maths checks in CSS reference test [#6035](https://github.com/jupyter/notebook/pull/6035) ([@stef4k](https://github.com/stef4k))
-- Add Issue Lock and Answered Bots [#6019](https://github.com/jupyter/notebook/pull/6019) ([@afshin](https://github.com/afshin))
-
-### Documentation improvements
-
-- Spelling correction [#6045](https://github.com/jupyter/notebook/pull/6045) ([@wggillen](https://github.com/wggillen))
-- Minor typographical and comment changes [#6025](https://github.com/jupyter/notebook/pull/6025) ([@misterhay](https://github.com/misterhay))
-- Fixes related to the recent changes in the documentation [#6021](https://github.com/jupyter/notebook/pull/6021) ([@frenzymadness](https://github.com/frenzymadness))
-- Fix readthedocs environment [#6020](https://github.com/jupyter/notebook/pull/6020) ([@blink1073](https://github.com/blink1073))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2021-03-22&to=2021-05-12&type=c))
-
-[@afshin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafshin+updated%3A2021-03-22..2021-05-12&type=Issues) | [@befeleme](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abefeleme+updated%3A2021-03-22..2021-05-12&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2021-03-22..2021-05-12&type=Issues) | [@faucct](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afaucct+updated%3A2021-03-22..2021-05-12&type=Issues) | [@frenzymadness](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afrenzymadness+updated%3A2021-03-22..2021-05-12&type=Issues) | [@gamestrRUS](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AgamestrRUS+updated%3A2021-03-22..2021-05-12&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajtpio+updated%3A2021-03-22..2021-05-12&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2021-03-22..2021-05-12&type=Issues) | [@minrk](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aminrk+updated%3A2021-03-22..2021-05-12&type=Issues) | [@misterhay](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Amisterhay+updated%3A2021-03-22..2021-05-12&type=Issues) | [@stef4k](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Astef4k+updated%3A2021-03-22..2021-05-12&type=Issues) | [@wggillen](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Awggillen+updated%3A2021-03-22..2021-05-12&type=Issues)
-
-## 6.3.0
-
-### Merged PRs
-
-- Add square logo and desktop entry files [#6010](https://github.com/jupyter/notebook/pull/6010) ([@befeleme](https://github.com/befeleme))
-- Modernize Changelog [#6008](https://github.com/jupyter/notebook/pull/6008) ([@afshin](https://github.com/afshin))
-- Add missing "import inspect" [#5999](https://github.com/jupyter/notebook/pull/5999) ([@mgeier](https://github.com/mgeier))
-- Add Codecov badge to README [#5989](https://github.com/jupyter/notebook/pull/5989) ([@thomasrockhu](https://github.com/thomasrockhu))
-- Remove configuration for nosetests from setup.cfg [#5986](https://github.com/jupyter/notebook/pull/5986) ([@frenzymadness](https://github.com/frenzymadness))
-- Update security.rst [#5978](https://github.com/jupyter/notebook/pull/5978) ([@dlrice](https://github.com/dlrice))
-- Docs-Translations: Updated Hindi and Chinese Readme.md [#5976](https://github.com/jupyter/notebook/pull/5976) ([@rjn01](https://github.com/rjn01))
-- Allow /metrics by default if auth is off [#5974](https://github.com/jupyter/notebook/pull/5974) ([@blairdrummond](https://github.com/blairdrummond))
-- Skip terminal tests on Windows 3.9+ (temporary) [#5968](https://github.com/jupyter/notebook/pull/5968) ([@kevin-bates](https://github.com/kevin-bates))
-- Update GatewayKernelManager to derive from AsyncMappingKernelManager [#5966](https://github.com/jupyter/notebook/pull/5966) ([@kevin-bates](https://github.com/kevin-bates))
-- Drop use of deprecated pyzmq.ioloop [#5965](https://github.com/jupyter/notebook/pull/5965) ([@kevin-bates](https://github.com/kevin-bates))
-- Drop support for Python 3.5 [#5962](https://github.com/jupyter/notebook/pull/5962) ([@kevin-bates](https://github.com/kevin-bates))
-- Allow jupyter_server-based contents managers in notebook [#5957](https://github.com/jupyter/notebook/pull/5957) ([@afshin](https://github.com/afshin))
-- Russian translation fixes [#5954](https://github.com/jupyter/notebook/pull/5954) ([@insolor](https://github.com/insolor))
-- Increase culling test idle timeout [#5952](https://github.com/jupyter/notebook/pull/5952) ([@kevin-bates](https://github.com/kevin-bates))
-- Re-enable support for answer_yes flag [#5941](https://github.com/jupyter/notebook/pull/5941) ([@afshin](https://github.com/afshin))
-- Replace Travis and Appveyor with Github Actions [#5938](https://github.com/jupyter/notebook/pull/5938) ([@kevin-bates](https://github.com/kevin-bates))
-- DOC: Server extension, extra docs on configuration/authentication. [#5937](https://github.com/jupyter/notebook/pull/5937) ([@Carreau](https://github.com/Carreau))
-
-### Contributors to this release
-
-([GitHub contributors page for this release](https://github.com/jupyter/notebook/graphs/contributors?from=2021-01-13&to=2021-03-18&type=c))
-
-[@abielhammonds](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aabielhammonds+updated%3A2021-01-13..2021-03-18&type=Issues) | [@afshin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aafshin+updated%3A2021-01-13..2021-03-18&type=Issues) | [@ajharry](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aajharry+updated%3A2021-01-13..2021-03-18&type=Issues) | [@Alokrar](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AAlokrar+updated%3A2021-01-13..2021-03-18&type=Issues) | [@befeleme](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abefeleme+updated%3A2021-01-13..2021-03-18&type=Issues) | [@blairdrummond](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablairdrummond+updated%3A2021-01-13..2021-03-18&type=Issues) | [@blink1073](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ablink1073+updated%3A2021-01-13..2021-03-18&type=Issues) | [@bollwyvl](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Abollwyvl+updated%3A2021-01-13..2021-03-18&type=Issues) | [@Carreau](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ACarreau+updated%3A2021-01-13..2021-03-18&type=Issues) | [@ChenChenDS](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AChenChenDS+updated%3A2021-01-13..2021-03-18&type=Issues) | [@cosmoscalibur](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Acosmoscalibur+updated%3A2021-01-13..2021-03-18&type=Issues) | [@dlrice](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adlrice+updated%3A2021-01-13..2021-03-18&type=Issues) | [@dwanneruchi](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Adwanneruchi+updated%3A2021-01-13..2021-03-18&type=Issues) | [@ElisonSherton](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AElisonSherton+updated%3A2021-01-13..2021-03-18&type=Issues) | [@FazeelUsmani](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AFazeelUsmani+updated%3A2021-01-13..2021-03-18&type=Issues) | [@frenzymadness](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Afrenzymadness+updated%3A2021-01-13..2021-03-18&type=Issues) | [@goerz](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Agoerz+updated%3A2021-01-13..2021-03-18&type=Issues) | [@insolor](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ainsolor+updated%3A2021-01-13..2021-03-18&type=Issues) | [@jasongrout](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ajasongrout+updated%3A2021-01-13..2021-03-18&type=Issues) | [@JianghuiDu](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJianghuiDu+updated%3A2021-01-13..2021-03-18&type=Issues) | [@JuzerShakir](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AJuzerShakir+updated%3A2021-01-13..2021-03-18&type=Issues) | [@kevin-bates](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Akevin-bates+updated%3A2021-01-13..2021-03-18&type=Issues) | [@Khalilsqu](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AKhalilsqu+updated%3A2021-01-13..2021-03-18&type=Issues) | [@meeseeksdev](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ameeseeksdev+updated%3A2021-01-13..2021-03-18&type=Issues) | [@mgeier](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Amgeier+updated%3A2021-01-13..2021-03-18&type=Issues) | [@michaelpedota](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Amichaelpedota+updated%3A2021-01-13..2021-03-18&type=Issues) | [@mjbright](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Amjbright+updated%3A2021-01-13..2021-03-18&type=Issues) | [@MSeal](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AMSeal+updated%3A2021-01-13..2021-03-18&type=Issues) | [@ncoughlin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ancoughlin+updated%3A2021-01-13..2021-03-18&type=Issues) | [@NTimmons](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3ANTimmons+updated%3A2021-01-13..2021-03-18&type=Issues) | [@ProsperousHeart](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AProsperousHeart+updated%3A2021-01-13..2021-03-18&type=Issues) | [@rjn01](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Arjn01+updated%3A2021-01-13..2021-03-18&type=Issues) | [@slw07g](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Aslw07g+updated%3A2021-01-13..2021-03-18&type=Issues) | [@stenivan](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Astenivan+updated%3A2021-01-13..2021-03-18&type=Issues) | [@takluyver](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Atakluyver+updated%3A2021-01-13..2021-03-18&type=Issues) | [@thomasrockhu](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Athomasrockhu+updated%3A2021-01-13..2021-03-18&type=Issues) | [@wgilpin](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Awgilpin+updated%3A2021-01-13..2021-03-18&type=Issues) | [@wxtt522](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Awxtt522+updated%3A2021-01-13..2021-03-18&type=Issues) | [@yuvipanda](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3Ayuvipanda+updated%3A2021-01-13..2021-03-18&type=Issues) | [@Zsailer](https://github.com/search?q=repo%3Ajupyter%2Fnotebook+involves%3AZsailer+updated%3A2021-01-13..2021-03-18&type=Issues)
-
-## 6.2.0
-
-## Merged PRs
-
-- Increase minimum tornado version ([5933](https://github.com/jupyter/notebook/pull/5933))
-- Adjust skip decorators to avoid remaining dependency on nose ([5932](https://github.com/jupyter/notebook/pull/5932))
-- Ensure that cell ids persist after save ([5928](https://github.com/jupyter/notebook/pull/5928))
-- Add reconnection to Gateway (form nb2kg) ([5924](https://github.com/jupyter/notebook/pull/5924))
-- Fix some typos ([5917](https://github.com/jupyter/notebook/pull/5917))
-- Handle TrashPermissionError, now that it exist ([5894](https://github.com/jupyter/notebook/pull/5894))
-
-Thank you to all the contributors:
-
-- @kevin-bates
-- @mishaschwartz
-- @oyvsyo
-- @user202729
-- @stefanor
-
-## 6.1.6
-
-## Merged PRs
-
-- do not require nose for testing ([5826](https://github.com/jupyter/notebook/pull/5826))
-- \[docs\] Update Chinese and Hindi readme.md ([5823](https://github.com/jupyter/notebook/pull/5823))
-- Add support for creating terminals via GET ([5813](https://github.com/jupyter/notebook/pull/5813))
-- Made doc translations in Hindi and Chinese ([5787](https://github.com/jupyter/notebook/pull/5787))
-
-Thank you to all the contributors:
-
-- @pgajdos
-- @rjn01
-- @kevin-bates
-- @virejdasani
-
-## 6.1.5
-
-6.1.5 is a security release, fixing one vulnerability:
-
-- Fix open redirect vulnerability GHSA-c7vm-f5p4-8fqh (CVE to be assigned)
-
-## 6.1.4
-
-- Fix broken links to jupyter documentation ([5686](https://github.com/jupyter/notebook/pull/5686))
-- Add additional entries to troubleshooting section ([5695](https://github.com/jupyter/notebook/pull/5695))
-- Revert change in page alignment ([5703](https://github.com/jupyter/notebook/pull/5703))
-- Bug fix: remove double encoding in download files ([5720](https://github.com/jupyter/notebook/pull/5720))
-- Fix typo for Check in zh_CN ([5730](https://github.com/jupyter/notebook/pull/5730))
-- Require a file name in the "Save As" dialog ([5733](https://github.com/jupyter/notebook/pull/5733))
-
-Thank you to all the contributors:
-
-- bdbai
-- Jaipreet Singh
-- Kevin Bates
-- Pavel Panchekha
-- Zach Sailer
-
-## 6.1.3
-
-- Title new buttons with label if action undefined ([5676](https://github.com/jupyter/notebook/pull/5676))
-
-Thank you to all the contributors:
-
-- Kyle Kelley
-
-## 6.1.2
-
-- Fix russian message format for delete/duplicate actions ([5662](https://github.com/jupyter/notebook/pull/5662))
-- Remove unnecessary import of bind_unix_socket ([5666](https://github.com/jupyter/notebook/pull/5666))
-- Tooltip style scope fix ([5672](https://github.com/jupyter/notebook/pull/5672))
-
-Thank you to all the contributors:
-
-- Dmitry Akatov
-- Kevin Bates
-- Magda Stenius
-
-## 6.1.1
-
-- Prevent inclusion of requests_unixsocket on Windows ([5650](https://github.com/jupyter/notebook/pull/5650))
-
-Thank you to all the contributors:
-
-- Kevin Bates
-
-## 6.1.0
-
-Please note that this repository is currently maintained by a skeleton
-crew of maintainers from the Jupyter community. For our approach moving
-forward, please see this
-[notice](https://github.com/jupyter/notebook#notice) from the README.
-Thank you.
-
-Here is an enumeration of changes made since the last release and
-included in 6.1.0.
-
-- Remove deprecated encoding parameter for Python 3.9 compatibility. ([5174](https://github.com/jupyter/notebook/pull/5174))
-- Add support for async kernel management ([4479](https://github.com/jupyter/notebook/pull/4479))
-- Fix typo in password_required help message ([5320](https://github.com/jupyter/notebook/pull/5320))
-- Gateway only: Ensure launch and request timeouts are in sync ([5317](https://github.com/jupyter/notebook/pull/5317))
-- Update Markdown Cells example to HTML5 video tag ([5411](https://github.com/jupyter/notebook/pull/5411))
-- Integrated LoginWidget into edit to enable users to logout from the t... ([5406](https://github.com/jupyter/notebook/pull/5406))
-- Update message about minimum Tornado version ([5222](https://github.com/jupyter/notebook/pull/5222))
-- Logged notebook type ([5425](https://github.com/jupyter/notebook/pull/5425))
-- Added nl language ([5354](https://github.com/jupyter/notebook/pull/5354))
-- Add UNIX socket support to notebook server. ([4835](https://github.com/jupyter/notebook/pull/4835))
-- Update CodeMirror dependency ([5198](https://github.com/jupyter/notebook/pull/5198))
-- Tree added download multiple files ([5351](https://github.com/jupyter/notebook/pull/5351))
-- Toolbar buttons tooltip: show help instead of label ([5107](https://github.com/jupyter/notebook/pull/5107))
-- Remove unnecessary import of requests_unixsocket ([5451](https://github.com/jupyter/notebook/pull/5451))
-- Add ability to cull terminals and track last activity ([5372](https://github.com/jupyter/notebook/pull/5372))
-- Code refactoring notebook.js ([5352](https://github.com/jupyter/notebook/pull/5352))
-- Install terminado for docs build ([5462](https://github.com/jupyter/notebook/pull/5462))
-- Convert notifications JS test to selenium ([5455](https://github.com/jupyter/notebook/pull/5455))
-- Add cell attachments to markdown example ([5412](https://github.com/jupyter/notebook/pull/5412))
-- Add Japanese document ([5231](https://github.com/jupyter/notebook/pull/5231))
-- Migrate Move multiselection test to selenium ([5158](https://github.com/jupyter/notebook/pull/5158))
-- Use `cmdtrl-enter` to run a cell ([5120](https://github.com/jupyter/notebook/pull/5120))
-- Fix broken "Raw cell MIME type" dialog ([5385](https://github.com/jupyter/notebook/pull/5385))
-- Make a notebook writable after successful save-as ([5296](https://github.com/jupyter/notebook/pull/5296))
-- Add actual watch script ([4738](https://github.com/jupyter/notebook/pull/4738))
-- Added `--autoreload` flag to `NotebookApp` ([4795](https://github.com/jupyter/notebook/pull/4795))
-- Enable check_origin on gateway websocket communication ([5471](https://github.com/jupyter/notebook/pull/5471))
-- Restore detection of missing terminado package ([5465](https://github.com/jupyter/notebook/pull/5465))
-- Culling: ensure `last_activity` attr exists before use ([5355](https://github.com/jupyter/notebook/pull/5355))
-- Added functionality to allow filter kernels by Jupyter Enterprise Gat... ([5484](https://github.com/jupyter/notebook/pull/5484))
-- 'Play' icon for run-cell toolbar button ([2922](https://github.com/jupyter/notebook/pull/2922))
-- Bump minimum version of jQuery to 3.5.0 ([5491](https://github.com/jupyter/notebook/pull/5491))
-- Remove old JS markdown tests, add a new one in selenium ([5497](https://github.com/jupyter/notebook/pull/5497))
-- Add support for more RTL languages ([5036](https://github.com/jupyter/notebook/pull/5036))
-- Make markdown cells stay RTL in edit mode ([5037](https://github.com/jupyter/notebook/pull/5037))
-- Unforce RTL output display ([5039](https://github.com/jupyter/notebook/pull/5039))
-- Fixed multicursor backspacing ([4880](https://github.com/jupyter/notebook/pull/4880))
-- Implemented Split Cell for multicursor ([4824](https://github.com/jupyter/notebook/pull/4824))
-- Alignment issue \[FIXED\] ([3173](https://github.com/jupyter/notebook/pull/3173))
-- MathJax: Support for `\gdef` ([4407](https://github.com/jupyter/notebook/pull/4407))
-- Another (Minor) Duplicate Code Reduction ([5316](https://github.com/jupyter/notebook/pull/5316))
-- Update readme regarding maintenance ([5500](https://github.com/jupyter/notebook/pull/5500))
-- Document contents chunks ([5508](https://github.com/jupyter/notebook/pull/5508))
-- Backspace deletes empty line ([5516](https://github.com/jupyter/notebook/pull/5516))
-- The dropdown submenu at notebook page is not keyboard accessible ([4732](https://github.com/jupyter/notebook/pull/4732))
-- Tooltips visible through keyboard navigation for specified buttons ([4729](https://github.com/jupyter/notebook/pull/4729))
-- Fix for recursive symlink ([4670](https://github.com/jupyter/notebook/pull/4670))
-- Fix for the terminal shutdown issue ([4180](https://github.com/jupyter/notebook/pull/4180))
-- Add japanese translation files ([4490](https://github.com/jupyter/notebook/pull/4490))
-- Workaround for socket permission errors on Cygwin ([4584](https://github.com/jupyter/notebook/pull/4584))
-- Implement optional markdown header and footer files ([4043](https://github.com/jupyter/notebook/pull/4043))
-- Remove double link when using `custom_display_url` ([5544](https://github.com/jupyter/notebook/pull/5544))
-- Respect `cell.is_editable` during find-and-replace ([5545](https://github.com/jupyter/notebook/pull/5545))
-- Fix exception causes all over the codebase ([5556](https://github.com/jupyter/notebook/pull/5556)
-- Improve login shell heuristics ([5588](https://github.com/jupyter/notebook/pull/5588))
-- Added support for `JUPYTER_TOKEN_FILE` ([5587](https://github.com/jupyter/notebook/pull/5587))
-- Kill notebook itself when server cull idle kernel ([5593](https://github.com/jupyter/notebook/pull/5593))
-- Implement password hashing with bcrypt ([3793](https://github.com/jupyter/notebook/pull/3793))
-- Fix broken links ([5600](https://github.com/jupyter/notebook/pull/5600))
-- Russian internationalization support ([5571](https://github.com/jupyter/notebook/pull/5571))
-- Add a metadata tag to override notebook direction (ltr/rtl) ([5052](https://github.com/jupyter/notebook/pull/5052))
-- Paste two images from clipboard in markdown cell ([5598](https://github.com/jupyter/notebook/pull/5598))
-- Add keyboard shortcuts to menu dropdowns ([5525](https://github.com/jupyter/notebook/pull/5525))
-- Update codemirror to `5.56.0+components1` ([5637](https://github.com/jupyter/notebook/pull/5637))
-
-Thank you to all the contributors:
-
-- Aaron Myatt
-- Adam Blake
-- Afshin Taylor Darian
-- Aman Bansal
-- Ben Thayer
-- berendjan
-- Bruno P. Kinoshita
-- bzinberg
-- Christophe Cadilhac
-- Daiki Katsuragawa
-- David Lukes
-- Dmitriy Q
-- dmpe
-- dylanzjy
-- dSchurch
-- E. M. Bray
-- ErwinRussel
-- Felix M枚nckemeyer
-- Grant Nestor
-- Jarrad Whitaker
-- Jesus Panales Castillo
-- Joshua Zeltser
-- Karthikeyan Singaravelan
-- Kenichi Ito
-- Kevin Bates
-- Koki Nishihara
-- Kris Wilson
-- Kyle Kelley
-- Laura Merlo
-- levinxo
-- Luciano Resende
-- Luis Cabezon Manchado
-- Madhusudhan Srinivasa
-- Matthias Geier
-- mattn
-- Max Klein
-- Min RK
-- Mingxuan Lin
-- Mohammad Mostafa Farzan
-- Niko Felger
-- Norah Abanumay
-- Onno Broekmans
-- PierreMB
-- pinarkavak
-- Ram Rachum
-- Reece Hart
-- Remi Rampin
-- Rohit Sanjay
-- Shane Canon
-- Simon Li
-- Steinar Sturlaugsson
-- Steven Silvester
-- taohan16
-- Thew Dhanat
-- Thomas Kluyver
-- Toon Baeyens
-- Vidar Tonaas Fauske
-- Zachary Sailer
-
-## 6.0.3
-
-- Dependency updates to fix startup issues on Windows platform
-- Add support for nbconvert 6.x
-- Creation of recent tab
-
-Thanks for all the contributors:
-
-- Luciano Resende
-- Kevin Bates
-- ahangsleben
-- Zachary Sailer
-- Pallavi Bharadwaj
-- Thomas Kluyver
-- Min RK
-- forest0
-- Bibo Hao
-- Michal Charemza
-- Sergey Shevelev
-- Shuichiro MAKIGAKI
-- krinsman
-- TPartida
-- Landen McDonald
-- Tres DuBiel
-
-## 6.0.2
-
-- Update JQuery dependency to version 3.4.1 to fix security vulnerability (CVE-2019-11358)
-- Update CodeMirror to version 5.48.4 to fix Python formatting issues
-- Continue removing obsolete Python 2.x code/dependencies
-- Multiple documentation updates
-
-Thanks for all the contributors:
-
-- David Robles
-- Jason Grout
-- Kerwin Sun
-- Kevin Bates
-- Kyle Kelley
-- Luciano Resende
-- Marcus D Sherman
-- Sasaki Takeru
-- Tom Jarosz
-- Vidar Tonaas Fauske
-- Wes Turner
-- Zachary Sailer
-
-## 6.0.1
-
-- Attempt to re-establish websocket connection to Gateway ([4777](https://github.com/jupyter/notebook/pull/4777))
-- Add missing react-dom js to package data ([4772](https://github.com/jupyter/notebook/pull/4772))
-
-Thanks for all the contributors:
-
-- Eunsoo Park
-- Min RK
-
-## 6.0
-
-This is the first major release of the Jupyter Notebook since version
-5.0 (March 2017).
-
-We encourage users to start trying JupyterLab, which has just announced
-it's 1.0 release in preparation for a future transition.
-
-- Remove Python 2.x support in favor of Python 3.5 and higher.
-- Multiple accessibility enhancements and bug-fixes.
-- Multiple translation enhancements and bug-fixes.
-- Remove deprecated ANSI CSS styles.
-- Native support to forward requests to Jupyter Gateway(s) (Embedded
- NB2KG).
-- Use JavaScript to redirect users to notebook homepage.
-- Enhanced SSL/TLS security by using PROTOCOL_TLS which selects the
- highest ssl/tls protocol version available that both the client and
- server support. When PROTOCOL_TLS is not available use
- PROTOCOL_SSLv23.
-- Add `?no_track_activity=1` argument to allow API requests. to not be
- registered as activity (e.g. API calls by external activity
- monitors).
-- Kernels shutting down due to an idle timeout is no longer considered
- an activity-updating event.
-- Further improve compatibility with tornado 6 with improved checks
- for when websockets are closed.
-- Launch the browser with a local file which redirects to the server
- address including the authentication token. This prevents another
- logged-in user from stealing the token from command line arguments
- and authenticating to the server. The single-use token previously
- used to mitigate this has been removed. Thanks to Dr. Owain Kenway
- for suggesting the local file approach.
-- Respect nbconvert entrypoints as sources for exporters
-- Update to CodeMirror to 5.37, which includes f-string syntax for
- Python 3.6.
-- Update jquery-ui to 1.12
-- Execute cells by clicking icon in input prompt.
-- New "Save as" menu option.
-- When serving on a loopback interface, protect against DNS rebinding
- by checking the `Host` header from the browser. This check can be
- disabled if necessary by setting `NotebookApp.allow_remote_access`. (Disabled by default while we work out some Mac issues in
- [3754](https://github.com/jupyter/notebook/issues/3754)).
-- Add kernel_info_timeout traitlet to enable restarting slow kernels.
-- Add `custom_display_host` config option to override displayed URL.
-- Add /metrics endpoint for Prometheus Metrics.
-- Optimize large file uploads.
-- Allow access control headers to be overridden in
- jupyter_notebook_config.py to support greater CORS and proxy
- configuration flexibility.
-- Add support for terminals on windows.
-- Add a "restart and run all" button to the toolbar.
-- Frontend/extension-config: allow default json files in a .d
- directory.
-- Allow setting token via jupyter_token env.
-- Cull idle kernels using `--MappingKernelManager.cull_idle_timeout`.
-- Allow read-only notebooks to be trusted.
-- Convert JS tests to Selenium.
-
-Security Fixes included in previous minor releases of Jupyter Notebook
-and also included in version 6.0.
-
-- Fix Open Redirect vulnerability (CVE-2019-10255) where certain
- malicious URLs could redirect from the Jupyter login page to a
- malicious site after a successful login.
-- Contains a security fix for a cross-site inclusion (XSSI)
- vulnerability (CVE-2019--9644), where files at a known URL could be
- included in a page from an unauthorized website if the user is
- logged into a Jupyter server. The fix involves setting the
- `X-Content-Type-Options: nosniff` header, and applying CSRF checks
- previously on all non-GET API requests to GET requests to API
- endpoints and the /files/ endpoint.
-- Check Host header to more securely protect localhost deployments
- from DNS rebinding. This is a pre-emptive measure, not fixing a
- known vulnerability. Use `.NotebookApp.allow_remote_access` and
- `.NotebookApp.local_hostnames` to configure access.
-- Upgrade bootstrap to 3.4, fixing an XSS vulnerability, which has
- been assigned
- [CVE-2018-14041](https://nvd.nist.gov/vuln/detail/CVE-2018-14041).
-- Contains a security fix preventing malicious directory names from
- being able to execute javascript.
-- Contains a security fix preventing nbconvert endpoints from
- executing javascript with access to the server API. CVE request
- pending.
-
-Thanks for all the contributors:
-
-- AAYUSH SINHA
-- Aaron Hall, MBA
-- Abhinav Sagar
-- Adam Rule
-- Adeel Ahmad
-- Alex Rothberg
-- Amy Skerry-Ryan
-- Anastasis Germanidis
-- Andr茅s S谩nchez
-- Arjun Radhakrishna
-- Arovit Narula
-- Benda Xu
-- Bj枚rn Gr眉ning
-- Brian E. Granger
-- Carol Willing
-- Celina Kilcrease
-- Chris Holdgraf
-- Chris Miller
-- Ciaran Langton
-- Damian Avila
-- Dana Lee
-- Daniel Farrell
-- Daniel Nicolai
-- Dar铆o Here帽煤
-- Dave Aitken
-- Dave Foster
-- Dave Hirschfeld
-- Denis Ledoux
-- Dmitry Mikushin
-- Dominic Kuang
-- Douglas Hanley
-- Elliott Sales de Andrade
-- Emilio Talamante Lugo
-- Eric Perry
-- Ethan T. Hendrix
-- Evan Van Dam
-- Francesco Franchina
-- Fr茅d茅ric Chapoton
-- F茅lix-Antoine Fortin
-- Gabriel
-- Gabriel N眉tzi
-- Gabriel Ruiz
-- Gestalt LUR
-- Grant Nestor
-- Gustavo Efeiche
-- Harsh Vardhan
-- Heng GAO
-- Hisham Elsheshtawy
-- Hong Xu
-- Ian Rose
-- Ivan Ogasawara
-- J Forde
-- Jason Grout
-- Jessica B. Hamrick
-- Jiaqi Liu
-- John Emmons
-- Josh Barnes
-- Karthik Balakrishnan
-- Kevin Bates
-- Kirit Thadaka
-- Kristian Gregorius Hustad
-- Kyle Kelley
-- Leo Gallucci
-- Lilian Besson
-- Lucas Seiki Oshiro
-- Luciano Resende
-- Luis Angel Rodriguez Guerrero
-- M Pacer
-- Maarten Breddels
-- Mac Knight
-- Madicken Munk
-- Maiti煤 脫 Ciar谩in
-- Marc Udoff
-- Mathis HAMMEL
-- Mathis Rosenhauer
-- Matthias Bussonnier
-- Matthias Geier
-- Max Vovshin
-- Maxime Mouchet
-- Michael Chirico
-- Michael Droettboom
-- Michael Heilman
-- Michael Scott Cuthbert
-- Michal Charemza
-- Mike Boyle
-- Milos Miljkovic
-- Min RK
-- Miro Hron膷ok
-- Nicholas Bollweg
-- Nitesh Sawant
-- Ondrej Jariabka
-- Park Hae Jin
-- Paul Ivanov
-- Paul Masson
-- Peter Parente
-- Pierre Tholoniat
-- Remco Verhoef
-- Roland Weber
-- Roman Kornev
-- Rosa Swaby
-- Roy Hyunjin Han
-- Sally
-- Sam Lau
-- Samar Sultan
-- Shiti Saxena
-- Simon Biggs
-- Spencer Park
-- Stephen Ward
-- Steve (Gadget) Barnes
-- Steven Silvester
-- Surya Prakash Susarla
-- Syed Shah
-- Sylvain Corlay
-- Thomas Aarholt
-- Thomas Kluyver
-- Tim
-- Tim Head
-- Tim Klever
-- Tim Metzler
-- Todd
-- Tom Jorquera
-- Tyler Makaro
-- Vaibhav Sagar
-- Victor
-- Vidar Tonaas Fauske
-- Vu Minh Tam
-- V铆t Tu膷ek
-- Will Costello
-- Will Starms
-- William Hosford
-- Xiaohan Li
-- Yuvi Panda
-- ashley teoh
-- nullptr
-
-## 5.7.8
-
-- Fix regression in restarting kernels in 5.7.5. The restart handler
- would return before restart was completed.
-- Further improve compatibility with tornado 6 with improved checks
- for when websockets are closed.
-- Fix regression in 5.7.6 on Windows where .js files could have the
- wrong mime-type.
-- Fix Open Redirect vulnerability (CVE-2019-10255) where certain
- malicious URLs could redirect from the Jupyter login page to a
- malicious site after a successful login. 5.7.7 contained only a
- partial fix for this issue.
-
-## 5.7.6
-
-5.7.6 contains a security fix for a cross-site inclusion (XSSI)
-vulnerability (CVE-2019--9644), where files at a known URL could be
-included in a page from an unauthorized website if the user is logged
-into a Jupyter server. The fix involves setting the
-`X-Content-Type-Options: nosniff` header, and applying CSRF checks
-previously on all non-GET API requests to GET requests to API endpoints
-and the /files/ endpoint.
-
-The attacking page is able to access some contents of files when using
-Internet Explorer through script errors, but this has not been
-demonstrated with other browsers.
-
-## 5.7.5
-
-- Fix compatibility with tornado 6 ([4392](https://github.com/jupyter/notebook/pull/4392), [4449](https://github.com/jupyter/notebook/pull/4449)).
-- Fix opening integer filedescriptor during startup on Python 2 ([4349](https://github.com/jupyter/notebook/pull/4349))
-- Fix compatibility with asynchronous
- \[KernelManager.restart_kernel\]{.title-ref} methods ([4412](https://github.com/jupyter/notebook/pull/4412))
-
-## 5.7.4
-
-5.7.4 fixes a bug introduced in 5.7.3, in which the
-`list_running_servers()` function attempts to parse HTML files as JSON,
-and consequently crashes ([4284](https://github.com/jupyter/notebook/pull/4284)).
-
-## 5.7.3
-
-5.7.3 contains one security improvement and one security fix:
-
-- Launch the browser with a local file which redirects to the server
- address including the authentication token ([4260](https://github.com/jupyter/notebook/pull/4260)). This prevents another logged-in user from stealing
- the token from command line arguments and authenticating to the
- server. The single-use token previously used to mitigate this has
- been removed. Thanks to Dr. Owain Kenway for suggesting the local
- file approach.
-- Upgrade bootstrap to 3.4, fixing an XSS vulnerability, which has
- been assigned
- [CVE-2018-14041](https://nvd.nist.gov/vuln/detail/CVE-2018-14041) ([4271](https://github.com/jupyter/notebook/pull/4271)).
-
-## 5.7.2
-
-5.7.2 contains a security fix preventing malicious directory names from
-being able to execute javascript. CVE request pending.
-
-## 5.7.1
-
-5.7.1 contains a security fix preventing nbconvert endpoints from
-executing javascript with access to the server API. CVE request pending.
-
-## 5.7.0
-
-New features:
-
-- Update to CodeMirror to 5.37, which includes f-string syntax for
- Python 3.6 ([3816](https://github.com/jupyter/notebook/pull/3816))
-- Update jquery-ui to 1.12 ([3836](https://github.com/jupyter/notebook/pull/3836))
-- Check Host header to more securely protect localhost deployments
- from DNS rebinding. This is a pre-emptive measure, not fixing a
- known vulnerability ([3766](https://github.com/jupyter/notebook/pull/3766)). Use
- `.NotebookApp.allow_remote_access` and
- `.NotebookApp.local_hostnames` to configure access.
-- Allow access-control-allow-headers to be overridden ([3886](https://github.com/jupyter/notebook/pull/3886))
-- Allow configuring max_body_size and max_buffer_size ([3829](https://github.com/jupyter/notebook/pull/3829))
-- Allow configuring get_secure_cookie keyword-args ([3778](https://github.com/jupyter/notebook/pull/3778))
-- Respect nbconvert entrypoints as sources for exporters ([3879](https://github.com/jupyter/notebook/pull/3879))
-- Include translation sources in source distributions ([3925](https://github.com/jupyter/notebook/pull/3925), [3931](https://github.com/jupyter/notebook/pull/3931))
-- Various improvements to documentation ([3799](https://github.com/jupyter/notebook/pull/3799), [3800](https://github.com/jupyter/notebook/pull/3800),
- [3806](https://github.com/jupyter/notebook/pull/3806), [3883](https://github.com/jupyter/notebook/pull/3883), [3908](https://github.com/jupyter/notebook/pull/3908))
-
-Fixing problems:
-
-- Fix breadcrumb link when running with a base url ([3905](https://github.com/jupyter/notebook/pull/3905))
-- Fix possible type error when closing activity stream ([3907](https://github.com/jupyter/notebook/pull/3907))
-- Disable metadata editing for non-editable cells ([3744](https://github.com/jupyter/notebook/pull/3744))
-- Fix some styling and alignment of prompts caused by regressions in
- 5.6.0.
-- Enter causing page reload in shortcuts editor ([3871](https://github.com/jupyter/notebook/pull/3871))
-- Fix uploading to the same file twice ([3712](https://github.com/jupyter/notebook/pull/3712))
-
-See the 5.7 milestone on GitHub for a complete list of [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A5.7)
-involved in this release.
-
-Thanks to the following contributors:
-
-- Aaron Hall
-- Benjamin Ragan-Kelley
-- Bill Major
-- bxy007
-- Dave Aitken
-- Denis Ledoux
-- F茅lix-Antoine Fortin
-- Gabriel
-- Grant Nestor
-- Kevin Bates
-- Kristian Gregorius Hustad
-- M Pacer
-- Madicken Munk
-- Maitiu O Ciarain
-- Matthias Bussonnier
-- Michael Boyle
-- Michael Chirico
-- Mokkapati, Praneet(ES)
-- Peter Parente
-- Sally Wilsak
-- Steven Silvester
-- Thomas Kluyver
-- Walter Martin
-
-## 5.6.0
-
-New features:
-
-- Execute cells by clicking icon in input prompt ([3535](https://github.com/jupyter/notebook/pull/3535), [3687](https://github.com/jupyter/notebook/pull/3687))
-- New "Save as" menu option ([3289](https://github.com/jupyter/notebook/pull/3289))
-- When serving on a loopback interface, protect against DNS rebinding
- by checking the `Host` header from the browser ([3714](https://github.com/jupyter/notebook/pull/3714)). This check can be
- disabled if necessary by setting `NotebookApp.allow_remote_access`. (Disabled by default while we work out some Mac issues in
- [3754](https://github.com/jupyter/notebook/issues/3754)).
-- Add kernel_info_timeout traitlet to enable restarting slow kernels ([3665](https://github.com/jupyter/notebook/pull/3665))
-- Add `custom_display_host` config option to override displayed URL ([3668](https://github.com/jupyter/notebook/pull/3668))
-- Add /metrics endpoint for Prometheus Metrics ([3490](https://github.com/jupyter/notebook/pull/3490))
-- Update to MathJax 2.7.4 ([3751](https://github.com/jupyter/notebook/pull/3751))
-- Update to jQuery 3.3 ([3655](https://github.com/jupyter/notebook/pull/3655))
-- Update marked to 0.4 ([3686](https://github.com/jupyter/notebook/pull/3686))
-
-Fixing problems:
-
-- Don't duplicate token in displayed URL ([3656](https://github.com/jupyter/notebook/pull/3656))
-- Clarify displayed URL when listening on all interfaces ([3703](https://github.com/jupyter/notebook/pull/3703))
-- Don't trash non-empty directories on Windows ([3673](https://github.com/jupyter/notebook/pull/3673))
-- Include LICENSE file in wheels ([3671](https://github.com/jupyter/notebook/pull/3671))
-- Don't show "0 active kernels" when starting the notebook ([3696](https://github.com/jupyter/notebook/pull/3696))
-
-Testing:
-
-- Add find replace test ([3630](https://github.com/jupyter/notebook/pull/3630))
-- Selenium test for deleting all cells ([3601](https://github.com/jupyter/notebook/pull/3601))
-- Make creating a new notebook more robust ([3726](https://github.com/jupyter/notebook/pull/3726))
-
-Thanks to the following contributors:
-
-- Arovit Narula ([arovit](https://github.com/arovit))
-- lucasoshiro ([lucasoshiro](https://github.com/lucasoshiro))
-- M Pacer ([mpacer](https://github.com/mpacer))
-- Thomas Kluyver ([takluyver](https://github.com/takluyver))
-- Todd ([toddrme2178](https://github.com/toddrme2178))
-- Yuvi Panda ([yuvipanda](https://github.com/yuvipanda))
-
-See the 5.6 milestone on GitHub for a complete list of [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A5.6)
-involved in this release.
-
-## 5.5.0
-
-New features:
-
-- The files list now shows file sizes ([3539](https://github.com/jupyter/notebook/pull/3539))
-- Add a quit button in the dashboard ([3004](https://github.com/jupyter/notebook/pull/3004))
-- Display hostname in the terminal when running remotely ([3356](https://github.com/jupyter/notebook/pull/3356), [3593](https://github.com/jupyter/notebook/pull/3593))
-- Add slides exportation/download to the menu ([3287](https://github.com/jupyter/notebook/pull/3287))
-- Add any extra installed nbconvert exporters to the "Download as"
- menu ([3323](https://github.com/jupyter/notebook/pull/3323))
-- Editor: warning when overwriting a file that is modified on disk ([2783](https://github.com/jupyter/notebook/pull/2783))
-- Display a warning message if cookies are not enabled ([3511](https://github.com/jupyter/notebook/pull/3511))
-- Basic `__version__` reporting for extensions ([3541](https://github.com/jupyter/notebook/pull/3541))
-- Add `NotebookApp.terminals_enabled` config option ([3478](https://github.com/jupyter/notebook/pull/3478))
-- Make buffer time between last modified on disk and last modified on
- last save configurable ([3273](https://github.com/jupyter/notebook/pull/3273))
-- Allow binding custom shortcuts for 'close and halt' ([3314](https://github.com/jupyter/notebook/pull/3314))
-- Add description for 'Trusted' notification ([3386](https://github.com/jupyter/notebook/pull/3386))
-- Add `settings['activity_sources']` ([3401](https://github.com/jupyter/notebook/pull/3401))
-- Add an `output_updated.OutputArea` event ([3560](https://github.com/jupyter/notebook/pull/3560))
-
-Fixing problems:
-
-- Fixes to improve web accessibility ([3507](https://github.com/jupyter/notebook/pull/3507))
-- Fixed color contrast issue in tree.less ([3336](https://github.com/jupyter/notebook/pull/3336))
-- Allow cancelling upload of large files ([3373](https://github.com/jupyter/notebook/pull/3373))
-- Don't clear login cookie on requests without cookie ([3380](https://github.com/jupyter/notebook/pull/3380))
-- Don't trash files on different device to home dir on Linux ([3304](https://github.com/jupyter/notebook/pull/3304))
-- Clear waiting asterisks when restarting kernel ([3494](https://github.com/jupyter/notebook/pull/3494))
-- Fix output prompt when `execution_count` missing ([3236](https://github.com/jupyter/notebook/pull/3236))
-- Make the 'changed on disk' dialog work when displayed twice ([3589](https://github.com/jupyter/notebook/pull/3589))
-- Fix going back to root directory with history in notebook list ([3411](https://github.com/jupyter/notebook/pull/3411))
-- Allow defining keyboard shortcuts for missing actions ([3561](https://github.com/jupyter/notebook/pull/3561))
-- Prevent default on pageup/pagedown when completer is active ([3500](https://github.com/jupyter/notebook/pull/3500))
-- Prevent default event handling on new terminal ([3497](https://github.com/jupyter/notebook/pull/3497))
-- ConfigManager should not write out default values found in the .d
- directory ([3485](https://github.com/jupyter/notebook/pull/3485))
-- Fix leak of iopub object in activity monitoring ([3424](https://github.com/jupyter/notebook/pull/3424))
-- Javascript lint in notebooklist.js ([3409](https://github.com/jupyter/notebook/pull/3409))
-- Some Javascript syntax fixes ([3294](https://github.com/jupyter/notebook/pull/3294))
-- Convert native for loop to `Array.forEach()` ([3477](https://github.com/jupyter/notebook/pull/3477))
-- Disable cache when downloading nbconvert output ([3484](https://github.com/jupyter/notebook/pull/3484))
-- Add missing digestmod arg to HMAC ([3399](https://github.com/jupyter/notebook/pull/3399))
-- Log OSErrors failing to create less-critical files during startup ([3384](https://github.com/jupyter/notebook/pull/3384))
-- Use powershell on Windows ([3379](https://github.com/jupyter/notebook/pull/3379))
-- API spec improvements, API handler improvements ([3368](https://github.com/jupyter/notebook/pull/3368))
-- Set notebook to dirty state after change to kernel metadata ([3350](https://github.com/jupyter/notebook/pull/3350))
-- Use CSP header to treat served files as belonging to a separate
- origin ([3341](https://github.com/jupyter/notebook/pull/3341))
-- Don't install gettext into builtins ([3330](https://github.com/jupyter/notebook/pull/3330))
-- Add missing `import _` ([3316](https://github.com/jupyter/notebook/pull/3316),
- [3326](https://github.com/jupyter/notebook/pull/3326))
-- Write `notebook.json` file atomically ([3305](https://github.com/jupyter/notebook/pull/3305))
-- Fix clicking with modifiers, page title updates ([3282](https://github.com/jupyter/notebook/pull/3282))
-- Upgrade jQuery to version 2.2 ([3428](https://github.com/jupyter/notebook/pull/3428))
-- Upgrade xterm.js to 3.1.0 ([3189](https://github.com/jupyter/notebook/pull/3189))
-- Upgrade moment.js to 2.19.3 ([3562](https://github.com/jupyter/notebook/pull/3562))
-- Upgrade CodeMirror to 5.35 ([3372](https://github.com/jupyter/notebook/pull/3372))
-- "Require" pyzmq>=17 ([3586](https://github.com/jupyter/notebook/pull/3586))
-
-Documentation:
-
-- Documentation updates and organisation ([3584](https://github.com/jupyter/notebook/pull/3584))
-- Add section in docs about privacy ([3571](https://github.com/jupyter/notebook/pull/3571))
-- Add explanation on how to change the type of a cell to Markdown ([3377](https://github.com/jupyter/notebook/pull/3377))
-- Update docs with confd implementation details ([3520](https://github.com/jupyter/notebook/pull/3520))
-- Add more information for where `jupyter_notebook_config.py` is
- located ([3346](https://github.com/jupyter/notebook/pull/3346))
-- Document options to enable nbextensions in specific sections ([3525](https://github.com/jupyter/notebook/pull/3525))
-- jQuery attribute selector value MUST be surrounded by quotes ([3527](https://github.com/jupyter/notebook/pull/3527))
-- Do not execute special notebooks with nbsphinx ([3360](https://github.com/jupyter/notebook/pull/3360))
-- Other minor fixes in [3288](https://github.com/jupyter/notebook/pull/3288),
- [3528](https://github.com/jupyter/notebook/pull/3528), [3293](https://github.com/jupyter/notebook/pull/3293), [3367](https://github.com/jupyter/notebook/pull/3367)
-
-Testing:
-
-- Testing with Selenium & Sauce labs ([3321](https://github.com/jupyter/notebook/pull/3321))
-- Selenium utils + markdown rendering tests ([3458](https://github.com/jupyter/notebook/pull/3458))
-- Convert insert cell tests to Selenium ([3508](https://github.com/jupyter/notebook/pull/3508))
-- Convert prompt numbers tests to Selenium ([3554](https://github.com/jupyter/notebook/pull/3554))
-- Convert delete cells tests to Selenium ([3465](https://github.com/jupyter/notebook/pull/3465))
-- Convert undelete cell tests to Selenium ([3475](https://github.com/jupyter/notebook/pull/3475))
-- More selenium testing utilities ([3412](https://github.com/jupyter/notebook/pull/3412))
-- Only check links when build is trigger by Travis Cron job ([3493](https://github.com/jupyter/notebook/pull/3493))
-- Fix Appveyor build errors ([3430](https://github.com/jupyter/notebook/pull/3430))
-- Undo patches in teardown before attempting to delete files ([3459](https://github.com/jupyter/notebook/pull/3459))
-- Get tests running with tornado 5 ([3398](https://github.com/jupyter/notebook/pull/3398))
-- Unpin ipykernel version on Travis ([3223](https://github.com/jupyter/notebook/pull/3223))
-
-Thanks to the following contributors:
-
-- Arovit Narula ([arovit](https://github.com/arovit))
-- Ashley Teoh ([ashleytqy](https://github.com/ashleytqy))
-- Nicholas Bollweg ([bollwyvl](https://github.com/bollwyvl))
-- Alex Rothberg ([cancan101](https://github.com/cancan101))
-- Celina Kilcrease ([ckilcrease](https://github.com/ckilcrease))
-- dabuside ([dabuside](https://github.com/dabuside))
-- Damian Avila ([damianavila](https://github.com/damianavila))
-- Dana Lee ([danagilliann](https://github.com/danagilliann))
-- Dave Hirschfeld ([dhirschfeld](https://github.com/dhirschfeld))
-- Heng GAO ([ehengao](https://github.com/ehengao))
-- Leo Gallucci ([elgalu](https://github.com/elgalu))
-- Evan Van Dam ([evandam](https://github.com/evandam))
-- forbxy ([forbxy](https://github.com/forbxy))
-- Grant Nestor ([gnestor](https://github.com/gnestor))
-- Ethan T. Hendrix ([hendrixet](https://github.com/hendrixet))
-- Miro Hron膷ok ([hroncok](https://github.com/hroncok))
-- Paul Ivanov ([ivanov](https://github.com/ivanov))
-- Dar铆o Here帽煤 ([kant](https://github.com/kant))
-- Kevin Bates ([kevin-bates](https://github.com/kevin-bates))
-- Maarten Breddels ([maartenbreddels](https://github.com/maartenbreddels))
-- Michael Droettboom ([mdboom](https://github.com/mdboom))
-- Min RK ([minrk](https://github.com/minrk))
-- M Pacer ([mpacer](https://github.com/mpacer))
-- Peter Parente ([parente](https://github.com/parente))
-- Paul Masson ([paulmasson](https://github.com/paulmasson))
-- Philipp Rudiger ([philippjfr](https://github.com/philippjfr))
-- Mac Knight (Shels1909)
-- Hisham Elsheshtawy ([Sheshtawy](https://github.com/Sheshtawy))
-- Simon Biggs ([SimonBiggs](https://github.com/SimonBiggs))
-- Sunil Hari (`@sunilhari`)
-- Thomas Kluyver ([takluyver](https://github.com/takluyver))
-- Tim Klever ([tklever](https://github.com/tklever))
-- Gabriel Ruiz ([unnamedplay-r](https://github.com/unnamedplay-r))
-- Vaibhav Sagar ([vaibhavsagar](https://github.com/vaibhavsagar))
-- William Hosford ([whosford](https://github.com/whosford))
-- Hong ([xuhdev](https://github.com/xuhdev))
-
-See the 5.5 milestone on GitHub for a complete list of [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A5.5)
-involved in this release.
-
-## 5.4.1
-
-A security release to fix [CVE-2018-8768](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-8768).
-
-Thanks to [Alex](https://hackerone.com/pisarenko) for identifying this
-bug, and Jonathan Kamens and Scott Sanderson at Quantopian for verifying
-it and bringing it to our attention.
-
-## 5.4.0
-
-- Fix creating files and folders after navigating directories in the
- dashboard ([3264](https://github.com/jupyter/notebook/pull/3264)).
-- Enable printing notebooks in colour, removing the CSS that made
- everything black and white ([3212](https://github.com/jupyter/notebook/pull/3212)).
-- Limit the completion options displayed in the notebook to 1000, to
- avoid performance issues with very long lists ([3195](https://github.com/jupyter/notebook/pull/3195)).
-- Accessibility improvements in `tree.html` ([3271](https://github.com/jupyter/notebook/pull/3271)).
-- Added alt-text to the kernel logo image in the notebook UI ([3228](https://github.com/jupyter/notebook/pull/3228)).
-- Added a test on Travis CI to flag if symlinks are accidentally
- introduced in the future. This should prevent the issue that
- necessitated `release-5.3.1`{.interpreted-text role="ref"} ([3227](https://github.com/jupyter/notebook/pull/3227)).
-- Use lowercase letters for random IDs generated in our Javascript ([3264](https://github.com/jupyter/notebook/pull/3264)).
-- Removed duplicate code setting `TextCell.notebook` ([3256](https://github.com/jupyter/notebook/pull/3256)).
-
-Thanks to the following contributors:
-
-- Alex Soderman ([asoderman](https://github.com/asoderman))
-- Matthias Bussonnier ([Carreau](https://github.com/Carreau))
-- Min RK ([minrk](https://github.com/minrk))
-- Nitesh Sawant ([ns23](https://github.com/ns23))
-- Thomas Kluyver ([takluyver](https://github.com/takluyver))
-- Yuvi Panda ([yuvipanda](https://github.com/yuvipanda))
-
-See the 5.4 milestone on GitHub for a complete list of [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A5.4)
-involved in this release.
-
-## 5.3.1
-
-Replaced a symlink in the repository with a copy, to fix issues
-installing on Windows ([3220](https://github.com/jupyter/notebook/pull/3220)).
-
-## 5.3.0
-
-This release introduces a couple notable improvements, such as terminal
-support for Windows and support for OS trash (files deleted from the
-notebook dashboard are moved to the OS trash vs. deleted permanently).
-
-- Add support for terminals on windows ([3087](https://github.com/jupyter/notebook/pull/3087)).
-- Add a "restart and run all" button to the toolbar ([2965](https://github.com/jupyter/notebook/pull/2965)).
-- Send files to os trash mechanism on delete ([1968](https://github.com/jupyter/notebook/pull/1968)).
-- Allow programmatic copy to clipboard ([3088](https://github.com/jupyter/notebook/pull/3088)).
-- Use DOM History API for navigating between directories in the file
- browser ([3115](https://github.com/jupyter/notebook/pull/3115)).
-- Add translated files to folder(docs-translations) ([3065](https://github.com/jupyter/notebook/pull/3065)).
-- Allow non empty dirs to be deleted ([3108](https://github.com/jupyter/notebook/pull/3108)).
-- Set cookie on base_url ([2959](https://github.com/jupyter/notebook/pull/2959)).
-- Allow token-authenticated requests cross-origin by default ([2920](https://github.com/jupyter/notebook/pull/2920)).
-- Change cull_idle_timeout_minimum to 1 from 300 ([2910](https://github.com/jupyter/notebook/pull/2910)).
-- Config option to shut down server after n seconds with no kernels ([2963](https://github.com/jupyter/notebook/pull/2963)).
-- Display a "close" button on load notebook error ([3176](https://github.com/jupyter/notebook/pull/3176)).
-- Add action to command palette to run CodeMirror's "indentAuto"
- on selection ([3175](https://github.com/jupyter/notebook/pull/3175)).
-- Add option to specify extra services ([3158](https://github.com/jupyter/notebook/pull/3158)).
-- Warn_bad_name should not use global name ([3160](https://github.com/jupyter/notebook/pull/3160)).
-- Avoid overflow of hidden form ([3148](https://github.com/jupyter/notebook/pull/3148)).
-- Fix shutdown trans loss ([3147](https://github.com/jupyter/notebook/pull/3147)).
-- Find available kernelspecs more efficiently ([3136](https://github.com/jupyter/notebook/pull/3136)).
-- Don't try to translate missing help strings ([3122](https://github.com/jupyter/notebook/pull/3122)).
-- Frontend/extension-config: allow default json files in a .d
- directory ([3116](https://github.com/jupyter/notebook/pull/3116)).
-- Use \[requirejs\]{.title-ref} vs. \[require\]{.title-ref} ([3097](https://github.com/jupyter/notebook/pull/3097)).
-- Fixes some ui bugs in firefox #3044 ([3058](https://github.com/jupyter/notebook/pull/3058)).
-- Compare non-specific language code when choosing to use arabic
- numerals ([3055](https://github.com/jupyter/notebook/pull/3055)).
-- Fix save-script deprecation ([3053](https://github.com/jupyter/notebook/pull/3053)).
-- Include moment locales in package_data ([3051](https://github.com/jupyter/notebook/pull/3051)).
-- Fix moment locale loading in bidi support ([3048](https://github.com/jupyter/notebook/pull/3048)).
-- Tornado 5: periodiccallback loop arg will be removed ([3034](https://github.com/jupyter/notebook/pull/3034)).
-- Use \[/files\]{.title-ref} prefix for pdf-like files ([3031](https://github.com/jupyter/notebook/pull/3031)).
-- Add folder for document translation ([3022](https://github.com/jupyter/notebook/pull/3022)).
-- When login-in via token, let a chance for user to set the password ([3008](https://github.com/jupyter/notebook/pull/3008)).
-- Switch to jupyter_core implementation of ensure_dir_exists ([3002](https://github.com/jupyter/notebook/pull/3002)).
-- Send http shutdown request on 'stop' subcommand ([3000](https://github.com/jupyter/notebook/pull/3000)).
-- Work on loading ui translations ([2969](https://github.com/jupyter/notebook/pull/2969)).
-- Fix ansi inverse ([2967](https://github.com/jupyter/notebook/pull/2967)).
-- Add send2trash to requirements for building docs ([2964](https://github.com/jupyter/notebook/pull/2964)).
-- I18n readme.md improvement ([2962](https://github.com/jupyter/notebook/pull/2962)).
-- Add 'reason' field to json error responses ([2958](https://github.com/jupyter/notebook/pull/2958)).
-- Add some padding for stream outputs ([3194](https://github.com/jupyter/notebook/pull/3194)).
-- Always use setuptools in `setup.py` ([3206](https://github.com/jupyter/notebook/pull/3206)).
-- Fix clearing cookies on logout when `base_url` is configured ([3207](https://github.com/jupyter/notebook/pull/3207)).
-
-Thanks to the following contributors:
-
-- bacboc ([bacboc](https://github.com/bacboc))
-- Steven Silvester ([blink1073](https://github.com/blink1073))
-- Matthias Bussonnier ([Carreau](https://github.com/Carreau))
-- ChungJooHo ([ChungJooHo](https://github.com/ChungJooHo))
-- edida ([edida](https://github.com/edida))
-- Francesco Franchina (`ferdas`)
-- forbxy ([forbxy](https://github.com/forbxy))
-- Grant Nestor ([gnestor](https://github.com/gnestor))
-- Josh Barnes ([jcb91](https://github.com/jcb91))
-- JocelynDelalande ([JocelynDelalande](https://github.com/JocelynDelalande))
-- Karthik Balakrishnan ([karthikb351](https://github.com/karthikb351))
-- Kevin Bates ([kevin-bates](https://github.com/kevin-bates))
-- Kirit Thadaka ([kirit93](https://github.com/kirit93))
-- Lilian Besson ([Naereen](https://github.com/Naereen))
-- Maarten Breddels ([maartenbreddels](https://github.com/maartenbreddels))
-- Madhu94 ([Madhu94](https://github.com/Madhu94))
-- Matthias Geier ([mgeier](https://github.com/mgeier))
-- Michael Heilman ([mheilman](https://github.com/mheilman))
-- Min RK ([minrk](https://github.com/minrk))
-- PHaeJin ([PHaeJin](https://github.com/PHaeJin))
-- Sukneet ([Sukneet](https://github.com/Sukneet))
-- Thomas Kluyver ([takluyver](https://github.com/takluyver))
-
-See the 5.3 milestone on GitHub for a complete list of [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A5.3)
-involved in this release.
-
-## 5.2.1
-
-- Fix invisible CodeMirror cursor at specific browser zoom levels ([2983](https://github.com/jupyter/notebook/pull/2983)).
-- Fix nbconvert handler causing broken export to PDF ([2981](https://github.com/jupyter/notebook/pull/2981)).
-- Fix the prompt_area argument of the output area constructor. ([2961](https://github.com/jupyter/notebook/pull/2961)).
-- Handle a compound extension in new_untitled ([2949](https://github.com/jupyter/notebook/pull/2949)).
-- Allow disabling offline message buffering ([2916](https://github.com/jupyter/notebook/pull/2916)).
-
-Thanks to the following contributors:
-
-- Steven Silvester ([blink1073](https://github.com/blink1073))
-- Grant Nestor ([gnestor](https://github.com/gnestor))
-- Jason Grout ([jasongrout](https://github.com/jasongrout))
-- Min RK ([minrk](https://github.com/minrk))
-- M Pacer ([mpacer](https://github.com/mpacer))
-
-See the 5.2.1 milestone on GitHub for a complete list of [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A5.2.1)
-involved in this release.
-
-## 5.2.0
-
-- Allow setting token via jupyter_token env ([2921](https://github.com/jupyter/notebook/pull/2921)).
-- Fix some errors caused by raising 403 in get_current_user ([2919](https://github.com/jupyter/notebook/pull/2919)).
-- Register contents_manager.files_handler_class directly ([2917](https://github.com/jupyter/notebook/pull/2917)).
-- Update viewable_extensions ([2913](https://github.com/jupyter/notebook/pull/2913)).
-- Show edit shortcuts modal after shortcuts modal is hidden ([2912](https://github.com/jupyter/notebook/pull/2912)).
-- Improve edit/view behavior ([2911](https://github.com/jupyter/notebook/pull/2911)).
-- The root directory of the notebook server should never be hidden ([2907](https://github.com/jupyter/notebook/pull/2907)).
-- Fix notebook require config to match tools/build-main ([2888](https://github.com/jupyter/notebook/pull/2888)).
-- Give page constructor default arguments ([2887](https://github.com/jupyter/notebook/pull/2887)).
-- Fix codemirror.less to match codemirror's expected padding layout ([2880](https://github.com/jupyter/notebook/pull/2880)).
-- Add x-xsrftoken to access-control-allow-headers ([2876](https://github.com/jupyter/notebook/pull/2876)).
-- Buffer messages when websocket connection is interrupted ([2871](https://github.com/jupyter/notebook/pull/2871)).
-- Load locale dynamically only when not en-us ([2866](https://github.com/jupyter/notebook/pull/2866)).
-- Changed key strength to 2048 bits ([2861](https://github.com/jupyter/notebook/pull/2861)).
-- Resync jsversion with python version ([2860](https://github.com/jupyter/notebook/pull/2860)).
-- Allow copy operation on modified, read-only notebook ([2854](https://github.com/jupyter/notebook/pull/2854)).
-- Update error handling on apihandlers ([2853](https://github.com/jupyter/notebook/pull/2853)).
-- Test python 3.6 on travis, drop 3.3 ([2852](https://github.com/jupyter/notebook/pull/2852)).
-- Avoid base64-literals in image tests ([2851](https://github.com/jupyter/notebook/pull/2851)).
-- Upgrade xterm.js to 2.9.2 ([2849](https://github.com/jupyter/notebook/pull/2849)).
-- Changed all python variables named file to file_name to not override
- built_in file ([2830](https://github.com/jupyter/notebook/pull/2830)).
-- Add more doc tests ([2823](https://github.com/jupyter/notebook/pull/2823)).
-- Typos fix ([2815](https://github.com/jupyter/notebook/pull/2815)).
-- Rename and update license \[ci skip\] ([2810](https://github.com/jupyter/notebook/pull/2810)).
-- Travis builds doc ([2808](https://github.com/jupyter/notebook/pull/2808)).
-- Pull request i18n ([2804](https://github.com/jupyter/notebook/pull/2804)).
-- Factor out output_prompt_function, as is done with input prompt ([2774](https://github.com/jupyter/notebook/pull/2774)).
-- Use rfc5987 encoding for filenames ([2767](https://github.com/jupyter/notebook/pull/2767)).
-- Added path to the resources metadata, the same as in
- from_filename(...) in nbconvert.exporters.py ([2753](https://github.com/jupyter/notebook/pull/2753)).
-- Make "extrakeys" consistent for notebook and editor ([2745](https://github.com/jupyter/notebook/pull/2745)).
-- Bidi support ([2357](https://github.com/jupyter/notebook/pull/2357)).
-
-Special thanks to [samarsultan](https://github.com/samarsultan) and the
-Arabic Competence and Globalization Center Team at IBM Egypt for adding
-RTL (right-to-left) support to the notebook!
-
-See the 5.2 milestone on GitHub for a complete list of
-[issues](https://github.com/jupyter/notebook/issues?utf8=%E2%9C%93&q=is%3Aissue%20milestone%3A5.2)
-and [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A5.2)
-involved in this release.
-
-## 5.1.0
-
-- Preliminary i18n implementation ([2140](https://github.com/jupyter/notebook/pull/2140)).
-- Expose URL with auth token in notebook UI ([2666](https://github.com/jupyter/notebook/pull/2666)).
-- Fix search background style ([2387](https://github.com/jupyter/notebook/pull/2387)).
-- List running notebooks without requiring `--allow-root` ([2421](https://github.com/jupyter/notebook/pull/2421)).
-- Allow session of type other than notebook ([2559](https://github.com/jupyter/notebook/pull/2559)).
-- Fix search background style ([2387](https://github.com/jupyter/notebook/pull/2387)).
-- Fix some Markdown styling issues ([2571](https://github.com/jupyter/notebook/pull/2571)), ([2691](https://github.com/jupyter/notebook/pull/2691)) and ([2534](https://github.com/jupyter/notebook/pull/2534)).
-- Remove keymaps that conflict with non-English keyboards ([2535](https://github.com/jupyter/notebook/pull/2535)).
-- Add session-specific favicons (notebook, terminal, file) ([2452](https://github.com/jupyter/notebook/pull/2452)).
-- Add /api/shutdown handler ([2507](https://github.com/jupyter/notebook/pull/2507)).
-- Include metadata when copying a cell ([2349](https://github.com/jupyter/notebook/pull/2349)).
-- Stop notebook server from command line ([2388](https://github.com/jupyter/notebook/pull/2388)).
-- Improve "View" and "Edit" file handling in dashboard ([2449](https://github.com/jupyter/notebook/pull/2449)) and ([2402](https://github.com/jupyter/notebook/pull/2402)).
-- Provide a promise to replace use of the
- `app_initialized.NotebookApp` event ([2710](https://github.com/jupyter/notebook/pull/2710)).
-- Fix disabled collapse/expand output button ([2681](https://github.com/jupyter/notebook/pull/2681)).
-- Cull idle kernels using `--MappingKernelManager.cull_idle_timeout` ([2215](https://github.com/jupyter/notebook/pull/2215)).
-- Allow read-only notebooks to be trusted ([2718](https://github.com/jupyter/notebook/pull/2718)).
-
-See the 5.1 milestone on GitHub for a complete list of
-[issues](https://github.com/jupyter/notebook/issues?utf8=%E2%9C%93&q=is%3Aissue%20milestone%3A5.1)
-and [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A5.1)
-involved in this release.
-
-## 5.0.0
-
-This is the first major release of the Jupyter Notebook since version
-4.0 was created by the "Big Split" of IPython and Jupyter.
-
-We encourage users to start trying JupyterLab in preparation for a
-future transition.
-
-We have merged more than 300 pull requests since 4.0. Some of the major
-user-facing changes are described here.
-
-### File sorting in the dashboard
-
-Files in the dashboard may now be sorted by last modified date or name
-([943](https://github.com/jupyter/notebook/pull/943)):
-
-### Cell tags
-
-There is a new cell toolbar for adding _cell tags_
-([2048](https://github.com/jupyter/notebook/pull/2048)):
-
-Cell tags are a lightweight way to customise the behaviour of tools
-working with notebooks; we're working on building support for them into
-tools like [nbconvert](https://nbconvert.readthedocs.io/en/latest/) and
-[nbval](https://github.com/computationalmodelling/nbval). To start using
-tags, select `Tags` in the `View > Cell Toolbar` menu in a notebook.
-
-The UI for editing cell tags is basic for now; we hope to improve it in
-future releases.
-
-### Table style
-
-The default styling for tables in the notebook has been updated
-([1776](https://github.com/jupyter/notebook/pull/1776)).
-
-### Customise keyboard shortcuts
-
-You can now edit keyboard shortcuts for _Command Mode_ within the UI
-([1347](https://github.com/jupyter/notebook/pull/1347)):
-
-See the `Help > Edit Keyboard Shortcuts` menu item and follow the
-instructions.
-
-### Other additions
-
-- You can copy and paste cells between notebooks, using
- `Ctrl-C`{.interpreted-text role="kbd"} and
- `Ctrl-V`{.interpreted-text role="kbd"} (`Cmd-C`{.interpreted-text
- role="kbd"} and `Cmd-V`{.interpreted-text role="kbd"} on Mac).
-- It's easier to configure a password for the notebook with the new
- `jupyter notebook password` command ([2007](https://github.com/jupyter/notebook/pull/2007)).
-- The file list can now be ordered by _last modified_ or by _name_ ([943](https://github.com/jupyter/notebook/pull/943)).
-- Markdown cells now support attachments. Simply drag and drop an
- image from your desktop to a markdown cell to add it. Unlike
- relative links that you enter manually, attachments are embedded in
- the notebook itself. An unreferenced attachment will be
- automatically scrubbed from the notebook on save ([621](https://github.com/jupyter/notebook/pull/621)).
-- Undoing cell deletion now supports undeleting multiple cells. Cells
- may not be in the same order as before their deletion, depending on
- the actions you did on the meantime, but this should should help
- reduce the impact of accidentally deleting code.
-- The file browser now has _Edit_ and _View_ buttons.
-- The file browser now supports moving multiple files at once ([1088](https://github.com/jupyter/notebook/pull/1088)).
-- The Notebook will refuse to run as root unless the `--allow-root`
- flag is given ([1115](https://github.com/jupyter/notebook/pull/1115)).
-- Keyboard shortcuts are now declarative ([1234](https://github.com/jupyter/notebook/pull/1234)).
-- Toggling line numbers can now affect all cells ([1312](https://github.com/jupyter/notebook/pull/1312)).
-- Add more visible _Trusted_ and _Untrusted_ notifications ([1658](https://github.com/jupyter/notebook/pull/1658)).
-- The favicon (browser shortcut icon) now changes to indicate when the
- kernel is busy ([1837](https://github.com/jupyter/notebook/pull/1837)).
-- Header and toolbar visibility is now persisted in nbconfig and
- across sessions ([1769](https://github.com/jupyter/notebook/pull/1769)).
-- Load server extensions with ConfigManager so that merge happens
- recursively, unlike normal config values, to make it load more
- consistently with frontend extensions([2108](https://github.com/jupyter/notebook/pull/2108)).
-- The notebook server now supports the bundler API
- from the [jupyter_cms incubator
- project](https://github.com/jupyter-incubator/contentmanagement) ([1579](https://github.com/jupyter/notebook/pull/1579)).
-- The notebook server now provides information about kernel activity
- in its kernel resource API ([1827](https://github.com/jupyter/notebook/pull/1827)).
-
-Remember that upgrading `notebook` only affects the user interface.
-Upgrading kernels and libraries may also provide new features, better
-stability and integration with the notebook interface.
-
-## 4.4.0
-
-- Allow override of output callbacks to redirect output messages. This
- is used to implement the ipywidgets Output widget, for example.
-- Fix an async bug in message handling by allowing comm message
- handlers to return a promise which halts message processing until
- the promise resolves.
-
-See the 4.4 milestone on GitHub for a complete list of
-[issues](https://github.com/jupyter/notebook/issues?utf8=%E2%9C%93&q=is%3Aissue%20milestone%3A4.4)
-and [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A4.4)
-involved in this release.
-
-## 4.3.2
-
-4.3.2 is a patch release with a bug fix for CodeMirror and improved
-handling of the "editable" cell metadata field.
-
-- Monkey-patch for CodeMirror that resolves
- [#2037](https://github.com/jupyter/notebook/issues/2037) without
- breaking [#1967](https://github.com/jupyter/notebook/issues/1967)
-- Read-only (`"editable": false`) cells can be executed but cannot be
- split, merged, or deleted
-
-See the 4.3.2 milestone on GitHub for a complete list of
-[issues](https://github.com/jupyter/notebook/issues?utf8=%E2%9C%93&q=is%3Aissue%20milestone%3A4.3.2)
-and [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A4.3.2)
-involved in this release.
-
-## 4.3.1
-
-4.3.1 is a patch release with a security patch, a couple bug fixes, and
-improvements to the newly-released token authentication.
-
-**Security fix**:
-
-- CVE-2016-9971. Fix CSRF vulnerability, where malicious forms could
- create untitled files and start kernels (no remote execution or
- modification of existing files) for users of certain browsers (Firefox, Internet Explorer / Edge). All previous notebook releases
- are affected.
-
-Bug fixes:
-
-- Fix carriage return handling
-- Make the font size more robust against fickle browsers
-- Ignore resize events that bubbled up and didn't come from window
-- Add Authorization to allowed CORS headers
-- Downgrade CodeMirror to 5.16 while we figure out issues in Safari
-
-Other improvements:
-
-- Better docs for token-based authentication
-- Further highlight token info in log output when autogenerated
-
-See the 4.3.1 milestone on GitHub for a complete list of
-[issues](https://github.com/jupyter/notebook/issues?utf8=%E2%9C%93&q=is%3Aissue%20milestone%3A4.3.1)
-and [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A4.3.1)
-involved in this release.
-
-## 4.3.0
-
-4.3 is a minor release with many bug fixes and improvements. The biggest
-user-facing change is the addition of token authentication, which is
-enabled by default. A token is generated and used when your browser is
-opened automatically, so you shouldn't have to enter anything in the
-default circumstances. If you see a login page (e.g. by switching
-browsers, or launching on a new port with `--no-browser`), you get a
-login URL with the token from the command `jupyter notebook list`, which
-you can paste into your browser.
-
-Highlights:
-
-- API for creating mime-type based renderer extensions using
- `OutputArea.register_mime_type` and `Notebook.render_cell_output`
- methods. See
- [mimerender-cookiecutter](https://github.com/jupyterlab/mimerender-cookiecutter)
- for reference implementations and cookiecutter.
-- Enable token authentication by default. See
- `server_security`{.interpreted-text role="ref"} for more details.
-- Update security docs to reflect new signature system
-- Switched from term.js to xterm.js
-
-Bug fixes:
-
-- Ensure variable is set if exc_info is falsey
-- Catch and log handler exceptions in `events.trigger`
-- Add debug log for static file paths
-- Don't check origin on token-authenticated requests
-- Remove leftover print statement
-- Fix highlighting of Python code blocks
-- `json_errors` should be outermost decorator on API handlers
-- Fix remove old nbserver info files
-- Fix notebook mime type on download links
-- Fix carriage symbol behavior
-- Fix terminal styles
-- Update dead links in docs
-- If kernel is broken, start a new session
-- Include cross-origin check when allowing login URL redirects
-
-Other improvements:
-
-- Allow JSON output data with mime type `application/*+json`
-- Allow kernelspecs to have spaces in them for backward compat
-- Allow websocket connections from scripts
-- Allow `None` for post_save_hook
-- Upgrade CodeMirror to 5.21
-- Upgrade xterm to 2.1.0
-- Docs for using comms
-- Set `dirty` flag when output arrives
-- Set `ws-url` data attribute when accessing a notebook terminal
-- Add base aliases for nbextensions
-- Include `@` operator in CodeMirror IPython mode
-- Extend mathjax_url docstring
-- Load nbextension in predictable order
-- Improve the error messages for nbextensions
-- Include cross-origin check when allowing login URL redirects
-
-See the 4.3 milestone on GitHub for a complete list of
-[issues](https://github.com/jupyter/notebook/issues?utf8=%E2%9C%93&q=is%3Aissue%20milestone%3A4.3%20)
-and [pull
-requests](https://github.com/jupyter/notebook/pulls?utf8=%E2%9C%93&q=is%3Apr%20milestone%3A4.3%20)
-involved in this release.
-
-## 4.2.3
-
-4.2.3 is a small bugfix release on 4.2.
-
-> Highlights:
-
-- Fix regression in 4.2.2 that delayed loading custom.js until after
- `notebook_loaded` and `app_initialized` events have fired.
-- Fix some outdated docs and links.
-
-## 4.2.2
-
-4.2.2 is a small bugfix release on 4.2, with an important security fix.
-All users are strongly encouraged to upgrade to 4.2.2.
-
-> Highlights:
-
-- **Security fix**: CVE-2016-6524, where untrusted latex output could
- be added to the page in a way that could execute javascript.
-- Fix missing POST in OPTIONS responses.
-- Fix for downloading non-ascii filenames.
-- Avoid clobbering ssl_options, so that users can specify more
- detailed SSL configuration.
-- Fix inverted load order in nbconfig, so user config has highest
- priority.
-- Improved error messages here and there.
-
-## 4.2.1
-
-4.2.1 is a small bugfix release on 4.2. Highlights:
-
-- Compatibility fixes for some versions of ipywidgets
-- Fix for ignored CSS on Windows
-- Fix specifying destination when installing nbextensions
-
-## 4.2.0
-
-Release 4.2 adds a new API for enabling and installing extensions.
-Extensions can now be enabled at the system-level, rather than just
-per-user. An API is defined for installing directly from a Python
-package, as well.
-
-Highlighted changes:
-
-- Upgrade MathJax to 2.6 to fix vertical-bar appearing on some
- equations.
-- Restore ability for notebook directory to be root (4.1 regression)
-- Large outputs are now throttled, reducing the ability of output
- floods to kill the browser.
-- Fix the notebook ignoring cell executions while a kernel is starting
- by queueing the messages.
-- Fix handling of url prefixes (e.g. JupyterHub) in terminal and edit
- pages.
-- Support nested SVGs in output.
-
-And various other fixes and improvements.
-
-## 4.1.0
-
-Bug fixes:
-
-- Properly reap zombie subprocesses
-- Fix cross-origin problems
-- Fix double-escaping of the base URL prefix
-- Handle invalid unicode filenames more gracefully
-- Fix ANSI color-processing
-- Send keepalive messages for web terminals
-- Fix bugs in the notebook tour
-
-UI changes:
-
-- Moved the cell toolbar selector into the _View_ menu. Added a button
- that triggers a "hint" animation to the main toolbar so users can
- find the new location. (Click here to see a
- [screencast](https://cloud.githubusercontent.com/assets/335567/10711889/59665a5a-7a3e-11e5-970f-86b89592880c.gif)
- )
-
-- Added _Restart & Run All_ to the _Kernel_ menu. Users can also bind
- it to a keyboard shortcut on action
- `restart-kernel-and-run-all-cells`.
-
-- Added multiple-cell selection. Users press `Shift-Up/Down` or
- `Shift-K/J` to extend selection in command mode. Various actions
- such as cut/copy/paste, execute, and cell type conversions apply to
- all selected cells.
-
-- Added a command palette for executing Jupyter actions by name. Users
- press `Cmd/Ctrl-Shift-P` or click the new command palette icon on
- the toolbar.
-
-- Added a _Find and Replace_ dialog to the _Edit_ menu. Users can also
- press `F` in command mode to show the dialog.
-
-Other improvements:
-
-- Custom KernelManager methods can be Tornado coroutines, allowing
- async operations.
-- Make clearing output optional when rewriting input with
- `set_next_input(replace=True)`.
-- Added support for TLS client authentication via
- `--NotebookApp.client-ca`.
-- Added tags to `jupyter/notebook` releases on DockerHub. `latest`
- continues to track the master branch.
-
-See the 4.1 milestone on GitHub for a complete list of
-[issues](https://github.com/jupyter/notebook/issues?page=3&q=milestone%3A4.1+is%3Aclosed+is%3Aissue&utf8=%E2%9C%93)
-and [pull
-requests](https://github.com/jupyter/notebook/pulls?q=milestone%3A4.1+is%3Aclosed+is%3Apr)
-handled.
-
-## 4.0.x
-
-### 4.0.6
-
-- fix installation of mathjax support files
-- fix some double-escape regressions in 4.0.5
-- fix a couple of cases where errors could prevent opening a notebook
-
-### 4.0.5
-
-Security fixes for maliciously crafted files.
-
-- [CVE-2015-6938](http://www.openwall.com/lists/oss-security/2015/09/02/3):
- malicious filenames
-- [CVE-2015-7337](http://www.openwall.com/lists/oss-security/2015/09/16/3):
- malicious binary files in text editor.
-
-Thanks to Jonathan Kamens at Quantopian and Juan Broull贸n for the
-reports.
-
-### 4.0.4
-
-- Fix inclusion of mathjax-safe extension
-
-### 4.0.2
-
-- Fix launching the notebook on Windows
-- Fix the path searched for frontend config
-
-### 4.0.0
-
-First release of the notebook as a standalone package.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 6823f81b7..000000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,247 +0,0 @@
-# Contributing to Jupyter Notebook
-
-Thanks for contributing to Jupyter Notebook!
-
-Make sure to follow [Project Jupyter's Code of Conduct](https://jupyter.org/governance/conduct/code-of-conduct)
-for a friendly and welcoming collaborative environment.
-
-## Setting up a development environment
-
-Note: You will need NodeJS to build the extension package.
-
-The `jlpm` command is JupyterLab's pinned version of [yarn](https://yarnpkg.com/) that is installed with JupyterLab. You may use
-`yarn` or `npm` in lieu of `jlpm` below.
-
-**Note**: we recommend using `mamba` to speed up the creation of the environment.
-
-```bash
-# create a new environment
-mamba create -n notebook -c conda-forge python nodejs -y
-
-# activate the environment
-mamba activate notebook
-
-# Install package in development mode
-pip install -e ".[dev,docs,test]"
-
-# Install dependencies and build packages
-jlpm
-jlpm build
-
-# Link the notebook extension and @jupyter-notebook schemas
-jlpm develop
-
-# Enable the server extension
-jupyter server extension enable notebook
-```
-
-`notebook` follows a monorepo structure. To build all the packages at once:
-
-```bash
-jlpm build
-```
-
-There is also a `watch` script to watch for changes and rebuild the app automatically:
-
-```bash
-jlpm watch
-```
-
-To make sure the `notebook` server extension is installed:
-
-```bash
-$ jupyter server extension list
-Config dir: /home/username/.jupyter
-
-Config dir: /home/username/miniforge3/envs/notebook/etc/jupyter
- jupyterlab enabled
- - Validating jupyterlab...
- jupyterlab 3.0.0 OK
- notebook enabled
- - Validating notebook...
- notebook 7.0.0a0 OK
-
-Config dir: /usr/local/etc/jupyter
-```
-
-Then start Jupyter Notebook with:
-
-```bash
-jupyter notebook
-```
-
-### Local changes in Notebook dependencies
-
-The development installation described above fetches JavaScript dependencies from `npm`.
-according to the versions in the _package.json_ file.
-However, it is sometimes useful to be able to test changes in Notebook, with dependencies (e.g. `@jupyterlab` packages) that have not yet
-been published.
-
-[yalc](https://github.com/wclr/yalc) can help you use local JavaScript packages when building Notebook, acting as a local package repository.
-
-- Install yalc globally in your environment:
- `npm install -g yalc`
-- Publish your dependency package:\
- `yalc publish`, from the package root directory.\
- For instance, if you are developing on _@jupyterlab/ui-components_, this command must be executed from
- _path_to_jupyterlab/packages/ui-components_.
-- Depend on this local repository in Notebook:
- - from the Notebook root directory:\
- `yalc add your_package` : this will create a _dependencies_ entry in the main _package.json_ file.\
- With the previous example, it would be `yalc add @jupyterlab/ui-components`.
- - Notebook is a monorepo, so we want this dependency to be 'linked' as a resolution (for all sub-packages) instead
- of a dependency.\
- The easiest way is to manually move the new entry in _package.json_ from _dependencies_ to _resolutions_.
- - Build Notebook with the local dependency:\
- `jlpm install && jlpm build`
-
-Changes in the dependency must then be built and pushed using `jlpm build && yalc push` (from the package root directory),
-and fetched from Notebook using `yarn install`.
-
-**Warning**: you need to make sure that the dependencies of Notebook and the local package match correctly,
-otherwise there will be errors with webpack during build.\
-In the previous example, both _@jupyterlab/ui-components_ and Notebook depend on _@jupyterlab/coreutils_. We
-strongly advise you to depend on the same version.
-
-## Running Tests
-
-To run the tests:
-
-```bash
-jlpm run build:test
-jlpm run test
-```
-
-There are also end to end tests to cover higher level user interactions, located in the `ui-tests` folder. To run these tests:
-
-```bash
-cd ui-tests
-#install required packages for jlpm
-jlpm
-
-#install playwright
-jlpm playwright install
-
-# start a new Jupyter server in a terminal
-jlpm start
-
-# in a new terminal, run the tests
-jlpm test
-```
-
-The `test` script calls the Playwright test runner. You can pass additional arguments to `playwright` by appending parameters to the command. For example to run the test in headed mode, `jlpm test --headed`.
-
-Check out the [Playwright Command Line Reference](https://playwright.dev/docs/test-cli/) for more information about the available command line options.
-
-Running the end to end tests in headful mode will trigger something like the following:
-
-
-
-## Tasks caching
-
-The repository is configured to use the Lerna caching system (via `nx`) for some of the development scripts.
-
-This helps speed up rebuilds when running `jlpm run build` multiple times to avoid rebuilding packages that have not changed on disk.
-
-You can generate a graph to have a better idea of the dependencies between all the packages using the following command:
-
-```
-npx nx graph
-```
-
-Running the command will open a browser tab by default with a graph that looks like the following:
-
-
-
-To learn more about Lerna caching:
-
-- https://lerna.js.org/docs/features/cache-tasks
-- https://nx.dev/features/cache-task-results
-
-### Updating reference snapshots
-
-Often a PR might make changes to the user interface, which can cause the visual regression tests to fail.
-
-If you want to update the reference snapshots while working on a PR you can post the following sentence as a GitHub comment:
-
-```
-bot please update playwright snapshots
-```
-
-This will trigger a GitHub Action that will run the UI tests automatically and push new commits to the branch if the reference snapshots have changed.
-
-## Code Styling
-
-All non-python source code is formatted using [prettier](https://prettier.io) and python source code is formatted using [black](https://github.com/psf/black).
-When code is modified and committed, all staged files will be
-automatically formatted using pre-commit git hooks (with help from
-[pre-commit](https://github.com/pre-commit/pre-commit). The benefit of
-using code formatters like `prettier` and `black` is that it removes the topic of
-code style from the conversation when reviewing pull requests, thereby
-speeding up the review process.
-
-As long as your code is valid,
-the pre-commit hook should take care of how it should look.
-`pre-commit` and its associated hooks will automatically be installed when
-you run `pip install -e ".[dev,test]"`
-
-To install `pre-commit` manually, run the following:
-
-```shell
-pip install pre-commit
-pre-commit install
-```
-
-You can invoke the pre-commit hook by hand at any time with:
-
-```shell
-pre-commit run
-```
-
-which should run any autoformatting on your code
-and tell you about any errors it couldn't fix automatically.
-You may also install [black integration](https://github.com/psf/black#editor-integration)
-into your text editor to format code automatically.
-
-If you have already committed files before setting up the pre-commit
-hook with `pre-commit install`, you can fix everything up using
-`pre-commit run --all-files`. You need to make the fixing commit
-yourself after that.
-
-You may also use the prettier npm script (e.g. `npm run prettier` or
-`yarn prettier` or `jlpm prettier`) to format the entire code base.
-We recommend installing a prettier extension for your code editor and
-configuring it to format your code with a keyboard shortcut, or
-automatically on save.
-
-Some of the hooks only run on CI by default, but you can invoke them by
-running with the `--hook-stage manual` argument.
-
-## Documentation
-
-First make sure you have set up a development environment as described above.
-
-Then run the following command to build the docs:
-
-```shell
-hatch run docs:build
-```
-
-In a separate terminal window, run the following command to serve the documentation:
-
-```shell
-hatch run docs:serve
-```
-
-Now open a web browser and navigate to `http://localhost:8000` to access the documentation.
-
-## Contributing from the browser
-
-Alternatively you can also contribute to Jupyter Notebook without setting up a local environment, directly from a web browser:
-
-- [GitHub CodeSpaces](https://github.com/codespaces) is directly integrated into GitHub. This repository uses the [pixi](https://pixi.sh/) package manager to set up the development environment. To contribute after the Codespace is started:
- - Run `pixi shell` in a terminal to activate the development environment
- - Use the commands above for building the extension and running the tests, for example: `jlpm build`
- - To start the application: `pixi run start`. A popup should appear with a button to open the Jupyter Notebook in a new browser tab. If the popup does not appear, you can navigate to the "Forwarded ports" panel to find the URL to the application.
-- GitHub's [built-in editor](https://docs.github.com/en/repositories/working-with-files/managing-files/editing-files) is suitable for contributing small fixes.
-- A more advanced [github.dev](https://docs.github.com/en/codespaces/the-githubdev-web-based-editor) editor can be accessed by pressing the dot (.) key while in the Jupyter Notebook GitHub repository
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 076177a49..000000000
--- a/LICENSE
+++ /dev/null
@@ -1,31 +0,0 @@
-BSD 3-Clause License
-
-- Copyright (c) 2001-2015, IPython Development Team
-- Copyright (c) 2015-, Jupyter Development Team
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its
- contributors may be used to endorse or promote products derived from
- this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
index 5550f4f13..a88ff73c7 100644
--- a/README.md
+++ b/README.md
@@ -1,133 +1 @@
-# Jupyter Notebook
-
-
-[](https://jupyter-notebook.readthedocs.io/en/latest/?badge=latest)
-[](https://mybinder.org/v2/gh/jupyter/notebook/main?urlpath=tree)
-
-The Jupyter notebook is a web-based notebook environment for interactive
-computing.
-
-
-
-## Maintained versions
-
-We maintain the **two most recently released major versions of Jupyter Notebook**,
-Classic Notebook v6 and Notebook v7. Notebook v5 is no longer maintained.
-All Notebook v5 users are strongly advised to upgrade to Classic Notebook v6 as soon as possible.
-
-Upgrading to Notebook v7 may require more work, if you use custom extensions, as extensions written
-for Notebook v5 or Classic Notebook v6 are not compatible with Notebook v7.
-
-### Notebook v7
-
-The newest major version of Notebook is based on:
-
-- JupyterLab components for the frontend
-- Jupyter Server for the Python server
-
-This represents a significant change to the `jupyter/notebook` code base.
-
-To learn more about Notebook v7: https://jupyter.org/enhancement-proposals/79-notebook-v7/notebook-v7.html
-
-### Classic Notebook v6
-
-Maintenance and security-related issues [only](https://github.com/jupyter/notebook-team-compass/issues/5#issuecomment-1085254000) are now being addressed in the [`6.5.x`](https://github.com/jupyter/notebook/tree/6.5.x) branch.
-It depends on [`nbclassic`](https://github.com/jupyter/nbclassic) for the HTML/JavaScript/CSS assets.
-
-New features and continuous improvement is now focused on Notebook v7 (see section above).
-
-If you have an open pull request with a new feature or if you were planning to open one, we encourage switching over to the Jupyter Server and JupyterLab architecture, and distribute it as a server extension and / or JupyterLab prebuilt extension. That way your new feature will also be compatible with the new Notebook v7.
-
-## Jupyter notebook, the language-agnostic evolution of IPython notebook
-
-Jupyter notebook is a language-agnostic HTML notebook application for
-Project Jupyter. In 2015, Jupyter notebook was released as a part of
-The Big Split鈩 of the IPython codebase. IPython 3 was the last major monolithic
-release containing both language-agnostic code, such as the _IPython notebook_,
-and language specific code, such as the _IPython kernel for Python_. As
-computing spans across many languages, Project Jupyter will continue to develop the
-language-agnostic **Jupyter notebook** in this repo and with the help of the
-community develop language specific kernels which are found in their own
-discrete repos.
-
-- [The Big Split鈩 announcement](https://blog.jupyter.org/the-big-split-9d7b88a031a7)
-- [Jupyter Ascending blog post](https://blog.jupyter.org/jupyter-ascending-1bf5b362d97e)
-
-## Installation
-
-You can find the installation documentation for the
-[Jupyter platform, on ReadTheDocs](https://jupyter.readthedocs.io/en/latest/install.html).
-The documentation for advanced usage of Jupyter notebook can be found
-[here](https://jupyter-notebook.readthedocs.io/en/latest/).
-
-For a local installation, make sure you have
-[pip installed](https://pip.readthedocs.io/en/stable/installing/) and run:
-
-```bash
-pip install notebook
-```
-
-## Usage - Running Jupyter notebook
-
-### Running in a local installation
-
-Launch with:
-
-```bash
-jupyter notebook
-```
-
-### Running in a remote installation
-
-You need some configuration before starting Jupyter notebook remotely. See [Running a notebook server](https://jupyter-server.readthedocs.io/en/latest/operators/public-server.html).
-
-## Development Installation
-
-See [`CONTRIBUTING.md`](CONTRIBUTING.md) for how to set up a local development installation.
-
-## Contributing
-
-If you are interested in contributing to the project, see [`CONTRIBUTING.md`](CONTRIBUTING.md).
-
-## Community Guidelines and Code of Conduct
-
-This repository is a Jupyter project and follows the Jupyter
-[Community Guides and Code of Conduct](https://jupyter.readthedocs.io/en/latest/community/content-community.html).
-
-## Resources
-
-- [Project Jupyter website](https://jupyter.org)
-- [Online Demo at jupyter.org/try](https://jupyter.org/try)
-- [Documentation for Jupyter notebook](https://jupyter-notebook.readthedocs.io/en/latest/)
-- [Korean Version of Installation](https://github.com/ChungJooHo/Jupyter_Kor_doc/)
-- [Documentation for Project Jupyter](https://jupyter.readthedocs.io/en/latest/index.html)
-- [Issues](https://github.com/jupyter/notebook/issues)
-- [Technical support - Jupyter Google Group](https://discourse.jupyter.org/)
-
-## About the Jupyter Development Team
-
-The Jupyter Development Team is the set of all contributors to the Jupyter project.
-This includes all of the Jupyter subprojects.
-
-The core team that coordinates development on GitHub can be found here:
-https://github.com/jupyter/.
-
-## Our Copyright Policy
-
-Jupyter uses a shared copyright model. Each contributor maintains copyright
-over their contributions to Jupyter. But, it is important to note that these
-contributions are typically only changes to the repositories. Thus, the Jupyter
-source code, in its entirety is not the copyright of any single person or
-institution. Instead, it is the collective copyright of the entire Jupyter
-Development Team. If individual contributors want to maintain a record of what
-changes/contributions they have specific copyright on, they should indicate
-their copyright in the commit message of the change, when they commit the
-change to one of the Jupyter repositories.
-
-With this in mind, the following banner should be used in any source code file
-to indicate the copyright and license terms:
-
-```
-# Copyright (c) Jupyter Development Team.
-# Distributed under the terms of the Modified BSD License.
-```
+# 清空完成
diff --git a/RELEASE.md b/RELEASE.md
deleted file mode 100644
index 1da5a72ee..000000000
--- a/RELEASE.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Releasing Jupyter Notebook
-
-## Using `jupyter_releaser`
-
-The recommended way to make a release is to use [`jupyter_releaser`](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html).
-
-## Manual Release
-
-To create a manual release, perform the following steps:
-
-### Set up
-
-```bash
-pip install hatch twine
-git pull origin $(git branch --show-current)
-git clean -dffx
-```
-
-### Update the version and apply the tag
-
-```bash
-echo "Enter new version"
-read new_version
-hatch version ${new_version}
-git tag -a ${new_version} -m "Release ${new_version}"
-```
-
-### Build the artifacts
-
-```bash
-rm -rf dist
-hatch build
-```
-
-### Publish the artifacts to pypi
-
-```bash
-twine check dist/*
-twine upload dist/*
-```
diff --git a/__init__.py b/__init__.py
deleted file mode 100644
index 38e58963b..000000000
--- a/__init__.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from __future__ import annotations
-
-from typing import Any
-
-from ._version import __version__, version_info # noqa: F401
-
-
-def _jupyter_server_extension_paths() -> list[dict[str, str]]:
- return [{"module": "notebook"}]
-
-
-def _jupyter_server_extension_points() -> list[dict[str, Any]]:
- from .app import JupyterNotebookApp
-
- return [{"module": "notebook", "app": JupyterNotebookApp}]
-
-
-def _jupyter_labextension_paths() -> list[dict[str, str]]:
- return [{"src": "labextension", "dest": "@jupyter-notebook/lab-extension"}]
diff --git a/__main__.py b/__main__.py
deleted file mode 100644
index 403106406..000000000
--- a/__main__.py
+++ /dev/null
@@ -1,7 +0,0 @@
-"""CLI entry point for notebook."""
-
-import sys
-
-from notebook.app import main
-
-sys.exit(main()) # type:ignore[no-untyped-call]
diff --git a/_version.py b/_version.py
deleted file mode 100644
index 902656f48..000000000
--- a/_version.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""Version info for notebook."""
-
-# Copyright (c) Jupyter Development Team.
-# Distributed under the terms of the Modified BSD License.
-import re
-from collections import namedtuple
-
-# Use "hatch version xx.yy.zz" to handle version changes
-__version__ = "7.6.0a0"
-
-# PEP440 version parser
-_version_regex = re.compile(
- r"""
- (?P\d+)
- \.
- (?P\d+)
- \.
- (?P\d+)
- (?P((a|b|rc|\.dev)))?
- (?P\d+)?
- """,
- re.VERBOSE,
-)
-
-_version_fields = _version_regex.match(__version__).groupdict() # type:ignore[union-attr]
-
-VersionInfo = namedtuple("VersionInfo", ["major", "minor", "micro", "releaselevel", "serial"]) # noqa: PYI024
-
-version_info = VersionInfo(
- *[
- field
- for field in (
- int(_version_fields["major"]),
- int(_version_fields["minor"]),
- int(_version_fields["micro"]),
- _version_fields["releaselevel"] or "",
- _version_fields["serial"] or "",
- )
- ]
-)
diff --git a/app.py b/app.py
deleted file mode 100644
index 0dd84e984..000000000
--- a/app.py
+++ /dev/null
@@ -1,369 +0,0 @@
-"""Jupyter notebook application."""
-
-from __future__ import annotations
-
-import os
-import re
-import typing as t
-from pathlib import Path
-
-from jupyter_client.utils import ensure_async # type:ignore[attr-defined]
-from jupyter_core.application import base_aliases
-from jupyter_core.paths import jupyter_config_dir
-from jupyter_server.base.handlers import JupyterHandler
-from jupyter_server.extension.handler import (
- ExtensionHandlerJinjaMixin,
- ExtensionHandlerMixin,
-)
-from jupyter_server.serverapp import flags
-from jupyter_server.utils import url_escape, url_is_absolute
-from jupyter_server.utils import url_path_join as ujoin
-from jupyterlab.commands import ( # type:ignore[import-untyped]
- get_app_dir,
- get_user_settings_dir,
- get_workspaces_dir,
-)
-from jupyterlab_server import LabServerApp
-from jupyterlab_server.config import ( # type:ignore[attr-defined]
- LabConfig,
- get_page_config,
- recursive_update,
-)
-from jupyterlab_server.handlers import _camelCase, is_url
-from notebook_shim.shim import NotebookConfigShimMixin # type:ignore[import-untyped]
-from tornado import web
-from traitlets import Bool, Unicode, default
-from traitlets.config.loader import Config
-
-from ._version import __version__
-
-HERE = Path(__file__).parent.resolve()
-
-Flags = dict[t.Union[str, tuple[str, ...]], tuple[t.Union[dict[str, t.Any], Config], str]]
-
-app_dir = Path(get_app_dir())
-version = __version__
-
-# mypy: disable-error-code="no-untyped-call"
-
-
-class NotebookBaseHandler(ExtensionHandlerJinjaMixin, ExtensionHandlerMixin, JupyterHandler):
- """The base notebook API handler."""
-
- @property
- def custom_css(self) -> t.Any:
- return self.settings.get("custom_css", True)
-
- def get_page_config(self) -> dict[str, t.Any]:
- """Get the page config."""
- config = LabConfig()
- app: JupyterNotebookApp = self.extensionapp # type:ignore[assignment]
- base_url = self.settings.get("base_url", "/")
- page_config_data = self.settings.setdefault("page_config_data", {})
- page_config = {
- **page_config_data,
- "appVersion": version,
- "baseUrl": self.base_url,
- "terminalsAvailable": self.settings.get("terminals_available", False),
- "token": self.settings["token"],
- "fullStaticUrl": ujoin(self.base_url, "static", self.name),
- "frontendUrl": ujoin(self.base_url, "/"),
- "exposeAppInBrowser": app.expose_app_in_browser,
- }
-
- server_root = self.settings.get("server_root_dir", "")
- server_root = server_root.replace(os.sep, "/")
- server_root = os.path.normpath(Path(server_root).expanduser())
- try:
- # Remove the server_root from pref dir
- if self.serverapp.preferred_dir != server_root:
- page_config["preferredPath"] = "/" + os.path.relpath(
- self.serverapp.preferred_dir, server_root
- )
- else:
- page_config["preferredPath"] = "/"
- except Exception:
- page_config["preferredPath"] = "/"
-
- mathjax_config = self.settings.get("mathjax_config", "TeX-AMS_HTML-full,Safe")
- # TODO Remove CDN usage.
- mathjax_url = self.settings.get(
- "mathjax_url",
- "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js",
- )
- if not url_is_absolute(mathjax_url) and not mathjax_url.startswith(self.base_url):
- mathjax_url = ujoin(self.base_url, mathjax_url)
-
- page_config.setdefault("mathjaxConfig", mathjax_config)
- page_config.setdefault("fullMathjaxUrl", mathjax_url)
- page_config.setdefault("jupyterConfigDir", jupyter_config_dir())
-
- # Put all our config in page_config
- for name in config.trait_names():
- page_config[_camelCase(name)] = getattr(app, name)
-
- # Add full versions of all the urls
- for name in config.trait_names():
- if not name.endswith("_url"):
- continue
- full_name = _camelCase("full_" + name)
- full_url = getattr(app, name)
- if not is_url(full_url):
- # Relative URL will be prefixed with base_url
- full_url = ujoin(base_url, full_url)
- page_config[full_name] = full_url
-
- labextensions_path = app.extra_labextensions_path + app.labextensions_path
- recursive_update(
- page_config,
- get_page_config(
- labextensions_path,
- logger=self.log,
- ),
- )
-
- # modify page config with custom hook
- page_config_hook = self.settings.get("page_config_hook", None)
- if page_config_hook:
- page_config = page_config_hook(self, page_config)
-
- return page_config
-
-
-class TreeHandler(NotebookBaseHandler):
- """A tree page handler."""
-
- @web.authenticated
- async def get(self, path: str = "") -> None:
- """
- Display appropriate page for given path.
-
- - A directory listing is shown if path is a directory
- - Redirected to notebook page if path is a notebook
- - Render the raw file if path is any other file
- """
- path = path.strip("/")
- cm = self.contents_manager
-
- if await ensure_async(cm.dir_exists(path=path)):
- if await ensure_async(cm.is_hidden(path)) and not cm.allow_hidden:
- self.log.info("Refusing to serve hidden directory, via 404 Error")
- raise web.HTTPError(404)
-
- # Set treePath for routing to the directory
- page_config = self.get_page_config()
- page_config["treePath"] = path
-
- tpl = self.render_template("tree.html", page_config=page_config)
- return self.write(tpl)
- if await ensure_async(cm.file_exists(path)):
- # it's not a directory, we have redirecting to do
- model = await ensure_async(cm.get(path, content=False))
- if model["type"] == "notebook":
- url = ujoin(self.base_url, "notebooks", url_escape(path))
- else:
- # Return raw content if file is not a notebook
- url = ujoin(self.base_url, "files", url_escape(path))
- self.log.debug("Redirecting %s to %s", self.request.path, url)
- self.redirect(url)
- return None
- raise web.HTTPError(404)
-
-
-class ConsoleHandler(NotebookBaseHandler):
- """A console page handler."""
-
- @web.authenticated
- def get(self, path: str | None = None) -> t.Any: # noqa: ARG002
- """Get the console page."""
- tpl = self.render_template("consoles.html", page_config=self.get_page_config())
- return self.write(tpl)
-
-
-class TerminalHandler(NotebookBaseHandler):
- """A terminal page handler."""
-
- @web.authenticated
- def get(self, path: str | None = None) -> t.Any: # noqa: ARG002
- """Get the terminal page."""
- tpl = self.render_template("terminals.html", page_config=self.get_page_config())
- return self.write(tpl)
-
-
-class FileHandler(NotebookBaseHandler):
- """A file page handler."""
-
- @web.authenticated
- def get(self, path: str | None = None) -> t.Any: # noqa: ARG002
- """Get the file page."""
- tpl = self.render_template("edit.html", page_config=self.get_page_config())
- return self.write(tpl)
-
-
-class NotebookHandler(NotebookBaseHandler):
- """A notebook page handler."""
-
- @web.authenticated
- async def get(self, path: str = "") -> t.Any:
- """Get the notebook page. Redirect if it's a directory."""
- path = path.strip("/")
- cm = self.contents_manager
-
- if await ensure_async(cm.dir_exists(path=path)):
- url = ujoin(self.base_url, "tree", url_escape(path))
- self.log.debug("Redirecting %s to %s since path is a directory", self.request.path, url)
- self.redirect(url)
- return None
- tpl = self.render_template("notebooks.html", page_config=self.get_page_config())
- return self.write(tpl)
-
-
-class CustomCssHandler(NotebookBaseHandler):
- """A custom CSS handler."""
-
- @web.authenticated
- def get(self) -> t.Any:
- """Get the custom css file."""
-
- self.set_header("Content-Type", "text/css")
- page_config = self.get_page_config()
- custom_css_file = f"{page_config['jupyterConfigDir']}/custom/custom.css"
-
- if not Path(custom_css_file).is_file():
- static_path_root = re.match("^(.*?)static", page_config["staticDir"])
- if static_path_root is not None:
- custom_dir = static_path_root.groups()[0]
- custom_css_file = f"{custom_dir}custom/custom.css"
-
- with Path(custom_css_file).open() as css_f:
- return self.write(css_f.read())
-
-
-aliases = dict(base_aliases)
-
-
-class JupyterNotebookApp(NotebookConfigShimMixin, LabServerApp): # type:ignore[misc]
- """The notebook server extension app."""
-
- name = "notebook"
- app_name = "Jupyter Notebook"
- description = "Jupyter Notebook - A web-based notebook environment for interactive computing"
- version = version
- app_version = Unicode(version, help="The version of the application.")
- extension_url = "/"
- default_url = Unicode("/tree", config=True, help="The default URL to redirect to from `/`")
- file_url_prefix = "/tree"
- load_other_extensions = True
- app_dir = app_dir
- subcommands: dict[str, t.Any] = {}
-
- expose_app_in_browser = Bool(
- False,
- config=True,
- help="Whether to expose the global app instance to browser via window.jupyterapp",
- )
-
- custom_css = Bool(
- True,
- config=True,
- help="""Whether custom CSS is loaded on the page.
- Defaults to True and custom CSS is loaded.
- """,
- )
-
- flags: Flags = flags # type:ignore[assignment]
- flags["expose-app-in-browser"] = (
- {"JupyterNotebookApp": {"expose_app_in_browser": True}},
- "Expose the global app instance to browser via window.jupyterapp.",
- )
-
- flags["custom-css"] = (
- {"JupyterNotebookApp": {"custom_css": True}},
- "Load custom CSS in template html files. Default is True",
- )
-
- @default("static_dir")
- def _default_static_dir(self) -> str:
- return str(HERE / "static")
-
- @default("templates_dir")
- def _default_templates_dir(self) -> str:
- return str(HERE / "templates")
-
- @default("app_settings_dir")
- def _default_app_settings_dir(self) -> str:
- return str(app_dir / "settings")
-
- @default("schemas_dir")
- def _default_schemas_dir(self) -> str:
- return str(app_dir / "schemas")
-
- @default("themes_dir")
- def _default_themes_dir(self) -> str:
- return str(app_dir / "themes")
-
- @default("user_settings_dir")
- def _default_user_settings_dir(self) -> str:
- return t.cast(str, get_user_settings_dir())
-
- @default("workspaces_dir")
- def _default_workspaces_dir(self) -> str:
- return t.cast(str, get_workspaces_dir())
-
- def _prepare_templates(self) -> None:
- super(LabServerApp, self)._prepare_templates()
- self.jinja2_env.globals.update(custom_css=self.custom_css) # type:ignore[has-type]
-
- def server_extension_is_enabled(self, extension: str) -> bool:
- """Check if server extension is enabled."""
- if self.serverapp is None:
- return False
- try:
- extension_enabled = (
- self.serverapp.extension_manager.extensions[extension].enabled is True
- )
- except (AttributeError, KeyError, TypeError):
- extension_enabled = False
- return extension_enabled
-
- def initialize_handlers(self) -> None:
- """Initialize handlers."""
- assert self.serverapp is not None # noqa: S101
- page_config = self.serverapp.web_app.settings.setdefault("page_config_data", {})
- nbclassic_enabled = self.server_extension_is_enabled("nbclassic")
- page_config["nbclassic_enabled"] = nbclassic_enabled
-
- # If running under JupyterHub, add more metadata.
- if "hub_prefix" in self.serverapp.tornado_settings:
- tornado_settings = self.serverapp.tornado_settings
- hub_prefix = tornado_settings["hub_prefix"]
- page_config["hubPrefix"] = hub_prefix
- page_config["hubHost"] = tornado_settings["hub_host"]
- page_config["hubUser"] = tornado_settings["user"]
- page_config["shareUrl"] = ujoin(hub_prefix, "user-redirect")
- # Assume the server_name property indicates running JupyterHub 1.0.
- if hasattr(self.serverapp, "server_name"):
- page_config["hubServerName"] = self.serverapp.server_name
- # avoid setting API token in page config
- # $JUPYTERHUB_API_TOKEN identifies the server, not the client
- # but at least make sure we don't use the token
- # if the serverapp set one
- page_config["token"] = ""
-
- self.handlers.append(("/tree(.*)", TreeHandler))
- self.handlers.append(("/notebooks(.*)", NotebookHandler))
- self.handlers.append(("/edit(.*)", FileHandler))
- self.handlers.append(("/consoles/(.*)", ConsoleHandler))
- self.handlers.append(("/terminals/(.*)", TerminalHandler))
- self.handlers.append(("/custom/custom.css", CustomCssHandler))
- super().initialize_handlers()
-
- def initialize(self, argv: list[str] | None = None) -> None: # noqa: ARG002
- """Subclass because the ExtensionApp.initialize() method does not take arguments"""
- super().initialize()
-
-
-main = launch_new_instance = JupyterNotebookApp.launch_instance
-
-if __name__ == "__main__":
- main()
diff --git a/app/.ipynb_checkpoints/index.template-checkpoint.js b/app/.ipynb_checkpoints/index.template-checkpoint.js
deleted file mode 100644
index e5d8a5b26..000000000
--- a/app/.ipynb_checkpoints/index.template-checkpoint.js
+++ /dev/null
@@ -1,244 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-// Inspired by: https://github.com/jupyterlab/jupyterlab/blob/master/dev_mode/index.js
-
-import { PageConfig, URLExt } from '@jupyterlab/coreutils';
-
-import { PluginRegistry } from '@lumino/coreutils';
-
-require('./style.js');
-require('./extraStyle.js');
-
-function loadScript(url) {
- return new Promise((resolve, reject) => {
- const newScript = document.createElement('script');
- newScript.onerror = reject;
- newScript.onload = resolve;
- newScript.async = true;
- document.head.appendChild(newScript);
- newScript.src = url;
- });
-}
-async function loadComponent(url, scope) {
- await loadScript(url);
-
- // From MIT-licensed https://github.com/module-federation/module-federation-examples/blob/af043acd6be1718ee195b2511adf6011fba4233c/advanced-api/dynamic-remotes/app1/src/App.js#L6-L12
- // eslint-disable-next-line no-undef
- await __webpack_init_sharing__('default');
- const container = window._JUPYTERLAB[scope];
- // Initialize the container, it may provide shared modules and may need ours
- // eslint-disable-next-line no-undef
- await container.init(__webpack_share_scopes__.default);
-}
-
-async function createModule(scope, module) {
- try {
- const factory = await window._JUPYTERLAB[scope].get(module);
- const instance = factory();
- instance.__scope__ = scope;
- return instance;
- } catch (e) {
- console.warn(
- `Failed to create module: package: ${scope}; module: ${module}`
- );
- throw e;
- }
-}
-
-/**
- * The main function
- */
-async function main() {
- const mimeExtensionsMods = [
- {{#each notebook_mime_extensions}}
- require('{{ @key }}'),
- {{/each}}
- ];
- const mimeExtensions = await Promise.all(mimeExtensionsMods);
-
- // Load the base plugins available on all pages
- let baseMods = [
- {{#each notebook_plugins}}
- {{#if (ispage @key '/')}}
- {{{ list_plugins }}}
- {{/if}}
- {{/each}}
- ];
-
- const page = `/${PageConfig.getOption('notebookPage')}`;
- switch (page) {
- {{#each notebook_plugins}}
- {{#unless (ispage @key '/')}}
- // list all the other plugins grouped by page
- case '{{ @key }}': {
- baseMods = baseMods.concat([
- {{{ list_plugins }}}
- ]);
- break;
- }
- {{/unless}}
- {{/each}}
- }
-
- // populate the list of disabled extensions
- const disabled = [];
- const availablePlugins = [];
-
- /**
- * Iterate over active plugins in an extension.
- *
- * #### Notes
- * This also populates the disabled
- */
- function* activePlugins(extension) {
- // Handle commonjs or es2015 modules
- let exports;
- if (Object.prototype.hasOwnProperty.call(extension, '__esModule')) {
- exports = extension.default;
- } else {
- // CommonJS exports.
- exports = extension;
- }
-
- let plugins = Array.isArray(exports) ? exports : [exports];
- for (let plugin of plugins) {
- const isDisabled = PageConfig.Extension.isDisabled(plugin.id);
- availablePlugins.push({
- id: plugin.id,
- description: plugin.description,
- requires: plugin.requires ?? [],
- optional: plugin.optional ?? [],
- provides: plugin.provides ?? null,
- autoStart: plugin.autoStart,
- enabled: !isDisabled,
- extension: extension.__scope__
- });
- if (isDisabled) {
- disabled.push(plugin.id);
- continue;
- }
- yield plugin;
- }
- }
-
- const extension_data = JSON.parse(
- PageConfig.getOption('federated_extensions')
- );
-
- const mods = [];
- const federatedExtensionPromises = [];
- const federatedMimeExtensionPromises = [];
- const federatedStylePromises = [];
-
- const extensions = await Promise.allSettled(
- extension_data.map(async data => {
- await loadComponent(
- `${URLExt.join(
- PageConfig.getOption('fullLabextensionsUrl'),
- data.name,
- data.load
- )}`,
- data.name
- );
- return data;
- })
- );
-
- extensions.forEach(p => {
- if (p.status === 'rejected') {
- // There was an error loading the component
- console.error(p.reason);
- return;
- }
-
- const data = p.value;
- if (data.extension) {
- federatedExtensionPromises.push(createModule(data.name, data.extension));
- }
- if (data.mimeExtension) {
- federatedMimeExtensionPromises.push(
- createModule(data.name, data.mimeExtension)
- );
- }
- if (data.style && !PageConfig.Extension.isDisabled(data.name)) {
- federatedStylePromises.push(createModule(data.name, data.style));
- }
- });
-
- // Add the base frontend extensions
- const baseFrontendMods = await Promise.all(baseMods);
- baseFrontendMods.forEach(p => {
- for (let plugin of activePlugins(p)) {
- mods.push(plugin);
- }
- });
-
- // Add the federated extensions.
- const federatedExtensions = await Promise.allSettled(
- federatedExtensionPromises
- );
- federatedExtensions.forEach(p => {
- if (p.status === 'fulfilled') {
- for (let plugin of activePlugins(p.value)) {
- mods.push(plugin);
- }
- } else {
- console.error(p.reason);
- }
- });
-
- // Add the federated mime extensions.
- const federatedMimeExtensions = await Promise.allSettled(
- federatedMimeExtensionPromises
- );
- federatedMimeExtensions.forEach(p => {
- if (p.status === 'fulfilled') {
- for (let plugin of activePlugins(p.value)) {
- mimeExtensions.push(plugin);
- }
- } else {
- console.error(p.reason);
- }
- });
-
- // Load all federated component styles and log errors for any that do not
- (await Promise.allSettled(federatedStylePromises))
- .filter(({ status }) => status === 'rejected')
- .forEach(({ reason }) => {
- console.error(reason);
- });
-
- // Set the list of base notebook multi-page plugins so the app is aware of all
- // its built-in plugins even if they are not loaded on the current page.
- // For example this is useful so the Settings Editor can list the debugger
- // plugin even if the debugger is only loaded on the notebook page.
- PageConfig.setOption('allPlugins', '{{{ json notebook_plugins }}}');
-
-
- const pluginRegistry = new PluginRegistry();
- const NotebookApp = require('@jupyter-notebook/application').NotebookApp;
-
- pluginRegistry.registerPlugins(mods);
- const IServiceManager = require('@jupyterlab/services').IServiceManager;
- const serviceManager = await pluginRegistry.resolveRequiredService(IServiceManager);
-
- const app = new NotebookApp({
- pluginRegistry,
- serviceManager,
- mimeExtensions,
- availablePlugins
- });
-
- // Expose global app instance when in dev mode or when toggled explicitly.
- const exposeAppInBrowser =
- (PageConfig.getOption('exposeAppInBrowser') || '').toLowerCase() === 'true';
-
- if (exposeAppInBrowser) {
- window.jupyterapp = app;
- }
-
- await app.start();
-}
-
-window.addEventListener('load', main);
diff --git a/app/.ipynb_checkpoints/rspack.config-checkpoint.js b/app/.ipynb_checkpoints/rspack.config-checkpoint.js
deleted file mode 100644
index d54f40f4c..000000000
--- a/app/.ipynb_checkpoints/rspack.config-checkpoint.js
+++ /dev/null
@@ -1,274 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-// Heavily inspired (and slightly tweaked) from:
-// https://github.com/jupyterlab/jupyterlab/blob/master/examples/federated/core_package/rspack.config.js
-
-const fs = require('fs-extra');
-const path = require('path');
-const rspack = require('@rspack/core');
-const merge = require('webpack-merge').default;
-const Handlebars = require('handlebars');
-const { ModuleFederationPlugin } = rspack.container;
-const BundleAnalyzerPlugin =
- require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
-
-const Build = require('@jupyterlab/builder').Build;
-const WPPlugin = require('@jupyterlab/builder').WPPlugin;
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const baseConfig = require('@jupyterlab/builder/lib/webpack.config.base');
-
-const data = require('./package.json');
-
-const names = Object.keys(data.dependencies).filter((name) => {
- const packageData = require(path.join(name, 'package.json'));
- return packageData.jupyterlab !== undefined;
-});
-
-// Ensure a clear build directory.
-const buildDir = path.resolve(__dirname, 'build');
-if (fs.existsSync(buildDir)) {
- fs.removeSync(buildDir);
-}
-fs.ensureDirSync(buildDir);
-
-// Handle the extensions.
-const { mimeExtensions, plugins } = data.jupyterlab;
-
-// Create the list of extension packages from the package.json metadata
-const extensionPackages = new Set();
-Object.keys(plugins).forEach((page) => {
- const pagePlugins = plugins[page];
- Object.keys(pagePlugins).forEach((name) => {
- extensionPackages.add(name);
- });
-});
-
-Handlebars.registerHelper('json', function (context) {
- return JSON.stringify(context);
-});
-
-// custom help to check if a page corresponds to a value
-Handlebars.registerHelper('ispage', function (key, page) {
- return key === page;
-});
-
-// custom helper to load the plugins on the index page
-Handlebars.registerHelper('list_plugins', function () {
- let str = '';
- const page = this;
- Object.keys(this).forEach((extension) => {
- const plugin = page[extension];
- if (plugin === true) {
- str += `require(\'${extension}\'),\n `;
- } else if (Array.isArray(plugin)) {
- const plugins = plugin.map((p) => `'${p}',`).join('\n');
- str += `
- require(\'${extension}\').default.filter(({id}) => [
- ${plugins}
- ].includes(id)),
- `;
- }
- });
- return str;
-});
-
-// Create the entry point and other assets in build directory.
-const source = fs.readFileSync('index.template.js').toString();
-const template = Handlebars.compile(source);
-const extData = {
- notebook_plugins: plugins,
- notebook_mime_extensions: mimeExtensions,
-};
-const indexOut = template(extData);
-fs.writeFileSync(path.join(buildDir, 'index.js'), indexOut);
-
-// Copy extra files
-const cssImports = path.resolve(__dirname, 'style.js');
-fs.copySync(cssImports, path.resolve(buildDir, 'extraStyle.js'));
-
-const extras = Build.ensureAssets({
- packageNames: names,
- output: buildDir,
- schemaOutput: path.resolve(__dirname, '..', 'notebook'),
-});
-
-/**
- * Create the rspack ``shared`` configuration
- */
-function createShared(packageData) {
- // Set up module federation sharing config
- const shared = {};
-
- // Make sure any resolutions are shared
- for (let [pkg, requiredVersion] of Object.entries(packageData.resolutions)) {
- shared[pkg] = { requiredVersion };
- }
-
- // Add any extension packages that are not in resolutions (i.e., installed from npm)
- for (let pkg of extensionPackages) {
- if (!shared[pkg]) {
- shared[pkg] = {
- requiredVersion: require(`${pkg}/package.json`).version,
- };
- }
- }
-
- // Add dependencies and sharedPackage config from extension packages if they
- // are not already in the shared config. This means that if there is a
- // conflict, the resolutions package version is the one that is shared.
- const extraShared = [];
- for (let pkg of extensionPackages) {
- let pkgShared = {};
- let {
- dependencies = {},
- jupyterlab: { sharedPackages = {} } = {},
- } = require(`${pkg}/package.json`);
- for (let [dep, requiredVersion] of Object.entries(dependencies)) {
- if (!shared[dep]) {
- pkgShared[dep] = { requiredVersion };
- }
- }
-
- // Overwrite automatic dependency sharing with custom sharing config
- for (let [dep, config] of Object.entries(sharedPackages)) {
- if (config === false) {
- delete pkgShared[dep];
- } else {
- if ('bundled' in config) {
- config.import = config.bundled;
- delete config.bundled;
- }
- pkgShared[dep] = config;
- }
- }
- extraShared.push(pkgShared);
- }
-
- // Now merge the extra shared config
- const mergedShare = {};
- for (let sharedConfig of extraShared) {
- for (let [pkg, config] of Object.entries(sharedConfig)) {
- // Do not override the basic share config from resolutions
- if (shared[pkg]) {
- continue;
- }
-
- // Add if we haven't seen the config before
- if (!mergedShare[pkg]) {
- mergedShare[pkg] = config;
- continue;
- }
-
- // Choose between the existing config and this new config. We do not try
- // to merge configs, which may yield a config no one wants
- let oldConfig = mergedShare[pkg];
-
- // if the old one has import: false, use the new one
- if (oldConfig.import === false) {
- mergedShare[pkg] = config;
- }
- }
- }
-
- Object.assign(shared, mergedShare);
-
- // Transform any file:// requiredVersion to the version number from the
- // imported package. This assumes (for simplicity) that the version we get
- // importing was installed from the file.
- for (let [pkg, { requiredVersion }] of Object.entries(shared)) {
- if (requiredVersion && requiredVersion.startsWith('file:')) {
- shared[pkg].requiredVersion = require(`${pkg}/package.json`).version;
- }
- }
-
- // Add singleton package information
- for (let pkg of packageData.jupyterlab.singletonPackages) {
- if (shared[pkg]) {
- shared[pkg].singleton = true;
- }
- }
-
- return shared;
-}
-
-// Make a bootstrap entrypoint
-const entryPoint = path.join(buildDir, 'bootstrap.js');
-const bootstrap = 'import("./index.js");';
-fs.writeFileSync(entryPoint, bootstrap);
-
-if (process.env.NODE_ENV === 'production') {
- baseConfig.mode = 'production';
-}
-
-if (process.argv.includes('--analyze')) {
- extras.push(new BundleAnalyzerPlugin());
-}
-
-const htmlPlugins = [];
-['consoles', 'edit', 'error', 'notebooks', 'terminals', 'tree'].forEach(
- (name) => {
- htmlPlugins.push(
- new HtmlWebpackPlugin({
- chunksSortMode: 'none',
- template: path.join(
- path.resolve('./templates'),
- `${name}_template.html`
- ),
- title: name,
- filename: path.join(
- path.resolve(__dirname, '..', 'notebook/templates'),
- `${name}.html`
- ),
- })
- );
- }
-);
-
-module.exports = [
- merge(baseConfig, {
- mode: 'development',
- entry: ['./publicpath.js', './' + path.relative(__dirname, entryPoint)],
- output: {
- path: path.resolve(__dirname, '..', 'notebook/static/'),
- publicPath: '{{page_config.fullStaticUrl}}/',
- library: {
- type: 'var',
- name: ['_JUPYTERLAB', 'CORE_OUTPUT'],
- },
- filename: '[name].[contenthash].js',
- },
- optimization: {
- splitChunks: {
- chunks: 'all',
- cacheGroups: {
- jlab_core: {
- test: /[\\/]node_modules[\\/]@(jupyterlab|jupyter-notebook|lumino(?!\/datagrid))[\\/]/,
- name: 'notebook_core',
- },
- },
- },
- },
- resolve: {
- fallback: { util: false },
- },
- plugins: [
- ...htmlPlugins,
- new WPPlugin.JSONLicenseWebpackPlugin({
- excludedPackageTest: (packageName) =>
- packageName === '@jupyter-notebook/app',
- }),
- new ModuleFederationPlugin({
- library: {
- type: 'var',
- name: ['_JUPYTERLAB', 'CORE_LIBRARY_FEDERATION'],
- },
- name: 'CORE_FEDERATION',
- shared: createShared(data),
- }),
- ],
- }),
-].concat(extras);
-
-const logPath = path.join(buildDir, 'build_log.json');
-fs.writeFileSync(logPath, JSON.stringify(module.exports, null, ' '));
diff --git a/app/index.template.js b/app/index.template.js
deleted file mode 100644
index e5d8a5b26..000000000
--- a/app/index.template.js
+++ /dev/null
@@ -1,244 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-// Inspired by: https://github.com/jupyterlab/jupyterlab/blob/master/dev_mode/index.js
-
-import { PageConfig, URLExt } from '@jupyterlab/coreutils';
-
-import { PluginRegistry } from '@lumino/coreutils';
-
-require('./style.js');
-require('./extraStyle.js');
-
-function loadScript(url) {
- return new Promise((resolve, reject) => {
- const newScript = document.createElement('script');
- newScript.onerror = reject;
- newScript.onload = resolve;
- newScript.async = true;
- document.head.appendChild(newScript);
- newScript.src = url;
- });
-}
-async function loadComponent(url, scope) {
- await loadScript(url);
-
- // From MIT-licensed https://github.com/module-federation/module-federation-examples/blob/af043acd6be1718ee195b2511adf6011fba4233c/advanced-api/dynamic-remotes/app1/src/App.js#L6-L12
- // eslint-disable-next-line no-undef
- await __webpack_init_sharing__('default');
- const container = window._JUPYTERLAB[scope];
- // Initialize the container, it may provide shared modules and may need ours
- // eslint-disable-next-line no-undef
- await container.init(__webpack_share_scopes__.default);
-}
-
-async function createModule(scope, module) {
- try {
- const factory = await window._JUPYTERLAB[scope].get(module);
- const instance = factory();
- instance.__scope__ = scope;
- return instance;
- } catch (e) {
- console.warn(
- `Failed to create module: package: ${scope}; module: ${module}`
- );
- throw e;
- }
-}
-
-/**
- * The main function
- */
-async function main() {
- const mimeExtensionsMods = [
- {{#each notebook_mime_extensions}}
- require('{{ @key }}'),
- {{/each}}
- ];
- const mimeExtensions = await Promise.all(mimeExtensionsMods);
-
- // Load the base plugins available on all pages
- let baseMods = [
- {{#each notebook_plugins}}
- {{#if (ispage @key '/')}}
- {{{ list_plugins }}}
- {{/if}}
- {{/each}}
- ];
-
- const page = `/${PageConfig.getOption('notebookPage')}`;
- switch (page) {
- {{#each notebook_plugins}}
- {{#unless (ispage @key '/')}}
- // list all the other plugins grouped by page
- case '{{ @key }}': {
- baseMods = baseMods.concat([
- {{{ list_plugins }}}
- ]);
- break;
- }
- {{/unless}}
- {{/each}}
- }
-
- // populate the list of disabled extensions
- const disabled = [];
- const availablePlugins = [];
-
- /**
- * Iterate over active plugins in an extension.
- *
- * #### Notes
- * This also populates the disabled
- */
- function* activePlugins(extension) {
- // Handle commonjs or es2015 modules
- let exports;
- if (Object.prototype.hasOwnProperty.call(extension, '__esModule')) {
- exports = extension.default;
- } else {
- // CommonJS exports.
- exports = extension;
- }
-
- let plugins = Array.isArray(exports) ? exports : [exports];
- for (let plugin of plugins) {
- const isDisabled = PageConfig.Extension.isDisabled(plugin.id);
- availablePlugins.push({
- id: plugin.id,
- description: plugin.description,
- requires: plugin.requires ?? [],
- optional: plugin.optional ?? [],
- provides: plugin.provides ?? null,
- autoStart: plugin.autoStart,
- enabled: !isDisabled,
- extension: extension.__scope__
- });
- if (isDisabled) {
- disabled.push(plugin.id);
- continue;
- }
- yield plugin;
- }
- }
-
- const extension_data = JSON.parse(
- PageConfig.getOption('federated_extensions')
- );
-
- const mods = [];
- const federatedExtensionPromises = [];
- const federatedMimeExtensionPromises = [];
- const federatedStylePromises = [];
-
- const extensions = await Promise.allSettled(
- extension_data.map(async data => {
- await loadComponent(
- `${URLExt.join(
- PageConfig.getOption('fullLabextensionsUrl'),
- data.name,
- data.load
- )}`,
- data.name
- );
- return data;
- })
- );
-
- extensions.forEach(p => {
- if (p.status === 'rejected') {
- // There was an error loading the component
- console.error(p.reason);
- return;
- }
-
- const data = p.value;
- if (data.extension) {
- federatedExtensionPromises.push(createModule(data.name, data.extension));
- }
- if (data.mimeExtension) {
- federatedMimeExtensionPromises.push(
- createModule(data.name, data.mimeExtension)
- );
- }
- if (data.style && !PageConfig.Extension.isDisabled(data.name)) {
- federatedStylePromises.push(createModule(data.name, data.style));
- }
- });
-
- // Add the base frontend extensions
- const baseFrontendMods = await Promise.all(baseMods);
- baseFrontendMods.forEach(p => {
- for (let plugin of activePlugins(p)) {
- mods.push(plugin);
- }
- });
-
- // Add the federated extensions.
- const federatedExtensions = await Promise.allSettled(
- federatedExtensionPromises
- );
- federatedExtensions.forEach(p => {
- if (p.status === 'fulfilled') {
- for (let plugin of activePlugins(p.value)) {
- mods.push(plugin);
- }
- } else {
- console.error(p.reason);
- }
- });
-
- // Add the federated mime extensions.
- const federatedMimeExtensions = await Promise.allSettled(
- federatedMimeExtensionPromises
- );
- federatedMimeExtensions.forEach(p => {
- if (p.status === 'fulfilled') {
- for (let plugin of activePlugins(p.value)) {
- mimeExtensions.push(plugin);
- }
- } else {
- console.error(p.reason);
- }
- });
-
- // Load all federated component styles and log errors for any that do not
- (await Promise.allSettled(federatedStylePromises))
- .filter(({ status }) => status === 'rejected')
- .forEach(({ reason }) => {
- console.error(reason);
- });
-
- // Set the list of base notebook multi-page plugins so the app is aware of all
- // its built-in plugins even if they are not loaded on the current page.
- // For example this is useful so the Settings Editor can list the debugger
- // plugin even if the debugger is only loaded on the notebook page.
- PageConfig.setOption('allPlugins', '{{{ json notebook_plugins }}}');
-
-
- const pluginRegistry = new PluginRegistry();
- const NotebookApp = require('@jupyter-notebook/application').NotebookApp;
-
- pluginRegistry.registerPlugins(mods);
- const IServiceManager = require('@jupyterlab/services').IServiceManager;
- const serviceManager = await pluginRegistry.resolveRequiredService(IServiceManager);
-
- const app = new NotebookApp({
- pluginRegistry,
- serviceManager,
- mimeExtensions,
- availablePlugins
- });
-
- // Expose global app instance when in dev mode or when toggled explicitly.
- const exposeAppInBrowser =
- (PageConfig.getOption('exposeAppInBrowser') || '').toLowerCase() === 'true';
-
- if (exposeAppInBrowser) {
- window.jupyterapp = app;
- }
-
- await app.start();
-}
-
-window.addEventListener('load', main);
diff --git a/app/package.json b/app/package.json
deleted file mode 100644
index 1f2d872e6..000000000
--- a/app/package.json
+++ /dev/null
@@ -1,443 +0,0 @@
-{
- "name": "@jupyter-notebook/app",
- "version": "7.6.0-alpha.0",
- "private": true,
- "scripts": {
- "build": "rspack",
- "build:prod": "rspack --config ./rspack.prod.config.js",
- "clean": "rimraf build && jlpm run clean:static",
- "clean:static": "rimraf -g \"../notebook/static/!(favicons)\"",
- "watch": "rspack --watch --config rspack.config.js"
- },
- "resolutions": {
- "@codemirror/state": "~6.5.2",
- "@codemirror/view": "~6.38.1",
- "@jupyter-notebook/application": "~7.6.0-alpha.0",
- "@jupyter-notebook/application-extension": "~7.6.0-alpha.0",
- "@jupyter-notebook/console-extension": "~7.6.0-alpha.0",
- "@jupyter-notebook/docmanager-extension": "~7.6.0-alpha.0",
- "@jupyter-notebook/documentsearch-extension": "~7.6.0-alpha.0",
- "@jupyter-notebook/help-extension": "~7.6.0-alpha.0",
- "@jupyter-notebook/notebook-extension": "~7.6.0-alpha.0",
- "@jupyter-notebook/terminal-extension": "~7.6.0-alpha.0",
- "@jupyter-notebook/tree": "~7.6.0-alpha.0",
- "@jupyter-notebook/tree-extension": "~7.6.0-alpha.0",
- "@jupyter-notebook/ui-components": "~7.6.0-alpha.0",
- "@jupyter/react-components": "~0.16.7",
- "@jupyter/web-components": "~0.16.7",
- "@jupyter/ydoc": "~3.1.0",
- "@jupyterlab/application": "~4.6.0-alpha.0",
- "@jupyterlab/application-extension": "~4.6.0-alpha.0",
- "@jupyterlab/apputils": "~4.7.0-alpha.0",
- "@jupyterlab/apputils-extension": "~4.6.0-alpha.0",
- "@jupyterlab/attachments": "~4.6.0-alpha.0",
- "@jupyterlab/audio-extension": "~4.6.0-alpha.0",
- "@jupyterlab/cell-toolbar": "~4.6.0-alpha.0",
- "@jupyterlab/cell-toolbar-extension": "~4.6.0-alpha.0",
- "@jupyterlab/celltags-extension": "~4.6.0-alpha.0",
- "@jupyterlab/codeeditor": "~4.6.0-alpha.0",
- "@jupyterlab/codemirror": "~4.6.0-alpha.0",
- "@jupyterlab/codemirror-extension": "~4.6.0-alpha.0",
- "@jupyterlab/completer": "~4.6.0-alpha.0",
- "@jupyterlab/completer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/console": "~4.6.0-alpha.0",
- "@jupyterlab/console-extension": "~4.6.0-alpha.0",
- "@jupyterlab/coreutils": "~6.6.0-alpha.0",
- "@jupyterlab/csvviewer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/debugger": "~4.6.0-alpha.0",
- "@jupyterlab/debugger-extension": "~4.6.0-alpha.0",
- "@jupyterlab/docmanager": "~4.6.0-alpha.0",
- "@jupyterlab/docmanager-extension": "~4.6.0-alpha.0",
- "@jupyterlab/documentsearch": "~4.6.0-alpha.0",
- "@jupyterlab/documentsearch-extension": "~4.6.0-alpha.0",
- "@jupyterlab/extensionmanager": "~4.6.0-alpha.0",
- "@jupyterlab/extensionmanager-extension": "~4.6.0-alpha.0",
- "@jupyterlab/filebrowser": "~4.6.0-alpha.0",
- "@jupyterlab/filebrowser-extension": "~4.6.0-alpha.0",
- "@jupyterlab/fileeditor": "~4.6.0-alpha.0",
- "@jupyterlab/fileeditor-extension": "~4.6.0-alpha.0",
- "@jupyterlab/help-extension": "~4.6.0-alpha.0",
- "@jupyterlab/htmlviewer": "~4.6.0-alpha.0",
- "@jupyterlab/htmlviewer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/hub-extension": "~4.6.0-alpha.0",
- "@jupyterlab/imageviewer": "~4.6.0-alpha.0",
- "@jupyterlab/imageviewer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/javascript-extension": "~4.6.0-alpha.0",
- "@jupyterlab/json-extension": "~4.6.0-alpha.0",
- "@jupyterlab/logconsole-extension": "~4.6.0-alpha.0",
- "@jupyterlab/lsp": "~4.6.0-alpha.0",
- "@jupyterlab/lsp-extension": "~4.6.0-alpha.0",
- "@jupyterlab/mainmenu": "~4.6.0-alpha.0",
- "@jupyterlab/mainmenu-extension": "~4.6.0-alpha.0",
- "@jupyterlab/markdownviewer": "~4.6.0-alpha.0",
- "@jupyterlab/markdownviewer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/markedparser-extension": "~4.6.0-alpha.0",
- "@jupyterlab/mathjax-extension": "~4.6.0-alpha.0",
- "@jupyterlab/mermaid": "~4.6.0-alpha.0",
- "@jupyterlab/mermaid-extension": "~4.6.0-alpha.0",
- "@jupyterlab/metadataform": "~4.6.0-alpha.0",
- "@jupyterlab/metadataform-extension": "~4.6.0-alpha.0",
- "@jupyterlab/notebook": "~4.6.0-alpha.0",
- "@jupyterlab/notebook-extension": "~4.6.0-alpha.0",
- "@jupyterlab/observables": "~5.6.0-alpha.0",
- "@jupyterlab/outputarea": "~4.6.0-alpha.0",
- "@jupyterlab/pdf-extension": "~4.6.0-alpha.0",
- "@jupyterlab/pluginmanager-extension": "~4.6.0-alpha.0",
- "@jupyterlab/rendermime": "~4.6.0-alpha.0",
- "@jupyterlab/rendermime-interfaces": "~3.14.0-alpha.0",
- "@jupyterlab/running-extension": "~4.6.0-alpha.0",
- "@jupyterlab/services": "~7.6.0-alpha.0",
- "@jupyterlab/services-extension": "~4.6.0-alpha.0",
- "@jupyterlab/settingeditor": "~4.6.0-alpha.0",
- "@jupyterlab/settingeditor-extension": "~4.6.0-alpha.0",
- "@jupyterlab/settingregistry": "~4.6.0-alpha.0",
- "@jupyterlab/shortcuts-extension": "~5.4.0-alpha.0",
- "@jupyterlab/statedb": "~4.6.0-alpha.0",
- "@jupyterlab/statusbar": "~4.6.0-alpha.0",
- "@jupyterlab/terminal": "~4.6.0-alpha.0",
- "@jupyterlab/terminal-extension": "~4.6.0-alpha.0",
- "@jupyterlab/theme-dark-extension": "~4.6.0-alpha.0",
- "@jupyterlab/theme-dark-high-contrast-extension": "~4.6.0-alpha.0",
- "@jupyterlab/theme-light-extension": "~4.6.0-alpha.0",
- "@jupyterlab/toc-extension": "~6.6.0-alpha.0",
- "@jupyterlab/tooltip": "~4.6.0-alpha.0",
- "@jupyterlab/tooltip-extension": "~4.6.0-alpha.0",
- "@jupyterlab/translation": "~4.6.0-alpha.0",
- "@jupyterlab/translation-extension": "~4.6.0-alpha.0",
- "@jupyterlab/ui-components": "~4.6.0-alpha.0",
- "@jupyterlab/ui-components-extension": "~4.6.0-alpha.0",
- "@jupyterlab/vega5-extension": "~4.6.0-alpha.0",
- "@jupyterlab/video-extension": "~4.6.0-alpha.0",
- "@lezer/common": "~1.2.1",
- "@lezer/highlight": "~1.2.0",
- "@lumino/algorithm": "~2.0.4",
- "@lumino/application": "~2.4.5",
- "@lumino/commands": "~2.3.3",
- "@lumino/coreutils": "~2.2.2",
- "@lumino/disposable": "~2.1.5",
- "@lumino/domutils": "~2.0.4",
- "@lumino/dragdrop": "~2.1.7",
- "@lumino/messaging": "~2.0.4",
- "@lumino/properties": "~2.0.4",
- "@lumino/signaling": "~2.1.5",
- "@lumino/virtualdom": "~2.0.4",
- "@lumino/widgets": "~2.7.2",
- "react": "~18.2.0",
- "react-dom": "~18.2.0",
- "yjs": "~13.6.8"
- },
- "dependencies": {
- "@jupyter-notebook/application": "^7.6.0-alpha.0",
- "@jupyter-notebook/application-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/console-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/docmanager-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/documentsearch-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/help-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/notebook-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/terminal-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/tree": "^7.6.0-alpha.0",
- "@jupyter-notebook/tree-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/ui-components": "^7.6.0-alpha.0",
- "@jupyterlab/application-extension": "~4.6.0-alpha.0",
- "@jupyterlab/apputils-extension": "~4.6.0-alpha.0",
- "@jupyterlab/attachments": "~4.6.0-alpha.0",
- "@jupyterlab/audio-extension": "~4.6.0-alpha.0",
- "@jupyterlab/cell-toolbar-extension": "~4.6.0-alpha.0",
- "@jupyterlab/celltags-extension": "~4.6.0-alpha.0",
- "@jupyterlab/codemirror": "~4.6.0-alpha.0",
- "@jupyterlab/codemirror-extension": "~4.6.0-alpha.0",
- "@jupyterlab/completer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/console-extension": "~4.6.0-alpha.0",
- "@jupyterlab/coreutils": "~6.6.0-alpha.0",
- "@jupyterlab/csvviewer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/debugger-extension": "~4.6.0-alpha.0",
- "@jupyterlab/docmanager-extension": "~4.6.0-alpha.0",
- "@jupyterlab/documentsearch-extension": "~4.6.0-alpha.0",
- "@jupyterlab/extensionmanager-extension": "~4.6.0-alpha.0",
- "@jupyterlab/filebrowser-extension": "~4.6.0-alpha.0",
- "@jupyterlab/fileeditor-extension": "~4.6.0-alpha.0",
- "@jupyterlab/help-extension": "~4.6.0-alpha.0",
- "@jupyterlab/htmlviewer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/hub-extension": "~4.6.0-alpha.0",
- "@jupyterlab/imageviewer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/javascript-extension": "~4.6.0-alpha.0",
- "@jupyterlab/json-extension": "~4.6.0-alpha.0",
- "@jupyterlab/logconsole-extension": "~4.6.0-alpha.0",
- "@jupyterlab/lsp": "~4.6.0-alpha.0",
- "@jupyterlab/lsp-extension": "~4.6.0-alpha.0",
- "@jupyterlab/mainmenu-extension": "~4.6.0-alpha.0",
- "@jupyterlab/markdownviewer-extension": "~4.6.0-alpha.0",
- "@jupyterlab/markedparser-extension": "~4.6.0-alpha.0",
- "@jupyterlab/mathjax-extension": "~4.6.0-alpha.0",
- "@jupyterlab/mermaid-extension": "~4.6.0-alpha.0",
- "@jupyterlab/metadataform-extension": "~4.6.0-alpha.0",
- "@jupyterlab/notebook-extension": "~4.6.0-alpha.0",
- "@jupyterlab/pdf-extension": "~4.6.0-alpha.0",
- "@jupyterlab/pluginmanager-extension": "~4.6.0-alpha.0",
- "@jupyterlab/running-extension": "~4.6.0-alpha.0",
- "@jupyterlab/services-extension": "~4.6.0-alpha.0",
- "@jupyterlab/settingeditor": "~4.6.0-alpha.0",
- "@jupyterlab/settingeditor-extension": "~4.6.0-alpha.0",
- "@jupyterlab/shortcuts-extension": "~5.4.0-alpha.0",
- "@jupyterlab/terminal-extension": "~4.6.0-alpha.0",
- "@jupyterlab/theme-dark-extension": "~4.6.0-alpha.0",
- "@jupyterlab/theme-dark-high-contrast-extension": "~4.6.0-alpha.0",
- "@jupyterlab/theme-light-extension": "~4.6.0-alpha.0",
- "@jupyterlab/toc-extension": "~6.6.0-alpha.0",
- "@jupyterlab/tooltip-extension": "~4.6.0-alpha.0",
- "@jupyterlab/translation-extension": "~4.6.0-alpha.0",
- "@jupyterlab/ui-components-extension": "~4.6.0-alpha.0",
- "@jupyterlab/vega5-extension": "~4.6.0-alpha.0",
- "@jupyterlab/video-extension": "~4.6.0-alpha.0",
- "@lumino/coreutils": "~2.2.2",
- "react": "^18.2.0",
- "react-dom": "^18.2.0",
- "yjs": "^13.5.40"
- },
- "devDependencies": {
- "@jupyterlab/builder": "~4.6.0-alpha.0",
- "@jupyterlab/buildutils": "~4.6.0-alpha.0",
- "@rspack/cli": "^1.1.8",
- "@rspack/core": "^1.1.8",
- "@types/rimraf": "^3.0.2",
- "fs-extra": "^8.1.0",
- "glob": "~7.1.6",
- "handlebars": "^4.7.7",
- "rimraf": "^3.0.2",
- "webpack-bundle-analyzer": "^4.8.0",
- "webpack-merge": "^5.8.0",
- "whatwg-fetch": "^3.0.0"
- },
- "jupyterlab": {
- "name": "Jupyter Notebook",
- "mimeExtensions": {
- "@jupyterlab/javascript-extension": true,
- "@jupyterlab/json-extension": true,
- "@jupyterlab/pdf-extension": true,
- "@jupyterlab/vega5-extension": true
- },
- "plugins": {
- "/": {
- "@jupyter-notebook/application-extension": true,
- "@jupyter-notebook/console-extension": true,
- "@jupyter-notebook/docmanager-extension": true,
- "@jupyter-notebook/documentsearch-extension": true,
- "@jupyter-notebook/help-extension": true,
- "@jupyter-notebook/notebook-extension": true,
- "@jupyter-notebook/terminal-extension": true,
- "@jupyterlab/application-extension": [
- "@jupyterlab/application-extension:commands",
- "@jupyterlab/application-extension:context-menu",
- "@jupyterlab/application-extension:faviconbusy",
- "@jupyterlab/application-extension:router",
- "@jupyterlab/application-extension:top-bar",
- "@jupyterlab/application-extension:top-spacer"
- ],
- "@jupyterlab/apputils-extension": [
- "@jupyterlab/apputils-extension:kernels-settings",
- "@jupyterlab/apputils-extension:palette",
- "@jupyterlab/apputils-extension:notification",
- "@jupyterlab/apputils-extension:sanitizer",
- "@jupyterlab/apputils-extension:sessionDialogs",
- "@jupyterlab/apputils-extension:settings",
- "@jupyterlab/apputils-extension:state",
- "@jupyterlab/apputils-extension:themes",
- "@jupyterlab/apputils-extension:themes-palette-menu",
- "@jupyterlab/apputils-extension:toolbar-registry",
- "@jupyterlab/apputils-extension:utilityCommands"
- ],
- "@jupyterlab/audio-extension": true,
- "@jupyterlab/codemirror-extension": true,
- "@jupyterlab/completer-extension": [
- "@jupyterlab/completer-extension:base-service",
- "@jupyterlab/completer-extension:inline-completer",
- "@jupyterlab/completer-extension:inline-completer-factory",
- "@jupyterlab/completer-extension:inline-history",
- "@jupyterlab/completer-extension:manager"
- ],
- "@jupyterlab/console-extension": [
- "@jupyterlab/console-extension:cell-executor",
- "@jupyterlab/console-extension:completer",
- "@jupyterlab/console-extension:factory",
- "@jupyterlab/console-extension:foreign",
- "@jupyterlab/console-extension:tracker"
- ],
- "@jupyterlab/csvviewer-extension": true,
- "@jupyterlab/docmanager-extension": [
- "@jupyterlab/docmanager-extension:plugin",
- "@jupyterlab/docmanager-extension:download",
- "@jupyterlab/docmanager-extension:contexts",
- "@jupyterlab/docmanager-extension:manager"
- ],
- "@jupyterlab/documentsearch-extension": [
- "@jupyterlab/documentsearch-extension:plugin"
- ],
- "@jupyterlab/filebrowser-extension": [
- "@jupyterlab/filebrowser-extension:factory",
- "@jupyterlab/filebrowser-extension:default-file-browser"
- ],
- "@jupyterlab/fileeditor-extension": [
- "@jupyterlab/fileeditor-extension:plugin",
- "@jupyterlab/fileeditor-extension:widget-factory"
- ],
- "@jupyterlab/help-extension": [
- "@jupyterlab/help-extension:resources"
- ],
- "@jupyterlab/htmlviewer-extension": true,
- "@jupyterlab/hub-extension": true,
- "@jupyterlab/imageviewer-extension": true,
- "@jupyterlab/lsp-extension": true,
- "@jupyterlab/mainmenu-extension": [
- "@jupyterlab/mainmenu-extension:plugin"
- ],
- "@jupyterlab/markedparser-extension": true,
- "@jupyterlab/mathjax-extension": true,
- "@jupyterlab/mermaid-extension": true,
- "@jupyterlab/notebook-extension": [
- "@jupyterlab/notebook-extension:cell-executor",
- "@jupyterlab/notebook-extension:code-console",
- "@jupyterlab/notebook-extension:export",
- "@jupyterlab/notebook-extension:factory",
- "@jupyterlab/notebook-extension:tracker",
- "@jupyterlab/notebook-extension:widget-factory"
- ],
- "@jupyterlab/pluginmanager-extension": true,
- "@jupyterlab/services-extension": true,
- "@jupyterlab/shortcuts-extension": true,
- "@jupyterlab/terminal-extension": true,
- "@jupyterlab/theme-light-extension": true,
- "@jupyterlab/theme-dark-extension": true,
- "@jupyterlab/theme-dark-high-contrast-extension": true,
- "@jupyterlab/translation-extension": true,
- "@jupyterlab/ui-components-extension": true,
- "@jupyterlab/video-extension": true
- },
- "/tree": {
- "@jupyterlab/cell-toolbar-extension": true,
- "@jupyterlab/extensionmanager-extension": true,
- "@jupyterlab/filebrowser-extension": [
- "@jupyterlab/filebrowser-extension:browser",
- "@jupyterlab/filebrowser-extension:create-new-language-file",
- "@jupyterlab/filebrowser-extension:download",
- "@jupyterlab/filebrowser-extension:file-upload-status",
- "@jupyterlab/filebrowser-extension:open-with",
- "@jupyterlab/filebrowser-extension:search",
- "@jupyterlab/filebrowser-extension:share-file"
- ],
- "@jupyter-notebook/tree-extension": true,
- "@jupyterlab/running-extension": [
- "@jupyterlab/running-extension:plugin"
- ],
- "@jupyterlab/settingeditor-extension": true
- },
- "/notebooks": {
- "@jupyterlab/celltags-extension": true,
- "@jupyterlab/cell-toolbar-extension": true,
- "@jupyterlab/debugger-extension": [
- "@jupyterlab/debugger-extension:completions",
- "@jupyterlab/debugger-extension:config",
- "@jupyterlab/debugger-extension:debug-console",
- "@jupyterlab/debugger-extension:main",
- "@jupyterlab/debugger-extension:notebooks",
- "@jupyterlab/debugger-extension:service",
- "@jupyterlab/debugger-extension:sidebar",
- "@jupyterlab/debugger-extension:sources",
- "@jupyterlab/debugger-extension:display-registry"
- ],
- "@jupyterlab/logconsole-extension": true,
- "@jupyterlab/metadataform-extension": true,
- "@jupyterlab/notebook-extension": [
- "@jupyterlab/notebook-extension:active-cell-tool",
- "@jupyterlab/notebook-extension:completer",
- "@jupyterlab/notebook-extension:copy-output",
- "@jupyterlab/notebook-extension:metadata-editor",
- "@jupyterlab/notebook-extension:search",
- "@jupyterlab/notebook-extension:toc",
- "@jupyterlab/notebook-extension:tools",
- "@jupyterlab/notebook-extension:update-raw-mimetype"
- ],
- "@jupyterlab/toc-extension": [
- "@jupyterlab/toc-extension:registry",
- "@jupyterlab/toc-extension:tracker"
- ],
- "@jupyterlab/tooltip-extension": [
- "@jupyterlab/tooltip-extension:manager",
- "@jupyterlab/tooltip-extension:notebooks"
- ]
- },
- "/consoles": {
- "@jupyterlab/tooltip-extension": [
- "@jupyterlab/tooltip-extension:manager",
- "@jupyterlab/tooltip-extension:consoles"
- ]
- },
- "/edit": {
- "@jupyterlab/fileeditor-extension": [
- "@jupyterlab/fileeditor-extension:completer",
- "@jupyterlab/fileeditor-extension:search"
- ],
- "@jupyterlab/markdownviewer-extension": true
- }
- },
- "singletonPackages": [
- "@codemirror/state",
- "@codemirror/view",
- "@jupyter-notebook/tree",
- "@jupyter/react-components",
- "@jupyter/web-components",
- "@jupyter/ydoc",
- "@jupyterlab/application",
- "@jupyterlab/apputils",
- "@jupyterlab/cell-toolbar",
- "@jupyterlab/codeeditor",
- "@jupyterlab/codemirror",
- "@jupyterlab/completer",
- "@jupyterlab/console",
- "@jupyterlab/coreutils",
- "@jupyterlab/debugger",
- "@jupyterlab/docmanager",
- "@jupyterlab/documentsearch",
- "@jupyterlab/extensionmanager",
- "@jupyterlab/filebrowser",
- "@jupyterlab/fileeditor",
- "@jupyterlab/htmlviewer",
- "@jupyterlab/imageviewer",
- "@jupyterlab/lsp",
- "@jupyterlab/mainmenu",
- "@jupyterlab/markdownviewer",
- "@jupyterlab/mermaid",
- "@jupyterlab/metadataform",
- "@jupyterlab/notebook",
- "@jupyterlab/observables",
- "@jupyterlab/outputarea",
- "@jupyterlab/rendermime",
- "@jupyterlab/rendermime-interfaces",
- "@jupyterlab/services",
- "@jupyterlab/settingeditor",
- "@jupyterlab/settingregistry",
- "@jupyterlab/statedb",
- "@jupyterlab/statusbar",
- "@jupyterlab/terminal",
- "@jupyterlab/tooltip",
- "@jupyterlab/translation",
- "@jupyterlab/ui-components",
- "@lezer/common",
- "@lezer/highlight",
- "@lumino/algorithm",
- "@lumino/application",
- "@lumino/commands",
- "@lumino/coreutils",
- "@lumino/disposable",
- "@lumino/domutils",
- "@lumino/dragdrop",
- "@lumino/messaging",
- "@lumino/properties",
- "@lumino/signaling",
- "@lumino/virtualdom",
- "@lumino/widgets",
- "react",
- "react-dom",
- "yjs"
- ]
- }
-}
diff --git a/app/publicpath.js b/app/publicpath.js
deleted file mode 100644
index 751281fe5..000000000
--- a/app/publicpath.js
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-// We dynamically set the webpack public path based on the page config
-// settings from the JupyterLab app. We copy some of the pageconfig parsing
-// logic in @jupyterlab/coreutils below, since this must run before any other
-// files are loaded (including @jupyterlab/coreutils).
-
-/**
- * Get global configuration data for the Jupyter application.
- *
- * @param name - The name of the configuration option.
- *
- * @returns The config value or an empty string if not found.
- *
- * #### Notes
- * All values are treated as strings.
- * For browser based applications, it is assumed that the page HTML
- * includes a script tag with the id `jupyter-config-data` containing the
- * configuration as valid JSON. In order to support the classic Notebook,
- * we fall back on checking for `body` data of the given `name`.
- */
-function getOption(name) {
- let configData = Object.create(null);
- // Use script tag if available.
- if (typeof document !== 'undefined' && document) {
- const el = document.getElementById('jupyter-config-data');
-
- if (el) {
- configData = JSON.parse(el.textContent || '{}');
- }
- }
- return configData[name] || '';
-}
-
-// eslint-disable-next-line no-undef
-__webpack_public_path__ = getOption('fullStaticUrl') + '/';
diff --git a/app/rspack.config.js b/app/rspack.config.js
deleted file mode 100644
index d54f40f4c..000000000
--- a/app/rspack.config.js
+++ /dev/null
@@ -1,274 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-// Heavily inspired (and slightly tweaked) from:
-// https://github.com/jupyterlab/jupyterlab/blob/master/examples/federated/core_package/rspack.config.js
-
-const fs = require('fs-extra');
-const path = require('path');
-const rspack = require('@rspack/core');
-const merge = require('webpack-merge').default;
-const Handlebars = require('handlebars');
-const { ModuleFederationPlugin } = rspack.container;
-const BundleAnalyzerPlugin =
- require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
-
-const Build = require('@jupyterlab/builder').Build;
-const WPPlugin = require('@jupyterlab/builder').WPPlugin;
-const HtmlWebpackPlugin = require('html-webpack-plugin');
-const baseConfig = require('@jupyterlab/builder/lib/webpack.config.base');
-
-const data = require('./package.json');
-
-const names = Object.keys(data.dependencies).filter((name) => {
- const packageData = require(path.join(name, 'package.json'));
- return packageData.jupyterlab !== undefined;
-});
-
-// Ensure a clear build directory.
-const buildDir = path.resolve(__dirname, 'build');
-if (fs.existsSync(buildDir)) {
- fs.removeSync(buildDir);
-}
-fs.ensureDirSync(buildDir);
-
-// Handle the extensions.
-const { mimeExtensions, plugins } = data.jupyterlab;
-
-// Create the list of extension packages from the package.json metadata
-const extensionPackages = new Set();
-Object.keys(plugins).forEach((page) => {
- const pagePlugins = plugins[page];
- Object.keys(pagePlugins).forEach((name) => {
- extensionPackages.add(name);
- });
-});
-
-Handlebars.registerHelper('json', function (context) {
- return JSON.stringify(context);
-});
-
-// custom help to check if a page corresponds to a value
-Handlebars.registerHelper('ispage', function (key, page) {
- return key === page;
-});
-
-// custom helper to load the plugins on the index page
-Handlebars.registerHelper('list_plugins', function () {
- let str = '';
- const page = this;
- Object.keys(this).forEach((extension) => {
- const plugin = page[extension];
- if (plugin === true) {
- str += `require(\'${extension}\'),\n `;
- } else if (Array.isArray(plugin)) {
- const plugins = plugin.map((p) => `'${p}',`).join('\n');
- str += `
- require(\'${extension}\').default.filter(({id}) => [
- ${plugins}
- ].includes(id)),
- `;
- }
- });
- return str;
-});
-
-// Create the entry point and other assets in build directory.
-const source = fs.readFileSync('index.template.js').toString();
-const template = Handlebars.compile(source);
-const extData = {
- notebook_plugins: plugins,
- notebook_mime_extensions: mimeExtensions,
-};
-const indexOut = template(extData);
-fs.writeFileSync(path.join(buildDir, 'index.js'), indexOut);
-
-// Copy extra files
-const cssImports = path.resolve(__dirname, 'style.js');
-fs.copySync(cssImports, path.resolve(buildDir, 'extraStyle.js'));
-
-const extras = Build.ensureAssets({
- packageNames: names,
- output: buildDir,
- schemaOutput: path.resolve(__dirname, '..', 'notebook'),
-});
-
-/**
- * Create the rspack ``shared`` configuration
- */
-function createShared(packageData) {
- // Set up module federation sharing config
- const shared = {};
-
- // Make sure any resolutions are shared
- for (let [pkg, requiredVersion] of Object.entries(packageData.resolutions)) {
- shared[pkg] = { requiredVersion };
- }
-
- // Add any extension packages that are not in resolutions (i.e., installed from npm)
- for (let pkg of extensionPackages) {
- if (!shared[pkg]) {
- shared[pkg] = {
- requiredVersion: require(`${pkg}/package.json`).version,
- };
- }
- }
-
- // Add dependencies and sharedPackage config from extension packages if they
- // are not already in the shared config. This means that if there is a
- // conflict, the resolutions package version is the one that is shared.
- const extraShared = [];
- for (let pkg of extensionPackages) {
- let pkgShared = {};
- let {
- dependencies = {},
- jupyterlab: { sharedPackages = {} } = {},
- } = require(`${pkg}/package.json`);
- for (let [dep, requiredVersion] of Object.entries(dependencies)) {
- if (!shared[dep]) {
- pkgShared[dep] = { requiredVersion };
- }
- }
-
- // Overwrite automatic dependency sharing with custom sharing config
- for (let [dep, config] of Object.entries(sharedPackages)) {
- if (config === false) {
- delete pkgShared[dep];
- } else {
- if ('bundled' in config) {
- config.import = config.bundled;
- delete config.bundled;
- }
- pkgShared[dep] = config;
- }
- }
- extraShared.push(pkgShared);
- }
-
- // Now merge the extra shared config
- const mergedShare = {};
- for (let sharedConfig of extraShared) {
- for (let [pkg, config] of Object.entries(sharedConfig)) {
- // Do not override the basic share config from resolutions
- if (shared[pkg]) {
- continue;
- }
-
- // Add if we haven't seen the config before
- if (!mergedShare[pkg]) {
- mergedShare[pkg] = config;
- continue;
- }
-
- // Choose between the existing config and this new config. We do not try
- // to merge configs, which may yield a config no one wants
- let oldConfig = mergedShare[pkg];
-
- // if the old one has import: false, use the new one
- if (oldConfig.import === false) {
- mergedShare[pkg] = config;
- }
- }
- }
-
- Object.assign(shared, mergedShare);
-
- // Transform any file:// requiredVersion to the version number from the
- // imported package. This assumes (for simplicity) that the version we get
- // importing was installed from the file.
- for (let [pkg, { requiredVersion }] of Object.entries(shared)) {
- if (requiredVersion && requiredVersion.startsWith('file:')) {
- shared[pkg].requiredVersion = require(`${pkg}/package.json`).version;
- }
- }
-
- // Add singleton package information
- for (let pkg of packageData.jupyterlab.singletonPackages) {
- if (shared[pkg]) {
- shared[pkg].singleton = true;
- }
- }
-
- return shared;
-}
-
-// Make a bootstrap entrypoint
-const entryPoint = path.join(buildDir, 'bootstrap.js');
-const bootstrap = 'import("./index.js");';
-fs.writeFileSync(entryPoint, bootstrap);
-
-if (process.env.NODE_ENV === 'production') {
- baseConfig.mode = 'production';
-}
-
-if (process.argv.includes('--analyze')) {
- extras.push(new BundleAnalyzerPlugin());
-}
-
-const htmlPlugins = [];
-['consoles', 'edit', 'error', 'notebooks', 'terminals', 'tree'].forEach(
- (name) => {
- htmlPlugins.push(
- new HtmlWebpackPlugin({
- chunksSortMode: 'none',
- template: path.join(
- path.resolve('./templates'),
- `${name}_template.html`
- ),
- title: name,
- filename: path.join(
- path.resolve(__dirname, '..', 'notebook/templates'),
- `${name}.html`
- ),
- })
- );
- }
-);
-
-module.exports = [
- merge(baseConfig, {
- mode: 'development',
- entry: ['./publicpath.js', './' + path.relative(__dirname, entryPoint)],
- output: {
- path: path.resolve(__dirname, '..', 'notebook/static/'),
- publicPath: '{{page_config.fullStaticUrl}}/',
- library: {
- type: 'var',
- name: ['_JUPYTERLAB', 'CORE_OUTPUT'],
- },
- filename: '[name].[contenthash].js',
- },
- optimization: {
- splitChunks: {
- chunks: 'all',
- cacheGroups: {
- jlab_core: {
- test: /[\\/]node_modules[\\/]@(jupyterlab|jupyter-notebook|lumino(?!\/datagrid))[\\/]/,
- name: 'notebook_core',
- },
- },
- },
- },
- resolve: {
- fallback: { util: false },
- },
- plugins: [
- ...htmlPlugins,
- new WPPlugin.JSONLicenseWebpackPlugin({
- excludedPackageTest: (packageName) =>
- packageName === '@jupyter-notebook/app',
- }),
- new ModuleFederationPlugin({
- library: {
- type: 'var',
- name: ['_JUPYTERLAB', 'CORE_LIBRARY_FEDERATION'],
- },
- name: 'CORE_FEDERATION',
- shared: createShared(data),
- }),
- ],
- }),
-].concat(extras);
-
-const logPath = path.join(buildDir, 'build_log.json');
-fs.writeFileSync(logPath, JSON.stringify(module.exports, null, ' '));
diff --git a/app/rspack.config.watch.js b/app/rspack.config.watch.js
deleted file mode 100644
index e73002751..000000000
--- a/app/rspack.config.watch.js
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * Copyright (c) Jupyter Development Team.
- * Distributed under the terms of the Modified BSD License.
- */
-
-const base = require('./rspack.config');
-
-module.exports = [
- {
- ...base[0],
- bail: false,
- watch: true,
- },
- ...base.slice(1),
-];
diff --git a/app/rspack.prod.config.js b/app/rspack.prod.config.js
deleted file mode 100644
index a010b88b1..000000000
--- a/app/rspack.prod.config.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) Jupyter Development Team.
- * Distributed under the terms of the Modified BSD License.
- */
-
-const merge = require('webpack-merge').default;
-const config = require('./rspack.config');
-const WPPlugin = require('@jupyterlab/builder').WPPlugin;
-
-config[0] = merge(config[0], {
- mode: 'production',
- devtool: 'source-map',
- output: {
- // Add version argument when in production so the Jupyter server
- // allows caching of files (i.e., does not set the CacheControl header to no-cache to prevent caching static files)
- filename: '[name].[contenthash].js?v=[contenthash]',
- },
- optimization: {
- minimize: false,
- },
- plugins: [
- new WPPlugin.JSONLicenseWebpackPlugin({
- excludedPackageTest: (packageName) =>
- packageName === '@jupyter-notebook/app',
- }),
- ],
-});
-
-module.exports = config;
diff --git a/app/style.js b/app/style.js
deleted file mode 100644
index e69de29bb..000000000
diff --git a/app/templates/consoles_template.html b/app/templates/consoles_template.html
deleted file mode 100644
index c4172e693..000000000
--- a/app/templates/consoles_template.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
- {{page_config['appName'] | e}} - Console
- {% block favicon %}
-
- {% endblock %} {% if custom_css %}
-
- {% endif %}
-
-
- {# Copy so we do not modify the page_config with updates. #} {% set
- page_config_full = page_config.copy() %} {# Set a dummy variable - we just
- want the side effect of the update. #} {% set _ =
- page_config_full.update(baseUrl=base_url, wsUrl=ws_url) %} {# Sentinel value
- to say that we are on the tree page #} {% set _ =
- page_config_full.update(notebookPage='consoles') %}
-
-
-
-
-
-
diff --git a/app/templates/edit_template.html b/app/templates/edit_template.html
deleted file mode 100644
index 2c0ff6b41..000000000
--- a/app/templates/edit_template.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
- {{page_config['appName'] | e}} - Edit
- {% block favicon %}
-
- {% endblock %}
-
-
- {# Copy so we do not modify the page_config with updates. #} {% set
- page_config_full = page_config.copy() %} {# Set a dummy variable - we just
- want the side effect of the update. #} {% set _ =
- page_config_full.update(baseUrl=base_url, wsUrl=ws_url) %} {# Sentinel value
- to say that we are on the tree page #} {% set _ =
- page_config_full.update(notebookPage='edit') %}
-
-
-
-
-
-
diff --git a/app/templates/error_template.html b/app/templates/error_template.html
deleted file mode 100644
index c08d8b199..000000000
--- a/app/templates/error_template.html
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
- {% block title %}{{page_title | e}}{% endblock %}
-
- {% block favicon %}{% endblock %}
-
-
-
-
-
-{% block stylesheet %}
-
-{% endblock %}
-{% block site %}
-
-
-
-
- You signed in with another tab or window. Reload to refresh your session.
- You signed out in another tab or window. Reload to refresh your session.
- You switched accounts on another tab or window. Reload to refresh your session.
-
- Dismiss alert
-
-
-
-
-
-
- You can鈥檛 perform that action at this time.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/source/conf.py b/docs/source/conf.py
deleted file mode 100644
index 80c94d1c5..000000000
--- a/docs/source/conf.py
+++ /dev/null
@@ -1,406 +0,0 @@
-# Jupyter Notebook documentation build configuration file, created by
-# sphinx-quickstart on Mon Apr 13 09:51:11 2015.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-import logging
-import os
-import shutil
-import sys
-
-logger = logging.getLogger(__name__)
-logging.basicConfig()
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-
-# DEBUG for RTD
-logger.info("DEBUG:: sys.path")
-logger.info("================")
-for item in sys.path:
- logger.info(item)
-
-# add repo root to sys.path
-# here = root/docs/source
-here = os.path.abspath(os.path.dirname(__file__))
-repo_root = os.path.dirname(os.path.dirname(here))
-sys.path.insert(0, repo_root)
-
-# Copy the markdown file here
-shutil.copy(os.path.join(repo_root, "CHANGELOG.md"), os.path.join(here, "changelog.md"))
-
-# Copy the contributing file here
-shutil.copy(os.path.join(repo_root, "CONTRIBUTING.md"), os.path.join(here, "contributing.md"))
-
-logger.info("repo_root")
-logger.info("=====================")
-logger.info(repo_root)
-
-# DEBUG for post insert on RTD
-logger.info("DEBUG:: Post insert to sys.path")
-logger.info("===============================")
-for item in sys.path:
- logger.info(item)
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
- "sphinx.ext.autodoc",
- "sphinx.ext.doctest",
- "sphinx.ext.intersphinx",
- "sphinx.ext.autosummary",
- "sphinx.ext.mathjax",
- "IPython.sphinxext.ipython_console_highlighting",
- "nbsphinx",
- "sphinxcontrib_github_alt",
- "myst_parser",
-]
-
-try:
- import enchant # noqa: F401
-
- extensions += ["sphinxcontrib.spelling"]
-except ImportError:
- pass
-
-myst_enable_extensions = ["html_image"]
-myst_update_mathjax = False
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = ["_templates"]
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-# source_suffix = ['.rst', '.md']
-
-# The encoding of source files.
-# source_encoding = 'utf-8-sig'
-
-# The master toctree document.
-master_doc = "index"
-
-# General information about the project.
-project = "Jupyter Notebook"
-copyright = "2015, Jupyter Team, https://jupyter.org"
-author = "The Jupyter Team"
-
-# ghissue config
-github_project_url = "https://github.com/jupyter/notebook"
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-_version_py = os.path.join(here, "../../notebook/_version.py")
-version_ns = {}
-exec(compile(open(_version_py).read(), _version_py, "exec"), version_ns) # noqa: S102, SIM115
-# The short X.Y version.
-version = "{}.{}".format(*version_ns["version_info"][:2])
-# The full version, including alpha/beta/rc tags.
-release = version_ns["__version__"]
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = "en"
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-# today = ''
-# Else, today_fmt is used as the format for a strftime call.
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-exclude_patterns = [
- "examples/Notebook/.ipynb_checkpoints",
- "examples/Notebook/nbpackage/*.ipynb",
- "examples/Notebook/nbpackage/nbs/*.ipynb",
-]
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-# show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = "sphinx"
-
-# A list of ignored prefixes for module index sorting.
-# modindex_common_prefix = []
-
-# If true, keep warnings as "system message" paragraphs in the built documents.
-# keep_warnings = False
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-html_theme = "pydata_sphinx_theme"
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-html_theme_options = {
- "header_links_before_dropdown": 5,
- "icon_links": [
- {
- "name": "jupyter.org",
- "url": "https://jupyter.org",
- "icon": "_static/jupyter_logo.svg",
- "type": "local",
- },
- {
- "name": "GitHub",
- "url": "https://github.com/jupyter/notebook",
- "icon": "fab fa-github-square",
- },
- {
- "name": "Discourse",
- "url": "https://discourse.jupyter.org/c/notebook/31",
- "icon": "fab fa-discourse",
- },
- {
- "name": "Zulip",
- "url": "https://jupyter.zulipchat.com/",
- "icon": "_static/zulip-icon-square.svg",
- "type": "local",
- },
- ],
- "logo": {
- "alt_text": "Jupyter",
- "image_light": "_static/logo-rectangle.svg",
- "image_dark": "_static/logo-rectangle-dark.svg",
- },
- "use_edit_page_button": True,
- "navigation_with_keys": False,
-}
-
-# Output for github to be used in links
-html_context = {
- "github_user": "jupyter", # Username
- "github_repo": "notebook", # Repo name
- "github_version": "main", # Version
- "doc_path": "docs/source/", # Path in the checkout to the docs root
-}
-
-# Add any paths that contain custom themes here, relative to this directory.
-# html_theme_path = []
-
-# The name for this set of Sphinx documents. If None, it defaults to
-# " v documentation".
-# html_title = None
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-# html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-html_logo = "examples/images/jupyter_logo.png"
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-# html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-# NOTE: Sphinx's 'make html' builder will throw a warning about an unfound
-# _static directory. Do not remove or comment out html_static_path
-# since it is needed to properly generate _static in the build directory
-html_static_path = ["_static"]
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-# html_extra_path = []
-
-# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
-# using the given strftime format.
-# html_last_updated_fmt = '%b %d, %Y'
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-# html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-# html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-# html_domain_indices = True
-
-# If false, no index is generated.
-# html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-# html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-# html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-# html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-# html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a tag referring to it. The value of this option must be the
-# base URL from which the finished HTML is served.
-# html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-# html_file_suffix = None
-
-# Language to be used for generating the HTML full-text search index.
-# Sphinx supports the following languages:
-# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
-# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr'
-# html_search_language = 'en'
-
-# A dictionary with options for the search language support, empty by default.
-# Now only 'ja' uses this config value
-# html_search_options = {'type': 'default'}
-
-# The name of a javascript file (relative to the configuration directory) that
-# implements a search results scorer. If empty, the default will be used.
-# html_search_scorer = 'scorer.js'
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = "JupyterNotebookdoc"
-
-# This will ensure that we use the correctly set environment for canonical URLs
-# Old Read the Docs injections makes it point only to the default version,
-# for instance /en/stable/
-html_baseurl = os.environ.get("READTHEDOCS_CANONICAL_URL", "/")
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- (
- master_doc,
- "JupyterNotebook.tex",
- "Jupyter Notebook Documentation",
- "https://jupyter.org",
- "manual",
- ),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-# latex_appendices = []
-
-# If false, no module index is generated.
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [(master_doc, "jupyternotebook", "Jupyter Notebook Documentation", [author], 1)]
-
-# If true, show URL addresses after external links.
-# man_show_urls = False
-
-
-# -- Options for link checks ----------------------------------------------
-
-linkcheck_ignore = [r"http://127\.0\.0\.1/*"]
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (
- master_doc,
- "JupyterNotebook",
- "Jupyter Notebook Documentation",
- author,
- "JupyterNotebook",
- "One line description of project.",
- "Miscellaneous",
- ),
-]
-
-# Documents to append as an appendix to all manuals.
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-# texinfo_no_detailmenu = False
-
-intersphinx_mapping = {
- "ipython": ("https://ipython.readthedocs.io/en/stable/", None),
- "nbconvert": ("https://nbconvert.readthedocs.io/en/latest/", None),
- "nbformat": ("https://nbformat.readthedocs.io/en/latest/", None),
- "jupyter": ("https://jupyter.readthedocs.io/en/latest/", None),
-}
-
-spelling_lang = "en_US"
-spelling_word_list_filename = "spelling_wordlist.txt"
-
-
-def setup(app):
- app.add_css_file("https://docs.jupyter.org/en/latest/_static/jupyter.css")
diff --git a/docs/source/configuration.md b/docs/source/configuration.md
deleted file mode 100644
index 990d09438..000000000
--- a/docs/source/configuration.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# Configuration
-
-```{toctree}
-:caption: Configuration
-:maxdepth: 1
-
-configuring/config_overview
-Security
-extending/index.rst
-```
diff --git a/docs/source/configuring/config_overview.md b/docs/source/configuring/config_overview.md
deleted file mode 100644
index 3755b2db3..000000000
--- a/docs/source/configuring/config_overview.md
+++ /dev/null
@@ -1,73 +0,0 @@
-(configuration-overview)=
-
-# Configuration Overview
-
-Beyond the default configuration settings, you can configure a rich array of
-options to suit your workflow. Here are areas that are commonly configured
-when using Jupyter Notebook:
-
-> - {ref}`Jupyter's common configuration system `
-> - {ref}`Jupyter Server `
-> - {ref}`Notebook extensions `
-
-Let's look at highlights of each area.
-
-(configure-common)=
-
-## Jupyter's Common Configuration system
-
-Jupyter applications, from the Notebook to JupyterHub to nbgrader, share a
-common configuration system. The process for creating a configuration file
-and editing settings is similar for all the Jupyter applications.
-
-> - [Jupyter鈥檚 Common Configuration Approach](https://jupyter.readthedocs.io/en/latest/use/config.html)
-> - [Common Directories and File Locations](https://jupyter.readthedocs.io/en/latest/use/jupyter-directories.html)
-> - [Language kernels](https://jupyter.readthedocs.io/en/latest/projects/kernels.html)
-> - [traitlets](https://traitlets.readthedocs.io/en/latest/config.html#module-traitlets.config)
-> provide a low-level architecture for configuration.
-
-### Disabling Custom CSS
-
-Custom CSS is loaded by default as was done with Jupyter Notebook 6. In the jupyter configuration directory, the `/.jupyter/custom/custom.css` file will be loaded unless the the application is initialized with the `custom_css` flag with the argument set to `False` as in `--JupyterNotebookApp.custom_css=False`.
-
-(configure-jupyter-server)=
-
-## Jupyter server
-
-The Jupyter Server runs the language kernel and communicates with the
-front-end Notebook client (i.e. the familiar notebook interface).
-
-> - Configuring the Jupyter Server
->
-> > To create a `jupyter_server_config.py` file in the `.jupyter`
-> > directory, with all the defaults commented out, use the following
-> > command:
-> >
-> > ```
-> > $ jupyter server --generate-config
-> > ```
->
-> - [Running a Jupyter Server](https://jupyter-server.readthedocs.io/en/stable/operators/public-server.html)
->
-> - Related: [Configuring a language kernel](https://ipython.readthedocs.io/en/latest/install/kernel_install.html)
-> to run in the Jupyter Server enables your server to run other languages, like R or Julia.
-
-```{warning}
-Jupyter Notebook 7 is now based on Jupyter Server. This may break some previous `notebook` imports you may have been using, such as `notebook.auth` or `notebook.notebookapp`.
-
-Check out the [migration guide](../migrating/server-imports.md) to learn more on how to update these server imports.
-```
-
-(configure-nbextensions)=
-
-## Notebook extensions
-
-The Notebook frontend can be extending with JupyterLab extensions.
-
-See the {ref}`Frontend Extension Guide ` for more information.
-
-[Security in Jupyter notebooks:](https://jupyter-server.readthedocs.io/en/stable/operators/security.html)
-Since security policies vary from organization to organization, we encourage you to
-consult with your security team on settings that would be best for your use
-cases. Our documentation offers some responsible security practices, and we
-recommend becoming familiar with the practices.
diff --git a/docs/source/configuring/interface_customization.md b/docs/source/configuring/interface_customization.md
deleted file mode 100644
index 6ae6981c2..000000000
--- a/docs/source/configuring/interface_customization.md
+++ /dev/null
@@ -1,62 +0,0 @@
-# Interface Customization
-
-Multiple elements in the Notebook interface can be customized via the Settings Editor.
-
-## Layout
-
-By default some widgets are displayed in pre-defined parts of the user interface, which are often called "areas" or "regions".
-For example the table of contents will be displayed in the `left` area by default, while the debugger will be displayed in the `right` area.
-
-However the positioning of some of these components can also be customized via the Settings Editor. Below are a few examples of how to do this.
-
-### Open the Markdown Preview on the left
-
-It is often useful to be able to see a rendered preview of a Markdown document while editing it.
-
-By default the Markdown Preview opens on the right side of the application. However it is also possible to open it on the left side by changing the Notebook Shell settings in the Advanced Settings Editor:
-
-```json
-{
- "layout": {
- "Markdown Preview": {
- "area": "left"
- }
- }
-}
-```
-
-
-
-### Configuring a third-party widget
-
-Third-party extensions can also add widgets to the application shell. This is for example the case with the [Voila extension](https://github.com/voila-dashboards/voila), which adds a preview widget to visualize a notebook as a dashboard.
-
-By default in JupyterLab the Voila Preview is added to the `main` area next to the corresponding notebook. With Notebook 7 it is possible to move the Voila Preview to the `right` area by changing the Notebook Shell setting in the Advanced Settings Editor as follows:
-
-```json
-{
- "layout": {
- "Voila Preview": {
- "area": "right"
- }
- }
-}
-```
-
-
-
-```{note}
-Refer to the [JupyterLab Layout Documentation](https://jupyterlab.readthedocs.io/en/latest/user/interface_customization.html#layout)
-to learn more about the default positioning of other UI elements.
-```
-
-## Toolbars, Menu bar and Context Menu
-
-It is also possible to customize toolbars, menus and context menu entries via the Settings Editor.
-
-For example the items of the notebook toolbar can be reordered, or some menu entries can be hidden.
-
-```{note}
-Refer to the [JupyterLab Documentation](https://jupyterlab.readthedocs.io/en/latest/user/interface_customization.html)
-to learn more about general interface customization via the settings editor.
-```
diff --git a/docs/source/configuring/plugins.md b/docs/source/configuring/plugins.md
deleted file mode 100644
index 8a881a1aa..000000000
--- a/docs/source/configuring/plugins.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# Managing plugins
-
-Notebook 7 uses the same extension system as JupyterLab. An extension can provide multiple plugins.
-
-```{note}
-See the [JupyterLab documentation](https://jupyterlab.readthedocs.io/en/latest/user/extensions.html) to learn more about the extension system.
-```
-
-## Examples
-
-### Disabling the download button
-
-By default Notebook 7 provides a way to download files from the file browser. This functionality consists of a context menu entry and a main menu entry. They are provided by an application plugin that can be disabled.
-
-To disable the download entry of file browser context menus, open a terminal and run the following command:
-
-```text
-jupyter labextension disable @jupyterlab/filebrowser-extension:download
-```
-
-Then restart the application and refresh the page.
diff --git a/docs/source/contributor.md b/docs/source/contributor.md
deleted file mode 100644
index 977ea8270..000000000
--- a/docs/source/contributor.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Contributing
-
-```{toctree}
-:caption: Contributor Documentation
-:maxdepth: 1
-
-contributing
-development_faq
-```
diff --git a/docs/source/custom_css.md b/docs/source/custom_css.md
deleted file mode 100644
index ea9721ac3..000000000
--- a/docs/source/custom_css.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# Applying Custom CSS
-
-To apply custom CSS, you can add a `/custom/custom.css` file in the jupyter `config` directory. You can find the path, `~/.jupyter`, to this directory by running `jupyter --paths`. There you can create a folder named `custom` and create a `custom.css` file within the folder.
-
-## Jupyter Styling
-
-You can use a custom CSS file to modify default Jupyter styling.
-
-```css
-/* Modify Jupyter Styles */
-#top-panel-wrapper,
-#jp-top-bar {
- background-color: #aecad4 !important;
-}
-
-#menu-panel-wrapper,
-#jp-MainMenu,
-#menu-panel {
- background-color: #aecad4 !important;
-}
-
-.jp-NotebookPanel-toolbar {
- background-color: #aecad4 !important;
-}
-.lm-MenuBar-content {
- color: #02484d;
-}
-```
-
-
-
-## Markdown
-
-Another potential application for custom CSS is styling markdown.
-
-```css
-/* Headings */
-h1,
-h2 {
- font-family: Impact, Charcoal, sans-serif;
- font-weight: bold;
- text-shadow: 2px 2px 4px #000000;
-}
-
-h1 {
- font-size: 52px;
- margin-bottom: 40px;
- color: #10929e;
- text-decoration: underline;
-}
-
-h2 {
- font-size: 448px;
- margin-bottom: 32px;
- color: #76b4be;
- text-transform: uppercase;
-}
-
-/* Block Quotes */
-blockquote {
- font-family: Georgia, serif;
- font-size: 16px;
- color: #19085c;
- border-left: 8px solid #effffc;
- background-color: #eafcff;
- padding: 20px;
-}
-
-/* Lists */
-ul,
-ol {
- font-family: Verdana, Geneva, sans-serif;
- font-size: 18px;
- color: #333333;
- margin-bottom: 24px;
-}
-```
-
-
diff --git a/docs/source/development_faq.md b/docs/source/development_faq.md
deleted file mode 100644
index 5ba4d37c0..000000000
--- a/docs/source/development_faq.md
+++ /dev/null
@@ -1,17 +0,0 @@
-(development-faq)=
-
-# Developer FAQ
-
-1. How do I install a prerelease version such as a beta or release candidate?
-
-You can install a prerelease version of the notebook using the `--pre` flag with `pip`:
-
-```bash
-python -m pip install notebook --pre --upgrade
-```
-
-If you are using `conda` or `mamba`, you can install a prerelease version of the notebook using the alpha or beta label. For example, to install the latest alpha release, you can run:
-
-```bash
-conda install -c conda-forge -c conda-forge/label/notebook_alpha notebook=7.0.0a18
-```
diff --git a/docs/source/examples/Notebook/Connecting with the Qt Console.ipynb b/docs/source/examples/Notebook/Connecting with the Qt Console.ipynb
deleted file mode 100644
index 479420041..000000000
--- a/docs/source/examples/Notebook/Connecting with the Qt Console.ipynb
+++ /dev/null
@@ -1,130 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Connecting to an existing IPython kernel using the Qt Console"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## The Frontend/Kernel Model"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The traditional IPython (`ipython`) consists of a single process that combines a terminal based UI with the process that runs the users code.\n",
- "\n",
- "While this traditional application still exists, the modern Jupyter consists of two processes:\n",
- "\n",
- "* Kernel: this is the process that runs the users code.\n",
- "* Frontend: this is the process that provides the user interface where the user types code and sees results.\n",
- "\n",
- "Jupyter currently has 3 frontends:\n",
- "\n",
- "* Terminal Console (`jupyter console`)\n",
- "* Qt Console (`jupyter qtconsole`)\n",
- "* Notebook (`jupyter notebook`)\n",
- "\n",
- "The Kernel and Frontend communicate over a ZeroMQ/JSON based messaging protocol, which allows multiple Frontends (even of different types) to communicate with a single Kernel. This opens the door for all sorts of interesting things, such as connecting a Console or Qt Console to a Notebook's Kernel. For example, you may want to connect a Qt console to your Notebook's Kernel and use it as a help\n",
- "browser, calling `??` on objects in the Qt console (whose pager is more flexible than the\n",
- "one in the notebook). \n",
- "\n",
- "This Notebook describes how you would connect another Frontend to an IPython Kernel that is associated with a Notebook.\n",
- "The commands currently given here are specific to the IPython kernel."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Manual connection"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "To connect another Frontend to a Kernel manually, you first need to find out the connection information for the Kernel using the `%connect_info` magic:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "%connect_info"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can see that this magic displays everything you need to connect to this Notebook's Kernel."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Automatic connection using a new Qt Console"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can also start a new Qt Console connected to your current Kernel by using the `%qtconsole` magic. This will detect the necessary connection\n",
- "information and start the Qt Console for you automatically."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "a = 10"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "%qtconsole"
- ]
- }
- ],
- "metadata": {
- "nbsphinx": {
- "execute": "never"
- },
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/docs/source/examples/Notebook/Custom Keyboard Shortcuts.ipynb b/docs/source/examples/Notebook/Custom Keyboard Shortcuts.ipynb
deleted file mode 100644
index 9d2627940..000000000
--- a/docs/source/examples/Notebook/Custom Keyboard Shortcuts.ipynb
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Keyboard Shortcut Customization"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can customize the `command` mode shortcuts from within the Notebook Application itself. \n",
- "\n",
- "Head to the **Settings** menu and select the **Settings Editor** item.\n",
- "A dialog will guide you through the process of adding custom keyboard shortcuts.\n",
- "\n",
- "Keyboard shortcut set from within the Notebook Application will be persisted to your configuration file. \n",
- "A single action may have several shortcuts attached to it."
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.2"
- },
- "nbsphinx": {
- "execute": "never"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/docs/source/examples/Notebook/Importing Notebooks.ipynb b/docs/source/examples/Notebook/Importing Notebooks.ipynb
deleted file mode 100644
index 74702ffe3..000000000
--- a/docs/source/examples/Notebook/Importing Notebooks.ipynb
+++ /dev/null
@@ -1,544 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Importing Jupyter Notebooks as Modules"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "It is a common problem that people want to import code from Jupyter Notebooks.\n",
- "This is made difficult by the fact that Notebooks are not plain Python files,\n",
- "and thus cannot be imported by the regular Python machinery.\n",
- "\n",
- "Fortunately, Python provides some fairly sophisticated [hooks](https://www.python.org/dev/peps/pep-0302/) into the import machinery,\n",
- "so we can actually make Jupyter notebooks importable without much difficulty,\n",
- "and only using public APIs."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "import io, os, sys, types"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from IPython import get_ipython\n",
- "from nbformat import read\n",
- "from IPython.core.interactiveshell import InteractiveShell"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Import hooks typically take the form of two objects:\n",
- "\n",
- "1. a Module **Loader**, which takes a module name (e.g. `'IPython.display'`), and returns a Module\n",
- "2. a Module **Finder**, which figures out whether a module might exist, and tells Python what **Loader** to use"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "def find_notebook(fullname, path=None):\n",
- " \"\"\"find a notebook, given its fully qualified name and an optional path\n",
- "\n",
- " This turns \"foo.bar\" into \"foo/bar.ipynb\"\n",
- " and tries turning \"Foo_Bar\" into \"Foo Bar\" if Foo_Bar\n",
- " does not exist.\n",
- " \"\"\"\n",
- " name = fullname.rsplit('.', 1)[-1]\n",
- " if not path:\n",
- " path = ['']\n",
- " for d in path:\n",
- " nb_path = os.path.join(d, name + \".ipynb\")\n",
- " if os.path.isfile(nb_path):\n",
- " return nb_path\n",
- " # let import Notebook_Name find \"Notebook Name.ipynb\"\n",
- " nb_path = nb_path.replace(\"_\", \" \")\n",
- " if os.path.isfile(nb_path):\n",
- " return nb_path"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Notebook Loader"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Here we have our Notebook Loader.\n",
- "It's actually quite simple - once we figure out the filename of the module,\n",
- "all it does is:\n",
- "\n",
- "1. load the notebook document into memory\n",
- "2. create an empty Module\n",
- "3. execute every cell in the Module namespace\n",
- "\n",
- "Since IPython cells can have extended syntax,\n",
- "the IPython transform is applied to turn each of these cells into their pure-Python counterparts before executing them.\n",
- "If all of your notebook cells are pure-Python,\n",
- "this step is unnecessary."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "class NotebookLoader(object):\n",
- " \"\"\"Module Loader for Jupyter Notebooks\"\"\"\n",
- "\n",
- " def __init__(self, path=None):\n",
- " self.shell = InteractiveShell.instance()\n",
- " self.path = path\n",
- "\n",
- " def load_module(self, fullname):\n",
- " \"\"\"import a notebook as a module\"\"\"\n",
- " path = find_notebook(fullname, self.path)\n",
- "\n",
- " print(\"importing Jupyter notebook from %s\" % path)\n",
- "\n",
- " # load the notebook object\n",
- " with io.open(path, 'r', encoding='utf-8') as f:\n",
- " nb = read(f, 4)\n",
- "\n",
- " # create the module and add it to sys.modules\n",
- " # if name in sys.modules:\n",
- " # return sys.modules[name]\n",
- " mod = types.ModuleType(fullname)\n",
- " mod.__file__ = path\n",
- " mod.__loader__ = self\n",
- " mod.__dict__['get_ipython'] = get_ipython\n",
- " sys.modules[fullname] = mod\n",
- "\n",
- " # extra work to ensure that magics that would affect the user_ns\n",
- " # actually affect the notebook module's ns\n",
- " save_user_ns = self.shell.user_ns\n",
- " self.shell.user_ns = mod.__dict__\n",
- "\n",
- " try:\n",
- " for cell in nb.cells:\n",
- " if cell.cell_type == 'code':\n",
- " # transform the input to executable Python\n",
- " code = self.shell.input_transformer_manager.transform_cell(cell.source)\n",
- " # run the code in themodule\n",
- " exec(code, mod.__dict__)\n",
- " finally:\n",
- " self.shell.user_ns = save_user_ns\n",
- " return mod"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## The Module Finder"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The finder is a simple object that tells you whether a name can be imported,\n",
- "and returns the appropriate loader.\n",
- "All this one does is check, when you do:\n",
- "\n",
- "```python\n",
- "import mynotebook\n",
- "```\n",
- "\n",
- "it checks whether `mynotebook.ipynb` exists.\n",
- "If a notebook is found, then it returns a NotebookLoader.\n",
- "\n",
- "Any extra logic is just for resolving paths within packages."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "class NotebookFinder(object):\n",
- " \"\"\"Module finder that locates Jupyter Notebooks\"\"\"\n",
- "\n",
- " def __init__(self):\n",
- " self.loaders = {}\n",
- "\n",
- " def find_module(self, fullname, path=None):\n",
- " nb_path = find_notebook(fullname, path)\n",
- " if not nb_path:\n",
- " return\n",
- "\n",
- " key = path\n",
- " if path:\n",
- " # lists aren't hashable\n",
- " key = os.path.sep.join(path)\n",
- "\n",
- " if key not in self.loaders:\n",
- " self.loaders[key] = NotebookLoader(path)\n",
- " return self.loaders[key]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Register the hook"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Now we register the `NotebookFinder` with `sys.meta_path`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "sys.meta_path.append(NotebookFinder())"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "After this point, my notebooks should be importable.\n",
- "\n",
- "Let's look at what we have in the CWD:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "ls nbpackage"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "So I should be able to `import nbpackage.mynotebook`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "import nbpackage.mynotebook"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Aside: displaying notebooks"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Here is some simple code to display the contents of a notebook\n",
- "with syntax highlighting, etc."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from pygments import highlight\n",
- "from pygments.lexers import PythonLexer\n",
- "from pygments.formatters import HtmlFormatter\n",
- "\n",
- "from IPython.display import display, HTML\n",
- "\n",
- "formatter = HtmlFormatter()\n",
- "lexer = PythonLexer()\n",
- "\n",
- "# publish the CSS for pygments highlighting\n",
- "display(\n",
- " HTML(\n",
- " \"\"\"\n",
- "\n",
- "\"\"\"\n",
- " % formatter.get_style_defs()\n",
- " )\n",
- ")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "def show_notebook(fname):\n",
- " \"\"\"display a short summary of the cells of a notebook\"\"\"\n",
- " with io.open(fname, 'r', encoding='utf-8') as f:\n",
- " nb = read(f, 4)\n",
- " html = []\n",
- " for cell in nb.cells:\n",
- " html.append(\"
\" % cell.source)\n",
- " display(HTML('\\n'.join(html)))\n",
- "\n",
- "\n",
- "show_notebook(os.path.join(\"nbpackage\", \"mynotebook.ipynb\"))"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "So my notebook has some code cells,\n",
- "one of which contains some IPython syntax.\n",
- "\n",
- "Let's see what happens when we import it"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from nbpackage import mynotebook"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Hooray, it imported! Does it work?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "mynotebook.foo()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Hooray again!\n",
- "\n",
- "Even the function that contains IPython syntax works:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "mynotebook.has_ip_syntax()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Notebooks in packages"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We also have a notebook inside the `nb` package,\n",
- "so let's make sure that works as well."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "ls nbpackage/nbs"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Note that the `__init__.py` is necessary for `nb` to be considered a package,\n",
- "just like usual."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "show_notebook(os.path.join(\"nbpackage\", \"nbs\", \"other.ipynb\"))"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from nbpackage.nbs import other\n",
- "\n",
- "other.bar(5)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "So now we have importable notebooks, from both the local directory and inside packages.\n",
- "\n",
- "I can even put a notebook inside IPython, to further demonstrate that this is working properly:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "import shutil\n",
- "from IPython.paths import get_ipython_package_dir\n",
- "\n",
- "utils = os.path.join(get_ipython_package_dir(), 'utils')\n",
- "shutil.copy(\n",
- " os.path.join(\"nbpackage\", \"mynotebook.ipynb\"), os.path.join(utils, \"inside_ipython.ipynb\")\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "and import the notebook from `IPython.utils`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "from IPython.utils import inside_ipython\n",
- "\n",
- "inside_ipython.whatsmyname()"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "This approach can even import functions and classes that are defined in a notebook using the `%%cython` magic."
- ]
- }
- ],
- "metadata": {
- "gist_id": "6011986",
- "nbsphinx": {
- "execute": "never"
- },
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.1+"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
diff --git a/docs/source/examples/Notebook/Notebook Basics.ipynb b/docs/source/examples/Notebook/Notebook Basics.ipynb
deleted file mode 100644
index 9e514158e..000000000
--- a/docs/source/examples/Notebook/Notebook Basics.ipynb
+++ /dev/null
@@ -1,254 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Notebook Basics"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## The Notebook dashboard"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "When you first start the notebook server, your browser will open to the notebook dashboard. The dashboard serves as a home page for the notebook. Its main purpose is to display the notebooks and files in the current directory. For example, here is a screenshot of the dashboard page for the `examples` directory in the Jupyter repository:\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The top of the notebook list displays clickable breadcrumbs of the current directory. By clicking on these breadcrumbs or on sub-directories in the notebook list, you can navigate your file system.\n",
- "\n",
- "To create a new notebook, click on the \"New\" button at the top of the list and select a kernel from the dropdown (as seen below). Which kernels are listed depend on what's installed on the server. Some of the kernels in the screenshot below may not exist as an option to you.\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Notebooks and files can be uploaded to the current directory by dragging a notebook file onto the notebook list or by the \"click here\" text above the list.\n",
- "\n",
- "The notebook list shows green \"Running\" text and a green notebook icon next to running notebooks (as seen below). Notebooks remain running until you explicitly shut them down; closing the notebook's page is not sufficient.\n",
- "\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "To shutdown, delete, duplicate, or rename a notebook check the checkbox next to it and an array of controls will appear at the top of the notebook list (as seen below). You can also use the same operations on directories and files when applicable.\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "To see all of your running notebooks along with their directories, click on the \"Running\" tab:\n",
- "\n",
- "\n",
- "\n",
- "This view provides a convenient way to track notebooks that you start as you navigate the file system in a long running notebook server."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Overview of the Notebook UI"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "If you create a new notebook or open an existing one, you will be taken to the notebook user interface (UI). This UI allows you to run code and author notebook documents interactively. The notebook UI has the following main areas:\n",
- "\n",
- "* Menu\n",
- "* Toolbar\n",
- "* Notebook area and cells\n",
- "\n",
- "The notebook has an interactive tour of these elements that can be started in the \"Help:User Interface Tour\" menu item."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Modal editor"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Starting with IPython 2.0, the Jupyter Notebook has a modal user interface. This means that the keyboard does different things depending on which mode the Notebook is in. There are two modes: edit mode and command mode."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Edit mode"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Edit mode is indicated by a green cell border and a prompt showing in the editor area:\n",
- "\n",
- "\n",
- "\n",
- "When a cell is in edit mode, you can type into the cell, like a normal text editor."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "
\n",
- "Enter edit mode by pressing `Enter` or using the mouse to click on a cell's editor area.\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Command mode"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Command mode is indicated by a grey cell border with a blue left margin:\n",
- "\n",
- "\n",
- "\n",
- "When you are in command mode, you are able to edit the notebook as a whole, but not type into individual cells. Most importantly, in command mode, the keyboard is mapped to a set of shortcuts that let you perform notebook and cell actions efficiently. For example, if you are in command mode and you press `c`, you will copy the current cell - no modifier is needed."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "
\n",
- "Don't try to type into a cell in command mode; unexpected things will happen!\n",
- "
\n",
- "Enter command mode by pressing `Esc` or using the mouse to click *outside* a cell's editor area.\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Mouse navigation"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "All navigation and actions in the Notebook are available using the mouse through the menubar and toolbar, which are both above the main Notebook area:\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The first idea of mouse based navigation is that **cells can be selected by clicking on them.** The currently selected cell gets a grey or green border depending on whether the notebook is in edit or command mode. If you click inside a cell's editor area, you will enter edit mode. If you click on the prompt or output area of a cell you will enter command mode.\n",
- "\n",
- "If you are running this notebook in a live session (not on https://nbviewer.jupyter.org) try selecting different cells and going between edit and command mode. Try typing into a cell."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The second idea of mouse based navigation is that **cell actions usually apply to the currently selected cell**. Thus if you want to run the code in a cell, you would select it and click the button in the toolbar or the \"Cell:Run\" menu item. Similarly, to copy a cell you would select it and click the button in the toolbar or the \"Edit:Copy\" menu item. With this simple pattern, you should be able to do most everything you need with the mouse.\n",
- "\n",
- "Markdown cells have one other state that can be modified with the mouse. These cells can either be rendered or unrendered. When they are rendered, you will see a nice formatted representation of the cell's contents. When they are unrendered, you will see the raw text source of the cell. To render the selected cell with the mouse, click the button in the toolbar or the \"Cell:Run\" menu item. To unrender the selected cell, double click on the cell."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Keyboard Navigation"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The modal user interface of the Jupyter Notebook has been optimized for efficient keyboard usage. This is made possible by having two different sets of keyboard shortcuts: one set that is active in edit mode and another in command mode.\n",
- "\n",
- "The most important keyboard shortcuts are `Enter`, which enters edit mode, and `Esc`, which enters command mode.\n",
- "\n",
- "In edit mode, most of the keyboard is dedicated to typing into the cell's editor. Thus, in edit mode there are relatively few shortcuts. In command mode, the entire keyboard is available for shortcuts, so there are many more. The `Help`->`Keyboard Shortcuts` dialog lists the available shortcuts."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "We recommend learning the command mode shortcuts in the following rough order:\n",
- "\n",
- "1. Basic navigation: `enter`, `shift-enter`, `up/k`, `down/j`\n",
- "2. Saving the notebook: `s`\n",
- "2. Change Cell types: `y`, `m`, `1-6`, `t`\n",
- "3. Cell creation: `a`, `b`\n",
- "4. Cell editing: `x`, `c`, `v`, `d`, `z`\n",
- "5. Kernel operations: `i`, `0` (press twice)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/docs/source/examples/Notebook/Running Code.ipynb b/docs/source/examples/Notebook/Running Code.ipynb
deleted file mode 100644
index c93213260..000000000
--- a/docs/source/examples/Notebook/Running Code.ipynb
+++ /dev/null
@@ -1,915 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Running Code"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "First and foremost, the Jupyter Notebook is an interactive environment for writing and running code. The notebook is capable of running code in a wide range of languages. However, each notebook is associated with a single kernel. This notebook is associated with the IPython kernel, therefore runs Python code."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Code cells allow you to enter and run code"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Run a code cell using `Shift-Enter` or pressing the button in the toolbar above:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [],
- "source": [
- "a = 10"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "10\n"
- ]
- }
- ],
- "source": [
- "print(a)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "There are two other keyboard shortcuts for running code:\n",
- "\n",
- "* `Alt-Enter` runs the current cell and inserts a new one below.\n",
- "* `Ctrl-Enter` run the current cell and enters command mode."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Managing the Kernel"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Code is run in a separate process called the Kernel. The Kernel can be interrupted or restarted. Try running the following cell and then hit the button in the toolbar above."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [],
- "source": [
- "import time\n",
- "\n",
- "time.sleep(10)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "If the Kernel dies you will be prompted to restart it. Here we call the low-level system libc.time routine with the wrong argument via\n",
- "ctypes to segfault the Python interpreter:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [],
- "source": [
- "import sys\n",
- "\n",
- "# This will crash a Linux or Mac system\n",
- "# equivalent calls can be made on Windows\n",
- "\n",
- "# Uncomment these lines if you would like to see the segfault\n",
- "\n",
- "# dll = 'dylib' if sys.platform == 'darwin' else 'so.6'\n",
- "# libc = CDLL(\"libc.%s\" % dll)\n",
- "# libc.time(-1) # BOOM!!"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Cell menu"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The \"Cell\" menu has a number of menu items for running code in different ways. These includes:\n",
- "\n",
- "* Run and Select Below\n",
- "* Run and Insert Below\n",
- "* Run All\n",
- "* Run All Above\n",
- "* Run All Below"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Restarting the kernels"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The kernel maintains the state of a notebook's computations. You can reset this state by restarting the kernel. This is done by clicking on the in the toolbar above."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## sys.stdout and sys.stderr"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The stdout and stderr streams are displayed as text in the output area."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "hi, stdout\n"
- ]
- }
- ],
- "source": [
- "print(\"hi, stdout\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "hi, stderr\n"
- ]
- }
- ],
- "source": [
- "print(\"hi, stderr\", file=sys.stderr)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Output is asynchronous"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "All output is displayed asynchronously as it is generated in the Kernel. If you execute the next cell, you will see the output one piece at a time, not all at the end."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0\n",
- "1\n",
- "2\n",
- "3\n",
- "4\n",
- "5\n",
- "6\n",
- "7\n"
- ]
- }
- ],
- "source": [
- "import sys\n",
- "import time\n",
- "\n",
- "for i in range(8):\n",
- " print(i)\n",
- " time.sleep(0.5)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Large outputs"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "To better handle large outputs, the output area can be collapsed. Run the following cell and then single- or double- click on the active area to the left of the output:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0\n",
- "1\n",
- "2\n",
- "3\n",
- "4\n",
- "5\n",
- "6\n",
- "7\n",
- "8\n",
- "9\n",
- "10\n",
- "11\n",
- "12\n",
- "13\n",
- "14\n",
- "15\n",
- "16\n",
- "17\n",
- "18\n",
- "19\n",
- "20\n",
- "21\n",
- "22\n",
- "23\n",
- "24\n",
- "25\n",
- "26\n",
- "27\n",
- "28\n",
- "29\n",
- "30\n",
- "31\n",
- "32\n",
- "33\n",
- "34\n",
- "35\n",
- "36\n",
- "37\n",
- "38\n",
- "39\n",
- "40\n",
- "41\n",
- "42\n",
- "43\n",
- "44\n",
- "45\n",
- "46\n",
- "47\n",
- "48\n",
- "49\n"
- ]
- }
- ],
- "source": [
- "for i in range(50):\n",
- " print(i)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Beyond a certain point, output will scroll automatically:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "metadata": {
- "collapsed": false,
- "jupyter": {
- "outputs_hidden": false
- }
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "0\n",
- "1\n",
- "3\n",
- "7\n",
- "15\n",
- "31\n",
- "63\n",
- "127\n",
- "255\n",
- "511\n",
- "1023\n",
- "2047\n",
- "4095\n",
- "8191\n",
- "16383\n",
- "32767\n",
- "65535\n",
- "131071\n",
- "262143\n",
- "524287\n",
- "1048575\n",
- "2097151\n",
- "4194303\n",
- "8388607\n",
- "16777215\n",
- "33554431\n",
- "67108863\n",
- "134217727\n",
- "268435455\n",
- "536870911\n",
- "1073741823\n",
- "2147483647\n",
- "4294967295\n",
- "8589934591\n",
- "17179869183\n",
- "34359738367\n",
- "68719476735\n",
- "137438953471\n",
- "274877906943\n",
- "549755813887\n",
- "1099511627775\n",
- "2199023255551\n",
- "4398046511103\n",
- "8796093022207\n",
- "17592186044415\n",
- "35184372088831\n",
- "70368744177663\n",
- "140737488355327\n",
- "281474976710655\n",
- "562949953421311\n",
- "1125899906842623\n",
- "2251799813685247\n",
- "4503599627370495\n",
- "9007199254740991\n",
- "18014398509481983\n",
- "36028797018963967\n",
- "72057594037927935\n",
- "144115188075855871\n",
- "288230376151711743\n",
- "576460752303423487\n",
- "1152921504606846975\n",
- "2305843009213693951\n",
- "4611686018427387903\n",
- "9223372036854775807\n",
- "18446744073709551615\n",
- "36893488147419103231\n",
- "73786976294838206463\n",
- "147573952589676412927\n",
- "295147905179352825855\n",
- "590295810358705651711\n",
- "1180591620717411303423\n",
- "2361183241434822606847\n",
- "4722366482869645213695\n",
- "9444732965739290427391\n",
- "18889465931478580854783\n",
- "37778931862957161709567\n",
- "75557863725914323419135\n",
- "151115727451828646838271\n",
- "302231454903657293676543\n",
- "604462909807314587353087\n",
- "1208925819614629174706175\n",
- "2417851639229258349412351\n",
- "4835703278458516698824703\n",
- "9671406556917033397649407\n",
- "19342813113834066795298815\n",
- "38685626227668133590597631\n",
- "77371252455336267181195263\n",
- "154742504910672534362390527\n",
- "309485009821345068724781055\n",
- "618970019642690137449562111\n",
- "1237940039285380274899124223\n",
- "2475880078570760549798248447\n",
- "4951760157141521099596496895\n",
- "9903520314283042199192993791\n",
- "19807040628566084398385987583\n",
- "39614081257132168796771975167\n",
- "79228162514264337593543950335\n",
- "158456325028528675187087900671\n",
- "316912650057057350374175801343\n",
- "633825300114114700748351602687\n",
- "1267650600228229401496703205375\n",
- "2535301200456458802993406410751\n",
- "5070602400912917605986812821503\n",
- "10141204801825835211973625643007\n",
- "20282409603651670423947251286015\n",
- "40564819207303340847894502572031\n",
- "81129638414606681695789005144063\n",
- "162259276829213363391578010288127\n",
- "324518553658426726783156020576255\n",
- "649037107316853453566312041152511\n",
- "1298074214633706907132624082305023\n",
- "2596148429267413814265248164610047\n",
- "5192296858534827628530496329220095\n",
- "10384593717069655257060992658440191\n",
- "20769187434139310514121985316880383\n",
- "41538374868278621028243970633760767\n",
- "83076749736557242056487941267521535\n",
- "166153499473114484112975882535043071\n",
- "332306998946228968225951765070086143\n",
- "664613997892457936451903530140172287\n",
- "1329227995784915872903807060280344575\n",
- "2658455991569831745807614120560689151\n",
- "5316911983139663491615228241121378303\n",
- "10633823966279326983230456482242756607\n",
- "21267647932558653966460912964485513215\n",
- "42535295865117307932921825928971026431\n",
- "85070591730234615865843651857942052863\n",
- "170141183460469231731687303715884105727\n",
- "340282366920938463463374607431768211455\n",
- "680564733841876926926749214863536422911\n",
- "1361129467683753853853498429727072845823\n",
- "2722258935367507707706996859454145691647\n",
- "5444517870735015415413993718908291383295\n",
- "10889035741470030830827987437816582766591\n",
- "21778071482940061661655974875633165533183\n",
- "43556142965880123323311949751266331066367\n",
- "87112285931760246646623899502532662132735\n",
- "174224571863520493293247799005065324265471\n",
- "348449143727040986586495598010130648530943\n",
- "696898287454081973172991196020261297061887\n",
- "1393796574908163946345982392040522594123775\n",
- "2787593149816327892691964784081045188247551\n",
- "5575186299632655785383929568162090376495103\n",
- "11150372599265311570767859136324180752990207\n",
- "22300745198530623141535718272648361505980415\n",
- "44601490397061246283071436545296723011960831\n",
- "89202980794122492566142873090593446023921663\n",
- "178405961588244985132285746181186892047843327\n",
- "356811923176489970264571492362373784095686655\n",
- "713623846352979940529142984724747568191373311\n",
- "1427247692705959881058285969449495136382746623\n",
- "2854495385411919762116571938898990272765493247\n",
- "5708990770823839524233143877797980545530986495\n",
- "11417981541647679048466287755595961091061972991\n",
- "22835963083295358096932575511191922182123945983\n",
- "45671926166590716193865151022383844364247891967\n",
- "91343852333181432387730302044767688728495783935\n",
- "182687704666362864775460604089535377456991567871\n",
- "365375409332725729550921208179070754913983135743\n",
- "730750818665451459101842416358141509827966271487\n",
- "1461501637330902918203684832716283019655932542975\n",
- "2923003274661805836407369665432566039311865085951\n",
- "5846006549323611672814739330865132078623730171903\n",
- "11692013098647223345629478661730264157247460343807\n",
- "23384026197294446691258957323460528314494920687615\n",
- "46768052394588893382517914646921056628989841375231\n",
- "93536104789177786765035829293842113257979682750463\n",
- "187072209578355573530071658587684226515959365500927\n",
- "374144419156711147060143317175368453031918731001855\n",
- "748288838313422294120286634350736906063837462003711\n",
- "1496577676626844588240573268701473812127674924007423\n",
- "2993155353253689176481146537402947624255349848014847\n",
- "5986310706507378352962293074805895248510699696029695\n",
- "11972621413014756705924586149611790497021399392059391\n",
- "23945242826029513411849172299223580994042798784118783\n",
- "47890485652059026823698344598447161988085597568237567\n",
- "95780971304118053647396689196894323976171195136475135\n",
- "191561942608236107294793378393788647952342390272950271\n",
- "383123885216472214589586756787577295904684780545900543\n",
- "766247770432944429179173513575154591809369561091801087\n",
- "1532495540865888858358347027150309183618739122183602175\n",
- "3064991081731777716716694054300618367237478244367204351\n",
- "6129982163463555433433388108601236734474956488734408703\n",
- "12259964326927110866866776217202473468949912977468817407\n",
- "24519928653854221733733552434404946937899825954937634815\n",
- "49039857307708443467467104868809893875799651909875269631\n",
- "98079714615416886934934209737619787751599303819750539263\n",
- "196159429230833773869868419475239575503198607639501078527\n",
- "392318858461667547739736838950479151006397215279002157055\n",
- "784637716923335095479473677900958302012794430558004314111\n",
- "1569275433846670190958947355801916604025588861116008628223\n",
- "3138550867693340381917894711603833208051177722232017256447\n",
- "6277101735386680763835789423207666416102355444464034512895\n",
- "12554203470773361527671578846415332832204710888928069025791\n",
- "25108406941546723055343157692830665664409421777856138051583\n",
- "50216813883093446110686315385661331328818843555712276103167\n",
- "100433627766186892221372630771322662657637687111424552206335\n",
- "200867255532373784442745261542645325315275374222849104412671\n",
- "401734511064747568885490523085290650630550748445698208825343\n",
- "803469022129495137770981046170581301261101496891396417650687\n",
- "1606938044258990275541962092341162602522202993782792835301375\n",
- "3213876088517980551083924184682325205044405987565585670602751\n",
- "6427752177035961102167848369364650410088811975131171341205503\n",
- "12855504354071922204335696738729300820177623950262342682411007\n",
- "25711008708143844408671393477458601640355247900524685364822015\n",
- "51422017416287688817342786954917203280710495801049370729644031\n",
- "102844034832575377634685573909834406561420991602098741459288063\n",
- "205688069665150755269371147819668813122841983204197482918576127\n",
- "411376139330301510538742295639337626245683966408394965837152255\n",
- "822752278660603021077484591278675252491367932816789931674304511\n",
- "1645504557321206042154969182557350504982735865633579863348609023\n",
- "3291009114642412084309938365114701009965471731267159726697218047\n",
- "6582018229284824168619876730229402019930943462534319453394436095\n",
- "13164036458569648337239753460458804039861886925068638906788872191\n",
- "26328072917139296674479506920917608079723773850137277813577744383\n",
- "52656145834278593348959013841835216159447547700274555627155488767\n",
- "105312291668557186697918027683670432318895095400549111254310977535\n",
- "210624583337114373395836055367340864637790190801098222508621955071\n",
- "421249166674228746791672110734681729275580381602196445017243910143\n",
- "842498333348457493583344221469363458551160763204392890034487820287\n",
- "1684996666696914987166688442938726917102321526408785780068975640575\n",
- "3369993333393829974333376885877453834204643052817571560137951281151\n",
- "6739986666787659948666753771754907668409286105635143120275902562303\n",
- "13479973333575319897333507543509815336818572211270286240551805124607\n",
- "26959946667150639794667015087019630673637144422540572481103610249215\n",
- "53919893334301279589334030174039261347274288845081144962207220498431\n",
- "107839786668602559178668060348078522694548577690162289924414440996863\n",
- "215679573337205118357336120696157045389097155380324579848828881993727\n",
- "431359146674410236714672241392314090778194310760649159697657763987455\n",
- "862718293348820473429344482784628181556388621521298319395315527974911\n",
- "1725436586697640946858688965569256363112777243042596638790631055949823\n",
- "3450873173395281893717377931138512726225554486085193277581262111899647\n",
- "6901746346790563787434755862277025452451108972170386555162524223799295\n",
- "13803492693581127574869511724554050904902217944340773110325048447598591\n",
- "27606985387162255149739023449108101809804435888681546220650096895197183\n",
- "55213970774324510299478046898216203619608871777363092441300193790394367\n",
- "110427941548649020598956093796432407239217743554726184882600387580788735\n",
- "220855883097298041197912187592864814478435487109452369765200775161577471\n",
- "441711766194596082395824375185729628956870974218904739530401550323154943\n",
- "883423532389192164791648750371459257913741948437809479060803100646309887\n",
- "1766847064778384329583297500742918515827483896875618958121606201292619775\n",
- "3533694129556768659166595001485837031654967793751237916243212402585239551\n",
- "7067388259113537318333190002971674063309935587502475832486424805170479103\n",
- "14134776518227074636666380005943348126619871175004951664972849610340958207\n",
- "28269553036454149273332760011886696253239742350009903329945699220681916415\n",
- "56539106072908298546665520023773392506479484700019806659891398441363832831\n",
- "113078212145816597093331040047546785012958969400039613319782796882727665663\n",
- "226156424291633194186662080095093570025917938800079226639565593765455331327\n",
- "452312848583266388373324160190187140051835877600158453279131187530910662655\n",
- "904625697166532776746648320380374280103671755200316906558262375061821325311\n",
- "1809251394333065553493296640760748560207343510400633813116524750123642650623\n",
- "3618502788666131106986593281521497120414687020801267626233049500247285301247\n",
- "7237005577332262213973186563042994240829374041602535252466099000494570602495\n",
- "14474011154664524427946373126085988481658748083205070504932198000989141204991\n",
- "28948022309329048855892746252171976963317496166410141009864396001978282409983\n",
- "57896044618658097711785492504343953926634992332820282019728792003956564819967\n",
- "115792089237316195423570985008687907853269984665640564039457584007913129639935\n",
- "231584178474632390847141970017375815706539969331281128078915168015826259279871\n",
- "463168356949264781694283940034751631413079938662562256157830336031652518559743\n",
- "926336713898529563388567880069503262826159877325124512315660672063305037119487\n",
- "1852673427797059126777135760139006525652319754650249024631321344126610074238975\n",
- "3705346855594118253554271520278013051304639509300498049262642688253220148477951\n",
- "7410693711188236507108543040556026102609279018600996098525285376506440296955903\n",
- "14821387422376473014217086081112052205218558037201992197050570753012880593911807\n",
- "29642774844752946028434172162224104410437116074403984394101141506025761187823615\n",
- "59285549689505892056868344324448208820874232148807968788202283012051522375647231\n",
- "118571099379011784113736688648896417641748464297615937576404566024103044751294463\n",
- "237142198758023568227473377297792835283496928595231875152809132048206089502588927\n",
- "474284397516047136454946754595585670566993857190463750305618264096412179005177855\n",
- "948568795032094272909893509191171341133987714380927500611236528192824358010355711\n",
- "1897137590064188545819787018382342682267975428761855001222473056385648716020711423\n",
- "3794275180128377091639574036764685364535950857523710002444946112771297432041422847\n",
- "7588550360256754183279148073529370729071901715047420004889892225542594864082845695\n",
- "15177100720513508366558296147058741458143803430094840009779784451085189728165691391\n",
- "30354201441027016733116592294117482916287606860189680019559568902170379456331382783\n",
- "60708402882054033466233184588234965832575213720379360039119137804340758912662765567\n",
- "121416805764108066932466369176469931665150427440758720078238275608681517825325531135\n",
- "242833611528216133864932738352939863330300854881517440156476551217363035650651062271\n",
- "485667223056432267729865476705879726660601709763034880312953102434726071301302124543\n",
- "971334446112864535459730953411759453321203419526069760625906204869452142602604249087\n",
- "1942668892225729070919461906823518906642406839052139521251812409738904285205208498175\n",
- "3885337784451458141838923813647037813284813678104279042503624819477808570410416996351\n",
- "7770675568902916283677847627294075626569627356208558085007249638955617140820833992703\n",
- "15541351137805832567355695254588151253139254712417116170014499277911234281641667985407\n",
- "31082702275611665134711390509176302506278509424834232340028998555822468563283335970815\n",
- "62165404551223330269422781018352605012557018849668464680057997111644937126566671941631\n",
- "124330809102446660538845562036705210025114037699336929360115994223289874253133343883263\n",
- "248661618204893321077691124073410420050228075398673858720231988446579748506266687766527\n",
- "497323236409786642155382248146820840100456150797347717440463976893159497012533375533055\n",
- "994646472819573284310764496293641680200912301594695434880927953786318994025066751066111\n",
- "1989292945639146568621528992587283360401824603189390869761855907572637988050133502132223\n",
- "3978585891278293137243057985174566720803649206378781739523711815145275976100267004264447\n",
- "7957171782556586274486115970349133441607298412757563479047423630290551952200534008528895\n",
- "15914343565113172548972231940698266883214596825515126958094847260581103904401068017057791\n",
- "31828687130226345097944463881396533766429193651030253916189694521162207808802136034115583\n",
- "63657374260452690195888927762793067532858387302060507832379389042324415617604272068231167\n",
- "127314748520905380391777855525586135065716774604121015664758778084648831235208544136462335\n",
- "254629497041810760783555711051172270131433549208242031329517556169297662470417088272924671\n",
- "509258994083621521567111422102344540262867098416484062659035112338595324940834176545849343\n",
- "1018517988167243043134222844204689080525734196832968125318070224677190649881668353091698687\n",
- "2037035976334486086268445688409378161051468393665936250636140449354381299763336706183397375\n",
- "4074071952668972172536891376818756322102936787331872501272280898708762599526673412366794751\n",
- "8148143905337944345073782753637512644205873574663745002544561797417525199053346824733589503\n",
- "16296287810675888690147565507275025288411747149327490005089123594835050398106693649467179007\n",
- "32592575621351777380295131014550050576823494298654980010178247189670100796213387298934358015\n",
- "65185151242703554760590262029100101153646988597309960020356494379340201592426774597868716031\n",
- "130370302485407109521180524058200202307293977194619920040712988758680403184853549195737432063\n",
- "260740604970814219042361048116400404614587954389239840081425977517360806369707098391474864127\n",
- "521481209941628438084722096232800809229175908778479680162851955034721612739414196782949728255\n",
- "1042962419883256876169444192465601618458351817556959360325703910069443225478828393565899456511\n",
- "2085924839766513752338888384931203236916703635113918720651407820138886450957656787131798913023\n",
- "4171849679533027504677776769862406473833407270227837441302815640277772901915313574263597826047\n",
- "8343699359066055009355553539724812947666814540455674882605631280555545803830627148527195652095\n",
- "16687398718132110018711107079449625895333629080911349765211262561111091607661254297054391304191\n",
- "33374797436264220037422214158899251790667258161822699530422525122222183215322508594108782608383\n",
- "66749594872528440074844428317798503581334516323645399060845050244444366430645017188217565216767\n",
- "133499189745056880149688856635597007162669032647290798121690100488888732861290034376435130433535\n",
- "266998379490113760299377713271194014325338065294581596243380200977777465722580068752870260867071\n",
- "533996758980227520598755426542388028650676130589163192486760401955554931445160137505740521734143\n",
- "1067993517960455041197510853084776057301352261178326384973520803911109862890320275011481043468287\n",
- "2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936575\n",
- "4271974071841820164790043412339104229205409044713305539894083215644439451561281100045924173873151\n",
- "8543948143683640329580086824678208458410818089426611079788166431288878903122562200091848347746303\n",
- "17087896287367280659160173649356416916821636178853222159576332862577757806245124400183696695492607\n",
- "34175792574734561318320347298712833833643272357706444319152665725155515612490248800367393390985215\n",
- "68351585149469122636640694597425667667286544715412888638305331450311031224980497600734786781970431\n",
- "136703170298938245273281389194851335334573089430825777276610662900622062449960995201469573563940863\n",
- "273406340597876490546562778389702670669146178861651554553221325801244124899921990402939147127881727\n",
- "546812681195752981093125556779405341338292357723303109106442651602488249799843980805878294255763455\n",
- "1093625362391505962186251113558810682676584715446606218212885303204976499599687961611756588511526911\n",
- "2187250724783011924372502227117621365353169430893212436425770606409952999199375923223513177023053823\n",
- "4374501449566023848745004454235242730706338861786424872851541212819905998398751846447026354046107647\n",
- "8749002899132047697490008908470485461412677723572849745703082425639811996797503692894052708092215295\n",
- "17498005798264095394980017816940970922825355447145699491406164851279623993595007385788105416184430591\n",
- "34996011596528190789960035633881941845650710894291398982812329702559247987190014771576210832368861183\n",
- "69992023193056381579920071267763883691301421788582797965624659405118495974380029543152421664737722367\n",
- "139984046386112763159840142535527767382602843577165595931249318810236991948760059086304843329475444735\n",
- "279968092772225526319680285071055534765205687154331191862498637620473983897520118172609686658950889471\n",
- "559936185544451052639360570142111069530411374308662383724997275240947967795040236345219373317901778943\n",
- "1119872371088902105278721140284222139060822748617324767449994550481895935590080472690438746635803557887\n",
- "2239744742177804210557442280568444278121645497234649534899989100963791871180160945380877493271607115775\n",
- "4479489484355608421114884561136888556243290994469299069799978201927583742360321890761754986543214231551\n",
- "8958978968711216842229769122273777112486581988938598139599956403855167484720643781523509973086428463103\n",
- "17917957937422433684459538244547554224973163977877196279199912807710334969441287563047019946172856926207\n",
- "35835915874844867368919076489095108449946327955754392558399825615420669938882575126094039892345713852415\n",
- "71671831749689734737838152978190216899892655911508785116799651230841339877765150252188079784691427704831\n",
- "143343663499379469475676305956380433799785311823017570233599302461682679755530300504376159569382855409663\n",
- "286687326998758938951352611912760867599570623646035140467198604923365359511060601008752319138765710819327\n",
- "573374653997517877902705223825521735199141247292070280934397209846730719022121202017504638277531421638655\n",
- "1146749307995035755805410447651043470398282494584140561868794419693461438044242404035009276555062843277311\n",
- "2293498615990071511610820895302086940796564989168281123737588839386922876088484808070018553110125686554623\n",
- "4586997231980143023221641790604173881593129978336562247475177678773845752176969616140037106220251373109247\n",
- "9173994463960286046443283581208347763186259956673124494950355357547691504353939232280074212440502746218495\n",
- "18347988927920572092886567162416695526372519913346248989900710715095383008707878464560148424881005492436991\n",
- "36695977855841144185773134324833391052745039826692497979801421430190766017415756929120296849762010984873983\n",
- "73391955711682288371546268649666782105490079653384995959602842860381532034831513858240593699524021969747967\n",
- "146783911423364576743092537299333564210980159306769991919205685720763064069663027716481187399048043939495935\n",
- "293567822846729153486185074598667128421960318613539983838411371441526128139326055432962374798096087878991871\n",
- "587135645693458306972370149197334256843920637227079967676822742883052256278652110865924749596192175757983743\n",
- "1174271291386916613944740298394668513687841274454159935353645485766104512557304221731849499192384351515967487\n",
- "2348542582773833227889480596789337027375682548908319870707290971532209025114608443463698998384768703031934975\n",
- "4697085165547666455778961193578674054751365097816639741414581943064418050229216886927397996769537406063869951\n",
- "9394170331095332911557922387157348109502730195633279482829163886128836100458433773854795993539074812127739903\n",
- "18788340662190665823115844774314696219005460391266558965658327772257672200916867547709591987078149624255479807\n",
- "37576681324381331646231689548629392438010920782533117931316655544515344401833735095419183974156299248510959615\n",
- "75153362648762663292463379097258784876021841565066235862633311089030688803667470190838367948312598497021919231\n",
- "150306725297525326584926758194517569752043683130132471725266622178061377607334940381676735896625196994043838463\n",
- "300613450595050653169853516389035139504087366260264943450533244356122755214669880763353471793250393988087676927\n",
- "601226901190101306339707032778070279008174732520529886901066488712245510429339761526706943586500787976175353855\n",
- "1202453802380202612679414065556140558016349465041059773802132977424491020858679523053413887173001575952350707711\n",
- "2404907604760405225358828131112281116032698930082119547604265954848982041717359046106827774346003151904701415423\n",
- "4809815209520810450717656262224562232065397860164239095208531909697964083434718092213655548692006303809402830847\n",
- "9619630419041620901435312524449124464130795720328478190417063819395928166869436184427311097384012607618805661695\n",
- "19239260838083241802870625048898248928261591440656956380834127638791856333738872368854622194768025215237611323391\n",
- "38478521676166483605741250097796497856523182881313912761668255277583712667477744737709244389536050430475222646783\n",
- "76957043352332967211482500195592995713046365762627825523336510555167425334955489475418488779072100860950445293567\n",
- "153914086704665934422965000391185991426092731525255651046673021110334850669910978950836977558144201721900890587135\n",
- "307828173409331868845930000782371982852185463050511302093346042220669701339821957901673955116288403443801781174271\n",
- "615656346818663737691860001564743965704370926101022604186692084441339402679643915803347910232576806887603562348543\n",
- "1231312693637327475383720003129487931408741852202045208373384168882678805359287831606695820465153613775207124697087\n",
- "2462625387274654950767440006258975862817483704404090416746768337765357610718575663213391640930307227550414249394175\n",
- "4925250774549309901534880012517951725634967408808180833493536675530715221437151326426783281860614455100828498788351\n",
- "9850501549098619803069760025035903451269934817616361666987073351061430442874302652853566563721228910201656997576703\n",
- "19701003098197239606139520050071806902539869635232723333974146702122860885748605305707133127442457820403313995153407\n",
- "39402006196394479212279040100143613805079739270465446667948293404245721771497210611414266254884915640806627990306815\n",
- "78804012392788958424558080200287227610159478540930893335896586808491443542994421222828532509769831281613255980613631\n",
- "157608024785577916849116160400574455220318957081861786671793173616982887085988842445657065019539662563226511961227263\n",
- "315216049571155833698232320801148910440637914163723573343586347233965774171977684891314130039079325126453023922454527\n",
- "630432099142311667396464641602297820881275828327447146687172694467931548343955369782628260078158650252906047844909055\n",
- "1260864198284623334792929283204595641762551656654894293374345388935863096687910739565256520156317300505812095689818111\n",
- "2521728396569246669585858566409191283525103313309788586748690777871726193375821479130513040312634601011624191379636223\n",
- "5043456793138493339171717132818382567050206626619577173497381555743452386751642958261026080625269202023248382759272447\n",
- "10086913586276986678343434265636765134100413253239154346994763111486904773503285916522052161250538404046496765518544895\n",
- "20173827172553973356686868531273530268200826506478308693989526222973809547006571833044104322501076808092993531037089791\n",
- "40347654345107946713373737062547060536401653012956617387979052445947619094013143666088208645002153616185987062074179583\n",
- "80695308690215893426747474125094121072803306025913234775958104891895238188026287332176417290004307232371974124148359167\n",
- "161390617380431786853494948250188242145606612051826469551916209783790476376052574664352834580008614464743948248296718335\n",
- "322781234760863573706989896500376484291213224103652939103832419567580952752105149328705669160017228929487896496593436671\n",
- "645562469521727147413979793000752968582426448207305878207664839135161905504210298657411338320034457858975792993186873343\n",
- "1291124939043454294827959586001505937164852896414611756415329678270323811008420597314822676640068915717951585986373746687\n",
- "2582249878086908589655919172003011874329705792829223512830659356540647622016841194629645353280137831435903171972747493375\n",
- "5164499756173817179311838344006023748659411585658447025661318713081295244033682389259290706560275662871806343945494986751\n",
- "10328999512347634358623676688012047497318823171316894051322637426162590488067364778518581413120551325743612687890989973503\n",
- "20657999024695268717247353376024094994637646342633788102645274852325180976134729557037162826241102651487225375781979947007\n",
- "41315998049390537434494706752048189989275292685267576205290549704650361952269459114074325652482205302974450751563959894015\n",
- "82631996098781074868989413504096379978550585370535152410581099409300723904538918228148651304964410605948901503127919788031\n",
- "165263992197562149737978827008192759957101170741070304821162198818601447809077836456297302609928821211897803006255839576063\n",
- "330527984395124299475957654016385519914202341482140609642324397637202895618155672912594605219857642423795606012511679152127\n",
- "661055968790248598951915308032771039828404682964281219284648795274405791236311345825189210439715284847591212025023358304255\n",
- "1322111937580497197903830616065542079656809365928562438569297590548811582472622691650378420879430569695182424050046716608511\n",
- "2644223875160994395807661232131084159313618731857124877138595181097623164945245383300756841758861139390364848100093433217023\n",
- "5288447750321988791615322464262168318627237463714249754277190362195246329890490766601513683517722278780729696200186866434047\n",
- "10576895500643977583230644928524336637254474927428499508554380724390492659780981533203027367035444557561459392400373732868095\n",
- "21153791001287955166461289857048673274508949854856999017108761448780985319561963066406054734070889115122918784800747465736191\n",
- "42307582002575910332922579714097346549017899709713998034217522897561970639123926132812109468141778230245837569601494931472383\n",
- "84615164005151820665845159428194693098035799419427996068435045795123941278247852265624218936283556460491675139202989862944767\n",
- "169230328010303641331690318856389386196071598838855992136870091590247882556495704531248437872567112920983350278405979725889535\n",
- "338460656020607282663380637712778772392143197677711984273740183180495765112991409062496875745134225841966700556811959451779071\n",
- "676921312041214565326761275425557544784286395355423968547480366360991530225982818124993751490268451683933401113623918903558143\n",
- "1353842624082429130653522550851115089568572790710847937094960732721983060451965636249987502980536903367866802227247837807116287\n",
- "2707685248164858261307045101702230179137145581421695874189921465443966120903931272499975005961073806735733604454495675614232575\n",
- "5415370496329716522614090203404460358274291162843391748379842930887932241807862544999950011922147613471467208908991351228465151\n",
- "10830740992659433045228180406808920716548582325686783496759685861775864483615725089999900023844295226942934417817982702456930303\n",
- "21661481985318866090456360813617841433097164651373566993519371723551728967231450179999800047688590453885868835635965404913860607\n",
- "43322963970637732180912721627235682866194329302747133987038743447103457934462900359999600095377180907771737671271930809827721215\n",
- "86645927941275464361825443254471365732388658605494267974077486894206915868925800719999200190754361815543475342543861619655442431\n",
- "173291855882550928723650886508942731464777317210988535948154973788413831737851601439998400381508723631086950685087723239310884863\n",
- "346583711765101857447301773017885462929554634421977071896309947576827663475703202879996800763017447262173901370175446478621769727\n",
- "693167423530203714894603546035770925859109268843954143792619895153655326951406405759993601526034894524347802740350892957243539455\n",
- "1386334847060407429789207092071541851718218537687908287585239790307310653902812811519987203052069789048695605480701785914487078911\n",
- "2772669694120814859578414184143083703436437075375816575170479580614621307805625623039974406104139578097391210961403571828974157823\n",
- "5545339388241629719156828368286167406872874150751633150340959161229242615611251246079948812208279156194782421922807143657948315647\n",
- "11090678776483259438313656736572334813745748301503266300681918322458485231222502492159897624416558312389564843845614287315896631295\n",
- "22181357552966518876627313473144669627491496603006532601363836644916970462445004984319795248833116624779129687691228574631793262591\n",
- "44362715105933037753254626946289339254982993206013065202727673289833940924890009968639590497666233249558259375382457149263586525183\n",
- "88725430211866075506509253892578678509965986412026130405455346579667881849780019937279180995332466499116518750764914298527173050367\n",
- "177450860423732151013018507785157357019931972824052260810910693159335763699560039874558361990664932998233037501529828597054346100735\n",
- "354901720847464302026037015570314714039863945648104521621821386318671527399120079749116723981329865996466075003059657194108692201471\n",
- "709803441694928604052074031140629428079727891296209043243642772637343054798240159498233447962659731992932150006119314388217384402943\n",
- "1419606883389857208104148062281258856159455782592418086487285545274686109596480318996466895925319463985864300012238628776434768805887\n",
- "2839213766779714416208296124562517712318911565184836172974571090549372219192960637992933791850638927971728600024477257552869537611775\n",
- "5678427533559428832416592249125035424637823130369672345949142181098744438385921275985867583701277855943457200048954515105739075223551\n",
- "11356855067118857664833184498250070849275646260739344691898284362197488876771842551971735167402555711886914400097909030211478150447103\n",
- "22713710134237715329666368996500141698551292521478689383796568724394977753543685103943470334805111423773828800195818060422956300894207\n",
- "45427420268475430659332737993000283397102585042957378767593137448789955507087370207886940669610222847547657600391636120845912601788415\n",
- "90854840536950861318665475986000566794205170085914757535186274897579911014174740415773881339220445695095315200783272241691825203576831\n",
- "181709681073901722637330951972001133588410340171829515070372549795159822028349480831547762678440891390190630401566544483383650407153663\n",
- "363419362147803445274661903944002267176820680343659030140745099590319644056698961663095525356881782780381260803133088966767300814307327\n",
- "726838724295606890549323807888004534353641360687318060281490199180639288113397923326191050713763565560762521606266177933534601628614655\n",
- "1453677448591213781098647615776009068707282721374636120562980398361278576226795846652382101427527131121525043212532355867069203257229311\n",
- "2907354897182427562197295231552018137414565442749272241125960796722557152453591693304764202855054262243050086425064711734138406514458623\n",
- "5814709794364855124394590463104036274829130885498544482251921593445114304907183386609528405710108524486100172850129423468276813028917247\n",
- "11629419588729710248789180926208072549658261770997088964503843186890228609814366773219056811420217048972200345700258846936553626057834495\n",
- "23258839177459420497578361852416145099316523541994177929007686373780457219628733546438113622840434097944400691400517693873107252115668991\n",
- "46517678354918840995156723704832290198633047083988355858015372747560914439257467092876227245680868195888801382801035387746214504231337983\n",
- "93035356709837681990313447409664580397266094167976711716030745495121828878514934185752454491361736391777602765602070775492429008462675967\n",
- "186070713419675363980626894819329160794532188335953423432061490990243657757029868371504908982723472783555205531204141550984858016925351935\n",
- "372141426839350727961253789638658321589064376671906846864122981980487315514059736743009817965446945567110411062408283101969716033850703871\n",
- "744282853678701455922507579277316643178128753343813693728245963960974631028119473486019635930893891134220822124816566203939432067701407743\n",
- "1488565707357402911845015158554633286356257506687627387456491927921949262056238946972039271861787782268441644249633132407878864135402815487\n",
- "2977131414714805823690030317109266572712515013375254774912983855843898524112477893944078543723575564536883288499266264815757728270805630975\n",
- "5954262829429611647380060634218533145425030026750509549825967711687797048224955787888157087447151129073766576998532529631515456541611261951\n",
- "11908525658859223294760121268437066290850060053501019099651935423375594096449911575776314174894302258147533153997065059263030913083222523903\n",
- "23817051317718446589520242536874132581700120107002038199303870846751188192899823151552628349788604516295066307994130118526061826166445047807\n",
- "47634102635436893179040485073748265163400240214004076398607741693502376385799646303105256699577209032590132615988260237052123652332890095615\n",
- "95268205270873786358080970147496530326800480428008152797215483387004752771599292606210513399154418065180265231976520474104247304665780191231\n",
- "190536410541747572716161940294993060653600960856016305594430966774009505543198585212421026798308836130360530463953040948208494609331560382463\n",
- "381072821083495145432323880589986121307201921712032611188861933548019011086397170424842053596617672260721060927906081896416989218663120764927\n",
- "762145642166990290864647761179972242614403843424065222377723867096038022172794340849684107193235344521442121855812163792833978437326241529855\n",
- "1524291284333980581729295522359944485228807686848130444755447734192076044345588681699368214386470689042884243711624327585667956874652483059711\n",
- "3048582568667961163458591044719888970457615373696260889510895468384152088691177363398736428772941378085768487423248655171335913749304966119423\n",
- "6097165137335922326917182089439777940915230747392521779021790936768304177382354726797472857545882756171536974846497310342671827498609932238847\n",
- "12194330274671844653834364178879555881830461494785043558043581873536608354764709453594945715091765512343073949692994620685343654997219864477695\n",
- "24388660549343689307668728357759111763660922989570087116087163747073216709529418907189891430183531024686147899385989241370687309994439728955391\n",
- "48777321098687378615337456715518223527321845979140174232174327494146433419058837814379782860367062049372295798771978482741374619988879457910783\n",
- "97554642197374757230674913431036447054643691958280348464348654988292866838117675628759565720734124098744591597543956965482749239977758915821567\n",
- "195109284394749514461349826862072894109287383916560696928697309976585733676235351257519131441468248197489183195087913930965498479955517831643135\n",
- "390218568789499028922699653724145788218574767833121393857394619953171467352470702515038262882936496394978366390175827861930996959911035663286271\n",
- "780437137578998057845399307448291576437149535666242787714789239906342934704941405030076525765872992789956732780351655723861993919822071326572543\n",
- "1560874275157996115690798614896583152874299071332485575429578479812685869409882810060153051531745985579913465560703311447723987839644142653145087\n",
- "3121748550315992231381597229793166305748598142664971150859156959625371738819765620120306103063491971159826931121406622895447975679288285306290175\n",
- "6243497100631984462763194459586332611497196285329942301718313919250743477639531240240612206126983942319653862242813245790895951358576570612580351\n",
- "12486994201263968925526388919172665222994392570659884603436627838501486955279062480481224412253967884639307724485626491581791902717153141225160703\n",
- "24973988402527937851052777838345330445988785141319769206873255677002973910558124960962448824507935769278615448971252983163583805434306282450321407\n",
- "49947976805055875702105555676690660891977570282639538413746511354005947821116249921924897649015871538557230897942505966327167610868612564900642815\n",
- "99895953610111751404211111353381321783955140565279076827493022708011895642232499843849795298031743077114461795885011932654335221737225129801285631\n",
- "199791907220223502808422222706762643567910281130558153654986045416023791284464999687699590596063486154228923591770023865308670443474450259602571263\n",
- "399583814440447005616844445413525287135820562261116307309972090832047582568929999375399181192126972308457847183540047730617340886948900519205142527\n",
- "799167628880894011233688890827050574271641124522232614619944181664095165137859998750798362384253944616915694367080095461234681773897801038410285055\n",
- "1598335257761788022467377781654101148543282249044465229239888363328190330275719997501596724768507889233831388734160190922469363547795602076820570111\n",
- "3196670515523576044934755563308202297086564498088930458479776726656380660551439995003193449537015778467662777468320381844938727095591204153641140223\n",
- "6393341031047152089869511126616404594173128996177860916959553453312761321102879990006386899074031556935325554936640763689877454191182408307282280447\n",
- "12786682062094304179739022253232809188346257992355721833919106906625522642205759980012773798148063113870651109873281527379754908382364816614564560895\n",
- "25573364124188608359478044506465618376692515984711443667838213813251045284411519960025547596296126227741302219746563054759509816764729633229129121791\n",
- "51146728248377216718956089012931236753385031969422887335676427626502090568823039920051095192592252455482604439493126109519019633529459266458258243583\n",
- "102293456496754433437912178025862473506770063938845774671352855253004181137646079840102190385184504910965208878986252219038039267058918532916516487167\n",
- "204586912993508866875824356051724947013540127877691549342705710506008362275292159680204380770369009821930417757972504438076078534117837065833032974335\n",
- "409173825987017733751648712103449894027080255755383098685411421012016724550584319360408761540738019643860835515945008876152157068235674131666065948671\n",
- "818347651974035467503297424206899788054160511510766197370822842024033449101168638720817523081476039287721671031890017752304314136471348263332131897343\n",
- "1636695303948070935006594848413799576108321023021532394741645684048066898202337277441635046162952078575443342063780035504608628272942696526664263794687\n"
- ]
- }
- ],
- "source": [
- "for i in range(500):\n",
- " print(2**i - 1)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3 (ipykernel)",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.10.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 4
-}
diff --git a/docs/source/examples/Notebook/Typesetting Equations.ipynb b/docs/source/examples/Notebook/Typesetting Equations.ipynb
deleted file mode 100644
index 761d03e50..000000000
--- a/docs/source/examples/Notebook/Typesetting Equations.ipynb
+++ /dev/null
@@ -1,280 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The Markdown parser included in the Jupyter Notebook is MathJax-aware. This means that you can freely mix in mathematical expressions using the [MathJax subset of Tex and LaTeX](https://docs.mathjax.org/en/latest/input/tex/). [Some examples from the MathJax demos site](https://mathjax.github.io/MathJax-demos-web/) are reproduced below, as well as the Markdown+TeX source."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Motivating Examples\n",
- "\n",
- "## The Lorenz Equations\n",
- "### Source\n",
- "```\n",
- "\\begin{align}\n",
- "\\dot{x} & = \\sigma(y-x) \\\\\n",
- "\\dot{y} & = \\rho x - y - xz \\\\\n",
- "\\dot{z} & = -\\beta z + xy\n",
- "\\end{align}\n",
- "```\n",
- "### Display\n",
- "\n",
- "$\\begin{align}\n",
- "\\dot{x} & = \\sigma(y-x) \\\\\n",
- "\\dot{y} & = \\rho x - y - xz \\\\\n",
- "\\dot{z} & = -\\beta z + xy\n",
- "\\end{align}$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## The Cauchy-Schwarz Inequality\n",
- "### Source\n",
- "```\n",
- "\\begin{equation*}\n",
- "\\left( \\sum_{k=1}^n a_k b_k \\right)^2 \\leq \\left( \\sum_{k=1}^n a_k^2 \\right) \\left( \\sum_{k=1}^n b_k^2 \\right)\n",
- "\\end{equation*}\n",
- "```\n",
- "### Display\n",
- "\n",
- "$\\begin{equation*}\n",
- "\\left( \\sum_{k=1}^n a_k b_k \\right)^2 \\leq \\left( \\sum_{k=1}^n a_k^2 \\right) \\left( \\sum_{k=1}^n b_k^2 \\right)\n",
- "\\end{equation*}$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## A Cross Product Formula\n",
- "### Source\n",
- "```\n",
- "\\begin{equation*}\n",
- "\\mathbf{V}_1 \\times \\mathbf{V}_2 = \\begin{vmatrix}\n",
- "\\mathbf{i} & \\mathbf{j} & \\mathbf{k} \\\\\n",
- "\\frac{\\partial X}{\\partial u} & \\frac{\\partial Y}{\\partial u} & 0 \\\\\n",
- "\\frac{\\partial X}{\\partial v} & \\frac{\\partial Y}{\\partial v} & 0\n",
- "\\end{vmatrix} \n",
- "\\end{equation*}\n",
- "```\n",
- "### Display\n",
- "\n",
- "$\\begin{equation*}\n",
- "\\mathbf{V}_1 \\times \\mathbf{V}_2 = \\begin{vmatrix}\n",
- "\\mathbf{i} & \\mathbf{j} & \\mathbf{k} \\\\\n",
- "\\frac{\\partial X}{\\partial u} & \\frac{\\partial Y}{\\partial u} & 0 \\\\\n",
- "\\frac{\\partial X}{\\partial v} & \\frac{\\partial Y}{\\partial v} & 0\n",
- "\\end{vmatrix} \n",
- "\\end{equation*}$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## The probability of getting \\(k\\) heads when flipping \\(n\\) coins is\n",
- "### Source\n",
- "```\n",
- "\\begin{equation*}\n",
- "P(E) = {n \\choose k} p^k (1-p)^{ n-k} \n",
- "\\end{equation*}\n",
- "```\n",
- "### Display\n",
- "\n",
- "$\\begin{equation*}\n",
- "P(E) = {n \\choose k} p^k (1-p)^{ n-k} \n",
- "\\end{equation*}$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## An Identity of Ramanujan\n",
- "### Source\n",
- "```\n",
- "\\begin{equation*}\n",
- "\\frac{1}{\\Bigl(\\sqrt{\\phi \\sqrt{5}}-\\phi\\Bigr) e^{\\frac25 \\pi}} =\n",
- "1+\\frac{e^{-2\\pi}} {1+\\frac{e^{-4\\pi}} {1+\\frac{e^{-6\\pi}}\n",
- "{1+\\frac{e^{-8\\pi}} {1+\\ldots} } } } \n",
- "\\end{equation*}\n",
- "```\n",
- "### Display\n",
- "$\\begin{equation*}\n",
- "\\frac{1}{\\Bigl(\\sqrt{\\phi \\sqrt{5}}-\\phi\\Bigr) e^{\\frac25 \\pi}} =\n",
- "1+\\frac{e^{-2\\pi}} {1+\\frac{e^{-4\\pi}} {1+\\frac{e^{-6\\pi}}\n",
- "{1+\\frac{e^{-8\\pi}} {1+\\ldots} } } } \n",
- "\\end{equation*}$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## A Rogers-Ramanujan Identity\n",
- "### Source\n",
- "```\n",
- "\\begin{equation*}\n",
- "1 + \\frac{q^2}{(1-q)}+\\frac{q^6}{(1-q)(1-q^2)}+\\cdots =\n",
- "\\prod_{j=0}^{\\infty}\\frac{1}{(1-q^{5j+2})(1-q^{5j+3})},\n",
- "\\quad\\quad \\text{for $|q|<1$}. \n",
- "\\end{equation*}\n",
- "```\n",
- "### Display\n",
- "\n",
- "$$\\begin{equation*}\n",
- "1 + \\frac{q^2}{(1-q)}+\\frac{q^6}{(1-q)(1-q^2)}+\\cdots =\n",
- "\\prod_{j=0}^{\\infty}\\frac{1}{(1-q^{5j+2})(1-q^{5j+3})},\n",
- "\\quad\\quad \\text{for $|q|<1$}. \n",
- "\\end{equation*}$$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Maxwell's Equations\n",
- "### Source\n",
- "```\n",
- "\\begin{align}\n",
- "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\ \\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
- "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
- "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
- "\\end{align}\n",
- "```\n",
- "### Display\n",
- "\n",
- "$\\begin{align}\n",
- "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\ \\nabla \\cdot \\vec{\\mathbf{E}} & = 4 \\pi \\rho \\\\\n",
- "\\nabla \\times \\vec{\\mathbf{E}}\\, +\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{B}}}{\\partial t} & = \\vec{\\mathbf{0}} \\\\\n",
- "\\nabla \\cdot \\vec{\\mathbf{B}} & = 0 \n",
- "\\end{align}$"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Equation Numbering and References\n",
- "\n",
- "Equation numbering and referencing will be available in a future version of the Jupyter notebook."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Inline Typesetting (Mixing Markdown and TeX)\n",
- "\n",
- "While display equations look good for a page of samples, the ability to mix math and *formatted* **text** in a paragraph is also important.\n",
- "\n",
- "### Source\n",
- "```\n",
- "This expression $\\sqrt{3x-1}+(1+x)^2$ is an example of a TeX inline equation in a [Markdown-formatted](https://daringfireball.net/projects/markdown/) sentence. \n",
- "```\n",
- "\n",
- "### Display\n",
- "This expression $\\sqrt{3x-1}+(1+x)^2$ is an example of a TeX inline equation in a [Markdown-formatted](https://daringfireball.net/projects/markdown/) sentence. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Other Syntax\n",
- "\n",
- "You will notice in other places on the web that `$$` are needed explicitly to begin and end MathJax typesetting. This is **not** required if you will be using TeX environments, but the Jupyter notebook will accept this syntax on legacy notebooks. \n",
- "\n",
- "## Source\n",
- "\n",
- "```\n",
- "$$\n",
- "\\begin{array}{c}\n",
- "y_1 \\\\\\\n",
- "y_2 \\mathtt{t}_i \\\\\\\n",
- "z_{3,4}\n",
- "\\end{array}\n",
- "$$\n",
- "```\n",
- "\n",
- "```\n",
- "$$\n",
- "\\begin{array}{c}\n",
- "y_1 \\cr\n",
- "y_2 \\mathtt{t}_i \\cr\n",
- "y_{3}\n",
- "\\end{array}\n",
- "$$\n",
- "```\n",
- "\n",
- "```\n",
- "$$\\begin{eqnarray} \n",
- "x' &=& &x \\sin\\phi &+& z \\cos\\phi \\\\\n",
- "z' &=& - &x \\cos\\phi &+& z \\sin\\phi \\\\\n",
- "\\end{eqnarray}$$\n",
- "```\n",
- "\n",
- "```\n",
- "$$\n",
- "x=4\n",
- "$$\n",
- "```\n",
- "\n",
- "## Display\n",
- "\n",
- "$$\n",
- "\\begin{array}{c}\n",
- "y_1 \\\\\\\n",
- "y_2 \\mathtt{t}_i \\\\\\\n",
- "z_{3,4}\n",
- "\\end{array}\n",
- "$$\n",
- "\n",
- "$$\n",
- "\\begin{array}{c}\n",
- "y_1 \\cr\n",
- "y_2 \\mathtt{t}_i \\cr\n",
- "y_{3}\n",
- "\\end{array}\n",
- "$$\n",
- "\n",
- "$$\\begin{eqnarray} \n",
- "x' &=& &x \\sin\\phi &+& z \\cos\\phi \\\\\n",
- "z' &=& - &x \\cos\\phi &+& z \\sin\\phi \\\\\n",
- "\\end{eqnarray}$$\n",
- "\n",
- "$$\n",
- "x=4\n",
- "$$"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.7.3"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/docs/source/examples/Notebook/What is the Jupyter Notebook.ipynb b/docs/source/examples/Notebook/What is the Jupyter Notebook.ipynb
deleted file mode 100644
index 8534f2330..000000000
--- a/docs/source/examples/Notebook/What is the Jupyter Notebook.ipynb
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "# What is the Jupyter Notebook?"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Introduction"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The Jupyter Notebook is an **interactive computing environment** that enables users to author notebook documents that include: \n",
- "- Live code\n",
- "- Interactive widgets\n",
- "- Plots\n",
- "- Narrative text\n",
- "- Equations\n",
- "- Images\n",
- "- Video\n",
- "\n",
- "These documents provide a **complete and self-contained record of a computation** that can be converted to various formats and shared with others using email, [Dropbox](https://www.dropbox.com/), version control systems (like git/[GitHub](https://github.com)) or [nbviewer.jupyter.org](https://nbviewer.jupyter.org)."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "### Components"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The Jupyter Notebook combines three components:\n",
- "\n",
- "* **The notebook web application**: An interactive web application for writing and running code interactively and authoring notebook documents.\n",
- "* **Kernels**: Separate processes started by the notebook web application that runs users' code in a given language and returns output back to the notebook web application. The kernel also handles things like computations for interactive widgets, tab completion and introspection. \n",
- "* **Notebook documents**: Self-contained documents that contain a representation of all content visible in the notebook web application, including inputs and outputs of the computations, narrative\n",
- "text, equations, images, and rich media representations of objects. Each notebook document has its own kernel."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Notebook web application"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "The notebook web application enables users to:\n",
- "\n",
- "* **Edit code in the browser**, with automatic syntax highlighting, indentation, and tab completion/introspection.\n",
- "* **Run code from the browser**, with the results of computations attached to the code which generated them.\n",
- "* See the results of computations with **rich media representations**, such as HTML, LaTeX, PNG, SVG, PDF, etc.\n",
- "* Create and use **interactive JavaScript widgets**, which bind interactive user interface controls and visualizations to reactive kernel side computations.\n",
- "* Author **narrative text** using the [Markdown](https://daringfireball.net/projects/markdown/) markup language.\n",
- "* Include mathematical equations using **LaTeX syntax in Markdown**, which are rendered in-browser by [MathJax](https://www.mathjax.org/)."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Kernels"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Through Jupyter's kernel and messaging architecture, the Notebook allows code to be run in a range of different programming languages. For each notebook document that a user opens, the web application starts a kernel that runs the code for that notebook. Each kernel is capable of running code in a single programming language and there are kernels available in the following languages:\n",
- "\n",
- "* Python(https://github.com/ipython/ipython)\n",
- "* Julia (https://github.com/JuliaLang/IJulia.jl)\n",
- "* R (https://github.com/IRkernel/IRkernel)\n",
- "* Ruby (https://github.com/minrk/iruby)\n",
- "* Haskell (https://github.com/gibiansky/IHaskell)\n",
- "* Scala (https://github.com/Bridgewater/scala-notebook)\n",
- "* node.js (https://gist.github.com/Carreau/4279371)\n",
- "* Go (https://github.com/takluyver/igo)\n",
- "\n",
- "The default kernel runs Python code. The notebook provides a simple way for users to pick which of these kernels is used for a given notebook. \n",
- "\n",
- "Each of these kernels communicate with the notebook web application and web browser using a JSON over ZeroMQ/WebSockets message protocol that is described [here](https://jupyter-client.readthedocs.io/en/latest/messaging.html#messaging). Most users don't need to know about these details, but it helps to understand that \"kernels run code.\""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {
- "slideshow": {
- "slide_type": "slide"
- }
- },
- "source": [
- "## Notebook documents"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Notebook documents contain the **inputs and outputs** of an interactive session as well as **narrative text** that accompanies the code but is not meant for execution. **Rich output** generated by running code, including HTML, images, video, and plots, is embeddeed in the notebook, which makes it a complete and self-contained record of a computation. "
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "When you run the notebook web application on your computer, notebook documents are just **files on your local filesystem with a** `.ipynb` **extension**. This allows you to use familiar workflows for organizing your notebooks into folders and sharing them with others."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Notebooks consist of a **linear sequence of cells**. There are three basic cell types:\n",
- "\n",
- "* **Code cells:** Input and output of live code that is run in the kernel\n",
- "* **Markdown cells:** Narrative text with embedded LaTeX equations\n",
- "* **Raw cells:** Unformatted text that is included, without modification, when notebooks are converted to different formats using nbconvert\n",
- "\n",
- "Internally, notebook documents are [JSON](https://en.wikipedia.org/wiki/JSON) **data** with **binary values** [base64](https://en.wikipedia.org/wiki/Base64) encoded. This allows them to be **read and manipulated programmatically** by any programming language. Because JSON is a text format, notebook documents are version control friendly.\n",
- "\n",
- "**Notebooks can be exported** to different static formats including HTML, reStructeredText, LaTeX, PDF, and slide shows ([reveal.js](https://revealjs.com)) using Jupyter's `nbconvert` utility.\n",
- "\n",
- "Furthermore, any notebook document available from a **public URL or on GitHub can be shared** via [nbviewer](https://nbviewer.jupyter.org). This service loads the notebook document from the URL and renders it as a static web page. The resulting web page may thus be shared with others **without their needing to install the Jupyter Notebook**."
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.7.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/docs/source/examples/Notebook/Working With Markdown Cells.ipynb b/docs/source/examples/Notebook/Working With Markdown Cells.ipynb
deleted file mode 100644
index 82f6864bd..000000000
--- a/docs/source/examples/Notebook/Working With Markdown Cells.ipynb
+++ /dev/null
@@ -1,369 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# Markdown Cells"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Text can be added to Jupyter Notebooks using Markdown cells. You can change the cell type to Markdown by using the `Cell` menu, the toolbar, or the key shortcut `m`. Markdown is a popular markup language that is a superset of HTML. Its specification can be found here:\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Markdown basics"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can make text *italic* or **bold** by surrounding a block of text with a single or double * respectively"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can build nested itemized or enumerated lists:\n",
- "\n",
- "* One\n",
- " - Sublist\n",
- " - This\n",
- " - Sublist\n",
- " - That\n",
- " - The other thing\n",
- "* Two\n",
- " - Sublist\n",
- "* Three\n",
- " - Sublist\n",
- "\n",
- "Now another list:\n",
- "\n",
- "1. Here we go\n",
- " 1. Sublist\n",
- " 2. Sublist\n",
- "2. There we go\n",
- "3. Now this"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can add horizontal rules:\n",
- "\n",
- "---"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Here is a blockquote:\n",
- "\n",
- "> Beautiful is better than ugly.\n",
- "> Explicit is better than implicit.\n",
- "> Simple is better than complex.\n",
- "> Complex is better than complicated.\n",
- "> Flat is better than nested.\n",
- "> Sparse is better than dense.\n",
- "> Readability counts.\n",
- "> Special cases aren't special enough to break the rules.\n",
- "> Although practicality beats purity.\n",
- "> Errors should never pass silently.\n",
- "> Unless explicitly silenced.\n",
- "> In the face of ambiguity, refuse the temptation to guess.\n",
- "> There should be one-- and preferably only one --obvious way to do it.\n",
- "> Although that way may not be obvious at first unless you're Dutch.\n",
- "> Now is better than never.\n",
- "> Although never is often better than *right* now.\n",
- "> If the implementation is hard to explain, it's a bad idea.\n",
- "> If the implementation is easy to explain, it may be a good idea.\n",
- "> Namespaces are one honking great idea -- let's do more of those!"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "And shorthand for links:\n",
- "\n",
- "[Jupyter's website](https://jupyter.org)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can use backslash \\ to generate literal characters which would otherwise have special meaning in the Markdown syntax.\n",
- "\n",
- "```\n",
- "\\*literal asterisks\\*\n",
- " *literal asterisks*\n",
- "```\n",
- "\n",
- "Use double backslash \\ \\ to generate the literal $ symbol."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Headings"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can add headings by starting a line with one (or multiple) `#` followed by a space, as in the following example:\n",
- "\n",
- "```\n",
- "# Heading 1\n",
- "# Heading 2\n",
- "## Heading 2.1\n",
- "## Heading 2.2\n",
- "```"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Embedded code"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "You can embed code meant for illustration instead of execution in Python:\n",
- "\n",
- " def f(x):\n",
- " \"\"\"a docstring\"\"\"\n",
- " return x**2\n",
- "\n",
- "or other languages:\n",
- "\n",
- " for (i=0; i\n",
- "
\n",
- "
Header 1
\n",
- "
Header 2
\n",
- "
\n",
- "
\n",
- "
row 1, cell 1
\n",
- "
row 1, cell 2
\n",
- "
\n",
- "
\n",
- "
row 2, cell 1
\n",
- "
row 2, cell 2
\n",
- "
\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## Local files"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "If you have local files in your Notebook directory, you can refer to these files in Markdown cells directly:\n",
- "\n",
- " [subdirectory/]\n",
- "\n",
- "For example, in the images folder, we have the Python logo:\n",
- "\n",
- " \n",
- "\n",
- "\n",
- "\n",
- "and a video with the HTML5 video tag:\n",
- "\n",
- " \n",
- "\n",
- "\n",
- "\n",
- "These do not embed the data into the notebook file, and require that the files exist when you are viewing the notebook."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Security of local files"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Note that this means that the Jupyter notebook server also acts as a generic file server\n",
- "for files inside the same tree as your notebooks. Access is not granted outside the\n",
- "notebook folder so you have strict control over what files are visible, but for this\n",
- "reason it is highly recommended that you do not run the notebook server with a notebook\n",
- "directory at a high level in your filesystem (e.g. your home directory).\n",
- "\n",
- "When you run the notebook in a password-protected manner, local file access is restricted\n",
- "to authenticated users unless read-only views are active."
- ]
- },
- {
- "attachments": {
- "pycon-logo.jpg": {
- "image/jpeg": "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wwFLUXxDFNS9srVKbE1EY0t20AWVo/BAxBIcm/CVxiLnd+D8sSVNhM9eEg2cIChfkf8APNnAIoW5nCRMlTYTPT/wD//aAAwDAQACAAMAAAAQ8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888YU88888888888888888888888888s8skcw84Mw488888888888888888cYMIcc8g4c8ss44IU088888888888888oQYYQocMMc8MAoYQ4Qc888888888888M8I88888462088E88csU8888888888888s088zGfI4zEvKz88s088888888888888883/y2EWUV6np2/788888888888888888E4E0VUVUVpVpGI5I888888888888888E+XVcQeSZbiYjVpU+J8888888xw05KAxASQTCCCCCCCCCCwjiAxAG14wxDCCCGEMLJDEHP+sMMc+PLIDFHMIKCCCDL7eVPd/48004088808888w8w0vlbJu3H88/Q8N84s08wI4Ak08gkEMYM08t6sv8APPPK7LnfLGKPKPPAOFPOHAPAPPPLHnF/PPPPvovPLHKHJNOCEFPKGGEAONPPEvvvPPPPMPPPPPPHDHPHDPPPPHPHDPPPPMPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP/EACkRAQABAgMHBQEBAQAAAAAAAAEAETEhQaFRYXGBkcHRIECx4fAwgBD/2gAIAQMBAT8Q/wBHoXHWCWHX3Vpg9au79SWIOOMuD5YfEuqsEq7wGXQOUuqksD54/MsQ8MJg9aO/9SX9p9QHWJ5WwtGuscA5+KwNR0aYbt74g7EOeOW/CGwAKxTOajtNa+WBYihcHbtlGQVywy3RqNRRhY8y3RnFrDEieVsbT6gOvsXz0CVPD1MsbF1Y4vYxmOiErlhsJrO01r5ZqO01r5ZqO01r5ZpTvNb2JpTvNT2IEBphRLczxSCFbMsyh4+oh56j/Z+uBKxcBY/Zyg4Op+oAtAe01r5ZSCMc3dLY3Zm2D4McwZcYhi8zNvGEI8cwZcY9EKybeMppKhcG3fFJCuSbCVAFjM3xsQ49iaU7whai9iVHF1H1KzMVc/Zw++D67FnFJdjyx+JbKvLzSHvPGh5jLJxa9iMsHJ8x0yJiVrFr9ZgZQ6zzMSS/zvEcGY9dRlk6zMStY65kJdOT5hLLwadmPvHCj4l8qcvFZZjzw+ZYt4JNxamvprZQCqJwlo1B3ibg5kRdHN8QzdbxDNHSDz/HOGd+ucM19Pubz0+5vPT7jkvp9xyv1zi8vxzjkjpHJ1vEBZ6nxB2DzJeNQ94BVA4RLL07y0NYadAq0p9xYhHCFKoziIwxSodu2UrlWhQDLtD4uwDZPZoLLH6uRsJaBqD+rBzniA2bI0ojKDEC4Qw6hVpT7/7VKWxErqxo6Y/HiHUcSnMvrK5cs4fftadcu4fUMSwA1whqrnTD58ymVtifTVRfF5iTEqjqYdGjCFWKhhYPamlhjCrFQJgUB0MerVlFV8Xj0gisxGcmkrayav59vSxk+PxEJzaQAFj1FAUY9Ll9udLhhQFD/An/xAApEQEAAQMBBwQDAQEAAAAAAAABABExQSFAUWGBkaGxIOHw8RAw0YBx/9oACAECAQE/EP8AR4mIhja9cpQ4wd9Za4LAlkDnBrMbgl7hd9JrlKnDZdR0EszXfDc241Y0VxvgyKFMaRuVdCdhOyPEJbF7NIBmr/usyWO6HWvvvLM13zUdRsNNFWZFZWDrgywA6BnYTsjxOwnZHidhOyPE838TzfxdUFTryYUyYzMCspoo/uNXJoK++DnviMyq0nZHiUQK6S6ljxKuLpuYLW2MMrYNNzCkuxhlYB5MIFnJiqCziVAJ5sV1Rh475mor746ueu4jLE4q9DnMAmV2wd1ltzhQPHpFNaehArH67gVmGjpF8ek4UtuLsswu2YBBWo85cnLiHKcSA9NSKUAgfvEcvSJ2H5zjhUcbifv7Sv7+0+Vnys+VnysH9/aB+/tDO4ZVDdvznBcvSC/eKUBlT08CCU9qpxgYADGIqMDFRfKSrdTMULEQXHYwFwggZlfaFKkXqG1NVhEVWJgCEq7RXj+bvc0lGrNeukarulf5NNWPOy66s+ZXpcGI0aFOst9306Q2Zx4D/e1YDYERKzsqIGIBYM48F/nak0gsekVVJRxmUHe2eo7kq6xFVV9RG6Qm2Gzs2xjG6/4E/8QAKxABAAEDAwMEAgMBAQEBAAAAAREAITFBUWEQcYGRobHwIMEwQFDR4fGg/9oACAEBAAE/EP8A8D0mu+WNg3XAGaixhshqjfSU8VJDDJq+y4cOn+8bXeMAD4ljkp1MhdQRRkWISKzBrEC1WIDvXu/6cEZTFBZGTFpWxJOaG3gxE7xMIcOHzmkl9RfCmJSgmcdCCRzFXsplCLIXugIdihiAWH6pyHjqL+Pw0xFtYmDFs9JBFAyoHaRJFe9fAILn1/7q9XoohodmEqCVYEyUBBbGxem8nmrEs3ciLchmbR1ib4LysBlXYqU02Ccq3lFAEEJEbJ/mEBJhlpJhS+pDHiJQrGKM6i3iWru5rJtjEO9qgyhMBhFkguKCnsBcNagJeIq5CDks6klMlZEacwnrT22U5hCeb3qLwDIO6UyBLvLAK8geTWJsmfQtS4M9rEufrSmMhKM0geIfwkchJa+JuFnfvRILNJKCFxcRp61I6Jcosj29ApJD1DCciYExLDS7DoA5wNkokYiNaixTk0wHddKGa/BB2YbPD/hHhdQgBlWsIaKmdo/tRV+wHHesooPsSOvEmvHQrBFcmWGCcTN8UgPCGJlaQHDPFZUB4zwB3hUuAaiyJMTAZzZ60zxjKleUuJNFrTGUTj5HUVMPPANp0Y9Cp3QHcw9kpD7rkhutvSk8FGJs90+mrgIsbk7dsfKklYsp7ABaNiObh50QBPZFNe7KcbSfFR2By3I/1TiIBbmSfv8AC6ISxwAr2VcFvJiCI+sVA1g8QoFtXIUkL2wna55aa6HDIra1xfNMqjvKg2HKccKirYunMoHIClXXIBG4irGES1n5+oDYyg+aJsCRGRN/7yS6owIlV0Ap5XpMMYULye7tOCIKC83IQHCrzVrznKMXT1KLzoVgbNwyYJeO5T9ibKXUtAyPakre5Shkl4iUjYqQdDCSAlmyZxGrxZRQYhw3Uj35iF8LYyHNqs2G9vYD0KJ4QNsLfgF9KCabIXCLtKvFSLfDOFpPQKB5Ag5We3Nqmt7XHkgKRFNGkwMbspcCQO6hOIlaG8VTHuhBZHvUkgWWWNn7olszkkaHyOKcxAZEYLyz1QFUAurpUjbIwtvqelE6y6YH8BUKi5bpxQZlbeCj60TlPZkpLIizNOEjGuBcHcVVq9irothL2Oy8qIo09uBEpEwUgKkoxmgW6ZKK5N4YwtFw5pO1DLJqOFKl0gZWbgpjmo3oFD3BZO39wi51p2+Qnmi0p4tiUk2BY5d+jQqgSEgEYoGAdc0fiEhLJzFCdqW1FliLHAg7t6IRIZYWBWy907KSdDZluvJk340ITMIrB7ICpjfQBMknQlGsUm7hLEsh02HubVMqGRvCe0LupV3X5Rz5KvWpXEiUBACGSRwyzEXHhdTZ4QmLFrzOaiZEOvMJySzGvajly+1fO5CSThrVdWxru0Ea5ih+TZRWlpMCPqFMLA9HgJhQQHGtdrTHjfVS1BrDJSW4LquW8WCht+TCRWwkSdtDD0SeeeoB4LNT2CmCMCKlpcRm1O6AcrmdF4fC2oYA1RJYXpR80BFuUECIQmEuRyTPilPEDOBORMgEYWahzzhDAPcFnQ0oZzUtEReBPakQBIAfuBqLVOL3iYlCASpgsFDvIZjkwkhITNrAN4Wfe2sdiVC6mcUKojBehRLQBBCRGyf2lcow3oXgTQfKZhIlaaCiOz0gKv8AB8m1LWaJRrDUSgSPgVmTfa1gWKvbLMJRKDlY80rRLfEu0ahA8blJAVNWWI7oonl3pxynKRcenHoUqPb5mQ88nka0st8FaWCExCxOtK5Wx3JQnVba0QLkLPYCJO80vEIIGYFuOF/Nn4hpA5E1KHZQwdgCwcHU7eSgDbXHE0t1plDqwZeaMokIb7S5sNrTmZoAiIcFYz4SozRdFoKPhElAkaJnGTbTKkM3rMF7riR2v4VdT/XXPohP708OxsgFj2LiFCgjBeyThJ78KiCiQwlg4fAKVQuUkpddYJbblSMnlyUD3QAdgoch34MoXhK1CgF4X0Rizcbn9kkJzSEiGyKVKvZeFmFcyD3EpT2CZN3AAedXzthCG4wBFsHGKnxUQmAI7cM7wa0kmk25cnW/Ow3pBIblPoOdkJEWJFhjBKbGq9TELEkgtYBpX1TrBKMqFqGAIAwBp/ScD3OnhrhndKGeDUsImFTSzaps8AEhhpNkls2oA1I0BW9ul4mn7y2yLLgqckxa7kzA4NF65OeybVJlaruj4aO4jDUu54F5spvCHlvUQBLGxLGrJOsrSgEAmATUHEImaclQ+zIOWAaHdIWA0B/bQMMiyd5SmlfsUkGIdBYETi1S+fBEQhC0ZIZmN2gA7JAiAAwB/JxN9B70WWOnylDBLSbJ8NOCWE3D5abLDT4SnE30nt+SOJASD9Oo6UzYLCJfE7XvzRUrolQzKt1VWek2DfB4IieYoTN2ShINWJQMxShQLSrgWmYuQ5msc+8pFlN2AG8UDqVnoRTZ9AXo+nTS3mbQpPYtBH/sbM4YGU3b4P7qgykaYL+GE8TQlSTYh3Wog7DufwbKIOXgnNEBrCEfQKc0bKTzBD1aaOnCE9RpEhZkngQpai5Uvv8AiNBcKH2oEBYgnhUoo68JT0CnNWykcwS9SiE1lAHqFbqIOThjH5kZtJVJhUSvLT1VU0helM1vJRlmwvMAtyBDgUD76VbkjLiN/wC/EiJgaZsiSGwZlrjCbE6x+ALchIN1bFAzlBlOXaOw03xasTl3ntFZuwA3l/EkpLAErR8wkVA3WK+7fqib3PZISDX3OLcpkoLIkJ+ObsAF5KL4tGZwbz3mgYyhynBtHcKBbkJBuJZ/ITgoCFBLBC1LxQVEQCOUMTtoAf4Rojk8HK0APhv8kM+w71gkgsrg289VgtAJV2Cuzmy9LvamTqS8xowR6NZw/pilLIqBZXyri8SPtX2u3T375dOLxI+9R1gAMBLEUj9t9gg4CUkK6ORxcH0K7ObL0u9qZuRCJCPXJJBZXLt5oAfDf5KZ9x2o0RyeDhP8bNJ/QNbbF+1SjRPoVhPLfqs80ERm6y8FEDX2j1pkF0A3Blfp9rt09++XT7Xbp798uv0++vYfj1mgdFfPWoJnLE4OF14fFI7jgGfwt4eso0T6lYTyXrFJ/UNb7N+/+Hms4+XQDV4KVhkoMHupg7Hl6x1YwnM+TwS1aC7tptjX6uxQ6/nARgDHT375dPtdunv3y6fa7dPfvl1+n317D8ev0++vYfjR6/hyGyOavBdy82zp9HZoNDIXWjFnxr1VgkBMnuLgbPhrFZx8Oomjw/4D86jfrd+T0mpxlNyE6D956WaQt0wZe1BCmkcHd1oYqYAQF3T7Xbp798un2u3T375dPtdunv3y6/T769h+PX6ffXsPx6jcRRJG+pM8toYPA8NnilOLEcn/AJz0nGUXKRoP3mj5xG/W58nrH97c+CAfuGvapo5Gy9jY46ClRTPOHwHmKvRGQG3q6HBbp798un2u3T375dPtdunv3y6fa7dPfvl1+n317D8ev0++vYfj1+n317D8atpOIB23U4bUqVFM8Y/A+J6TRyNh7O5xWx8EAfdNO39zcZiBPe2PNL0ZNE3XoTsPsBs5em9WSECBX2u3T375dEbiFAWk8h3FNoVkAZFmn0kbL+6Ml45VGCKS/wC1PEqPJUswV91/VD8ccidMUnqeGm/5LWZcc191/Vfdf1VyIgLikaLpGESQvRwTO5KPSTuP7pf6SBElcpNKhAi27tNQ5EwLbp9Pvr2H49LpCBApnYfYDdy9d+h4GRRDUa2OYoD3tz+sfJmZL5U+jhkFHgWnEXH1IrPHz/uKlJQSzurCWMxFS/RMlTRr+hTKt4Mrk1OKjEgFgMBtSS+Cf1V8opgDaxS+fW0JVgELxMVIXbMjP9WAs2JCKvLdWVnmou1Ahd0mjAtSLHyKSHyT+qnEglgcjvRKv4Mrg0OKdP0Kh+iZCioSUFs5qSEnMRWePn/U04A5+pFPg44FT4Uo+TMyXw/hm5gyJ+i1LSxpP4lSAscHyKi2yPtgUmAPkx7nxQCFP1LNLMDsj4lSl40C9FpKIqsq6/56QREZE0qEtGgXoNLEDsj5lAAUfUkVEAfJn3fiotuj7YlIAWeT5NQ0s6T+ZUXMOBP0GtOCzhD9f2uRHKlRpW4h8Vwm5L8V9K/VfSv1TpaEwr9UaWpMC/VfSv1X0r9Vwm4L8VGlboHxXIjlD+1rwWcAfuouIh/Aflf4QSEwBK1c2nNhPFIZokyJyMBqrYyVBwn5o9BoEeLm/CkAibyPd/WkLNP/ANuaF9PPxTPfbC+IpYZR3/7qDh01S/dQWEzefzU5l7t8lRNuIIMHpToQsoD9VxIIQfy8SCElGhAyCP1UzfiGTJ6VGYexfBUllM2j8VJya6ofulllPb/up6fvlfM0L6+fmiFmn/5cUAUXaB7n60CvFzflU3CPin1CpaGN6S1EslCYosbzi4vikSAyJCfwzcTL+C/IVGWjvELQ0Drg+BKdIZ1/5lFF8BQisIlnD6Vo271gAVIGEiyWcXJ2qL9kfAowsMKsA07UAJJ4FLZagVeLByyDQiXgprBFLoytLhcAlVwFDLQ6zkbS9V/xz00NU5G0PUKXC6BCJkaKwRS4MjUCrxYGsh0Zk4agm7s8u4Vpw7KUkRlbl04NYAFSJhIut3FiN61ZdqWo4CABqrYyU6wxr/3KaR0yfIlTl47RKUG+OEhMwKSUAAACANOhRnGN+zyEnJz0jY/ssZHhLPenatymV6rkZK+v3dAKSggjb/vEeOeiyXAAtlnsL90/AhnWvxCUmlJxdTHgXo2/g4BlVwUatJNNwlmhgMqIANWscbAbyW6FLmQ4OJSaGokiSJ1lsVw57XTPXZ6dcZjDx0gKZwXAYeH8XYlAQvEtHeWSAbiWev8A8inCho9fwYG4maA8sCiMCYbPo7UgKoBdXSoOgAkdpHNQ9eATO6B1kSCfiWkDhHU6rD0CC268C/ceiSAgrb/rKeeKYKLp9Y6PBIoGFxY5WDzU7H9knAcBY7dAjHLH6NAy8vHQCAIkI60b44SEzChL+KYBqIkW+yzGydLBiXXA+chOzvX1+6mmU0MJcTkJfFJSqq3V1rkwKyselAdIiGHVO7L+AlnMCBGcABamfIMbULBPcofwpVNkNUbspwpcx4pBBHiVeKVgpGMYDvJHCq3V0pDd4geaRdbZI4TSzrEF7hlthnUoHZaUWH2fZ1IU80CuAjb8Jse5EpDQsizwIR8iUlf8yHiV4PBZmmr+Rp7JGPM0tABETMldJROENGpWVViSBR0YWryeGj0HRcGXF6fKJ8CiR0TegX7vosBd0f3+AGe5k7u4N3goI517XgmDYIKAJIEIwjYjMMSPpQnid0ZPIlK/Y5E9R0Qu0OVk1CGgrsAy67001Iw2RGVh2iYvNT83sGIfC7nUvAoSFAWWzGEZoa34U8gmJJYeXehcxO4CFNYl6tMuEiSQUJXiSncmEKWS1OPBbIjR4VPHUKgcRzDcOzFcGBWRj0pKEUS4mlKm08sqC7ykPnpcARjlD0yV7m3TEXZiZF/ukxsP8JmpGEvIsd5e3RirIJgBlcJJ5pgZd2FmsAVzCAT4D136cvDmQ9gg/wDH4x9AAkb8lRQ9dKwTZkpKgIbin5CkIFfcQPBh8Vdc0RF9J7Q9KRNkUsXPvYeClt6QXLseSB4pSlBwmwsj7HpRdk8hlkrqwB4qQNiwQTCFBWY3ovBKMgITrcamFbDkJPSoMl8cS4AwBBG0U0pP6vcoAiDIjcaaGG7nqQF8193sfhcdD4OcFtMLFC8SgiSVhsIW/wCKIgNrKJvp5pQVnXIsseyV9DvUxpZiJQrzUxtYGCSeUmeaIMAAgNKGfZYPcKSqaywe9fQ71GGMVDxAYSB9aMO1lkBYXIBL3pKMyzDfpKfiu1P6J7hb/wBdHEmcrEl6Cnk2pqocqScz84YDwAdIUSXSAi52h7/xWErYQF+DgZPHQucgobjj3pP5cnLRtSGXSwBQ7IReF0/VfT8UIBbK86a/MKJYHKpS111sGHuDohqfLL5j7GmMftMZkuqEnmgAAALAadEPuPyUiQT+r3OgzgonJwO0z2193sfih8DIDSrwA0DizKYCXhntXFgCgA9Cvod6zZjsYvJ50FBz6yFMmNr24jpI+g2r6HfpR2f4w7LmFSX2f0HPJc8fiuyUXhdP1D1p1IBIUMI0n8GTkoucAKbBn36TJ3Gkjfh4WDz/AB5YDwzv9oer0bQBgbkz0vWBbtMD3j0/JSETwggiYaISM/bkMo1Zi9DyIdGNkluYewadIOwK1uns1tDxponUkPuPyUiQT+r3KZMHaU9xbstIPDhgiwSAgk6mK+72Pxm/1JcQ8EJRNYmosCAPKe+7p9DvWOiQ3hUNMITPO1RY6VgQgGgB0kfQbV9Dv0hHTZmZjakBSPo1GPoj8rUoWrTI9p9ejaEMDYmemSq9MbfdPofxw4wkdQu8MNLfTZkGE9esPCIhfEHqr0/IoqTWJw8hJR1CAwBFrDY9OrmJUnFqgguo7gp8vVD7ilsddMIsEDzQiILyDcRMn4SJBP6vcr6HeuClYIMmPIV93sfjcKHlEhRyrm1AK2M4kPZHQ+h3qEdY4uuIOyr+jqTkfQbV9Dv0pOUCNhFu8J8VYN8Ii6/QflLwiAXxJ6i9eq3wyZRgPWoK0SGgXeWX+SxyPLGX3nozZEAZWjjQibjPuP5fR5/n9gIZHxbJJ4PXpL9lqECg3vEcU1c5EBgjSYmKbCoGRI9RpOFlJiReoJ60ykKELBIgC3ZeJqXe1ugnfevq9yvod65AlAyr/hB4V93sfhvPve5jkZeKeobS5uQ1CTxRAyABAXdYHmj3cPKCREyNNSCI5XQ+EpjVjjJBQzI43qDJ5r4E4aoFt2oUmHdxH4r6Davod+mLkEux2EJow4QYBAeh+RxozNxn2CmbIhHI9LnI8MZPeP5fcnCR9XToUi4uisp9PzlqJENxGvkG3P4FsKGF4ZNhhR2omuZ2AFFpV24N+jNAS8JExaTWRPFqBili0cwo8VYigsbJhwOiZ1dGnCeRUEIGS5lphG0xmo5Mw2xvIz7VOM4QZCyXZi6hdgoXldqkuY0kJ4qHB2DQmZYBquzpFOVcyg3dhSJ0miPLPRkwsAO7a34Z8OATDYGInmr+giXXaiqEoiuRvRLSAVIIW7exvaghfMY4iIbaGJGamgqAw3iKeSjvpdimReQ3AIm8uOnNAzUjiYmrWuRQA0AydyuYyXqDwb1dH34ARF4lmWIj+AIFxdJYRxfp7k4Sfq6/ymC+8CBNCRC9KSHttjCFss+f88D22ThA3WfPSk4L7yaA0BEB/wDgH//ZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA="
- }
- },
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Markdown attachments\n",
- "\n",
- "Since Jupyter notebook version 5.0, in addition to referencing external file you can attach a file to a markdown cell. \n",
- "To do so drag the file from in a markdown cell while editing it:\n",
- "\n",
- "\n",
- "\n",
- "Files are stored in cell metadata and will be automatically scrubbed at save-time if not referenced. You can recognized attached images from other files by their url that starts with `attachment:`. For the image above:\n",
- "\n",
- " \n",
- " \n",
- "Keep in mind that attached files will increase the size of your notebook. \n",
- "\n",
- "You can manually edit the attachment by using the `View > Cell Toolbar > Attachment` menu, but you should not need to. "
- ]
- }
- ],
- "metadata": {
- "anaconda-cloud": {},
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.7.2"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 1
-}
diff --git a/docs/source/examples/Notebook/examples_index.rst b/docs/source/examples/Notebook/examples_index.rst
deleted file mode 100644
index 5f3cb084e..000000000
--- a/docs/source/examples/Notebook/examples_index.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-=================
-Notebook Examples
-=================
-
-The pages in this section are all converted notebook files. You can also
-`view these notebooks on nbviewer`__.
-
-__ https://nbviewer.jupyter.org/github/jupyter/notebook/blob/main/
- docs/source/examples/Notebook/
-
-.. toctree::
- :maxdepth: 2
-
- What is the Jupyter Notebook
- Notebook Basics
- Running Code
- Working With Markdown Cells
- Custom Keyboard Shortcuts
- Importing Notebooks
- Connecting with the Qt Console
- Typesetting Equations
diff --git a/docs/source/examples/Notebook/images/command_mode.png b/docs/source/examples/Notebook/images/command_mode.png
deleted file mode 100644
index 4482de3e0..000000000
Binary files a/docs/source/examples/Notebook/images/command_mode.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/images/dashboard_files_tab.png b/docs/source/examples/Notebook/images/dashboard_files_tab.png
deleted file mode 100644
index 1809d7cb6..000000000
Binary files a/docs/source/examples/Notebook/images/dashboard_files_tab.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/images/dashboard_files_tab_btns.png b/docs/source/examples/Notebook/images/dashboard_files_tab_btns.png
deleted file mode 100644
index b76af88e3..000000000
Binary files a/docs/source/examples/Notebook/images/dashboard_files_tab_btns.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/images/dashboard_files_tab_new.png b/docs/source/examples/Notebook/images/dashboard_files_tab_new.png
deleted file mode 100644
index d0d02f894..000000000
Binary files a/docs/source/examples/Notebook/images/dashboard_files_tab_new.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/images/dashboard_files_tab_run.png b/docs/source/examples/Notebook/images/dashboard_files_tab_run.png
deleted file mode 100644
index 65c7259f6..000000000
Binary files a/docs/source/examples/Notebook/images/dashboard_files_tab_run.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/images/dashboard_running_tab.png b/docs/source/examples/Notebook/images/dashboard_running_tab.png
deleted file mode 100644
index 54f2bd27c..000000000
Binary files a/docs/source/examples/Notebook/images/dashboard_running_tab.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/images/edit_mode.png b/docs/source/examples/Notebook/images/edit_mode.png
deleted file mode 100644
index 9d52aaaa9..000000000
Binary files a/docs/source/examples/Notebook/images/edit_mode.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/images/menubar_toolbar.png b/docs/source/examples/Notebook/images/menubar_toolbar.png
deleted file mode 100644
index c22d96088..000000000
Binary files a/docs/source/examples/Notebook/images/menubar_toolbar.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/images/nbconvert_arch.png b/docs/source/examples/Notebook/images/nbconvert_arch.png
deleted file mode 100644
index 27cd69b79..000000000
Binary files a/docs/source/examples/Notebook/images/nbconvert_arch.png and /dev/null differ
diff --git a/docs/source/examples/Notebook/nbpackage/__init__.py b/docs/source/examples/Notebook/nbpackage/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/docs/source/examples/Notebook/nbpackage/mynotebook.ipynb b/docs/source/examples/Notebook/nbpackage/mynotebook.ipynb
deleted file mode 100644
index 191e181af..000000000
--- a/docs/source/examples/Notebook/nbpackage/mynotebook.ipynb
+++ /dev/null
@@ -1,69 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# My Notebook"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "def foo():\n",
- " return \"foo\""
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "def has_ip_syntax():\n",
- " listing = !ls\n",
- " return listing"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 4,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "def whatsmyname():\n",
- " return __name__"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.1+"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
diff --git a/docs/source/examples/Notebook/nbpackage/nbs/__init__.py b/docs/source/examples/Notebook/nbpackage/nbs/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/docs/source/examples/Notebook/nbpackage/nbs/other.ipynb b/docs/source/examples/Notebook/nbpackage/nbs/other.ipynb
deleted file mode 100644
index 43825b896..000000000
--- a/docs/source/examples/Notebook/nbpackage/nbs/other.ipynb
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Other notebook\n",
- "\n",
- "This notebook just defines `bar`"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 2,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "def bar(x):\n",
- " return \"bar\" * x"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.5.1"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
-}
diff --git a/docs/source/examples/images/FrontendKernel.graffle/data.plist b/docs/source/examples/images/FrontendKernel.graffle/data.plist
deleted file mode 100644
index 6179209c4..000000000
--- a/docs/source/examples/images/FrontendKernel.graffle/data.plist
+++ /dev/null
@@ -1,461 +0,0 @@
-
-
-
-
- ActiveLayerIndex
- 0
- ApplicationVersion
-
- com.omnigroup.OmniGraffle
- 139.18.0.187838
-
- AutoAdjust
-
- BackgroundGraphic
-
- Bounds
- {{0, 0}, {576, 733}}
- Class
- SolidGraphic
- ID
- 2
- Style
-
- shadow
-
- Draws
- NO
-
- stroke
-
- Draws
- NO
-
-
-
- BaseZoom
- 0
- CanvasOrigin
- {0, 0}
- ColumnAlign
- 1
- ColumnSpacing
- 36
- CreationDate
- 2014-05-27 21:39:30 +0000
- Creator
- bgranger
- DisplayScale
- 1 0/72 in = 1.0000 in
- GraphDocumentVersion
- 8
- GraphicsList
-
-
- Class
- LineGraphic
- ControlPoints
-
- {0, 0}
- {-7, 8}
- {6.9999849080788863, -8.0000033519149838}
- {0, 0}
-
- ID
- 29
- Points
-
- {164, 341.5}
- {186.5, 338}
- {196, 327.5}
-
- Style
-
- stroke
-
- Bezier
-
- HeadArrow
- 0
- Legacy
-
- LineType
- 1
- TailArrow
- 0
-
-
-
-
- Bounds
- {{107.64779663085938, 305.5}, {69.088050842285156, 84.499992370605469}}
- Class
- ShapedGraphic
- ID
- 9
- ImageID
- 1
- Shape
- Rectangle
- Style
-
- fill
-
- Draws
- NO
-
- shadow
-
- Draws
- NO
-
- stroke
-
- Draws
- NO
-
-
-
-
- Class
- LineGraphic
- Head
-
- ID
- 6
- Position
- 0.53676468133926392
-
- ID
- 8
- Points
-
- {288.09285678056523, 276}
- {288.49999833106995, 304.50001973116196}
-
- Style
-
- stroke
-
- HeadArrow
- FilledArrow
- Legacy
-
- LineType
- 1
- TailArrow
- 0
-
-
- Tail
-
- ID
- 7
-
-
-
- Bounds
- {{207, 263}, {162, 13}}
- Class
- ShapedGraphic
- FitText
- YES
- Flow
- Resize
- ID
- 7
- Shape
- Rectangle
- Style
-
- fill
-
- Draws
- NO
-
- shadow
-
- Draws
- NO
-
- stroke
-
- Draws
- NO
-
-
- Text
-
- Pad
- 0
- Text
- {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf190
-\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 xkcd-Regular;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs20 \cf0 Interactive Computing Protocol}
- VerticalPad
- 0
-
- Wrap
- NO
-
-
- Class
- LineGraphic
- Head
-
- ID
- 1
-
- ID
- 6
- Points
-
- {252, 304.50001973116196}
- {320, 304.50001973116196}
-
- Style
-
- stroke
-
- HeadArrow
- FilledArrow
- Legacy
-
- LineType
- 1
- Pattern
- 1
- TailArrow
- FilledArrow
-
-
- Tail
-
- ID
- 5
-
-
-
- Bounds
- {{186.5, 286.5}, {65, 36}}
- Class
- ShapedGraphic
- ID
- 5
- Shape
- Rectangle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- Text
- {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf190
-\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 xkcd-Regular;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs20 \cf0 Frontend}
-
-
-
- Bounds
- {{320.5, 286.5}, {65, 36}}
- Class
- ShapedGraphic
- ID
- 1
- Shape
- Rectangle
- Style
-
- shadow
-
- Draws
- NO
-
-
- Text
-
- Text
- {\rtf1\ansi\ansicpg1252\cocoartf1265\cocoasubrtf190
-\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 xkcd-Regular;}
-{\colortbl;\red255\green255\blue255;}
-\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-
-\f0\fs20 \cf0 Kernel}
-
-
-
- GridInfo
-
- GuidesLocked
- NO
- GuidesVisible
- YES
- HPages
- 1
- ImageCounter
- 2
- ImageLinkBack
-
-
-
- ImageList
-
- image1.png
-
- KeepToScale
-
- Layers
-
-
- Lock
- NO
- Name
- Layer 1
- Print
- YES
- View
- YES
-
-
- LayoutInfo
-
- Animate
- NO
- circoMinDist
- 18
- circoSeparation
- 0.0
- layoutEngine
- dot
- neatoSeparation
- 0.0
- twopiSeparation
- 0.0
-
- LinksVisible
- NO
- MagnetsVisible
- NO
- MasterSheets
-
- ModificationDate
- 2014-05-27 22:28:18 +0000
- Modifier
- bgranger
- NotesVisible
- NO
- Orientation
- 2
- OriginVisible
- NO
- PageBreaks
- YES
- PrintInfo
-
- NSBottomMargin
-
- float
- 41
-
- NSHorizonalPagination
-
- coded
- BAtzdHJlYW10eXBlZIHoA4QBQISEhAhOU051bWJlcgCEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAFxlwCG
-
- NSLeftMargin
-
- float
- 18
-
- NSPaperSize
-
- size
- {612, 792}
-
- NSPrintReverseOrientation
-
- int
- 0
-
- NSRightMargin
-
- float
- 18
-
- NSTopMargin
-
- float
- 18
-
-
- PrintOnePage
-
- ReadOnly
- NO
- RowAlign
- 1
- RowSpacing
- 36
- SheetTitle
- Canvas 1
- SmartAlignmentGuidesActive
- YES
- SmartDistanceGuidesActive
- YES
- UniqueID
- 1
- UseEntirePage
-
- VPages
- 1
- WindowInfo
-
- CurrentSheet
- 0
- ExpandedCanvases
-
-
- name
- Canvas 1
-
-
- Frame
- {{277, 7}, {832, 871}}
- ListView
-
- OutlineWidth
- 142
- RightSidebar
-
- ShowRuler
-
- Sidebar
-
- SidebarWidth
- 120
- VisibleRegion
- {{96.5, 197.5}, {348.5, 366}}
- Zoom
- 2
- ZoomValues
-
-
- Canvas 1
- 2
- 1
-
-
-
-
-
diff --git a/docs/source/examples/images/FrontendKernel.graffle/image1.png b/docs/source/examples/images/FrontendKernel.graffle/image1.png
deleted file mode 100644
index c01e3497f..000000000
Binary files a/docs/source/examples/images/FrontendKernel.graffle/image1.png and /dev/null differ
diff --git a/docs/source/examples/images/FrontendKernel.png b/docs/source/examples/images/FrontendKernel.png
deleted file mode 100644
index 62aa89027..000000000
Binary files a/docs/source/examples/images/FrontendKernel.png and /dev/null differ
diff --git a/docs/source/examples/images/animation.m4v b/docs/source/examples/images/animation.m4v
deleted file mode 100644
index 13ecf88c5..000000000
Binary files a/docs/source/examples/images/animation.m4v and /dev/null differ
diff --git a/docs/source/examples/images/ipython_logo.png b/docs/source/examples/images/ipython_logo.png
deleted file mode 100644
index e9bdce394..000000000
Binary files a/docs/source/examples/images/ipython_logo.png and /dev/null differ
diff --git a/docs/source/examples/images/jupyter_logo.png b/docs/source/examples/images/jupyter_logo.png
deleted file mode 100644
index 3f3f57ff3..000000000
Binary files a/docs/source/examples/images/jupyter_logo.png and /dev/null differ
diff --git a/docs/source/examples/images/python_logo.svg b/docs/source/examples/images/python_logo.svg
deleted file mode 100644
index 116eaac31..000000000
--- a/docs/source/examples/images/python_logo.svg
+++ /dev/null
@@ -1,269 +0,0 @@
-
-
-
diff --git a/docs/source/examples/utils/list_pyfiles.ipy b/docs/source/examples/utils/list_pyfiles.ipy
deleted file mode 100644
index 4b15482e7..000000000
--- a/docs/source/examples/utils/list_pyfiles.ipy
+++ /dev/null
@@ -1,6 +0,0 @@
-# A simple IPython script that provides Notebook links to .py files in the cwd
-
-from IPython.display import FileLink, display
-files =!ls *.py
-for f in files:
- display(FileLink(f))
diff --git a/docs/source/examples/utils/list_subdirs.ipy b/docs/source/examples/utils/list_subdirs.ipy
deleted file mode 100644
index b8a161245..000000000
--- a/docs/source/examples/utils/list_subdirs.ipy
+++ /dev/null
@@ -1,7 +0,0 @@
-# A simple IPython script that lists files in all subdirs
-
-from IPython.display import FileLinks, display
-dirs =!ls -d */
-for d in dirs:
- if d != '__pycache__/':
- display(FileLinks(d))
diff --git a/docs/source/extending/frontend_extensions.md b/docs/source/extending/frontend_extensions.md
deleted file mode 100644
index fe938e453..000000000
--- a/docs/source/extending/frontend_extensions.md
+++ /dev/null
@@ -1,17 +0,0 @@
-(frontend-extensions)=
-
-# Custom front-end extensions
-
-This describes the basic steps to write a TypeScript extension for the Jupyter
-notebook front-end. This allows you to customize the behaviour of the various
-pages like the dashboard, the notebook, or the text editor.
-
-Starting with Notebook 7, front-end extensions for the notebook can be developed
-as prebuilt JupyterLab extensions.
-
-This means Notebook 7 is able to reuse many of the existing extensions from the JupyterLab ecosystem as is.
-
-If you would like to develop a prebuilt extension for Notebook 7, check out:
-
-- [JupyterLab Extension Tutorial](https://jupyterlab.readthedocs.io/en/latest/extension/extension_tutorial.html): A tutorial to learn how to make a simple JupyterLab extension.
-- The [JupyterLab Extension Examples Repository](https://github.com/jupyterlab/extension-examples): A repository containing many examples of JupyterLab extensions for performing various tasks: adding commands, adding a new widget, handling user settings, etc.
diff --git a/docs/source/extending/index.md b/docs/source/extending/index.md
deleted file mode 100644
index e97928a44..000000000
--- a/docs/source/extending/index.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Extending the Notebook
-
-```{warning}
-Please note that the extension system for Notebook 7 is radically different
-from the one used in Notebook 6.5.x and earlier. If you are looking for
-information on how to extend the classic Notebook, please refer to the
-[documentation for NbClassic](https://nbclassic.readthedocs.io/en/latest/extending/index.html).
-```
-
-```{note}
-With Notebook 7 being developed on top of JupyterLab and Jupyter Server, the
-frontend extension system is now based on the same extension system used by JupyterLab.
-
-Server extensions are also now based on the same system used by Jupyter Server.
-You will find below a link to the relevant documentations.
-```
-
-Certain subsystems of the notebook server are designed to be extended or
-overridden by users. These documents explain these systems, and show how to
-override the notebook's defaults with your own custom behavior.
-
-```{toctree}
-:maxdepth: 2
-
-Extending the Jupyter Server
-frontend_extensions
-```
diff --git a/docs/source/index.md b/docs/source/index.md
deleted file mode 100644
index a6c13c568..000000000
--- a/docs/source/index.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# Jupyter Notebook Documentation
-
-Welcome to the **Jupyter Notebook** documentation site. **Jupyter Notebook**
-is a simplified notebook authoring application, and is a part of [Project
-Jupyter](https://docs.jupyter.org/en/latest/), a large umbrella project
-centered around the goal of providing tools (and [standards](https://docs.jupyter.org/en/latest/#sub-project-documentation))
-for interactive computing with [computational notebooks](https://docs.jupyter.org/en/latest/#what-is-a-notebook).
-
-A [computational notebook](https://docs.jupyter.org/en/latest/#what-is-a-notebook)
-is a shareable document that combines computer
-code, plain language descriptions, data, rich visualizations like 3D models,
-charts, graphs and figures, and interactive controls. A notebook, along with
-an editor like **Jupyter Notebook**, provides a fast interactive environment for
-prototyping and explaining code, exploring and visualizing data, and sharing
-ideas with others.
-
-**Jupyter Notebook** is a sibling to other notebook authoring applications under
-the Project Jupyter umbrella, like [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/)
-and [Jupyter Desktop](https://github.com/jupyterlab/jupyterlab-desktop).
-Jupyter Notebook offers a lightweight, simplified experience compared to JupyterLab.
-
-Read more about how to use **Jupyter Notebook** on this site, in the [User
-Documentation](notebook.md).
-
-```{image} ./_static/images/notebook-running-code.png
-
-```
-
-- [Installation](https://jupyter.readthedocs.io/en/latest/install.html)
-- [Starting the Notebook](https://jupyter.readthedocs.io/en/latest/running.html)
-
-```{toctree}
-:maxdepth: 2
-
-user-documentation
-configuration
-migrate_to_notebook7
-contributor
-changelog
-```
diff --git a/docs/source/ipython_security.asc b/docs/source/ipython_security.asc
deleted file mode 100644
index 95436812a..000000000
--- a/docs/source/ipython_security.asc
+++ /dev/null
@@ -1,52 +0,0 @@
------BEGIN PGP PUBLIC KEY BLOCK-----
-Version: GnuPG v2.0.22 (GNU/Linux)
-
-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
-5vmLc+Ibz+eT+rM=
-=XVDe
------END PGP PUBLIC KEY BLOCK-----
diff --git a/docs/source/links.txt b/docs/source/links.txt
deleted file mode 100644
index 1d4820bf9..000000000
--- a/docs/source/links.txt
+++ /dev/null
@@ -1,41 +0,0 @@
-.. This (-*- rst -*-) format file contains commonly used link targets
- and name substitutions. It may be included in many files,
- therefore it should only contain link targets and name
- substitutions. Try grepping for "^\.\. _" to find plausible
- candidates for this list.
-
- NOTE: this file must have an extension *opposite* to that of the main reST
- files in the manuals, so that we can include it with ".. include::"
- directives, but without triggering warnings from Sphinx for not being listed
- in any toctree. Since IPython uses .txt for the main files, this one will
- use .rst.
-
- NOTE: reST targets are
- __not_case_sensitive__, so only one target definition is needed for
- ipython, IPython, etc.
-
- NOTE: Some of these were taken from the nipy links compendium.
-
-.. Main Jupyter notebook links
-
-.. _Notebook Basics: notebook_p2_
-.. _notebook_p2: https://nbviewer.jupyter.org/github/jupyter/notebook/blob/main/docs/source/examples/Notebook/Notebook%20Basics.ipynb
-
-.. _Running Code in the Jupyter Notebook: notebook_p1_
-.. _notebook_p1: https://nbviewer.jupyter.org/github/jupyter/notebook/blob/main/docs/source/examples/Notebook/Running%20Code.ipynb
-
-.. Other python projects
-.. _matplotlib: https://matplotlib.org
-.. _nbviewer: https://nbviewer.jupyter.org
-.. _nbconvert: https://nbconvert.readthedocs.io/en/latest/
-
-.. Other tools and projects
-.. _Markdown: https://daringfireball.net/projects/markdown/syntax
-
-.. _Rich Output: notebook_p5_
-.. _notebook_p5: https://nbviewer.jupyter.org/github/ipython/ipython/blob/main/examples/IPython%20Kernel/Rich%20Output.ipynb
-
-.. _Plotting with Matplotlib: notebook_p3_
-.. _notebook_p3: https://nbviewer.jupyter.org/github/ipython/ipython/blob/main/examples/IPython%20Kernel/Plotting%20in%20the%20Notebook.ipynb
-
-.. _Working with Markdown Cells: https://nbviewer.jupyter.org/github/jupyter/notebook/blob/main/docs/source/examples/Notebook/Working%20With%20Markdown%20Cells.ipynb
diff --git a/docs/source/migrate_to_notebook7.md b/docs/source/migrate_to_notebook7.md
deleted file mode 100644
index 4fdf3e2f4..000000000
--- a/docs/source/migrate_to_notebook7.md
+++ /dev/null
@@ -1,84 +0,0 @@
-# Migrating
-
-_Updated 2023-05-17_
-
-```{warning}
-Version 7 of the Jupyter Notebook application might break your
-extensions or other customizations. Please read this page to find out if you
-need to take any actions to ensure a smooth, uninterrupted experience.
-```
-
-A major upgrade to the Jupyter Notebook interface is coming with Notebook 7! This
-upgrade will bring a heap of new features, but will also break backwards
-compatibility with many classic Notebook features and customizations.
-
-This set of guides is here to help you migrate your Classic Notebook setup and
-extensions to the new Notebook 7.
-
-## What you need to do
-
-For users who don't use extensions or other customizations, you will seamlessly
-receive the new Notebook 7 when you `pip install notebook` once version 7 is
-released out of beta, along with all its new features, like realtime
-collaboration, debugger, and theming.
-
-For users who need to use extensions or other customizations, you have a couple
-of options:
-
-- Look for Notebook 7 compatible versions of the extensions you already use,
- and [find replacements for those that are not available]
-
-- If you need to maintain compatibility with the Classic Notebook for extensions
- or other customizations that are critical to your workflows, you can switch to
- [nbclassic], which will provide compatibility with the old notebook interface
- and support during an intermediate transition period to Notebook 7
-
-## Why a new version?
-
-For the past few years, the Classic Jupyter Notebook has been in maintenance
-mode.
-
-Development has mostly moved to alternative user interfaces like JupyterLab,
-which is a more modern and extensible web application. This has resulted in
-a lot of new features and improvements in JupyterLab, but also in a lot of
-new features and improvements that were not possible to integrate to the
-Classic Notebook.
-
-For a while, the plan was to progressively _sunset_ the Classic Notebook and
-not maintain it anymore. However, the Classic Notebook is still widely used
-and it is still the default user interface for Jupyter in many scenarios.
-Many users and organizations have not been able to switch to JupyterLab yet.
-For some users, JupyterLab can also be a more complex environment to use,
-especially for beginners.
-
-Following the feedback from the community, it was decided in late 2021 to
-continue developing the Jupyter Notebook application and _sunrise_ it as
-Notebook 7.
-
-You can find more details about the changes currently taking place in the
-Jupyter Ecosystem in the [JEP 79] and [team-compass note].
-
-## New features in Notebook 7
-
-```{toctree}
-:maxdepth: 2
-
-notebook_7_features.md
-```
-
-## Migration Guides
-
-```{toctree}
-:maxdepth: 2
-
-migrating/frontend-extensions.md
-migrating/server-extensions.md
-migrating/server-imports.md
-migrating/custom-themes.md
-migrating/multiple-interfaces.md
-```
-
-[jep 79]: https://jupyter.org/enhancement-proposals/79-notebook-v7/notebook-v7.html
-[team-compass note]: https://github.com/jupyter/notebook-team-compass/issues/5#issuecomment-1085254000
-[find replacements for those that are not available]: https://jupyter-notebook.readthedocs.io/en/latest/migrating/frontend-extensions.html#jupyterlab-equivalent-extensions-to-the-classic-notebook
-[nbclassic]: https://github.com/jupyter/nbclassic
diff --git a/docs/source/migrating/custom-themes.md b/docs/source/migrating/custom-themes.md
deleted file mode 100644
index dfb7a55c2..000000000
--- a/docs/source/migrating/custom-themes.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Custom themes in Notebook 7
-
-In Notebook 7, the way to create custom themes has changed. This means that custom themes developed for Notebook 6 or earlier will not work with Notebook 7 and upwards.
-
-This is for example the case for community contributed themes such as [jupyter-themes](https://github.com/dunovank/jupyter-themes).
-
-## Using a custom theme
-
-Fortunately installing a custom theme for Notebook 7 is very easy. It is the same process as installing a regular extension.
-
-For example let's say you want to install the [JupyterLab Night](https://github.com/jupyterlab-contrib/jupyterlab-night) theme. You can do so by running the following command:
-
-```bash
-pip install jupyterlab-night
-```
-
-Then refresh the page and you should see the new theme available in the settings menu:
-
-
-
-There are already many themes available on [PyPI](https://pypi.org/search/?q=jupyterlab-theme).
-
-You can also find other themes using the `jupyterlab-theme` topic on GitHub: https://github.com/topics/jupyterlab-theme
-
-For example:
-
-- [https://github.com/johnnybarrels/jupyterlab_onedarkpro](https://github.com/johnnybarrels/jupyterlab_onedarkpro)
-- [https://github.com/dunovank/jupyterlab_legos_ui](https://github.com/dunovank/jupyterlab_legos_ui)
-- [https://github.com/timkpaine/jupyterlab_miami_nights](https://github.com/timkpaine/jupyterlab_miami_nights)
-
-## Creating a custom theme
-
-Creating a custom theme for Notebook 7 follows the same process as creating a custom theme for JupyterLab 4.
-
-See the {ref}`Frontend Extension Guide ` to get you started. When creating the extension, select the `Theme` option in the cookiecutter prompt.
diff --git a/docs/source/migrating/frontend-extensions.md b/docs/source/migrating/frontend-extensions.md
deleted file mode 100644
index ecd0ee4ce..000000000
--- a/docs/source/migrating/frontend-extensions.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Frontend Extensions in Notebook 7
-
-```{warning}
-Any extension developed for Notebook \< 7 or NbClassic will not be
-compatible with Notebook 7 and upwards.
-
-Some extensions like nbgrader have already been ported. We invite you to
-check if the extensions you are using have already been ported.
-```
-
-You can check the following resources to see if your extension is available for Notebook 7:
-
-## List of available Notebook 7 extensions
-
-To get an idea of the extensions available for Notebook 7, you can check the following resources:
-
-- [List of JupyterLab extensions][list of jupyterlab extensions]
-- [Awesome Jupyter][awesome jupyter]
-
-These resources are for JupyterLab, but many of them are compatible with Notebook 7 since Notebook 7 is based on JupyterLab.
-
-[list of jupyterlab extensions]: https://jupyterlab-contrib.github.io/extensions.html
-[awesome jupyter]: https://github.com/markusschanta/awesome-jupyter#jupyterlab-extensions
-
-## JupyterLab equivalent extensions to the Classic Notebook
-
-The `jupyterlab-contrib` organization maintains a list of extensions to ease the transition from the Classic Notebook to Notebook 7 and / or JupyterLab.
-
-The list is available at the following URL: [Migrating from the Classic Notebook][migrate from classic]
-
-
-
-[migrate from classic]: https://jupyterlab-contrib.github.io/migrate_from_classical.html
diff --git a/docs/source/migrating/multiple-interfaces.md b/docs/source/migrating/multiple-interfaces.md
deleted file mode 100644
index 2d8fcdd29..000000000
--- a/docs/source/migrating/multiple-interfaces.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# Simultaneous usage of different versions of Notebook 7 and the Classic Notebook UI
-
-With the release of Notebook 7, the classic Notebook UI is now
-available as a Jupyter Server extension, NbClassic. This means that
-NbClassic can be installed independently of Notebook 7, and can be also
-installed alongside Notebook 7.
-
-Below are different scenarios that you might consider when updating to Notebook 7.
-
-## Try it on Binder
-
-You can try JupyterLab, Notebook 7 and NBClassic installed together using [this gist][lab-nb-nbclassic] on Binder:
-
-[](https://mybinder.org/v2/gist/jtpio/35a72862c8be13dee31b61ebac2d9786/master?urlpath=/tree)
-
-[lab-nb-nbclassic]: https://gist.github.com/jtpio/35a72862c8be13dee31b61ebac2d9786
-
-## Using the `Interface` dropdown
-
-Notebook 7 provides a dropdown menu to switch between the different user interfaces available on the same server.
-
-It is available in the Notebook toolbar:
-
-
-
-```{note}
-This dropdown is only available when using Notebook 7 or JupyterLab.
-It is not displayed when using NbClassic.
-```
-
-## NbClassic and Notebook 7
-
-You can install NbClassic, Notebook 7 and JupyterLab, all three of
-which will provide different user interfaces
-on the same server. When Notebook 7 is available, the NbClassic UI, will
-be served at the `/nbclassic/tree` base path rather than the
-base path `/tree` used otherwise. If you are using Notebook 7 along
-with NbClassic, you will also have JupyterLab installed as it is a
-dependency of Notebook 7, and these front ends will be available
-through the following base paths: JupyterLab at `/lab`, Notebook 7 at
-`/tree`, and NbClassic at `/nbclassic/tree`.
-
-## NbClassic and Notebook 6.5.x
-
-As NbClassic provides the static assets for Notebook 6.5.x, while
-having both installed should cause no issues, the user interface provided
-by these two packages will be the same. These UIs will be served by
-different back end servers. An NbClassic instance will be at a server with the
-`/tree` path and opening a Notebook 6.5.x instance will open on a
-different server with the `/tree` path as well, presenting the same
-static assets. When starting an instance of JupyterLab you will be able
-to access the classic view of Notebook with NbClassic served on the same
-server at `/tree`.
-
-## NbClassic and Notebook \<= 6.4.x
-
-When using NbClassic and Notebook \<= 6.4.x you can expect that these UIs
-will not be only presented at different servers, meaning they will both
-be available at their respective server under `/tree` but they
-may also differ as potential changes to the NbClassic UI will not be
-reflected in Notebook versions \<= 6.4.x. In this case as well, you would
-be able to access the classic view of Notebook with NbClassic served on
-the same server, at `/tree`.
-
-## NbClassic and JupyterLab 3.x
-
-When only JupyterLab 3.x is installed, then NbClassic does not have to be
-explicitly installed as JupyterLab 3.x depends on it. They will run on
-the same server, and are reachable via `/tree` for NbClassic and
-`/lab` for JupyterLab.
-
-## NbClassic and JupyterLab 4.x
-
-When only JupyterLab 4.x is installed, then NbClassic has to be installed
-explicitly. They will run on the same server, and are reachable via
-`/tree` for NbClassic, and `/lab` for JupyterLab.
-
-## NbClassic Independently
-
-When you choose to install only NbClassic via `pip install nbclassic`,
-the classic Notebook UI will be presented at the `/tree` path. As the
-other frontends are not installed, attempting to access the other paths
-will return errors. Note that NbClassic being a Jupyter Server extension,
-indicated Jupyter Server will be available. This provides an additional
-way to view the NbClassic frontend. You would be able to manually
-enable the extension when running an instance of Jupyter Server,
-`> jupyter server --ServerApp.jpserver_extensions="nbclassic=True"`,
-which will provide the NbClassic frontend at `/tree` path when visited.
diff --git a/docs/source/migrating/server-extensions.md b/docs/source/migrating/server-extensions.md
deleted file mode 100644
index cf2a86535..000000000
--- a/docs/source/migrating/server-extensions.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Server Extensions in Notebook 7
-
-Notebook 7 is now based on Jupyter Server, which is a new server application that allows to run multiple Jupyter applications (e.g. Notebook, JupyterLab, NBClassic, etc.) on the same server.
-
-This means that Notebook 7 is able to reuse many of the existing server extensions from the Jupyter ecosystem as is.
-
-## Migration from the Notebook Server
-
-The Jupyter Server documentation provides a [guide for migrating from the classic notebook server to Jupyter Server](https://jupyter-server.readthedocs.io/en/latest/operators/migrate-from-nbserver.html)
-
-## Authoring Server Extensions
-
-The Jupyter Server documentation provides a [guide for authoring server extensions](https://jupyter-server.readthedocs.io/en/latest/developers/extensions.html)
diff --git a/docs/source/migrating/server-imports.md b/docs/source/migrating/server-imports.md
deleted file mode 100644
index c00f80820..000000000
--- a/docs/source/migrating/server-imports.md
+++ /dev/null
@@ -1,33 +0,0 @@
-# Server Imports in Notebook 7
-
-Notebook 7 is now based on Jupyter Server, which lets users run multiple Jupyter frontends (e.g. Notebook, JupyterLab, NBClassic, etc.) on the same server.
-
-Prior to Notebook 7, the Classic Notebook server included the server modules in the `notebook` package. This means it was possible to import the server modules from the `notebook` package, for example:
-
-```python
-from notebook.auth import passwd
-passwd("foo")
-```
-
-Or:
-
-```python
-from notebook import notebookapp
-notebookapp.list_running_servers()
-```
-
-In Notebook 7, these server modules are now exposed by the `jupyter_server` package. The code snippets above should be updated to:
-
-```python
-from jupyter_server.auth import passwd
-passwd("foo")
-```
-
-And:
-
-```python
-from jupyter_server import serverapp
-serverapp.list_running_servers()
-```
-
-These are just examples, so you may have to adjust your use of `notebook` imports based on the specific server modules you were using.
diff --git a/docs/source/notebook.md b/docs/source/notebook.md
deleted file mode 100644
index 5b8eb30dd..000000000
--- a/docs/source/notebook.md
+++ /dev/null
@@ -1,408 +0,0 @@
-(htmlnotebook)=
-
-# The Jupyter Notebook
-
-## Introduction
-
-**Jupyter Notebook** is a notebook authoring application, under the [Project
-Jupyter](https://docs.jupyter.org/en/latest/) umbrella. Built on the power of
-the [computational notebook format](https://docs.jupyter.org/en/latest/#what-is-a-notebook),
-**Jupyter Notebook** offers fast, interactive new ways to prototype and explain
-your code, explore and visualize your data, and share your ideas with others.
-
-Notebooks extend the console-based approach to interactive computing in a
-qualitatively new direction, providing a web-based application suitable for
-capturing the whole computation process: developing, documenting, and executing
-code, as well as communicating the results. The Jupyter notebook combines two
-components:
-
-**A web application:** A browser-based editing program for interactive authoring
-of computational notebooks which provides a fast interactive environment for prototyping and
-explaining code, exploring and visualizing data, and sharing ideas with others
-
-**Computational Notebook documents**: A shareable document that combines computer
-code, plain language descriptions, data, rich visualizations like 3D models, charts,
-mathematics, graphs and figures, and interactive controls
-
-```{seealso}
-See the {ref}`installation guide ` on how to install the
-notebook and its dependencies.
-```
-
-### Main features of the web application
-
-- In-browser editing for code, with automatic syntax highlighting,
- indentation, and tab completion/introspection.
-- The ability to execute code from the browser, with the results of
- computations attached to the code which generated them.
-- Displaying the result of computation using rich media representations, such
- as HTML, LaTeX, PNG, SVG, etc. For example, publication-quality figures
- rendered by the [matplotlib] library, can be included inline.
-- In-browser editing for rich text using the [Markdown] markup language, which
- can provide commentary for the code, is not limited to plain text.
-- The ability to easily include mathematical notation within markdown cells
- using LaTeX, and rendered natively by [MathJax].
-
-### Notebook documents
-
-Notebook documents contain the inputs and outputs of an interactive session as
-well as additional text that accompanies the code but is not meant for
-execution. In this way, notebook files can serve as a complete computational
-record of a session, interleaving executable code with explanatory text,
-mathematics, and rich representations of resulting objects. These documents
-are internally [JSON] files and are saved with the `.ipynb` extension. Since
-JSON is a plain text format, they can be version-controlled and shared with
-colleagues.
-
-Notebooks may be exported to a range of static formats, including HTML (for
-example, for blog posts), reStructuredText, LaTeX, PDF, and slide shows, via
-the [nbconvert] command.
-
-Furthermore, any `.ipynb` notebook document available from a public
-URL can be shared via the Jupyter Notebook Viewer \.
-This service loads the notebook document from the URL and renders it as a
-static web page. The results may thus be shared with a colleague, or as a
-public blog post, without other users needing to install the Jupyter notebook
-themselves. In effect, nbviewer is simply [nbconvert] as
-a web service, so you can do your own static conversions with nbconvert,
-without relying on nbviewer.
-
-```{seealso}
-{ref}`Details on the notebook JSON file format `
-```
-
-### Notebooks and privacy
-
-Because you use Jupyter in a web browser, some people are understandably
-concerned about using it with sensitive data.
-However, if you followed the standard
-[install instructions](https://jupyter.readthedocs.io/en/latest/install.html),
-Jupyter is actually running on your own computer.
-If the URL in the address bar starts with `http://localhost:` or
-`http://127.0.0.1:`, it's your computer acting as the server.
-Jupyter doesn't send your data anywhere else鈥攁nd as it's open source,
-other people can check that we're being honest about this.
-
-You can also use Jupyter remotely:
-your company or university might run the server for you, for instance.
-If you want to work with sensitive data in those cases,
-talk to your IT or data protection staff about it.
-
-We aim to ensure that other pages in your browser or other users on the same
-computer can't access your notebook server. See the [security documentation](https://jupyter-server.readthedocs.io/en/stable/operators/security.html) for
-more about this.
-
-## Starting the notebook server
-
-You can start running a notebook server from the command line using the
-following command:
-
-```
-jupyter notebook
-```
-
-This will print some information about the notebook server in your console,
-and open a web browser to the URL of the web application (by default,
-`http://127.0.0.1:8888`).
-
-The landing page of the Jupyter notebook web application, the **dashboard**,
-shows the notebooks currently available in the notebook directory (by default,
-the directory from which the notebook server was started).
-
-You can create new notebooks from the dashboard with the `New Notebook`
-button, or open existing ones by clicking on their name. You can also drag
-and drop `.ipynb` notebooks and standard `.py` Python source code files
-into the notebook list area.
-
-When starting a notebook server from the command line, you can also open a
-particular notebook directly, bypassing the dashboard, with `jupyter notebook my_notebook.ipynb`. The `.ipynb` extension is assumed if no extension is
-given.
-
-When you are inside an open notebook, the `File | Open...` menu option will
-open the dashboard in a new browser tab, to allow you to open another notebook
-from the notebook directory or to create a new notebook.
-
-```{note}
-You can start more than one notebook server at the same time, if you want
-to work on notebooks in different directories. By default the first
-notebook server starts on port 8888, and later notebook servers search for
-ports near that one. You can also manually specify the port with the
-`--port` option.
-```
-
-### Creating a new notebook document
-
-A new notebook may be created at any time, either from the dashboard, or using
-the {menuselection}`File --> New` menu option from within an active notebook.
-The new notebook is created within the same directory and will open in a new
-browser tab. It will also be reflected as a new entry in the notebook list on
-the dashboard.
-
-
-
-### Opening notebooks
-
-An open notebook has **exactly one** interactive session connected to a
-kernel, which will execute code sent by the user
-and communicate back results. This kernel remains active if the web browser
-window is closed, and reopening the same notebook from the dashboard will
-reconnect the web application to the same kernel. In the dashboard, notebooks
-with an active kernel have a `Shutdown` button next to them, whereas
-notebooks without an active kernel have a `Delete` button in its place.
-
-Other clients may connect to the same kernel.
-When each kernel is started, the notebook server prints to the terminal a
-message like this:
-
-```
-[JupyterNotebookApp] Kernel started: 87f7d2c0-13e3-43df-8bb8-1bd37aaf3373
-```
-
-This long string is the kernel's ID which is sufficient for getting the
-information necessary to connect to the kernel. If the notebook uses the IPython
-kernel, you can also see this
-connection data by running the `%connect_info` {ref}`magic `, which will print the same ID information along with other
-details.
-
-You can then, for example, manually start a Qt console connected to the _same_
-kernel from the command line, by passing a portion of the ID:
-
-```
-$ jupyter qtconsole --existing 87f7d2c0
-```
-
-Without an ID, `--existing` will connect to the most recently
-started kernel.
-
-With the IPython kernel, you can also run the `%qtconsole`
-{ref}`magic ` in the notebook to open a Qt console connected
-to the same kernel.
-
-```{seealso}
-{ref}`ipythonzmq`
-```
-
-## Notebook user interface
-
-When you create a new notebook document, you will be presented with the
-**notebook name**, a **menu bar**, a **toolbar** and an empty **code cell**.
-
-
-
-**Notebook name**: The name displayed at the top of the page,
-next to the Jupyter logo, reflects the name of the `.ipynb` file.
-Clicking on the notebook name brings up a dialog which allows you to rename it.
-Thus, renaming a notebook
-from "Untitled0" to "My first notebook" in the browser, renames the
-`Untitled0.ipynb` file to `My first notebook.ipynb`.
-
-**Menu bar**: The menu bar presents different options that may be used to
-manipulate the way the notebook functions.
-
-**Toolbar**: The tool bar gives a quick way of performing the most-used
-operations within the notebook, by clicking on an icon.
-
-**Code cell**: the default type of cell; read on for an explanation of cells.
-
-## Structure of a notebook document
-
-The notebook consists of a sequence of cells. A cell is a multiline text input
-field, and its contents can be executed by using {kbd}`Shift-Enter`, or by
-clicking either the "Play" button the toolbar, or {guilabel}`Cell`, {guilabel}`Run` in the menu bar.
-The execution behavior of a cell is determined by the cell's type. There are three
-types of cells: **code cells**, **markdown cells**, and **raw cells**. Every
-cell starts off being a **code cell**, but its type can be changed by using a
-drop-down on the toolbar (which will be "Code", initially), or via
-{ref}`keyboard shortcuts `.
-
-For more information on the different things you can do in a notebook,
-see the [collection of examples](https://nbviewer.jupyter.org/github/jupyter/notebook/tree/main/docs/source/examples/Notebook/).
-
-### Code cells
-
-A _code cell_ allows you to edit and write new code, with full syntax
-highlighting and tab completion. The programming language you use depends
-on the _kernel_, and the default kernel (IPython) runs Python code.
-
-When a code cell is executed, code that it contains is sent to the kernel
-associated with the notebook. The results that are returned from this
-computation are then displayed in the notebook as the cell's _output_. The
-output is not limited to text, with many other possible forms of output are
-also possible, including `matplotlib` figures and HTML tables (as used, for
-example, in the `pandas` data analysis package). This is known as IPython's
-_rich display_ capability.
-
-```{seealso}
-[Rich Output] example notebook
-```
-
-### Markdown cells
-
-You can document the computational process in a literate way, alternating
-descriptive text with code, using _rich text_. In IPython this is accomplished
-by marking up text with the Markdown language. The corresponding cells are
-called _Markdown cells_. The Markdown language provides a simple way to
-perform this text markup, that is, to specify which parts of the text should
-be emphasized (italics), bold, form lists, etc.
-
-If you want to provide structure for your document, you can use markdown
-headings. Markdown headings consist of 1 to 6 hash # signs `#` followed by a
-space and the title of your section. The markdown heading will be converted
-to a clickable link for a section of the notebook. It is also used as a hint
-when exporting to other document formats, like PDF.
-
-When a Markdown cell is executed, the Markdown code is converted into
-the corresponding formatted rich text. Markdown allows arbitrary HTML code for
-formatting.
-
-Within Markdown cells, you can also include _mathematics_ in a straightforward
-way, using standard LaTeX notation: `$...$` for inline mathematics and
-`$$...$$` for displayed mathematics. When the Markdown cell is executed,
-the LaTeX portions are automatically rendered in the HTML output as equations
-with high quality typography. This is made possible by [MathJax], which
-supports a [large subset](https://docs.mathjax.org/en/latest/input/tex/index.html) of LaTeX functionality
-
-Standard mathematics environments defined by LaTeX and AMS-LaTeX (the
-`amsmath` package) also work, such as
-`\begin{equation}...\end{equation}`, and `\begin{align}...\end{align}`.
-New LaTeX macros may be defined using standard methods,
-such as `\newcommand`, by placing them anywhere _between math delimiters_ in
-a Markdown cell. These definitions are then available throughout the rest of
-the IPython session.
-
-```{seealso}
-[Working with Markdown Cells] example notebook
-```
-
-### Raw cells
-
-_Raw_ cells provide a place in which you can write _output_ directly.
-Raw cells are not evaluated by the notebook.
-When passed through [nbconvert], raw cells arrive in the
-destination format unmodified. For example, you can type full LaTeX
-into a raw cell, which will only be rendered by LaTeX after conversion by
-nbconvert.
-
-## Basic workflow
-
-The normal workflow in a notebook is, then, quite similar to a standard
-IPython session, with the difference that you can edit cells in-place multiple
-times until you obtain the desired results, rather than having to
-rerun separate scripts with the `%run` magic command.
-
-Typically, you will work on a computational problem in pieces, organizing
-related ideas into cells and moving forward once previous parts work
-correctly. This is much more convenient for interactive exploration than
-breaking up a computation into scripts that must be executed together, as was
-previously necessary, especially if parts of them take a long time to run.
-
-To interrupt a calculation which is taking too long, use the {guilabel}`Kernel`,
-{guilabel}`Interrupt` menu option, or the {kbd}`i,i` keyboard shortcut.
-Similarly, to restart the whole computational process,
-use the {guilabel}`Kernel`, {guilabel}`Restart` menu option or {kbd}`0,0`
-shortcut.
-
-A notebook may be downloaded as a `.ipynb` file or converted to a number of
-other formats using the menu option {guilabel}`File`, {guilabel}`Download as`.
-
-```{seealso}
-[Running Code in the Jupyter Notebook] example notebook
-
-[Notebook Basics] example notebook
-```
-
-(keyboard-shortcuts)=
-
-### Keyboard shortcuts
-
-All actions in the notebook can be performed with the mouse, but keyboard
-shortcuts are also available for the most common ones. The essential shortcuts
-to remember are the following:
-
-- {kbd}`Shift-Enter`: run cell
- : Execute the current cell, show any output, and jump to the next cell below.
- If {kbd}`Shift-Enter` is invoked on the last cell, it makes a new cell below.
- This is equivalent to clicking the {guilabel}`Cell`, {guilabel}`Run` menu
- item, or the Play button in the toolbar.
-- {kbd}`Esc`: Command mode
- : In command mode, you can navigate around the notebook using keyboard shortcuts.
-- {kbd}`Enter`: Edit mode
- : In edit mode, you can edit text in cells.
-
-For the full list of available shortcuts, click {guilabel}`Help`,
-{guilabel}`Keyboard Shortcuts` in the notebook menus.
-
-## Searching
-
-Jupyter Notebook has an advanced built-in search plugin for finding text within a
-notebook or other document, which uses the {kbd}`Ctrl-F` ({kbd}`Cmd+F` for macOS) shortcut by default.
-
-Your browser's `find` function will give unexpected results because it doesn't have
-access to the full content of a document (by default), but you can still use your browser find
-function from the browser menu if you want, or you can disable the built-in search
-shortcut using the Advanced Settings Editor.
-
-Alternatively, you can disable windowed notebook rendering to expose the full
-document content to the browser at the expense of performance.
-
-## Plotting
-
-One major feature of the Jupyter notebook is the ability to display plots that
-are the output of running code cells. The IPython kernel is designed to work
-seamlessly with the [matplotlib] plotting library to provide this functionality.
-Specific plotting library integration is a feature of the kernel.
-
-## Installing kernels
-
-For information on how to install a Python kernel, refer to the
-[IPython install page](https://ipython.org/install).
-
-The Jupyter wiki has a long list of [Kernels for other languages](https://github.com/jupyter/jupyter/wiki/Jupyter-kernels).
-They usually come with instructions on how to make the kernel available
-in the notebook.
-
-(signing-notebooks)=
-
-## Trusting Notebooks
-
-To prevent untrusted code from executing on users' behalf when notebooks open,
-we store a signature of each trusted notebook.
-The notebook server verifies this signature when a notebook is opened.
-If no matching signature is found,
-Javascript and HTML output will not be displayed
-until they are regenerated by re-executing the cells.
-
-Any notebook that you have fully executed yourself will be
-considered trusted, and its HTML and Javascript output will be displayed on
-load.
-
-If you need to see HTML or Javascript output without re-executing,
-and you are sure the notebook is not malicious, you can tell Jupyter to trust it
-at the command-line with:
-
-```
-$ jupyter trust mynotebook.ipynb
-```
-
-See the [security documentation](https://jupyter-server.readthedocs.io/en/stable/operators/security.html) for more details about the trust mechanism.
-
-## Browser Compatibility
-
-The Jupyter Notebook aims to support the latest versions of these browsers:
-
-- Chrome
-- Safari
-- Firefox
-
-Up to date versions of Opera and Edge may also work, but if they don't, please
-use one of the supported browsers.
-
-Using Safari with HTTPS and an untrusted certificate is known to not work
-(websockets will fail).
-
-```{eval-rst}
-.. include:: links.txt
-```
-
-[json]: https://en.wikipedia.org/wiki/JSON
-[mathjax]: https://www.mathjax.org/
diff --git a/docs/source/notebook_7_features.md b/docs/source/notebook_7_features.md
deleted file mode 100644
index 427a5a22e..000000000
--- a/docs/source/notebook_7_features.md
+++ /dev/null
@@ -1,134 +0,0 @@
-# New features in Notebook 7
-
-This document describes the new features in Notebook 7 as originally mentioned in the related Jupyter Enhancement Proposal [JEP 79][jep 79].
-
-```{contents} Table of Contents
-:depth: 3
-:local:
-```
-
-## Debugger
-
-Notebook 7 includes a new debugger that allows you to step through your code cell by cell. You can also set breakpoints and inspect variables.
-
-
-
-## Real Time collaboration
-
-Notebook 7 allows for using the real time collaboration extension so you can share your notebook with other users and edit it in real time.
-
-The Real Time Collaboration feature is the same as in JupyterLab and is available as a JupyterLab extension. It is not enabled by default, but you can install with `pip`:
-
-```bash
-pip install jupyter-collaboration
-```
-
-or with `conda`:
-
-```bash
-conda install -c conda-forge jupyter-collaboration
-```
-
-After installing the extension, restart the Jupyter Server so the extension can be loaded.
-
-```{note}
-It is possible for two users to work on the same notebook using Notebook 7 or JupyterLab.
-```
-
-
-
-## Table of Contents
-
-Notebook 7 includes a new table of contents extension that allows you to navigate through your notebook using a sidebar. The Table of Contents is built-in and enabled by default, just like in JupyterLab.
-
-
-
-## Theming and Dark Mode
-
-A Dark Theme is now available in the Jupyter Notebook by default. You can also install other themes as JupyterLab extensions.
-
-
-
-You can also install many other JupyterLab themes. For example to install the [JupyterLab Night](https://github.com/martinRenou/jupyterlab-night) theme:
-
-```shell
-pip install jupyterlab-night
-```
-
-Then refresh the page and select the new theme in the settings:
-
-
-
-## Internationalization
-
-Notebook 7 now provides the ability to set the display language of the user interface.
-
-Users will need to install the language pack as a separate Python package. Language packs are grouped in the [language packs repository on GitHub](https://github.com/jupyterlab/language-packs/), and can be installed with `pip`. For example, it is possible to install the language pack for French (France) using the following command:
-
-```shell
-pip install jupyterlab-language-pack-fr-FR
-```
-
-After installing the language pack, reload the page and the new language should be available in the settings.
-
-
-
-```{note}
-Notebook 7 and JupyterLab share the same language packs, so it is possible to use the same language pack in both applications.
-```
-
-## Accessibility Improvements
-
-The text editor underlying the Jupyter Notebook (CodeMirror 5) had major accessibility issues. Fortunately, this accessibility bottleneck has been unblocked as JupyterLab has been upgraded to use CodeMirror 6, a complete rewrite of the text editor with a strong focus on accessibility. Although this upgrade required extensive codebase modifications, the changes is available with JupyterLab 4. By being built on top of JupyterLab, Jupyter Notebook 7 directly benefits from the CodeMirror 6 upgrade.
-
-## Support for many JupyterLab extensions
-
-Notebook 7 is based on JupyterLab and therefore supports many of the existing JupyterLab extensions.
-
-You can install JupyterLab extensions with `pip` or `conda`. For example to install the LSP (Language Server Protocol) extension for enhanced code completion, you can use the following commands:
-
-```bash
-pip install jupyter-lsp
-```
-
-```bash
-conda install -c conda-forge jupyter-lsp
-```
-
-Popular extensions like `nbgrader` and `RISE` have already been ported to work with Notebook 7.
-
-### nbgrader
-
-```{note}
-The nbgrader extension is still under active development and a version compatible with Notebook 7 is not yet available on PyPI.
-However a version compatible with Notebook 7 will be available before the final release of Notebook 7.
-```
-
-
-
-
-
-### RISE
-
-The RISE extension is another popular JupyterLab extension that has been ported to work with Notebook 7. It allows you to turn your Jupyter Notebooks into a slideshow. See the [installation instructions](https://github.com/jupyterlab-contrib/rise#install).
-
-## A document-centric user experience
-
-Despite all the new features and as stated in [JEP 79][jep 79], Notebook 7 keeps the document-centric user experience of the Classic Notebook:
-
-> The Jupyter Notebook application offers a document-centric user experience. That is, in the Notebook application, the landing page that contains a file manager, running tools tab, and a few optional extras, is a launching point into opening standalone, individual documents. This document-centric experience is important for many users, and that is the first key point this proposal aims to preserve. Notebook v7 will be based on a different JavaScript implementation than v6, but it will preserve the document-centric experience, where each individual notebook opens in a separate browser tab and the visible tools and menus are focused on the open document.
-
-[jep 79]: https://jupyter.org/enhancement-proposals/79-notebook-v7/notebook-v7.html
-
-## Compact View on Mobile Devices
-
-Notebook 7 automatically switches to a more compact layout on mobile devices, making it convenient to run code on the go.
-
-
-
-## References
-
-This was just a quick overview of the new features in Notebook 7. For more details, you can check out the following resources:
-
-- The [JupyterLab Documentation](https://jupyterlab.readthedocs.io/en/latest/) is a great resource to learn more about JupyterLab and the extensions available. Since Notebook 7 is based on JupyterLab, many of the features and extensions available for JupyterLab are also available for Notebook 7.
-- [Migration Guide](./migrate_to_notebook7.md) for Notebook 7, which explains how to migrate from the Classic Notebook to Notebook 7.
diff --git a/docs/source/spelling_wordlist.txt b/docs/source/spelling_wordlist.txt
deleted file mode 100644
index e9db8e9cc..000000000
--- a/docs/source/spelling_wordlist.txt
+++ /dev/null
@@ -1,74 +0,0 @@
-AMS
-API
-api
-args
-async
-auth
-autodetect
-Broull贸n
-changelog
-config
-coroutines
-css
-CSS
-dockerfile
-Dockerfile
-drop-down
-filenames
-filesystem
-front-end
-front end
-frontend
-github
-GitHub
-IFrame
-iframe
-ip
-IP
-IPython
-javascript
-JavaScript
-jinja
-jinja2
-Jinja
-js
-jupyter
-Jupyter
-Kamens
-keepalive
-LaTeX
-localhost
-login
-logout
-mathjax
-MathJax
-matplotlib
-menubar
-metadata
-minify
-minified
-multiline
-natively
-nbviewer
-pre
-prerelease
-Quantopian
-repo
-reStructuredText
-subclasses
-subdirectory
-subprocesses
-startup
-symlink
-uncomment
-unencrypted
-unicode
-Unicode
-untracked
-untrusted
-URL
-url
-username
-webserver
-websockets
-workflow
diff --git a/docs/source/template.tpl b/docs/source/template.tpl
deleted file mode 100644
index 0c49c448f..000000000
--- a/docs/source/template.tpl
+++ /dev/null
@@ -1,20 +0,0 @@
-{%- extends 'rst.tpl' -%}
-
-{% macro notebooklink() -%}
-
-`View the original notebook on nbviewer `__
-
-
-{%- endmacro %}
-
-{%- block header %}
-{{ notebooklink() }}
-{% endblock header -%}
-
-{%- block footer %}
-{{ notebooklink() }}
-{% endblock footer -%}
-
-{% block markdowncell scoped %}
-{{ cell.source | markdown2rst | replace(".ipynb>", ".html>") }}
-{% endblock markdowncell %}
diff --git a/docs/source/troubleshooting.md b/docs/source/troubleshooting.md
deleted file mode 100644
index 40e25a993..000000000
--- a/docs/source/troubleshooting.md
+++ /dev/null
@@ -1,243 +0,0 @@
-# What to do when things go wrong
-
-First, have a look at the common problems listed below. If you can figure it out
-from these notes, it will be quicker than asking for help.
-
-Check that you have the latest version of any packages that look relevant.
-Unfortunately it's not always easy to figure out what packages are relevant,
-but if there was a bug that's already been fixed,
-it's easy to upgrade and get on with what you wanted to do.
-
-## Jupyter fails to start
-
-- Have you [installed it](https://jupyter.org/install.html)? ;-)
-- If you're using a menu shortcut or Anaconda launcher to start it, try
- opening a terminal or command prompt and running the command `jupyter notebook`.
-- If it can't find `jupyter`,
- you may need to configure your `PATH` environment variable.
- If you don't know what that means, and don't want to find out,
- just (re)install Anaconda with the default settings,
- and it should set up PATH correctly.
-- If Jupyter gives an error that it can't find `notebook`,
- check with pip or conda that the `notebook` package is installed.
-- Try running `jupyter-notebook` (with a hyphen). This should normally be the
- same as `jupyter notebook` (with a space), but if there's any difference,
- the version with the hyphen is the 'real' launcher, and the other one wraps
- that.
-
-## Jupyter doesn't load or doesn't work in the browser
-
-- Try in another browser (e.g. if you normally use Firefox, try with Chrome).
- This helps pin down where the problem is.
-- Try disabling any browser extensions and/or any Jupyter extensions you have
- installed.
-- Some internet security software can interfere with Jupyter.
- If you have security software, try turning it off temporarily,
- and look in the settings for a more long-term solution.
-- In the address bar, try changing between `localhost` and `127.0.0.1`.
- They should be the same, but in some cases it makes a difference.
-
-## Jupyter can't start a kernel
-
-Files called _kernel specs_ tell Jupyter how to start different kinds of kernels.
-To see where these are on your system, run `jupyter kernelspec list`:
-
-```
-$ jupyter kernelspec list
-Available kernels:
- python3 /home/takluyver/.local/lib/python3.6/site-packages/ipykernel/resources
- bash /home/takluyver/.local/share/jupyter/kernels/bash
- ir /home/takluyver/.local/share/jupyter/kernels/ir
-```
-
-There's a special fallback for the Python kernel:
-if it doesn't find a real kernelspec, but it can import the `ipykernel` package,
-it provides a kernel which will run in the same Python environment as the notebook server.
-A path ending in `ipykernel/resources`, like in the example above,
-is this default kernel.
-The default often does what you want,
-so if the `python3` kernelspec points somewhere else
-and you can't start a Python kernel,
-try deleting or renaming that kernelspec folder to expose the default.
-
-If your problem is with another kernel, not the Python one we maintain,
-you may need to look for support about that kernel.
-
-## Python Environments
-
-Multiple python environments, whether based on Anaconda or Python Virtual environments,
-are often the source of reported issues. In many cases, these issues stem from the
-Notebook server running in one environment, while the kernel and/or its resources,
-derive from another environment. Indicators of this scenario include:
-
-- `import` statements within code cells producing `ImportError` or `ModuleNotFound` exceptions.
-- General kernel startup failures exhibited by nothing happening when attempting
- to execute a cell.
-
-In these situations, take a close look at your environment structure and ensure all
-packages required by your notebook's code are installed in the correct environment.
-If you need to run the kernel from different environments than your Notebook
-server, check out [IPython's documentation](https://ipython.readthedocs.io/en/stable/install/kernel_install.html#kernels-for-different-environments)
-for using kernels from different environments as this is the recommended approach.
-Anaconda's [nb_conda_kernels](https://github.com/Anaconda-Platform/nb_conda_kernels)
-package might also be an option for you in these scenarios.
-
-Another thing to check is the `kernel.json` file that will be located in the
-aforementioned _kernel specs_ directory identified by running `jupyter kernelspec list`.
-This file will contain an `argv` stanza that includes the actual command to run
-when launching the kernel. Oftentimes, when reinstalling python environments, a previous
-`kernel.json` will reference an python executable from an old or non-existent location.
-As a result, it's always a good idea when encountering kernel startup issues to validate
-the `argv` stanza to ensure all file references exist and are appropriate.
-
-## Windows Systems
-
-Although Jupyter Notebook is primarily developed on the various flavors of the Unix
-operating system it also supports Microsoft
-Windows - which introduces its own set of commonly encountered issues,
-particularly in the areas of security, process management and lower-level libraries.
-
-### pywin32 Issues
-
-The primary package for interacting with Windows' primitives is `pywin32`.
-
-- Issues surrounding the creation of the kernel's communication file utilize
- `jupyter_core`'s `secure_write()` function. This function ensures a file is
- created in which only the owner of the file has access. If libraries like `pywin32`
- are not properly installed, issues can arise when it's necessary to use the native
- Windows libraries.
-
- Here's a portion of such a traceback:
-
- ```
- File "c:\users\jovyan\python\myenv.venv\lib\site-packages\jupyter_core\paths.py", line 424, in secure_write
- win32_restrict_file_to_user(fname)
- File "c:\users\jovyan\python\myenv.venv\lib\site-packages\jupyter_core\paths.py", line 359, in win32_restrict_file_to_user
- import win32api
- ImportError: DLL load failed: The specified module could not be found.
- ```
-
-- As noted earlier, the installation of `pywin32` can be problematic on Windows
- configurations. When such an issue occurs, you may need to revisit how the environment
- was setup. Pay careful attention to whether you're running the 32 or 64 bit versions
- of Windows and be sure to install appropriate packages for that environment.
-
- Here's a portion of such a traceback:
-
- ```
- File "C:\Users\jovyan\AppData\Roaming\Python\Python37\site-packages\jupyter_core\paths.py", line 435, in secure_write
- win32_restrict_file_to_user(fname)
- File "C:\Users\jovyan\AppData\Roaming\Python\Python37\site-packages\jupyter_core\paths.py", line 361, in win32_restrict_file_to_user
- import win32api
- ImportError: DLL load failed: %1 is not a valid Win32 application
- ```
-
-#### Resolving pywin32 Issues
-
-> In this case, your `pywin32` module may not be installed correctly and the following
-> should be attempted:
->
-> ```
-> pip install --upgrade pywin32
-> ```
->
-> or:
->
-> ```
-> conda install --force-reinstall pywin32
-> ```
->
-> followed by:
->
-> ```
-> python.exe Scripts/pywin32_postinstall.py -install
-> ```
->
-> where `Scripts` is located in the active Python's installation location.
-
-- Another common failure specific to Windows environments is the location of various
- python commands. On `*nix` systems, these typically reside in the `bin` directory
- of the active Python environment. However, on Windows, these tend to reside in the
- `Scripts` folder - which is a sibling to `bin`. As a result, when encountering
- kernel startup issues, again, check the `argv` stanza and verify it's pointing to a
- valid file. You may find that it's pointing in `bin` when `Scripts` is correct, or
- the referenced file does not include its `.exe` extension - typically resulting in
- `FileNotFoundError` exceptions.
-
-## This Worked An Hour Ago
-
-The Jupyter stack is very complex and rightfully so, there's a lot going on. On occasion
-you might find the system working perfectly well, then, suddenly, you can't get past a
-certain cell due to `import` failures. In these situations, it's best to ask yourself
-if any new python files were added to your notebook development area.
-
-These issues are usually evident by carefully analyzing the traceback produced in
-the notebook error or the Notebook server's command window. In these cases, you'll typically
-find the Python kernel code (from `IPython` and `ipykernel`) performing _its_ imports
-and notice a file from your Notebook development error included in that traceback followed
-by an `AttributeError`:
-
-```
-File "C:\Users\jovyan\anaconda3\lib\site-packages\ipykernel\connect.py", line 13, in
-from IPython.core.profiledir import ProfileDir
-File "C:\Users\jovyan\anaconda3\lib\site-packages\IPython_init.py", line 55, in
-from .core.application import Application
-...
-File "C:\Users\jovyan\anaconda3\lib\site-packages\ipython_genutils\path.py", line 13, in
-import random
-File "C:\Users\jovyan\Desktop\Notebooks\random.py", line 4, in
-rand_set = random.sample(english_words_lower_set, 12)
-AttributeError: module 'random' has no attribute 'sample'
-```
-
-What has happened is that you have named a file that conflicts with an installed package
-that is used by the kernel software and now introduces a conflict preventing the
-kernel's startup.
-
-**Resolution**: You'll need to rename your file. A best practice would be to prefix or
-_namespace_ your files so as not to conflict with any python package.
-
-## Asking for help
-
-As with any problem, try searching to see if someone has already found an answer.
-If you can't find an existing answer, you can ask questions at:
-
-- The [Jupyter Discourse Forum](https://discourse.jupyter.org/)
-
-- The [jupyter-notebook tag on Stackoverflow](https://stackoverflow.com/questions/tagged/jupyter-notebook)
-
-- Peruse the [jupyter/help repository on Github](https://github.com/jupyter/help) (read-only)
-
-- Or in an issue on another repository, if it's clear which component is
- responsible. Typical repositories include:
-
- > - [jupyter_core](https://github.com/jupyter/jupyter_core) - `secure_write()`
- > and file path issues
- > - [jupyter_client](https://github.com/jupyter/jupyter_core) - kernel management
- > issues found in Notebook server's command window.
- > - [IPython](https://github.com/ipython/ipython) and
- > [ipykernel](https://github.com/ipython/ipykernel) - kernel runtime issues
- > typically found in Notebook server's command window and/or Notebook cell execution.
-
-### Gathering Information
-
-Should you find that your problem warrants that an issue be opened in
-[notebook](https://github.com/jupyter/notebook) please don't forget to provide details
-like the following:
-
-- What error messages do you see (within your notebook and, more importantly, in
- the Notebook server's command window)?
-- What platform are you on?
-- How did you install Jupyter?
-- What have you tried already?
-
-The `jupyter troubleshoot` command collects a lot of information
-about your installation, which can also be useful.
-
-When providing textual information, it's most helpful if you can _scrape_ the contents
-into the issue rather than providing a screenshot. This enables others to select
-pieces of that content so they can search more efficiently and try to help.
-
-Remember that it's not anyone's job to help you.
-We want Jupyter to work for you,
-but we can't always help everyone individually.
diff --git a/docs/source/ui_components.md b/docs/source/ui_components.md
deleted file mode 100644
index 12ebd4f9e..000000000
--- a/docs/source/ui_components.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# User interface components
-
-When opening bug reports or sending emails to the Jupyter mailing list, it is
-useful to know the names of different UI components so that other developers
-and users have an easier time helping you diagnose your problems. This section
-will familiarize you with the names of UI elements within the Notebook and the
-different Notebook modes.
-
-## Notebook Dashboard
-
-When you launch `jupyter notebook` the first page that you encounter is the
-Notebook Dashboard.
-
-
-
-## Notebook Editor
-
-Once you've selected a Notebook to edit, the Notebook will open in the Notebook
-Editor.
-
-
-
-## Interactive User Interface Tour of the Notebook
-
-If you would like to learn more about the specific elements within the Notebook
-Editor, you can go through the user interface tour by selecting _Help_ in the
-menubar then selecting _User Interface Tour_.
-
-### Edit Mode and Notebook Editor
-
-When a cell is in edit mode, the Cell Mode Indicator will change to reflect
-the cell's state. This state is indicated by a small pencil icon on the
-top right of the interface. When the cell is in command mode, there is no
-icon in that location.
-
-
-
-## File Editor
-
-Now let's say that you've chosen to open a Markdown file instead of a Notebook
-file whilst in the Notebook Dashboard. If so, the file will be opened in the
-File Editor.
-
-
diff --git a/docs/source/user-documentation.md b/docs/source/user-documentation.md
deleted file mode 100644
index cdb7f562e..000000000
--- a/docs/source/user-documentation.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Documentation
-
-Use this page to navigate to different parts of the user documentation.
-
-```{toctree}
-:maxdepth: 2
-
-notebook
-ui_components
-notebook_7_features
-examples/Notebook/examples_index.rst
-custom_css
-configuring/plugins
-configuring/interface_customization
-troubleshooting
-changelog
-```
diff --git a/jupyter-config/jupyter_server_config.d/notebook.json b/jupyter-config/jupyter_server_config.d/notebook.json
deleted file mode 100644
index 09113911a..000000000
--- a/jupyter-config/jupyter_server_config.d/notebook.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "ServerApp": {
- "jpserver_extensions": {
- "notebook": true
- }
- }
-}
diff --git a/jupyter-notebook.desktop b/jupyter-notebook.desktop
deleted file mode 100644
index 095d5ac65..000000000
--- a/jupyter-notebook.desktop
+++ /dev/null
@@ -1,11 +0,0 @@
-[Desktop Entry]
-Name=Jupyter Notebook
-Comment=Run Jupyter Notebook
-Exec=jupyter-notebook %f
-Terminal=true
-Type=Application
-Icon=notebook
-StartupNotify=true
-MimeType=application/x-ipynb+json;
-Categories=Development;Education;
-Keywords=python;
diff --git a/jupyter.svg b/jupyter.svg
deleted file mode 100644
index 42918a707..000000000
--- a/jupyter.svg
+++ /dev/null
@@ -1,364 +0,0 @@
-
-
diff --git a/jupyter_config.json b/jupyter_config.json
deleted file mode 100644
index 4d392a974..000000000
--- a/jupyter_config.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "LabApp": { "expose_app_in_browser": true },
- "JupyterNotebookApp": { "expose_app_in_browser": true }
-}
diff --git a/lerna.json b/lerna.json
deleted file mode 100644
index 610b7981b..000000000
--- a/lerna.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "$schema": "node_modules/lerna/schemas/lerna-schema.json",
- "version": "independent"
-}
diff --git a/notebook.svg b/notebook.svg
deleted file mode 100644
index 52e713c32..000000000
--- a/notebook.svg
+++ /dev/null
@@ -1,335 +0,0 @@
-
-
diff --git a/nx.json b/nx.json
deleted file mode 100644
index f95f2099d..000000000
--- a/nx.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "$schema": "./node_modules/nx/schemas/nx-schema.json",
- "tasksRunnerOptions": {
- "default": {
- "runner": "nx/tasks-runners/default",
- "options": {
- "cacheableOperations": [
- "build",
- "build:prod",
- "build:lib",
- "build:labextension:dev",
- "build:labextension"
- ]
- }
- }
- },
- "namedInputs": {
- "default": ["{projectRoot}/**/*"]
- },
- "targetDefaults": {
- "build:lib": {
- "dependsOn": ["^build:lib"],
- "inputs": ["default", "^default"],
- "outputs": ["{projectRoot}/lib"]
- },
- "build": {
- "dependsOn": ["^build"],
- "inputs": ["default", "^default"]
- },
- "build:prod": {
- "dependsOn": ["^build:prod"],
- "inputs": ["default", "^default"]
- }
- }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index 0e06f25ad..000000000
--- a/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "name": "@jupyter-notebook/root",
- "version": "0.1.0",
- "private": true,
- "homepage": "https://github.com/jupyter/notebook",
- "bugs": {
- "url": "https://github.com/jupyter/notebook/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/jupyter/notebook"
- },
- "license": "BSD-3-Clause",
- "author": "Project Jupyter",
- "workspaces": {
- "packages": [
- "app",
- "buildutils",
- "packages/*"
- ]
- },
- "scripts": {
- "build": "lerna run build",
- "build:lib": "lerna run build:lib",
- "build:prod": "lerna run build:prod --skip-nx-cache",
- "build:test": "lerna run build:test",
- "build:utils": "cd buildutils && npm run build",
- "clean": "lerna run clean",
- "deduplicate": "jlpm dlx yarn-berry-deduplicate -s fewerHighest && jlpm install",
- "develop": "jupyter labextension develop . --overwrite && node ./buildutils/lib/develop.js --overwrite",
- "eslint": "eslint . --ext .ts,.tsx --fix",
- "eslint:check": "eslint . --ext .ts,.tsx",
- "eslint:files": "eslint --fix",
- "get:lab:version": "node ./buildutils/lib/get-latest-lab-version.js",
- "integrity": "node buildutils/lib/ensure-repo.js",
- "prettier": "prettier --write \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"",
- "prettier:check": "prettier --list-different \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"",
- "prettier:files": "prettier --write",
- "release:bump": "node ./buildutils/lib/release-bump.js",
- "release:patch": "node ./buildutils/lib/release-patch.js",
- "test": "lerna run test",
- "update:dependency": "node ./node_modules/@jupyterlab/buildutils/lib/update-dependency.js --lerna",
- "upgrade:lab:dependencies": "node ./buildutils/lib/upgrade-lab-dependencies.js",
- "watch": "run-p watch:lib watch:app",
- "watch:app": "lerna exec --stream --scope \"@jupyter-notebook/app\" jlpm watch",
- "watch:lib": "lerna exec --stream --scope @jupyter-notebook/metapackage jlpm watch"
- },
- "resolutions": {
- "@types/react": "^18.0.26",
- "react": "^18.2.0",
- "yjs": "^13.5.40"
- },
- "devDependencies": {
- "@jupyterlab/buildutils": "~4.6.0-alpha.0",
- "@typescript-eslint/eslint-plugin": "^5.55.0",
- "@typescript-eslint/parser": "^5.55.0",
- "eslint": "^8.36.0",
- "eslint-config-prettier": "^8.7.0",
- "eslint-plugin-jest": "^27.2.1",
- "eslint-plugin-prettier": "^4.2.1",
- "eslint-plugin-react": "^7.32.2",
- "html-webpack-plugin": "^5.6.3",
- "lerna": "^7.1.4",
- "npm-run-all": "^4.1.5",
- "prettier": "^2.8.5",
- "rimraf": "^3.0.2",
- "typescript": "~5.5.4"
- },
- "nx": {}
-}
diff --git a/packages/_metapackage/package.json b/packages/_metapackage/package.json
deleted file mode 100644
index 26e11707d..000000000
--- a/packages/_metapackage/package.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "name": "@jupyter-notebook/metapackage",
- "version": "7.6.0-alpha.0",
- "private": true,
- "description": "Jupyter Notebook - Metapackage",
- "homepage": "https://github.com/jupyter/notebook",
- "bugs": {
- "url": "https://github.com/jupyter/notebook/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/jupyter/notebook.git"
- },
- "license": "BSD-3-Clause",
- "author": "Project Jupyter",
- "main": "lib/index.js",
- "types": "lib/index.d.ts",
- "scripts": {
- "build": "tsc -b",
- "watch": "tsc -b -w --preserveWatchOutput"
- },
- "dependencies": {
- "@jupyter-notebook/application": "^7.6.0-alpha.0",
- "@jupyter-notebook/application-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/console-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/docmanager-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/documentsearch-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/help-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/lab-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/notebook-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/terminal-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/tree": "^7.6.0-alpha.0",
- "@jupyter-notebook/tree-extension": "^7.6.0-alpha.0",
- "@jupyter-notebook/ui-components": "^7.6.0-alpha.0"
- },
- "devDependencies": {
- "typescript": "~5.5.4"
- }
-}
diff --git a/packages/_metapackage/src/index.ts b/packages/_metapackage/src/index.ts
deleted file mode 100644
index c41bc6c85..000000000
--- a/packages/_metapackage/src/index.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-import '@jupyter-notebook/application';
-import '@jupyter-notebook/application-extension';
-import '@jupyter-notebook/console-extension';
-import '@jupyter-notebook/docmanager-extension';
-import '@jupyter-notebook/documentsearch-extension';
-import '@jupyter-notebook/help-extension';
-import '@jupyter-notebook/lab-extension';
-import '@jupyter-notebook/notebook-extension';
-import '@jupyter-notebook/terminal-extension';
-import '@jupyter-notebook/tree';
-import '@jupyter-notebook/tree-extension';
-import '@jupyter-notebook/ui-components';
diff --git a/packages/_metapackage/tsconfig.json b/packages/_metapackage/tsconfig.json
deleted file mode 100644
index c8938dcda..000000000
--- a/packages/_metapackage/tsconfig.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "extends": "../../tsconfigbase",
- "compilerOptions": {
- "outDir": "lib",
- "rootDir": "src"
- },
- "include": ["src/**/*"],
- "references": [
- { "path": "../application" },
- { "path": "../application-extension" },
- { "path": "../console-extension" },
- { "path": "../docmanager-extension" },
- { "path": "../documentsearch-extension" },
- { "path": "../help-extension" },
- { "path": "../lab-extension" },
- { "path": "../notebook-extension" },
- { "path": "../terminal-extension" },
- { "path": "../tree" },
- { "path": "../tree-extension" },
- { "path": "../ui-components" }
- ]
-}
diff --git a/packages/application-extension/package.json b/packages/application-extension/package.json
deleted file mode 100644
index 25e596cbf..000000000
--- a/packages/application-extension/package.json
+++ /dev/null
@@ -1,70 +0,0 @@
-{
- "name": "@jupyter-notebook/application-extension",
- "version": "7.6.0-alpha.0",
- "description": "Jupyter Notebook - Application Extension",
- "homepage": "https://github.com/jupyter/notebook",
- "bugs": {
- "url": "https://github.com/jupyter/notebook/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/jupyter/notebook.git"
- },
- "license": "BSD-3-Clause",
- "author": "Project Jupyter",
- "sideEffects": [
- "style/**/*.css",
- "style/index.js"
- ],
- "main": "lib/index.js",
- "types": "lib/index.d.ts",
- "style": "style/index.css",
- "directories": {
- "lib": "lib/"
- },
- "files": [
- "lib/*.d.ts",
- "lib/*.js.map",
- "lib/*.js",
- "schema/*.json",
- "style/**/*.css",
- "style/index.js"
- ],
- "scripts": {
- "build": "tsc -b",
- "build:prod": "tsc -b",
- "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo",
- "docs": "typedoc src",
- "watch": "tsc -b --watch"
- },
- "dependencies": {
- "@jupyter-notebook/application": "^7.6.0-alpha.0",
- "@jupyter-notebook/ui-components": "^7.6.0-alpha.0",
- "@jupyterlab/application": "~4.6.0-alpha.0",
- "@jupyterlab/apputils": "~4.7.0-alpha.0",
- "@jupyterlab/codeeditor": "~4.6.0-alpha.0",
- "@jupyterlab/console": "~4.6.0-alpha.0",
- "@jupyterlab/coreutils": "~6.6.0-alpha.0",
- "@jupyterlab/docmanager": "~4.6.0-alpha.0",
- "@jupyterlab/docregistry": "~4.6.0-alpha.0",
- "@jupyterlab/mainmenu": "~4.6.0-alpha.0",
- "@jupyterlab/rendermime": "~4.6.0-alpha.0",
- "@jupyterlab/settingregistry": "~4.6.0-alpha.0",
- "@jupyterlab/translation": "~4.6.0-alpha.0",
- "@lumino/coreutils": "^2.2.2",
- "@lumino/disposable": "^2.1.5",
- "@lumino/widgets": "^2.7.2"
- },
- "devDependencies": {
- "rimraf": "^3.0.2",
- "typescript": "~5.5.4"
- },
- "publishConfig": {
- "access": "public"
- },
- "jupyterlab": {
- "extension": true,
- "schemaDir": "schema"
- },
- "styleModule": "style/index.js"
-}
diff --git a/packages/application-extension/schema/menus.json b/packages/application-extension/schema/menus.json
deleted file mode 100644
index 84fc39684..000000000
--- a/packages/application-extension/schema/menus.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
- "title": "Jupyter Notebook Menu Entries",
- "description": "Jupyter Notebook Menu Entries",
- "jupyter.lab.menus": {
- "main": [
- {
- "id": "jp-mainmenu-file",
- "items": [
- {
- "command": "application:rename",
- "rank": 4.5
- },
- {
- "command": "application:duplicate",
- "rank": 4.8
- },
- {
- "command": "notebook:trust",
- "rank": 20
- },
- {
- "type": "separator",
- "rank": 30
- },
- {
- "command": "filemenu:close-and-cleanup",
- "rank": 40
- },
- {
- "command": "application:close",
- "disabled": true
- }
- ]
- },
- {
- "id": "jp-mainmenu-view",
- "items": [
- {
- "type": "submenu",
- "disabled": true,
- "submenu": {
- "id": "jp-mainmenu-view-appearance"
- }
- }
- ]
- },
- {
- "id": "jp-mainmenu-run",
- "items": [
- {
- "type": "separator",
- "rank": 1000
- },
- {
- "type": "submenu",
- "rank": 1010,
- "submenu": {
- "id": "jp-runmenu-change-cell-type",
- "label": "Cell Type",
- "items": [
- {
- "command": "notebook:change-cell-to-code",
- "rank": 0
- },
- {
- "command": "notebook:change-cell-to-markdown",
- "rank": 0
- },
- {
- "command": "notebook:change-cell-to-raw",
- "rank": 0
- }
- ]
- }
- }
- ]
- }
- ]
- },
- "properties": {},
- "additionalProperties": false,
- "type": "object"
-}
diff --git a/packages/application-extension/schema/pages.json b/packages/application-extension/schema/pages.json
deleted file mode 100644
index 86de48b49..000000000
--- a/packages/application-extension/schema/pages.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "title": "Jupyter Notebook Pages",
- "description": "Jupyter Notebook Pages",
- "jupyter.lab.menus": {
- "main": [
- {
- "id": "jp-mainmenu-view",
- "items": [
- {
- "command": "application:open-lab",
- "rank": 2
- },
- {
- "command": "application:open-tree",
- "rank": 2
- }
- ]
- }
- ]
- },
- "properties": {},
- "additionalProperties": false,
- "type": "object"
-}
diff --git a/packages/application-extension/schema/shell.json b/packages/application-extension/schema/shell.json
deleted file mode 100644
index 15727fa4d..000000000
--- a/packages/application-extension/schema/shell.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "$schema": "http://json-schema.org/draft-07/schema",
- "title": "Notebook Shell",
- "description": "Notebook Shell layout settings.",
- "properties": {
- "layout": {
- "$ref": "#/definitions/layout",
- "type": "object",
- "title": "Customize shell widget positioning",
- "description": "Overrides default widget position in the application layout",
- "default": {
- "Debugger Console": { "area": "down" },
- "Markdown Preview": { "area": "right" },
- "Plugins": { "area": "left" }
- }
- }
- },
- "additionalProperties": false,
- "type": "object",
- "definitions": {
- "layout": {
- "type": "object",
- "properties": {
- "[\\w-]+": {
- "type": "object",
- "properties": {
- "area": {
- "enum": ["left", "right"]
- }
- },
- "additionalProperties": false
- }
- }
- }
- }
-}
diff --git a/packages/application-extension/schema/shortcuts.json b/packages/application-extension/schema/shortcuts.json
deleted file mode 100644
index 75891bc87..000000000
--- a/packages/application-extension/schema/shortcuts.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "jupyter.lab.setting-icon": "notebook-ui-components:jupyter",
- "jupyter.lab.setting-icon-label": "Jupyter Notebook shortcuts",
- "title": "Jupyter Notebook Shortcuts",
- "description": "Keyboard shortcuts for Jupyter Notebook",
- "jupyter.lab.shortcuts": [
- {
- "args": {},
- "command": "notebook:toggle-cell-outputs",
- "keys": ["O"],
- "selector": ".jp-Notebook.jp-mod-commandMode:not(.jp-mod-readWrite) :focus"
- }
- ],
- "additionalProperties": false,
- "type": "object"
-}
diff --git a/packages/application-extension/schema/title.json b/packages/application-extension/schema/title.json
deleted file mode 100644
index 10649e345..000000000
--- a/packages/application-extension/schema/title.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "title": "Title widget",
- "description": "Title widget",
- "jupyter.lab.toolbars": {
- "TopBar": [{ "name": "widgetTitle", "rank": 10 }]
- },
- "properties": {},
- "additionalProperties": false,
- "type": "object"
-}
diff --git a/packages/application-extension/schema/top.json b/packages/application-extension/schema/top.json
deleted file mode 100644
index dafe4b799..000000000
--- a/packages/application-extension/schema/top.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
- "jupyter.lab.setting-icon": "notebook-ui-components:jupyter",
- "jupyter.lab.setting-icon-label": "Jupyter Notebook Top Area",
- "title": "Jupyter Notebook Top Area",
- "description": "Jupyter Notebook Top Area settings",
- "jupyter.lab.menus": {
- "main": [
- {
- "id": "jp-mainmenu-view",
- "items": [
- {
- "command": "application:toggle-top",
- "rank": 2
- }
- ]
- }
- ]
- },
- "properties": {
- "visible": {
- "type": "string",
- "enum": ["yes", "no", "automatic"],
- "title": "Top Bar Visibility",
- "description": "Whether to show the top bar or not, yes for always showing, no for always not showing, automatic for adjusting to screen size",
- "default": "automatic"
- }
- },
- "additionalProperties": false,
- "type": "object"
-}
diff --git a/packages/application-extension/schema/zen.json b/packages/application-extension/schema/zen.json
deleted file mode 100644
index 1f1dafc1e..000000000
--- a/packages/application-extension/schema/zen.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "title": "Jupyter Notebook Zen Mode",
- "description": "Jupyter Notebook Zen Mode",
- "jupyter.lab.menus": {
- "main": [
- {
- "id": "jp-mainmenu-view",
- "items": [
- {
- "command": "application:toggle-zen",
- "rank": 3
- }
- ]
- }
- ]
- },
- "properties": {},
- "additionalProperties": false,
- "type": "object"
-}
diff --git a/packages/application-extension/src/index.ts b/packages/application-extension/src/index.ts
deleted file mode 100644
index 1367cf161..000000000
--- a/packages/application-extension/src/index.ts
+++ /dev/null
@@ -1,1214 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import {
- ILabStatus,
- IRouter,
- ITreePathUpdater,
- JupyterFrontEnd,
- JupyterFrontEndPlugin,
- JupyterLab,
-} from '@jupyterlab/application';
-
-import {
- DOMUtils,
- ICommandPalette,
- ISanitizer,
- ISplashScreen,
- IToolbarWidgetRegistry,
- showErrorMessage,
-} from '@jupyterlab/apputils';
-
-import { ConsolePanel } from '@jupyterlab/console';
-
-import { PageConfig, PathExt, URLExt } from '@jupyterlab/coreutils';
-
-import { IDocumentManager, renameDialog } from '@jupyterlab/docmanager';
-
-import { DocumentWidget } from '@jupyterlab/docregistry';
-
-import { IMainMenu } from '@jupyterlab/mainmenu';
-
-import {
- ILatexTypesetter,
- IMarkdownParser,
- IRenderMime,
- IRenderMimeRegistry,
- RenderMimeRegistry,
- standardRendererFactories,
-} from '@jupyterlab/rendermime';
-
-import { ISettingRegistry } from '@jupyterlab/settingregistry';
-
-import { ITranslator, nullTranslator } from '@jupyterlab/translation';
-
-import {
- NotebookApp,
- NotebookShell,
- INotebookShell,
- SidePanel,
- SidePanelHandler,
- SidePanelPalette,
- INotebookPathOpener,
- defaultNotebookPathOpener,
-} from '@jupyter-notebook/application';
-
-import { jupyterIcon } from '@jupyter-notebook/ui-components';
-
-import { PromiseDelegate } from '@lumino/coreutils';
-
-import {
- DisposableDelegate,
- DisposableSet,
- IDisposable,
-} from '@lumino/disposable';
-
-import { Menu, Widget } from '@lumino/widgets';
-
-/**
- * A regular expression to match path to notebooks and documents
- */
-const TREE_PATTERN = new RegExp('/(notebooks|edit)/(.*)');
-
-/**
- * A regular expression to suppress the file extension from display for .ipynb files.
- */
-const STRIP_IPYNB = /\.ipynb$/;
-
-/**
- * The JupyterLab document manager plugin id.
- */
-const JUPYTERLAB_DOCMANAGER_PLUGIN_ID =
- '@jupyterlab/docmanager-extension:plugin';
-
-/**
- * The command IDs used by the application plugin.
- */
-namespace CommandIDs {
- /**
- * Duplicate the current document and open the new document
- */
- export const duplicate = 'application:duplicate';
-
- /**
- * Handle local links
- */
- export const handleLink = 'application:handle-local-link';
-
- /**
- * Toggle Top Bar visibility
- */
- export const toggleTop = 'application:toggle-top';
-
- /**
- * Toggle side panel visibility
- */
- export const togglePanel = 'application:toggle-panel';
-
- /**
- * Toggle the Zen mode
- */
- export const toggleZen = 'application:toggle-zen';
-
- /**
- * Open JupyterLab
- */
- export const openLab = 'application:open-lab';
-
- /**
- * Open the tree page.
- */
- export const openTree = 'application:open-tree';
-
- /**
- * Rename the current document
- */
- export const rename = 'application:rename';
-
- /**
- * Resolve tree path
- */
- export const resolveTree = 'application:resolve-tree';
-}
-
-/**
- * Check if the application is dirty before closing the browser tab.
- */
-const dirty: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:dirty',
- description:
- 'Check if the application is dirty before closing the browser tab.',
- autoStart: true,
- requires: [ILabStatus, ITranslator],
- activate: (
- app: JupyterFrontEnd,
- status: ILabStatus,
- translator: ITranslator
- ): void => {
- if (!(app instanceof NotebookApp)) {
- throw new Error(`${dirty.id} must be activated in Jupyter Notebook.`);
- }
- const trans = translator.load('notebook');
- const message = trans.__(
- 'Are you sure you want to exit Jupyter Notebook?\n\nAny unsaved changes will be lost.'
- );
-
- window.addEventListener('beforeunload', (event) => {
- if (app.status.isDirty) {
- return ((event as any).returnValue = message);
- }
- });
- },
-};
-
-/**
- * The application info.
- */
-const info: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:info',
- autoStart: true,
- provides: JupyterLab.IInfo,
- activate: (app: JupyterFrontEnd): JupyterLab.IInfo => {
- if (!(app instanceof NotebookApp)) {
- throw new Error(`${info.id} must be activated in Jupyter Notebook.`);
- }
- return app.info;
- },
-};
-
-/**
- * The logo plugin.
- */
-const logo: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:logo',
- description: 'The logo plugin.',
- autoStart: true,
- activate: (app: JupyterFrontEnd) => {
- const baseUrl = PageConfig.getBaseUrl();
- const node = document.createElement('a');
- node.href = `${baseUrl}tree`;
- node.target = '_blank';
- node.rel = 'noopener noreferrer';
- const logo = new Widget({ node });
-
- jupyterIcon.element({
- container: node,
- elementPosition: 'center',
- padding: '2px 2px 2px 8px',
- height: '28px',
- width: 'auto',
- cursor: 'pointer',
- margin: 'auto',
- });
- logo.id = 'jp-NotebookLogo';
- app.shell.add(logo, 'top', { rank: 0 });
- },
-};
-
-/**
- * A plugin to open documents in the main area.
- */
-const opener: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:opener',
- description: 'A plugin to open documents in the main area.',
- autoStart: true,
- requires: [IRouter, IDocumentManager],
- optional: [ISettingRegistry],
- activate: (
- app: JupyterFrontEnd,
- router: IRouter,
- docManager: IDocumentManager,
- settingRegistry: ISettingRegistry | null
- ): void => {
- const { commands, docRegistry } = app;
-
- const command = 'router:tree';
- commands.addCommand(command, {
- execute: (args: any) => {
- const parsed = args as IRouter.ILocation;
- const matches = parsed.path.match(TREE_PATTERN) ?? [];
- const [, , path] = matches;
- if (!path) {
- return;
- }
-
- app.started.then(async () => {
- const file = decodeURIComponent(path);
- const urlParams = new URLSearchParams(parsed.search);
- let defaultFactory = docRegistry.defaultWidgetFactory(path).name;
-
- // Explicitly get the default viewers from the settings because
- // JupyterLab might not have had the time to load the settings yet (race condition)
- // Relevant code: https://github.com/jupyterlab/jupyterlab/blob/d56ff811f39b3c10c6d8b6eb27a94624b753eb53/packages/docmanager-extension/src/index.tsx#L265-L293
- if (settingRegistry) {
- const settings = await settingRegistry.load(
- JUPYTERLAB_DOCMANAGER_PLUGIN_ID
- );
- const defaultViewers = settings.get('defaultViewers').composite as {
- [ft: string]: string;
- };
- // get the file types for the path
- const types = docRegistry.getFileTypesForPath(path);
- // for each file type, check if there is a default viewer and if it
- // is available in the docRegistry. If it is the case, use it as the
- // default factory
- types.forEach((ft) => {
- if (
- defaultViewers[ft.name] !== undefined &&
- docRegistry.getWidgetFactory(defaultViewers[ft.name])
- ) {
- defaultFactory = defaultViewers[ft.name];
- }
- });
- }
-
- const factory = urlParams.get('factory') ?? defaultFactory;
- docManager.open(file, factory, undefined, {
- ref: '_noref',
- });
- });
- },
- });
-
- router.register({ command, pattern: TREE_PATTERN });
- },
-};
-
-/**
- * A plugin to customize menus
- */
-const menus: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:menus',
- description: 'A plugin to customize menus.',
- requires: [IMainMenu],
- autoStart: true,
- activate: (app: JupyterFrontEnd, menu: IMainMenu) => {
- // always disable the Tabs menu
- menu.tabsMenu.dispose();
-
- const page = PageConfig.getOption('notebookPage');
- switch (page) {
- case 'consoles':
- case 'terminals':
- case 'tree':
- menu.editMenu.dispose();
- menu.kernelMenu.dispose();
- menu.runMenu.dispose();
- break;
- case 'edit':
- menu.kernelMenu.dispose();
- menu.runMenu.dispose();
- break;
- default:
- break;
- }
- },
-};
-
-/**
- * A plugin to provide a spacer at rank 900 in the menu area
- */
-const menuSpacer: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:menu-spacer',
- description: 'A plugin to provide a spacer at rank 900 in the menu area.',
- autoStart: true,
- activate: (app: JupyterFrontEnd) => {
- const menu = new Widget();
- menu.id = DOMUtils.createDomID();
- menu.addClass('jp-NotebookSpacer');
- app.shell.add(menu, 'menu', { rank: 900 });
- },
-};
-
-/**
- * Add commands to open the tree and running pages.
- */
-const pages: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:pages',
- description: 'Add commands to open the tree and running pages.',
- autoStart: true,
- requires: [ITranslator],
- optional: [ICommandPalette],
- activate: (
- app: JupyterFrontEnd,
- translator: ITranslator,
- palette: ICommandPalette | null
- ): void => {
- const trans = translator.load('notebook');
- const baseUrl = PageConfig.getBaseUrl();
-
- app.commands.addCommand(CommandIDs.openLab, {
- label: trans.__('Open JupyterLab'),
- execute: () => {
- window.open(URLExt.join(baseUrl, 'lab'));
- },
- });
- const page = PageConfig.getOption('notebookPage');
-
- app.commands.addCommand(CommandIDs.openTree, {
- label: trans.__('File Browser'),
- execute: () => {
- if (page === 'tree') {
- app.commands.execute('filebrowser:activate');
- } else {
- window.open(URLExt.join(baseUrl, 'tree'));
- }
- },
- });
-
- if (palette) {
- palette.addItem({ command: CommandIDs.openLab, category: 'View' });
- palette.addItem({ command: CommandIDs.openTree, category: 'View' });
- }
- },
-};
-
-/**
- * A plugin to open paths in new browser tabs.
- */
-const pathOpener: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:path-opener',
- description: 'A plugin to open paths in new browser tabs.',
- autoStart: true,
- provides: INotebookPathOpener,
- activate: (app: JupyterFrontEnd): INotebookPathOpener => {
- return defaultNotebookPathOpener;
- },
-};
-
-/**
- * The default paths for a Jupyter Notebook app.
- */
-const paths: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:paths',
- description: 'The default paths for a Jupyter Notebook app.',
- autoStart: true,
- provides: JupyterFrontEnd.IPaths,
- activate: (app: JupyterFrontEnd): JupyterFrontEnd.IPaths => {
- if (!(app instanceof NotebookApp)) {
- throw new Error(`${paths.id} must be activated in Jupyter Notebook.`);
- }
- return app.paths;
- },
-};
-
-/**
- * A plugin providing a rendermime registry.
- */
-const rendermime: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:rendermime',
- description: 'A plugin providing a rendermime registry.',
- autoStart: true,
- provides: IRenderMimeRegistry,
- optional: [
- IDocumentManager,
- ILatexTypesetter,
- ISanitizer,
- IMarkdownParser,
- ITranslator,
- INotebookPathOpener,
- ],
- activate: (
- app: JupyterFrontEnd,
- docManager: IDocumentManager | null,
- latexTypesetter: ILatexTypesetter | null,
- sanitizer: IRenderMime.ISanitizer | null,
- markdownParser: IMarkdownParser | null,
- translator: ITranslator | null,
- notebookPathOpener: INotebookPathOpener | null
- ) => {
- const trans = (translator ?? nullTranslator).load('jupyterlab');
- const opener = notebookPathOpener ?? defaultNotebookPathOpener;
- if (docManager) {
- app.commands.addCommand(CommandIDs.handleLink, {
- label: trans.__('Handle Local Link'),
- execute: (args) => {
- const path = args['path'] as string | undefined | null;
- if (path === undefined || path === null) {
- return;
- }
- return docManager.services.contents
- .get(path, { content: false })
- .then((model) => {
- const baseUrl = PageConfig.getBaseUrl();
- opener.open({
- prefix: URLExt.join(baseUrl, 'tree'),
- path: model.path,
- target: '_blank',
- });
- });
- },
- });
- }
- return new RenderMimeRegistry({
- initialFactories: standardRendererFactories,
- linkHandler: !docManager
- ? undefined
- : {
- handleLink: (node: HTMLElement, path: string, id?: string) => {
- // If node has the download attribute explicitly set, use the
- // default browser downloading behavior.
- if (node.tagName === 'A' && node.hasAttribute('download')) {
- return;
- }
- app.commandLinker.connectNode(node, CommandIDs.handleLink, {
- path,
- id,
- });
- },
- },
- latexTypesetter: latexTypesetter ?? undefined,
- markdownParser: markdownParser ?? undefined,
- translator: translator ?? undefined,
- sanitizer: sanitizer ?? undefined,
- });
- },
-};
-
-/**
- * The default Jupyter Notebook application shell.
- */
-const shell: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:shell',
- description: 'The default Jupyter Notebook application shell.',
- autoStart: true,
- provides: INotebookShell,
- optional: [ISettingRegistry],
- activate: (
- app: JupyterFrontEnd,
- settingRegistry: ISettingRegistry | null
- ) => {
- if (!(app.shell instanceof NotebookShell)) {
- throw new Error(`${shell.id} did not find a NotebookShell instance.`);
- }
- const notebookShell = app.shell;
-
- if (settingRegistry) {
- settingRegistry
- .load(shell.id)
- .then((settings) => {
- // Add a layer of customization to support app shell mode
- const customLayout = settings.composite['layout'] as any;
-
- // Restore the layout.
- void notebookShell.restoreLayout(customLayout);
- })
- .catch((reason) => {
- console.error('Fail to load settings for the layout restorer.');
- console.error(reason);
- });
- }
-
- return notebookShell;
- },
-};
-
-/**
- * The default splash screen provider.
- */
-const splash: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:splash',
- description: 'Provides an empty splash screen.',
- autoStart: true,
- provides: ISplashScreen,
- activate: (app: JupyterFrontEnd) => {
- const { restored } = app;
- const splash = document.createElement('div');
- splash.style.position = 'absolute';
- splash.style.width = '100%';
- splash.style.height = '100%';
- splash.style.zIndex = '10';
-
- return {
- show: (light = true) => {
- splash.style.backgroundColor = light ? 'white' : '#111111';
- document.body.appendChild(splash);
- return new DisposableDelegate(async () => {
- await restored;
- document.body.removeChild(splash);
- });
- },
- };
- },
-};
-
-/**
- * The default JupyterLab application status provider.
- */
-const status: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:status',
- description: 'The default JupyterLab application status provider.',
- autoStart: true,
- provides: ILabStatus,
- activate: (app: JupyterFrontEnd) => {
- if (!(app instanceof NotebookApp)) {
- throw new Error(`${status.id} must be activated in Jupyter Notebook.`);
- }
- return app.status;
- },
-};
-
-/**
- * A plugin to display the document title in the browser tab title
- */
-const tabTitle: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:tab-title',
- description:
- 'A plugin to display the document title in the browser tab title.',
- autoStart: true,
- requires: [INotebookShell],
- activate: (app: JupyterFrontEnd, shell: INotebookShell) => {
- const setTabTitle = () => {
- const current = shell.currentWidget;
- if (current instanceof ConsolePanel) {
- const update = () => {
- const title =
- current.sessionContext.path || current.sessionContext.name;
- const basename = PathExt.basename(title);
- // Strip the ".ipynb" suffix from filenames for display in tab titles.
- document.title = basename.replace(STRIP_IPYNB, '');
- };
- current.sessionContext.sessionChanged.connect(update);
- update();
- return;
- } else if (current instanceof DocumentWidget) {
- const update = () => {
- const basename = PathExt.basename(current.context.path);
- document.title = basename.replace(STRIP_IPYNB, '');
- };
- current.context.pathChanged.connect(update);
- update();
- }
- };
-
- shell.currentChanged.connect(setTabTitle);
- setTabTitle();
- },
-};
-
-/**
- * A plugin to display and rename the title of a file
- */
-const title: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:title',
- description: 'A plugin to display and rename the title of a file.',
- autoStart: true,
- requires: [INotebookShell, ITranslator],
- optional: [IDocumentManager, IRouter, IToolbarWidgetRegistry],
- activate: (
- app: JupyterFrontEnd,
- shell: INotebookShell,
- translator: ITranslator,
- docManager: IDocumentManager | null,
- router: IRouter | null,
- toolbarRegistry: IToolbarWidgetRegistry | null
- ) => {
- const { commands } = app;
- const trans = translator.load('notebook');
-
- const node = document.createElement('div');
- if (toolbarRegistry) {
- toolbarRegistry.addFactory('TopBar', 'widgetTitle', (toolbar) => {
- const widget = new Widget({ node });
- widget.id = 'jp-title';
- return widget;
- });
- }
-
- const addTitle = async (): Promise => {
- const current = shell.currentWidget;
- if (!current || !(current instanceof DocumentWidget)) {
- return;
- }
- if (node.children.length > 0) {
- return;
- }
-
- const h = document.createElement('h1');
- h.textContent = current.title.label.replace(STRIP_IPYNB, '');
- node.appendChild(h);
- node.style.marginLeft = '10px';
- if (!docManager) {
- return;
- }
-
- const isEnabled = () => {
- const { currentWidget } = shell;
- return !!(currentWidget && docManager.contextForWidget(currentWidget));
- };
-
- commands.addCommand(CommandIDs.duplicate, {
- label: () => trans.__('Duplicate'),
- isEnabled,
- execute: async () => {
- if (!isEnabled()) {
- return;
- }
-
- // Duplicate the file, and open the new file.
- const result = await docManager.duplicate(current.context.path);
- await commands.execute('docmanager:open', { path: result.path });
- },
- });
-
- commands.addCommand(CommandIDs.rename, {
- label: () => trans.__('Rename鈥'),
- isEnabled,
- execute: async () => {
- if (!isEnabled()) {
- return;
- }
-
- try {
- const result = await renameDialog(docManager, current.context);
-
- // activate the current widget to bring the focus
- if (current) {
- current.activate();
- }
-
- if (result === null) {
- return;
- }
- } catch (error) {
- showErrorMessage(
- trans.__('Rename Error'),
- (error as Error).message ||
- trans.__('An error occurred while renaming the file.')
- );
- return;
- }
-
- const newPath = current.context.path;
- const basename = PathExt.basename(newPath);
-
- h.textContent = basename.replace(STRIP_IPYNB, '');
- if (!router) {
- return;
- }
- const matches = router.current.path.match(TREE_PATTERN) ?? [];
- const [, route, path] = matches;
- if (!route || !path) {
- return;
- }
- const encoded = encodeURIComponent(newPath);
- router.navigate(`/${route}/${encoded}`, {
- skipRouting: true,
- });
- },
- });
-
- node.onclick = async () => {
- void commands.execute(CommandIDs.rename);
- };
- };
-
- shell.currentChanged.connect(addTitle);
- void addTitle();
- },
-};
-
-/**
- * Plugin to toggle the top header visibility.
- */
-const topVisibility: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:top',
- description: 'Plugin to toggle the top header visibility.',
- requires: [INotebookShell, ITranslator],
- optional: [ISettingRegistry, ICommandPalette],
- activate: (
- app: JupyterFrontEnd,
- notebookShell: INotebookShell,
- translator: ITranslator,
- settingRegistry: ISettingRegistry | null,
- palette: ICommandPalette | null
- ) => {
- const trans = translator.load('notebook');
- const top = notebookShell.top;
- const pluginId = topVisibility.id;
-
- app.commands.addCommand(CommandIDs.toggleTop, {
- label: trans.__('Show Header'),
- execute: () => {
- top.setHidden(top.isVisible);
- if (settingRegistry) {
- void settingRegistry.set(
- pluginId,
- 'visible',
- top.isVisible ? 'yes' : 'no'
- );
- }
- },
- isToggled: () => top.isVisible,
- });
-
- let adjustToScreen = false;
-
- if (settingRegistry) {
- const loadSettings = settingRegistry.load(pluginId);
- const updateSettings = (settings: ISettingRegistry.ISettings): void => {
- // 'visible' property from user preferences or default settings
- let visible = settings.get('visible').composite;
- if (settings.user.visible !== undefined) {
- visible = settings.user.visible;
- }
- top.setHidden(visible === 'no');
- // adjust to screen from user preferences or default settings
- adjustToScreen = visible === 'automatic';
- };
-
- Promise.all([loadSettings, app.restored])
- .then(([settings]) => {
- updateSettings(settings);
- settings.changed.connect((settings) => {
- updateSettings(settings);
- });
- })
- .catch((reason: Error) => {
- console.error(reason.message);
- });
- }
-
- if (palette) {
- palette.addItem({ command: CommandIDs.toggleTop, category: 'View' });
- }
-
- const onChanged = (): void => {
- if (!adjustToScreen) {
- return;
- }
- if (app.format === 'desktop') {
- notebookShell.expandTop();
- } else {
- notebookShell.collapseTop();
- }
- };
-
- // listen on format change (mobile and desktop) to make the view more compact
- app.formatChanged.connect(onChanged);
- },
- autoStart: true,
-};
-
-/**
- * Plugin to toggle the left or right side panel's visibility.
- */
-const sidePanelVisibility: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:sidepanel',
- description: 'Plugin to toggle the visibility of left or right side panel.',
- requires: [INotebookShell, ITranslator],
- optional: [IMainMenu, ICommandPalette],
- autoStart: true,
- activate: (
- app: JupyterFrontEnd,
- notebookShell: INotebookShell,
- translator: ITranslator,
- menu: IMainMenu | null,
- palette: ICommandPalette | null
- ) => {
- const trans = translator.load('notebook');
-
- /* Arguments for togglePanel command:
- * side, left or right area
- * title, widget title to show in the menu
- * id, widget ID to activate in the side panel
- */
- app.commands.addCommand(CommandIDs.togglePanel, {
- label: (args) => args['title'] as string,
- caption: (args) => {
- // We do not substitute the parameter into the string because the parameter is not
- // localized (e.g., it is always 'left') even though the string is localized.
- if (args['side'] === 'left') {
- return trans.__(
- 'Show %1 in the left sidebar',
- args['title'] as string
- );
- } else if (args['side'] === 'right') {
- return trans.__(
- 'Show %1 in the right sidebar',
- args['title'] as string
- );
- }
- return trans.__('Show %1 in the sidebar', args['title'] as string);
- },
- execute: (args) => {
- switch (args['side'] as string) {
- case 'left':
- if (notebookShell.leftCollapsed) {
- notebookShell.expandLeft(args.id as string);
- } else if (
- notebookShell.leftHandler.currentWidget?.id !== args.id
- ) {
- notebookShell.expandLeft(args.id as string);
- } else {
- notebookShell.collapseLeft();
- if (notebookShell.currentWidget) {
- notebookShell.activateById(notebookShell.currentWidget.id);
- }
- }
- break;
- case 'right':
- if (notebookShell.rightCollapsed) {
- notebookShell.expandRight(args.id as string);
- } else if (
- notebookShell.rightHandler.currentWidget?.id !== args.id
- ) {
- notebookShell.expandRight(args.id as string);
- } else {
- notebookShell.collapseRight();
- if (notebookShell.currentWidget) {
- notebookShell.activateById(notebookShell.currentWidget.id);
- }
- }
- break;
- }
- },
- isToggled: (args) => {
- switch (args['side'] as string) {
- case 'left': {
- if (notebookShell.leftCollapsed) {
- return false;
- }
- const currentWidget = notebookShell.leftHandler.currentWidget;
- if (!currentWidget) {
- return false;
- }
-
- return currentWidget.id === (args['id'] as string);
- }
- case 'right': {
- if (notebookShell.rightCollapsed) {
- return false;
- }
- const currentWidget = notebookShell.rightHandler.currentWidget;
- if (!currentWidget) {
- return false;
- }
-
- return currentWidget.id === (args['id'] as string);
- }
- }
- return false;
- },
- });
-
- const sidePanelMenu: { [area in SidePanel.Area]: IDisposable | null } = {
- left: null,
- right: null,
- };
-
- /**
- * The function which adds entries to the View menu for each widget of a side panel.
- *
- * @param area - 'left' or 'right', the area of the side panel.
- * @param entryLabel - the name of the main entry in the View menu for that side panel.
- * @returns - The disposable menu added to the View menu or null.
- */
- const updateMenu = (area: SidePanel.Area, entryLabel: string) => {
- if (menu === null) {
- return null;
- }
-
- // Remove the previous menu entry for this side panel.
- sidePanelMenu[area]?.dispose();
-
- // Creates a new menu entry and populates it with side panel widgets.
- const newMenu = new Menu({ commands: app.commands });
- newMenu.title.label = entryLabel;
- const widgets = notebookShell.widgets(area);
- let menuToAdd = false;
-
- for (const widget of widgets) {
- newMenu.addItem({
- command: CommandIDs.togglePanel,
- args: {
- side: area,
- title: `Show ${widget.title.caption}`,
- id: widget.id,
- },
- });
- menuToAdd = true;
- }
-
- // If there are widgets, add the menu to the main menu entry.
- if (menuToAdd) {
- sidePanelMenu[area] = menu.viewMenu.addItem({
- type: 'submenu',
- submenu: newMenu,
- });
- }
- };
-
- app.restored.then(() => {
- // Create menu entries for the left and right panel.
- if (menu) {
- const getSidePanelLabel = (area: SidePanel.Area): string => {
- if (area === 'left') {
- return trans.__('Left Sidebar');
- } else {
- return trans.__('Right Sidebar');
- }
- };
- const leftArea = notebookShell.leftHandler.area;
- const leftLabel = getSidePanelLabel(leftArea);
- updateMenu(leftArea, leftLabel);
-
- const rightArea = notebookShell.rightHandler.area;
- const rightLabel = getSidePanelLabel(rightArea);
- updateMenu(rightArea, rightLabel);
-
- const handleSidePanelChange = (
- sidePanel: SidePanelHandler,
- widget: Widget
- ) => {
- const label = getSidePanelLabel(sidePanel.area);
- updateMenu(sidePanel.area, label);
- };
-
- notebookShell.leftHandler.widgetAdded.connect(handleSidePanelChange);
- notebookShell.leftHandler.widgetRemoved.connect(handleSidePanelChange);
- notebookShell.rightHandler.widgetAdded.connect(handleSidePanelChange);
- notebookShell.rightHandler.widgetRemoved.connect(handleSidePanelChange);
- }
-
- // Add palette entries for side panels.
- if (palette) {
- const sidePanelPalette = new SidePanelPalette({
- commandPalette: palette as ICommandPalette,
- command: CommandIDs.togglePanel,
- });
-
- notebookShell.leftHandler.widgets.forEach((widget) => {
- sidePanelPalette.addItem(widget, notebookShell.leftHandler.area);
- });
-
- notebookShell.rightHandler.widgets.forEach((widget) => {
- sidePanelPalette.addItem(widget, notebookShell.rightHandler.area);
- });
-
- // Update menu and palette when widgets are added or removed from side panels.
- notebookShell.leftHandler.widgetAdded.connect((sidePanel, widget) => {
- sidePanelPalette.addItem(widget, sidePanel.area);
- });
- notebookShell.leftHandler.widgetRemoved.connect((sidePanel, widget) => {
- sidePanelPalette.removeItem(widget, sidePanel.area);
- });
- notebookShell.rightHandler.widgetAdded.connect((sidePanel, widget) => {
- sidePanelPalette.addItem(widget, sidePanel.area);
- });
- notebookShell.rightHandler.widgetRemoved.connect(
- (sidePanel, widget) => {
- sidePanelPalette.removeItem(widget, sidePanel.area);
- }
- );
- }
- });
- },
-};
-
-/**
- * A plugin for defining keyboard shortcuts specific to the notebook application.
- */
-const shortcuts: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:shortcuts',
- description:
- 'A plugin for defining keyboard shortcuts specific to the notebook application.',
- autoStart: true,
- activate: (app: JupyterFrontEnd) => {
- // for now this plugin is mostly useful for defining keyboard shortcuts
- // specific to the notebook application
- },
-};
-
-/**
- * The default tree route resolver plugin.
- */
-const tree: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:tree-resolver',
- description: 'The default tree route resolver plugin.',
- autoStart: true,
- requires: [IRouter],
- provides: JupyterFrontEnd.ITreeResolver,
- activate: (
- app: JupyterFrontEnd,
- router: IRouter
- ): JupyterFrontEnd.ITreeResolver => {
- const { commands } = app;
- const set = new DisposableSet();
- const delegate = new PromiseDelegate();
-
- const treePattern = new RegExp('/(/tree/.*)?');
-
- set.add(
- commands.addCommand(CommandIDs.resolveTree, {
- execute: (async (args: IRouter.ILocation) => {
- if (set.isDisposed) {
- return;
- }
-
- const query = URLExt.queryStringToObject(args.search ?? '');
- const browser = query['file-browser-path'] || '';
-
- // Remove the file browser path from the query string.
- delete query['file-browser-path'];
-
- // Clean up artifacts immediately upon routing.
- set.dispose();
-
- delegate.resolve({ browser, file: PageConfig.getOption('treePath') });
- }) as (args: any) => Promise,
- })
- );
- set.add(
- router.register({ command: CommandIDs.resolveTree, pattern: treePattern })
- );
-
- // If a route is handled by the router without the tree command being
- // invoked, resolve to `null` and clean up artifacts.
- const listener = () => {
- if (set.isDisposed) {
- return;
- }
- set.dispose();
- delegate.resolve(null);
- };
- router.routed.connect(listener);
- set.add(
- new DisposableDelegate(() => {
- router.routed.disconnect(listener);
- })
- );
-
- return { paths: delegate.promise };
- },
-};
-
-/**
- * Plugin to update tree path.
- */
-const treePathUpdater: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:tree-updater',
- description: 'Plugin to update tree path.',
- requires: [IRouter],
- provides: ITreePathUpdater,
- activate: (app: JupyterFrontEnd, router: IRouter) => {
- function updateTreePath(treePath: string) {
- if (treePath !== PageConfig.getOption('treePath')) {
- const path = URLExt.join(
- PageConfig.getOption('baseUrl') || '/',
- 'tree',
- URLExt.encodeParts(treePath)
- );
- router.navigate(path, { skipRouting: true });
- // Persist the new tree path to PageConfig as it is used elsewhere at runtime.
- PageConfig.setOption('treePath', treePath);
- }
- }
- return updateTreePath;
- },
- autoStart: true,
-};
-
-/**
- * Translator plugin
- */
-const translator: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:translator',
- description: 'Translator plugin',
- requires: [INotebookShell, ITranslator],
- autoStart: true,
- activate: (
- app: JupyterFrontEnd,
- notebookShell: INotebookShell,
- translator: ITranslator
- ) => {
- notebookShell.translator = translator;
- },
-};
-
-/**
- * Zen mode plugin
- */
-const zen: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/application-extension:zen',
- description: 'Zen mode plugin.',
- autoStart: true,
- requires: [ITranslator],
- optional: [ICommandPalette, INotebookShell],
- activate: (
- app: JupyterFrontEnd,
- translator: ITranslator,
- palette: ICommandPalette | null,
- notebookShell: INotebookShell | null
- ): void => {
- const { commands } = app;
- const elem = document.documentElement;
- const trans = translator.load('notebook');
-
- const toggleOn = () => {
- notebookShell?.collapseTop();
- notebookShell?.menu.setHidden(true);
- zenModeEnabled = true;
- };
-
- const toggleOff = () => {
- notebookShell?.expandTop();
- notebookShell?.menu.setHidden(false);
- zenModeEnabled = false;
- };
-
- let zenModeEnabled = false;
- commands.addCommand(CommandIDs.toggleZen, {
- label: trans.__('Toggle Zen Mode'),
- execute: () => {
- if (!zenModeEnabled) {
- elem.requestFullscreen();
- toggleOn();
- } else {
- document.exitFullscreen();
- toggleOff();
- }
- },
- });
-
- document.addEventListener('fullscreenchange', () => {
- if (!document.fullscreenElement) {
- toggleOff();
- }
- });
-
- if (palette) {
- palette.addItem({ command: CommandIDs.toggleZen, category: 'Mode' });
- }
- },
-};
-
-/**
- * Export the plugins as default.
- */
-const plugins: JupyterFrontEndPlugin[] = [
- dirty,
- info,
- logo,
- menus,
- menuSpacer,
- opener,
- pages,
- pathOpener,
- paths,
- rendermime,
- shell,
- sidePanelVisibility,
- shortcuts,
- splash,
- status,
- tabTitle,
- title,
- topVisibility,
- tree,
- treePathUpdater,
- translator,
- zen,
-];
-
-export default plugins;
diff --git a/packages/application-extension/style/base.css b/packages/application-extension/style/base.css
deleted file mode 100644
index 9502dffc9..000000000
--- a/packages/application-extension/style/base.css
+++ /dev/null
@@ -1,45 +0,0 @@
-/*-----------------------------------------------------------------------------
-| Copyright (c) Jupyter Development Team.
-|
-| Distributed under the terms of the Modified BSD License.
-|----------------------------------------------------------------------------*/
-
-.jp-NotebookSpacer {
- flex-grow: 1;
- flex-shrink: 1;
-}
-
-.jp-MainAreaWidget {
- height: 100%;
-}
-
-.jp-Toolbar > .jp-Toolbar-item {
- height: unset;
-}
-
-#jp-UserMenu {
- flex: 0 0 auto;
- display: flex;
- text-align: center;
- margin-top: 8px;
-}
-
-.jp-MimeDocument .jp-RenderedJSON {
- background: var(--jp-layout-color0);
-}
-
-/* Hide the stub toolbar that appears above terminals and documents */
-
-.jp-MainAreaWidget > .jp-Toolbar-micro {
- display: none;
-}
-
-#jp-NotebookLogo {
- /* bring logo to the front so it is selectable by tab*/
- z-index: 10;
-}
-
-/* Hide the notification status item */
-.jp-Notification-Status {
- display: none;
-}
diff --git a/packages/application-extension/style/index.css b/packages/application-extension/style/index.css
deleted file mode 100644
index 8b3c7e551..000000000
--- a/packages/application-extension/style/index.css
+++ /dev/null
@@ -1,4 +0,0 @@
-@import url('~@jupyter-notebook/application/style/index.css');
-@import url('~@lumino/widgets/style/index.css');
-
-@import url('./base.css');
diff --git a/packages/application-extension/style/index.js b/packages/application-extension/style/index.js
deleted file mode 100644
index ccccd31e9..000000000
--- a/packages/application-extension/style/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-import '@jupyter-notebook/application/style/index.js';
-import '@lumino/widgets/style/index.js';
-
-import './base.css';
diff --git a/packages/application-extension/tsconfig.json b/packages/application-extension/tsconfig.json
deleted file mode 100644
index 34d11b400..000000000
--- a/packages/application-extension/tsconfig.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "extends": "../../tsconfigbase",
- "compilerOptions": {
- "outDir": "lib",
- "rootDir": "src"
- },
- "include": ["src/**/*"],
- "references": [
- {
- "path": "../application"
- },
- {
- "path": "../ui-components"
- }
- ]
-}
diff --git a/packages/application/babel.config.js b/packages/application/babel.config.js
deleted file mode 100644
index 8b5c76420..000000000
--- a/packages/application/babel.config.js
+++ /dev/null
@@ -1 +0,0 @@
-module.exports = require('@jupyterlab/testutils/lib/babel.config');
diff --git a/packages/application/jest.config.js b/packages/application/jest.config.js
deleted file mode 100644
index e692bc73b..000000000
--- a/packages/application/jest.config.js
+++ /dev/null
@@ -1,22 +0,0 @@
-const func = require('@jupyterlab/testutils/lib/jest-config');
-const upstream = func(__dirname);
-
-const esModules = ['lib0', 'y-protocols'].join('|');
-
-let local = {
- preset: 'ts-jest/presets/js-with-babel',
- transformIgnorePatterns: [
- `/node_modules/(?!${esModules}).+\\.js/(?!(@jupyterlab/.*)/)`,
- ],
- globals: {
- 'ts-jest': {
- tsconfig: './tsconfig.test.json',
- },
- },
-};
-
-Object.keys(local).forEach((option) => {
- upstream[option] = local[option];
-});
-
-module.exports = upstream;
diff --git a/packages/application/package.json b/packages/application/package.json
deleted file mode 100644
index 91db06935..000000000
--- a/packages/application/package.json
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "name": "@jupyter-notebook/application",
- "version": "7.6.0-alpha.0",
- "description": "Jupyter Notebook - Application",
- "homepage": "https://github.com/jupyter/notebook",
- "bugs": {
- "url": "https://github.com/jupyter/notebook/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/jupyter/notebook.git"
- },
- "license": "BSD-3-Clause",
- "author": "Project Jupyter",
- "sideEffects": [
- "style/*.css",
- "style/index.js"
- ],
- "main": "lib/index.js",
- "types": "lib/index.d.ts",
- "style": "style/index.css",
- "directories": {
- "lib": "lib/"
- },
- "files": [
- "lib/*.d.ts",
- "lib/*.js.map",
- "lib/*.js",
- "style/*.css",
- "style/index.js"
- ],
- "scripts": {
- "build": "tsc -b",
- "build:prod": "tsc -b",
- "build:test": "tsc --build tsconfig.test.json",
- "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo",
- "docs": "typedoc src",
- "test": "jest",
- "test:cov": "jest --collect-coverage",
- "test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand",
- "test:debug:watch": "node --inspect-brk node_modules/.bin/jest --runInBand --watch",
- "watch": "tsc -b --watch"
- },
- "dependencies": {
- "@jupyterlab/application": "~4.6.0-alpha.0",
- "@jupyterlab/coreutils": "~6.6.0-alpha.0",
- "@jupyterlab/docregistry": "~4.6.0-alpha.0",
- "@jupyterlab/rendermime-interfaces": "~3.14.0-alpha.0",
- "@jupyterlab/ui-components": "~4.6.0-alpha.0",
- "@lumino/algorithm": "^2.0.4",
- "@lumino/coreutils": "^2.2.2",
- "@lumino/messaging": "^2.0.4",
- "@lumino/polling": "^2.1.5",
- "@lumino/signaling": "^2.1.5",
- "@lumino/widgets": "^2.7.2"
- },
- "devDependencies": {
- "@babel/core": "^7.11.6",
- "@babel/preset-env": "^7.12.1",
- "@jupyterlab/testutils": "~4.6.0-alpha.0",
- "@types/jest": "^29.2.5",
- "jest": "^29.3.1",
- "rimraf": "^3.0.2",
- "ts-jest": "^29.0.3",
- "typescript": "~5.5.4"
- },
- "publishConfig": {
- "access": "public"
- },
- "jupyterlab": {
- "coreDependency": true
- },
- "styleModule": "style/index.js"
-}
diff --git a/packages/application/src/app.ts b/packages/application/src/app.ts
deleted file mode 100644
index 7d8818b4d..000000000
--- a/packages/application/src/app.ts
+++ /dev/null
@@ -1,232 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import {
- JupyterLab,
- JupyterFrontEnd,
- JupyterFrontEndPlugin,
-} from '@jupyterlab/application';
-
-import { Base64ModelFactory } from '@jupyterlab/docregistry';
-
-import { createRendermimePlugins } from '@jupyterlab/application/lib/mimerenderers';
-
-import { LabStatus } from '@jupyterlab/application/lib/status';
-
-import { PageConfig } from '@jupyterlab/coreutils';
-
-import { IRenderMime } from '@jupyterlab/rendermime-interfaces';
-
-import { Throttler } from '@lumino/polling';
-
-import { INotebookShell, NotebookShell } from './shell';
-
-/**
- * App is the main application class. It is instantiated once and shared.
- */
-export class NotebookApp extends JupyterFrontEnd {
- /**
- * Construct a new NotebookApp object.
- *
- * @param options The instantiation options for an application.
- */
- constructor(options: NotebookApp.IOptions = { shell: new NotebookShell() }) {
- super({ ...options, shell: options.shell ?? new NotebookShell() });
-
- // Add initial model factory.
- this.docRegistry.addModelFactory(new Base64ModelFactory());
- if (options.mimeExtensions) {
- for (const plugin of createRendermimePlugins(options.mimeExtensions)) {
- this.registerPlugin(plugin);
- }
- }
-
- // Create an IInfo dictionary from the options to override the defaults.
- const info = Object.keys(JupyterLab.defaultInfo).reduce((acc, val) => {
- if (val in options) {
- (acc as any)[val] = JSON.parse(JSON.stringify((options as any)[val]));
- }
- return acc;
- }, {} as Partial);
-
- // Populate application info.
- this._info = { ...JupyterLab.defaultInfo, ...info };
-
- this.restored = this.shell.restored;
-
- this.restored.then(() => this._formatter.invoke());
- }
-
- /**
- * The name of the application.
- */
- readonly name = 'Jupyter Notebook';
-
- /**
- * A namespace/prefix plugins may use to denote their provenance.
- */
- readonly namespace = this.name;
-
- /**
- * The application busy and dirty status signals and flags.
- */
- readonly status = new LabStatus(this);
-
- /**
- * Promise that resolves when the state is first restored
- */
- readonly restored: Promise;
-
- /**
- * The version of the application.
- */
-
- readonly version = PageConfig.getOption('appVersion') ?? 'unknown';
-
- /**
- * The NotebookApp application information dictionary.
- */
- get info(): JupyterLab.IInfo {
- return this._info;
- }
-
- /**
- * The JupyterLab application paths dictionary.
- */
- get paths(): JupyterFrontEnd.IPaths {
- return {
- urls: {
- base: PageConfig.getOption('baseUrl'),
- notFound: PageConfig.getOption('notFoundUrl'),
- app: PageConfig.getOption('appUrl'),
- static: PageConfig.getOption('staticUrl'),
- settings: PageConfig.getOption('settingsUrl'),
- themes: PageConfig.getOption('themesUrl'),
- doc: PageConfig.getOption('docUrl'),
- translations: PageConfig.getOption('translationsApiUrl'),
- hubHost: PageConfig.getOption('hubHost') || undefined,
- hubPrefix: PageConfig.getOption('hubPrefix') || undefined,
- hubUser: PageConfig.getOption('hubUser') || undefined,
- hubServerName: PageConfig.getOption('hubServerName') || undefined,
- },
- directories: {
- appSettings: PageConfig.getOption('appSettingsDir'),
- schemas: PageConfig.getOption('schemasDir'),
- static: PageConfig.getOption('staticDir'),
- templates: PageConfig.getOption('templatesDir'),
- themes: PageConfig.getOption('themesDir'),
- userSettings: PageConfig.getOption('userSettingsDir'),
- serverRoot: PageConfig.getOption('serverRoot'),
- workspaces: PageConfig.getOption('workspacesDir'),
- },
- };
- }
-
- /**
- * Handle the DOM events for the application.
- *
- * @param event - The DOM event sent to the application.
- */
- handleEvent(event: Event): void {
- super.handleEvent(event);
- if (event.type === 'resize') {
- void this._formatter.invoke();
- }
- }
-
- /**
- * Register plugins from a plugin module.
- *
- * @param mod - The plugin module to register.
- */
- registerPluginModule(mod: NotebookApp.IPluginModule): void {
- let data = mod.default;
- // Handle commonjs exports.
- if (!Object.prototype.hasOwnProperty.call(mod, '__esModule')) {
- data = mod as any;
- }
- if (!Array.isArray(data)) {
- data = [data];
- }
- data.forEach((item) => {
- try {
- this.registerPlugin(item);
- } catch (error) {
- console.error(error);
- }
- });
- }
-
- /**
- * Register the plugins from multiple plugin modules.
- *
- * @param mods - The plugin modules to register.
- */
- registerPluginModules(mods: NotebookApp.IPluginModule[]): void {
- mods.forEach((mod) => {
- this.registerPluginModule(mod);
- });
- }
-
- private _info: JupyterLab.IInfo = JupyterLab.defaultInfo;
- private _formatter = new Throttler(() => {
- Private.setFormat(this);
- }, 250);
-}
-
-/**
- * A namespace for App static items.
- */
-export namespace NotebookApp {
- /**
- * The instantiation options for an App application.
- */
- export interface IOptions
- extends JupyterFrontEnd.IOptions,
- Partial {}
-
- /**
- * The information about a Jupyter Notebook application.
- */
- export interface IInfo {
- /**
- * The mime renderer extensions.
- */
- readonly mimeExtensions: IRenderMime.IExtensionModule[];
-
- /**
- * The information about available plugins.
- */
- readonly availablePlugins: JupyterLab.IPluginInfo[];
- }
-
- /**
- * The interface for a module that exports a plugin or plugins as
- * the default value.
- */
- export interface IPluginModule {
- /**
- * The default export.
- */
- default: JupyterFrontEndPlugin | JupyterFrontEndPlugin[];
- }
-}
-
-/**
- * A namespace for module-private functionality.
- */
-namespace Private {
- /**
- * Media query for mobile devices.
- */
- const MOBILE_QUERY = 'only screen and (max-width: 760px)';
-
- /**
- * Sets the `format` of a Jupyter front-end application.
- *
- * @param app The front-end application whose format is set.
- */
- export function setFormat(app: NotebookApp): void {
- app.format = window.matchMedia(MOBILE_QUERY).matches ? 'mobile' : 'desktop';
- }
-}
diff --git a/packages/application/src/index.ts b/packages/application/src/index.ts
deleted file mode 100644
index c726fb456..000000000
--- a/packages/application/src/index.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-export * from './app';
-export * from './shell';
-export * from './panelhandler';
-export * from './pathopener';
-export * from './tokens';
diff --git a/packages/application/src/panelhandler.ts b/packages/application/src/panelhandler.ts
deleted file mode 100644
index 525b62bb0..000000000
--- a/packages/application/src/panelhandler.ts
+++ /dev/null
@@ -1,446 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import { ICommandPalette } from '@jupyterlab/apputils';
-import { closeIcon } from '@jupyterlab/ui-components';
-import { ArrayExt, find } from '@lumino/algorithm';
-import { IDisposable } from '@lumino/disposable';
-import { IMessageHandler, Message, MessageLoop } from '@lumino/messaging';
-import { ISignal, Signal } from '@lumino/signaling';
-import { Panel, StackedPanel, Widget } from '@lumino/widgets';
-
-/**
- * A class which manages a panel and sorts its widgets by rank.
- */
-export class PanelHandler {
- constructor() {
- MessageLoop.installMessageHook(this._panel, this._panelChildHook);
- }
-
- /**
- * Get the panel managed by the handler.
- */
- get panel(): Panel {
- return this._panel;
- }
-
- /**
- * Add a widget to the panel.
- *
- * If the widget is already added, it will be moved.
- */
- addWidget(widget: Widget, rank: number): void {
- widget.parent = null;
- const item = { widget, rank };
- const index = ArrayExt.upperBound(this._items, item, Private.itemCmp);
- ArrayExt.insert(this._items, index, item);
- this._panel.insertWidget(index, widget);
- }
-
- /**
- * A message hook for child remove messages on the panel handler.
- */
- private _panelChildHook = (
- handler: IMessageHandler,
- msg: Message
- ): boolean => {
- switch (msg.type) {
- case 'child-removed':
- {
- const widget = (msg as Widget.ChildMessage).child;
- ArrayExt.removeFirstWhere(this._items, (v) => v.widget === widget);
- }
- break;
- default:
- break;
- }
- return true;
- };
-
- protected _items = new Array();
- protected _panel = new Panel();
-}
-
-/**
- * A class which manages a side panel that can show at most one widget at a time.
- */
-export class SidePanelHandler extends PanelHandler {
- /**
- * Construct a new side panel handler.
- */
- constructor(area: SidePanel.Area) {
- super();
- this._area = area;
- this._panel.hide();
-
- this._currentWidget = null;
- this._lastCurrentWidget = null;
-
- this._widgetPanel = new StackedPanel();
- this._widgetPanel.widgetRemoved.connect(this._onWidgetRemoved, this);
-
- this._closeButton = document.createElement('button');
- closeIcon.element({
- container: this._closeButton,
- height: '16px',
- width: 'auto',
- });
- this._closeButton.onclick = () => {
- this.collapse();
- this.hide();
- };
- this._closeButton.className = 'jp-Button jp-SidePanel-collapse';
- this._closeButton.title = 'Collapse side panel';
-
- const icon = new Widget({ node: this._closeButton });
- this._panel.addWidget(icon);
- this._panel.addWidget(this._widgetPanel);
- }
-
- /**
- * Get the current widget in the sidebar panel.
- */
- get currentWidget(): Widget | null {
- return (
- this._currentWidget ||
- this._lastCurrentWidget ||
- (this._items.length > 0 ? this._items[0].widget : null)
- );
- }
-
- /**
- * Get the area of the side panel
- */
- get area(): SidePanel.Area {
- return this._area;
- }
-
- /**
- * Whether the panel is visible
- */
- get isVisible(): boolean {
- return this._panel.isVisible;
- }
-
- /**
- * Get the stacked panel managed by the handler
- */
- get panel(): Panel {
- return this._panel;
- }
-
- /**
- * Get the widgets list.
- */
- get widgets(): Readonly {
- return this._items.map((obj) => obj.widget);
- }
-
- /**
- * Signal fired when a widget is added to the panel
- */
- get widgetAdded(): ISignal {
- return this._widgetAdded;
- }
-
- /**
- * Signal fired when a widget is removed from the panel
- */
- get widgetRemoved(): ISignal {
- return this._widgetRemoved;
- }
-
- /**
- * Get the close button element.
- */
- get closeButton(): HTMLButtonElement {
- return this._closeButton;
- }
-
- /**
- * Expand the sidebar.
- *
- * #### Notes
- * This will open the most recently used widget, or the first widget
- * if there is no most recently used.
- */
- expand(id?: string): void {
- if (id) {
- if (this._currentWidget && this._currentWidget.id === id) {
- this.collapse();
- this.hide();
- } else {
- this.collapse();
- this.hide();
- this.activate(id);
- this.show();
- }
- } else if (this.currentWidget) {
- this._currentWidget = this.currentWidget;
- this.activate(this._currentWidget.id);
- this.show();
- }
- }
-
- /**
- * Activate a widget residing in the stacked panel by ID.
- *
- * @param id - The widget's unique ID.
- */
- activate(id: string): void {
- const widget = this._findWidgetByID(id);
- if (widget) {
- this._currentWidget = widget;
- widget.show();
- widget.activate();
- }
- }
-
- /**
- * Test whether the sidebar has the given widget by id.
- */
- has(id: string): boolean {
- return this._findWidgetByID(id) !== null;
- }
-
- /**
- * Collapse the sidebar so no items are expanded.
- */
- collapse(): void {
- this._currentWidget?.hide();
- this._currentWidget = null;
- }
-
- /**
- * Add a widget and its title to the stacked panel.
- *
- * If the widget is already added, it will be moved.
- */
- addWidget(widget: Widget, rank: number): void {
- widget.parent = null;
- widget.hide();
- const item = { widget, rank };
- const index = this._findInsertIndex(item);
- ArrayExt.insert(this._items, index, item);
- this._widgetPanel.insertWidget(index, widget);
-
- this._refreshVisibility();
-
- this._widgetAdded.emit(widget);
- }
-
- /**
- * Hide the side panel
- */
- hide(): void {
- this._isHiddenByUser = true;
- this._refreshVisibility();
- }
-
- /**
- * Show the side panel
- */
- show(): void {
- this._isHiddenByUser = false;
- this._refreshVisibility();
- }
-
- /**
- * Find the insertion index for a rank item.
- */
- private _findInsertIndex(item: Private.IRankItem): number {
- return ArrayExt.upperBound(this._items, item, Private.itemCmp);
- }
-
- /**
- * Find the index of the item with the given widget, or `-1`.
- */
- private _findWidgetIndex(widget: Widget): number {
- return ArrayExt.findFirstIndex(this._items, (i) => i.widget === widget);
- }
-
- /**
- * Find the widget with the given id, or `null`.
- */
- private _findWidgetByID(id: string): Widget | null {
- const item = find(this._items, (value) => value.widget.id === id);
- return item ? item.widget : null;
- }
-
- /**
- * Refresh the visibility of the stacked panel.
- */
- private _refreshVisibility(): void {
- this._panel.setHidden(this._isHiddenByUser);
- }
-
- /*
- * Handle the `widgetRemoved` signal from the panel.
- */
- private _onWidgetRemoved(sender: StackedPanel, widget: Widget): void {
- if (widget === this._lastCurrentWidget) {
- this._lastCurrentWidget = null;
- }
- ArrayExt.removeAt(this._items, this._findWidgetIndex(widget));
-
- this._refreshVisibility();
-
- this._widgetRemoved.emit(widget);
- }
-
- private _area: SidePanel.Area;
- private _isHiddenByUser = false;
- private _widgetPanel: StackedPanel;
- private _currentWidget: Widget | null;
- private _lastCurrentWidget: Widget | null;
- private _closeButton: HTMLButtonElement;
- private _widgetAdded: Signal = new Signal(this);
- private _widgetRemoved: Signal = new Signal(this);
-}
-
-/**
- * A name space for SideBarPanel functions.
- */
-export namespace SidePanel {
- /**
- * The areas of the sidebar panel
- */
- export type Area = 'left' | 'right';
-}
-
-/**
- * A class to manages the palette entries associated to the side panels.
- */
-export class SidePanelPalette {
- /**
- * Construct a new side panel palette.
- */
- constructor(options: SidePanelPaletteOption) {
- this._commandPalette = options.commandPalette;
- this._command = options.command;
- }
-
- /**
- * Get a command palette item from the widget id and the area.
- */
- getItem(
- widget: Readonly,
- area: 'left' | 'right'
- ): SidePanelPaletteItem | null {
- const itemList = this._items;
- for (let i = 0; i < itemList.length; i++) {
- const item = itemList[i];
- if (item.widgetId === widget.id && item.area === area) {
- return item;
- }
- }
- return null;
- }
-
- /**
- * Add an item to the command palette.
- */
- addItem(widget: Readonly, area: 'left' | 'right'): void {
- // Check if the item does not already exist.
- if (this.getItem(widget, area)) {
- return;
- }
-
- // Add a new item in command palette.
- const disposableDelegate = this._commandPalette.addItem({
- command: this._command,
- category: 'View',
- args: {
- side: area,
- title: `Show ${widget.title.caption}`,
- id: widget.id,
- },
- });
-
- // Keep the disposableDelegate object to be able to dispose of the item if the widget
- // is remove from the side panel.
- this._items.push({
- widgetId: widget.id,
- area: area,
- disposable: disposableDelegate,
- });
- }
-
- /**
- * Remove an item from the command palette.
- */
- removeItem(widget: Readonly, area: 'left' | 'right'): void {
- const item = this.getItem(widget, area);
- if (item) {
- item.disposable.dispose();
- }
- }
-
- _command: string;
- _commandPalette: ICommandPalette;
- _items: SidePanelPaletteItem[] = [];
-}
-
-type SidePanelPaletteItem = {
- /**
- * The ID of the widget associated to the command palette.
- */
- widgetId: string;
-
- /**
- * The area of the panel associated to the command palette.
- */
- area: 'left' | 'right';
-
- /**
- * The disposable object to remove the item from command palette.
- */
- disposable: IDisposable;
-};
-
-/**
- * An interface for the options to include in SideBarPalette constructor.
- */
-type SidePanelPaletteOption = {
- /**
- * The commands palette.
- */
- commandPalette: ICommandPalette;
-
- /**
- * The command to call from each side panel menu entry.
- *
- * ### Notes
- * That command required 3 args :
- * side: 'left' | 'right', the area to toggle
- * title: string, label of the command
- * id: string, id of the widget to activate
- */
- command: string;
-};
-
-/**
- * A namespace for private module data.
- */
-namespace Private {
- /**
- * An object which holds a widget and its sort rank.
- */
- export interface IRankItem {
- /**
- * The widget for the item.
- */
- widget: Widget;
-
- /**
- * The sort rank of the widget.
- */
- rank: number;
- }
- /**
- * A less-than comparison function for side bar rank items.
- */
- export function itemCmp(first: IRankItem, second: IRankItem): number {
- return first.rank - second.rank;
- }
-}
diff --git a/packages/application/src/pathopener.ts b/packages/application/src/pathopener.ts
deleted file mode 100644
index bf54c3d53..000000000
--- a/packages/application/src/pathopener.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import { URLExt } from '@jupyterlab/coreutils';
-
-import { INotebookPathOpener } from './tokens';
-
-/**
- * A class to open paths in new browser tabs in the Notebook application.
- */
-class DefaultNotebookPathOpener implements INotebookPathOpener {
- /**
- * Open a path in a new browser tab.
- */
- open(options: INotebookPathOpener.IOpenOptions): WindowProxy | null {
- const { prefix, path, searchParams, target, features } = options;
- const url = new URL(
- URLExt.join(prefix, URLExt.encodeParts(path ?? '')),
- window.location.origin
- );
- if (searchParams) {
- url.search = searchParams.toString();
- }
- return window.open(url, target, features);
- }
-}
-
-export const defaultNotebookPathOpener = new DefaultNotebookPathOpener();
diff --git a/packages/application/src/shell.ts b/packages/application/src/shell.ts
deleted file mode 100644
index 65a7159c1..000000000
--- a/packages/application/src/shell.ts
+++ /dev/null
@@ -1,575 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import { JupyterFrontEnd } from '@jupyterlab/application';
-import { DocumentRegistry } from '@jupyterlab/docregistry';
-import { ITranslator, nullTranslator } from '@jupyterlab/translation';
-
-import { find } from '@lumino/algorithm';
-import { JSONExt, PromiseDelegate, Token } from '@lumino/coreutils';
-import { ISignal, Signal } from '@lumino/signaling';
-
-import {
- BoxLayout,
- FocusTracker,
- Panel,
- SplitPanel,
- TabPanel,
- Widget,
-} from '@lumino/widgets';
-import { PanelHandler, SidePanelHandler } from './panelhandler';
-import { TabPanelSvg } from '@jupyterlab/ui-components';
-
-/**
- * The Jupyter Notebook application shell token.
- */
-export const INotebookShell = new Token(
- '@jupyter-notebook/application:INotebookShell'
-);
-
-/**
- * The Jupyter Notebook application shell interface.
- */
-export interface INotebookShell extends NotebookShell {}
-
-/**
- * The namespace for INotebookShell type information.
- */
-export namespace INotebookShell {
- /**
- * The areas of the application shell where widgets can reside.
- */
- export type Area = 'main' | 'top' | 'menu' | 'left' | 'right' | 'down';
-
- /**
- * Widget position
- */
- export interface IWidgetPosition {
- /**
- * Widget area
- */
- area?: Area;
- /**
- * Widget opening options
- */
- options?: DocumentRegistry.IOpenOptions;
- }
-
- /**
- * Mapping of widget type identifier and their user customized position
- */
- export interface IUserLayout {
- /**
- * Widget customized position
- */
- [k: string]: IWidgetPosition;
- }
-}
-
-/**
- * The default rank for ranked panels.
- */
-const DEFAULT_RANK = 900;
-
-/**
- * The application shell.
- */
-export class NotebookShell extends Widget implements JupyterFrontEnd.IShell {
- constructor() {
- super();
- this.id = 'main';
- this._userLayout = {};
-
- this._topHandler = new PanelHandler();
- this._menuHandler = new PanelHandler();
- this._leftHandler = new SidePanelHandler('left');
- this._rightHandler = new SidePanelHandler('right');
- this._main = new Panel();
- const topWrapper = (this._topWrapper = new Panel());
- const menuWrapper = (this._menuWrapper = new Panel());
-
- this._topHandler.panel.id = 'top-panel';
- this._topHandler.panel.node.setAttribute('role', 'banner');
- this._menuHandler.panel.id = 'menu-panel';
- this._menuHandler.panel.node.setAttribute('role', 'navigation');
- this._main.id = 'main-panel';
- this._main.node.setAttribute('role', 'main');
-
- this._spacer_top = new Widget();
- this._spacer_top.id = 'spacer-widget-top';
- this._spacer_bottom = new Widget();
- this._spacer_bottom.id = 'spacer-widget-bottom';
-
- // create wrappers around the top and menu areas
- topWrapper.id = 'top-panel-wrapper';
- topWrapper.addWidget(this._topHandler.panel);
-
- menuWrapper.id = 'menu-panel-wrapper';
- menuWrapper.addWidget(this._menuHandler.panel);
-
- const rootLayout = new BoxLayout();
- const leftHandler = this._leftHandler;
- const rightHandler = this._rightHandler;
-
- leftHandler.panel.id = 'jp-left-stack';
- leftHandler.panel.node.setAttribute('role', 'complementary');
- rightHandler.panel.id = 'jp-right-stack';
- rightHandler.panel.node.setAttribute('role', 'complementary');
-
- // Hide the side panels by default.
- leftHandler.hide();
- rightHandler.hide();
-
- const middleLayout = new BoxLayout({
- spacing: 0,
- direction: 'top-to-bottom',
- });
- BoxLayout.setStretch(this._topWrapper, 0);
- BoxLayout.setStretch(this._menuWrapper, 0);
- BoxLayout.setStretch(this._main, 1);
-
- const middlePanel = new Panel({ layout: middleLayout });
- middlePanel.addWidget(this._topWrapper);
- middlePanel.addWidget(this._menuWrapper);
- middlePanel.addWidget(this._spacer_top);
- middlePanel.addWidget(this._main);
- middlePanel.addWidget(this._spacer_bottom);
- middlePanel.layout = middleLayout;
-
- const vsplitPanel = new SplitPanel();
- vsplitPanel.id = 'jp-main-vsplit-panel';
- vsplitPanel.spacing = 1;
- vsplitPanel.orientation = 'vertical';
- SplitPanel.setStretch(vsplitPanel, 1);
-
- const downPanel = new TabPanelSvg({
- tabsMovable: true,
- });
- this._downPanel = downPanel;
- this._downPanel.id = 'jp-down-stack';
-
- // TODO: Consider storing this as an attribute this._hsplitPanel if saving/restoring layout needed
- const hsplitPanel = new SplitPanel();
- hsplitPanel.id = 'main-split-panel';
- hsplitPanel.spacing = 1;
- BoxLayout.setStretch(hsplitPanel, 1);
-
- SplitPanel.setStretch(leftHandler.panel, 0);
- SplitPanel.setStretch(rightHandler.panel, 0);
- SplitPanel.setStretch(middlePanel, 1);
-
- hsplitPanel.addWidget(leftHandler.panel);
- hsplitPanel.addWidget(middlePanel);
- hsplitPanel.addWidget(rightHandler.panel);
-
- // Use relative sizing to set the width of the side panels.
- // This will still respect the min-size of children widget in the stacked
- // panel.
- hsplitPanel.setRelativeSizes([1, 2.5, 1]);
-
- vsplitPanel.addWidget(hsplitPanel);
- vsplitPanel.addWidget(downPanel);
-
- rootLayout.spacing = 0;
- rootLayout.addWidget(vsplitPanel);
-
- // initially hiding the down panel
- this._downPanel.hide();
-
- // Connect down panel change listeners
- this._downPanel.tabBar.tabMoved.connect(this._onTabPanelChanged, this);
- this._downPanel.stackedPanel.widgetRemoved.connect(
- this._onTabPanelChanged,
- this
- );
-
- this.layout = rootLayout;
-
- // Added Skip to Main Link
- const skipLinkWidgetHandler = (this._skipLinkWidgetHandler =
- new Private.SkipLinkWidgetHandler(this));
-
- this.add(skipLinkWidgetHandler.skipLinkWidget, 'top', { rank: 0 });
- this._skipLinkWidgetHandler.show();
- }
-
- /**
- * A signal emitted when the current widget changes.
- */
- get currentChanged(): ISignal<
- JupyterFrontEnd.IShell,
- FocusTracker.IChangedArgs
- > {
- return this._currentChanged;
- }
-
- /**
- * The current widget in the shell's main area.
- */
- get currentWidget(): Widget | null {
- return this._main.widgets[0] ?? null;
- }
-
- /**
- * Get the top area wrapper panel
- */
- get top(): Widget {
- return this._topWrapper;
- }
-
- /**
- * Get the menu area wrapper panel
- */
- get menu(): Widget {
- return this._menuWrapper;
- }
-
- /**
- * Get the left area handler
- */
- get leftHandler(): SidePanelHandler {
- return this._leftHandler;
- }
-
- /**
- * Get the right area handler
- */
- get rightHandler(): SidePanelHandler {
- return this._rightHandler;
- }
-
- /**
- * Is the left sidebar visible?
- */
- get leftCollapsed(): boolean {
- return !(this._leftHandler.isVisible && this._leftHandler.panel.isVisible);
- }
-
- /**
- * Is the right sidebar visible?
- */
- get rightCollapsed(): boolean {
- return !(
- this._rightHandler.isVisible && this._rightHandler.panel.isVisible
- );
- }
-
- /**
- * Promise that resolves when the main widget is loaded
- */
- get restored(): Promise {
- return this._mainWidgetLoaded.promise;
- }
-
- /**
- * Getter and setter for the translator.
- */
- get translator(): ITranslator {
- return this._translator ?? nullTranslator;
- }
- set translator(value: ITranslator) {
- if (value !== this._translator) {
- this._translator = value;
- const trans = value.load('notebook');
- this._leftHandler.closeButton.title = trans.__(
- 'Collapse %1 side panel',
- this._leftHandler.area
- );
- this._rightHandler.closeButton.title = trans.__(
- 'Collapse %1 side panel',
- this._rightHandler.area
- );
- }
- }
-
- /**
- * User custom shell layout.
- */
- get userLayout() {
- return JSONExt.deepCopy(this._userLayout as any);
- }
-
- /**
- * Activate a widget in its area.
- */
- activateById(id: string): void {
- // Search all areas that can have widgets for this widget, starting with main.
- for (const area of ['main', 'top', 'left', 'right', 'menu', 'down']) {
- const widget = find(
- this.widgets(area as INotebookShell.Area),
- (w) => w.id === id
- );
- if (widget) {
- if (area === 'left') {
- this.expandLeft(id);
- } else if (area === 'right') {
- this.expandRight(id);
- } else if (area === 'down') {
- this._downPanel.show();
- widget.activate();
- } else {
- widget.activate();
- }
- }
- }
- }
-
- /**
- * Add a widget to the application shell.
- *
- * @param widget - The widget being added.
- *
- * @param area - Optional region in the shell into which the widget should
- * be added.
- *
- * @param options - Optional open options.
- *
- */
- add(
- widget: Widget,
- area?: INotebookShell.Area,
- options?: DocumentRegistry.IOpenOptions
- ): void {
- let userPosition: INotebookShell.IWidgetPosition | undefined;
- if (options?.type && this._userLayout[options.type]) {
- userPosition = this._userLayout[options.type];
- } else {
- userPosition = this._userLayout[widget.id];
- }
-
- area = userPosition?.area ?? area;
- options =
- options || userPosition?.options
- ? {
- ...options,
- ...userPosition?.options,
- }
- : undefined;
-
- const rank = options?.rank ?? DEFAULT_RANK;
- switch (area) {
- case 'top':
- return this._topHandler.addWidget(widget, rank);
- case 'menu':
- return this._menuHandler.addWidget(widget, rank);
- case 'main':
- case undefined: {
- if (this._main.widgets.length > 0) {
- // do not add the widget if there is already one
- return;
- }
- const previousWidget = this.currentWidget;
- this._main.addWidget(widget);
- this._main.update();
- this._currentChanged.emit({
- newValue: widget,
- oldValue: previousWidget,
- });
- this._mainWidgetLoaded.resolve();
- break;
- }
- case 'left':
- return this._leftHandler.addWidget(widget, rank);
- case 'right':
- return this._rightHandler.addWidget(widget, rank);
- case 'down':
- return this._downPanel.addWidget(widget);
- default:
- console.warn(`Cannot add widget to area: ${area}`);
- }
- }
-
- /**
- * Collapse the top area and the spacer to make the view more compact.
- */
- collapseTop(): void {
- this._topWrapper.setHidden(true);
- this._spacer_top.setHidden(true);
- }
-
- /**
- * Expand the top area to show the header and the spacer.
- */
- expandTop(): void {
- this._topWrapper.setHidden(false);
- this._spacer_top.setHidden(false);
- }
-
- /**
- * Return the list of widgets for the given area.
- *
- * @param area The area
- */
- *widgets(area: INotebookShell.Area): IterableIterator {
- switch (area ?? 'main') {
- case 'top':
- yield* this._topHandler.panel.widgets;
- return;
- case 'menu':
- yield* this._menuHandler.panel.widgets;
- return;
- case 'main':
- yield* this._main.widgets;
- return;
- case 'left':
- yield* this._leftHandler.widgets;
- return;
- case 'right':
- yield* this._rightHandler.widgets;
- return;
- case 'down':
- yield* this._downPanel.widgets;
- return;
- default:
- console.error(`This shell has no area called "${area}"`);
- return;
- }
- }
-
- /**
- * Expand the left panel to show the sidebar with its widget.
- */
- expandLeft(id?: string): void {
- this._leftHandler.panel.show();
- this._leftHandler.expand(id); // Show the current widget, if any
- }
-
- /**
- * Collapse the left panel
- */
- collapseLeft(): void {
- this._leftHandler.collapse();
- this._leftHandler.panel.hide();
- }
-
- /**
- * Expand the right panel to show the sidebar with its widget.
- */
- expandRight(id?: string): void {
- this._rightHandler.panel.show();
- this._rightHandler.expand(id); // Show the current widget, if any
- }
-
- /**
- * Collapse the right panel
- */
- collapseRight(): void {
- this._rightHandler.collapse();
- this._rightHandler.panel.hide();
- }
-
- /**
- * Restore the layout state and configuration for the application shell.
- */
- async restoreLayout(
- configuration: INotebookShell.IUserLayout
- ): Promise {
- this._userLayout = configuration;
- }
-
- /**
- * Handle a change on the down panel widgets
- */
- private _onTabPanelChanged(): void {
- if (this._downPanel.stackedPanel.widgets.length === 0) {
- this._downPanel.hide();
- }
- }
-
- private _topWrapper: Panel;
- private _topHandler: PanelHandler;
- private _menuWrapper: Panel;
- private _menuHandler: PanelHandler;
- private _leftHandler: SidePanelHandler;
- private _rightHandler: SidePanelHandler;
- private _spacer_top: Widget;
- private _spacer_bottom: Widget;
- private _skipLinkWidgetHandler: Private.SkipLinkWidgetHandler;
- private _main: Panel;
- private _downPanel: TabPanel;
- private _translator: ITranslator = nullTranslator;
- private _currentChanged = new Signal>(
- this
- );
- private _mainWidgetLoaded = new PromiseDelegate();
- private _userLayout: INotebookShell.IUserLayout;
-}
-
-export namespace Private {
- export class SkipLinkWidgetHandler {
- /**
- * Construct a new skipLink widget handler.
- */
- constructor(shell: INotebookShell) {
- const skipLinkWidget = (this._skipLinkWidget = new Widget());
- const skipToMain = document.createElement('a');
- skipToMain.href = '#first-cell';
- skipToMain.tabIndex = 1;
- skipToMain.text = 'Skip to Main';
- skipToMain.className = 'skip-link';
- skipToMain.addEventListener('click', this);
- skipLinkWidget.addClass('jp-skiplink');
- skipLinkWidget.id = 'jp-skiplink';
- skipLinkWidget.node.appendChild(skipToMain);
- }
-
- handleEvent(event: Event): void {
- switch (event.type) {
- case 'click':
- this._focusMain();
- break;
- }
- }
-
- private _focusMain() {
- const input = document.querySelector(
- '#main-panel .jp-InputArea-editor'
- ) as HTMLInputElement;
- input.tabIndex = 1;
- input.focus();
- }
-
- /**
- * Get the input element managed by the handler.
- */
- get skipLinkWidget(): Widget {
- return this._skipLinkWidget;
- }
-
- /**
- * Dispose of the handler and the resources it holds.
- */
- dispose(): void {
- if (this.isDisposed) {
- return;
- }
- this._isDisposed = true;
- this._skipLinkWidget.node.removeEventListener('click', this);
- this._skipLinkWidget.dispose();
- }
-
- /**
- * Hide the skipLink widget.
- */
- hide(): void {
- this._skipLinkWidget.hide();
- }
-
- /**
- * Show the skipLink widget.
- */
- show(): void {
- this._skipLinkWidget.show();
- }
-
- /**
- * Test whether the handler has been disposed.
- */
- get isDisposed(): boolean {
- return this._isDisposed;
- }
-
- private _skipLinkWidget: Widget;
- private _isDisposed = false;
- }
-}
diff --git a/packages/application/src/tokens.ts b/packages/application/src/tokens.ts
deleted file mode 100644
index 79e5d1650..000000000
--- a/packages/application/src/tokens.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-import { Token } from '@lumino/coreutils';
-
-/**
- * The INotebookPathOpener interface.
- */
-export interface INotebookPathOpener {
- /**
- * Open a path in the application.
- *
- * @param options - The options used to open the path.
- */
- open: (options: INotebookPathOpener.IOpenOptions) => WindowProxy | null;
-}
-
-export namespace INotebookPathOpener {
- /**
- * The options used to open a path in the application.
- */
- export interface IOpenOptions {
- /**
- * The URL prefix, which should include the base URL
- */
- prefix: string;
-
- /**
- * The path to open in the application, e.g `setup.py`, or `notebooks/example.ipynb`
- */
- path?: string;
-
- /**
- * The extra search params to use in the URL.
- */
- searchParams?: URLSearchParams;
-
- /**
- * Name of the browsing context the resource is being loaded into.
- * See https://developer.mozilla.org/en-US/docs/Web/API/Window/open for more details.
- */
- target?: string;
-
- /**
- *
- * See https://developer.mozilla.org/en-US/docs/Web/API/Window/open for more details.
- */
- features?: string;
- }
-}
-
-/**
- * The INotebookPathOpener token.
- * The main purpose of this token is to allow other extensions or downstream applications
- * to override the default behavior of opening a notebook in a new tab.
- * It also allows passing the path as a URL search parameter, or other options to the window.open call.
- */
-export const INotebookPathOpener = new Token(
- '@jupyter-notebook/application:INotebookPathOpener'
-);
diff --git a/packages/application/style/base.css b/packages/application/style/base.css
deleted file mode 100644
index eb2281e96..000000000
--- a/packages/application/style/base.css
+++ /dev/null
@@ -1,110 +0,0 @@
-/*-----------------------------------------------------------------------------
-| Copyright (c) Jupyter Development Team.
-| Distributed under the terms of the Modified BSD License.
-|----------------------------------------------------------------------------*/
-
-:root {
- --jp-private-topbar-height: 28px;
- /* Override the layout-2 color for the dark theme */
- --md-grey-800: #323232;
- --jp-notebook-max-width: 1200px;
-}
-
-/*
- Override the default background
- See https://github.com/jupyterlab/jupyterlab/pull/16519 for more information
-*/
-body.jp-ThemedContainer {
- margin: 0;
- padding: 0;
- background: var(--jp-layout-color2);
-}
-
-#main.jp-ThemedContainer {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background: var(--jp-layout-color2);
-}
-
-#top-panel-wrapper {
- min-height: calc(1.5 * var(--jp-private-topbar-height));
- border-bottom: var(--jp-border-width) solid var(--jp-border-color0);
- background: var(--jp-layout-color1);
-}
-
-#top-panel {
- display: flex;
- min-height: calc(1.5 * var(--jp-private-topbar-height));
- padding-left: 5px;
- padding-right: 5px;
- margin-left: auto;
- margin-right: auto;
- max-width: 1200px;
-}
-
-#menu-panel-wrapper {
- min-height: var(--jp-private-topbar-height);
- background: var(--jp-layout-color1);
- border-bottom: var(--jp-border-width) solid var(--jp-border-color0);
- box-shadow: var(--jp-elevation-z1);
-}
-
-#menu-panel {
- display: flex;
- min-height: var(--jp-private-topbar-height);
- background: var(--jp-layout-color1);
- padding-left: 5px;
- padding-right: 5px;
- margin-left: auto;
- margin-right: auto;
- max-width: var(--jp-notebook-max-width);
-}
-
-#main-panel {
- margin-left: auto;
- margin-right: auto;
- max-width: var(--jp-notebook-max-width);
-}
-
-#spacer-widget-top {
- min-height: 16px;
-}
-
-/* Only edit pages should have a bottom space */
-
-body[data-notebook='edit'] #spacer-widget-bottom {
- min-height: 16px;
-}
-
-/* Special case notebooks as document oriented pages */
-
-[data-notebook]:not(body[data-notebook='notebooks']) #main-panel {
- box-shadow: var(--jp-elevation-z4);
-}
-
-.jp-TreePanel > .lm-TabPanel-stackedPanel {
- box-shadow: var(--jp-elevation-z4);
-}
-
-body[data-notebook='notebooks'] #main-panel {
- margin-left: unset;
- margin-right: unset;
- max-width: unset;
-}
-
-body[data-notebook='notebooks'] #spacer-widget-top {
- min-height: unset;
-}
-
-#main-panel > .jp-TreePanel {
- padding: 0px 5px;
-}
-
-@media only screen and (max-width: 760px) {
- #main-panel > .jp-TreePanel {
- margin: 0px -5px;
- }
-}
diff --git a/packages/application/style/index.css b/packages/application/style/index.css
deleted file mode 100644
index 80ff96116..000000000
--- a/packages/application/style/index.css
+++ /dev/null
@@ -1,11 +0,0 @@
-/*-----------------------------------------------------------------------------
-| Copyright (c) Jupyter Development Team.
-| Distributed under the terms of the Modified BSD License.
-|----------------------------------------------------------------------------*/
-
-@import url('~@jupyterlab/application/style/index.css');
-@import url('~@jupyterlab/mainmenu/style/index.css');
-@import url('~@jupyterlab/ui-components/style/index.css');
-
-@import url('./base.css');
-@import url('./sidepanel.css');
diff --git a/packages/application/style/index.js b/packages/application/style/index.js
deleted file mode 100644
index a84ae1e2b..000000000
--- a/packages/application/style/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*-----------------------------------------------------------------------------
-| Copyright (c) Jupyter Development Team.
-| Distributed under the terms of the Modified BSD License.
-|----------------------------------------------------------------------------*/
-
-import '@jupyterlab/application/style/index.js';
-import '@jupyterlab/mainmenu/style/index.js';
-import '@jupyterlab/ui-components/style/index.js';
-
-import './base.css';
-import './sidepanel.css';
diff --git a/packages/application/style/sidepanel.css b/packages/application/style/sidepanel.css
deleted file mode 100644
index 61057e362..000000000
--- a/packages/application/style/sidepanel.css
+++ /dev/null
@@ -1,48 +0,0 @@
-/*-----------------------------------------------------------------------------
-| Copyright (c) Jupyter Development Team.
-| Distributed under the terms of the Modified BSD License.
-|
-| Adapted from JupyterLab's packages/application/style/sidepanel.css.
-|----------------------------------------------------------------------------*/
-
-/*-----------------------------------------------------------------------------
-| Variables
-|----------------------------------------------------------------------------*/
-
-:root {
- --jp-private-sidebar-tab-width: 32px;
-}
-
-/*-----------------------------------------------------------------------------
-| SideBar
-|----------------------------------------------------------------------------*/
-
-/* Stack panels */
-
-#jp-right-stack,
-#jp-left-stack {
- display: flex;
- flex-direction: column;
- min-width: var(--jp-sidebar-min-width);
-}
-
-#jp-left-stack .jp-SidePanel-collapse,
-#jp-right-stack .jp-SidePanel-collapse {
- display: flex;
- flex: 0 0 auto;
- min-height: 0;
- padding: 0;
-}
-
-#jp-left-stack .jp-SidePanel-collapse {
- justify-content: right;
-}
-
-#jp-right-stack .jp-SidePanel-collapse {
- justify-content: left;
-}
-
-#jp-left-stack .lm-StackedPanel,
-#jp-right-stack .lm-StackedPanel {
- flex: 1 1 auto;
-}
diff --git a/packages/application/test/shell.spec.ts b/packages/application/test/shell.spec.ts
deleted file mode 100644
index 1aded55ab..000000000
--- a/packages/application/test/shell.spec.ts
+++ /dev/null
@@ -1,184 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import { INotebookShell, NotebookShell } from '@jupyter-notebook/application';
-
-import { JupyterFrontEnd } from '@jupyterlab/application';
-
-import { Widget } from '@lumino/widgets';
-
-describe('Shell for notebooks', () => {
- let shell: INotebookShell;
-
- beforeEach(() => {
- shell = new NotebookShell();
- Widget.attach(shell, document.body);
- });
-
- afterEach(() => {
- shell.dispose();
- });
-
- describe('#constructor()', () => {
- it('should create a LabShell instance', () => {
- expect(shell).toBeInstanceOf(NotebookShell);
- });
-
- it('should make some areas empty initially', () => {
- ['main', 'left', 'right', 'menu'].forEach((area) => {
- const widgets = Array.from(shell.widgets(area as INotebookShell.Area));
- expect(widgets.length).toEqual(0);
- });
- });
-
- it('should have the skip link widget in the top area initially', () => {
- const widgets = Array.from(shell.widgets('top'));
- expect(widgets.length).toEqual(1);
- });
- });
-
- describe('#widgets()', () => {
- it('should add widgets to main area', () => {
- const widget = new Widget();
- shell.add(widget, 'main');
- const widgets = Array.from(shell.widgets('main'));
- expect(widgets).toEqual([widget]);
- });
-
- it('should be empty and console.error if area does not exist', () => {
- const spy = jest.spyOn(console, 'error');
- const jupyterFrontEndShell = shell as JupyterFrontEnd.IShell;
- expect(Array.from(jupyterFrontEndShell.widgets('fake'))).toHaveLength(0);
- expect(spy).toHaveBeenCalled();
- });
- });
-
- describe('#currentWidget', () => {
- it('should be the current widget in the shell main area', () => {
- expect(shell.currentWidget).toBe(null);
- const widget = new Widget();
- widget.node.tabIndex = -1;
- widget.id = 'foo';
- expect(shell.currentWidget).toBe(null);
- shell.add(widget, 'main');
- expect(shell.currentWidget).toBe(widget);
- widget.parent = null;
- expect(shell.currentWidget).toBe(null);
- });
- });
-
- describe('#add(widget, "top")', () => {
- it('should add a widget to the top area', () => {
- const widget = new Widget();
- widget.id = 'foo';
- shell.add(widget, 'top');
- const widgets = Array.from(shell.widgets('top'));
- expect(widgets.length).toBeGreaterThan(0);
- });
-
- it('should accept options', () => {
- const widget = new Widget();
- widget.id = 'foo';
- shell.add(widget, 'top', { rank: 10 });
- const widgets = Array.from(shell.widgets('top'));
- expect(widgets.length).toBeGreaterThan(0);
- });
- });
-
- describe('#add(widget, "main")', () => {
- it('should add a widget to the main area', () => {
- const widget = new Widget();
- widget.id = 'foo';
- shell.add(widget, 'main');
- const widgets = Array.from(shell.widgets('main'));
- expect(widgets.length).toBeGreaterThan(0);
- });
- });
-
- describe('#add(widget, "left")', () => {
- it('should add a widget to the left area', () => {
- const widget = new Widget();
- widget.id = 'foo';
- shell.add(widget, 'left');
- const widgets = Array.from(shell.widgets('left'));
- expect(widgets.length).toBeGreaterThan(0);
- });
- });
-
- describe('#add(widget, "right")', () => {
- it('should add a widget to the right area', () => {
- const widget = new Widget();
- widget.id = 'foo';
- shell.add(widget, 'right');
- const widgets = Array.from(shell.widgets('right'));
- expect(widgets.length).toBeGreaterThan(0);
- });
- });
-});
-
-describe('Shell for tree view', () => {
- let shell: INotebookShell;
-
- beforeEach(() => {
- shell = new NotebookShell();
- Widget.attach(shell, document.body);
- });
-
- afterEach(() => {
- shell.dispose();
- });
-
- describe('#constructor()', () => {
- it('should create a LabShell instance', () => {
- expect(shell).toBeInstanceOf(NotebookShell);
- });
-
- it('should make some areas empty initially', () => {
- ['main', 'left', 'right', 'menu'].forEach((area) => {
- const widgets = Array.from(shell.widgets(area as INotebookShell.Area));
- expect(widgets.length).toEqual(0);
- });
- });
-
- it('should have the skip link widget in the top area initially', () => {
- const widgets = Array.from(shell.widgets('top'));
- expect(widgets.length).toEqual(1);
- });
- });
-
- describe('#widgets()', () => {
- it('should add widgets to existing areas', () => {
- const widget = new Widget();
- shell.add(widget, 'main');
- const widgets = Array.from(shell.widgets('main'));
- expect(widgets).toEqual([widget]);
- });
-
- it('should throw an exception if a fake area does not exist', () => {
- const spy = jest.spyOn(console, 'error');
- const jupyterFrontEndShell = shell as JupyterFrontEnd.IShell;
- expect(Array.from(jupyterFrontEndShell.widgets('fake'))).toHaveLength(0);
- expect(spy).toHaveBeenCalled();
- });
- });
-
- describe('#add(widget, "left")', () => {
- it('should add a widget to the left area', () => {
- const widget = new Widget();
- widget.id = 'foo';
- shell.add(widget, 'left');
- const widgets = Array.from(shell.widgets('left'));
- expect(widgets.length).toBeGreaterThan(0);
- });
- });
-
- describe('#add(widget, "right")', () => {
- it('should add a widget to the right area', () => {
- const widget = new Widget();
- widget.id = 'foo';
- shell.add(widget, 'right');
- const widgets = Array.from(shell.widgets('right'));
- expect(widgets.length).toBeGreaterThan(0);
- });
- });
-});
diff --git a/packages/application/tsconfig.json b/packages/application/tsconfig.json
deleted file mode 100644
index 399b75b7a..000000000
--- a/packages/application/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfigbase",
- "compilerOptions": {
- "outDir": "lib",
- "rootDir": "src"
- },
- "include": ["src/**/*"]
-}
diff --git a/packages/application/tsconfig.test.json b/packages/application/tsconfig.test.json
deleted file mode 100644
index b325825cb..000000000
--- a/packages/application/tsconfig.test.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfigbase.test",
- "include": ["src/**/*", "test/**/*"],
- "references": [
- {
- "path": "."
- }
- ]
-}
diff --git a/packages/console-extension/package.json b/packages/console-extension/package.json
deleted file mode 100644
index b0bac59ee..000000000
--- a/packages/console-extension/package.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "name": "@jupyter-notebook/console-extension",
- "version": "7.6.0-alpha.0",
- "description": "Jupyter Notebook - Console Extension",
- "homepage": "https://github.com/jupyter/notebook",
- "bugs": {
- "url": "https://github.com/jupyter/notebook/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/jupyter/notebook.git"
- },
- "license": "BSD-3-Clause",
- "author": "Project Jupyter",
- "sideEffects": [
- "style/**/*.css",
- "style/index.js"
- ],
- "main": "lib/index.js",
- "types": "lib/index.d.ts",
- "style": "style/index.css",
- "directories": {
- "lib": "lib/"
- },
- "files": [
- "lib/*.d.ts",
- "lib/*.js.map",
- "lib/*.js",
- "schema/*.json",
- "style/**/*.css",
- "style/index.js"
- ],
- "scripts": {
- "build": "tsc -b",
- "build:prod": "tsc -b",
- "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo",
- "docs": "typedoc src",
- "watch": "tsc -b --watch"
- },
- "dependencies": {
- "@jupyter-notebook/application": "^7.6.0-alpha.0",
- "@jupyterlab/application": "~4.6.0-alpha.0",
- "@jupyterlab/console": "~4.6.0-alpha.0",
- "@jupyterlab/coreutils": "~6.6.0-alpha.0",
- "@lumino/algorithm": "^2.0.4"
- },
- "devDependencies": {
- "rimraf": "^3.0.2",
- "typescript": "~5.5.4"
- },
- "publishConfig": {
- "access": "public"
- },
- "jupyterlab": {
- "extension": true
- },
- "styleModule": "style/index.js"
-}
diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts
deleted file mode 100644
index 1efc124eb..000000000
--- a/packages/console-extension/src/index.ts
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import {
- IRouter,
- JupyterFrontEnd,
- JupyterFrontEndPlugin,
-} from '@jupyterlab/application';
-
-import { IConsoleTracker } from '@jupyterlab/console';
-
-import { PageConfig, URLExt } from '@jupyterlab/coreutils';
-
-import {
- INotebookPathOpener,
- defaultNotebookPathOpener,
-} from '@jupyter-notebook/application';
-
-import { find } from '@lumino/algorithm';
-
-/**
- * A plugin to open consoles in a new tab
- */
-const opener: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/console-extension:opener',
- requires: [IRouter],
- autoStart: true,
- description: 'A plugin to open consoles in a new tab',
- activate: (app: JupyterFrontEnd, router: IRouter) => {
- const { commands } = app;
- const consolePattern = new RegExp('/consoles/(.*)');
-
- const command = 'router:console';
- commands.addCommand(command, {
- execute: (args: any) => {
- const parsed = args as IRouter.ILocation;
- const matches = parsed.path.match(consolePattern);
- if (!matches) {
- return;
- }
- const [, match] = matches;
- if (!match) {
- return;
- }
-
- const path = decodeURIComponent(match);
- commands.execute('console:create', { path });
- },
- });
-
- router.register({ command, pattern: consolePattern });
- },
-};
-
-/**
- * Open consoles in a new tab.
- */
-const redirect: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/console-extension:redirect',
- requires: [IConsoleTracker],
- optional: [INotebookPathOpener],
- autoStart: true,
- description: 'Open consoles in a new tab',
- activate: (
- app: JupyterFrontEnd,
- tracker: IConsoleTracker,
- notebookPathOpener: INotebookPathOpener | null
- ) => {
- const baseUrl = PageConfig.getBaseUrl();
- const opener = notebookPathOpener ?? defaultNotebookPathOpener;
-
- tracker.widgetAdded.connect(async (send, console) => {
- const { sessionContext } = console;
- await sessionContext.ready;
- const widget = find(
- app.shell.widgets('main'),
- (w) => w.id === console.id
- );
- if (widget) {
- // bail if the console is already added to the main area
- return;
- }
- opener.open({
- prefix: URLExt.join(baseUrl, 'consoles'),
- path: sessionContext.path,
- target: '_blank',
- });
-
- // the widget is not needed anymore
- console.dispose();
- });
- },
-};
-
-/**
- * Export the plugins as default.
- */
-const plugins: JupyterFrontEndPlugin[] = [opener, redirect];
-
-export default plugins;
diff --git a/packages/console-extension/style/base.css b/packages/console-extension/style/base.css
deleted file mode 100644
index e69de29bb..000000000
diff --git a/packages/console-extension/style/index.css b/packages/console-extension/style/index.css
deleted file mode 100644
index f5246e666..000000000
--- a/packages/console-extension/style/index.css
+++ /dev/null
@@ -1 +0,0 @@
-@import url('./base.css');
diff --git a/packages/console-extension/style/index.js b/packages/console-extension/style/index.js
deleted file mode 100644
index a028a7640..000000000
--- a/packages/console-extension/style/index.js
+++ /dev/null
@@ -1 +0,0 @@
-import './base.css';
diff --git a/packages/console-extension/tsconfig.json b/packages/console-extension/tsconfig.json
deleted file mode 100644
index b223e1a1b..000000000
--- a/packages/console-extension/tsconfig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "extends": "../../tsconfigbase",
- "compilerOptions": {
- "outDir": "lib",
- "rootDir": "src"
- },
- "include": ["src/**/*"],
- "references": [
- {
- "path": "../application"
- }
- ]
-}
diff --git a/packages/docmanager-extension/package.json b/packages/docmanager-extension/package.json
deleted file mode 100644
index 2569b3385..000000000
--- a/packages/docmanager-extension/package.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "name": "@jupyter-notebook/docmanager-extension",
- "version": "7.6.0-alpha.0",
- "description": "Jupyter Notebook - Document Manager Extension",
- "homepage": "https://github.com/jupyter/notebook",
- "bugs": {
- "url": "https://github.com/jupyter/notebook/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/jupyter/notebook.git"
- },
- "license": "BSD-3-Clause",
- "author": "Project Jupyter",
- "sideEffects": [
- "style/**/*.css",
- "style/index.js"
- ],
- "main": "lib/index.js",
- "types": "lib/index.d.ts",
- "style": "style/index.css",
- "directories": {
- "lib": "lib/"
- },
- "files": [
- "lib/*.d.ts",
- "lib/*.js.map",
- "lib/*.js",
- "schema/*.json",
- "style/**/*.css",
- "style/index.js"
- ],
- "scripts": {
- "build": "tsc -b",
- "build:prod": "tsc -b",
- "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo",
- "docs": "typedoc src",
- "watch": "tsc -b --watch"
- },
- "dependencies": {
- "@jupyter-notebook/application": "^7.6.0-alpha.0",
- "@jupyterlab/application": "~4.6.0-alpha.0",
- "@jupyterlab/coreutils": "~6.6.0-alpha.0",
- "@jupyterlab/docmanager": "~4.6.0-alpha.0",
- "@jupyterlab/docregistry": "~4.6.0-alpha.0",
- "@jupyterlab/services": "~7.6.0-alpha.0",
- "@lumino/algorithm": "^2.0.4",
- "@lumino/signaling": "^2.1.5"
- },
- "devDependencies": {
- "rimraf": "^3.0.2",
- "typescript": "~5.5.4"
- },
- "publishConfig": {
- "access": "public"
- },
- "jupyterlab": {
- "extension": true
- },
- "styleModule": "style/index.js"
-}
diff --git a/packages/docmanager-extension/src/index.ts b/packages/docmanager-extension/src/index.ts
deleted file mode 100644
index 5d51e2e4e..000000000
--- a/packages/docmanager-extension/src/index.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import {
- JupyterFrontEnd,
- JupyterFrontEndPlugin,
-} from '@jupyterlab/application';
-
-import { PageConfig, PathExt, URLExt } from '@jupyterlab/coreutils';
-
-import { IDocumentWidgetOpener } from '@jupyterlab/docmanager';
-
-import { IDocumentWidget, DocumentRegistry } from '@jupyterlab/docregistry';
-
-import {
- INotebookPathOpener,
- INotebookShell,
- defaultNotebookPathOpener,
-} from '@jupyter-notebook/application';
-
-import { Signal } from '@lumino/signaling';
-
-/**
- * A plugin to open documents in a new browser tab.
- *
- */
-const opener: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/docmanager-extension:opener',
- autoStart: true,
- optional: [INotebookPathOpener, INotebookShell],
- provides: IDocumentWidgetOpener,
- description: 'Open documents in a new browser tab',
- activate: (
- app: JupyterFrontEnd,
- notebookPathOpener: INotebookPathOpener,
- notebookShell: INotebookShell | null
- ) => {
- const baseUrl = PageConfig.getBaseUrl();
- const docRegistry = app.docRegistry;
- const pathOpener = notebookPathOpener ?? defaultNotebookPathOpener;
- let id = 0;
- return new (class {
- async open(
- widget: IDocumentWidget,
- options?: DocumentRegistry.IOpenOptions
- ) {
- const widgetName = options?.type ?? '';
- const ref = options?.ref;
- // check if there is an setting override and if it would add the widget in the main area
- const userLayoutArea = notebookShell?.userLayout?.[widgetName]?.area;
-
- if (ref !== '_noref' && userLayoutArea === undefined) {
- const path = widget.context.path;
- const ext = PathExt.extname(path);
- let route = 'edit';
- if (
- (widgetName === 'default' && ext === '.ipynb') ||
- widgetName.includes('Notebook')
- ) {
- // make sure to save the notebook before opening it in a new tab
- // so the kernel info is saved (if created from the New dropdown)
- if (widget.context.sessionContext.kernelPreference.name) {
- await widget.context.save();
- }
- route = 'notebooks';
- }
- // append ?factory only if it's not the default
- const defaultFactory = docRegistry.defaultWidgetFactory(path);
- let searchParams = undefined;
- if (widgetName !== defaultFactory.name) {
- searchParams = new URLSearchParams({
- factory: widgetName,
- });
- }
-
- pathOpener.open({
- prefix: URLExt.join(baseUrl, route),
- path,
- searchParams,
- });
-
- // dispose the widget since it is not used on this page
- widget.dispose();
- return;
- }
-
- // otherwise open the document on the current page
-
- if (!widget.id) {
- widget.id = `document-manager-${++id}`;
- }
- widget.title.dataset = {
- type: 'document-title',
- ...widget.title.dataset,
- };
- if (!widget.isAttached) {
- app.shell.add(widget, 'main', options || {});
- }
- app.shell.activateById(widget.id);
- this._opened.emit(widget);
- }
-
- get opened() {
- return this._opened;
- }
-
- private _opened = new Signal(this);
- })();
- },
-};
-
-/**
- * Export the plugins as default.
- */
-const plugins: JupyterFrontEndPlugin[] = [opener];
-
-export default plugins;
diff --git a/packages/docmanager-extension/style/base.css b/packages/docmanager-extension/style/base.css
deleted file mode 100644
index 2c9c509f0..000000000
--- a/packages/docmanager-extension/style/base.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.jp-Document {
- height: 100%;
-}
diff --git a/packages/docmanager-extension/style/index.css b/packages/docmanager-extension/style/index.css
deleted file mode 100644
index f5246e666..000000000
--- a/packages/docmanager-extension/style/index.css
+++ /dev/null
@@ -1 +0,0 @@
-@import url('./base.css');
diff --git a/packages/docmanager-extension/style/index.js b/packages/docmanager-extension/style/index.js
deleted file mode 100644
index a028a7640..000000000
--- a/packages/docmanager-extension/style/index.js
+++ /dev/null
@@ -1 +0,0 @@
-import './base.css';
diff --git a/packages/docmanager-extension/tsconfig.json b/packages/docmanager-extension/tsconfig.json
deleted file mode 100644
index b223e1a1b..000000000
--- a/packages/docmanager-extension/tsconfig.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "extends": "../../tsconfigbase",
- "compilerOptions": {
- "outDir": "lib",
- "rootDir": "src"
- },
- "include": ["src/**/*"],
- "references": [
- {
- "path": "../application"
- }
- ]
-}
diff --git a/packages/documentsearch-extension/package.json b/packages/documentsearch-extension/package.json
deleted file mode 100644
index ff30eb41b..000000000
--- a/packages/documentsearch-extension/package.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
- "name": "@jupyter-notebook/documentsearch-extension",
- "version": "7.6.0-alpha.0",
- "description": "Jupyter Notebook - Document Search Extension",
- "homepage": "https://github.com/jupyter/notebook",
- "bugs": {
- "url": "https://github.com/jupyter/notebook/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/jupyter/notebook.git"
- },
- "license": "BSD-3-Clause",
- "author": "Project Jupyter",
- "sideEffects": [
- "style/**/*.css",
- "style/index.js"
- ],
- "main": "lib/index.js",
- "types": "lib/index.d.ts",
- "style": "style/index.css",
- "directories": {
- "lib": "lib/"
- },
- "files": [
- "lib/*.d.ts",
- "lib/*.js.map",
- "lib/*.js",
- "schema/*.json",
- "style/**/*.css",
- "style/index.js"
- ],
- "scripts": {
- "build": "tsc -b",
- "build:prod": "tsc -b",
- "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo",
- "docs": "typedoc src",
- "watch": "tsc -b --watch"
- },
- "dependencies": {
- "@jupyter-notebook/application": "^7.6.0-alpha.0",
- "@jupyterlab/application": "~4.6.0-alpha.0",
- "@jupyterlab/documentsearch": "~4.6.0-alpha.0",
- "@lumino/widgets": "^2.7.2"
- },
- "devDependencies": {
- "rimraf": "^3.0.2",
- "typescript": "~5.5.4"
- },
- "publishConfig": {
- "access": "public"
- },
- "jupyterlab": {
- "extension": true,
- "schemaDir": "schema"
- },
- "styleModule": "style/index.js"
-}
diff --git a/packages/documentsearch-extension/src/index.ts b/packages/documentsearch-extension/src/index.ts
deleted file mode 100644
index 3ad96e1fa..000000000
--- a/packages/documentsearch-extension/src/index.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-import {
- JupyterFrontEnd,
- JupyterFrontEndPlugin,
-} from '@jupyterlab/application';
-
-import { ISearchProviderRegistry } from '@jupyterlab/documentsearch';
-
-import { Widget } from '@lumino/widgets';
-
-import { INotebookShell } from '@jupyter-notebook/application';
-
-const SEARCHABLE_CLASS = 'jp-mod-searchable';
-
-/**
- * A plugin to add document search functionalities.
- */
-const notebookShellWidgetListener: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/documentsearch-extension:notebookShellWidgetListener',
- requires: [INotebookShell, ISearchProviderRegistry],
- autoStart: true,
- description: 'A plugin to add document search functionalities',
- activate: (
- app: JupyterFrontEnd,
- notebookShell: INotebookShell,
- registry: ISearchProviderRegistry
- ) => {
- // If a given widget is searchable, apply the searchable class.
- // If it's not searchable, remove the class.
- const transformWidgetSearchability = (widget: Widget | null) => {
- if (!widget) {
- return;
- }
- if (registry.hasProvider(widget)) {
- widget.addClass(SEARCHABLE_CLASS);
- } else {
- widget.removeClass(SEARCHABLE_CLASS);
- }
- };
-
- // Update searchability of the active widget when the registry
- // changes, in case a provider for the current widget was added
- // or removed
- registry.changed.connect(() =>
- transformWidgetSearchability(notebookShell.currentWidget)
- );
-
- // Apply the searchable class only to the active widget if it is actually
- // searchable. Remove the searchable class from a widget when it's
- // no longer active.
- notebookShell.currentChanged.connect((_, args) => {
- if (notebookShell.currentWidget) {
- transformWidgetSearchability(notebookShell.currentWidget);
- }
- });
- },
-};
-
-/**
- * Export the plugins as default.
- */
-const plugins: JupyterFrontEndPlugin[] = [notebookShellWidgetListener];
-
-export default plugins;
diff --git a/packages/documentsearch-extension/style/base.css b/packages/documentsearch-extension/style/base.css
deleted file mode 100644
index e69de29bb..000000000
diff --git a/packages/documentsearch-extension/style/index.css b/packages/documentsearch-extension/style/index.css
deleted file mode 100644
index f5246e666..000000000
--- a/packages/documentsearch-extension/style/index.css
+++ /dev/null
@@ -1 +0,0 @@
-@import url('./base.css');
diff --git a/packages/documentsearch-extension/style/index.js b/packages/documentsearch-extension/style/index.js
deleted file mode 100644
index a028a7640..000000000
--- a/packages/documentsearch-extension/style/index.js
+++ /dev/null
@@ -1 +0,0 @@
-import './base.css';
diff --git a/packages/documentsearch-extension/tsconfig.json b/packages/documentsearch-extension/tsconfig.json
deleted file mode 100644
index 399b75b7a..000000000
--- a/packages/documentsearch-extension/tsconfig.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "../../tsconfigbase",
- "compilerOptions": {
- "outDir": "lib",
- "rootDir": "src"
- },
- "include": ["src/**/*"]
-}
diff --git a/packages/help-extension/package.json b/packages/help-extension/package.json
deleted file mode 100644
index 945f4defc..000000000
--- a/packages/help-extension/package.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "name": "@jupyter-notebook/help-extension",
- "version": "7.6.0-alpha.0",
- "description": "Jupyter Notebook - Help Extension",
- "homepage": "https://github.com/jupyter/notebook",
- "bugs": {
- "url": "https://github.com/jupyter/notebook/issues"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/jupyter/notebook.git"
- },
- "license": "BSD-3-Clause",
- "author": "Project Jupyter",
- "sideEffects": [
- "style/**/*.css",
- "style/index.js"
- ],
- "main": "lib/index.js",
- "types": "lib/index.d.ts",
- "style": "style/index.css",
- "directories": {
- "lib": "lib/"
- },
- "files": [
- "lib/*.d.ts",
- "lib/*.js.map",
- "lib/*.js",
- "schema/*.json",
- "style/**/*.css",
- "style/index.js"
- ],
- "scripts": {
- "build": "tsc -b",
- "build:prod": "tsc -b",
- "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo",
- "docs": "typedoc src",
- "watch": "tsc -b --watch"
- },
- "dependencies": {
- "@jupyter-notebook/ui-components": "^7.6.0-alpha.0",
- "@jupyterlab/application": "~4.6.0-alpha.0",
- "@jupyterlab/apputils": "~4.7.0-alpha.0",
- "@jupyterlab/mainmenu": "~4.6.0-alpha.0",
- "@jupyterlab/translation": "~4.6.0-alpha.0",
- "react": "^18.2.0",
- "react-dom": "^18.2.0"
- },
- "devDependencies": {
- "rimraf": "^3.0.2",
- "typescript": "~5.5.4"
- },
- "publishConfig": {
- "access": "public"
- },
- "jupyterlab": {
- "extension": true,
- "schemaDir": "schema"
- },
- "styleModule": "style/index.js"
-}
diff --git a/packages/help-extension/schema/open.json b/packages/help-extension/schema/open.json
deleted file mode 100644
index 2f683abab..000000000
--- a/packages/help-extension/schema/open.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "title": "Jupyter Notebook Help Menu Entries",
- "description": "Jupyter Notebook Help Menu Entries",
- "jupyter.lab.menus": {
- "main": [
- {
- "id": "jp-mainmenu-help",
- "items": [
- {
- "command": "help:about",
- "rank": 0
- },
- {
- "type": "separator",
- "rank": 1
- }
- ]
- }
- ]
- },
- "properties": {},
- "additionalProperties": false,
- "type": "object"
-}
diff --git a/packages/help-extension/src/index.tsx b/packages/help-extension/src/index.tsx
deleted file mode 100644
index 2a71a9ebb..000000000
--- a/packages/help-extension/src/index.tsx
+++ /dev/null
@@ -1,166 +0,0 @@
-// Copyright (c) Jupyter Development Team.
-// Distributed under the terms of the Modified BSD License.
-
-import {
- JupyterFrontEnd,
- JupyterFrontEndPlugin,
-} from '@jupyterlab/application';
-
-import { Dialog, ICommandPalette } from '@jupyterlab/apputils';
-
-import { IMainMenu } from '@jupyterlab/mainmenu';
-
-import { ITranslator } from '@jupyterlab/translation';
-
-import { jupyterIcon } from '@jupyter-notebook/ui-components';
-
-import * as React from 'react';
-
-/**
- * A list of resources to show in the help menu.
- */
-const RESOURCES = [
- {
- text: 'About Jupyter',
- url: 'https://jupyter.org',
- },
- {
- text: 'Markdown Reference',
- url: 'https://commonmark.org/help/',
- },
- {
- text: 'Documentation',
- url: 'https://jupyter-notebook.readthedocs.io/en/stable/',
- },
-];
-
-/**
- * The command IDs used by the help plugin.
- */
-namespace CommandIDs {
- export const open = 'help:open';
-
- export const about = 'help:about';
-}
-
-/**
- * A plugin to open the about section with resources.
- */
-const open: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/help-extension:open',
- autoStart: true,
- description: 'A plugin to open the about section with resources',
- activate: (app: JupyterFrontEnd): void => {
- const { commands } = app;
-
- commands.addCommand(CommandIDs.open, {
- label: (args) => args['text'] as string,
- execute: (args) => {
- const url = args['url'] as string;
- window.open(url);
- },
- });
- },
-};
-
-/**
- * Plugin to add a command to show an About Jupyter Notebook and Markdown Reference.
- */
-const about: JupyterFrontEndPlugin = {
- id: '@jupyter-notebook/help-extension:about',
- autoStart: true,
- requires: [ITranslator],
- optional: [IMainMenu, ICommandPalette],
- description:
- 'Plugin to add a command to show an About Jupyter Notebook and Markdown Reference',
- activate: (
- app: JupyterFrontEnd,
- translator: ITranslator,
- menu: IMainMenu | null,
- palette: ICommandPalette | null
- ): void => {
- const { commands } = app;
- const trans = translator.load('notebook');
- const category = trans.__('Help');
-
- commands.addCommand(CommandIDs.about, {
- label: trans.__('About %1', app.name),
- execute: () => {
- const title = (
- <>
-
-
-
- >
- );
-
- const notebookURL = 'https://github.com/jupyter/notebook';
- const contributorURL = 'https://github.com/jupyter/notebook/pulse';
- const aboutJupyter = trans.__('JUPYTER NOTEBOOK ON GITHUB');
- const contributorList = trans.__('CONTRIBUTOR LIST');
- const externalLinks = (
-
-
- {aboutJupyter}
-
-
- {contributorList}
-
-
- );
- const version = trans.__('Version: %1', app.version);
- const copyright = trans.__('漏 2021-2023 Jupyter Notebook Contributors');
- const body = (
- <>
- {version}
-