diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e20cca34..6061ef18 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,8 +32,10 @@ jobs: - log-messages - main-menu - metadata-form + - mimerenderer - notifications - react-widget + - server-extension - settings - shout-button-message - signals @@ -158,7 +160,7 @@ jobs: if: steps.filter.outputs.extension == 'true' && startsWith(runner.os, 'Linux') && always() uses: actions/upload-artifact@v4 with: - name: ui-test-output + name: ${{ matrix.example }}-ui-test-output path: | ${{ matrix.example }}/ui-tests/test-results - name: Uninstall extension diff --git a/README.md b/README.md index f0005398..ae1cd9cc 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,10 @@ The goal of this repository is to show how to develop extensions for [JupyterLab](https://github.com/jupyterlab/jupyterlab), presented as short tutorial series. -**Quick start:** -- Install, build, and run the `hello-world` extension example in JupyterLab by copying the code below. -- This corresponds to the first three sections of the [hello-world extension tutorial](hello-world/README.md). Read these sections for additional details on what these commands are doing and how to use the JupyterLab extension template. +**Quick start:** + +- Install, build, and run the `hello-world` extension example in JupyterLab by copying the code below. +- This corresponds to the first three sections of the [hello-world extension tutorial](hello-world/README.md). Read these sections for additional details on what these commands are doing and how to use the JupyterLab extension template. - Continue with the tutorial at the [Modify the extension](hello-world/README.md#modify-the-extension) section, if desired. ```bash diff --git a/cell-toolbar/.copier-answers.yml b/cell-toolbar/.copier-answers.yml index 46e0e2c9..4844cef8 100644 --- a/cell-toolbar/.copier-answers.yml +++ b/cell-toolbar/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: https://github.com/jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/cell-toolbar/LICENSE b/cell-toolbar/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/cell-toolbar/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/cell-toolbar/package.json b/cell-toolbar/package.json index fc520d9b..7490cea3 100644 --- a/cell-toolbar/package.json +++ b/cell-toolbar/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -73,7 +74,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -83,7 +84,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/cell-toolbar/pyproject.toml b/cell-toolbar/pyproject.toml index c78801e8..f70b8ba5 100644 --- a/cell-toolbar/pyproject.toml +++ b/cell-toolbar/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_cell_toolbar" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_cell_toolbar/labextension"] diff --git a/cell-toolbar/tsconfig.json b/cell-toolbar/tsconfig.json index 98979175..25af0404 100644 --- a/cell-toolbar/tsconfig.json +++ b/cell-toolbar/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/cell-toolbar/ui-tests/README.md b/cell-toolbar/ui-tests/README.md index 8d377fcc..91825145 100644 --- a/cell-toolbar/ui-tests/README.md +++ b/cell-toolbar/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/cell-toolbar/ui-tests/tests/cell_toolbar.spec.ts b/cell-toolbar/ui-tests/tests/cell_toolbar.spec.ts index 86f4e3af..6533d95c 100644 --- a/cell-toolbar/ui-tests/tests/cell_toolbar.spec.ts +++ b/cell-toolbar/ui-tests/tests/cell_toolbar.spec.ts @@ -8,9 +8,9 @@ test('should add buttons on code cell and markdown cell', async ({ page }) => { await page.waitForSelector('text=| Idle'); const RUN_CODE = - '.jp-cell-toolbar button[data-command="toolbar-button:run-code-cell"]'; + '.jp-cell-toolbar jp-button[data-command="toolbar-button:run-code-cell"]'; const RENDER_MD = - '.jp-cell-toolbar button[data-command="toolbar-button:render-markdown-cell"]'; + '.jp-cell-toolbar jp-button[data-command="toolbar-button:render-markdown-cell"]'; await page.notebook.setCell(0, 'code', 'print("Hello, JupyterLab")'); await expect(page.locator(RUN_CODE)).toBeVisible(); diff --git a/clap-button-message/.copier-answers.yml b/clap-button-message/.copier-answers.yml index f567eaeb..625c05e3 100644 --- a/clap-button-message/.copier-answers.yml +++ b/clap-button-message/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: https://github.com/jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/clap-button-message/LICENSE b/clap-button-message/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/clap-button-message/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/clap-button-message/package.json b/clap-button-message/package.json index 7d56b035..cbf0ac9d 100644 --- a/clap-button-message/package.json +++ b/clap-button-message/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -67,7 +68,8 @@ "eslint": "^8.36.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", - "npm-run-all": "^4.1.5", + "jest": "^29.2.0", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -77,7 +79,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/clap-button-message/pyproject.toml b/clap-button-message/pyproject.toml index 72bc5fe8..d291c275 100644 --- a/clap-button-message/pyproject.toml +++ b/clap-button-message/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_shout_button" readme = "README.md" -license = { text = "BSD-3-Clause License" } -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_shout_button/labextension"] diff --git a/clap-button-message/tsconfig.json b/clap-button-message/tsconfig.json index 98979175..25af0404 100644 --- a/clap-button-message/tsconfig.json +++ b/clap-button-message/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/clap-button-message/ui-tests/README.md b/clap-button-message/ui-tests/README.md index 8d377fcc..91825145 100644 --- a/clap-button-message/ui-tests/README.md +++ b/clap-button-message/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/codemirror-extension/.copier-answers.yml b/codemirror-extension/.copier-answers.yml index cd70973c..a3814dc1 100644 --- a/codemirror-extension/.copier-answers.yml +++ b/codemirror-extension/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/codemirror-extension/LICENSE b/codemirror-extension/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/codemirror-extension/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/codemirror-extension/package.json b/codemirror-extension/package.json index a72721e5..d3a2d561 100644 --- a/codemirror-extension/package.json +++ b/codemirror-extension/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -71,7 +72,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -81,7 +82,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/codemirror-extension/pyproject.toml b/codemirror-extension/pyproject.toml index 21586e9c..ae042279 100644 --- a/codemirror-extension/pyproject.toml +++ b/codemirror-extension/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_codemirror_extension" readme = "README.md" -license = { text = "BSD-3-Clause License" } -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_codemirror_extension/labextension"] diff --git a/codemirror-extension/tsconfig.json b/codemirror-extension/tsconfig.json index 98979175..25af0404 100644 --- a/codemirror-extension/tsconfig.json +++ b/codemirror-extension/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/codemirror-extension/ui-tests/README.md b/codemirror-extension/ui-tests/README.md index 8d377fcc..91825145 100644 --- a/codemirror-extension/ui-tests/README.md +++ b/codemirror-extension/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/codemirror-extension/ui-tests/tests/jupyterlab_examples_codemirror_extension.spec.ts b/codemirror-extension/ui-tests/tests/jupyterlab_examples_codemirror_extension.spec.ts index e60e427c..dbb7302e 100644 --- a/codemirror-extension/ui-tests/tests/jupyterlab_examples_codemirror_extension.spec.ts +++ b/codemirror-extension/ui-tests/tests/jupyterlab_examples_codemirror_extension.spec.ts @@ -8,17 +8,14 @@ test('should display zebra stripes in cell editors', async ({ page }) => { .first() .click(); - await page - .getByRole('region', { name: 'notebook content' }) - .getByRole('textbox') - .waitFor(); + await page.getByRole('textbox').waitFor(); await page.locator('.jp-Cell .cm-editor').first().waitFor(); // Fill the first cell await page.notebook.setCell( 0, - 'code', + 'markdown', '# First line\n# Second line\n# Third line\n' ); @@ -26,7 +23,7 @@ test('should display zebra stripes in cell editors', async ({ page }) => { await page.menu.clickMenuItem('Settings>Settings Editor'); await page - .getByRole('tab', { name: 'CodeMirror CodeMirror' }) + .getByRole('tab', { name: 'CodeMirror' }) .getByText('CodeMirror') .click(); diff --git a/codemirror-extension/ui-tests/tests/jupyterlab_examples_codemirror_extension.spec.ts-snapshots/codemirror-extension-linux.png b/codemirror-extension/ui-tests/tests/jupyterlab_examples_codemirror_extension.spec.ts-snapshots/codemirror-extension-linux.png index 62f504cd..93ea50b9 100644 Binary files a/codemirror-extension/ui-tests/tests/jupyterlab_examples_codemirror_extension.spec.ts-snapshots/codemirror-extension-linux.png and b/codemirror-extension/ui-tests/tests/jupyterlab_examples_codemirror_extension.spec.ts-snapshots/codemirror-extension-linux.png differ diff --git a/command-palette/.copier-answers.yml b/command-palette/.copier-answers.yml index f086d7d8..ddcd9630 100644 --- a/command-palette/.copier-answers.yml +++ b/command-palette/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/command-palette/LICENSE b/command-palette/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/command-palette/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/command-palette/package.json b/command-palette/package.json index 301a99d3..8b054188 100644 --- a/command-palette/package.json +++ b/command-palette/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -68,7 +69,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -78,7 +79,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/command-palette/pyproject.toml b/command-palette/pyproject.toml index f5ea3a8a..1b08e890 100644 --- a/command-palette/pyproject.toml +++ b/command-palette/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_command_palette" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_command_palette/labextension"] diff --git a/command-palette/tsconfig.json b/command-palette/tsconfig.json index 98979175..25af0404 100644 --- a/command-palette/tsconfig.json +++ b/command-palette/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/command-palette/ui-tests/README.md b/command-palette/ui-tests/README.md index 4e80277f..9b9833cd 100644 --- a/command-palette/ui-tests/README.md +++ b/command-palette/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/commands/.copier-answers.yml b/commands/.copier-answers.yml index 7bdf0c9e..03ea7b30 100644 --- a/commands/.copier-answers.yml +++ b/commands/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/commands/LICENSE b/commands/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/commands/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/commands/package.json b/commands/package.json index dd2943eb..7debb48b 100644 --- a/commands/package.json +++ b/commands/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -68,7 +69,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -78,7 +79,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/commands/pyproject.toml b/commands/pyproject.toml index 1e66e742..c459396e 100644 --- a/commands/pyproject.toml +++ b/commands/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_commands" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_commands/labextension"] diff --git a/commands/tsconfig.json b/commands/tsconfig.json index 98979175..25af0404 100644 --- a/commands/tsconfig.json +++ b/commands/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/commands/ui-tests/README.md b/commands/ui-tests/README.md index 42233c64..6b916e53 100644 --- a/commands/ui-tests/README.md +++ b/commands/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/completer/.copier-answers.yml b/completer/.copier-answers.yml index ec79a174..1c434787 100644 --- a/completer/.copier-answers.yml +++ b/completer/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/completer/LICENSE b/completer/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/completer/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/completer/package.json b/completer/package.json index 23053058..6e653708 100644 --- a/completer/package.json +++ b/completer/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -73,7 +74,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -83,7 +84,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/completer/pyproject.toml b/completer/pyproject.toml index db15cdd0..3bbcde11 100644 --- a/completer/pyproject.toml +++ b/completer/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_completer" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_completer/labextension"] diff --git a/completer/tsconfig.json b/completer/tsconfig.json index 98979175..25af0404 100644 --- a/completer/tsconfig.json +++ b/completer/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/completer/ui-tests/README.md b/completer/ui-tests/README.md index bda3e416..a699c616 100644 --- a/completer/ui-tests/README.md +++ b/completer/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/contentheader/.copier-answers.yml b/contentheader/.copier-answers.yml index 42727192..868e6b6c 100644 --- a/contentheader/.copier-answers.yml +++ b/contentheader/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/contentheader/LICENSE b/contentheader/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/contentheader/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/contentheader/package.json b/contentheader/package.json index 8a92132b..fce212db 100644 --- a/contentheader/package.json +++ b/contentheader/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -68,7 +69,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -78,7 +79,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/contentheader/pyproject.toml b/contentheader/pyproject.toml index a282d793..83ff1c60 100644 --- a/contentheader/pyproject.toml +++ b/contentheader/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_contentheader" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_contentheader/labextension"] diff --git a/contentheader/tsconfig.json b/contentheader/tsconfig.json index 98979175..25af0404 100644 --- a/contentheader/tsconfig.json +++ b/contentheader/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/contentheader/ui-tests/README.md b/contentheader/ui-tests/README.md index d2cc5f84..61c44cb9 100644 --- a/contentheader/ui-tests/README.md +++ b/contentheader/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/context-menu/.copier-answers.yml b/context-menu/.copier-answers.yml index 767ecec1..205b6b5d 100644 --- a/context-menu/.copier-answers.yml +++ b/context-menu/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/context-menu/LICENSE b/context-menu/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/context-menu/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/context-menu/package.json b/context-menu/package.json index 7b4fe9cc..6c571684 100644 --- a/context-menu/package.json +++ b/context-menu/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -70,7 +71,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -80,7 +81,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/context-menu/pyproject.toml b/context-menu/pyproject.toml index c4b3aa05..885bf828 100644 --- a/context-menu/pyproject.toml +++ b/context-menu/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_context_menu" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_context_menu/labextension"] diff --git a/context-menu/tsconfig.json b/context-menu/tsconfig.json index 98979175..25af0404 100644 --- a/context-menu/tsconfig.json +++ b/context-menu/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/context-menu/ui-tests/README.md b/context-menu/ui-tests/README.md index 22f3f6d5..a5065503 100644 --- a/context-menu/ui-tests/README.md +++ b/context-menu/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/custom-log-console/.copier-answers.yml b/custom-log-console/.copier-answers.yml index b5677105..b45023b0 100644 --- a/custom-log-console/.copier-answers.yml +++ b/custom-log-console/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/custom-log-console/LICENSE b/custom-log-console/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/custom-log-console/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/custom-log-console/package.json b/custom-log-console/package.json index 4d4a4a58..ba51c1df 100644 --- a/custom-log-console/package.json +++ b/custom-log-console/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -78,7 +79,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -88,7 +89,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/custom-log-console/pyproject.toml b/custom-log-console/pyproject.toml index b0a93f4f..52b404e3 100644 --- a/custom-log-console/pyproject.toml +++ b/custom-log-console/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_custom_log_console" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_custom_log_console/labextension"] diff --git a/custom-log-console/tsconfig.json b/custom-log-console/tsconfig.json index 98979175..25af0404 100644 --- a/custom-log-console/tsconfig.json +++ b/custom-log-console/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/custom-log-console/ui-tests/README.md b/custom-log-console/ui-tests/README.md index 7dc4373a..b899386e 100644 --- a/custom-log-console/ui-tests/README.md +++ b/custom-log-console/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/custom-log-console/ui-tests/tests/custom-log-console.spec.ts b/custom-log-console/ui-tests/tests/custom-log-console.spec.ts index 974732db..3d9f84ce 100644 --- a/custom-log-console/ui-tests/tests/custom-log-console.spec.ts +++ b/custom-log-console/ui-tests/tests/custom-log-console.spec.ts @@ -40,11 +40,11 @@ test('should open a log panel and filter message depending on the log level.', a ).toBeTruthy(); // Click button:has-text("Add Checkpoint") - await page.click('button:has-text("Add Checkpoint")'); + await page.click('jp-button:has-text("Add Checkpoint")'); expect(await page.waitForSelector('hr')).toBeTruthy(); - await page.click('button:has-text("Clear Log")'); + await page.click('jp-button:has-text("Clear Log")'); await page.waitForSelector('text=No log messages.'); // Select warning diff --git a/datagrid/.copier-answers.yml b/datagrid/.copier-answers.yml index 0a721853..86a3d291 100644 --- a/datagrid/.copier-answers.yml +++ b/datagrid/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/datagrid/LICENSE b/datagrid/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/datagrid/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/datagrid/package.json b/datagrid/package.json index 605bd059..6aa97d34 100644 --- a/datagrid/package.json +++ b/datagrid/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -75,7 +76,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -85,7 +86,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/datagrid/pyproject.toml b/datagrid/pyproject.toml index 7728f1ec..2357d3fc 100644 --- a/datagrid/pyproject.toml +++ b/datagrid/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_datagrid" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_datagrid/labextension"] diff --git a/datagrid/tsconfig.json b/datagrid/tsconfig.json index 98979175..25af0404 100644 --- a/datagrid/tsconfig.json +++ b/datagrid/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/datagrid/ui-tests/README.md b/datagrid/ui-tests/README.md index a351e361..f5d84a51 100644 --- a/datagrid/ui-tests/README.md +++ b/datagrid/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/datagrid/ui-tests/tests/datagrid.spec.ts-snapshots/datagrid-example-linux.png b/datagrid/ui-tests/tests/datagrid.spec.ts-snapshots/datagrid-example-linux.png index 30169a49..25cf4109 100644 Binary files a/datagrid/ui-tests/tests/datagrid.spec.ts-snapshots/datagrid-example-linux.png and b/datagrid/ui-tests/tests/datagrid.spec.ts-snapshots/datagrid-example-linux.png differ diff --git a/documents/.copier-answers.yml b/documents/.copier-answers.yml index 36113572..b4cd057d 100644 --- a/documents/.copier-answers.yml +++ b/documents/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/documents/LICENSE b/documents/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/documents/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/documents/README.md b/documents/README.md index c56c7c77..1dc02446 100644 --- a/documents/README.md +++ b/documents/README.md @@ -28,7 +28,7 @@ Developers can provide new extensions to support additional documents (or replac The model, the shared model and the view will be provided through new factories and the file type will be registered directly. For that you will need to access the [`DocumentRegistry`](https://jupyterlab.readthedocs.io/en/latest/api/classes/docregistry.DocumentRegistry-1.html) to register new [`FileType`s](https://jupyterlab.readthedocs.io/en/latest/api/interfaces/rendermime_interfaces.IRenderMime.IFileType.html), models and views. This way, when opening a new file, the [`DocumentManager`](https://jupyterlab.readthedocs.io/en/latest/api/classes/docmanager.DocumentManager-1.html) will look into the file metadata and create an instance of `Context` with the right model for this file. To register new documents, you can create factories, either a [`IModelFactory`](https://jupyterlab.readthedocs.io/en/latest/api/interfaces/docregistry.DocumentRegistry.IModelFactory.html) for the model and/or a [`IWidgetFactory`](https://jupyterlab.readthedocs.io/en/latest/api/interfaces/docregistry.DocumentRegistry.IWidgetFactory.html) for the view. -The shared model needs to be registered only if your file must be collaborative. For that you will need to register it in the [`ICollaborativeDrive`](https://jupyterlab-realtime-collaboration.readthedocs.io/en/stable/api/interfaces/collaborative_drive.ICollaborativeDrive.html) token provided by the `@jupyter/collaborative-drive` package. +The shared model needs to be registered only if your file must be collaborative. For that you will need to register it in the [`ICollaborativeDrive`](https://jupyterlab-realtime-collaboration.readthedocs.io/en/stable/api/modules/collaborative_drive.html) token provided by the `@jupyter/collaborative-drive` package. > Packaging note: when using an optional external extension (here > `@jupyter/collaborative-drive` from `jupyter-collaboration`), you must @@ -36,7 +36,7 @@ The shared model needs to be registered only if your file must be collaborative. > adding the following configuration in `package.json`.: ```json5 -// package.json#L108-L113 +// package.json#L109-L114 "sharedPackages": { "@jupyter/collaborative-drive": { diff --git a/documents/package.json b/documents/package.json index d8a952a2..91d4f378 100644 --- a/documents/package.json +++ b/documents/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -81,7 +82,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -91,7 +92,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/documents/pyproject.toml b/documents/pyproject.toml index a1322e1d..21f78658 100644 --- a/documents/pyproject.toml +++ b/documents/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_documents" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ "jupyter_ydoc>=3.0.0,<4.0.0" @@ -34,7 +34,7 @@ exampledoc = "jupyterlab_examples_documents.document:YExampleDoc" source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_documents/labextension"] diff --git a/documents/tsconfig.json b/documents/tsconfig.json index 98979175..25af0404 100644 --- a/documents/tsconfig.json +++ b/documents/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/documents/ui-tests/README.md b/documents/ui-tests/README.md index 85c8d197..39814f4e 100644 --- a/documents/ui-tests/README.md +++ b/documents/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/documents/ui-tests/tests/documents.spec.ts b/documents/ui-tests/tests/documents.spec.ts index c46f764a..428d9ace 100644 --- a/documents/ui-tests/tests/documents.spec.ts +++ b/documents/ui-tests/tests/documents.spec.ts @@ -4,7 +4,6 @@ test('should check if the cube is loaded', async ({ page }) => { await page.menu.clickMenuItem('File>New>Text File'); await page - .getByRole('region', { name: 'notebook content' }) .getByRole('textbox') .fill('{\n\t"x": 177,\n\t"y": 301,\n\t"content": "Hello YJS!"\n}'); diff --git a/hello-world/.copier-answers.yml b/hello-world/.copier-answers.yml index 409305c4..35bef864 100644 --- a/hello-world/.copier-answers.yml +++ b/hello-world/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/hello-world/README.md b/hello-world/README.md index 8a0b3d31..1e0b96a3 100644 --- a/hello-world/README.md +++ b/hello-world/README.md @@ -160,7 +160,7 @@ called `@jupyterlab/application`. The dependency of your extension on this package is declared in the file `package.json`: ```json5 -// package.json#L54-L56 +// package.json#L55-L57 "dependencies": { "@jupyterlab/application": "^4.0.0" diff --git a/hello-world/RELEASE.md b/hello-world/RELEASE.md index 68b4fc21..20d94aa8 100644 --- a/hello-world/RELEASE.md +++ b/hello-world/RELEASE.md @@ -58,18 +58,21 @@ npm publish --access public ## Automated releases with the Jupyter Releaser -The extension repository should already be compatible with the Jupyter Releaser. - -Check out the [workflow documentation](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html) for more information. +The extension repository should already be compatible with the Jupyter Releaser. But +the GitHub repository and the package managers need to be properly set up. Please +follow the instructions of the Jupyter Releaser [checklist](https://jupyter-releaser.readthedocs.io/en/latest/how_to_guides/convert_repo_from_repo.html). Here is a summary of the steps to cut a new release: -- Add `ADMIN_GITHUB_TOKEN`, `PYPI_TOKEN` and `NPM_TOKEN` to the [Github Secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) in the repository - Go to the Actions panel - Run the "Step 1: Prep Release" workflow - Check the draft changelog - Run the "Step 2: Publish Release" workflow +> [!NOTE] +> Check out the [workflow documentation](https://jupyter-releaser.readthedocs.io/en/latest/get_started/making_release_from_repo.html) +> for more information. + ## Publishing to `conda-forge` If the package is not on conda forge yet, check the documentation to learn how to add it: https://conda-forge.org/docs/maintainer/adding_pkgs.html diff --git a/hello-world/package.json b/hello-world/package.json index 81a458b9..abab05a2 100644 --- a/hello-world/package.json +++ b/hello-world/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -68,7 +69,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -78,7 +79,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/hello-world/pyproject.toml b/hello-world/pyproject.toml index 4ef9340c..1a959e28 100644 --- a/hello-world/pyproject.toml +++ b/hello-world/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" name = "jupyterlab_examples_hello_world" readme = "README.md" license = { file = "LICENSE" } -requires-python = ">=3.8" +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_hello_world/labextension"] diff --git a/hello-world/tsconfig.json b/hello-world/tsconfig.json index 98979175..25af0404 100644 --- a/hello-world/tsconfig.json +++ b/hello-world/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/hello-world/tsconfig.test.json b/hello-world/tsconfig.test.json index 1de37fd0..1c66acf6 100644 --- a/hello-world/tsconfig.test.json +++ b/hello-world/tsconfig.test.json @@ -1,6 +1,3 @@ { - "extends": "./tsconfig", - "compilerOptions": { - "types": ["jest"] - } + "extends": "./tsconfig" } diff --git a/hello-world/ui-tests/README.md b/hello-world/ui-tests/README.md index 6e60d9ce..f12616f2 100644 --- a/hello-world/ui-tests/README.md +++ b/hello-world/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/kernel-messaging/.copier-answers.yml b/kernel-messaging/.copier-answers.yml index b6935d37..941af026 100644 --- a/kernel-messaging/.copier-answers.yml +++ b/kernel-messaging/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/kernel-messaging/LICENSE b/kernel-messaging/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/kernel-messaging/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/kernel-messaging/package.json b/kernel-messaging/package.json index c08dad7a..d12ce75f 100644 --- a/kernel-messaging/package.json +++ b/kernel-messaging/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -79,7 +80,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -89,7 +90,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/kernel-messaging/pyproject.toml b/kernel-messaging/pyproject.toml index 961494a0..4d2b4863 100644 --- a/kernel-messaging/pyproject.toml +++ b/kernel-messaging/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_kernel_messaging" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_kernel_messaging/labextension"] diff --git a/kernel-messaging/tsconfig.json b/kernel-messaging/tsconfig.json index 98979175..25af0404 100644 --- a/kernel-messaging/tsconfig.json +++ b/kernel-messaging/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/kernel-messaging/ui-tests/README.md b/kernel-messaging/ui-tests/README.md index 68554413..b5e2813c 100644 --- a/kernel-messaging/ui-tests/README.md +++ b/kernel-messaging/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/kernel-messaging/ui-tests/tests/kernel-messaging.spec.ts-snapshots/kernel-messaging-example-linux.png b/kernel-messaging/ui-tests/tests/kernel-messaging.spec.ts-snapshots/kernel-messaging-example-linux.png index f6144a63..fbc0cf76 100644 Binary files a/kernel-messaging/ui-tests/tests/kernel-messaging.spec.ts-snapshots/kernel-messaging-example-linux.png and b/kernel-messaging/ui-tests/tests/kernel-messaging.spec.ts-snapshots/kernel-messaging-example-linux.png differ diff --git a/kernel-output/.copier-answers.yml b/kernel-output/.copier-answers.yml index 78f66c49..3be5689e 100644 --- a/kernel-output/.copier-answers.yml +++ b/kernel-output/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/kernel-output/LICENSE b/kernel-output/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/kernel-output/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/kernel-output/package.json b/kernel-output/package.json index 745c05d4..e54456e3 100644 --- a/kernel-output/package.json +++ b/kernel-output/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -76,7 +77,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -86,7 +87,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/kernel-output/pyproject.toml b/kernel-output/pyproject.toml index f84ef3f9..43cf018c 100644 --- a/kernel-output/pyproject.toml +++ b/kernel-output/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_kernel_output" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_kernel_output/labextension"] diff --git a/kernel-output/tsconfig.json b/kernel-output/tsconfig.json index 98979175..25af0404 100644 --- a/kernel-output/tsconfig.json +++ b/kernel-output/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/kernel-output/ui-tests/README.md b/kernel-output/ui-tests/README.md index be6eb075..dfd8f524 100644 --- a/kernel-output/ui-tests/README.md +++ b/kernel-output/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/kernel-output/ui-tests/tests/kernel-output.spec.ts b/kernel-output/ui-tests/tests/kernel-output.spec.ts index bca0447f..28e16161 100644 --- a/kernel-output/ui-tests/tests/kernel-output.spec.ts +++ b/kernel-output/ui-tests/tests/kernel-output.spec.ts @@ -27,9 +27,15 @@ test('should open a panel connected to a notebook kernel', async ({ page }) => { await page.menu.clickMenuItem('Kernel Output>Open the Kernel Output Panel'); // Select Notebook kernel - await page.locator('.jp-Dialog-body').locator('select').selectOption({ - label: 'Untitled.ipynb' + const select = page.locator('.jp-Dialog-body').locator('select'); + const optionLocator = select.locator('option', { + hasText: /Untitled.ipynb.*/ }); + const value = await optionLocator.getAttribute('value'); + await page + .locator('.jp-Dialog-body') + .locator('select') + .selectOption({ value }); await page.getByRole('button', { name: 'Select Kernel' }).click(); diff --git a/kernel-output/ui-tests/tests/kernel-output.spec.ts-snapshots/kernel-output-example-linux.png b/kernel-output/ui-tests/tests/kernel-output.spec.ts-snapshots/kernel-output-example-linux.png index 88fb9816..a2aeb145 100644 Binary files a/kernel-output/ui-tests/tests/kernel-output.spec.ts-snapshots/kernel-output-example-linux.png and b/kernel-output/ui-tests/tests/kernel-output.spec.ts-snapshots/kernel-output-example-linux.png differ diff --git a/launcher/.copier-answers.yml b/launcher/.copier-answers.yml index fed39c69..0ebf098e 100644 --- a/launcher/.copier-answers.yml +++ b/launcher/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/launcher/LICENSE b/launcher/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/launcher/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/launcher/package.json b/launcher/package.json index 01373de7..bf16b9a7 100644 --- a/launcher/package.json +++ b/launcher/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -72,7 +73,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -82,7 +83,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/launcher/pyproject.toml b/launcher/pyproject.toml index 39699f28..4e8bfac2 100644 --- a/launcher/pyproject.toml +++ b/launcher/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_launcher" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_launcher/labextension"] diff --git a/launcher/tsconfig.json b/launcher/tsconfig.json index 98979175..25af0404 100644 --- a/launcher/tsconfig.json +++ b/launcher/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/launcher/ui-tests/README.md b/launcher/ui-tests/README.md index 1452acd6..acd14d82 100644 --- a/launcher/ui-tests/README.md +++ b/launcher/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/log-messages/.copier-answers.yml b/log-messages/.copier-answers.yml index 614bb80c..2466bdd7 100644 --- a/log-messages/.copier-answers.yml +++ b/log-messages/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/log-messages/LICENSE b/log-messages/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/log-messages/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/log-messages/package.json b/log-messages/package.json index ca826a96..95e66c88 100644 --- a/log-messages/package.json +++ b/log-messages/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -81,7 +82,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -91,7 +92,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/log-messages/pyproject.toml b/log-messages/pyproject.toml index 5e7626f1..54f8ac24 100644 --- a/log-messages/pyproject.toml +++ b/log-messages/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_log_messages" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_log_messages/labextension"] diff --git a/log-messages/tsconfig.json b/log-messages/tsconfig.json index 98979175..25af0404 100644 --- a/log-messages/tsconfig.json +++ b/log-messages/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/log-messages/ui-tests/README.md b/log-messages/ui-tests/README.md index a0628a1f..c655c550 100644 --- a/log-messages/ui-tests/README.md +++ b/log-messages/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/log-messages/ui-tests/tests/log-messages.spec.ts b/log-messages/ui-tests/tests/log-messages.spec.ts index d38eec00..18dd70a7 100644 --- a/log-messages/ui-tests/tests/log-messages.spec.ts +++ b/log-messages/ui-tests/tests/log-messages.spec.ts @@ -26,8 +26,6 @@ test('should capture log messages in dedicated panel', async ({ page }) => { ); await page.mouse.up(); - await page.pause(); - // Click the log message menu entry await page.menu.clickMenuItem('Log Messages Example>Text log message'); @@ -48,7 +46,7 @@ test('should capture log messages in dedicated panel', async ({ page }) => { expect(await page.waitForSelector('text=Hello world text!!')).toBeTruthy(); // Click button:has-text("Clear Log") - await page.click('button:has-text("Clear Log")'); + await page.click('jp-button:has-text("Clear Log")'); failed = true; try { diff --git a/main-menu/.copier-answers.yml b/main-menu/.copier-answers.yml index e41f1971..b18316bf 100644 --- a/main-menu/.copier-answers.yml +++ b/main-menu/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/main-menu/LICENSE b/main-menu/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/main-menu/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/main-menu/README.md b/main-menu/README.md index 9b879fe0..0601b75b 100644 --- a/main-menu/README.md +++ b/main-menu/README.md @@ -142,11 +142,12 @@ To achieve this, the `package.json` must include: ```json5 -// package.json#L16-L20 +// package.json#L16-L21 "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], ``` @@ -154,7 +155,7 @@ To achieve this, the `package.json` must include: ```json5 -// package.json#L94-L98 +// package.json#L95-L99 "jupyterlab": { "extension": true, diff --git a/main-menu/package.json b/main-menu/package.json index 8a46dcb3..a16e9bc6 100644 --- a/main-menu/package.json +++ b/main-menu/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -70,7 +71,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -80,7 +81,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/main-menu/pyproject.toml b/main-menu/pyproject.toml index 851ed5b5..1fdc606f 100644 --- a/main-menu/pyproject.toml +++ b/main-menu/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_main_menu" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_main_menu/labextension"] diff --git a/main-menu/tsconfig.json b/main-menu/tsconfig.json index 98979175..25af0404 100644 --- a/main-menu/tsconfig.json +++ b/main-menu/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/main-menu/ui-tests/README.md b/main-menu/ui-tests/README.md index a17c158d..ead73bb5 100644 --- a/main-menu/ui-tests/README.md +++ b/main-menu/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/metadata-form/.copier-answers.yml b/metadata-form/.copier-answers.yml index 219a2086..a607e65c 100644 --- a/metadata-form/.copier-answers.yml +++ b/metadata-form/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: https://github.com/jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/metadata-form/LICENSE b/metadata-form/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/metadata-form/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/metadata-form/package.json b/metadata-form/package.json index 2ca7d0ca..25c945d5 100644 --- a/metadata-form/package.json +++ b/metadata-form/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -74,7 +75,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -84,7 +85,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/metadata-form/pyproject.toml b/metadata-form/pyproject.toml index 43644818..2269de4a 100644 --- a/metadata-form/pyproject.toml +++ b/metadata-form/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_metadata_form" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_metadata_form/labextension"] diff --git a/metadata-form/tsconfig.json b/metadata-form/tsconfig.json index 98979175..25af0404 100644 --- a/metadata-form/tsconfig.json +++ b/metadata-form/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/metadata-form/ui-tests/README.md b/metadata-form/ui-tests/README.md index 176fba45..74275425 100644 --- a/metadata-form/ui-tests/README.md +++ b/metadata-form/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/metadata-form/ui-tests/tests/metadata-form.spec.ts-snapshots/advanced-form-linux.png b/metadata-form/ui-tests/tests/metadata-form.spec.ts-snapshots/advanced-form-linux.png index e57132eb..ffd6a727 100644 Binary files a/metadata-form/ui-tests/tests/metadata-form.spec.ts-snapshots/advanced-form-linux.png and b/metadata-form/ui-tests/tests/metadata-form.spec.ts-snapshots/advanced-form-linux.png differ diff --git a/mimerenderer/.copier-answers.yml b/mimerenderer/.copier-answers.yml index 352bc383..b370832b 100644 --- a/mimerenderer/.copier-answers.yml +++ b/mimerenderer/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/mimerenderer/LICENSE b/mimerenderer/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/mimerenderer/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/mimerenderer/README.md b/mimerenderer/README.md index 683ed312..b25ed2c6 100644 --- a/mimerenderer/README.md +++ b/mimerenderer/README.md @@ -190,7 +190,7 @@ Then the file content is used to set the video element source as a ```ts // src/index.ts#L37-L38 -let data = model.data[this._mimeType] as string; +const data = model.data[this._mimeType] as string; this._video.src = `data:${MIME_TYPE};base64,${data}`; ``` @@ -200,7 +200,14 @@ To improve the sizing of the video in its input frame, some style rules are added: ```css -/* style/base.css#L7-L14 */ +.mimerenderer-mp4 { + overflow: auto; +} + +.mimerenderer-mp4 video { + width: 100%; + height: auto; +} ``` ## Where to Go Next diff --git a/mimerenderer/package.json b/mimerenderer/package.json index 7c16ec4d..99f7315e 100644 --- a/mimerenderer/package.json +++ b/mimerenderer/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -69,7 +70,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -79,7 +80,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/mimerenderer/pyproject.toml b/mimerenderer/pyproject.toml index 74b52e4c..86d3634a 100644 --- a/mimerenderer/pyproject.toml +++ b/mimerenderer/pyproject.toml @@ -5,22 +5,23 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_mimerenderer" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", "Framework :: Jupyter :: JupyterLab :: 4", "Framework :: Jupyter :: JupyterLab :: Extensions", + "Framework :: Jupyter :: JupyterLab :: Extensions :: Mime Renderers", "Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +31,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_mimerenderer/labextension"] diff --git a/mimerenderer/src/index.ts b/mimerenderer/src/index.ts index 60214c4c..91302a30 100644 --- a/mimerenderer/src/index.ts +++ b/mimerenderer/src/index.ts @@ -34,7 +34,7 @@ export class VideoWidget extends Widget implements IRenderMime.IRenderer { * Render mp4 into this widget's node. */ renderModel(model: IRenderMime.IMimeModel): Promise { - let data = model.data[this._mimeType] as string; + const data = model.data[this._mimeType] as string; this._video.src = `data:${MIME_TYPE};base64,${data}`; return Promise.resolve(); diff --git a/mimerenderer/tsconfig.json b/mimerenderer/tsconfig.json index 98979175..25af0404 100644 --- a/mimerenderer/tsconfig.json +++ b/mimerenderer/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/mimerenderer/ui-tests/README.md b/mimerenderer/ui-tests/README.md index 694c3bf8..17021014 100644 --- a/mimerenderer/ui-tests/README.md +++ b/mimerenderer/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/mimerenderer/ui-tests/tests/jupyterlab_examples_mimerenderer.spec.ts b/mimerenderer/ui-tests/tests/jupyterlab_examples_mimerenderer.spec.ts index a4ba2348..112d98af 100644 --- a/mimerenderer/ui-tests/tests/jupyterlab_examples_mimerenderer.spec.ts +++ b/mimerenderer/ui-tests/tests/jupyterlab_examples_mimerenderer.spec.ts @@ -17,5 +17,8 @@ test('should display mp4 data file', async ({ page, tmpPath }) => { const view = page.getByRole('main').locator('.mimerenderer-mp4'); + // Give the video a some time to load + await page.waitForTimeout(500); + expect(await view.screenshot()).toMatchSnapshot('mp4-file.png'); }); diff --git a/mimerenderer/ui-tests/tests/jupyterlab_examples_mimerenderer.spec.ts-snapshots/mp4-file-linux.png b/mimerenderer/ui-tests/tests/jupyterlab_examples_mimerenderer.spec.ts-snapshots/mp4-file-linux.png index 7306e547..546cf32e 100644 Binary files a/mimerenderer/ui-tests/tests/jupyterlab_examples_mimerenderer.spec.ts-snapshots/mp4-file-linux.png and b/mimerenderer/ui-tests/tests/jupyterlab_examples_mimerenderer.spec.ts-snapshots/mp4-file-linux.png differ diff --git a/mimerenderer/ui-tests/yarn.lock b/mimerenderer/ui-tests/yarn.lock new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/mimerenderer/ui-tests/yarn.lock @@ -0,0 +1 @@ + diff --git a/notifications/.copier-answers.yml b/notifications/.copier-answers.yml index 032a0eca..ef0e3012 100644 --- a/notifications/.copier-answers.yml +++ b/notifications/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/notifications/LICENSE b/notifications/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/notifications/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/notifications/package.json b/notifications/package.json index c5c4c857..ba8b426f 100644 --- a/notifications/package.json +++ b/notifications/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -70,7 +71,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -80,7 +81,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/notifications/pyproject.toml b/notifications/pyproject.toml index d726b44c..3dd7f99d 100644 --- a/notifications/pyproject.toml +++ b/notifications/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_notifications" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_notifications/labextension"] diff --git a/notifications/tsconfig.json b/notifications/tsconfig.json index 98979175..25af0404 100644 --- a/notifications/tsconfig.json +++ b/notifications/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/notifications/ui-tests/README.md b/notifications/ui-tests/README.md index 8d377fcc..91825145 100644 --- a/notifications/ui-tests/README.md +++ b/notifications/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/notifications/ui-tests/tests/jupyterlab_examples_notifications.spec.ts-snapshots/notifications-linux.png b/notifications/ui-tests/tests/jupyterlab_examples_notifications.spec.ts-snapshots/notifications-linux.png index 72b938af..0bfa5c64 100644 Binary files a/notifications/ui-tests/tests/jupyterlab_examples_notifications.spec.ts-snapshots/notifications-linux.png and b/notifications/ui-tests/tests/jupyterlab_examples_notifications.spec.ts-snapshots/notifications-linux.png differ diff --git a/package.json b/package.json index fa69ab2a..08f88d5e 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "log-messages", "main-menu", "metadata-form", + "mimerenderer", "notifications", "react-widget", "server-extension", diff --git a/react-widget/.copier-answers.yml b/react-widget/.copier-answers.yml index 1986a384..e88041c0 100644 --- a/react-widget/.copier-answers.yml +++ b/react-widget/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/react-widget/LICENSE b/react-widget/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/react-widget/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/react-widget/package.json b/react-widget/package.json index acf5e0eb..032ae51f 100644 --- a/react-widget/package.json +++ b/react-widget/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -71,7 +72,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -81,7 +82,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/react-widget/pyproject.toml b/react-widget/pyproject.toml index fde0049d..23bcf6d4 100644 --- a/react-widget/pyproject.toml +++ b/react-widget/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_react_widget" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_react_widget/labextension"] diff --git a/react-widget/tsconfig.json b/react-widget/tsconfig.json index 98979175..25af0404 100644 --- a/react-widget/tsconfig.json +++ b/react-widget/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/react-widget/ui-tests/README.md b/react-widget/ui-tests/README.md index cfc70099..8e17ef17 100644 --- a/react-widget/ui-tests/README.md +++ b/react-widget/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/react-widget/ui-tests/tests/react-widget.spec.ts-snapshots/react-widget-example-linux.png b/react-widget/ui-tests/tests/react-widget.spec.ts-snapshots/react-widget-example-linux.png index 78ac656d..458bab63 100644 Binary files a/react-widget/ui-tests/tests/react-widget.spec.ts-snapshots/react-widget-example-linux.png and b/react-widget/ui-tests/tests/react-widget.spec.ts-snapshots/react-widget-example-linux.png differ diff --git a/scripts/update-template.sh b/scripts/update-template.sh index f0819ad5..9150547f 100755 --- a/scripts/update-template.sh +++ b/scripts/update-template.sh @@ -11,7 +11,7 @@ for directory in ./*/ do if [ "${directory}" != "./scripts" ]; then pushd ${directory} - copier update -o inline + copier update --trust -o inline rm -rf RELEASE.md .github/ git add --all . git commit --amend -m "Update extension template" diff --git a/server-extension/.copier-answers.yml b/server-extension/.copier-answers.yml index 99c90ed1..2f16467e 100644 --- a/server-extension/.copier-answers.yml +++ b/server-extension/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/server-extension/LICENSE b/server-extension/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/server-extension/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/server-extension/README.md b/server-extension/README.md index 75a8da48..52aa081e 100644 --- a/server-extension/README.md +++ b/server-extension/README.md @@ -724,7 +724,7 @@ user about that dependency by adding the `discovery` metadata to your `package.j file: ```json5 -// package.json#L97-L107 +// package.json#L98-L108 "jupyterlab": { "discovery": { @@ -742,7 +742,7 @@ file: In this example, the extension requires a `server` extension: ```json5 -// package.json#L98-L98 +// package.json#L99-L99 "discovery": { ``` @@ -750,7 +750,7 @@ In this example, the extension requires a `server` extension: And that server extension is available through `pip`: ```json5 -// package.json#L99-L101 +// package.json#L100-L102 "server": { "managers": [ diff --git a/server-extension/package.json b/server-extension/package.json index d0faac69..4b1525e2 100644 --- a/server-extension/package.json +++ b/server-extension/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -73,7 +74,7 @@ "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", "mkdirp": "^1.0.3", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -83,7 +84,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/server-extension/pyproject.toml b/server-extension/pyproject.toml index bab083b7..88114023 100644 --- a/server-extension/pyproject.toml +++ b/server-extension/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_server" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,14 +16,14 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ - "jupyter_server>=2.0.1,<3" + "jupyter_server>=2.4.0,<3" ] dynamic = ["version", "description", "authors", "urls", "keywords"] @@ -40,7 +40,7 @@ test = [ source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_server/labextension"] diff --git a/server-extension/tsconfig.json b/server-extension/tsconfig.json index 98979175..25af0404 100644 --- a/server-extension/tsconfig.json +++ b/server-extension/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/server-extension/ui-tests/README.md b/server-extension/ui-tests/README.md index 57913a0c..f6ff117a 100644 --- a/server-extension/ui-tests/README.md +++ b/server-extension/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/settings/.copier-answers.yml b/settings/.copier-answers.yml index 3ed11261..d3b54e3a 100644 --- a/settings/.copier-answers.yml +++ b/settings/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/settings/LICENSE b/settings/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/settings/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/settings/README.md b/settings/README.md index 93573923..7a1316b5 100644 --- a/settings/README.md +++ b/settings/README.md @@ -131,7 +131,7 @@ the `package.json` file in the `jupyterlab` section (here `schema`): ```json5 -// package.json#L94-L98 +// package.json#L95-L99 "jupyterlab": { "extension": true, @@ -144,11 +144,12 @@ the `package.json` file in the `jupyterlab` section (here `schema`): And you should not forget to add it to the files of the package: ```json5 -// package.json#L16-L20 +// package.json#L16-L21 "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], ``` diff --git a/settings/package.json b/settings/package.json index 8a430103..a68c810d 100644 --- a/settings/package.json +++ b/settings/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -70,7 +71,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -80,7 +81,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/settings/pyproject.toml b/settings/pyproject.toml index e448c819..fb973918 100644 --- a/settings/pyproject.toml +++ b/settings/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_settings" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_settings/labextension"] diff --git a/settings/tsconfig.json b/settings/tsconfig.json index 98979175..25af0404 100644 --- a/settings/tsconfig.json +++ b/settings/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/settings/ui-tests/README.md b/settings/ui-tests/README.md index 0fd1bac0..f5e3c1cc 100644 --- a/settings/ui-tests/README.md +++ b/settings/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/shout-button-message/.copier-answers.yml b/shout-button-message/.copier-answers.yml index 2a16ba22..d67ac0b8 100644 --- a/shout-button-message/.copier-answers.yml +++ b/shout-button-message/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: https://github.com/jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/shout-button-message/LICENSE b/shout-button-message/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/shout-button-message/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/shout-button-message/package.json b/shout-button-message/package.json index eef4531e..a189a178 100644 --- a/shout-button-message/package.json +++ b/shout-button-message/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -71,7 +72,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -81,7 +82,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/shout-button-message/pyproject.toml b/shout-button-message/pyproject.toml index 409cc798..0a87c2a1 100644 --- a/shout-button-message/pyproject.toml +++ b/shout-button-message/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_shout_button" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_shout_button/labextension"] diff --git a/shout-button-message/src/index.ts b/shout-button-message/src/index.ts index 2cdf973e..433f5fbe 100644 --- a/shout-button-message/src/index.ts +++ b/shout-button-message/src/index.ts @@ -145,7 +145,7 @@ const plugin: JupyterFrontEndPlugin = { // is published and react to it by updating the status bar widget. shoutWidget.messageShouted.connect((widget: ShoutWidget, time: Date) => { statusBarWidget.setSummary( - 'Last Shout: ' + widget.lastShoutTime?.toString() ?? '(None)' + 'Last Shout: ' + widget.lastShoutTime?.toString() ); }); } diff --git a/shout-button-message/tsconfig.json b/shout-button-message/tsconfig.json index 98979175..25af0404 100644 --- a/shout-button-message/tsconfig.json +++ b/shout-button-message/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/shout-button-message/ui-tests/README.md b/shout-button-message/ui-tests/README.md index 8d377fcc..91825145 100644 --- a/shout-button-message/ui-tests/README.md +++ b/shout-button-message/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/signals/.copier-answers.yml b/signals/.copier-answers.yml index cf61837e..0288a5de 100644 --- a/signals/.copier-answers.yml +++ b/signals/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/signals/LICENSE b/signals/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/signals/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/signals/package.json b/signals/package.json index 4600691f..d71b5d29 100644 --- a/signals/package.json +++ b/signals/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -79,7 +80,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -89,7 +90,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/signals/pyproject.toml b/signals/pyproject.toml index b3dd1acb..a4b46be8 100644 --- a/signals/pyproject.toml +++ b/signals/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_signals" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_signals/labextension"] diff --git a/signals/tsconfig.json b/signals/tsconfig.json index 98979175..25af0404 100644 --- a/signals/tsconfig.json +++ b/signals/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/signals/ui-tests/README.md b/signals/ui-tests/README.md index 822e77cf..91f48266 100644 --- a/signals/ui-tests/README.md +++ b/signals/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/signals/ui-tests/tests/signals.spec.ts-snapshots/signals-example-linux.png b/signals/ui-tests/tests/signals.spec.ts-snapshots/signals-example-linux.png index 60cd3a49..bf9574b9 100644 Binary files a/signals/ui-tests/tests/signals.spec.ts-snapshots/signals-example-linux.png and b/signals/ui-tests/tests/signals.spec.ts-snapshots/signals-example-linux.png differ diff --git a/state/.copier-answers.yml b/state/.copier-answers.yml index bcbb856a..ba147555 100644 --- a/state/.copier-answers.yml +++ b/state/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/state/LICENSE b/state/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/state/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/state/package.json b/state/package.json index fb9a2e67..a1e137d8 100644 --- a/state/package.json +++ b/state/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -71,7 +72,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -81,7 +82,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/state/pyproject.toml b/state/pyproject.toml index 0d619c5c..328cf36a 100644 --- a/state/pyproject.toml +++ b/state/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_state" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_state/labextension"] diff --git a/state/tsconfig.json b/state/tsconfig.json index 98979175..25af0404 100644 --- a/state/tsconfig.json +++ b/state/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/state/ui-tests/README.md b/state/ui-tests/README.md index b78b84ee..1f6b8d39 100644 --- a/state/ui-tests/README.md +++ b/state/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/toolbar-button/.copier-answers.yml b/toolbar-button/.copier-answers.yml index 82e7826f..d3cd8848 100644 --- a/toolbar-button/.copier-answers.yml +++ b/toolbar-button/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/toolbar-button/LICENSE b/toolbar-button/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/toolbar-button/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/toolbar-button/package.json b/toolbar-button/package.json index f3690c67..fe0e6eb8 100644 --- a/toolbar-button/package.json +++ b/toolbar-button/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -70,7 +71,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -80,7 +81,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/toolbar-button/pyproject.toml b/toolbar-button/pyproject.toml index 0b07f4e1..0e9a08df 100644 --- a/toolbar-button/pyproject.toml +++ b/toolbar-button/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_toolbar_button" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_toolbar_button/labextension"] diff --git a/toolbar-button/tsconfig.json b/toolbar-button/tsconfig.json index 98979175..25af0404 100644 --- a/toolbar-button/tsconfig.json +++ b/toolbar-button/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/toolbar-button/ui-tests/README.md b/toolbar-button/ui-tests/README.md index 14cafead..72e405ca 100644 --- a/toolbar-button/ui-tests/README.md +++ b/toolbar-button/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/toolbar-button/ui-tests/tests/toolbar-button.spec.ts b/toolbar-button/ui-tests/tests/toolbar-button.spec.ts index 721340a8..b320a931 100644 --- a/toolbar-button/ui-tests/tests/toolbar-button.spec.ts +++ b/toolbar-button/ui-tests/tests/toolbar-button.spec.ts @@ -1,6 +1,7 @@ import { test, expect } from '@jupyterlab/galata'; test('should clear all outputs when clicked', async ({ page }) => { + await page.sidebar.close(); // Create a new Notebook await page.menu.clickMenuItem('File>New>Notebook'); await page.click('button:has-text("Select")'); @@ -16,7 +17,7 @@ test('should clear all outputs when clicked', async ({ page }) => { const OUTPUT = '.lm-Widget.jp-RenderedText >> text=Hello, JupyterLab'; expect(await page.waitForSelector(OUTPUT)).toBeTruthy(); - await page.click('button:has-text("Clear Outputs of All Cells")'); + await page.click('jp-button:has-text("Clear Outputs of All Cells")'); let failed = true; try { diff --git a/toparea-text-widget/.copier-answers.yml b/toparea-text-widget/.copier-answers.yml index 3bb40024..cbd4139d 100644 --- a/toparea-text-widget/.copier-answers.yml +++ b/toparea-text-widget/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: https://github.com/jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/toparea-text-widget/LICENSE b/toparea-text-widget/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/toparea-text-widget/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/toparea-text-widget/package.json b/toparea-text-widget/package.json index b3cb21c8..745469a1 100644 --- a/toparea-text-widget/package.json +++ b/toparea-text-widget/package.json @@ -15,7 +15,8 @@ "author": "Project Jupyter Contributors", "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", - "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}" + "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}" ], "main": "lib/index.js", "types": "lib/index.d.ts", @@ -57,6 +58,8 @@ }, "devDependencies": { "@jupyterlab/builder": "^4.0.0", + "@jupyterlab/testutils": "^4.0.0", + "@types/jest": "^29.2.0", "@types/json-schema": "^7.0.11", "@types/react": "^18.0.26", "@types/react-addons-linked-state-mixin": "^0.14.22", @@ -66,7 +69,8 @@ "eslint": "^8.36.0", "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", - "npm-run-all": "^4.1.5", + "jest": "^29.2.0", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -76,7 +80,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/toparea-text-widget/pyproject.toml b/toparea-text-widget/pyproject.toml index 9a2b92ea..61ae21d7 100644 --- a/toparea-text-widget/pyproject.toml +++ b/toparea-text-widget/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_toparea" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_toparea/labextension"] diff --git a/toparea-text-widget/tsconfig.json b/toparea-text-widget/tsconfig.json index 98979175..25af0404 100644 --- a/toparea-text-widget/tsconfig.json +++ b/toparea-text-widget/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/widgets/.copier-answers.yml b/widgets/.copier-answers.yml index 5fe64af4..27f0ddc0 100644 --- a/widgets/.copier-answers.yml +++ b/widgets/.copier-answers.yml @@ -1,5 +1,5 @@ # Changes here will be overwritten by Copier; NEVER EDIT MANUALLY -_commit: v4.2.4 +_commit: v4.3.8 _src_path: gh:jupyterlab/extension-template author_email: '' author_name: Project Jupyter Contributors diff --git a/widgets/LICENSE b/widgets/LICENSE new file mode 100644 index 00000000..84b63670 --- /dev/null +++ b/widgets/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2025, Project Jupyter Contributors +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/widgets/package.json b/widgets/package.json index 4ba662d3..a03f124d 100644 --- a/widgets/package.json +++ b/widgets/package.json @@ -16,6 +16,7 @@ "files": [ "lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}", "style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}", + "src/**/*.{ts,tsx}", "schema/*.json" ], "main": "lib/index.js", @@ -72,7 +73,7 @@ "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.2.0", - "npm-run-all": "^4.1.5", + "npm-run-all2": "^7.0.1", "prettier": "^3.0.0", "rimraf": "^5.0.1", "source-map-loader": "^1.0.2", @@ -82,7 +83,7 @@ "stylelint-config-standard": "^34.0.0", "stylelint-csstree-validator": "^3.0.0", "stylelint-prettier": "^4.0.0", - "typescript": "~5.0.2", + "typescript": "~5.8.0", "yjs": "^13.5.0" }, "sideEffects": [ diff --git a/widgets/pyproject.toml b/widgets/pyproject.toml index 4aee2b52..da86e270 100644 --- a/widgets/pyproject.toml +++ b/widgets/pyproject.toml @@ -5,8 +5,8 @@ build-backend = "hatchling.build" [project] name = "jupyterlab_examples_widgets" readme = "README.md" -license = {text = "BSD-3-Clause License"} -requires-python = ">=3.8" +license = { file = "LICENSE" } +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,11 +16,11 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ ] @@ -30,7 +30,7 @@ dynamic = ["version", "description", "authors", "urls", "keywords"] source = "nodejs" [tool.hatch.metadata.hooks.nodejs] -fields = ["description", "authors", "urls"] +fields = ["description", "authors", "urls", "keywords"] [tool.hatch.build.targets.sdist] artifacts = ["jupyterlab_examples_widgets/labextension"] diff --git a/widgets/tsconfig.json b/widgets/tsconfig.json index 98979175..25af0404 100644 --- a/widgets/tsconfig.json +++ b/widgets/tsconfig.json @@ -6,6 +6,7 @@ "esModuleInterop": true, "incremental": true, "jsx": "react", + "lib": ["DOM", "ES2018", "ES2020.Intl"], "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, @@ -17,7 +18,8 @@ "rootDir": "src", "strict": true, "strictNullChecks": true, - "target": "ES2018" + "target": "ES2018", + "types": ["jest"] }, "include": ["src/*"] } diff --git a/widgets/ui-tests/README.md b/widgets/ui-tests/README.md index dcd765fe..2ffb3be7 100644 --- a/widgets/ui-tests/README.md +++ b/widgets/ui-tests/README.md @@ -12,7 +12,7 @@ in [jupyter_server_test_config.py](./jupyter_server_test_config.py). The default configuration will produce video for failing tests and an HTML report. -> There is a new experimental UI mode that you may fall in love with; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). +> There is a UI mode that you may like; see [that video](https://www.youtube.com/watch?v=jF0yA-JLQW0). ## Run the tests diff --git a/widgets/ui-tests/tests/widgets.spec.ts-snapshots/widgets-example-linux.png b/widgets/ui-tests/tests/widgets.spec.ts-snapshots/widgets-example-linux.png index 0b4959cf..b70ca5eb 100644 Binary files a/widgets/ui-tests/tests/widgets.spec.ts-snapshots/widgets-example-linux.png and b/widgets/ui-tests/tests/widgets.spec.ts-snapshots/widgets-example-linux.png differ