pax_global_header00006660000000000000000000000064146616264460014531gustar00rootroot0000000000000052 comment=7fc01757fe8c63e48a0348ad9dcee5e14981137d ipywidgets-8.1.5/000077500000000000000000000000001466162644600137345ustar00rootroot00000000000000ipywidgets-8.1.5/.binder/000077500000000000000000000000001466162644600152555ustar00rootroot00000000000000ipywidgets-8.1.5/.binder/README000066400000000000000000000006721466162644600161420ustar00rootroot00000000000000This directory holds configuration files for https://mybinder.org/. The interactive notebooks can be accessed with this link: https://mybinder.org/v2/gh/jupyter-widgets/ipywidgets/main?filepath=docs/source/examples To check out a different version, just replace `main` with the desired branch/tag name or commit hash. To use JupyterLab, use: https://mybinder.org/v2/gh/jupyter-widgets/ipywidgets/main?urlpath=lab/tree/docs/source/examples ipywidgets-8.1.5/.binder/postBuild000077500000000000000000000001211466162644600171420ustar00rootroot00000000000000#!/bin/sh set -e npm install -g yarn yarn set version stable ./dev-install.sh ipywidgets-8.1.5/.binder/requirements.txt000066400000000000000000000002171466162644600205410ustar00rootroot00000000000000bqplot ipyleaflet jupyterlab-myst jupyterlab==4.0.7 matplotlib nbclassic networkx notebook==7.0.5 numpy pandas scikit-image scikit-learn sympy ipywidgets-8.1.5/.eslintrc.json000066400000000000000000000016251466162644600165340ustar00rootroot00000000000000{ "root": true, "extends": [ "eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended", "prettier" ], "rules": { "@typescript-eslint/naming-convention": [ "error", { "selector": "interface", "format": ["PascalCase"], "custom": { "regex": "^I[A-Z]", "match": true } } ], "@typescript-eslint/no-unused-vars": ["warn", { "args": "none" }], "@typescript-eslint/no-use-before-define": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-non-null-assertion": "off", "@typescript-eslint/no-namespace": "off", "@typescript-eslint/no-var-requires": "off", "@typescript-eslint/ban-types": "off", "@typescript-eslint/camelcase": "off" }, "parser": "@typescript-eslint/parser", "plugins": ["@typescript-eslint"] } ipywidgets-8.1.5/.github/000077500000000000000000000000001466162644600152745ustar00rootroot00000000000000ipywidgets-8.1.5/.github/ISSUE_TEMPLATE/000077500000000000000000000000001466162644600174575ustar00rootroot00000000000000ipywidgets-8.1.5/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000034411466162644600221530ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve --- ## Description ## Reproduce 1. Go to '...' 2. Click on '...' 3. Scroll down to '...' 4. See error '...' ## Expected behavior ## Context - ipywidgets version - Operating System and version: - Browser and version:
Troubleshoot Output
Paste the output from running `jupyter troubleshoot` from the command line here.
You may want to sanitize the paths in the output.
Command Line Output
Paste the output from your command line running `jupyter lab` (or `jupyter notebook` if you use notebook) here, use `--debug` if possible.
Browser Output
Paste the output from your browser Javascript console here.
### If using JupyterLab - JupyterLab version:
Installed Labextensions
Paste the output from your command line running `jupyter labextension list`.
ipywidgets-8.1.5/.github/ISSUE_TEMPLATE/config.yml000066400000000000000000000007201466162644600214460ustar00rootroot00000000000000# Ref: https://help.github.com/en/github/building-a-strong-community/configuring-issue-templates-for-your-repository#configuring-the-template-chooser blank_issues_enabled: true # default contact_links: - name: Question/Support/Other url: https://discourse.jupyter.org/c/widgets/46 about: If you have a usage question - name: Chat with devs url: https://gitter.im/jupyter-widgets/Lobby about: Ask short questions about using or creating widgets ipywidgets-8.1.5/.github/ISSUE_TEMPLATE/custom_widget_issue.md000066400000000000000000000012541466162644600240700ustar00rootroot00000000000000--- name: Custom Widget about: Issues or questions related to developing a custom widget labels: 'Custom Widget' --- ipywidgets-8.1.5/.github/ISSUE_TEMPLATE/documentation.md000066400000000000000000000014161466162644600226540ustar00rootroot00000000000000--- name: Documentation improvement about: Create a report to help us improve the documentation labels: docs --- ### Problem ### Suggested Improvement ipywidgets-8.1.5/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000020751466162644600232100ustar00rootroot00000000000000--- name: Feature Request about: Suggest a way to improve ipywidgets labels: type:Enhancement --- ### Problem ### Proposed Solution ### Additional context ipywidgets-8.1.5/.github/dependabot.yml000066400000000000000000000012751466162644600201310ustar00rootroot00000000000000# To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates version: 2 # PR limit is set to zero to get only security updates # Ref https://github.com/dependabot/dependabot-core/issues/2521#issuecomment-863261500 updates: - package-ecosystem: npm directory: '/' schedule: interval: 'daily' open-pull-requests-limit: 0 # in case you don't want to enable version updates allow: - dependency-type: 'production' ipywidgets-8.1.5/.github/workflows/000077500000000000000000000000001466162644600173315ustar00rootroot00000000000000ipywidgets-8.1.5/.github/workflows/answered.yml000066400000000000000000000014271466162644600216700ustar00rootroot00000000000000# This action automatically schedules issues to be closed that have been # labeled as answered if there is no activity on them for 30 days. This takes # care of the common usecase of an issue being answered to the best of our # ability and no other follow-up from the submitter. name: 'Close answered issues' on: schedule: - cron: '30 1 * * *' permissions: issues: write jobs: stale: runs-on: ubuntu-latest steps: - uses: actions/stale@v3 with: days-before-pr-stale: -1 days-before-pr-close: -1 skip-stale-issue-message: true days-before-issue-stale: 30 days-before-issue-close: 7 stale-issue-label: 'closing as answered' stale-issue-message: '.' only-issue-labels: 'answered' ipywidgets-8.1.5/.github/workflows/binder-on-pr.yml000066400000000000000000000021621466162644600223510ustar00rootroot00000000000000# Reference https://mybinder.readthedocs.io/en/latest/howto/gh-actions-badges.html name: Binder Badge on: pull_request_target: types: [opened] permissions: pull-requests: write jobs: binder: runs-on: ubuntu-latest steps: - name: comment on PR with Binder link uses: actions/github-script@v6 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | var PR_HEAD_USERREPO = process.env.PR_HEAD_USERREPO; var PR_HEAD_REF = process.env.PR_HEAD_REF; github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: `[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/${PR_HEAD_USERREPO}/${PR_HEAD_REF}?urlpath=lab/tree/docs/source/examples/) :point_left: Launch a binder notebook on branch _${PR_HEAD_USERREPO}/${PR_HEAD_REF}_` }) env: PR_HEAD_REF: ${{ github.event.pull_request.head.ref }} PR_HEAD_USERREPO: ${{ github.event.pull_request.head.repo.full_name }} ipywidgets-8.1.5/.github/workflows/build.yml000066400000000000000000000032171466162644600211560ustar00rootroot00000000000000name: Build jupyterlab_widgets on: push: branches: main pull_request: branches: '*' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v4 with: python-version: '3.8' architecture: 'x64' - name: Cache pip on Linux uses: actions/cache@v3 if: startsWith(runner.os, 'Linux') with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ matrix.python }}-${{ hashFiles('**/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip-${{ matrix.python }} - name: Install build dependencies run: | python -m pip install jupyterlab jupyter_packaging~=0.10 - name: Install node dependencies run: | jlpm - name: Build node packages run: | jlpm build - name: Install jupyterlab_widgets run: | cd python/jupyterlab_widgets pip install -vv -e . --no-deps - name: Install widgetsnbextension run: | cd python/widgetsnbextension pip install -vv -e . --no-deps - name: Install ipywidgets run: | cd python/ipywidgets pip install -vv . --no-deps - name: Install development extension run: | cd python/jupyterlab_widgets jupyter labextension develop . --overwrite - name: List labextensions run: | jupyter labextension list - name: Run JupyterLab browser check run: | python -m jupyterlab.browser_check ipywidgets-8.1.5/.github/workflows/devinstall.yml000066400000000000000000000020021466162644600222130ustar00rootroot00000000000000name: Run the dev-install script on: push: branches: main pull_request: branches: '*' jobs: devinstall: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v4 with: python-version: '3.8' architecture: 'x64' - name: Cache pip on Linux uses: actions/cache@v3 if: startsWith(runner.os, 'Linux') with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ matrix.python }}-${{ hashFiles('**/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip-${{ matrix.python }} - name: Install dependencies run: | python -m pip install notebook jupyterlab notebook~=6.0 jupyter_packaging~=0.10 - name: Run the dev-install script run: | ./dev-install.sh jupyter nbextension list jupyter labextension list python -m jupyterlab.browser_check ipywidgets-8.1.5/.github/workflows/lint.yml000066400000000000000000000010041466162644600210150ustar00rootroot00000000000000name: Lint on: [push, pull_request] jobs: lint: name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v4 with: python-version: '3.8' architecture: 'x64' - name: Install dependencies run: | python -m pip install jupyterlab - name: yarn install, integrity, lint run: | jlpm --immutable jlpm integrity jlpm lint:check ipywidgets-8.1.5/.github/workflows/lock.yml000066400000000000000000000006041466162644600210040ustar00rootroot00000000000000name: 'Lock Closed Threads' on: schedule: - cron: '0 0 * * *' jobs: lock: runs-on: ubuntu-latest steps: - uses: dessant/lock-threads@v2 with: github-token: ${{ github.token }} issue-lock-inactive-days: '90' issue-lock-labels: 'resolved-locked' pr-lock-inactive-days: '90' pr-lock-labels: 'resolved-locked' ipywidgets-8.1.5/.github/workflows/packaging.yml000066400000000000000000000075131466162644600220060ustar00rootroot00000000000000name: Packaging on: push: branches: - main pull_request: branches: '*' env: PIP_DISABLE_PIP_VERSION_CHECK: 1 defaults: run: shell: bash -l {0} jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Install Python uses: actions/setup-python@v4 with: python-version: '3.11' architecture: 'x64' - uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} restore-keys: | ${{ runner.os }}-pip- - name: Install dependencies run: | python -m pip install --upgrade pip wheel build jupyterlab - name: Build PyPI distributions for ipywidgets run: | mkdir -p dist/ cd python/ipywidgets pyproject-build . cp ./dist/* ../../dist - name: Install node dependencies run: | jlpm - name: Build JS run: | jlpm build - name: Build PyPI distributions for jupyterlab_widgets run: | cd python/jupyterlab_widgets pyproject-build . cp ./dist/* ../../dist - name: Build PyPI distributions for widgetsnbextension run: | cd python/widgetsnbextension pyproject-build . cp ./dist/* ../../dist - name: Build checksum file run: | cd dist sha256sum * | tee SHA256SUMS - name: Upload distributions uses: actions/upload-artifact@v3 with: name: dist ${{ github.run_number }} path: ./dist install: runs-on: ${{ matrix.os }}-latest needs: [build] strategy: fail-fast: false matrix: os: [ubuntu, windows] python: ['3.7', '3.10'] dist: ['ipywidgets*.tar.gz'] include: - python: '3.10' dist: 'jupyterlab_widgets*.tar.gz' os: 'ubuntu' - python: '3.10' dist: 'widgetsnbextension*.tar.gz' os: 'ubuntu' - python: '3.10' dist: 'ipywidgets*.whl' os: 'ubuntu' steps: - name: Install Python uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} architecture: 'x64' - name: Checkout # For the cache keys uses: actions/checkout@v3 - name: Get pip cache dir id: pip-cache run: | echo "::set-output name=dir::$(pip cache dir)" - name: pip cache uses: actions/cache@v3 with: path: ${{ steps.pip-cache.outputs.dir }} key: ${{ runner.os }}-pip-${{ hashFiles('**/setup.py') }} restore-keys: | ${{ runner.os }}-pip- - name: Install the prerequisites run: | python -m pip install pip - uses: actions/download-artifact@v3 with: name: dist ${{ github.run_number }} path: ./dist - name: Install the package run: | cd dist python -m pip install -vv ${{ matrix.dist }} - name: Validate environment run: | python -m pip freeze python -m pip check - name: Check the JupyterLab extension is installed if: matrix.dist != 'widgetsnbextension*.tar.gz' run: | python -m pip install jupyterlab~=3.0 jupyter labextension list jupyter labextension list 2>&1 | grep -ie "@jupyter-widgets/jupyterlab-manager.*enabled.*ok" - - name: Check the Classic Notebook extension is installed if: matrix.dist != 'jupyterlab_widgets*.tar.gz' run: | python -m pip install notebook~=6.0 jupyter nbextension list jupyter nbextension list 2>&1 | grep -ie "jupyter-js-widgets/extension.*enabled" - ipywidgets-8.1.5/.github/workflows/tests.yml000066400000000000000000000126571466162644600212310ustar00rootroot00000000000000name: Test on: [push, pull_request] jobs: docs: name: Documentation runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: 3.8 cache: 'pip' cache-dependency-path: | **/setup.cfg **/requirements*.txt - name: Install dependencies run: | sudo apt-get install -y pandoc python -m pip install --upgrade pip python -m pip install file://$PWD/python/ipywidgets#egg=ipywidgets python -m pip install -r ./docs/requirements.txt - name: Build docs run: | cd docs/source python -m sphinx -T -E -b html -d ../build/doctrees -D language=en . ../build/html js: name: JavaScript runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: 3.8 cache: 'pip' cache-dependency-path: | **/setup.cfg **/requirements*.txt - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install jupyterlab==4.0.0 - name: yarn install, build, test run: | jlpm --immutable jlpm build jlpm build:examples pushd packages/base jlpm test:unit:firefox:headless popd pushd packages/base-manager jlpm test:unit:firefox:headless popd pushd packages/controls jlpm test:unit:firefox:headless popd pushd packages/html-manager jlpm test:unit:firefox:headless popd pushd examples/web1 jlpm test:firefox:headless popd env: CI: true python: name: Python runs-on: ubuntu-latest strategy: max-parallel: 4 matrix: python-version: ['3.8', '3.9', '3.10', '3.11'] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} cache: 'pip' cache-dependency-path: | **/setup.cfg **/requirements*.txt - name: Install dependencies run: | python -m pip install --upgrade pip pip install file://$PWD/python/ipywidgets#egg=ipywidgets[test] - name: Test with pytest run: | pip install "pytest<8" cd python/ipywidgets pytest --cov=ipywidgets ipywidgets spec: name: Message Specification runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: 3.8 cache: 'pip' cache-dependency-path: | **/setup.cfg **/requirements*.txt - name: Install Python dependencies run: | python -m pip install --upgrade pip pip install jupyterlab file://$PWD/python/ipywidgets#egg=ipywidgets[test] - name: Install JS dependencies run: | jlpm - name: Compare spec with latest version run: | python ./packages/schema/generate-spec.py -f markdown spec.md jlpm prettier diff -u ./packages/schema/jupyterwidgetmodels.latest.md ./spec.md ui-test: name: Visual Regression runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' cache: 'pip' cache-dependency-path: | **/setup.cfg **/requirements*.txt - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install -U jupyterlab==4.0.0 jupyter-packaging~=0.10 - name: Build and Install ipywidgets run: | jlpm --immutable jlpm build - name: Build the extension run: | cd python/ipywidgets pip install . cd ../.. jlpm jlpm build cd python/jupyterlab_widgets pwd pip install -e . jupyter labextension develop . --overwrite jupyter labextension list - name: Install Test Dependencies run: | jlpm --immutable npx playwright install chromium working-directory: ui-tests - name: Execute integration tests shell: bash -l {0} working-directory: ui-tests run: | npx playwright test - name: Upload Playwright Test assets if: always() uses: actions/upload-artifact@v3 with: name: ipywidgets-test-assets path: | ui-tests/test-results - name: Upload Playwright Test report if: always() uses: actions/upload-artifact@v3 with: name: ipywidgets-test-report path: | ui-tests/playwright-report - name: Update snapshots if: failure() working-directory: ui-tests run: | jlpm test:update - name: Upload updated snapshots if: failure() uses: actions/upload-artifact@v3 with: name: ipywidgets-updated-snapshots path: ui-tests/tests ipywidgets-8.1.5/.gitignore000066400000000000000000000012141466162644600157220ustar00rootroot00000000000000MANIFEST build dist _build docs/man/*.gz docs/source/api/generated docs/source/.cache *.doit.db _contents node_modules *.py[co] __pycache__ *.egg-info *~ *.bak .ipynb_checkpoints .tox .DS_Store \#*# .#* .coverage .xunit.xml .tern-project npm-debug.log .pytest_cache .vscode/* !.vscode/extensions.json # Generated files python/widgetsnbextension/widgetsnbextension/static python/jupyterlab_widgets/labextension/ packages/controls/css/nouislider.css index.built.js index.built.js.map **/es5/ **/built **/lib/ temp/* *.tsbuildinfo ui-tests/test-results ui-tests/playwright-report **/lite/_output/ **/lite/.cache **/*.doit.* **/docs/typedoc/ .yarn ipywidgets-8.1.5/.lintstagedrc000066400000000000000000000001301466162644600164120ustar00rootroot00000000000000{ "**/*{.ts,.tsx,.js,.jsx,.css,.json}": [ "prettier --write", "git add" ] } ipywidgets-8.1.5/.mailmap000066400000000000000000000270111466162644600153560ustar00rootroot00000000000000A. J. Holyoake ajholyoake Aaron Culich Aaron Culich Aron Ahmadia ahmadia Benjamin Ragan-Kelley Benjamin Ragan-Kelley Min RK Benjamin Ragan-Kelley MinRK Barry Wark Barry Wark Ben Edwards Ben Edwards Bradley M. Froehle Bradley M. Froehle Bradley M. Froehle Bradley Froehle Brandon Parsons Brandon Parsons Brian E. Granger Brian Granger Brian E. Granger Brian Granger <> Brian E. Granger bgranger <> Brian E. Granger bgranger Charnpreet Singh charnpreetsingh Christoph Gohlke cgohlke Cyrille Rossant rossant Damián Avila damianavila Damián Avila damianavila Damon Allen damontallen Darren Dale darren.dale <> Darren Dale Darren Dale <> Dav Clark Dav Clark <> Dav Clark Dav Clark David Hirschfeld dhirschfeld David P. Sanders David P. Sanders David Warde-Farley David Warde-Farley <> Di Wang Di Doug Blank Doug Blank Doug Redden DougRzz Eugene Van den Bulke Eugene Van den Bulke Evan Patterson Evan Patterson Evan Patterson Evan Patterson Evan Patterson epatters Evan Patterson epatters Ernie French Ernie French Ernie French ernie french Ernie French ernop Fernando Perez Fernando Perez Fernando Perez Fernando Perez fperez <> Fernando Perez fptest <> Fernando Perez fptest1 <> Fernando Perez Fernando Perez Fernando Perez Fernando Perez <> Fernando Perez Fernando Perez Frank Murphy Frank Murphy Gabriel Becker gmbecker Gael Varoquaux gael.varoquaux <> Gael Varoquaux gvaroquaux Gael Varoquaux Gael Varoquaux <> Henry Hinnefeld hinnefe2 Ingolf Becker watercrossing Jake Vanderplas Jake Vanderplas Jakob Gager jakobgager Jakob Gager jakobgager Jakob Gager jakobgager Jason Grout Jason Grout Jason Gors jason gors Jason Gors jgors Jens Hedegaard Nielsen Jens Hedegaard Nielsen Jens Hedegaard Nielsen Jens H Nielsen Jens Hedegaard Nielsen Jens H. Nielsen Jez Ng Jez Ng Jonathan Frederic Jonathan Frederic Jonathan Frederic Jonathan Frederic Jonathan Frederic Jonathan Frederic Jonathan Frederic jon Jonathan Frederic U-Jon-PC\Jon Jonathan March Jonathan March Jonathan March jdmarch Jörgen Stenarson Jörgen Stenarson Jörgen Stenarson Jorgen Stenarson Jörgen Stenarson Jorgen Stenarson <> Jörgen Stenarson jstenar Jörgen Stenarson jstenar <> Jörgen Stenarson Jörgen Stenarson Juergen Hasch juhasch Juergen Hasch juhasch Julia Evans Julia Evans Kester Tong KesterTong Kiko Correoso kikocorreoso Kyle Kelley Kyle Kelley Kyle Kelley rgbkrk Laurent Dufréchou Laurent Dufréchou Laurent Dufréchou laurent dufrechou <> Laurent Dufréchou laurent.dufrechou <> Laurent Dufréchou Laurent Dufrechou <> Laurent Dufréchou laurent.dufrechou@gmail.com <> Laurent Dufréchou ldufrechou Lorena Pantano Lorena Luis Pedro Coelho Luis Pedro Coelho Luke Zoltan Kelley Luke Maarten Breddels maartenbreddels Madhumitha Natarajan Madhu94 Madhumitha Natarajan nmadhum Maksim Noy Max Noy Marc Molla marcmolla Martín Gaitán Martín Gaitán Matthias Bussonnier Matthias BUSSONNIER Matthias Bussonnier Bussonnier Matthias Matthias Bussonnier Matthias BUSSONNIER Matthias Bussonnier Matthias Bussonnier Michael Droettboom Michael Droettboom Nicholas Bollweg Nicholas Bollweg (Nick) Nick Fernandez Nicolas Fernandez Nicolas Rougier Nikolay Koldunov Nikolay Koldunov Omar Andrés Zapata Mesa Omar Andres Zapata Mesa Omar Andrés Zapata Mesa Omar Andres Zapata Mesa Pankaj Pandey Pankaj Pandey Pascal Schetelat pascal-schetelat Paul Ivanov Paul Ivanov Pauli Virtanen Pauli Virtanen <> Pauli Virtanen Pauli Virtanen Pierre Gerold Pierre Gerold Pietro Berkes Pietro Berkes Piti Ongmongkolkul piti118 Prabhu Ramachandran Prabhu Ramachandran <> Puneeth Chaganti Puneeth Chaganti Rick Teachey Ricyteach Robert Kern rkern <> Robert Kern Robert Kern Robert Kern Robert Kern Robert Kern Robert Kern <> Robert Marchman Robert Marchman Satrajit Ghosh Satrajit Ghosh Satrajit Ghosh Satrajit Ghosh Scott Sanderson Scott Sanderson smithj1 smithj1 smithj1 smithj1 Steven Johnson stevenJohnson Steven Silvester blink1073 S. Weber s8weber Stefan van der Walt Stefan van der Walt Silvia Vinyes Silvia Silvia Vinyes silviav12 Srinivas Sunkara ssunkara1 Sylvain Corlay Sylvain Corlay sylvain.corlay Ted Drain TD22057 Théophile Studer Théophile Studer Thomas Kluyver Thomas Thomas Spura Thomas Spura Timo Paulssen timo vds vds2212 vds vds Ville M. Vainio Ville M. Vainio ville Ville M. Vainio ville Ville M. Vainio vivainio <> Ville M. Vainio Ville M. Vainio Ville M. Vainio Ville M. Vainio Walter Doerwald walter.doerwald <> Walter Doerwald Walter Doerwald <> W. Trevor King W. Trevor King Yoval P. y-p ipywidgets-8.1.5/.npmrc000066400000000000000000000000251466162644600150510ustar00rootroot00000000000000engine-strict = true ipywidgets-8.1.5/.prettierrc000066400000000000000000000000311466162644600161120ustar00rootroot00000000000000{ "singleQuote": true }ipywidgets-8.1.5/.readthedocs.yaml000066400000000000000000000002771466162644600171710ustar00rootroot00000000000000version: 2 build: os: 'ubuntu-22.04' tools: python: 'mambaforge-4.10' python: install: - method: pip path: ./python/ipywidgets conda: environment: docs/environment.yml ipywidgets-8.1.5/.vscode/000077500000000000000000000000001466162644600152755ustar00rootroot00000000000000ipywidgets-8.1.5/.vscode/extensions.json000066400000000000000000000001161466162644600203650ustar00rootroot00000000000000{ "recommendations": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] } ipywidgets-8.1.5/.yarnrc.yml000066400000000000000000000013641466162644600160370ustar00rootroot00000000000000nodeLinker: node-modules # prettier-ignore packageExtensions: "@nrwl/devkit@^15": dependencies: nx: ^15 postcss-cssnext@^3.1.0: dependencies: caniuse-lite: ^1 source-map-loader@^4: dependencies: webpack: ^5 enableTelemetry: false httpTimeout: 60000 # these messages provide no actionable information, and make non-TTY output # almost unreadable, masking real dependency-related information # see: https://yarnpkg.com/advanced/error-codes logFilters: - code: YN0006 # SOFT_LINK_BUILD level: discard - code: YN0007 # MUST_BUILD level: discard - code: YN0008 # MUST_REBUILD level: discard - code: YN0013 # FETCH_NOT_CACHED level: discard - code: YN0019 # UNUSED_CACHE_ENTRY level: discard ipywidgets-8.1.5/CODE_OF_CONDUCT.md000066400000000000000000000002031466162644600165260ustar00rootroot00000000000000Please refer to [Project Jupyter's Code of Conduct](https://github.com/jupyter/governance/blob/master/conduct/code_of_conduct.md). ipywidgets-8.1.5/CONTRIBUTING.md000066400000000000000000000022231466162644600161640ustar00rootroot00000000000000# Contributing We appreciate contributions from the community. Click here to see the full [Guidelines](docs/source/contributing.md): - issues are managed by the `@meeseeksdev` bot - When opening an issue, make sure that it hasn't been solved - Search on Google or Github. - Include your system information ``` python -c "import IPython; print(IPython.sys_info())" ``` - **All work is submitted through pull requests (PRs)** - PRs are submitted as soon as there is code to be discussed --- # Check these resources: Now that we went through the basics, Here are more detailed documentation on areas of contribution: ## Installing [Developer install information](docs/source/dev_install.md) for installation steps. ## Releasing [Release procedures](docs/source/dev_release.md) ## Testing [Testing Contributions](docs/source/dev_testing.md) ## Documenting [Documentation Contributions](docs/source/dev_docs.md) --- # Good First Issues This is a link for issues that don't require deep knowledge of the project: Click here: [Good First Issues](https://github.com/jupyter-widgets/ipywidgets/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) ipywidgets-8.1.5/LICENSE000066400000000000000000000027511466162644600147460ustar00rootroot00000000000000Copyright (c) 2015 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. ipywidgets-8.1.5/README.md000066400000000000000000000234401466162644600152160ustar00rootroot00000000000000# ipywidgets: Interactive HTML Widgets | Purpose | Badges | | ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Latest (`main`: future 8.0)** | [![Test Status](https://github.com/jupyter-widgets/ipywidgets/actions/workflows/tests.yml/badge.svg?query=branch%3Amain)](https://github.com/jupyter-widgets/ipywidgets/actions?query=branch%3Amain) [![Documentation Status: latest](https://img.shields.io/readthedocs/ipywidgets?logo=read-the-docs)](https://ipywidgets.readthedocs.io/en/latest/?badge=latest) [![Binder:main](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jupyter-widgets/ipywidgets/main?urlpath=lab/tree/docs%2Fsource%2Fexamples) | | **Stable** | [![Version](https://img.shields.io/pypi/v/ipywidgets.svg?logo=pypi)](https://pypi.python.org/pypi/ipywidgets) [![Conda Version](https://img.shields.io/conda/vn/conda-forge/ipywidgets.svg?logo=conda-forge)](https://anaconda.org/conda-forge/ipywidgets) [![Documentation Status](https://img.shields.io/readthedocs/ipywidgets?logo=read-the-docs)](https://ipywidgets.readthedocs.io/en/stable/?badge=stable) [![Binder:7.x](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/jupyter-widgets/ipywidgets/7.x?urlpath=lab/tree/docs%2Fsource%2Fexamples) | | **Communication** | [![Join the chat at https://gitter.im/ipython/ipywidgets](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/jupyter-widgets/Lobby) [![Discourse](https://img.shields.io/badge/help_forum-discourse-blue?logo=discourse)](https://discourse.jupyter.org/c/widgets/46) | | | | **ipywidgets**, also known as jupyter-widgets or simply widgets, are [interactive HTML widgets](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) for Jupyter notebooks and the IPython kernel. Notebooks come alive when interactive widgets are used. Users gain control of their data and can visualize changes in the data. Learning becomes an immersive, fun experience. Researchers can easily see how changing inputs to a model impact the results. We hope you will add ipywidgets to your notebooks, and we're here to help you get started. The ipywidgets package is under the [Jupyter-Widgets](https://github.com/jupyter-widgets) [software subproject](https://jupyter.org/governance/software_subprojects.html). ## Core Interactive Widgets The fundamental widgets provided by this library are called core interactive widgets. A [demonstration notebook](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) provides an overview of the core interactive widgets, including: - sliders - progress bars - text boxes - toggle buttons and checkboxes - display areas - and more ## Jupyter Interactive Widgets as a Framework Besides the widgets already provided with the library, the framework can be extended with the development of **custom widget libraries**. For detailed information, please refer to the [ipywidgets documentation](https://ipywidgets.readthedocs.io/en/latest/). ### Cookiecutter template for custom widget development A template project for building custom widgets is available as a [**cookiecutter**](https://github.com/jupyter-widgets/widget-ts-cookiecutter). This cookiecutter project helps custom widget authors get started with the packaging and the distribution of their custom Jupyter interactive widgets. The cookiecutter produces a project for a Jupyter interactive widget library following the current best practices for using interactive widgets. An implementation for a placeholder "Hello World" widget is provided as an example. Popular widget libraries such as [bqplot](https://github.com/bqplot/bqplot), [pythreejs](https://github.com/jupyter-widgets/pythreejs) and [ipyleaflet](https://github.com/jupyter-widgets/ipyleaflet) follow exactly the same template and directory structure. They serve as more advanced examples of usage of the Jupyter widget infrastructure. ### Popular custom widget examples Examples of custom widget libraries built upon ipywidgets are - [bqplot](https://github.com/bqplot/bqplot) a 2d data visualization library enabling custom user interactions. - [pythreejs](https://github.com/jupyter-widgets/pythreejs) a Jupyter - Three.js wrapper, bringing Three.js to the notebook. - [ipyleaflet](https://github.com/jupyter-widgets/ipyleaflet) a leaflet widget for Jupyter. ## Install The stable version of ipywidgets can be installed with pip or conda. With pip: ```sh pip install ipywidgets ``` With conda: ```sh conda install -c conda-forge ipywidgets ``` ### Developer install from source Installing from source is more complicated and requires a developer install, see the detailed [developer install](docs/source/dev_install.md) instructions. If you want to install ipywidgets from source, **you will need the [yarn](https://yarnpkg.com/) package manager version 3 or later**. To install the latest `main` version from the root directory of the source code, run `dev-install.sh`. To only build the Python package enter `pip install -e .`. ## Usage See the [examples](docs/source/examples.md) section of the documentation. The widgets are being used in a variety of ways; some uses can be seen in these notebooks: [Demo notebook of interactive widgets](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) ## Change log [Change log](docs/source/changelog.md) ### Version Compatibility with Front-End Clients Refer to change log for more detail. | ipywidgets | JupyterLab | [Classic Notebook](https://github.com/jupyter/notebook) | [nbclassic](https://github.com/jupyterlab/nbclassic) | | ---------- | :--------: | :-----------------------------------------------------: | :--------------------------------------------------: | | `main` | | - | TBD | | `7.6.3` | | | 0.2.6 | | **Legacy** | | | | | `6.x` | | | - | | `5.x` | | 4.2 | - | | `4.1.x` | | 4.1 | - | | `4.0.x` | | 4.0 | - | ## Contributing to ipywidgets [Developer information](CONTRIBUTING.md) ## License We use a shared copyright model that enables all contributors to maintain the copyright on their contributions. See the [LICENSE](LICENSE) file in this repository for details. ## Project Jupyter resources - [Project Jupyter website](https://jupyter.org) - [Online Demo at try.jupyter.org](https://try.jupyter.org) - [Documentation for Project Jupyter](https://jupyter.readthedocs.io/en/latest/index.html) [[PDF](https://media.readthedocs.org/pdf/jupyter/latest/jupyter.pdf)] - [![Discourse](https://img.shields.io/badge/help_forum-discourse-blue?logo=discourse)](https://discourse.jupyter.org/) [![Google Group](https://img.shields.io/badge/-Google%20Group-lightgrey.svg)](https://groups.google.com/forum/#!forum/jupyter) ## [Weekly Team Meetings](https://github.com/jupyter-widgets/team-compass/issues/1) Developer Meetings take place on [zoom](https://zoom.us/my/jovyan?pwd=c0JZTHlNdS9Sek9vdzR3aTJ4SzFTQT09), on Tuesdays at 9:30AM Pacific Time ([your time](https://www.thetimezoneconverter.com/?t=9%3A30%20am&tz=San%20Francisco)). Minutes are taken at [Hackmd.io](https://hackmd.io/5XWHyOoLTRqyXzEHsVmxXg). ipywidgets-8.1.5/dev-install.sh000077500000000000000000000033271466162644600165220ustar00rootroot00000000000000#!/usr/bin/env bash # For a clean conda environment please read docs/source/dev_install.md set -x echo -n "Checking pip... " pip --version if [ $? -ne 0 ]; then echo "'pip --version' failed, therefore pip is not installed. In order to perform a developer install of ipywidgets you must have pip installed on your machine! See https://packaging.python.org/installing/ for installation instructions." exit 1 fi echo -n "Checking JupyterLab (assuming JupyterLab >=4)... " jupyter lab --version 2>/dev/null if [ $? -ne 0 ]; then echo "no, skipping installation of widgets for jupyterlab" skip_jupyter_lab=yes fi # All following commands must run successfully set -e nbExtFlags="--sys-prefix $1" echo -n "Installing and building all yarn packages" jlpm jlpm build echo -n "widgetsnbextension" pip install -v -e ./python/widgetsnbextension if [[ "$OSTYPE" == "msys" ]]; then jupyter nbextension install --overwrite --py $nbExtFlags widgetsnbextension || true jupyter nbclassic-extension install --overwrite --py $nbExtFlags widgetsnbextension || true else jupyter nbextension install --overwrite --py --symlink $nbExtFlags widgetsnbextension || true jupyter nbclassic-extension install --overwrite --py --symlink $nbExtFlags widgetsnbextension || true fi jupyter nbextension enable --py $nbExtFlags widgetsnbextension || true jupyter nbclassic-extension enable --py $nbExtFlags widgetsnbextension || true echo -n "ipywidgets" pip install -v -e "./python/ipywidgets[test]" if test "$skip_jupyter_lab" != yes; then echo -n "jupyterlab_ipywidgets" pip install jupyter_packaging pip install -ve ./python/jupyterlab_widgets jupyter labextension develop ./python/jupyterlab_widgets --overwrite fi ipywidgets-8.1.5/docs/000077500000000000000000000000001466162644600146645ustar00rootroot00000000000000ipywidgets-8.1.5/docs/Readme.md000066400000000000000000000012611466162644600164030ustar00rootroot00000000000000# Building ipywidgets documentation To build the ipywidgets documentation: 1. Install the development version of ipywidgets with the `dev-install.sh` script in the repo root directory. 2. Install the Python packages for building documentation with either mamba or conda: ```sh conda env update --file docs/environment.yml ``` or with `pip`: ```sh python -m pip install -r docs/requirements.txt # Also install pandoc separately ``` 3. Build the HTML docs with sphinx: ```sh cd docs/source python -m sphinx -T -E -b html -d ../build/doctrees -D language=en . ../build/html ``` 4. Open the documentation from the build directory: `docs/build/html` ipywidgets-8.1.5/docs/environment.yml000066400000000000000000000012271466162644600177550ustar00rootroot00000000000000name: ipywidgets_docs channels: - conda-forge - nodefaults dependencies: - python >=3.11,<3.12 # build - python-build - pip - packaging - jupyter-packaging - jupyterlab >=4,<5 - nodejs >=18,<19 # dependencies - jupyter_client # docs - docutils >=0.19 - jupyterlab-myst - myst-nb >=0.17,<0.18 - pandoc - pydata-sphinx-theme - sphinx >=5,<6 - sphinx-autobuild - sphinx-autodoc-typehints - sphinx-copybutton - sphinxext-rediraffe # demo - bqplot - ipykernel - ipyleaflet - jupyterlite-core >=0.3.0,<0.4.0 - jupyterlite-pyodide-kernel - matplotlib-base - numpy - scikit-image - scikit-learn - sympy ipywidgets-8.1.5/docs/lite/000077500000000000000000000000001466162644600156215ustar00rootroot00000000000000ipywidgets-8.1.5/docs/lite/jupyter-lite.json000066400000000000000000000002161466162644600211500ustar00rootroot00000000000000{ "jupyter-lite-schema-version": 0, "jupyter-config-data": { "disabledExtensions": ["@jupyterlite/javascript-kernel-extension"] } } ipywidgets-8.1.5/docs/lite/jupyter_lite_config.json000066400000000000000000000006071466162644600225630ustar00rootroot00000000000000{ "LiteBuildConfig": { "extra_ignore_contents": [ "Layout Example\\.ipynb", "Layout Templates\\.ipynb", "Variable Inspector\\.ipynb" ], "contents": ["../source/examples"] }, "PipliteAddon": { "piplite_urls": [ "../../python/ipywidgets/dist", "../../python/widgetsnbextension/dist", "../../python/jupyterlab_widgets/dist" ] } } ipywidgets-8.1.5/docs/requirements.txt000066400000000000000000000006041466162644600201500ustar00rootroot00000000000000bqplot build docutils >=0.19 ipykernel ipyleaflet jupyter-client jupyter-packaging jupyterlab >=4 jupyterlite-core >=0.3.0,<0.4.0 jupyterlite-pyodide-kernel >=0.3.0,<0.4.0 matplotlib myst-nb >=0.17,<0.18 numpy packaging pkginfo pydata-sphinx-theme recommonmark scikit-image scikit-learn sphinx >=1.4.6 sphinx-autobuild sphinx-autodoc-typehints sphinx-copybutton sphinxext-rediraffe sympy ipywidgets-8.1.5/docs/source/000077500000000000000000000000001466162644600161645ustar00rootroot00000000000000ipywidgets-8.1.5/docs/source/_static/000077500000000000000000000000001466162644600176125ustar00rootroot00000000000000ipywidgets-8.1.5/docs/source/_static/theme.css000066400000000000000000000007601466162644600214310ustar00rootroot00000000000000/* index */ table.indextable tr.cap { background-color: var(--pst-color-on-background) !important; } /* demo */ #demo-sidebar { margin: 0; } #demo-sidebar .demo-app { display: inline; display: flex; flex-direction: row; align-items: baseline; flex-wrap: wrap; margin: 0.75rem 0.25rem 0 0.25rem; } .demo-app > * { flex: 1 auto; white-space: nowrap; } #demo-sidebar .admonition-title::after { display: none; } #demo-sidebar .admonition-title { padding-left: 0.75rem; } ipywidgets-8.1.5/docs/source/_templates/000077500000000000000000000000001466162644600203215ustar00rootroot00000000000000ipywidgets-8.1.5/docs/source/_templates/demo.html000066400000000000000000000024031466162644600221320ustar00rootroot00000000000000

Try Jupyter Widgets

Try Now
ipywidgets-8.1.5/docs/source/_templates/sidebar-nav-bs-index.html000066400000000000000000000010621466162644600251100ustar00rootroot00000000000000 ipywidgets-8.1.5/docs/source/changelog.md000066400000000000000000001627411466162644600204500ustar00rootroot00000000000000# ipywidgets Changelog This is a summary of changes in ipywidgets releases. For more detailed information, see the issues and pull requests for the appropriate milestone on [GitHub](https://github.com/jupyter-widgets/ipywidgets). ## 8.0.6 Highlights include: - Fix: revert removing ipykernel dependency [#3749](https://github.com/jupyter-widgets/ipywidgets/pull/3749) - Fix: structuredClone broke default serializer that depended on JSON/toJSON [#3738](https://github.com/jupyter-widgets/ipywidgets/pull/3738) - Fix: comm/ipykernel/manager runtime issues: [#3740](https://github.com/jupyter-widgets/ipywidgets/pull/3740), [#3737](https://github.com/jupyter-widgets/ipywidgets/pull/3737) ## 8.0.5 Highlights include: - Fix: propertly typed Comm interface [#3722](https://github.com/jupyter-widgets/ipywidgets/pull/3722) - Fix: support the comm package [#3533](https://github.com/jupyter-widgets/ipywidgets/pull/3533) - Fix: use of structuredClone allows for binary traits out of the box [#3689](https://github.com/jupyter-widgets/ipywidgets/pull/3689) - Fix: combobox update issue [#3681](https://github.com/jupyter-widgets/ipywidgets/issues/3681) - Fix: add grey as valid color [#3671](https://github.com/jupyter-widgets/ipywidgets/pull/3671) - Fix: deprecation warning when using interact [#3669](https://github.com/jupyter-widgets/ipywidgets/issues/3669) ## 8.0.4 Highlights include: - Fix: slider change event issue with tapping: [#3597](https://github.com/jupyter-widgets/ipywidgets/pull/3597), [#3617](https://github.com/jupyter-widgets/ipywidgets/pull/3617) - Fix: unintentional deprecation warnings: [#3648](https://github.com/jupyter-widgets/ipywidgets/pull/3648), [#3650](https://github.com/jupyter-widgets/ipywidgets/pull/3650) - Fix: registry state lookup failed, making is impossible to create widgets from the frontend: [#3653](https://github.com/jupyter-widgets/ipywidgets/pull/3653) ## 8.0.3 --- Highlights include: - Fix: be backwards compatibel with 7.x, where we re-instroduced `.widget` and `.widget_types` [#3567](https://github.com/jupyter-widgets/ipywidgets/pull/3567) - Fix: be backwards compatibel with 7.x, revert hold_sync during set_state [#3642](https://github.com/jupyter-widgets/ipywidgets/pull/3642) ## [8.0](https://github.com/jupyter-widgets/ipywidgets/releases/tag/8.0.0) To see the full list of pull requests and issues, see the [8.0 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/30?closed=1) on GitHub, or the [full list of changes since 7.x](https://github.com/jupyter-widgets/ipywidgets/compare/7.x...8.0.0). See the [user migration guide](./user_migration_guides.md) for suggestions about migrating your code that uses ipywidgets to 8.0. If you author a custom widget, please see the [custom widget migration guide](./migration_guides.md) for suggestions about migrating your widget to support ipywidgets 8. ### Users Here are some highlights of user-visible changes in ipywidgets 8.0. #### Date and time pickers In addition to the existing DatePicker widget, we now have new DatetimePicker and TimePicker widgets. ([#2715](https://github.com/jupyter-widgets/ipywidgets/pull/2715)) ```python from ipywidgets import VBox, TimePicker, DatetimePicker VBox([ TimePicker(description='Time'), DatetimePicker(description='Date/Time') ]) ``` #### Tags input widget The new TagsInput widget provides an easy way to collect and manage tags in a widget. You can drag and drop tags to reorder them, limit them to a set of allowed values, or even prevent making duplicate tags. ([#2591](https://github.com/jupyter-widgets/ipywidgets/pull/2591), [#3272](https://github.com/jupyter-widgets/ipywidgets/pull/3272)) ```python from ipywidgets import TagsInput TagsInput( value=['pizza', 'fries'], allowed_tags=['pizza', 'fries', 'tomatoes', 'steak'], allow_duplicates=False ) ``` Similarly, the new ColorsInput widget provides a way to select colors as tags ```python from ipywidgets import ColorsInput ColorsInput( value=['red', '#2f6d30'], # allowed_tags=['red', 'blue', 'green'], # allow_duplicates=False ) ``` #### Stack widget The new Stack container widget shows only the selected child widget, while other child widgets remain hidden. This can be useful if you want to have a area that displays different widgets depending on some other interaction. ```python from ipywidgets import Stack, Button, IntSlider, Dropdown, VBox, link s = Stack([Button(description='Click here'), IntSlider()], selected_index=0) d = Dropdown(options=['button', 'slider']) link((d, 'index'), (s, 'selected_index')) VBox([d, s]) ``` #### File upload widget The file upload widget has been overhauled to handle multiple files in a more useful format: - The `.value` attribute is now a list of dictionaries, rather than a dictionary mapping the uploaded name to the content. - The contents of each uploaded file is a [memory view](https://docs.python.org/3/library/stdtypes.html#memory-views) in the `.content` key, e.g., `uploader.value[0].content`. - The `.data` attribute has been removed. - The `.metadata` attribute has been removed. See the [user migration guide](./user_migration_guides.md#FileUpload) for details on how to migrate your code. ([#2767](https://github.com/jupyter-widgets/ipywidgets/pull/2767), [#2724](https://github.com/jupyter-widgets/ipywidgets/pull/2724), [#2666](https://github.com/jupyter-widgets/ipywidgets/pull/2666), [#2480](https://github.com/jupyter-widgets/ipywidgets/issues/2480)) #### More styling options Many style and layout options have been added to core widgets: - Tooltips are now supported for many core widgets, rather than just a few description tooltips ([#2680](https://github.com/jupyter-widgets/ipywidgets/pull/2680)) ```python from ipywidgets import Button Button(description="Click me", tooltip='An action') ``` - Borders can be styled independently with the layout's `border_top`, `border_right`, `border_bottom`, `border_left` attributes ([#2757](https://github.com/jupyter-widgets/ipywidgets/pull/2757), [#3269](https://github.com/jupyter-widgets/ipywidgets/pull/3269)) ```python from ipywidgets import Button Button(description="Click me", layout={'border_bottom': '3px solid blue'}) ``` - Descriptions are now plain text by default for security, but you can set them to allow HTML with the `description_allow_html` attribute (HTML content is still sanitized for security). ([#2785](https://github.com/jupyter-widgets/ipywidgets/pull/2785)) ```python from ipywidgets import Text Text(description="Name", description_allow_html=True) ``` - Many other styling attributes can be set on core widgets, such as font family, size, style, weight, text color, and text decoration. See the table in the documentation for a reference. ([#2728](https://github.com/jupyter-widgets/ipywidgets/pull/2728)) - The SelectionSlider now has a `handle_color` style attribute ([#3142](https://github.com/jupyter-widgets/ipywidgets/pull/3142)) - To control keyboard navigation, widgets can be set to be tabbable or not (i.e., that the tab key will traverse to the widget) ([#2640](https://github.com/jupyter-widgets/ipywidgets/pull/2640)) ### Selection container titles The Accordion, Tab, and Stack widgets now have a `.titles` attribute that you can use to get and set titles from the constructor or as an attribute. ([#2746](https://github.com/jupyter-widgets/ipywidgets/pull/2746), [#3296](https://github.com/jupyter-widgets/ipywidgets/pull/3296), [#3477](https://github.com/jupyter-widgets/ipywidgets/pull/3477)) ```python from ipywidgets import Tab, IntSlider, Text Tab([IntSlider(), Text()], titles=('Slider', 'Text')) ``` #### Slider implementation The slider implementation in the core widgets now uses [nouislider](https://refreshless.com/nouislider/). This enables us to fix long-standing bugs and introduce new features, like dragging the range in a RangeSlider. ([#2712](https://github.com/jupyter-widgets/ipywidgets/pull/2712), [#630](https://github.com/jupyter-widgets/ipywidgets/issues/630), [#3216](https://github.com/jupyter-widgets/ipywidgets/pull/3216), [#2834](https://github.com/jupyter-widgets/ipywidgets/pull/2834)) #### Collaboration By default, ipywidgets 8 enables a collaboration mode, where widget updates from one frontend are reflected back to other frontends, enabling a consistent state between multiple users and fixing synchronization between the kernel and frontend. You may want to disable these update echo messages if they are using too much bandwidth or causing slower interactivity. To disable echo update messages across ipywidgets, set the environment variable `JUPYTER_WIDGETS_ECHO` to `0`. For widget authors, to opt a specific attribute of custom widget out of echo updates (for example, if the attribute contains a lot of data that does not need to be synchronized), tag the attribute with `echo_update=False` metadata (we do this in core for the FileUpload widget's `data` attribute). ([#3195](https://github.com/jupyter-widgets/ipywidgets/pull/3195), [#3343](https://github.com/jupyter-widgets/ipywidgets/pull/3343), [#3394](https://github.com/jupyter-widgets/ipywidgets/pull/3394), [#3407](https://github.com/jupyter-widgets/ipywidgets/pull/3407)) #### CDN for html manager We have made it easier to load widgets from content delivery networks. - The default CDN is changed from unpkg to jsDelivr ([#3121](https://github.com/jupyter-widgets/ipywidgets/pull/3121), [#1627](https://github.com/jupyter-widgets/ipywidgets/issues/1627)) - You can use the `data-jupyter-widgets-cdn-only` attribute to load modules only from CDN ([#2792](https://github.com/jupyter-widgets/ipywidgets/pull/2792), [#2786](https://github.com/jupyter-widgets/ipywidgets/issues/2786)) - We have updated the webpack public path settings so the HTMLManager and the Jupyter Notebook extensions pull assets from wherever they are loaded, rather than only from CDN. If you author a custom widget, we highly encourage you to apply similar changes to your widget by adapting the changes at https://github.com/jupyter-widgets/widget-cookiecutter/pull/103/files. [#3464](https://github.com/jupyter-widgets/ipywidgets/pull/3464), [#3508](https://github.com/jupyter-widgets/ipywidgets/pull/3508) #### Other changes Here is a short list of some of the other changes in ipywidgets 8.0. - Add a cookiecutter-based tutorial to build a custom widget ([#2919](https://github.com/jupyter-widgets/ipywidgets/pull/2919)) - Change media widgets to use memory views. ([#2723](https://github.com/jupyter-widgets/ipywidgets/pull/2723)) - Upgrade to FontAwesome 5 in html-manager ([#2713](https://github.com/jupyter-widgets/ipywidgets/pull/2713)) - Play widget now toggles between play and pause button as needed ([#2703](https://github.com/jupyter-widgets/ipywidgets/pull/2703), [#2671](https://github.com/jupyter-widgets/ipywidgets/issues/2671)) - Drop support for mapping types as selection options ([#2679](https://github.com/jupyter-widgets/ipywidgets/pull/2679), [#1958](https://github.com/jupyter-widgets/ipywidgets/issues/1958)) - Focus or blur a widget. ([#2664](https://github.com/jupyter-widgets/ipywidgets/pull/2664), [#2692](https://github.com/jupyter-widgets/ipywidgets/pull/2692), [#2691](https://github.com/jupyter-widgets/ipywidgets/pull/2691), [#2690](https://github.com/jupyter-widgets/ipywidgets/pull/2690)) - Drop notebook dependency from widgetsnbextension ([#2590](https://github.com/jupyter-widgets/ipywidgets/pull/2590)) - Cast 'value' in range sliders to a tuple ([#2441](https://github.com/jupyter-widgets/ipywidgets/pull/2441)) - Play widget: expose playing and repeat ([#2283](https://github.com/jupyter-widgets/ipywidgets/pull/2283), [#1897](https://github.com/jupyter-widgets/ipywidgets/issues/1897)) - Fix debouncing and throttling code ([#3060](https://github.com/jupyter-widgets/ipywidgets/pull/3060)) - Fix regression on spinning icons ([#2685](https://github.com/jupyter-widgets/ipywidgets/pull/2685), [#2477](https://github.com/jupyter-widgets/ipywidgets/issues/2477)) - Fix selection container default index ([#1823](https://github.com/jupyter-widgets/ipywidgets/pull/1823)) - Remove deprecated overflow properties ([#2688](https://github.com/jupyter-widgets/ipywidgets/pull/2688)) - Select: Do not force a selection if there is currently no selection and the options list changes ([#3284](https://github.com/jupyter-widgets/ipywidgets/pull/3284)) - Add support for localization to the lab extension ([#3286](https://github.com/jupyter-widgets/ipywidgets/pull/3286)) - Drop support for Python 2.7, 3.4, and 3.5 ([#2558](https://github.com/jupyter-widgets/ipywidgets/pull/2558), [#2655](https://github.com/jupyter-widgets/ipywidgets/pull/2655), [#3131](https://github.com/jupyter-widgets/ipywidgets/pull/3131), [#3120](https://github.com/jupyter-widgets/ipywidgets/pull/3120)) - Fix character escapes in combobox options ([#2972](https://github.com/jupyter-widgets/ipywidgets/pull/2972)) - Modify outputs to use a comm if IPython is not available ([#2954](https://github.com/jupyter-widgets/ipywidgets/pull/2954)) - Bugfix/parameters in the from_file method to be passed along in the media class ([#3074](https://github.com/jupyter-widgets/ipywidgets/pull/3074)) - Widgetsnbextension: throw error on failure to render ([#3280](https://github.com/jupyter-widgets/ipywidgets/pull/3280)) - Fix memory leak from Image widget not releasing object urls ([#3171](https://github.com/jupyter-widgets/ipywidgets/pull/3171), [#3170](https://github.com/jupyter-widgets/ipywidgets/pull/3170)) - ErrorWidget as fallback when widgets models or views fail - Following up ([#3304](https://github.com/jupyter-widgets/ipywidgets/pull/3304)) - Fix matplotlib plots in interact ([#3277](https://github.com/jupyter-widgets/ipywidgets/pull/3277)) - Fix selection equality checking ([#2897](https://github.com/jupyter-widgets/ipywidgets/pull/2897)) - Remove the `on_displayed` Python callback mechanism ([#2021](https://github.com/jupyter-widgets/ipywidgets/pull/2021)) ### Developers To see an overview of the changes to the core widget model specification, see [#3455](https://github.com/jupyter-widgets/ipywidgets/issues/3455). #### Python - `Widget.widgets` and `Widget.widget_types` are now private variables ([#3122](https://github.com/jupyter-widgets/ipywidgets/pull/3122), [#3173](https://github.com/jupyter-widgets/ipywidgets/pull/3173)) - Generate the widget data spec as JSON ([#2193](https://github.com/jupyter-widgets/ipywidgets/pull/2193)) - Use `_repr_mimebundle_` and require ipython 6.1 or later. ([#2021](https://github.com/jupyter-widgets/ipywidgets/pull/2021), [#1811](https://github.com/jupyter-widgets/ipywidgets/issues/1811)) - Hold sync during `set_state` + fix selection widgets flakiness ([#3271](https://github.com/jupyter-widgets/ipywidgets/pull/3271)) - Remove deprecated `handle_kernel` alias ([#2694](https://github.com/jupyter-widgets/ipywidgets/pull/2694)) - Removed deprecated signature of the `register` decorator ([#2695](https://github.com/jupyter-widgets/ipywidgets/pull/2695)) #### Javascript - Fix CSS variable names to match JupyterLab names ([#2801](https://github.com/jupyter-widgets/ipywidgets/pull/2801), [#2062](https://github.com/jupyter-widgets/ipywidgets/issues/2062)) - Delete `display_model` and `display_view` ([#2752](https://github.com/jupyter-widgets/ipywidgets/pull/2752), [#2751](https://github.com/jupyter-widgets/ipywidgets/issues/2751)) - Drop underscore usage ([#2742](https://github.com/jupyter-widgets/ipywidgets/pull/2742)) - Upgrade to es2017 javascript ([#2725](https://github.com/jupyter-widgets/ipywidgets/pull/2725)) - Split base manager into separate packages ([#2710](https://github.com/jupyter-widgets/ipywidgets/pull/2710), [#2561](https://github.com/jupyter-widgets/ipywidgets/issues/2561)) - Change Phosphor to Lumino ([#2681](https://github.com/jupyter-widgets/ipywidgets/pull/2681), [#3267](https://github.com/jupyter-widgets/ipywidgets/pull/3267)) - Widgetmanagerbase: improve create_view return type ([#2662](https://github.com/jupyter-widgets/ipywidgets/pull/2662)) - Refactor the JupyterLab widget manager so it can be reused ([#2532](https://github.com/jupyter-widgets/ipywidgets/pull/2532)) - Make more of lab manager dependencies optional ([#2528](https://github.com/jupyter-widgets/ipywidgets/pull/2528)) - Remove class `jupyter-widgets` from `jp-outputarea-output` node ([#2500](https://github.com/jupyter-widgets/ipywidgets/pull/2500)) - Rename `pWidget` to `luminoWidget` and deprecate `pWidget` ([#3118](https://github.com/jupyter-widgets/ipywidgets/pull/3118), [#3141](https://github.com/jupyter-widgets/ipywidgets/pull/3141), [#3358](https://github.com/jupyter-widgets/ipywidgets/pull/3358),) - Add `layout`, `style`, and `shown` events ([#3300](https://github.com/jupyter-widgets/ipywidgets/pull/3300)) - Implement `jupyter.widget.control` comm channel ([#3313](https://github.com/jupyter-widgets/ipywidgets/pull/3313)) - Update to TypeScript 4.3 ([#3162](https://github.com/jupyter-widgets/ipywidgets/pull/3162)) - Add event listener for resize events ([#3124](https://github.com/jupyter-widgets/ipywidgets/pull/3124)) - Remove `process.cwd` polyfill ([#3315](https://github.com/jupyter-widgets/ipywidgets/pull/3315)) - Make sure buffer is a DataView ([#3127](https://github.com/jupyter-widgets/ipywidgets/pull/3127)) - Deprecate the overly broad CSS class `widget` and introduce a similar `jupyter-widget` CSS class ([#3146](https://github.com/jupyter-widgets/ipywidgets/pull/3146)) - Fetch the full widget state via a control Comm ([#3021](https://github.com/jupyter-widgets/ipywidgets/pull/3021)) - Export LabWidgetManager and KernelWidgetManager ([#3166](https://github.com/jupyter-widgets/ipywidgets/pull/3166)) - More helpful semver range message ([#3185](https://github.com/jupyter-widgets/ipywidgets/pull/3185)) - Make the base widget manager `.get_model()` method always return a Promise, which is rejected if the requested model is not registered. To test if a model is registered, use the new `.has_model()` method ([#3389](https://github.com/jupyter-widgets/ipywidgets/pull/3389)) ### Documentation improvements - Documentation overhaul ([#3104](https://github.com/jupyter-widgets/ipywidgets/pull/3104), [#3096](https://github.com/jupyter-widgets/ipywidgets/issues/3096), [#3099](https://github.com/jupyter-widgets/ipywidgets/pull/3099), [#3076](https://github.com/jupyter-widgets/ipywidgets/issues/3076), [#2824](https://github.com/jupyter-widgets/ipywidgets/pull/2824), [#3246](https://github.com/jupyter-widgets/ipywidgets/pull/3246), [#3243](https://github.com/jupyter-widgets/ipywidgets/pull/3243), [#3103](https://github.com/jupyter-widgets/ipywidgets/pull/3103), [#3165](https://github.com/jupyter-widgets/ipywidgets/pull/3165), [#3283](https://github.com/jupyter-widgets/ipywidgets/pull/3283), [#2927](https://github.com/jupyter-widgets/ipywidgets/pull/2927), [#3062](https://github.com/jupyter-widgets/ipywidgets/pull/3062), [#3129](https://github.com/jupyter-widgets/ipywidgets/pull/3129), [#3130](https://github.com/jupyter-widgets/ipywidgets/pull/3130), [#3155](https://github.com/jupyter-widgets/ipywidgets/pull/3155), ) - Remove step parameter from widget list notebook ([#3106](https://github.com/jupyter-widgets/ipywidgets/pull/3106)) - Remove extra requirements from doc to fix RTD build ([#3098](https://github.com/jupyter-widgets/ipywidgets/pull/3098)) - Align doc requirements for 7.x branch with master ([#3094](https://github.com/jupyter-widgets/ipywidgets/pull/3094)) - Remove defunct deep-links from install in README ([#3225](https://github.com/jupyter-widgets/ipywidgets/pull/3225)) - Fix documentation about embedding widget in HTML ([#3224](https://github.com/jupyter-widgets/ipywidgets/pull/3224)) - Fix example web3 missing process during runtime ([#3223](https://github.com/jupyter-widgets/ipywidgets/pull/3223)) - Complete docstring for `interactive`. ([#3169](https://github.com/jupyter-widgets/ipywidgets/pull/3169)) - Unpin ipykernel<6 for the docs ([#3168](https://github.com/jupyter-widgets/ipywidgets/pull/3168)) - Checking milestone and generating changelog ([#3125](https://github.com/jupyter-widgets/ipywidgets/pull/3125)) - Change graph example to receive a tuple instead of a dict ([#3117](https://github.com/jupyter-widgets/ipywidgets/pull/3117)) - Fix debouncing and throttling code ([#3060](https://github.com/jupyter-widgets/ipywidgets/pull/3060)) - Variable Inspector example used a wrong callback argument signature ([#3302](https://github.com/jupyter-widgets/ipywidgets/pull/3302)) ### Repo maintenance - Visual regression testing using Galata ([#3172](https://github.com/jupyter-widgets/ipywidgets/pull/3172), [#3279](https://github.com/jupyter-widgets/ipywidgets/pull/3279)) - Reorganize packages in the monorepo, moving the python packages to the `python` folder ([#3301](https://github.com/jupyter-widgets/ipywidgets/pull/3301), [#3316](https://github.com/jupyter-widgets/ipywidgets/pull/3316)) - Use new custom widget label on issue template ([#3176](https://github.com/jupyter-widgets/ipywidgets/pull/3176)) - Create and upload reference screenshots on CI failure ([#3227](https://github.com/jupyter-widgets/ipywidgets/pull/3227)) - Allow generate-spec to take optional output file ([#3174](https://github.com/jupyter-widgets/ipywidgets/pull/3174)) - Update to Jupyter Packaging 0.10 ([#3194](https://github.com/jupyter-widgets/ipywidgets/pull/3194)) - Update bug report test environment ([#3156](https://github.com/jupyter-widgets/ipywidgets/pull/3156)) - Create links out to gitter and discourse from the new issue options ([#3153](https://github.com/jupyter-widgets/ipywidgets/pull/3153)) - Adapt the milestone_check script from JupyterLab for ipywidgets. ([#3091](https://github.com/jupyter-widgets/ipywidgets/pull/3091)) - Fix spec generation for traitlets 5 ([#3234](https://github.com/jupyter-widgets/ipywidgets/pull/3234)) - Add documentation issue template ([#3095](https://github.com/jupyter-widgets/ipywidgets/pull/3095)) - Add Binder links and badges ([#3164](https://github.com/jupyter-widgets/ipywidgets/pull/3164), [#3212](https://github.com/jupyter-widgets/ipywidgets/pull/3212), [#3151](https://github.com/jupyter-widgets/ipywidgets/pull/3151), [#3148](https://github.com/jupyter-widgets/ipywidgets/pull/3148), [#2701](https://github.com/jupyter-widgets/ipywidgets/pull/2701)) ### Contributors to this release ([GitHub contributors page for this release](https://github.com/jupyter-widgets/ipywidgets/graphs/contributors?from=2019-06-11&to=2022-08-05&type=c)) [@afonit](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Aafonit+updated%3A2019-06-11..2022-08-05&type=Issues) | [@alex-rind](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Aalex-rind+updated%3A2019-06-11..2022-08-05&type=Issues) | [@Alexboiboi](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3AAlexboiboi+updated%3A2019-06-11..2022-08-05&type=Issues) | [@azjps](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Aazjps+updated%3A2019-06-11..2022-08-05&type=Issues) | [@blois](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ablois+updated%3A2019-06-11..2022-08-05&type=Issues) | [@bollwyvl](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Abollwyvl+updated%3A2019-06-11..2022-08-05&type=Issues) | [@bsyouness](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Absyouness+updated%3A2019-06-11..2022-08-05&type=Issues) | [@casperdcl](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Acasperdcl+updated%3A2019-06-11..2022-08-05&type=Issues) | [@crahan](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Acrahan+updated%3A2019-06-11..2022-08-05&type=Issues) | [@davidbrochart](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Adavidbrochart+updated%3A2019-06-11..2022-08-05&type=Issues) | [@deisi](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Adeisi+updated%3A2019-06-11..2022-08-05&type=Issues) | [@dependabot](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Adependabot+updated%3A2019-06-11..2022-08-05&type=Issues) | [@elliothershberg](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Aelliothershberg+updated%3A2019-06-11..2022-08-05&type=Issues) | [@fperez](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Afperez+updated%3A2019-06-11..2022-08-05&type=Issues) | [@giswqs](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Agiswqs+updated%3A2019-06-11..2022-08-05&type=Issues) | [@github-actions](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Agithub-actions+updated%3A2019-06-11..2022-08-05&type=Issues) | [@hai-schrodinger](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ahai-schrodinger+updated%3A2019-06-11..2022-08-05&type=Issues) | [@ianhi](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Aianhi+updated%3A2019-06-11..2022-08-05&type=Issues) | [@ibdafna](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Aibdafna+updated%3A2019-06-11..2022-08-05&type=Issues) | [@jasongrout](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ajasongrout+updated%3A2019-06-11..2022-08-05&type=Issues) | [@jbpauly](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ajbpauly+updated%3A2019-06-11..2022-08-05&type=Issues) | [@joequant](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ajoequant+updated%3A2019-06-11..2022-08-05&type=Issues) | [@joseph2rs](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ajoseph2rs+updated%3A2019-06-11..2022-08-05&type=Issues) | [@jpn--](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ajpn--+updated%3A2019-06-11..2022-08-05&type=Issues) | [@jtpio](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ajtpio+updated%3A2019-06-11..2022-08-05&type=Issues) | [@keatonb](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Akeatonb+updated%3A2019-06-11..2022-08-05&type=Issues) | [@kedarisetti](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Akedarisetti+updated%3A2019-06-11..2022-08-05&type=Issues) | [@kefirbandi](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Akefirbandi+updated%3A2019-06-11..2022-08-05&type=Issues) | [@maartenbreddels](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Amaartenbreddels+updated%3A2019-06-11..2022-08-05&type=Issues) | [@manuvazquez](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Amanuvazquez+updated%3A2019-06-11..2022-08-05&type=Issues) | [@marimeireles](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Amarimeireles+updated%3A2019-06-11..2022-08-05&type=Issues) | [@MartinKolarik](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3AMartinKolarik+updated%3A2019-06-11..2022-08-05&type=Issues) | [@martinRenou](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3AmartinRenou+updated%3A2019-06-11..2022-08-05&type=Issues) | [@mbektas](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ambektas+updated%3A2019-06-11..2022-08-05&type=Issues) | [@meeseeksdev](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ameeseeksdev+updated%3A2019-06-11..2022-08-05&type=Issues) | [@meeseeksmachine](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ameeseeksmachine+updated%3A2019-06-11..2022-08-05&type=Issues) | [@mgeier](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Amgeier+updated%3A2019-06-11..2022-08-05&type=Issues) | [@MicaelJarniac](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3AMicaelJarniac+updated%3A2019-06-11..2022-08-05&type=Issues) | [@minrk](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Aminrk+updated%3A2019-06-11..2022-08-05&type=Issues) | [@MSeal](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3AMSeal+updated%3A2019-06-11..2022-08-05&type=Issues) | [@mwcraig](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Amwcraig+updated%3A2019-06-11..2022-08-05&type=Issues) | [@NichtJens](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3ANichtJens+updated%3A2019-06-11..2022-08-05&type=Issues) | [@nmstoker](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Anmstoker+updated%3A2019-06-11..2022-08-05&type=Issues) | [@partev](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Apartev+updated%3A2019-06-11..2022-08-05&type=Issues) | [@pbugnion](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Apbugnion+updated%3A2019-06-11..2022-08-05&type=Issues) | [@raziqraif](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Araziqraif+updated%3A2019-06-11..2022-08-05&type=Issues) | [@rsheftel](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Arsheftel+updated%3A2019-06-11..2022-08-05&type=Issues) | [@shaperilio](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Ashaperilio+updated%3A2019-06-11..2022-08-05&type=Issues) | [@smeng9](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Asmeng9+updated%3A2019-06-11..2022-08-05&type=Issues) | [@snickell](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Asnickell+updated%3A2019-06-11..2022-08-05&type=Issues) | [@StefanBrand](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3AStefanBrand+updated%3A2019-06-11..2022-08-05&type=Issues) | [@stonebig](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Astonebig+updated%3A2019-06-11..2022-08-05&type=Issues) | [@SylvainCorlay](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3ASylvainCorlay+updated%3A2019-06-11..2022-08-05&type=Issues) | [@thomasaarholt](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Athomasaarholt+updated%3A2019-06-11..2022-08-05&type=Issues) | [@trungleduc](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Atrungleduc+updated%3A2019-06-11..2022-08-05&type=Issues) | [@vidartf](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Avidartf+updated%3A2019-06-11..2022-08-05&type=Issues) | [@willingc](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Awillingc+updated%3A2019-06-11..2022-08-05&type=Issues) | [@zerline](https://github.com/search?q=repo%3Ajupyter-widgets%2Fipywidgets+involves%3Azerline+updated%3A2019-06-11..2022-08-05&type=Issues) ## 7.7.1 To see the full list of pull requests, see the [7.7.1 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/36?closed=1) on GitHub. Highlights include: - Fix broken link icon for FontAwesome 4 and 5 [#3495](https://github.com/jupyter-widgets/ipywidgets/pull/3495) - Fix message throttling bug [#3494](https://github.com/jupyter-widgets/ipywidgets/pull/3494) - Fix state message parsing to be more permissive [#3486](https://github.com/jupyter-widgets/ipywidgets/pull/3486) - Fix tests on Python 3.11 [#3480](https://github.com/jupyter-widgets/ipywidgets/pull/3480) - Add better front-page docs [#3496](https://github.com/jupyter-widgets/ipywidgets/pull/3496) 7.7 --- To see the full list of pull requests and issues, see the [7.7 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/35?closed=1) on GitHub. Highlights include: - Fix installation on Python 3.10. [#3368](https://github.com/jupyter-widgets/ipywidgets/pull/3368) - Throw an error if we cannot render a widget, enabling the rendering system to fall back to rendering a different data type if available. [#3290](https://github.com/jupyter-widgets/ipywidgets/pull/3290) - Create a new widget control comm channel, enabling more efficient fetching of kernel widget state. [#3201](https://github.com/jupyter-widgets/ipywidgets/pull/3021) - Refactor logic for fetching kernel widget state to the manager base class. This logic first tries to use the new widget control comm channel, falling back to the existing method of requesting each widget's state individually. [#3337](https://github.com/jupyter-widgets/ipywidgets/pull/3337) - Enable HTMLManager output widgets to render state updates. [#3372](https://github.com/jupyter-widgets/ipywidgets/pull/3372) - Do not reset JupyterLab CSS variables if they are already defined. [#3344](https://github.com/jupyter-widgets/ipywidgets/pull/3344) - Fix variable inspector example. [#3302](https://github.com/jupyter-widgets/ipywidgets/pull/3302) - Introduce new widget manager `has_model` method for synchronously checking if a widget model is registered. [#3377](https://github.com/jupyter-widgets/ipywidgets/pull/3377) - Work around bug in Chrome rendering Combobox arrows. [#3375](https://github.com/jupyter-widgets/ipywidgets/pull/3375) - Optionally echo update messages from frontends to other frontends. This enables widget views in different frontends to maintain consistent state simultaneously, and also makes sure that simultaneous updates from the kernel and frontend resolve to a consistent state. This is off by default in ipywidgets 7.7, and it is anticipated this will be on by default in ipywidgets 8.0. To enable echo update messages across ipywidgets, set the environment variable `JUPYTER_WIDGETS_ECHO` to 1. To opt a specific attribute out of echo updates, tag the attribute with `echo_update=False` metadata (we do this in core for the FileUpload widget's `data` attribute). [#3400](https://github.com/jupyter-widgets/ipywidgets/pull/3400), [#3394](https://github.com/jupyter-widgets/ipywidgets/pull/3394) ## 7.6 To see the full list of pull requests and issues, see the [7.6.0 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/31?closed=1) on GitHub. The main change in this release is that installing `ipywidgets` 7.6.0 will now automatically enable ipywidgets support in JupyterLab 3.0—a user has no extra JupyterLab installation step and no rebuild of JupyterLab, nor do they need Node.js installed. Simply install the python ipywidgets package with pip (`pip install ipywidgets==7.6.0`) or conda/mamba (`conda install -c conda-forge ipywidgets=7.6.0`) and ipywidgets will automatically work in classic Jupyter Notebook and in JupyterLab 3.0. This is accomplished with the new python package `jupyterlab_widgets` version 1.0, on which `ipywidgets` 7.6.0 now depends (similar to how `ipywidgets` already depends on the `widgetsnbextension` package to configure ipywidgets for the classic Jupyter Notebook). The `jupyterlab_widgets` Python package is a JupyterLab 3.0 prebuilt extension, meaning that it can be installed into JupyterLab 3.0 without rebuilding JupyterLab and without needing Node.js installed. ### Updates for Widget Maintainers Custom widget maintainers will need to make two changes to update for JupyterLab 3: 1. Update the `@jupyter-widgets/base` dependency version to include `^4` to work in JupyterLab 3.0. For example, if you had a dependency on `@jupyter-widgets/base` version `^2 || ^3`, update to `^2 || ^3 || ^4` for your widget to work in classic Jupyter Notebook, JupyterLab 1, JupyterLab 2, and JupyterLab 3. See [#2472](https://github.com/jupyter-widgets/ipywidgets/pull/2472) for background. 2. In the `package.json`, add the following `sharedPackages` configuration inside the `jupyterlab` key. See the [JupyterLab extension documentation](https://jupyterlab.readthedocs.io/en/stable/extension/extension_dev.html#requiring-a-service) for more information. ```json "jupyterlab": { "sharedPackages": { "@jupyter-widgets/base": { "bundled": false, "singleton": true } } } ``` Separate from these two steps to update for JupyterLab 3, we also recommend that you make your widget's JupyterLab extension a prebuilt extension for JupyterLab 3.0. Users will be able to install your JupyterLab 3.0 prebuilt extension without rebuilding JupyterLab or needing Node.js. See the [JupyterLab 3 extension developer documentation](https://jupyterlab.readthedocs.io/en/stable/extension/extension_dev.html) or the new [widget extension cookiecutter](https://github.com/jupyter-widgets/widget-ts-cookiecutter/tree/jlab3) for more details. ## 7.5 To see the full list of pull requests and issues, see the [7.5 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/268?closed=1) on GitHub. Changes include: - New `AppLayout` and `GridLayout` templates for positioning interactive widgets. [#2333](https://github.com/jupyter-widgets/ipywidgets/pull/2333) - New `FileUpload` widget allowing users to upload files from the browser. [#2258](https://github.com/jupyter-widgets/ipywidgets/pull/2258) - New `ComboBox` widget. [#2390](https://github.com/jupyter-widgets/ipywidgets/pull/2390) - JupyterLab CSS variables are now exposed by default even in the case of the classic notebook. [#2418](https://github.com/jupyter-widgets/ipywidgets/pull/2418) ### Updates for Widget Maintainers Custom widget maintainers will need to update their `@jupyter-widgets/base` dependency version to work in JupyterLab 1.0. For example, if you had a dependency on `@jupyter-widgets/base` version `^1.1`, update to `^1.1 || ^2` for your widget to work in classic notebook, JupyterLab 0.35, and JupyterLab 1.0. See [#2472](https://github.com/jupyter-widgets/ipywidgets/pull/2472) for background. ## 7.4 To see the full list of pull requests and issues, see the [7.4 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/26?closed=1) on GitHub. Changes include: - New `Video` and `Audio` widgets have been introduced. [#2162](https://github.com/jupyter-widgets/ipywidgets/pull/2162) We updated the `@jupyter-widgets/controls` widget specification version to `1.4.0`, leading to the version bump to 7.4. - The use of mappings for the `options` attribute of selection widgets is deprecated. [#2130](https://github.com/jupyter-widgets/ipywidgets/pull/2130) ## 7.3 To see the full list of pull requests and issues, see the [7.3 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/26?closed=1) on GitHub. Changes include: - A new `GridBox` widget is introduced and associated CSS grid properties are added to the layout. This enables using the CSS Grid spec for laying out widgets. See the [Widget Styling](http://ipywidgets.readthedocs.io/en/stable/examples/Widget%20Styling.html) documentation for some examples. Because of this and other model specification changes, the view and module versions of widgets was incremented in both the base and controls packages. ([#2107](https://github.com/jupyter-widgets/ipywidgets/pull/2107), [#2064](https://github.com/jupyter-widgets/ipywidgets/pull/2064), [#1942](https://github.com/jupyter-widgets/ipywidgets/issues/1942)) - Widgets with a `description` attribute now also have a `description_tooltip` attribute to set a tooltip on the description. The tooltip defaults to the description text. Setting `description_tooltip` to `''` removes it, and setting it to `None` makes the tooltip default to the description text. ([#2070](https://github.com/jupyter-widgets/ipywidgets/pull/2070)) - `'transparent'` is now a valid color for color attributes. ([#2128](https://github.com/jupyter-widgets/ipywidgets/pull/2128)) - Dropdowns now have extra padding to make room for the dropdown arrow. ([#2052](https://github.com/jupyter-widgets/ipywidgets/issues/2052), [#2101](https://github.com/jupyter-widgets/ipywidgets/pull/2101)) - Image widget `repr` now truncates the image value to prevent huge amounts of output in notebooks. ([#2111](https://github.com/jupyter-widgets/ipywidgets/pull/2111)) - Python 3.3 support is dropped. Python 3.3 support was dropped in the Python community in [September 2017](https://www.python.org/dev/peps/pep-0398/#x-end-of-life). ([#2129](https://github.com/jupyter-widgets/ipywidgets/pull/2129)) - The license information has been consolidated into the LICENSE file, and the COPYING.md file is removed. If you are repackaging ipywidgets or widgetsnbextension, please make sure to include LICENSE instead of COPYING.md. ([#2133](https://github.com/jupyter-widgets/ipywidgets/pull/2133), [#2048](https://github.com/jupyter-widgets/ipywidgets/pull/2048), [#1701](https://github.com/jupyter-widgets/ipywidgets/issues/1701), [#1706](https://github.com/jupyter-widgets/ipywidgets/pull/1706)) ## 7.2 To see the full list of pull requests and issues, see the [7.2 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/25?closed=1) on GitHub. User-visible changes include: - A new `FloatLogSlider` widget is a slider with a log scale, suitable for exploring a wide range of magnitudes. ([#1928](https://github.com/jupyter-widgets/ipywidgets/pull/1928), [#2014](https://github.com/jupyter-widgets/ipywidgets/pull/2014)) ```python from ipywidgets import FloatLogSlider FloatLogSlider() ``` - `link` and `dlink` are now exported from ipywidgets for convenience, so that you can import them directly from ipywidgets instead of needing to import them from traitlets. ([#1923](https://github.com/jupyter-widgets/ipywidgets/pull/1923)) - A new option `manual_name` has been added to `interact_manual()` to change the name of the update button, for example `interact_manual(manual_name='Update')`. ([#1924](https://github.com/jupyter-widgets/ipywidgets/pull/1923)) - The Output widget now has a `.capture()` method, which returns a decorator to capture the output of a function. ```python from ipywidgets import Output out = Output() @out.capture() def f(): print('This output is captured') ``` The `.capture()` method has a `clear_output` boolean argument to automatically clear the output every time the function is run, as well as a `wait` argument corresponding to the `clear_output` wait argument. ([#1934](https://github.com/jupyter-widgets/ipywidgets/pull/1934)) - The Output widget has much more comprehensive documentation in its own section. ([#2020](https://github.com/jupyter-widgets/ipywidgets/pull/2020)) - Installing `widgetsnbextension` now automatically enables the nbextension in Jupyter Notebook 5.3 or later. ([#1911](https://github.com/jupyter-widgets/ipywidgets/pull/1911)) - The default rendering of a widget if widgets are not installed is now a short description of the widget in text instead of a much longer HTML message. ([#2007](https://github.com/jupyter-widgets/ipywidgets/pull/2007)) Changes for developers include: - The JavaScript base widget manager class now has a `resolveUrl` method to resolve a URL relative to the current notebook location. ([#1993](https://github.com/jupyter-widgets/ipywidgets/pull/1993)) - The html manager now exposes a way to specify which JavaScript file is fetched for a package and the loader used to fetch the library. ([#1995](https://github.com/jupyter-widgets/ipywidgets/pull/1995), [#1998](https://github.com/jupyter-widgets/ipywidgets/pull/1998)) - The `@jupyter-widgets/controls` widget specification version was bumped to `1.2.0`. Changes include the FloatLogSlider widget and more specific documentation about array element types. ([#2017](https://github.com/jupyter-widgets/ipywidgets/pull/2017)) ## 7.1 To see the full list of pull requests and issues, see the [7.1 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/23?closed=1) on GitHub. We updated the `@jupyter-widgets/controls` widget specification version to `1.1.0`, leading to the version bump to 7.1. The new widget model specification now includes new `description_width` and `font_weight` attributes for the `ToggleButtonsStyle` widget. There are also other bugfixes in this release. ## 7.0.x patch releases See the GitHub milestones for the [7.0.1](https://github.com/jupyter-widgets/ipywidgets/milestone/16?closed=1), [7.0.2](https://github.com/jupyter-widgets/ipywidgets/milestone/17?closed=1), [7.0.3](https://github.com/jupyter-widgets/ipywidgets/milestone/18?closed=1), [7.0.4](https://github.com/jupyter-widgets/ipywidgets/milestone/20?closed=1), and [7.0.5](https://github.com/jupyter-widgets/ipywidgets/milestone/21?closed=1) releases for bugfixes in these releases. ## 7.0 To see the full list of pull requests and issues, see the [7.0 milestone](https://github.com/jupyter-widgets/ipywidgets/milestone/12?closed=1) on GitHub. Major user-visible changes in ipywidgets 7.0 include: - Widgets are now displayed in the output area in the classic notebook and are treated as any other output. This allows the widgets to work more naturally with other cell output. To delete a widget, clear the output from the cell. Output from functions triggered by a widget view is appended to the output area that contains the widget view. This means that printed text will be appended to the output, and calling `clear_output()` will delete the entire output, including the widget view. ([#1274](https://github.com/jupyter-widgets/ipywidgets/pull/1274), [#1353](https://github.com/jupyter-widgets/ipywidgets/pull/1353)) - Removed the version validation check since it was causing too many false warnings about the widget javascript not being installed or the wrong version number. It is now up to the user to ensure that the ipywidgets and widgetsnbextension packages are compatible. ([#1219](https://github.com/jupyter-widgets/ipywidgets/pull/1219)) - The documentation theme is changed to the new standard Jupyter theme. ([#1363](https://github.com/jupyter-widgets/ipywidgets/pull/1363)) - The `layout` and `style` traits can be set with a dictionary for convenience, which will automatically converted to a Layout or Style object, like `IntSlider(layout={'width': '100%'}, style={'handle_color': 'lightgreen'})`. ([#1253](https://github.com/jupyter-widgets/ipywidgets/pull/1253)) - The Select widget now is a listbox instead of a dropdown, reverting back to the pre-6.0 behavior. ([#1238](https://github.com/jupyter-widgets/ipywidgets/pull/1238)) - The Select and SelectMultiple widgets now have a `rows` attribute for the number of rows to display, consistent with the Textarea widget. The `layout.height` attribute overrides this to control the height of the widget. ([#1250](https://github.com/jupyter-widgets/ipywidgets/pull/1250)) - Selection widgets (`Select`, `Dropdown`, `ToggleButtons`, etc.) have new `.value`, `.label`, and `.index` traits to make it easier to access or change the selected option. ([#1262](https://github.com/jupyter-widgets/ipywidgets/pull/1262), [#1513](https://github.com/jupyter-widgets/ipywidgets/pull/1513)) - Selection container widgets (`Accordion`, `Tabs`) can have their `.selected_index` set to `None` to deselect all items. ([#1495](https://github.com/jupyter-widgets/ipywidgets/pull/1495)) - The `Play` widget range is now inclusive (max value is max, instead of max-1), to be consistent with Sliders - The `Play` widget now has an optional repeat toggle button (visible by default). ([#1190](https://github.com/jupyter-widgets/ipywidgets/pull/1190)) - A refactoring of the text, slider, slider range, and progress widgets in resulted in the progress widgets losing their `step` attribute (which was previously ignored), and a number of these widgets changing their `_model_name` and/or `_view_name` attributes ([#1290](https://github.com/jupyter-widgets/ipywidgets/pull/1290)) - The `Checkbox` description is now on the right of the checkbox and is clickable. The `Checkbox` widget has a new `indent` attribute (defaults to `True`) to line up nicely with controls that have descriptions. To make the checkbox align to the left, set `indent` to `False`. ([#1346](https://github.com/jupyter-widgets/ipywidgets/pull/1346)) - A new Password widget, which behaves exactly like the Text widget, but hides the typed text: `Password()`. ([#1310](https://github.com/jupyter-widgets/ipywidgets/pull/1310)) - A new SelectionRangeSlider widget for selecting ranges from ordered lists of objects. For example, this enables having a slider to select a date range. ([#1356](https://github.com/jupyter-widgets/ipywidgets/pull/1356)) - The `Label` widget now has no width restriction. ([#1269](https://github.com/jupyter-widgets/ipywidgets/pull/1269)) - The description width is now configurable with the `.style.description_width` attribute ([#1376](https://github.com/jupyter-widgets/ipywidgets/pull/1376)) - ToggleButtons have a new `.style.button_width` attribute to set the CSS width of the buttons. Set this to `'initial'` to have buttons that individually size to the content width. ([#1257](https://github.com/jupyter-widgets/ipywidgets/pull/1257)) - The `readout_format` attribute of number sliders now validates its argument. ([#1550](https://github.com/jupyter-widgets/ipywidgets/pull/1550)) - The `IntRangeSlider` widget now has a `.readout_format` trait to control the formatting of the readout. ([#1446](https://github.com/jupyter-widgets/ipywidgets/pull/1446)) - The `Text`, `Textarea`, `IntText`, `BoundedIntText`, `FloatText`, and `BoundedFloatText` widgets all gained a `continuous_update` attribute (defaults to `True` for `Text` and `TextArea`, and `False` for the others). ([#1545](https://github.com/jupyter-widgets/ipywidgets/pull/1545)) - The `IntText`, `BoundedIntText`, `FloatText`, and `BoundedFloatText` widgets are now rendered as HTML number inputs, and have a `step` attribute that controls the resolution. ([#1545](https://github.com/jupyter-widgets/ipywidgets/pull/1545)) - The `Text.on_submit` callback is deprecated; instead, set `continuous_update` to `False` and observe the `value` attribute: `mywidget.observe(callback, 'value')`. The `Textarea.scroll_to_bottom` method was removed. ([#1545](https://github.com/jupyter-widgets/ipywidgets/pull/1545)) - The `msg_throttle` attribute on widgets is now gone, and the code has a hardcoded message throttle equivalent to `msg_throttle=1`. ([#1557](https://github.com/jupyter-widgets/ipywidgets/pull/1557)) - Using function annotations to specify interact controls for a function is now deprecated and will be removed in a future version of ipywidgets. ([#1292](https://github.com/jupyter-widgets/ipywidgets/pull/1292)) - There are now two simple ways to embed widgets in an HTML page: with a simple script tag that does not use require.js and does not support anything but the basic widgets, and a require module that does support custom widgets. See the migration guide for more details. ([#1615](https://github.com/jupyter-widgets/ipywidgets/pull/1615), [#1629](https://github.com/jupyter-widgets/ipywidgets/pull/1629), [#1630](https://github.com/jupyter-widgets/ipywidgets/pull/1630)) If you are developing a custom widget or widget manager, here are some major changes that may affect you. The [migration guide](./migration_guides.md) also walks through how to upgrade a custom widget. - On the Python/kernel side: - The Python `@register` decorator for widget classes no longer takes a string argument, but registers a widget class using the `_model_*` and `_view_*` traits in the class. Using the decorator as `@register('name')` is deprecated and should be changed to just `@register`. [#1228](https://github.com/jupyter-widgets/ipywidgets/pull/1228), [#1276](https://github.com/jupyter-widgets/ipywidgets/pull/1276) - Widgets will now need correct `_model_module` and `_view_module` Unicode traits defined. - Selection widgets now sync the index of the selected item, rather than the label. ([#1262](https://github.com/jupyter-widgets/ipywidgets/pull/1262)) - The Python `ipywidget.domwidget.LabeledWidget` is now `ipywidget.widget_description.DescriptionWidget`, and there is a new `ipywidget.widget_description.DescriptionStyle` that lets the user set the CSS width of the description. - Custom serializers can now return a structure that contains binary objects (`memoryview`, `bytearray`, or Python 3 `bytes` object). In this case, the sync message will be a binary message, which is much more efficient for binary data than base64-encoding. The Image widget now uses this binary synchronization. ([#1194](https://github.com/jupyter-widgets/ipywidgets/pull/1194), [#1595](https://github.com/jupyter-widgets/ipywidgets/pull/1595), [#1643](https://github.com/jupyter-widgets/ipywidgets/pull/1643)) - On the Javascript side: - The `jupyter-js-widgets` Javascript package has been split into `@jupyter-widgets/base` package (containing base widget classes, the DOM widget, and the associated layout and style classes), and the `@jupyter-widgets/controls` package (containing the rest of the Jupyter widgets controls). Authors of custom widgets will need to update to depend on `@jupyter-widgets/base` instead of `jupyter-js-widgets` (if you use a class from the controls package, you will also need to depend on `@jupyter-widgets/controls`). See the [cookie cutter](https://github.com/jupyter-widgets/widget-cookiecutter) to generate a simple example custom widget using the new packages. - Custom serializers in Javascript are now synchronous, and should return a snapshot of the widget state. The default serializer makes a copy of JSONable objects. ([#1270](https://github.com/jupyter-widgets/ipywidgets/pull/1270)) - Custom serializers can now return a structure that contains binary objects (`ArrayBuffer`, `DataView`, or a typed array such as `Int8Array`, `Float64Array`, etc.). In this case, the sync message will be a binary message, which is much more efficient for binary data than base64-encoding. The Image widget now uses this binary synchronization. ([#1194](https://github.com/jupyter-widgets/ipywidgets/pull/1194), [#1643](https://github.com/jupyter-widgets/ipywidgets/pull/1643)) - A custom serializer is given the widget instance as its second argument, and a custom deserializer is given the widget manager as its second argument. - The Javascript model `.id` attribute has been renamed to `.model_id` to avoid conflicting with the Backbone `.id` attribute. ([#1410](https://github.com/jupyter-widgets/ipywidgets/pull/1410)) - Regarding widget managers and the syncing message protocol: - The widget protocol was significantly overhauled. The new widget messaging protocol (version 2) is specified in the [version 2 protocol documentation](https://github.com/jupyter-widgets/ipywidgets/blob/main/jupyter-widgets-schema/messages.md). - Widgets are now displayed with a `display_data` message instead of with a custom comm message. See the [ipywidgets](https://github.com/jupyter-widgets/ipywidgets/blob/20cd0f050090b1b19bb9657b8c3fa42ae384cfca/ipywidgets/widgets/widget.py#L656) implementation for an example. ([#1274](https://github.com/jupyter-widgets/ipywidgets/pull/1274)) - Custom widget managers are now responsible completely for loading widget model and view classes. Widget managers should provide an output model and view class appropriate for their environment so that the `Output` widget works. ([#1313](https://github.com/jupyter-widgets/ipywidgets/pull/1313)) - The widget manager `clear_state` method no longer has a `commlessOnly` argument. All models in the widget manager will be closed and cleared when `clear_state` is called. ([#1354](https://github.com/jupyter-widgets/ipywidgets/pull/1354)) ## 6.0 Major user-visible changes in ipywidgets 6.0 include: - Rendering of Jupyter interactive widgets in various web contexts sphinx documentation: http://ipywidgets.readthedocs.io/en/latest/examples/Widget%20List.html nbviewer: http://nbviewer.jupyter.org/github/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Widget%20List.ipynb Static web pages: http://jupyter.org/widgets - Addition of a DatePicker widget in the core widget collection. - Changes to the automatic control generation syntax in @interact, inspired by the Sage interact syntax. - Removal of APIs which had been deprecated in 5.0, including top-level styling in attributes of DOMWidgets and some corner cases in the behavior of `@interact`. - A new API for custom styling of widgets is provided, through a top-level `style` attribute. For example, the color of a slider handler can be set by `slider.style.handle_color`. - Removal of the Proxy and PlaceProxy widgets. - Removal of the deprecated `FlexBox` widget. Use the `Box`, `HBox`, or `VBox` widgets instead. Various flex properties can be set using the `layout` attribute. - Removal of the deprecated `Latex` widget. Use the new `HTMLMath` widget with Latex math inside `$` or `$$` delimiters instead. - Removal of the deprecated layout properties on a widget such as `.width`, `.height`, etc. Use the `layout` attribute with a `Layout` widget to manage various layout properties instead. - The `Label` widget now has styling to make it consistent with labels on various widgets. To have freeform text with mathematics, use the new `HTMLMath` widget. - Removal of the `button_style` attribute of the Dropdown widget - Addition of an OutputWidget for capturing output and rich display objects. @interact has changed to use an OutputWidget for function output instead of overwriting the output area of a cell. - The jupyter-js-widgets Javascript implementation now relies on the PhosphorJS framework for the management of rich layout and a better integration of JupyterLab. - Numerous bug fixes. _Note for custom widget authors:_ ipywidgets 6.0 breaks backward compatibility with respect to the handling of default values of the JavaScript side. Now, the default values for core widget models are specified with a `default()` method returning a dictionary instead of a `default` dictionary attribute. If you want your library to be backwards compatible with ipywidgets 5.x, you could use [\_.result](http://underscorejs.org/#result) like this: ```javascript ... defaults: function() { return _.extend(_.result(this, 'widgets.DOMWidgetModel.prototype.defaults'), { .... }) }, ... ``` This should not have an impact when using your custom widgets in the classic notebook, but will be really important when deploying your interactive widgets in web contexts. ## 5.x ## 4.1.x ### 4.1.1 ### 4.1.0 ## 4.0.x ### 4.0.3 Bump version with miscellaneous bug fixes. ### 4.0.2 Add README.rst documentation. ### 4.0.1 Remove ipynb checkpoints. ### 4.0.0 First release of **ipywidgets** as a standalone package. ipywidgets-8.1.5/docs/source/conf.py000066400000000000000000000125031466162644600174640ustar00rootroot00000000000000#!/usr/bin/env python3 # import os import sys from pathlib import Path from packaging.version import Version HERE = Path(__file__).parent LITE = HERE.parent / "lite" ROOT = HERE.parent.parent JLW = ROOT / "python/jupyterlab_widgets" IPYW = ROOT / "python/ipywidgets" WIDG = ROOT / "python/widgetsnbextension" TYPD = HERE.parent / "typedoc" NODM = ROOT / "node_modules" TSBI = [ p.parent / "tsconfig.tsbuildinfo" for p in ROOT.glob("packages/*/tsconfig.json") ] # work around unpickleable functions sys.path.append(str(HERE)) from ipywidgets_docs_utils import jupyterlab_markdown_heading, run_if_needed # silence debug messages os.environ["PYDEVD_DISABLE_FILE_VALIDATION"] = "1" def on_config_inited(*args): """rebuild""" run_if_needed(["jlpm"], ROOT, [NODM]) run_if_needed(["jlpm", "build"], ROOT, TSBI) run_if_needed(["jlpm", "docs"], ROOT, [TYPD / "typedoc/index.html"]) for pkg_root in [IPYW, WIDG, JLW]: run_if_needed(["pyproject-build"], pkg_root, [pkg_root / "dist"]) run_if_needed(["jupyter", "lite", "build"], LITE) def setup(app): app.connect("config-inited", on_config_inited) # -- Sphinx extensions and configuration ------------------------ extensions = [ 'myst_nb', 'sphinx.ext.autodoc', 'sphinx.ext.autosummary', 'sphinx.ext.intersphinx', 'sphinx.ext.mathjax', 'sphinx_autodoc_typehints', 'sphinx_copybutton', 'sphinx.ext.viewcode', 'sphinxext.rediraffe', 'IPython.sphinxext.ipython_console_highlighting', ] intersphinx_mapping = { 'python': ('https://docs.python.org/3', None), 'ipython': ('https://ipython.readthedocs.io/en/stable/', None), 'nbconvert': ('https://nbconvert.readthedocs.io/en/stable', None), 'nbformat': ('https://nbformat.readthedocs.io/en/stable', None), 'traitlets': ('https://traitlets.readthedocs.io/en/stable', None), } # -- General information ------- _release = {} exec(compile(open('../../python/ipywidgets/ipywidgets/_version.py').read(), '../../python/ipywidgets/ipywidgets/_version.py', 'exec'), _release) v = Version(_release['__version__']) version = f'{v.major}.{v.minor}' release = _release['__version__'] # Add any paths that contain templates here, relative to this directory. # templates_path = ['_templates'] master_doc = 'index' project = 'Jupyter Widgets' copyright = '2017-2023 Project Jupyter' author = 'Jupyter Team' language = "en" exclude_patterns = [ '**.ipynb_checkpoints', 'examples.md', 'examples/Beat Frequencies.ipynb', 'examples/Controller.ipynb', 'examples/Exploring Graphs.ipynb', 'examples/Export As (nbconvert).ipynb', 'examples/Factoring.ipynb', 'examples/Imag*', 'examples/Index.ipynb', 'examples/Lorenz Differential Equations.ipynb', 'examples/Media widgets.ipynb', 'examples/Variable Inspector.ipynb', 'examples/Widget Alignment.ipynb', '_contents' ] pygments_style = 'sphinx' todo_include_todos = False myst_enable_extensions = [ "amsmath", "colon_fence", "deflist", "dollarmath", "html_image", ] myst_heading_anchors = 4 myst_heading_slug_func = jupyterlab_markdown_heading nb_execution_mode = "cache" nb_ipywidgets_js = { "require.js": {}, "embed-amd.js": {} } autosummary_generate = True autoclass_content = "both" autodoc_typehints = "none" autodoc_default_options = { "members": True, "show-inheritance": True, } rediraffe_redirects = { "typedoc/index": "_static/typedoc/index", "try/lab/index": "_static/lab/index", "try/tree/index": "_static/tree/index", } # -- html -------------------------- html_theme = 'pydata_sphinx_theme' html_static_path = [ '_static', "../../packages/html-manager/dist", '../lite/_output', '../typedoc', '../../node_modules/requirejs/require.js', ] html_css_files = [ 'theme.css', ] templates_path = ["_templates"] htmlhelp_basename = 'ipywidgetsdoc' html_theme_options = { "icon_links": [ { "name": "PyPI", "url": "https://pypi.org/project/ipywidgets", "icon": "fa-solid fa-box", } ], "use_edit_page_button": True, "github_url": "https://github.com/jupyter-widgets/ipywidgets", "navbar_end": [ # disabled until widget dark variables are available # "theme-switcher", "navbar-icon-links", ] } html_context = { # disabled until widget dark variables are available "default_mode": "light", "doc_path": "docs", "github_repo": "ipywidgets", "github_user": "jupyter-widgets", "github_version": "main", } html_sidebars = { "index": [ "demo.html", "search-field.html", "sidebar-nav-bs-index.html", "sidebar-ethical-ads.html", ], "**": [ "search-field.html", "sidebar-nav-bs.html", "demo.html", "sidebar-ethical-ads.html", ] } # -- latex ------------------------- latex_elements = {} latex_documents = [ (master_doc, 'ipywidgets.tex', 'ipywidgets Documentation', 'https://jupyter.org', 'manual'), ] # -- tex --------------------------- texinfo_documents = [ (master_doc, 'ipywidgets', 'ipywidgets Documentation', author, 'ipywidgets', 'Interactive Widgets for Jupyter.', 'Miscellaneous'), ] # -- epub -------------------------- # Bibliographic Dublin Core info. epub_title = project epub_author = author epub_publisher = author epub_copyright = copyright ipywidgets-8.1.5/docs/source/contributing.md000066400000000000000000000007101466162644600212130ustar00rootroot00000000000000# Contributing The ipywidgets package is under the [Jupyter-Widgets](https://github.com/jupyter-widgets) [software subproject](https://jupyter.org/governance/software_subprojects.html). We appreciate contributions from the community. We follow the [IPython Contributing Guide](https://github.com/ipython/ipython/blob/main/CONTRIBUTING.md) and [Jupyter Contributing Guides](https://jupyter.readthedocs.io/en/latest/contributor/content-contributor.html). ipywidgets-8.1.5/docs/source/dev_docs.md000066400000000000000000000047751466162644600203110ustar00rootroot00000000000000# Develop and Build Documentation To build the documentation you'll need [Sphinx](https://www.sphinx-doc.org) and a few other packages. ## Setup documentation environment ### Use `mamba` or `conda` (recommended) First create a [conda environment](https://conda.pydata.org/docs/using/envs.html#use-environment-from-file) named `ipywidgets_docs` to install all the necessary packages: ```bash # create the environment mamba env update --file docs/environment.yml ``` Then, activate the environment. ```bash # activate the environment conda activate ipywidgets_docs # Linux and OS X activate ipywidgets_docs # Windows ``` ### Use `pip` Alternatively, it is also possible to create a virtual environment and activate it with the following commands: ```bash # create the environment python -m venv . # activate the environment source bin/activate ``` In the environment, install the packages: ```bash python -m pip install -r docs/requirements.txt ``` ```{hint} Building the documentation site requires a working `nodejs` installation, which can be installed with your package manager of choice, or directly from the [NodeJS website](https://nodejs.org). ``` ## Build the documentation Once you have installed the required packages, you can build the docs with: ```bash cd docs/source sphinx-build -T -E -b html -d ../build/doctrees -D language=en . ../build/html ``` After that, the generated HTML files will be available at `build/html/index.html`. You may view the docs in your browser by entering the following in the terminal: `open build/html/index.html`. Alternatively, you can start the built-in Python web server: ```bash cd docs/build/html python3 -m http.server -b 127.0,0.1 ``` ... and navigate to `http://localhost:8000/`. You should also have a look at the [Project Jupyter Documentation Guide](https://jupyter.readthedocs.io/en/latest/contrib_docs). ## Watch the documentation It is also possible to launch a web server which watches the sources and automatically rebuilds: ```bash cd docs/source sphinx-autobuild -T -E -b html -d ../build/doctrees -D language=en . ../build/html ``` ... and navigate to `http://localhost:8000/`. ## Cleaning notebook output for docs When using notebook source files to generate documentation, it's good practice to strip notebook output and metadata with [nbstripout](https://github.com/kynan/nbstripout) before committing the notebook. For example, the following command will strip all output from a notebook: ```bash nbstripout "docs/source/examples/Widget List.ipynb" ``` ipywidgets-8.1.5/docs/source/dev_install.md000066400000000000000000000067361466162644600210260ustar00rootroot00000000000000# Developer Install The core Jupyter Widgets packages are developed in the [https://github.com/jupyter-widgets/ipywidgets](https://github.com/jupyter-widgets/ipywidgets) git repository. ## Prerequisites To install ipywidgets from git, you will need: - [yarn](https://yarnpkg.com/) package manager ** version 3.0 or later ** - the latest [Jupyter Notebook development release](https://github.com/jupyter/notebook/releases) - Everything in the ipywidgets repository is developed using Jupyter notebook's `main` branch. - If you want to have a copy of ipywidgets that works against a stable version of the notebook, checkout the appropriate tag. - See the [Compatibility table](https://github.com/jupyter-widgets/ipywidgets#compatibility) - the latest [JupyterLab release](https://github.com/jupyterlab/jupyterlab/releases) ### Installing With Conda ```bash conda create -c conda-forge -n ipywidgets yarn notebook jupyterlab conda activate ipywidgets ipython kernel install --name ipywidgets --display-name "ipywidgets" --sys-prefix git clone https://github.com/jupyter-widgets/ipywidgets.git cd ipywidgets ./dev-install.sh ``` ### Installing with pip To do an editable install of the python ipywidgets package into the user site directory with pip, please navigate into the sub-folder `python/ipywidgets` with ```bash cd python/ipywidgets ``` and run ```bash pip install --prefix=$(python -m site --user-base) -e . ``` Using `pip install --user -e .` will not work due to a bug in pip. See https://github.com/pypa/pip/issues/7953 for more details. ## Rebuilding after making changes To build and test changes, run the following commands in the ipywidgets repository root directory, empty your browser's cache, and refresh the page. yarn clean yarn build If your changes are confined to one package (for example, just in the widgetsnbextension package), then it may be sufficient to just run `yarn build` in that specific directory. ## Tips and troubleshooting - If you have any problems with the above install procedure, make sure that permissions on npm and pip related install directories are correct. - Sometimes, it helps to clear cached files too by running `git clean -dfx` from the root of the cloned repository. - When you make changes to the Javascript and you're not seeing the changes, it could be your browser is caching aggressively. Try clearing the browser's cache. Try also using "incognito" or "private" browsing tabs to avoid caching. - If troubleshooting an upgrade and its build, you may need to do the following process: - Deep clean of the cloned repository: ``` git clean -dfx . ``` - Remove anything with `widgetsnbextension` in the name of files within the `conda` directory - Try reinstalling ipywidgets ## Updating widget model specification To update the widget model specification with changes, do something like this in the repo root: ``` python ./packages/schema/generate-spec.py -f json-pretty packages/schema/jupyterwidgetmodels.latest.json python ./packages/schema/generate-spec.py -f markdown packages/schema/jupyterwidgetmodels.latest.md ``` ## Releasing new versions See [dev_release.md](dev_release.md) for a details on how to release new versions of ipywidgets to PyPI and jupyter-widgets-controls on npm. ## Testing See [dev_testing.md](dev_testing.md) for a details on how to run Python and Javascript tests. ## Building documentation See [dev_docs.md](dev_docs.md) for a details on how to build the docs. ipywidgets-8.1.5/docs/source/dev_release.md000066400000000000000000000155661466162644600210010ustar00rootroot00000000000000# Developer Release Procedure To release a new version of the widgets on PyPI and npm, first checkout the `main` branch and `cd` into the repo root. ``` cd release conda deactivate conda remove --all -y -n releasewidgets rm -rf ipywidgets conda create -c conda-forge --override-channels -y -n releasewidgets notebook nodejs "yarn=3.*" twine jupyterlab=4 jupyter-packaging python-build jq "python==3.9.*" conda activate releasewidgets git clone git@github.com:jupyter-widgets/ipywidgets.git cd ipywidgets ``` ## Fix the widget spec If there were changes in the widget model specification (i.e., any change made to any widget attributes), we need to update the model specification version and record the documented attributes. First, update the relevant model specification versions. For example, the commit https://github.com/jupyter-widgets/ipywidgets/commit/fca6f355605dc9e04062ce0eec4a7acbb5632ae2 updated the controls model version. We follow the semver spec for model version numbers, so model changes that are backwards-incompatible should be major version bumps, while backwards-compatible additions should be minor version bumps. Next, regenerate the model spec with the new version numbers by doing something like this in the repository root directory: ``` (cd python/ipywidgets; pip install -e .) python ./packages/schema/generate-spec.py -f json-pretty packages/schema/jupyterwidgetmodels.latest.json python ./packages/schema/generate-spec.py -f markdown packages/schema/jupyterwidgetmodels.latest.md ``` Copy `packages/schema/jupyterwidgetmodels.latest.md` to an appropriately-named markdown file (see the existing model spec files in that directory for the naming convention). This documents the widget model specification for a specific ipywidget release. Commit the changes (don't forget to `git add` the new model spec file). ## Publish the npm modules ``` # clean out all dirty files git checkout main git pull origin main git reset --hard origin/main git clean -fdx yarn install yarn run bump # Check the latest commit to make sure it is correct yarn publish ``` Lerna will prompt you for version numbers for each of the changed npm packages in the version step. Lerna will then change the versions appropriately (including the interdependency versions), commit, and tag. The `yarn publish` step then publishes the public packages that were versioned to npm. ## Configure twine username If you have 2FA on, make sure you have your `~/.pypirc` file set to: ``` [pypi] username = __token__ ``` Or set the environment variable ``` export TWINE_USERNAME=__token__ ``` ## `jupyterlab_widgets` Go into the `python/jupyterlab_widgets` directory. Change `jupyterlab_widgets/_version.py` to reflect the new version number. ``` (cd python/jupyterlab_widgets && pyproject-build . && twine upload dist/*) ``` Verify that the package is uploaded. ``` curl -s https://pypi.org/pypi/jupyterlab-widgets/json | jq -r '[.releases[][] | [.upload_time, .digests.sha256, .filename] | join(" ")] | sort ' ``` ## `widgetsnbextension` Go into the `python/widgetsnbextension` directory. Change `widgetsnbextension/_version.py` to reflect the new version number. ``` (cd python/widgetsnbextension && pyproject-build . && twine upload dist/*) ``` Verify that the package is uploaded. ``` curl -s https://pypi.org/pypi/widgetsnbextension/json | jq -r '[.releases[][] | [.upload_time, .digests.sha256, .filename] | join(" ")] | sort ' ``` ## `ipywidgets` Go into the `python/ipywidgets` directory. Change `ipywidgets/_version.py` to reflect the new version number, and if necessary, a new `__html_manager_version__`. Change the `install_requires` parameter in `setup.cfg` reference the new widgetsnbextension and jupyterlab_widgets version. ``` (cd python/ipywidgets && pyproject-build . && twine upload dist/*) ``` Verify that the package is uploaded: ``` curl -s https://pypi.org/pypi/ipywidgets/json | jq -r '[.releases[][] | [.upload_time, .digests.sha256, .filename] | join(" ")] | sort ' ``` ## Push changes back Calculate the hashes of the uploaded files. You could use a small shell script, for example, like this on macOS (put in `scripts/hashes`): ```sh #!/bin/sh for f in $@ do echo "$f" echo md5: `md5 -q "$f"` echo sha1: `shasum -a 1 "$f" | awk '{print $1}'` echo sha256: `shasum -a 256 "$f" | awk '{print $1}'` echo done ``` Using the above script, you can do: ``` ./scripts/hashes python/ipywidgets/dist/* ./scripts/hashes python/widgetsnbextension/dist/* ./scripts/hashes python/jupyterlab_widgets/dist/* ``` Commit the changes you've made above, and include the uploaded files hashes in the commit message. Tag the release if ipywidgets was released. Push to origin `main` (and include the tag in the push), e.g: ``` git add -p git commit -m "Release: ipywidgets 8.1.3, widgetsnbextension 4.0.11, jupyterlab_widgets 3.0.11" git commit --amend git tag 8.1.3 git push origin main 8.1.3 ``` Update conda-forge packages (if the requirements changed to ipywidgets, make sure to update widgetsnbextension first). # Release Notes ## Changelog - Modify `scripts/milestone_check.py` to include the release and commit range for the release, and run `python scripts/milestone_check.py` to check the issues assigned to this milestone - Write release highlights. You can use the list generated below as a starting point: ```bash loghub jupyter-widgets/ipywidgets -m XXX -t $GITHUB_TOKEN --template scripts/release_template.txt ``` ## Example Here is an example of the release statistics for ipywidgets 7.0. It has been 157 days since the last release. In this release, we closed [127 issues](https://github.com/jupyter-widgets/ipywidgets/issues?q=is%3Aissue+is%3Aclosed+milestone%3A7.0) and [216 pull requests](https://github.com/jupyter-widgets/ipywidgets/pulls?q=is%3Apr+milestone%3A7.0+is%3Aclosed) with [1069](https://github.com/jupyter-widgets/ipywidgets/compare/6.0.0...7.0.0) commits, of which 851 are not merges. Here are some commands used to generate some of the statistics above. ``` # merges since in 6.0.0, but not 7.0.0, which is a rough list of merged PRs git log --merges 6.0.0...main --pretty=oneline # To really make sure we get all PRs, we could write a program that # pulled all of the PRs, examined a commit in each one, and did # `git tag --contains ` to see if that PR commit is included # in a previous release. # issues closed with no milestone in the time period # is:issue is:closed closed:"2016-07-14 .. 2017-02-28" # date of 6.0.0 tag git show -s --format=%cd --date=short 6.0.0^{commit} # Non-merge commits in 7.0.0 not in any 6.x release git log --pretty=oneline --no-merges ^6.0.0 main | wc -l # Authors of non-merge commits git shortlog -s 6.0.0..main --no-merges | cut -c8- | sort -f # New committers: authors unique in the 6.0.0..7.0.0 logs, but not in the 6.0.0 log comm -23 <(git shortlog -s -n 6.0.0..main --no-merges | cut -c8- | sort) <(git shortlog -s -n 6.0.0 --no-merges | cut -c8- | sort) | sort -f ``` ipywidgets-8.1.5/docs/source/dev_testing.md000066400000000000000000000067041466162644600210300ustar00rootroot00000000000000# Unit Tests To run the Python tests: ```sh pytest --cov=ipywidgets ./python/ipywidgets ``` To run the Javascript tests in each package directory: ```sh yarn test ``` This will run the test suite using `karma` with 'debug' level logging. # Visual Regression Tests `ipywidgets` uses the [Galata](https://github.com/jupyterlab/jupyterlab/tree/master/galata) framework for visual regression testing. Galata provides a high level API to programmatically interact with the JupyterLab UI, and tools for taking screenshots and generating test reports. UI tests are written in TypeScript and run with the Playwright test runner. The test suites are located in the [ui-tests/tests](https://github.com/jupyter-widgets/ipywidgets/tree/main/ui-tests/tests) directory. The [main test suite](https://github.com/jupyter-widgets/ipywidgets/tree/main/ui-tests/tests/widgets.test.ts) uploads a [notebook](https://github.com/jupyter-widgets/ipywidgets/tree/main/ui-tests/tests/notebooks/widgets.ipynb) to JupyterLab, runs it cell by cell and captures a screenshot of the cell outputs. The cell outputs correspond to widgets of different types. The cell outputs captures are then compared to the [reference snapshots](https://github.com/jupyter-widgets/ipywidgets/tree/main/ui-tests/tests/widgets.test.ts-snapshots/) to detect any visual regression. The test report (diffs, result, videos) is uploaded to GitHub as an artifact and accessible from the GitHub Actions page in `Artifacts` section. ## Running Tests Locally First install the dependencies: ```sh cd ui-tests yarn install ``` Galata needs to connect to a running instance of JupyterLab 3 to run UI tests. First launch JupyterLab and keep it running in a terminal window. ```sh # in ui-tests directory yarn start ``` Then run the `test` script: ```sh # in the ui-tests directory yarn test ``` You can pass additional arguments to `playwright` by appending parameters to the command. For example to run the test in headed mode, `yarn test --headed`. Checkout the [Playwright Command Line Reference](https://playwright.dev/docs/test-cli/) for more information about the available command line options. ## Adding new UI tests New test suites can be added to the [ui-tests/tests](https://github.com/jupyter-widgets/ipywidgets/tree/main/ui-tests/tests) directory. Their names need to end with `.test.ts`. You can see some additional example test suites in the [JupyterLab repo](https://github.com/jupyterlab/jupyterlab/blob/master/galata/test). If the tests in new suites are doing visual regression tests or HTML source regression tests then you also need to add their reference images to the `-snapshots` directories. ## Reference Image Captures When doing visual regression tests, it is important to use reference images that were generated in the same environment. Otherwise, even though the same browser is used for testing, there might be minor differences that could cause visual regression tests to fail. When adding a new visual regression test, first make sure your tests pass locally on your development environment, with a reference snapshots generated in your dev environment. You can generate new reference snapshots by running `yarn test:update`. To update the snapshots: - push the new changes to the branch - wait for the CI check to complete - go to the artifacts section and download the `ipywidgets-updated-snapshots` archive - extract the archive - copy the `-snapshots` directories to replace the existing ones - commmit and push the changes ipywidgets-8.1.5/docs/source/embedding.md000066400000000000000000000331261466162644600204310ustar00rootroot00000000000000# Embedding Jupyter Widgets in Other Contexts than the Notebook Jupyter interactive widgets can be serialized and embedded into - static web pages - sphinx documentation - html-converted notebooks on nbviewer Here, we discuss embedding widgets using the custom widget manager in the `@jupyter-widgets/html-manager` npm package. Two embedders are provided: 1. A basic embedder that only embeds standard controls, but can be used on any web page 2. An embedder that uses RequireJS, and can embed standard and custom widgets ## Embedding Widgets in HTML Web Pages The classic notebook interface provides a `Widgets` menu for generating an HTML snippet that can be embedded into any static web page: The menu provides three sets of actions - Save Notebook Widget State and Clear Notebook Widget State - Download Widget State - Embed Widgets ### Save Notebook Widget State A notebook file may be saved with the current widget state as metadata. This allows the notebook file to be rendered with rendered widgets (see the section about Sphinx below, for example). To save a notebook with the current widget state, use the `Save Notebook Widget State` menu item. In order to delete old saved state and save new state to the notebook, do the following in order: 1. Use the `Clear Notebook Widget State` menu and save the notebook. This clears the metadata from the notebook file. 2. Restart the kernel and refresh the page. This clears the old widget state from the widget manager on the page. 3. Create whatever widgets you'd like, and use `Save Notebook Widget State` and save the notebook. This saves the new widget state to the notebook file. ### Embeddable HTML Snippet The `Embed widgets` menu item provides a dialog containing an HTML page which embeds the current widgets. In order to support custom widgets, it uses the RequireJS embedder. This HTML snippet is composed of multiple `

Widget export

""" manager_state = json.dumps(data['manager_state']) widget_views = [json.dumps(view) for view in data['view_specs']] rendered_template = html_template.format(manager_state=manager_state, widget_views=widget_views) with open('export.html', 'w') as fp: fp.write(rendered_template) ``` The web page needs to load RequireJS and the Jupyter widgets HTML manager. You then need to include the manager state in a ` ``` If you want to use a specific version of the embedder, you replace the `@*` with a semver range, such as `@^0.9.0` #### Embedding custom widgets with RequireJS In order to embed third-party widgets, you can use the RequireJS-based embedding. First, make sure that RequireJS is loaded on the page, for example: ```html ``` Then include the following script, which defines the embedding libraries and runs the function to render widgets: ```html ``` If you want to use a specific version of the embedder, you replace the `@*` with a semver range, such as `@^0.9.0` If you need to embed custom widgets without using RequireJS, you'll need to compile your own embedding javascript that includes the third-party libraries. ipywidgets-8.1.5/docs/source/reference/000077500000000000000000000000001466162644600201225ustar00rootroot00000000000000ipywidgets-8.1.5/docs/source/reference/index.md000066400000000000000000000003411466162644600215510ustar00rootroot00000000000000# Reference ```{toctree} :caption: History :maxdepth: 1 ../changelog ``` ```{toctree} :caption: Python API :maxdepth: 1 ipywidgets ../genindex ../modindex ``` ```{toctree} :caption: JS API :maxdepth: 1 jupyter-widgets ``` ipywidgets-8.1.5/docs/source/reference/ipywidgets.md000066400000000000000000000105231466162644600226350ustar00rootroot00000000000000# `ipywidgets` ## Traits > Extra `traitlets` for custom effects ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.trait_types :members: :special-members: ``` ## Widget Base Classes > Key base classes for Widgets ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.valuewidget :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.domwidget :members: :special-members: ``` ## Interactive > Opinions for auto-generating Widget user experiences ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.interaction :members: :special-members: ``` ## Core Widgets > The core Widgets ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_bool :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_box :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_button :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_color :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_controller :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_core :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_date :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_datetime :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_description :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_float :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_int :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_layout :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_link :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_media :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_output :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_selection :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_selectioncontainer :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_string :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_style :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_tagsinput :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_templates :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_time :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.widget_upload :members: :special-members: ``` ## Utilities ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.docutils :members: :special-members: ``` ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets.widgets.utils :members: :special-members: ``` ## Top-level exports > These are seldom needed by users or widget authors ```{eval-rst} .. currentmodule:: ipywidgets .. automodule:: ipywidgets :members: :special-members: ``` ipywidgets-8.1.5/docs/source/reference/jupyter-widgets.md000066400000000000000000000013411466162644600236110ustar00rootroot00000000000000# `@jupyter-widgets` ## Packages - @jupyter-widgets/base - @jupyter-widgets/base-manager - @jupyter-widgets/controls - @jupyter-widgets/html-manager - @jupyter-widgets/jupyterlab-manager - @jupyter-widgets/output ipywidgets-8.1.5/docs/source/tutorials/000077500000000000000000000000001466162644600202125ustar00rootroot00000000000000ipywidgets-8.1.5/docs/source/tutorials/index.md000066400000000000000000000003521466162644600216430ustar00rootroot00000000000000# Tutorials ```{toctree} :caption: For Custom Widget Authors :maxdepth: 1 ../examples/Widget Custom ``` ```{hint} For a more in-depth tutorial, see the [dedicated GitHub repository](https://github.com/jupyter-widgets/tutorial). ``` ipywidgets-8.1.5/docs/source/user_install.md000066400000000000000000000121621466162644600212140ustar00rootroot00000000000000# Installation Users can install the current version of **ipywidgets** with [pip](https://pip.pypa.io/en/stable/) or [conda](https://conda.readthedocs.io/en/latest/). In most cases, installing the Python `ipywidgets` package will also automatically configure classic Jupyter Notebook and JupyterLab 3.x to display ipywidgets. With pip, do: ```bash pip install ipywidgets ``` or with conda, do: ```bash conda install -c conda-forge ipywidgets ``` ## Installing in JupyterLab 3.x Most of the time, installing `ipywidgets` automatically configures JupyterLab 3.x to use widgets. The `ipywidgets` package does this by depending on the `jupyterlab_widgets` package, which configures JupyterLab 3 to display and use widgets. If JupyterLab and the IPython kernel are installed in different environments (for example, separate environments are providing different Python kernels), then the installation requires two steps: 1. Install the `jupyterlab_widgets` package in the environment containing JupyterLab. 2. Install `ipywidgets` in each kernel's environment that will use ipywidgets. For example, if using conda environments, with JupyterLab installed on the `base` environment and the kernel installed in an environment called `pyenv`, the commands are: ```bash conda install -n base -c conda-forge jupyterlab_widgets conda install -n pyenv -c conda-forge ipywidgets ``` ## Installing in classic Jupyter Notebook Most of the time, installing `ipywidgets` automatically configures Jupyter Notebook to use widgets. The `ipywidgets` package does this by depending on the `widgetsnbextension` package, which configures the classic Jupyter Notebook to display and use widgets. If your Jupyter Notebook and the IPython kernel are installed in different environments (for example, separate environments are providing different Python kernels), then the installation requires two steps: 1. Install the `widgetsnbextension` package in the environment containing the Jupyter Notebook server. 2. Install `ipywidgets` in each kernel's environment that will use ipywidgets. For example, if using conda environments, with Jupyter Notebook installed on the `base` environment and the kernel installed in an environment called `pyenv`, the commands are: ```bash conda install -n base -c conda-forge widgetsnbextension conda install -n pyenv -c conda-forge ipywidgets ``` ## Installing into JupyterLab 1 or 2 To install the JupyterLab extension into JupyterLab 1 or 2, you also need to run the command below in a terminal which requires that you have [nodejs](https://nodejs.org/en/) installed. For example, if using conda environments, you can install nodejs with: ```bash conda install -c conda-forge nodejs ``` Then you can install the labextension: ```bash jupyter labextension install @jupyter-widgets/jupyterlab-manager ``` This command defaults to installing the latest version of the **ipywidgets** JupyterLab extension. Depending on the version of JupyterLab you have installed, you may need to install [an older version](https://github.com/jupyter-widgets/ipywidgets/tree/main/packages/jupyterlab-manager#version-compatibility). If you install this extension while JupyterLab is running, you will need to refresh the page or restart JupyterLab before the changes take effect. **Note:** A clean reinstall of the JupyterLab extension can be done by first running the `jupyter lab clean` command which will remove the staging and static directories from the lab directory. The location of the lab directory can be queried by executing the command `jupyter lab path` in your terminal. ## Installing into classic Jupyter Notebook 5.2 or earlier If you have an old version of Jupyter Notebook installed (version 5.2 or earlier), you may need to manually enable the ipywidgets notebook extension with: ```bash jupyter nbextension enable --py widgetsnbextension ``` When using [virtualenv](https://virtualenv.pypa.io/en/stable/) and working in an activated virtual environment, the `--sys-prefix` option may be required to enable the extension and keep the environment isolated (i.e. `jupyter nbextension enable --py widgetsnbextension --sys-prefix`). ## Frequently Asked Questions The issues in the [Reference milestone](https://github.com/jupyter-widgets/ipywidgets/issues?q=is%3Aopen+is%3Aissue+milestone%3AReference) on GitHub include many questions, discussions, and answers about ipywidgets. **Question**: When I display a widget or interact, I just see some text, such as `IntSlider(value=0)` or `interactive(children=(IntSlider(value=0, description='x', max=1), Output()), _dom_classes=('widget-interact',))`. What is wrong? **Answer**: A text representation of the widget is printed if the widget control is not available. It may mean the widget JavaScript is still loading. If the message persists in the Jupyter Notebook or JupyterLab, it likely means that the widgets JavaScript library is either not installed or not enabled. See the installation instructions above for setup instructions. If you see this message in another frontend (for example, a static rendering on GitHub or NBViewer), it may mean that your frontend doesn't currently support widgets. ipywidgets-8.1.5/docs/source/user_migration_guides.md000066400000000000000000000073031466162644600231000ustar00rootroot00000000000000# Migrating user code These are migration guides specifically for ipywidgets users. ## Migrating from 7.x to 8.0 For more details about the changes done for the 8.0 major version, please consult the [changelog](./changelog). ### Code #### FileUpload The `data` and `metadata` traits have been removed, and the `value` trait revamped to be a list of dicts containing the file information. The keys of these dicts are: - `content`: The buffer of file data - `name`: The name of the file - `type`: The MIME type of the file content - `size`: The size of the buffer in bytes - `last_modified`: A UTC datetime representing the "last modified" value reported for the file Suggested migration: Rewrite all usage of `FileUpload` to use the new structure. If you need to support both 7.x and 8.x, you can e.g. write functions `get_file_buffer` and similar to wrap reads from the widget: - For the `.value` attribute, to retrieve it in the original form, use `{f["name"]: f.content.tobytes() for f in uploader.value}`. - For the `.data` attribute, use `[f.content.tobytes() for f in uploader.value]`. - For the `.metadata` attribute, use `[{k: v for k, v in f.items() if k != "content"} for f in w.value]`. #### Tooltips As part of an effort to make it possible to [set tooltips for all widgets](https://github.com/jupyter-widgets/ipywidgets/pull/2680), the old `description_tooltip` attribute for certain widgets was deprecated. Now all widgets that inherit `DOMWidget` have the attribute `tooltip` instead. Suggested migration: Search and replace `description_tooltip` to `tooltip` when you no longer need to support ipywidgets 7. #### Description Sanitization The value of the `description` field of any widget that inherits `DescriptionWidget` (most widgets in ipywidgets) will now have its value sanitized for certain HTML content on the client side. If you are relying on HTML in this value, you might need to explicitly set the `description_allow_html` trait to `True`, depending on what kind of tags/attributes are used. Suggested migration: Only set `description_allow_html` if you are in full control of the value that is set. #### Layout.border While this change is strictly speaking backwards compatible, a word of caution is useful to those that want to use the new functionality: Four attributes have been added: `border_left`, `border_right`, `border_top` and `border_bottom`. These can be used to set the corresponding CSS border strings individually. Setting the `border` property overrides all of those four attributes to the new value of `border`. If the individual values are set to different values, _the `border` property will return `None` when you read its value_. #### Layout.overflow_x / overflow_y The previously deprecated traits `overflow_x` and `overflow_y` [have been removed](https://github.com/jupyter-widgets/ipywidgets/pull/2688). Please use the `overflow` trait instead. #### `Widget.widgets` and `Widget.widget_types` attributes The `Widget` class attributes `.widgets` and `.widget_types` are now deprecated and relocated to internal module-level private variables, opening up these attribute names on the `Widget` class for future uses. ### Deployments #### Embedded CDN Please note that the default CDN of ipywidgets has changed from unpkg to jsDelivr. If you rely on the CDN being unpkg, this can be overridden by specifying the data attribute `data-jupyter-widgets-cdn` on the HTML manager script tag. See [embedding](./embedding) for details. #### widgetsnbextension The `notebook` package is no longer a dependency of the `widgetsnbextension` package (therefore `notebook` is no longer a dependency of `ipywidgets`). If you need to install `notebook` with `ipywidgets`, you will need to install `notebook` explicitly. ipywidgets-8.1.5/examples/000077500000000000000000000000001466162644600155525ustar00rootroot00000000000000ipywidgets-8.1.5/examples/embed-amd/000077500000000000000000000000001466162644600173655ustar00rootroot00000000000000ipywidgets-8.1.5/examples/embed-amd/README.md000066400000000000000000000015251466162644600206470ustar00rootroot00000000000000# Using the HTML widget manager as a RequireJS AMD module ## Description This is an example project showing how to embed widgets in an HTML document using a RequireJS AMD module. In order to test the current development repo, make a symbolic link from the `packages/html-manager` directory to this directory and uncomment the `html-manager` paths config in `index.html`. The widget data in this example was generated from the following code: ```python from ipywidgets import VBox, jsdlink, IntSlider, Button s1, s2 = IntSlider(max=200, value=100), IntSlider(value=40) b = Button(icon='legal') jsdlink((s1, 'value'), (s2, 'max')) VBox([s1, s2, b]) ``` ## Try it 1. Start with a repository checkout, and run `yarn install` in the root directory. 2. Run `yarn build:examples` in the root directory. 3. Open the `index.html` file in this directory. ipywidgets-8.1.5/examples/embed-amd/index.html000066400000000000000000000166041466162644600213710ustar00rootroot00000000000000 ipywidgets-8.1.5/examples/web1/000077500000000000000000000000001466162644600164105ustar00rootroot00000000000000ipywidgets-8.1.5/examples/web1/README.md000066400000000000000000000010201466162644600176600ustar00rootroot00000000000000# Ad hoc widget manager for using Jupyter widgets in a plain web page ## Description This directory is an example project that shows how to use the Jupyter widgets library in a pure JavaScript context. This example implements a simple widget manager by extending the base widget manager from the `@jupyter-widgets/base` library. ## Try it 1. Start with a repository checkout, and run `yarn install` in the root directory. 2. Run `yarn build:examples` in the root directory. 3. Open the `index.html` file in this directory. ipywidgets-8.1.5/examples/web1/index.html000066400000000000000000000005631466162644600204110ustar00rootroot00000000000000

Widget Example 1

In this widget example, you will see a text box widget and a rendered HTML widget which are linked together. Type into the text box to see the HTML widget automatically updated. ipywidgets-8.1.5/examples/web1/index.js000066400000000000000000000040531466162644600200570ustar00rootroot00000000000000// Create a widget manager instance. var WidgetManager = require('./manager').WidgetManager; require('@jupyter-widgets/controls/css/widgets.css'); document.addEventListener('DOMContentLoaded', function (event) { var manager = new WidgetManager(document.body); /** * Helper function for creating and displaying widgets. * @return {Promise} */ function createWidget(widgetType, value, description) { // Create the widget model. return manager .new_model({ model_module: '@jupyter-widgets/controls', model_name: widgetType + 'Model', model_id: 'widget-1', // Create a view for the model. }) .then(function (model) { console.log(widgetType + ' model created'); model.set({ description: description || '', value: value, }); return manager.create_view(model); }, console.error.bind(console)) .then(function (view) { console.log(widgetType + ' view created'); manager.display_view(view); return view; }, console.error.bind(console)); } var defaultHTML = 'test text'; var textArea = createWidget('Textarea', defaultHTML, 'HTML:'); var html = createWidget('HTML', defaultHTML); // Create a link model. manager .new_model({ model_module: '@jupyter-widgets/controls', model_name: 'LinkModel', model_id: 'widget-2', state: { source: null, target: null, }, // Set the link model state. }) .then(function (link) { console.log('link created'); return Promise.all([textArea, html]).then(function (models) { console.log('setting link'); var textArea = models[0]; var html = models[1]; link.set({ source: [textArea.model, 'value'], target: [html.model, 'value'], }); link.save_changes(); console.log('link set'); }); }) .then(function () { var event = new Event('widgetsRendered'); document.dispatchEvent(event); }); }); ipywidgets-8.1.5/examples/web1/karma.config.js000066400000000000000000000033231466162644600213060ustar00rootroot00000000000000// Karma configuration // Generated on Mon Dec 07 2015 08:28:33 GMT-0800 (PST) module.exports = function (config) { var cfg = { // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter frameworks: ['mocha', 'chai'], // list of files / patterns to load in the browser files: ['built/index.built.js', 'test/**/*.js'], // list of files to exclude exclude: [], // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter reporters: ['mocha'], // web server port port: 9876, // enable / disable colors in the output (reporters and logs) colors: true, // level of logging // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_INFO, browserNoActivityTimeout: 30000, // enable / disable watching file and executing tests whenever any file changes autoWatch: false, // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['Chrome'], customLaunchers: { Chrome_travis_ci: { base: 'Chrome', flags: ['--no-sandbox'], }, }, // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: true, // Concurrency level // how many browser should be started simultanous concurrency: Infinity, }; if (process.env.TRAVIS) { cfg.browsers = ['Chrome_travis_ci']; } config.set(cfg); }; ipywidgets-8.1.5/examples/web1/manager.js000066400000000000000000000034341466162644600203640ustar00rootroot00000000000000var base = require('@jupyter-widgets/base'); var ManagerBase = require('@jupyter-widgets/base-manager').ManagerBase; var controls = require('@jupyter-widgets/controls'); var LuminoWidget = require('@lumino/widgets').Widget; class WidgetManager extends ManagerBase { constructor(el) { super(); this.el = el; } loadClass(className, moduleName, moduleVersion) { return new Promise(function (resolve, reject) { if (moduleName === '@jupyter-widgets/controls') { resolve(controls); } else if (moduleName === '@jupyter-widgets/base') { resolve(base); } else { var fallback = function (err) { let failedId = err.requireModules && err.requireModules[0]; if (failedId) { console.log( `Falling back to jsDelivr for ${moduleName}@${moduleVersion}` ); window.require( [ `https://cdn.jsdelivr.net/npm/${moduleName}@${moduleVersion}/dist/index.js`, ], resolve, reject ); } else { throw err; } }; window.require([`${moduleName}.js`], resolve, fallback); } }).then(function (module) { if (module[className]) { return module[className]; } else { return Promise.reject( `Class ${className} not found in module ${moduleName}@${moduleVersion}` ); } }); } display_view(view) { var that = this; return Promise.resolve(view).then((view) => { LuminoWidget.attach(view.luminoWidget, that.el); return view; }); } _get_comm_info() { return Promise.resolve({}); } _create_comm() { return Promise.reject('no comms available'); } } exports.WidgetManager = WidgetManager; ipywidgets-8.1.5/examples/web1/package.json000066400000000000000000000022231466162644600206750ustar00rootroot00000000000000{ "name": "@jupyter-widgets/example-web1", "version": "8.0.12", "private": true, "description": "Project that tests the ability to npm install jupyter-js-widgets within an npm project.", "license": "BSD-3-Clause", "author": "IPython", "main": "index.js", "scripts": { "build": "webpack", "clean": "rimraf built", "test": "npm run test:firefox && npm run test:chrome", "test:chrome": "npm run test:default", "test:default": "karma start karma.config.js --log-level debug", "test:firefox": "npm run test:default -- --browsers Firefox", "test:firefox:headless": "npm run test:default -- --browsers=FirefoxHeadless" }, "dependencies": { "@jupyter-widgets/base": "^6.0.10", "@jupyter-widgets/base-manager": "^1.0.11", "@jupyter-widgets/controls": "^5.0.11" }, "devDependencies": { "chai": "^4.0.0", "css-loader": "^6.5.1", "karma": "^6.3.3", "karma-chai": "^0.1.0", "karma-chrome-launcher": "^3.1.0", "karma-firefox-launcher": "^2.1.1", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", "mocha": "^9.0.0", "style-loader": "^3.3.1", "webpack": "^5.65.0" } } ipywidgets-8.1.5/examples/web1/test/000077500000000000000000000000001466162644600173675ustar00rootroot00000000000000ipywidgets-8.1.5/examples/web1/test/index.js000066400000000000000000000020001466162644600210240ustar00rootroot00000000000000const widgetsRendered = new Promise((resolve, reject) => { setTimeout( () => reject(Error('timeout waiting for widgets to render')), 5000 ); // 5s timeout const listener = () => { resolve(); document.removeEventListener('widgetsRendered', listener); }; document.addEventListener('widgetsRendered', listener); }); describe('index.html', function () { this.timeout(10000); beforeEach(() => { return widgetsRendered; }); describe('textArea', () => { it('exists', () => { expect(document.querySelector('textarea')).to.be.ok; }); it('correct value', () => { expect(document.querySelector('textarea').value).to.equal( 'test text' ); }); }); describe('html', () => { it('exists', () => { expect(document.querySelector('div.widget-html')).to.be.ok; }); it('correct value', () => { expect( document.querySelector('div.widget-html-content').innerHTML ).to.equal('test text'); }); }); }); ipywidgets-8.1.5/examples/web1/webpack.config.js000066400000000000000000000005211466162644600216240ustar00rootroot00000000000000var path = require('path'); var webpack = require('webpack'); module.exports = { mode: 'development', devtool: 'source-map', entry: './index.js', output: { filename: 'index.built.js', path: path.resolve(__dirname, 'built'), }, module: { rules: [{ test: /\.css$/i, use: ['style-loader', 'css-loader'] }], }, }; ipywidgets-8.1.5/examples/web2/000077500000000000000000000000001466162644600164115ustar00rootroot00000000000000ipywidgets-8.1.5/examples/web2/README.md000066400000000000000000000022411466162644600176670ustar00rootroot00000000000000# Ad hoc widget manager reading a file with the `application/vnd.jupyter.widget-state+json` mime type. ## Description This directory is an example project that shows how to use the Jupyter widgets library in a pure JavaScript context. This example implements a simple widget manager by extending the base widget manager from the `@jupyter-widgets/base` library. This custom widget manager reads the state of the widget manager in the `widget_state.json` file, which respects the standardized JSON schema for the `application/vnd.jupyter.widget-state+json` mime type. Such a `widget_state.json` file can be generated from rendered widgets in the classic Jupyter Notebook with the _Download widget state_ action. This example also displays a read-only text area containing the code provided in the `widget_code.json`, which we used to generate the widget state. This example does not implement the communication with a Python backend. For such an example, check out the `web3` example. ## Try it 1. Start with a repository checkout, and run `yarn install` in the root directory. 2. Run `yarn build:examples` in the root directory. 3. Open the `index.html` file in this directory. ipywidgets-8.1.5/examples/web2/index.html000066400000000000000000000020541466162644600204070ustar00rootroot00000000000000

ipywidgets-8.1.5/examples/web2/index.js000066400000000000000000000020321466162644600200530ustar00rootroot00000000000000var CodeMirror = require('codemirror'); require('codemirror/lib/codemirror.css'); require('codemirror/mode/python/python'); var WidgetManager = require('./manager').WidgetManager; require('@jupyter-widgets/controls/css/widgets.css'); require('font-awesome/css/font-awesome.css'); document.addEventListener('DOMContentLoaded', function (event) { var code = require('./widget_code.py'); var inputarea = document.getElementsByClassName('inputarea')[0]; new CodeMirror(inputarea, { value: code, mode: 'python', tabSize: 4, showCursorWhenSelecting: true, viewportMargin: Infinity, readOnly: true, }); var state = require('./widget_state.json'); var widgetarea = document.getElementsByClassName('widgetarea')[0]; var manager = new WidgetManager(widgetarea); manager .set_state(state) .then((models) => manager.create_view( models.find( (element) => element.model_id == '8621699ecc804983a612f09b7dfe806b' ) ) ) .then((view) => manager.display_view(view)); }); ipywidgets-8.1.5/examples/web2/manager.js000066400000000000000000000034421466162644600203640ustar00rootroot00000000000000var base = require('@jupyter-widgets/base'); var ManagerBase = require('@jupyter-widgets/base-manager').ManagerBase; var controls = require('@jupyter-widgets/controls'); var LuminoWidget = require('@lumino/widgets').Widget; class WidgetManager extends ManagerBase { constructor(el) { super(); this.el = el; } loadClass(className, moduleName, moduleVersion) { return new Promise(function (resolve, reject) { if (moduleName === '@jupyter-widgets/controls') { resolve(controls); } else if (moduleName === '@jupyter-widgets/base') { resolve(base); } else { var fallback = function (err) { let failedId = err.requireModules && err.requireModules[0]; if (failedId) { console.log( `Falling back to jsDelivr for ${moduleName}@${moduleVersion}` ); window.require( [ `https://cdn.jsdelivr.net/npm/${moduleName}@${moduleVersion}/dist/index.js`, ], resolve, reject ); } else { throw err; } }; window.require([`${moduleName}.js`], resolve, fallback); } }).then(function (module) { if (module[className]) { return module[className]; } else { return Promise.reject( `Class ${className} not found in module ${moduleName}@${moduleVersion}` ); } }); } display_view(view) { var that = this; return Promise.resolve(view).then(function (view) { LuminoWidget.attach(view.luminoWidget, that.el); return view; }); } _get_comm_info() { return Promise.resolve({}); } _create_comm() { return Promise.reject('no comms available'); } } exports.WidgetManager = WidgetManager; ipywidgets-8.1.5/examples/web2/package.json000066400000000000000000000013621466162644600207010ustar00rootroot00000000000000{ "name": "@jupyter-widgets/example-web2", "version": "8.0.12", "private": true, "description": "Project that tests the ability to npm install jupyter-js-widgets within an npm project.", "license": "BSD-3-Clause", "author": "IPython", "main": "index.js", "scripts": { "build": "webpack", "clean": "rimraf built", "test": "npm run test:default", "test:default": "echo \"No test specified\"" }, "dependencies": { "@jupyter-widgets/base": "^6.0.10", "@jupyter-widgets/base-manager": "^1.0.11", "@jupyter-widgets/controls": "^5.0.11", "codemirror": "^5.48.0", "font-awesome": "^4.7.0" }, "devDependencies": { "css-loader": "^6.5.1", "style-loader": "^3.3.1", "webpack": "^5.65.0" } } ipywidgets-8.1.5/examples/web2/webpack.config.js000066400000000000000000000010471466162644600216310ustar00rootroot00000000000000var path = require('path'); var webpack = require('webpack'); module.exports = { mode: 'development', devtool: 'source-map', entry: './index.js', output: { filename: 'index.built.js', path: path.resolve(__dirname, 'built'), }, module: { rules: [ { test: /\.css$/i, use: ['style-loader', 'css-loader'] }, { test: /\.py$/i, type: 'asset/source' }, // required to load font-awesome { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource' }, { test: /\.svg$/i, type: 'asset' }, ], }, }; ipywidgets-8.1.5/examples/web2/widget_code.py000066400000000000000000000003041466162644600212350ustar00rootroot00000000000000from ipywidgets import VBox, jsdlink, IntSlider, Button s1, s2 = IntSlider(max=200, value=100), IntSlider(value=40) b = Button(icon='legal') jsdlink((s1, 'value'), (s2, 'max')) VBox([s1, s2, b]) ipywidgets-8.1.5/examples/web2/widget_state.json000066400000000000000000000110411466162644600217640ustar00rootroot00000000000000{ "version_major": 2, "version_minor": 0, "state": { "961d612211fe4c64a70f48942d885c14": { "model_name": "LayoutModel", "model_module": "@jupyter-widgets/base", "model_module_version": "1.0.0", "state": { "_model_module_version": "1.0.0", "_view_module_version": "1.0.0", "_view_count": 1 } }, "564e75ddea4c4ea0a32c4bd39ed0ed6d": { "model_name": "SliderStyleModel", "model_module": "@jupyter-widgets/controls", "model_module_version": "1.0.0", "state": { "_model_module_version": "1.0.0", "_view_module_version": "1.0.0", "_view_count": 1 } }, "a8b1ae50aada4d929397b907115bfc2c": { "model_name": "IntSliderModel", "model_module": "@jupyter-widgets/controls", "model_module_version": "1.0.0", "state": { "style": "IPY_MODEL_564e75ddea4c4ea0a32c4bd39ed0ed6d", "_view_module_version": "1.0.0", "max": 200, "value": 100, "_model_module_version": "1.0.0", "layout": "IPY_MODEL_961d612211fe4c64a70f48942d885c14", "_view_count": 1 } }, "b63481ca8b7943aa85d097a114a931f5": { "model_name": "LayoutModel", "model_module": "@jupyter-widgets/base", "model_module_version": "1.0.0", "state": { "_model_module_version": "1.0.0", "_view_module_version": "1.0.0", "_view_count": 1 } }, "d86e0cb348eb48bf97f14906a9406731": { "model_name": "SliderStyleModel", "model_module": "@jupyter-widgets/controls", "model_module_version": "1.0.0", "state": { "_model_module_version": "1.0.0", "_view_module_version": "1.0.0", "_view_count": 1 } }, "289e54d14b7c4c6d8ac18b4c86ab514c": { "model_name": "IntSliderModel", "model_module": "@jupyter-widgets/controls", "model_module_version": "1.0.0", "state": { "style": "IPY_MODEL_d86e0cb348eb48bf97f14906a9406731", "_view_module_version": "1.0.0", "value": 40, "_model_module_version": "1.0.0", "layout": "IPY_MODEL_b63481ca8b7943aa85d097a114a931f5", "_view_count": 1 } }, "bb589d8dc365404b94e73a153407128f": { "model_name": "LayoutModel", "model_module": "@jupyter-widgets/base", "model_module_version": "1.0.0", "state": { "_model_module_version": "1.0.0", "_view_module_version": "1.0.0", "_view_count": 1 } }, "19a24d8ea5a248be8db79790290ae2a1": { "model_name": "ButtonStyleModel", "model_module": "@jupyter-widgets/controls", "model_module_version": "1.0.0", "state": { "_model_module_version": "1.0.0", "_view_module_version": "1.0.0", "_view_count": 1 } }, "965bbfeaddd74b9baa488c7f6ac13027": { "model_name": "ButtonModel", "model_module": "@jupyter-widgets/controls", "model_module_version": "1.0.0", "state": { "style": "IPY_MODEL_19a24d8ea5a248be8db79790290ae2a1", "_view_module_version": "1.0.0", "icon": "legal", "_model_module_version": "1.0.0", "layout": "IPY_MODEL_bb589d8dc365404b94e73a153407128f", "_view_count": 1 } }, "6edd9d3360cc47c8aceff0ba11edeca9": { "model_name": "DirectionalLinkModel", "model_module": "@jupyter-widgets/controls", "model_module_version": "1.0.0", "state": { "_model_module_version": "1.0.0", "target": ["IPY_MODEL_289e54d14b7c4c6d8ac18b4c86ab514c", "max"], "source": ["IPY_MODEL_a8b1ae50aada4d929397b907115bfc2c", "value"], "_view_module_version": "1.0.0", "_view_name": "" } }, "d7d14e74f61f4b3bb5f53a713bcadced": { "model_name": "LayoutModel", "model_module": "@jupyter-widgets/base", "model_module_version": "1.0.0", "state": { "_model_module_version": "1.0.0", "_view_module_version": "1.0.0", "_view_count": 1 } }, "8621699ecc804983a612f09b7dfe806b": { "model_name": "VBoxModel", "model_module": "@jupyter-widgets/controls", "model_module_version": "1.0.0", "state": { "_view_module_version": "1.0.0", "children": [ "IPY_MODEL_a8b1ae50aada4d929397b907115bfc2c", "IPY_MODEL_289e54d14b7c4c6d8ac18b4c86ab514c", "IPY_MODEL_965bbfeaddd74b9baa488c7f6ac13027" ], "_model_module_version": "1.0.0", "layout": "IPY_MODEL_d7d14e74f61f4b3bb5f53a713bcadced", "_view_count": 1 } } } } ipywidgets-8.1.5/examples/web3/000077500000000000000000000000001466162644600164125ustar00rootroot00000000000000ipywidgets-8.1.5/examples/web3/.gitignore000066400000000000000000000000321466162644600203750ustar00rootroot00000000000000lib/ built/ node_modules/ ipywidgets-8.1.5/examples/web3/.jshintrc000066400000000000000000000000271466162644600202360ustar00rootroot00000000000000{ "esnext": true } ipywidgets-8.1.5/examples/web3/README.md000066400000000000000000000020161466162644600176700ustar00rootroot00000000000000# Using jupyter-js-widgets in non-notebook, web context ## Description This directory is an example project that shows how to use Jupyter widgets in a web context other than the notebook. This example requires a Jupyter notebook server to be running. The user is prompted with a dialog to provide the URL with a running notebook server. This example also displays read-only text area containing the code provided in the `widget_code.json`, which we used to generate the widget state. ## Try it 1. Start with a repository checkout, and run `yarn install` in the root directory. 2. Run `yarn build:examples` in the root directory. 3. Change to this directory 4. Run `yarn host` 5. In a new terminal run `python -m notebook --no-browser --NotebookApp.allow_origin="*" --NotebookApp.disable_check_xsrf=True --NotebookApp.token=''`. **WARNING: This starts an insecure Jupyter notebook server. Do not do this in production.** 6. In a web browser, navigate to `http://localhost:8080/` (or the address specified by the `yarn host` command) ipywidgets-8.1.5/examples/web3/index.html000066400000000000000000000020511466162644600204050ustar00rootroot00000000000000
ipywidgets-8.1.5/examples/web3/jupyter-logo.svg000066400000000000000000000253721466162644600216040ustar00rootroot00000000000000 Group.svg Created using Figma 0.90 ipywidgets-8.1.5/examples/web3/package.json000066400000000000000000000021221466162644600206750ustar00rootroot00000000000000{ "name": "@jupyter-widgets/example-web3", "version": "8.0.13", "private": true, "description": "Project that tests the ability to npm install jupyter-js-widgets within an npm project.", "license": "BSD-3-Clause", "author": "IPython", "main": "lib/index.js", "scripts": { "build": "npm run clean && tsc && node scripts/copyfiles.js && webpack", "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo && rimraf built", "host": "http-server", "test": "npm run test:default", "test:default": "echo \"No test specified\"" }, "dependencies": { "@jupyter-widgets/base": "^6.0.10", "@jupyter-widgets/controls": "^5.0.11", "@jupyter-widgets/html-manager": "^1.0.13", "@jupyterlab/services": "^6.0.0 || ^7.0.0", "codemirror": "^5.48.0", "font-awesome": "^4.7.0", "http-server": "^14.0.0" }, "devDependencies": { "@types/codemirror": "^5.60.0", "@types/node": "^17.0.2", "css-loader": "^6.5.1", "fs-extra": "^10.0.0", "rimraf": "^3.0.2", "style-loader": "^3.3.1", "typescript": "~4.9.4", "webpack": "^5.65.0" } } ipywidgets-8.1.5/examples/web3/scripts/000077500000000000000000000000001466162644600201015ustar00rootroot00000000000000ipywidgets-8.1.5/examples/web3/scripts/copyfiles.js000066400000000000000000000002711466162644600224340ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. var fs = require('fs-extra'); fs.copySync('src/widgets.css', 'lib/widgets.css'); ipywidgets-8.1.5/examples/web3/src/000077500000000000000000000000001466162644600172015ustar00rootroot00000000000000ipywidgets-8.1.5/examples/web3/src/index.ts000066400000000000000000000042601466162644600206620ustar00rootroot00000000000000import CodeMirror from 'codemirror'; import 'codemirror/lib/codemirror.css'; import 'codemirror/mode/python/python'; import 'font-awesome/css/font-awesome.css'; import { WidgetManager } from './manager'; import { KernelManager, ServerConnection, KernelMessage, } from '@jupyterlab/services'; const BASEURL = prompt('Notebook BASEURL', 'http://localhost:8888'); if (BASEURL === null) { alert('A base URL is needed to run the example!'); throw new Error('A base URL is needed to run the example!'); } const WSURL = 'ws:' + BASEURL.split(':').slice(1).join(':'); document.addEventListener('DOMContentLoaded', async function (event) { // Connect to the notebook webserver. const connectionInfo = ServerConnection.makeSettings({ baseUrl: BASEURL!, wsUrl: WSURL, }); const kernelManager = new KernelManager({ serverSettings: connectionInfo }); const kernel = await kernelManager.startNew(); // Create a codemirror instance const code = require('../widget_code.json').join('\n'); const inputarea = document.getElementsByClassName( 'inputarea' )[0] as HTMLElement; CodeMirror(inputarea, { value: code, mode: 'python', tabSize: 4, showCursorWhenSelecting: true, viewportMargin: Infinity, readOnly: true, }); // Create the widget area and widget manager const widgetarea = document.getElementsByClassName( 'widgetarea' )[0] as HTMLElement; const manager = new WidgetManager(kernel); // Run backend code to create the widgets. You could also create the // widgets in the frontend, like the other widget examples demonstrate. const execution = kernel.requestExecute({ code: code }); execution.onIOPub = async (msg): Promise => { // If we have a display message, display the widget. if (KernelMessage.isDisplayDataMsg(msg)) { const widgetData: any = msg.content.data['application/vnd.jupyter.widget-view+json']; if (widgetData !== undefined && widgetData.version_major === 2) { if (manager.has_model(widgetData.model_id)) { const model = await manager.get_model(widgetData.model_id)!; manager.display_view(manager.create_view(model), widgetarea); } } } }; }); ipywidgets-8.1.5/examples/web3/src/manager.ts000066400000000000000000000022151466162644600211630ustar00rootroot00000000000000import * as base from '@jupyter-widgets/base'; import { Kernel } from '@jupyterlab/services'; import { HTMLManager } from '@jupyter-widgets/html-manager'; import './widgets.css'; export class WidgetManager extends HTMLManager { constructor(kernel: Kernel.IKernelConnection) { super(); this.kernel = kernel; kernel.registerCommTarget(this.comm_target_name, async (comm, msg) => { const oldComm = new base.shims.services.Comm(comm); await this.handle_comm_open(oldComm, msg); }); } /** * Create a comm. */ async _create_comm( target_name: string, model_id: string, data?: any, metadata?: any ): Promise { const comm = this.kernel.createComm(target_name, model_id); if (data || metadata) { comm.open(data, metadata); } return Promise.resolve(new base.shims.services.Comm(comm)); } /** * Get the currently-registered comms. */ _get_comm_info(): Promise { return this.kernel .requestCommInfo({ target_name: this.comm_target_name }) .then((reply) => (reply.content as any).comms); } kernel: Kernel.IKernelConnection; } ipywidgets-8.1.5/examples/web3/src/widgets.css000066400000000000000000000005211466162644600213570ustar00rootroot00000000000000/* Copyright (c) Jupyter Development Team. * Distributed under the terms of the Modified BSD License. */ /* * This example shows how to customize the theming and still compile the CSS * down to something that all browsers support. */ @import '@jupyter-widgets/controls/css/widgets.css'; :root { --jp-widgets-border-width: 2px; } ipywidgets-8.1.5/examples/web3/tsconfig.json000066400000000000000000000002041466162644600211150ustar00rootroot00000000000000{ "extends": "../../tsconfigbase", "compilerOptions": { "outDir": "lib", "rootDir": "src" }, "include": ["src/*"] } ipywidgets-8.1.5/examples/web3/webpack.config.js000066400000000000000000000012351466162644600216310ustar00rootroot00000000000000const postcss = require('postcss'); var path = require('path'); const webpack = require('webpack'); module.exports = { mode: 'development', devtool: 'source-map', entry: './lib/index.js', output: { filename: 'index.built.js', path: path.resolve(__dirname, 'built'), }, module: { rules: [ { test: /\.css$/i, use: ['style-loader', 'css-loader'] }, // required to load font-awesome { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource' }, { test: /\.svg$/i, type: 'asset' }, ], }, plugins: [ new webpack.DefinePlugin({ process: { cwd: () => '/', env: {}, }, }), ], }; ipywidgets-8.1.5/examples/web3/widget_code.json000066400000000000000000000010471466162644600215640ustar00rootroot00000000000000[ "from ipywidgets import IntSlider, Output, Text, VBox", "from IPython.display import Image, display", "", "s = IntSlider(min=1, max=500, value=200, description='Width')", "t = Text(description='Area', disabled=True)", "o = Output()", "display(VBox([s, t, o]))", "", "def update(change=None):", " width = s.value", " t.value = str(width ** 2)", " o.outputs = ()", " img = Image(url='jupyter-logo.svg', width=width)", " o.append_display_data(img)", "", "s.observe(update, names='value')", "update()" ] ipywidgets-8.1.5/examples/web4/000077500000000000000000000000001466162644600164135ustar00rootroot00000000000000ipywidgets-8.1.5/examples/web4/README.md000066400000000000000000000023551466162644600176770ustar00rootroot00000000000000# Using the HTML widget manager ## Description This is an example project showing how to embed widgets in an HTML document. We use the local `index.built.js` that we build to make sure this example reflects the current state of the source repository. To use the latest release of the HTML wiget manager in your own project, copy the `index.html` file and replace `` with `` If you need a specific version of the HTML widget manager, you can include a semver range. For example: `` The widget data in this example was generated from the following code: ```python from ipywidgets import VBox, jsdlink, IntSlider, Button s1, s2 = IntSlider(max=200, value=100), IntSlider(value=40) b = Button(icon='legal') jsdlink((s1, 'value'), (s2, 'max')) VBox([s1, s2, b]) ``` ## Try it 1. Start with a repository checkout, and run `yarn install` in the root directory. 2. Run `yarn build:examples` in the root directory. 3. Open the `index.html` file in this directory. ipywidgets-8.1.5/examples/web4/index.html000066400000000000000000000150021466162644600204060ustar00rootroot00000000000000 ipywidgets-8.1.5/examples/web4/index.js000066400000000000000000000000641466162644600200600ustar00rootroot00000000000000require('@jupyter-widgets/html-manager/lib/embed'); ipywidgets-8.1.5/examples/web4/package.json000066400000000000000000000012011466162644600206730ustar00rootroot00000000000000{ "name": "@jupyter-widgets/example-web4", "version": "8.0.13", "private": true, "description": "Project that tests the ability to npm install jupyter-js-widgets within an npm project.", "license": "BSD-3-Clause", "author": "IPython", "main": "index.js", "scripts": { "build": "webpack", "clean": "rimraf built", "test": "npm run test:default", "test:default": "echo \"No test specified\"" }, "dependencies": { "@jupyter-widgets/html-manager": "^1.0.13", "font-awesome": "^4.7.0" }, "devDependencies": { "css-loader": "^6.5.1", "style-loader": "^3.3.1", "webpack": "^5.65.0" } } ipywidgets-8.1.5/examples/web4/webpack.config.js000066400000000000000000000007661466162644600216420ustar00rootroot00000000000000var path = require('path'); var webpack = require('webpack'); module.exports = { mode: 'development', devtool: 'source-map', entry: './index.js', output: { filename: 'index.built.js', path: path.resolve(__dirname, 'built'), }, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, // required to load font-awesome { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource' }, { test: /\.svg$/i, type: 'asset' }, ], }, }; ipywidgets-8.1.5/lerna.json000066400000000000000000000001171466162644600157270ustar00rootroot00000000000000{ "npmClient": "yarn", "useWorkspaces": true, "version": "independent" } ipywidgets-8.1.5/package.json000066400000000000000000000046741466162644600162350ustar00rootroot00000000000000{ "private": true, "workspaces": [ "packages/*", "python/widgetsnbextension", "examples/*", "python/jupyterlab_widgets" ], "scripts": { "build": "lerna run build --stream --ignore \"@jupyter-widgets/example-*\"", "build:examples": "lerna run build --stream --scope \"@jupyter-widgets/example-*\" --include-filtered-dependencies", "build:labextension": "lerna run --stream build:labextension", "build:lib": "lerna run build --stream --scope \"@jupyter-widgets/meta\"", "build:nbextension": "lerna run --stream build:nbextension", "build:test": "lerna run build:test --stream --ignore \"@jupyter-widgets/example-*\"", "clean": "lerna run --stream clean", "docs": "typedoc", "eslint": "eslint . --fix --ignore-path .gitignore --ext .ts,.tsx", "eslint:check": "eslint . --ignore-path .gitignore --ext .ts,.tsx", "integrity": "node scripts/package-integrity.js", "integrity2": "node buildutils/lib/integrity.js", "lint": "yarn && yarn prettier && yarn eslint", "lint:check": "yarn prettier:check && yarn eslint:check", "prettier": "yarn prettier:base --list-different --write", "prettier:base": "prettier --ignore-path .gitignore \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.yml,.yaml,.md}\"", "prettier:check": "yarn prettier:base --check", "publish": "yarn clean && yarn build && lerna publish --pre-dist-tag next from-git", "sort-package-json": "lerna exec --stream --parallel sort-package-json && sort-package-json", "update-dependency": "update-dependency --lerna", "updated": "lerna updated", "bump": "yarn clean && yarn build && lerna version --no-push -m \"Bump version\" ", "watch": "lerna run --stream watch" }, "husky": { "hooks": { "pre-commit": "lint-staged", "pre-push": "yarn integrity" } }, "resolutions": { "typescript": "~4.9.4" }, "devDependencies": { "@jupyterlab/buildutils": "^3.5.2 || ^4.0.0", "@typescript-eslint/eslint-plugin": "^5.48.2", "@typescript-eslint/parser": "^5.48.2", "eslint": "^8.32.0", "eslint-config-prettier": "^8.6.0", "eslint-plugin-prettier": "^4.2.1", "glob": "^10.2.4", "husky": "^7.0.4", "lerna": "^5.4.3", "lint-staged": "^12.1.3", "prettier": "^2.8.3", "rimraf": "^5.0.1", "sort-package-json": "^2.1.0", "typedoc": "~0.23.24", "typescript": "~4.9.4" }, "engines": { "node": ">=14", "npm": "please-use-yarn", "yarn": ">=3" } } ipywidgets-8.1.5/packages/000077500000000000000000000000001466162644600155125ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base-manager/000077500000000000000000000000001466162644600200345ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base-manager/.gitignore000066400000000000000000000000241466162644600220200ustar00rootroot00000000000000lib/ test/coverage/ ipywidgets-8.1.5/packages/base-manager/.jshintrc000066400000000000000000000000731466162644600216610ustar00rootroot00000000000000{ "esnext": true, "expr": true, "node": true } ipywidgets-8.1.5/packages/base-manager/.npmignore000066400000000000000000000001151466162644600220300ustar00rootroot00000000000000.DS_Store node_modules/ test/ .jshintrc karma.conf.js build_css.js examples/ ipywidgets-8.1.5/packages/base-manager/package.json000066400000000000000000000047261466162644600223330ustar00rootroot00000000000000{ "name": "@jupyter-widgets/base-manager", "version": "1.0.11", "description": "Jupyter interactive widgets - base manager", "repository": { "type": "git", "url": "https://github.com/jupyter-widgets/ipywidgets.git" }, "license": "BSD-3-Clause", "author": "Project Jupyter", "main": "lib/index.js", "typings": "lib/index.d.ts", "files": [ "lib/**/*.d.ts", "lib/**/*.js", "css/*.css" ], "scripts": { "build": "npm run build:src", "build:src": "tsc --build", "build:test": "tsc --build test && webpack --config test/webpack.conf.js", "clean": "npm run clean:src", "clean:src": "rimraf lib && rimraf tsconfig.tsbuildinfo", "prepublish": "npm run clean && npm run build", "test": "npm run test:unit", "test:coverage": "npm run build:test && webpack --config test/webpack-cov.conf.js && karma start test/karma-cov.conf.js", "test:unit": "npm run test:unit:firefox && npm run test:unit:chrome", "test:unit:chrome": "npm run test:unit:default -- --browsers=Chrome", "test:unit:default": "npm run build:test && karma start test/karma.conf.js --log-level debug", "test:unit:firefox": "npm run test:unit:default -- --browsers=Firefox", "test:unit:firefox:headless": "npm run test:unit:default -- --browsers=FirefoxHeadless", "test:unit:ie": "npm run test:unit:default -- --browsers=IE" }, "dependencies": { "@jupyter-widgets/base": "^6.0.10", "@jupyterlab/services": "^6.0.0 || ^7.0.0", "@lumino/coreutils": "^1.11.1 || ^2", "base64-js": "^1.2.1", "sanitize-html": "^2.3" }, "devDependencies": { "@types/base64-js": "^1.2.5", "@types/chai": "^4.1.7", "@types/chai-as-promised": "^7.1.0", "@types/expect.js": "^0.3.29", "@types/mocha": "^9.0.0", "@types/sanitize-html": "^2.6.0", "@types/sinon": "^10.0.2", "@types/sinon-chai": "^3.2.2", "chai": "^4.0.0", "chai-as-promised": "^7.0.0", "expect.js": "^0.3.1", "istanbul-instrumenter-loader": "^3.0.1", "karma": "^6.3.3", "karma-chrome-launcher": "^3.1.0", "karma-coverage": "^2.0.3", "karma-firefox-launcher": "^2.1.1", "karma-ie-launcher": "^1.0.0", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", "karma-webpack": "^5.0.0", "mocha": "^9.0.0", "npm-run-all": "^4.1.5", "rimraf": "^3.0.2", "sinon": "^12.0.1", "sinon-chai": "^3.3.0", "typescript": "~4.9.4", "webpack": "^5.65.0" }, "publishConfig": { "access": "public" } } ipywidgets-8.1.5/packages/base-manager/src/000077500000000000000000000000001466162644600206235ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base-manager/src/index.ts000066400000000000000000000002411466162644600222770ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. export * from './manager-base'; export * from './utils'; ipywidgets-8.1.5/packages/base-manager/src/latex.ts000066400000000000000000000144561466162644600223220ustar00rootroot00000000000000/*----------------------------------------------------------------------------- | Copyright (c) Jupyter Development Team. | Distributed under the terms of the Modified BSD License. |----------------------------------------------------------------------------*/ // Some magic for deferring mathematical expressions to MathJax // by hiding them from the Markdown parser. // Some of the code here is adapted with permission from Davide Cervone // under the terms of the Apache2 license governing the MathJax project. // Other minor modifications are also due to StackExchange and are used with // permission. const inline = '$'; // the inline math delimiter // MATHSPLIT contains the pattern for math delimiters and special symbols // needed for searching for math in the text input. const MATHSPLIT = /(\$\$?|\\(?:begin|end)\{[a-z]*\*?\}|\\[{}$]|[{}]|(?:\n\s*)+|@@\d+@@|\\\\(?:\(|\)|\[|\]))/i; /** * Break up the text into its component parts and search * through them for math delimiters, braces, linebreaks, etc. * Math delimiters must match and braces must balance. * Don't allow math to pass through a double linebreak * (which will be a paragraph). */ export function removeMath(text: string): { text: string; math: string[] } { const math: string[] = []; // stores math strings for later let start: number | null = null; let end: string | null = null; let last: number | null = null; let braces = 0; let deTilde: (text: string) => string; // Except for extreme edge cases, this should catch precisely those pieces of the markdown // source that will later be turned into code spans. While MathJax will not TeXify code spans, // we still have to consider them at this point; the following issue has happened several times: // // `$foo` and `$bar` are variables. --> $foo ` and `$bar are variables. const hasCodeSpans = /`/.test(text); if (hasCodeSpans) { text = text .replace(/~/g, '~T') .replace(/(^|[^\\])(`+)([^\n]*?[^`\n])\2(?!`)/gm, (wholematch) => wholematch.replace(/\$/g, '~D') ); deTilde = (text: string) => { return text.replace(/~([TD])/g, (wholematch, character) => character === 'T' ? '~' : inline ); }; } else { deTilde = (text: string) => { return text; }; } let blocks = text.replace(/\r\n?/g, '\n').split(MATHSPLIT); for (let i = 1, m = blocks.length; i < m; i += 2) { const block = blocks[i]; if (block.charAt(0) === '@') { // // Things that look like our math markers will get // stored and then retrieved along with the math. // blocks[i] = '@@' + math.length + '@@'; math.push(block); } else if (start !== null) { // // If we are in math, look for the end delimiter, // but don't go past double line breaks, and // and balance braces within the math. // if (block === end) { if (braces) { last = i; } else { blocks = processMath(start, i, deTilde, math, blocks); start = null; end = null; last = null; } } else if (block.match(/\n.*\n/)) { if (last !== null) { i = last; blocks = processMath(start, i, deTilde, math, blocks); } start = null; end = null; last = null; braces = 0; } else if (block === '{') { braces++; } else if (block === '}' && braces) { braces--; } } else { // // Look for math start delimiters and when // found, set up the end delimiter. // if (block === inline || block === '$$') { start = i; end = block; braces = 0; } else if (block === '\\\\(' || block === '\\\\[') { start = i; end = block.slice(-1) === '(' ? '\\\\)' : '\\\\]'; braces = 0; } else if (block.substr(1, 5) === 'begin') { start = i; end = '\\end' + block.substr(6); braces = 0; } } } if (start !== null && last !== null) { blocks = processMath(start, last, deTilde, math, blocks); start = null; end = null; last = null; } return { text: deTilde(blocks.join('')), math }; } /** * Put back the math strings that were saved, * and clear the math array (no need to keep it around). */ export function replaceMath(text: string, math: string[]): string { /** * Replace a math placeholder with its corresponding group. * The math delimiters "\\(", "\\[", "\\)" and "\\]" are replaced * removing one backslash in order to be interpreted correctly by MathJax. */ const process = (match: string, n: number): string => { let group = math[n]; if ( group.substr(0, 3) === '\\\\(' && group.substr(group.length - 3) === '\\\\)' ) { group = '\\(' + group.substring(3, group.length - 3) + '\\)'; } else if ( group.substr(0, 3) === '\\\\[' && group.substr(group.length - 3) === '\\\\]' ) { group = '\\[' + group.substring(3, group.length - 3) + '\\]'; } return group; }; // Replace all the math group placeholders in the text // with the saved strings. return text.replace(/@@(\d+)@@/g, process); } /** * Process math blocks. * * The math is in blocks i through j, so * collect it into one block and clear the others. * Replace &, <, and > by named entities. * For IE, put
at the ends of comments since IE removes \n. * Clear the current math positions and store the index of the * math, then push the math string onto the storage array. * The preProcess function is called on all blocks if it has been passed in */ function processMath( i: number, j: number, preProcess: (input: string) => string, math: string[], blocks: string[] ): string[] { let block = blocks .slice(i, j + 1) .join('') .replace(/&/g, '&') // use HTML entity for & .replace(//g, '>'); // use HTML entity for > if (navigator && navigator.appName === 'Microsoft Internet Explorer') { block = block.replace(/(%[^\n]*)\n/g, '$1
\n'); } while (j > i) { blocks[j] = ''; j--; } blocks[i] = '@@' + math.length + '@@'; // replace the current block text with a unique tag to find later if (preProcess) { block = preProcess(block); } math.push(block); return blocks; } ipywidgets-8.1.5/packages/base-manager/src/manager-base.ts000066400000000000000000000676571466162644600235420ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as services from '@jupyterlab/services'; import * as widgets from '@jupyter-widgets/base'; import { JSONObject, PartialJSONObject, PromiseDelegate, } from '@lumino/coreutils'; import { DOMWidgetView, WidgetModel, WidgetView, DOMWidgetModel, IClassicComm, ICallbacks, put_buffers, remove_buffers, resolvePromisesDict, ISerializedState, reject, uuid, PROTOCOL_VERSION, IWidgetManager, IModelOptions, IWidgetOptions, IBackboneModelOptions, } from '@jupyter-widgets/base'; import { base64ToBuffer, bufferToBase64, hexToBuffer } from './utils'; import { removeMath, replaceMath } from './latex'; import sanitize from 'sanitize-html'; const PROTOCOL_MAJOR_VERSION = PROTOCOL_VERSION.split('.', 1)[0]; /** * The control comm target name. */ export const CONTROL_COMM_TARGET = 'jupyter.widget.control'; /** * The supported version for the control comm channel. */ export const CONTROL_COMM_PROTOCOL_VERSION = '1.0.0'; /** * Time (in ms) after which we consider the control comm target not responding. */ export const CONTROL_COMM_TIMEOUT = 4000; /** * Sanitize HTML-formatted descriptions. */ function default_inline_sanitize(s: string): string { const allowedTags = [ 'a', 'abbr', 'b', 'code', 'em', 'i', 'img', 'li', 'ol', 'span', 'strong', 'ul', ]; const allowedAttributes = { '*': ['aria-*', 'class', 'style', 'title'], a: ['href'], img: ['src'], style: ['media', 'type'], }; return sanitize(s, { allowedTags: allowedTags, allowedAttributes: allowedAttributes, }); } export interface IState extends PartialJSONObject { buffers?: IBase64Buffers[]; model_name: string; model_module: string; model_module_version: string; state: JSONObject; } export interface IManagerStateMap extends PartialJSONObject { [key: string]: IState; } /** * Widget manager state. * * The JSON schema for this is in @jupyter-widgets/schema/v2/state.schema.json. */ export interface IManagerState extends PartialJSONObject { version_major: number; version_minor: number; state: IManagerStateMap; } export interface IBase64Buffers extends PartialJSONObject { data: string; path: (string | number)[]; encoding: 'base64'; } /** * Make all properties in K (of T) required */ export type RequiredSome = Omit & Required>; /** * Manager abstract base class */ export abstract class ManagerBase implements IWidgetManager { /** * Modifies view options. Generally overloaded in custom widget manager * implementations. */ setViewOptions(options: any = {}): any { return options; } /** * Creates a promise for a view of a given model * * #### Notes * The implementation must trigger the Lumino 'after-attach' and 'after-show' events when appropriate, which in turn will trigger the view's 'displayed' events. * * Make sure the view creation is not out of order with * any state updates. * */ create_view( model: DOMWidgetModel, options?: any ): Promise; create_view( model: WidgetModel, options?: any ): Promise; create_view( model: WidgetModel, options = {} ): Promise { const id = uuid(); const viewPromise = (model.state_change = model.state_change.then( async () => { const _view_name = model.get('_view_name'); const _view_module = model.get('_view_module'); try { const ViewType = (await this.loadViewClass( _view_name, _view_module, model.get('_view_module_version') )) as typeof WidgetView; const view = new ViewType({ model: model, options: this.setViewOptions(options), }); view.listenTo(model, 'destroy', view.remove); await view.render(); // This presumes the view is added to the list of model views below view.once('remove', () => { if (model.views) { delete model.views[id]; } }); return view; } catch (e) { console.error( `Could not create a view for model id ${model.model_id}` ); const msg = `Failed to create view for '${_view_name}' from module '${_view_module}' with model '${model.name}' from module '${model.module}'`; const ModelCls = widgets.createErrorWidgetModel(e, msg); const errorModel = new ModelCls(); const view = new widgets.ErrorWidgetView({ model: errorModel, options: this.setViewOptions(options), }); await view.render(); return view; } } )); if (model.views) { model.views[id] = viewPromise; } return viewPromise; } /** * callback handlers specific to a view */ callbacks(view?: WidgetView): ICallbacks { return {}; } /** * Get a promise for a model by model id. * * #### Notes * If the model is not found, the returned Promise object is rejected. * * If you would like to synchronously test if a model exists, use .has_model(). */ async get_model(model_id: string): Promise { const modelPromise = this._models[model_id]; if (modelPromise === undefined) { throw new Error('widget model not found'); } return modelPromise; } /** * Returns true if the given model is registered, otherwise false. * * #### Notes * This is a synchronous way to check if a model is registered. */ has_model(model_id: string): boolean { return this._models[model_id] !== undefined; } /** * Handle when a comm is opened. */ handle_comm_open( comm: IClassicComm, msg: services.KernelMessage.ICommOpenMsg ): Promise { const protocolVersion = ((msg.metadata || {})['version'] as string) || ''; if (protocolVersion.split('.', 1)[0] !== PROTOCOL_MAJOR_VERSION) { const error = `Wrong widget protocol version: received protocol version '${protocolVersion}', but was expecting major version '${PROTOCOL_MAJOR_VERSION}'`; console.error(error); return Promise.reject(error); } const data = msg.content.data as unknown as ISerializedState; const buffer_paths = data.buffer_paths || []; const buffers = msg.buffers || []; put_buffers(data.state, buffer_paths, buffers); return this.new_model( { model_name: data.state['_model_name'] as string, model_module: data.state['_model_module'] as string, model_module_version: data.state['_model_module_version'] as string, comm: comm, }, data.state ).catch(reject('Could not create a model.', true)); } /** * Create a comm and new widget model. * @param options - same options as new_model but comm is not * required and additional options are available. * @param serialized_state - serialized model attributes. */ new_widget( options: IWidgetOptions, serialized_state: JSONObject = {} ): Promise { let commPromise; // we check to make sure the view information is provided, to help catch // backwards incompatibility errors. if ( options.view_name === undefined || options.view_module === undefined || options.view_module_version === undefined ) { return Promise.reject( 'new_widget(...) must be given view information in the options.' ); } // If no comm is provided, a new comm is opened for the jupyter.widget // target. if (options.comm) { commPromise = Promise.resolve(options.comm); } else { commPromise = this._create_comm( this.comm_target_name, options.model_id, { state: { _model_module: options.model_module, _model_module_version: options.model_module_version, _model_name: options.model_name, _view_module: options.view_module, _view_module_version: options.view_module_version, _view_name: options.view_name, }, }, { version: PROTOCOL_VERSION } ); } // The options dictionary is copied since data will be added to it. const options_clone = { ...options }; // Create the model. In the case where the comm promise is rejected a // comm-less model is still created with the required model id. return commPromise.then( (comm) => { // Comm Promise Resolved. options_clone.comm = comm; const widget_model = this.new_model(options_clone, serialized_state); return widget_model.then((model) => { model.sync('create', model); return model; }); }, () => { // Comm Promise Rejected. if (!options_clone.model_id) { options_clone.model_id = uuid(); } return this.new_model(options_clone, serialized_state); } ); } register_model(model_id: string, modelPromise: Promise): void { this._models[model_id] = modelPromise; modelPromise.then((model) => { model.once('comm:close', () => { delete this._models[model_id]; }); }); } /** * Create and return a promise for a new widget model * * @param options - the options for creating the model. * @param serialized_state - attribute values for the model. * * @example * widget_manager.new_model({ * model_name: 'IntSlider', * model_module: '@jupyter-widgets/controls', * model_module_version: '1.0.0', * model_id: 'u-u-i-d' * }).then((model) => { console.log('Create success!', model); }, * (err) => {console.error(err)}); * */ async new_model( options: IModelOptions, serialized_state: any = {} ): Promise { const model_id = options.model_id ?? options.comm?.comm_id; if (!model_id) { throw new Error( 'Neither comm nor model_id provided in options object. At least one must exist.' ); } options.model_id = model_id; const modelPromise = this._make_model( options as RequiredSome, serialized_state ); // this call needs to happen before the first `await`, see note in `set_state`: this.register_model(model_id, modelPromise); return await modelPromise; } /** * Fetch all widgets states from the kernel using the control comm channel * If this fails (control comm handler not implemented kernel side), * it will fall back to `_loadFromKernelModels`. * * This is a utility function that can be used in subclasses. */ protected async _loadFromKernel(): Promise { // Try fetching all widget states through the control comm let data: any; let buffers: any; try { const initComm = await this._create_comm( CONTROL_COMM_TARGET, uuid(), {}, { version: CONTROL_COMM_PROTOCOL_VERSION } ); await new Promise((resolve, reject) => { initComm.on_msg((msg: any) => { data = msg['content']['data']; if (data.method !== 'update_states') { console.warn(` Unknown ${data.method} message on the Control channel `); return; } buffers = (msg.buffers || []).map((b: any) => { if (b instanceof DataView) { return b; } else { return new DataView(b instanceof ArrayBuffer ? b : b.buffer); } }); resolve(null); }); initComm.on_close(() => reject('Control comm was closed too early')); // Send a states request msg initComm.send({ method: 'request_states' }, {}); // Reject if we didn't get a response in time setTimeout( () => reject('Control comm did not respond in time'), CONTROL_COMM_TIMEOUT ); }); initComm.close(); } catch (error) { // Fall back to the old implementation for old ipywidgets backend versions (ipywidgets<=7.6) return this._loadFromKernelModels(); } const states: any = data.states; const bufferPaths: any = {}; const bufferGroups: any = {}; // Group buffers and buffer paths by widget id for (let i = 0; i < data.buffer_paths.length; i++) { const [widget_id, ...path] = data.buffer_paths[i]; const b = buffers[i]; if (!bufferPaths[widget_id]) { bufferPaths[widget_id] = []; bufferGroups[widget_id] = []; } bufferPaths[widget_id].push(path); bufferGroups[widget_id].push(b); } // Create comms for all new widgets. const widget_comms = await Promise.all( Object.keys(states).map(async (widget_id) => { const comm = this.has_model(widget_id) ? undefined : await this._create_comm('jupyter.widget', widget_id); return { widget_id, comm }; }) ); await Promise.all( widget_comms.map(async ({ widget_id, comm }) => { const state = states[widget_id]; // Put binary buffers if (widget_id in bufferPaths) { put_buffers(state, bufferPaths[widget_id], bufferGroups[widget_id]); } try { if (comm) { // This must be the first await in the code path that // reaches here so that registering the model promise in // new_model can register the widget promise before it may // be required by other widgets. await this.new_model( { model_name: state.model_name, model_module: state.model_module, model_module_version: state.model_module_version, model_id: widget_id, comm: comm, }, state.state ); } else { // model already exists here const model = await this.get_model(widget_id); const deserializedState = await ( model.constructor as typeof WidgetModel )._deserialize_state(state.state, this); model!.set_state(deserializedState); } } catch (error) { // Failed to create a widget model, we continue creating other models so that // other widgets can render console.error(error); } }) ); } /** * Old implementation of fetching widget models one by one using * the request_state message on each comm. * * This is a utility function that can be used in subclasses. */ protected async _loadFromKernelModels(): Promise { const comm_ids = await this._get_comm_info(); // For each comm id that we do not know about, create the comm, and request the state. const widgets_info = await Promise.all( Object.keys(comm_ids).map(async (comm_id) => { if (this.has_model(comm_id)) { return; } const comm = await this._create_comm(this.comm_target_name, comm_id); let msg_id = ''; const info = new PromiseDelegate(); comm.on_msg((msg: services.KernelMessage.ICommMsgMsg) => { if ( (msg.parent_header as any).msg_id === msg_id && msg.header.msg_type === 'comm_msg' && msg.content.data.method === 'update' ) { const data = msg.content.data as any; const buffer_paths = data.buffer_paths || []; const buffers = msg.buffers || []; put_buffers(data.state, buffer_paths, buffers); info.resolve({ comm, msg }); } }); msg_id = comm.send( { method: 'request_state', }, this.callbacks(undefined) ); return info.promise; }) ); // We put in a synchronization barrier here so that we don't have to // topologically sort the restored widgets. `new_model` synchronously // registers the widget ids before reconstructing their state // asynchronously, so promises to every widget reference should be available // by the time they are used. await Promise.all( widgets_info.map(async (widget_info) => { if (!widget_info) { return; } const content = widget_info.msg.content as any; await this.new_model( { model_name: content.data.state._model_name, model_module: content.data.state._model_module, model_module_version: content.data.state._model_module_version, comm: widget_info.comm, }, content.data.state ); }) ); } async _make_model( options: RequiredSome, serialized_state: any = {} ): Promise { const model_id = options.model_id; const model_promise = this.loadModelClass( options.model_name, options.model_module, options.model_module_version ); let ModelType: typeof WidgetModel; const makeErrorModel = (error: any, msg: string) => { const Cls = widgets.createErrorWidgetModel(error, msg); const widget_model = new Cls(); return widget_model; }; try { ModelType = await model_promise; } catch (error) { const msg = 'Could not instantiate widget'; console.error(msg); return makeErrorModel(error, msg); } if (!ModelType) { const msg = 'Could not instantiate widget'; console.error(msg); const error = new Error( `Cannot find model module ${options.model_module}@${options.model_module_version}, ${options.model_name}` ); return makeErrorModel(error, msg); } let widget_model: WidgetModel; try { const attributes = await ModelType._deserialize_state( serialized_state, this ); const modelOptions: IBackboneModelOptions = { widget_manager: this, model_id: model_id, comm: options.comm, }; widget_model = new ModelType(attributes, modelOptions); } catch (error) { console.error(error); const msg = `Model class '${options.model_name}' from module '${options.model_module}' is loaded but can not be instantiated`; widget_model = makeErrorModel(error, msg); } widget_model.name = options.model_name; widget_model.module = options.model_module; return widget_model; } /** * Close all widgets and empty the widget state. * @return Promise that resolves when the widget state is cleared. */ clear_state(): Promise { return resolvePromisesDict(this._models).then((models) => { Object.keys(models).forEach((id) => models[id].close()); this._models = Object.create(null); }); } /** * Asynchronously get the state of the widget manager. * * This includes all of the widget models, and follows the format given in * the @jupyter-widgets/schema package. * * @param options - The options for what state to return. * @returns Promise for a state dictionary */ get_state(options: IStateOptions = {}): Promise { const modelPromises = Object.keys(this._models).map( (id) => this._models[id] ); return Promise.all(modelPromises).then((models) => { return serialize_state(models, options); }); } /** * Set the widget manager state. * * @param state - a Javascript object conforming to the application/vnd.jupyter.widget-state+json spec. * * Reconstructs all of the widget models in the state, merges that with the * current manager state, and then attempts to redisplay the widgets in the * state. */ set_state(state: IManagerState): Promise { // Check to make sure that it's the same version we are parsing. if (!(state.version_major && state.version_major <= 2)) { throw 'Unsupported widget state format'; } const models = state.state as any; // Recreate all the widget models for the given widget manager state. const all_models = this._get_comm_info().then((live_comms) => { /* Note: It is currently safe to just loop over the models in any order, given that the following holds (does at the time of writing): 1: any call to `new_model` with state registers the model promise (e.g. with `register_model`) synchronously (before it's first `await` statement). 2: any calls to a model constructor or the `set_state` method on a model, happens asynchronously (in a `then` clause, or after an `await` statement). Without these assumptions, one risks trying to set model state with a reference to another model that doesn't exist yet! */ return Promise.all( Object.keys(models).map((model_id) => { // First put back the binary buffers const decode: { [s: string]: (s: string) => ArrayBuffer } = { base64: base64ToBuffer, hex: hexToBuffer, }; const model = models[model_id]; const modelState = model.state; if (model.buffers) { const bufferPaths = model.buffers.map((b: any) => b.path); // put_buffers expects buffers to be DataViews const buffers = model.buffers.map( (b: any) => new DataView(decode[b.encoding](b.data)) ); put_buffers(model.state, bufferPaths, buffers); } // If the model has already been created, set its state and then // return it. if (this.has_model(model_id)) { return this.get_model(model_id)!.then((model) => { // deserialize state return (model.constructor as typeof WidgetModel) ._deserialize_state(modelState || {}, this) .then((attributes) => { model.set_state(attributes); // case 2 return model; }); }); } const modelCreate: IModelOptions = { model_id: model_id, model_name: model.model_name, model_module: model.model_module, model_module_version: model.model_module_version, }; if (Object.prototype.hasOwnProperty.call(live_comms, 'model_id')) { // live comm // This connects to an existing comm if it exists, and // should *not* send a comm open message. return this._create_comm(this.comm_target_name, model_id).then( (comm) => { modelCreate.comm = comm; return this.new_model(modelCreate); // No state, so safe wrt. case 1 } ); } else { return this.new_model(modelCreate, modelState); // case 1 } }) ); }); return all_models; } /** * Disconnect the widget manager from the kernel, setting each model's comm * as dead. */ disconnect(): void { Object.keys(this._models).forEach((i) => { this._models[i].then((model) => { model.comm_live = false; }); }); } /** * Resolve a URL relative to the current notebook location. * * The default implementation just returns the original url. */ resolveUrl(url: string): Promise { return Promise.resolve(url); } inline_sanitize(source: string): string { const parts = removeMath(source); // Sanitize tags for inline output. const sanitized = default_inline_sanitize(parts['text']); return replaceMath(sanitized, parts['math']); } /** * The comm target name to register */ readonly comm_target_name = 'jupyter.widget'; /** * Load a class and return a promise to the loaded object. */ protected abstract loadClass( className: string, moduleName: string, moduleVersion: string ): Promise; protected async loadModelClass( className: string, moduleName: string, moduleVersion: string ): Promise { try { const promise: Promise = this.loadClass( className, moduleName, moduleVersion ) as Promise; await promise; return promise; } catch (error) { console.error(error); const msg = `Failed to load model class '${className}' from module '${moduleName}'`; return widgets.createErrorWidgetModel(error, msg); } } protected async loadViewClass( className: string, moduleName: string, moduleVersion: string ): Promise { try { const promise: Promise = this.loadClass( className, moduleName, moduleVersion ) as Promise; await promise; return promise; } catch (error) { console.error(error); const msg = `Failed to load view class '${className}' from module '${moduleName}'`; return widgets.createErrorWidgetView(error, msg); } } /** * Create a comm which can be used for communication for a widget. * * If the data/metadata is passed in, open the comm before returning (i.e., * send the comm_open message). If the data and metadata is undefined, we * want to reconstruct a comm that already exists in the kernel, so do not * open the comm by sending the comm_open message. * * @param comm_target_name Comm target name * @param model_id The comm id * @param data The initial data for the comm * @param metadata The metadata in the open message */ protected abstract _create_comm( comm_target_name: string, model_id?: string, data?: JSONObject, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): Promise; protected abstract _get_comm_info(): Promise<{}>; /** * Filter serialized widget state to remove any ID's already present in manager. * * @param {*} state Serialized state to filter * * @returns {*} A copy of the state, with its 'state' attribute filtered */ protected filterExistingModelState(serialized_state: any): any { let models = serialized_state.state; models = Object.keys(models) .filter((model_id) => !this.has_model(model_id)) .reduce((res, model_id) => { res[model_id] = models[model_id]; return res; }, {}); return { ...serialized_state, state: models }; } /** * Dictionary of model ids and model instance promises */ private _models: { [key: string]: Promise } = Object.create(null); } export interface IStateOptions { /** * Drop model attributes that are equal to their default value. * * @default false */ drop_defaults?: boolean; } /** * Serialize an array of widget models * * #### Notes * The return value follows the format given in the * @jupyter-widgets/schema package. */ export function serialize_state( models: WidgetModel[], options: IStateOptions = {} ): IManagerState { const state: IManagerStateMap = {}; models.forEach((model) => { const model_id = model.model_id; const split = remove_buffers( model.serialize(model.get_state(options.drop_defaults)) ); const buffers: IBase64Buffers[] = split.buffers.map((buffer, index) => { return { data: bufferToBase64(buffer), path: split.buffer_paths[index], encoding: 'base64', }; }); state[model_id] = { model_name: model.name, model_module: model.module, model_module_version: model.get('_model_module_version'), state: split.state, }; // To save space, only include the buffers key if we have buffers if (buffers.length > 0) { state[model_id].buffers = buffers; } }); return { version_major: 2, version_minor: 0, state: state }; } namespace Private { /** * Data promised when a comm info request resolves. */ export interface ICommUpdateData { comm: IClassicComm; msg: services.KernelMessage.ICommMsgMsg; } } ipywidgets-8.1.5/packages/base-manager/src/utils.ts000066400000000000000000000060121466162644600223320ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { toByteArray, fromByteArray } from 'base64-js'; const hexTable = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0A', '0B', '0C', '0D', '0E', '0F', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1A', '1B', '1C', '1D', '1E', '1F', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2A', '2B', '2C', '2D', '2E', '2F', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3A', '3B', '3C', '3D', '3E', '3F', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4A', '4B', '4C', '4D', '4E', '4F', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5A', '5B', '5C', '5D', '5E', '5F', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6A', '6B', '6C', '6D', '6E', '6F', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7A', '7B', '7C', '7D', '7E', '7F', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8A', '8B', '8C', '8D', '8E', '8F', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9A', '9B', '9C', '9D', '9E', '9F', 'A0', 'A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'B0', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'BA', 'BB', 'BC', 'BD', 'BE', 'BF', 'C0', 'C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8', 'C9', 'CA', 'CB', 'CC', 'CD', 'CE', 'CF', 'D0', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'DA', 'DB', 'DC', 'DD', 'DE', 'DF', 'E0', 'E1', 'E2', 'E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9', 'EA', 'EB', 'EC', 'ED', 'EE', 'EF', 'F0', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'FA', 'FB', 'FC', 'FD', 'FE', 'FF', ]; /** * Convert an ArrayBuffer to a hex string. */ export function bufferToHex(buffer: ArrayBuffer): string { const x = new Uint8Array(buffer); const s = []; for (let i = 0; i < x.length; i++) { s.push(hexTable[x[i]]); } return s.join(''); } /** * Convert a hex string to an ArrayBuffer. */ export function hexToBuffer(hex: string): ArrayBuffer { const x = new Uint8Array(hex.length / 2); for (let i = 0; i < hex.length; i += 2) { x[i / 2] = parseInt(hex.slice(i, i + 2), 16); } return x.buffer; } /** * Convert an ArrayBuffer to a base64 string. */ export function bufferToBase64(buffer: ArrayBuffer): string { return fromByteArray(new Uint8Array(buffer)); } /** * Convert a base64 string to an ArrayBuffer. */ export function base64ToBuffer(base64: string): ArrayBuffer { return toByteArray(base64).buffer; } ipywidgets-8.1.5/packages/base-manager/test/000077500000000000000000000000001466162644600210135ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base-manager/test/karma-cov.conf.js000066400000000000000000000007741466162644600241650ustar00rootroot00000000000000var path = require('path'); module.exports = function (config) { config.set({ basePath: '..', browsers: ['Firefox'], frameworks: ['mocha'], reporters: ['mocha', 'coverage'], files: ['test/build/coverage.js'], coverageReporter: { reporters: [ { type: 'text' }, { type: 'lcov', dir: 'test/coverage' }, { type: 'html', dir: 'test/coverage' }, ], }, port: 9876, colors: true, singleRun: true, logLevel: config.LOG_INFO, }); }; ipywidgets-8.1.5/packages/base-manager/test/karma.conf.js000066400000000000000000000004461466162644600233740ustar00rootroot00000000000000module.exports = function (config) { config.set({ basePath: '..', frameworks: ['mocha'], reporters: ['mocha'], files: ['test/build/bundle.js'], port: 9876, colors: true, singleRun: true, logLevel: config.LOG_INFO, browserNoActivityTimeout: 30000, }); }; ipywidgets-8.1.5/packages/base-manager/test/src/000077500000000000000000000000001466162644600216025ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base-manager/test/src/dummy-manager.ts000066400000000000000000000121341466162644600247160ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as widgets from '@jupyter-widgets/base'; import * as Backbone from 'backbone'; import { ManagerBase } from '../../lib'; import * as sinon from 'sinon'; void sinon; let numComms = 0; export class MockComm implements widgets.IClassicComm { constructor() { this.comm_id = `mock-comm-id-${numComms}`; numComms += 1; } on_open(fn: Function): void { this._on_open = fn; } on_close(fn: Function): void { this._on_close = fn; } on_msg(fn: Function): void { this._on_msg = fn; } _process_msg(msg: any): any { if (this._on_msg) { return this._on_msg(msg); } else { return Promise.resolve(); } } open(): string { if (this._on_open) { this._on_open(); } return ''; } close(): string { if (this._on_close) { this._on_close(); } return ''; } send(): string { return ''; } comm_id: string; target_name: string; _on_msg: Function | null = null; _on_open: Function | null = null; _on_close: Function | null = null; } const typesToArray: { [key: string]: any } = { int8: Int8Array, int16: Int16Array, int32: Int32Array, uint8: Uint8Array, uint16: Uint16Array, uint32: Uint32Array, float32: Float32Array, float64: Float64Array, }; const JSONToArray = function (obj: any): any { return new typesToArray[obj.dtype](obj.buffer.buffer); }; const arrayToJSON = function (obj: any): any { const dtype = Object.keys(typesToArray).filter( (i) => typesToArray[i] === obj.constructor )[0]; return { dtype, buffer: obj }; }; const array_serialization = { deserialize: JSONToArray, serialize: arrayToJSON, }; class TestWidget extends widgets.WidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_module: 'test-widgets', _model_name: 'TestWidget', _model_module_version: '1.0.0', _view_module: 'test-widgets', _view_name: 'TestWidgetView', _view_module_version: '1.0.0', _view_count: null as any, }; } } class ModelErrorWidget extends widgets.WidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_module: 'test-widgets', _model_name: 'ModelErrorWidget', _model_module_version: '1.0.0', }; } initialize(attributes: Backbone.ObjectHash, options: any) { throw new Error('Model error'); } } class ModelWithMissingView extends widgets.WidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_module: 'test-widgets', _model_name: 'ModelWithViewError', _model_module_version: '1.0.0', _view_module: 'test-widgets', _view_name: 'MissingView', _view_module_version: '1.0.0', }; } } class ModelWithViewError extends widgets.WidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_module: 'test-widgets', _model_name: 'ModelWithViewError', _model_module_version: '1.0.0', _view_module: 'test-widgets', _view_name: 'ViewErrorWidget', _view_module_version: '1.0.0', }; } } class ViewErrorWidget extends widgets.WidgetView { render(): void { throw new Error('Render error'); } } class TestWidgetView extends widgets.WidgetView { render(): void { this._rendered += 1; super.render(); } remove(): void { this._removed += 1; super.remove(); } _removed = 0; _rendered = 0; } class BinaryWidget extends TestWidget { static serializers = { ...widgets.WidgetModel.serializers, array: array_serialization, }; defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'BinaryWidget', _view_name: 'BinaryWidgetView', array: new Int8Array(0), }; } } class BinaryWidgetView extends TestWidgetView { render(): void { this._rendered += 1; } _rendered = 0; } const testWidgets = { TestWidget, TestWidgetView, BinaryWidget, BinaryWidgetView, ModelErrorWidget, ModelWithViewError, ViewErrorWidget, ModelWithMissingView, }; export class DummyManager extends ManagerBase { constructor() { super(); this.el = window.document.createElement('div'); } protected loadClass( className: string, moduleName: string, moduleVersion: string ): Promise { if (moduleName === '@jupyter-widgets/base') { if ((widgets as any)[className]) { return Promise.resolve((widgets as any)[className]); } else { return Promise.reject(`Cannot find class ${className}`); } } else if (moduleName === 'test-widgets') { if ((testWidgets as any)[className]) { return Promise.resolve((testWidgets as any)[className]); } else { return Promise.reject(`Cannot find class ${className}`); } } else { return Promise.reject(`Cannot find module ${moduleName}`); } } _get_comm_info(): Promise<{}> { return Promise.resolve({}); } _create_comm(): Promise { return Promise.resolve(new MockComm()); } el: HTMLElement; } ipywidgets-8.1.5/packages/base-manager/test/src/index.ts000066400000000000000000000002011466162644600232520ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import './manager_test'; ipywidgets-8.1.5/packages/base-manager/test/src/manager_test.ts000066400000000000000000000473511466162644600246350ustar00rootroot00000000000000import { DummyManager, MockComm } from './dummy-manager'; import * as widgets from '@jupyter-widgets/base'; import { expect } from 'chai'; import * as chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; chai.use(chaiAsPromised); import * as sinon from 'sinon'; import sinonChai from 'sinon-chai'; chai.use(sinonChai); // test ManagerBase by creating a simple derived class // and testing it. describe('ManagerBase', function () { beforeEach(function () { this.managerBase = new DummyManager(); this.modelOptions = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', model_id: 'u-u-i-d', }; }); describe('comm_target_name', function () { it('is "jupyter.widget"', function () { expect(this.managerBase.comm_target_name).to.equal('jupyter.widget'); }); }); describe('setViewOptions', function () { it('returns an object', function () { expect(this.managerBase.setViewOptions()).to.deep.equal({}); }); it('returns the passed options', function () { const options = { a: 1 }; expect(this.managerBase.setViewOptions(options)).to.deep.equal(options); }); }); describe('create_view', function () { it('returns a Promise to a view', async function () { const manager = this.managerBase; const model = await manager.new_model(this.modelOptions); const view = await manager.create_view(model); expect(view).to.be.instanceof(widgets.WidgetView); expect(view.model).to.equal(model); }); it('renders the view', async function () { const manager = this.managerBase; const model = await manager.new_model({ model_name: 'BinaryWidget', model_module: 'test-widgets', model_module_version: '1.0.0', model_id: 'u-u-i-d', }); const view = await manager.create_view(model); expect(view._rendered).to.equal(1); }); it('return ErrorWidget if view class can not be loaded', async function () { const spec = { model_name: 'ModelWithMissingView', model_module: 'test-widgets', model_module_version: '1.0.0', model_id: 'id', }; const manager = this.managerBase; const model = await manager.new_model(spec); const view = await manager.create_view(model); expect(view.generateErrorMessage()['msg']).to.be.equal( "Failed to load view class 'MissingView' from module 'test-widgets'" ); }); it('return ErrorWidget if view class can not be created', async function () { const spec = { model_name: 'ModelWithViewError', model_module: 'test-widgets', model_module_version: '1.0.0', model_id: 'id', }; const manager = this.managerBase; const model = await manager.new_model(spec); const view = await manager.create_view(model); expect(view.generateErrorMessage()['msg']).to.be.equal( "Failed to create view for 'ViewErrorWidget' from module 'test-widgets' with model 'ModelWithViewError' from module 'test-widgets'" ); }); it('removes the view on model destroy', async function () { const manager = this.managerBase; const model = await manager.new_model(this.modelOptions); const view = await manager.create_view(model); // TODO: when we upgrade sinon-chai to handle chai 4.0, // uncomment the following and the test statement // sinon.spy(view, 'remove'); await model.close(); // expect(view.removed.calledOnce).to.be.true; expect(view._removed).to.equal(1); }); it('accepts optional view options, which it sends through setViewOptions', async function () { const manager = this.managerBase; sinon.spy(manager, 'setViewOptions'); const model = await manager.new_model(this.modelOptions); const options = { a: 1 }; const view = await manager.create_view(model, options); expect(manager.setViewOptions.calledWith(options)).to.be.true; expect(view.options).to.deep.equal(options); }); it('registers itself with the model.views, deleted when removed', async function () { const manager = this.managerBase; const model = await manager.new_model(this.modelOptions); const view = await manager.create_view(model); // model.views contains some promise which resolves to the view const modelViews = await Promise.all( Object.keys(model.views).map((i) => model.views[i]) ); expect(modelViews).to.contain(view); view.remove(); const modelViews2 = await Promise.all( Object.keys(model.views).map((i) => model.views[i]) ); expect(modelViews2).to.not.contain(view); }); }); describe('callbacks', function () { it('returns an object', function () { const c = this.managerBase.callbacks(); expect(c).to.be.an('object'); }); }); describe('get_model', function () { it('returns a promise to the model', async function () { const manager = this.managerBase; const model = await manager.new_model(this.modelOptions); expect(await manager.get_model(model.model_id)).to.be.equal(model); }); it('returns rejected promise when model is not registered', function () { expect(this.managerBase.get_model('not-defined')).to.be.rejected; }); }); describe('has_model', function () { it('returns true when the model is registered', async function () { const manager = this.managerBase; const model = await manager.new_model(this.modelOptions); expect(manager.has_model(model.model_id)).to.be.true; }); it('returns false when the model is not registered', function () { expect(this.managerBase.has_model('not-defined')).to.be.false; }); }); describe('handle_comm_open', function () { it('returns a promise to a model', async function () { const manager = this.managerBase; const comm = new MockComm(); const model = await manager.handle_comm_open(comm, { content: { data: { state: { _model_name: 'TestWidget', _model_module: 'test-widgets', _model_module_version: '1.0.0', value: 50, }, }, }, metadata: { version: '2.1.0', }, }); expect(model.comm).to.equal(comm); expect(model.get('value')).to.equal(50); }); it('throws if widget protocol version is not specified', async function () { const manager = this.managerBase; const comm = new MockComm(); const model = manager.handle_comm_open(comm, { content: { data: { state: { _model_name: 'TestWidget', _model_module: 'test-widgets', _model_module_version: '1.0.0', value: 50, }, }, }, }); expect(model).to.be.rejected; }); it('throws if widget protocol version is not compatible', async function () { const manager = this.managerBase; const comm = new MockComm(); const model = manager.handle_comm_open(comm, { content: { data: { state: { _model_name: 'TestWidget', _model_module: 'test-widgets', _model_module_version: '1.0.0', value: 50, }, }, }, metadata: { version: '1.0', }, }); expect(model).to.be.rejected; }); it('allows setting initial state, including binary state', async function () { const manager = this.managerBase; const comm = new MockComm(); const model = await manager.handle_comm_open(comm, { content: { data: { state: { _model_name: 'BinaryWidget', _model_module: 'test-widgets', _model_module_version: '1.0.0', array: { dtype: 'uint8' }, }, buffer_paths: [['array', 'buffer']], }, }, buffers: [new DataView(new Uint8Array([1, 2, 3]).buffer)], metadata: { version: '2.1.0', }, }); expect(model.comm).to.equal(comm); expect(model.get('array')).to.deep.equal(new Uint8Array([1, 2, 3])); }); }); describe('new_widget', function () { it('syncs once on creation', async function () { const comm = new MockComm(); sinon.spy(comm, 'send'); const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', view_name: 'TestView', view_module: 'test-widgets', view_module_version: '1.0.0', comm: comm, }; const manager = this.managerBase; await manager.new_widget(spec); expect((comm.send as any).calledOnce).to.be.true; }); it('rejects if view information is not passed in', async function () { const comm = new MockComm(); sinon.spy(comm, 'send'); const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', comm: comm, }; const manager = this.managerBase; expect(manager.new_widget(spec)).to.be.rejectedWith( 'new_widget(...) must be given view information in the options.' ); }); it('creates a comm if one is not passed in', async function () { const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', view_name: 'TestView', view_module: 'test-widgets', view_module_version: '1.0.0', }; const manager = this.managerBase; const model = await manager.new_widget(spec); expect(model.comm).to.not.be.undefined; }); it('creates a model even if the comm creation has errors', async function () { const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', view_name: 'TestView', view_module: 'test-widgets', view_module_version: '1.0.0', }; class NewWidgetManager extends DummyManager { _create_comm(): Promise { return Promise.reject('failed creation'); } } const manager = new NewWidgetManager(); const model = await manager.new_widget(spec); expect(model.comm).to.be.undefined; expect(model.model_id).to.not.be.undefined; }); }); describe('new_model', function () { it('returns a promise to a model', async function () { const manager = this.managerBase; const model = await manager.new_model(this.modelOptions); // we check that the model has a .get() method expect(model).to.have.property('get'); expect(model).to.have.property('set'); expect(model.name).to.be.equal(this.modelOptions.model_name); expect(model.module).to.be.equal(this.modelOptions.model_module); }); it('model id defaults to comm id if not specified', async function () { const comm = new MockComm(); const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', comm: comm, }; const manager = this.managerBase; const model = await manager.new_model(spec); expect(model.model_id).to.be.equal(comm.comm_id); }); it('rejects if model_id or comm not given', async function () { const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', }; const manager = this.managerBase; expect(manager.new_model(spec)).to.be.rejectedWith( 'Neither comm nor model_id provided in options object. At least one must exist.' ); }); it('return ErrorWidget if model class can not be loaded', async function () { const spec = { model_name: 'Foo', model_module: 'bar', model_module_version: '1.0.0', model_id: 'id', }; const manager = this.managerBase; const model = await manager.new_model(spec); expect(model.get('msg')).to.be.equal( "Failed to load model class 'Foo' from module 'bar'" ); }); it('return ErrorWidget if model can not be created', async function () { const spec = { model_name: 'ModelErrorWidget', model_module: 'test-widgets', model_module_version: '1.0.0', model_id: 'id', }; const manager = this.managerBase; const model = await manager.new_model(spec); expect(model.get('msg')).to.be.equal( "Model class 'ModelErrorWidget' from module 'test-widgets' is loaded but can not be instantiated" ); }); it('does not sync on creation', async function () { const comm = new MockComm(); sinon.spy(comm, 'send'); const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', comm: comm, }; const manager = this.managerBase; await manager.new_model(spec); expect((comm.send as any).notCalled).to.be.true; }); it('calls loadClass to retrieve model class', async function () { const manager = this.managerBase; sinon.spy(manager, 'loadClass'); await manager.new_model(this.modelOptions); expect(manager.loadClass.calledOnce).to.be.true; }); it('deserializes attributes using custom serializers and handles binary state', async function () { const manager = this.managerBase; const model = await manager.new_model( { model_name: 'BinaryWidget', model_module: 'test-widgets', model_module_version: '1.0.0', model_id: 'u-u-i-d', }, { array: { dtype: 'uint8', buffer: new DataView(new Uint8Array([1, 2, 3]).buffer), }, } ); expect(model.get('array')).to.deep.equal(new Uint8Array([1, 2, 3])); }); it('sets up a comm close handler to delete the model', async function () { const comm = new MockComm(); const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', comm: comm, }; const manager = this.managerBase; const model = await manager.new_model(spec); comm.close(); expect(manager.get_model(model.model_id)).to.be.rejected; }); }); describe('clear_state', function () { it('clears the model dictionary and closes widgets', async function () { const spec = { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', }; const comm1 = new MockComm(); const comm2 = new MockComm(); sinon.spy(comm1, 'close'); sinon.spy(comm2, 'close'); const mSpec1 = { ...spec, comm: comm1 }; const mSpec2 = { ...spec, comm: comm2 }; const manager = this.managerBase; const model1 = await manager.new_model(mSpec1); const model2 = await manager.new_model(mSpec2); expect(await manager.get_model(model1.model_id)).to.be.equal(model1); expect(await manager.get_model(model2.model_id)).to.be.equal(model2); await manager.clear_state(); expect(manager.get_model(model1.model_id)).to.be.rejected; expect(manager.get_model(model2.model_id)).to.be.rejected; expect((comm1.close as any).calledOnce).to.be.true; expect((comm2.close as any).calledOnce).to.be.true; expect(model1.comm).to.be.undefined; expect(model2.comm).to.be.undefined; }); }); describe('get_state', function () { it('returns a valid schema', async function () { const manager = this.managerBase; await manager.new_model(this.modelOptions); const state = await manager.get_state(); const expectedState = { version_major: 2, version_minor: 0, state: { 'u-u-i-d': { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', state: { _model_module: 'test-widgets', _model_name: 'TestWidget', _model_module_version: '1.0.0', _view_module: 'test-widgets', _view_name: 'TestWidgetView', _view_module_version: '1.0.0', _view_count: null as any, }, }, }, }; expect(state).to.deep.equal(expectedState); }); it('handles the drop_defaults option', async function () { const manager = this.managerBase; await manager.new_model(this.modelOptions, { value: 50 }); const state = await manager.get_state({ drop_defaults: true }); const expectedState = { version_major: 2, version_minor: 0, state: { 'u-u-i-d': { model_name: 'TestWidget', model_module: 'test-widgets', model_module_version: '1.0.0', state: { value: 50, }, }, }, }; expect(state).to.deep.equal(expectedState); }); it('encodes binary buffers to base64 using custom serializers', async function () { const manager = this.managerBase; await manager.new_model( { model_name: 'BinaryWidget', model_module: 'test-widgets', model_module_version: '1.0.0', model_id: 'u-u-i-d', }, { array: { dtype: 'uint8', buffer: new DataView(new Uint8Array([1, 2, 3]).buffer), }, } ); const state = await manager.get_state({ drop_defaults: true }); const expectedState = { version_major: 2, version_minor: 0, state: { 'u-u-i-d': { model_name: 'BinaryWidget', model_module: 'test-widgets', model_module_version: '1.0.0', state: { array: { dtype: 'uint8' }, }, buffers: [ { data: 'AQID', path: ['array', 'buffer'], encoding: 'base64', }, ], }, }, }; expect(state).to.deep.equal(expectedState); }); }); describe('set_state', function () { it('handles binary base64 buffers', async function () { const state = { version_major: 2, version_minor: 0, state: { 'u-u-i-d': { model_name: 'BinaryWidget', model_module: 'test-widgets', model_module_version: '1.0.0', state: { array: { dtype: 'uint8' }, }, buffers: [ { data: 'AQID', path: ['array', 'buffer'], encoding: 'base64', }, ], }, }, }; const manager = this.managerBase; await manager.set_state(state); const model = await manager.get_model('u-u-i-d'); expect(model.get('array')).to.deep.equal(new Uint8Array([1, 2, 3])); }); it('handles binary hex buffers', async function () { const state = { version_major: 2, version_minor: 0, state: { 'u-u-i-d': { model_name: 'BinaryWidget', model_module: 'test-widgets', model_module_version: '1.0.0', state: { array: { dtype: 'uint8' }, }, buffers: [ { data: '010203', path: ['array', 'buffer'], encoding: 'hex', }, ], }, }, }; const manager = this.managerBase; await manager.set_state(state); const model = await manager.get_model('u-u-i-d'); expect(model.get('array')).to.deep.equal(new Uint8Array([1, 2, 3])); }); }); }); ipywidgets-8.1.5/packages/base-manager/test/tsconfig.json000066400000000000000000000003271466162644600235240ustar00rootroot00000000000000{ "extends": "../../../tsconfigbase", "compilerOptions": { "types": ["mocha"], "outDir": "build", "rootDir": "src" }, "include": ["src/*"], "references": [ { "path": ".." } ] } ipywidgets-8.1.5/packages/base-manager/test/webpack-cov.conf.js000066400000000000000000000012631466162644600245000ustar00rootroot00000000000000var path = require('path'); module.exports = { entry: './test/build/index.js', output: { path: __dirname + '/build', filename: 'coverage.js', }, bail: true, module: { loaders: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.md$/, type: 'asset/source' }, { test: /\.html$/, type: 'asset/resource', generator: { filename: '[name].[ext]' }, }, { test: /\.ipynb$/, type: 'json' }, ], preLoaders: [ // instrument only testing sources with Istanbul { test: /\.js$/, include: path.resolve('lib/'), loader: 'istanbul-instrumenter', }, ], }, }; ipywidgets-8.1.5/packages/base-manager/test/webpack.conf.js000066400000000000000000000010501466162644600237050ustar00rootroot00000000000000var path = require('path'); module.exports = { entry: './test/build/index.js', output: { path: __dirname + '/build', filename: 'bundle.js', }, bail: true, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.md$/, type: 'asset/source' }, { test: /\.html$/, type: 'asset/resource', generator: { filename: '[name].[ext]' }, }, { test: /\.ipynb$/, type: 'json' }, ], }, mode: 'development', resolve: { fallback: { util: false } }, }; ipywidgets-8.1.5/packages/base-manager/tsconfig.json000066400000000000000000000002771466162644600225510ustar00rootroot00000000000000{ "extends": "../../tsconfigbase", "compilerOptions": { "outDir": "lib", "rootDir": "src" }, "include": ["src/*"], "references": [ { "path": "../base" } ] } ipywidgets-8.1.5/packages/base/000077500000000000000000000000001466162644600164245ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base/.gitignore000066400000000000000000000000241466162644600204100ustar00rootroot00000000000000lib/ test/coverage/ ipywidgets-8.1.5/packages/base/.jshintrc000066400000000000000000000000731466162644600202510ustar00rootroot00000000000000{ "esnext": true, "expr": true, "node": true } ipywidgets-8.1.5/packages/base/.npmignore000066400000000000000000000001151466162644600204200ustar00rootroot00000000000000.DS_Store node_modules/ test/ .jshintrc karma.conf.js build_css.js examples/ ipywidgets-8.1.5/packages/base/css/000077500000000000000000000000001466162644600172145ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base/css/index.css000066400000000000000000000017561466162644600210460ustar00rootroot00000000000000/* Copyright (c) Jupyter Development Team. * Distributed under the terms of the Modified BSD License. */ .jupyter-widgets-disconnected::before { content: '\f127'; /* chain-broken */ display: inline-block; font: normal normal 900 14px/1 'Font Awesome 5 Free', 'FontAwesome'; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; color: #d9534f; padding: 3px; align-self: flex-start; } .jupyter-widgets-error-widget { display: flex; flex-direction: column; justify-content: center; height: 100%; border: solid 1px red; margin: 0 auto; } .jupyter-widgets-error-widget.icon-error { min-width: var(--jp-widgets-inline-width-short); } .jupyter-widgets-error-widget.text-error { min-width: calc(2 * var(--jp-widgets-inline-width)); min-height: calc(3 * var(--jp-widgets-inline-height)); } .jupyter-widgets-error-widget p { text-align: center; } .jupyter-widgets-error-widget.text-error pre::first-line { font-weight: bold; } ipywidgets-8.1.5/packages/base/package.json000066400000000000000000000051601466162644600207140ustar00rootroot00000000000000{ "name": "@jupyter-widgets/base", "version": "6.0.10", "description": "Jupyter interactive widgets", "repository": { "type": "git", "url": "https://github.com/jupyter-widgets/ipywidgets.git" }, "license": "BSD-3-Clause", "author": "Project Jupyter", "main": "lib/index.js", "typings": "lib/index.d.ts", "files": [ "lib/**/*.d.ts", "lib/**/*.js", "css/*.css" ], "scripts": { "build": "npm run build:src", "build:src": "tsc --build", "build:test": "tsc --build test && webpack --config test/webpack.conf.js", "clean": "npm run clean:src", "clean:src": "rimraf lib && rimraf tsconfig.tsbuildinfo", "prepublish": "npm run clean && npm run build", "test": "npm run test:unit", "test:coverage": "npm run build:test && webpack --config test/webpack-cov.conf.js && karma start test/karma-cov.conf.js", "test:unit": "npm run test:unit:firefox && npm run test:unit:chrome", "test:unit:chrome": "npm run test:unit:default -- --browsers=Chrome", "test:unit:chrome:debug": "npm run test:unit:default -- --browsers=Chrome --single-run=false", "test:unit:default": "npm run build:test && karma start test/karma.conf.js --log-level debug", "test:unit:firefox": "npm run test:unit:default -- --browsers=Firefox", "test:unit:firefox:headless": "npm run test:unit:default -- --browsers=FirefoxHeadless", "test:unit:ie": "npm run test:unit:default -- --browsers=IE" }, "dependencies": { "@jupyterlab/services": "^6.0.0 || ^7.0.0", "@lumino/coreutils": "^1.11.1 || ^2.1", "@lumino/messaging": "^1.10.1 || ^2.1", "@lumino/widgets": "^1.30.0 || ^2.1", "@types/backbone": "1.4.14", "@types/lodash": "^4.14.134", "backbone": "1.4.0", "jquery": "^3.1.1", "lodash": "^4.17.4" }, "devDependencies": { "@types/base64-js": "^1.2.5", "@types/chai": "^4.1.7", "@types/chai-as-promised": "^7.1.0", "@types/expect.js": "^0.3.29", "@types/jquery": "^3.5.16", "@types/mocha": "^9.0.0", "@types/sinon": "^10.0.2", "@types/sinon-chai": "^3.2.2", "chai": "^4.0.0", "chai-as-promised": "^7.0.0", "expect.js": "^0.3.1", "istanbul-instrumenter-loader": "^3.0.1", "karma": "^6.3.3", "karma-chrome-launcher": "^3.1.0", "karma-coverage": "^2.0.3", "karma-firefox-launcher": "^2.1.1", "karma-ie-launcher": "^1.0.0", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", "karma-webpack": "^5.0.0", "mocha": "^9.0.0", "npm-run-all": "^4.1.5", "rimraf": "^3.0.2", "sinon": "^12.0.1", "sinon-chai": "^3.3.0", "typescript": "~4.9.4", "webpack": "^5.65.0" } } ipywidgets-8.1.5/packages/base/src/000077500000000000000000000000001466162644600172135ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base/src/backbone-patch.ts000066400000000000000000000105541466162644600224310ustar00rootroot00000000000000// This file contains a modified version of the set function from the Backbone // (see // https://github.com/jashkenas/backbone/blob/05fde9e201f7e2137796663081105cd6dad12a98/backbone.js#L460, // with changes below marked with an EDIT comment). This file in Backbone has the following license. // (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // Backbone may be freely distributed under the MIT license. // For all details and documentation: // http://backbonejs.org // Backbone's full license is below (from https://github.com/jashkenas/backbone/blob/05fde9e201f7e2137796663081105cd6dad12a98/LICENSE) /* Copyright (c) 2010-2015 Jeremy Ashkenas, DocumentCloud Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import * as utils from './utils'; import { ModelSetOptions, ObjectHash } from 'backbone'; import { JSONExt } from '@lumino/coreutils'; // Set a hash of model attributes on the object, firing `"change"`. This is // the core primitive operation of a model, updating the data and notifying // anyone who needs to know about the change in state. The heart of the beast. // This *MUST* be called with the model as the `this` context. export function set( key: string | {}, val: any, options: ModelSetOptions & { unset?: boolean } ): any { if (key == null) { return this; } // Handle both `"key", value` and `{key: value}` -style arguments. let attrs: ObjectHash; if (JSONExt.isObject(key)) { attrs = key; options = val; } else { (attrs = {} as ObjectHash)[key] = val; } options || (options = {}); // Run validation. if (!this._validate(attrs, options)) { return false; } // Extract attributes and options. const unset = options.unset; const silent = options.silent; const changes = []; const changing = this._changing; this._changing = true; try { if (!changing) { // EDIT: changed to use object spread instead of _.clone this._previousAttributes = { ...this.attributes }; this.changed = {}; } const current = this.attributes; const changed = this.changed; const prev = this._previousAttributes; // For each `set` attribute, update or delete the current value. for (const attr in attrs) { val = attrs[attr]; // EDIT: the following two lines use our isEqual instead of _.isEqual if (!utils.isEqual(current[attr], val)) { changes.push(attr); } if (!utils.isEqual(prev[attr], val)) { changed[attr] = val; } else { delete changed[attr]; } unset ? delete current[attr] : (current[attr] = val); } // Update the `id`. this.id = this.get(this.idAttribute); // Trigger all relevant attribute changes. if (!silent) { if (changes.length) { this._pending = options; } for (let i = 0; i < changes.length; i++) { this.trigger( 'change:' + changes[i], this, current[changes[i]], options ); } } // You might be wondering why there's a `while` loop here. Changes can // be recursively nested within `"change"` events. if (changing) { return this; } if (!silent) { while (this._pending) { options = this._pending; this._pending = false; this.trigger('change', this, options); } } } finally { this._pending = false; this._changing = false; } return this; } ipywidgets-8.1.5/packages/base/src/errorwidget.ts000066400000000000000000000052771466162644600221330ustar00rootroot00000000000000import { WidgetModel, DOMWidgetModel, DOMWidgetView, WidgetView, } from './widget'; import { JUPYTER_WIDGETS_VERSION } from './version'; import { BROKEN_FILE_SVG_ICON } from './utils'; // create a Widget Model that captures an error object export function createErrorWidgetModel( error: unknown, msg?: string ): typeof WidgetModel { class ErrorWidget extends DOMWidgetModel { constructor(attributes: any, options: any) { attributes = { ...attributes, _view_name: 'ErrorWidgetView', _view_module: '@jupyter-widgets/base', _model_module_version: JUPYTER_WIDGETS_VERSION, _view_module_version: JUPYTER_WIDGETS_VERSION, msg: msg, error: error, }; super(attributes, options); this.comm_live = true; } } return ErrorWidget; } export class ErrorWidgetView extends DOMWidgetView { generateErrorMessage(): { msg?: string; stack: string } { return { msg: this.model.get('msg'), stack: String(this.model.get('error').stack), }; } render(): void { const { msg, stack } = this.generateErrorMessage(); this.el.classList.add('jupyter-widgets'); const content = document.createElement('div'); content.classList.add('jupyter-widgets-error-widget', 'icon-error'); content.innerHTML = BROKEN_FILE_SVG_ICON; const text = document.createElement('pre'); text.style.textAlign = 'center'; text.innerText = 'Click to show javascript error.'; content.append(text); this.el.appendChild(content); let width: number; let height: number; this.el.onclick = () => { if (content.classList.contains('icon-error')) { height = height || content.clientHeight; width = width || content.clientWidth; content.classList.remove('icon-error'); content.innerHTML = `
[Open Browser Console for more detailed log - Double click to close this message]\n${msg}\n${stack}
`; content.style.height = `${height}px`; content.style.width = `${width}px`; content.classList.add('text-error'); } }; this.el.ondblclick = () => { if (content.classList.contains('text-error')) { content.classList.remove('text-error'); content.innerHTML = BROKEN_FILE_SVG_ICON; content.append(text); content.classList.add('icon-error'); } }; } } export function createErrorWidgetView( error?: unknown, msg?: string ): typeof WidgetView { return class InnerErrorWidgetView extends ErrorWidgetView { generateErrorMessage(): { msg?: string; stack: string } { return { msg, stack: String(error instanceof Error ? error.stack : error), }; } }; } ipywidgets-8.1.5/packages/base/src/index.ts000066400000000000000000000006121466162644600206710ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. export * from './widget'; export * from './manager'; export * from './widget_layout'; export * from './widget_style'; export * from './services-shim'; export * from './viewlist'; export * from './version'; export * from './utils'; export * from './registry'; export * from './errorwidget'; ipywidgets-8.1.5/packages/base/src/manager.ts000066400000000000000000000113111466162644600211720ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { JSONObject } from '@lumino/coreutils'; import { IClassicComm, ICallbacks } from './services-shim'; import { DOMWidgetModel, DOMWidgetView, WidgetModel, WidgetView, } from './widget'; /** * The options for a model. * * #### Notes * Either a comm or a model_id must be provided. */ export interface IModelOptions { /** * Target name of the widget model to create. */ model_name: string; /** * Module name of the widget model to create. */ model_module: string; /** * Semver version requirement for the model module. */ model_module_version: string; /** * Target name of the widget view to create. */ view_name?: string | null; /** * Module name of the widget view to create. */ view_module?: string | null; /** * Semver version requirement for the view module. */ view_module_version?: string; /** * Comm object associated with the widget. */ comm?: any; /** * The model id to use. If not provided, the comm id of the comm is used. */ model_id?: string; } /** * The options for a connected model. * * This gives all of the information needed to instantiate a comm to a new * widget on the kernel side (so view information is mandatory). * * #### Notes * Either a comm or a model_id must be provided. */ export interface IWidgetOptions extends IModelOptions { /** * Target name of the widget model to create. */ model_name: string; /** * Module name of the widget model to create. */ model_module: string; /** * Semver version requirement for the model module. */ model_module_version: string; /** * Target name of the widget view to create. */ view_name: string | null; /** * Module name of the widget view to create. */ view_module: string | null; /** * Semver version requirement for the view module. */ view_module_version: string; /** * Comm object associated with the widget. */ comm?: IClassicComm; /** * The model id to use. If not provided, the comm id of the comm is used. */ model_id?: string; } /** * The widget manager interface exposed on the Widget instances */ export interface IWidgetManager { /** * Get a promise for a model by model id. * * #### Notes * If a model is not found, undefined is returned (NOT a promise). However, * the calling code should also deal with the case where a rejected promise * is returned, and should treat that also as a model not found. */ get_model(model_id: string): Promise; /** * Returns true if the given model is registered, otherwise false. * * #### Notes * This is a synchronous way to check if a model is registered. */ has_model(model_id: string): boolean; /** * Register a model instance promise with the manager. * * By registering the model, it can later be retrieved with `get_model`. */ register_model(model_id: string, modelPromise: Promise): void; /** * Create a comm and new widget model. * @param options - same options as new_model but comm is not * required and additional options are available. * @param serialized_state - serialized model attributes. */ new_widget( options: IWidgetOptions, serialized_state?: JSONObject ): Promise; /** * Create and return a promise for a new widget model * * @param options - the options for creating the model. * @param serialized_state - attribute values for the model. * * @example * widget_manager.new_model({ * model_name: 'IntSlider', * model_module: '@jupyter-widgets/controls', * model_module_version: '1.0.0', * model_id: 'u-u-i-d' * }).then((model) => { console.log('Create success!', model); }, * (err) => {console.error(err)}); * */ new_model( options: IModelOptions, serialized_state?: JSONObject ): Promise; /** * Creates a promise for a view of a given model * * Make sure the view creation is not out of order with * any state updates. */ create_view( model: DOMWidgetModel, options?: unknown ): Promise; create_view( model: WidgetModel, options?: unknown ): Promise; /** * callback handlers specific to a view */ callbacks(view?: WidgetView): ICallbacks; /** * Resolve a URL relative to the current notebook location. * * The default implementation just returns the original url. */ resolveUrl(url: string): Promise; inline_sanitize(s: string): string; } ipywidgets-8.1.5/packages/base/src/nativeview.ts000066400000000000000000000147431466162644600217550ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. /* This file contains substantial portions of https://github.com/akre54/Backbone.NativeView/blob/521188d9554b53d95d70ed34f878d8ac9fc10df2/backbone.nativeview.js, which has the following license: (c) 2015 Adam Krebs, Jimmy Yuen Ho Wong Backbone.NativeView may be freely distributed under the MIT license. Copyright (c) 2014 Adam Krebs Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import * as Backbone from 'backbone'; // Caches a local reference to `Element.prototype` for faster access. const ElementProto: any = typeof Element !== 'undefined' ? Element.prototype : undefined; // Find the right `Element#matches` for IE>=9 and modern browsers. function matchesFallback(selector: string): boolean { const matches = (this.document || this.ownerDocument).querySelectorAll( selector ); let i = matches.length; while (--i >= 0 && matches.item(i) !== this) { continue; } return i > -1; } const matchesSelector = ElementProto ? ElementProto.matches || ElementProto['webkitMatchesSelector'] || ElementProto['mozMatchesSelector'] || ElementProto['msMatchesSelector'] || ElementProto['oMatchesSelector'] || matchesFallback : matchesFallback; interface IDOMEvent { eventName: string; handler: any; listener: any; selector: string; } export class NativeView extends Backbone.View { _removeElement(): void { this.undelegateEvents(); if (this.el.parentNode) { this.el.parentNode.removeChild(this.el); } } // Apply the `element` to the view. _setElement(element: HTMLElement): void { this.el = element; } // Set a hash of attributes to the view's `el`. We use the "prop" version // if available, falling back to `setAttribute` for the catch-all. _setAttributes(attrs: Backbone.ObjectHash): void { for (const attr in attrs) { attr in this.el ? ((this.el as any)[attr] = attrs[attr]) : this.el.setAttribute(attr, attrs[attr]); } } /** * Make an event delegation handler for the given `eventName` and `selector` * and attach it to `this.el`. * If selector is empty, the listener will be bound to `this.el`. If not, a * new handler that will recursively traverse up the event target's DOM * hierarchy looking for a node that matches the selector. If one is found, * the event's `delegateTarget` property is set to it and the return the * result of calling bound `listener` with the parameters given to the * handler. * * This does not properly handle selectors for things like focus and blur (see * https://github.com/jquery/jquery/blob/7d21f02b9ec9f655583e898350badf89165ed4d5/src/event.js#L442 * for some similar exceptional cases). */ delegate(eventName: string, listener: Function): this; delegate(eventName: string, selector: string, listener: Function): this; delegate( eventName: string, selector: string | Function, listener?: any ): this { if (typeof selector !== 'string') { listener = selector; selector = null!; } // We have to initialize this here, instead of in the constructor, because the // super constructor eventually calls this method before we get a chance to initialize // this._domEvents to an empty list. if (this._domEvents === void 0) { this._domEvents = []; } const root = this.el; const handler = selector ? function (e: Event): any { let node = (e.target as HTMLElement) || (e.srcElement as HTMLElement); for (; node && node !== root; node = node.parentNode as HTMLElement) { if (matchesSelector.call(node, selector)) { (e as any).delegateTarget = node; if (listener.handleEvent) { return listener.handleEvent(e); } else { return listener(e); } } } } : listener; this.el.addEventListener(eventName, handler, false); this._domEvents.push({ eventName, handler, listener, selector }); return handler; } // Remove a single delegated event. Either `eventName` or `selector` must // be included, `selector` and `listener` are optional. undelegate(eventName: string, selector?: string, listener?: Function): this; undelegate(selector: string, listener?: Function): this; undelegate( eventName: string, selector?: string | Function, listener?: Function ): NativeView { if (typeof selector === 'function') { listener = selector; selector = null!; } if (this.el && this._domEvents) { const handlers = this._domEvents.slice(); let i = handlers.length; while (i--) { const item = handlers[i]; const match = item.eventName === eventName && (listener ? item.listener === listener : true) && (selector ? item.selector === selector : true); if (!match) { continue; } this.el.removeEventListener(item.eventName, item.handler, false); this._domEvents.splice(i, 1); } } return this; } // Remove all events created with `delegate` from `el` undelegateEvents(): this { if (this.el && this._domEvents) { const len = this._domEvents.length; for (let i = 0; i < len; i++) { const item = this._domEvents[i]; this.el.removeEventListener(item.eventName, item.handler, false); } this._domEvents.length = 0; } return this; } private _domEvents: IDOMEvent[]; } ipywidgets-8.1.5/packages/base/src/registry.ts000066400000000000000000000022271466162644600214360ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { Token } from '@lumino/coreutils'; import { WidgetModel, WidgetView } from './widget'; /** * A runtime interface token for a widget registry. */ export const IJupyterWidgetRegistry = new Token( 'jupyter.extensions.jupyterWidgetRegistry' ); /** * A registry of Jupyter Widgets. * * This is used by widget managers that support an external registry. */ export interface IJupyterWidgetRegistry { /** * Register a widget module. */ registerWidget(data: IWidgetRegistryData): void; } export type ExportMap = { [key: string]: typeof WidgetModel | typeof WidgetView; }; export type ExportData = | ExportMap | Promise | (() => ExportMap) | (() => Promise); export interface IWidgetRegistryData { /** * The widget module name. */ name: string; /** * The widget module version. */ version: string; /** * A map of object names to widget classes provided by the module, or a * promise to such a map, or a function returning the same. */ exports: ExportData; } ipywidgets-8.1.5/packages/base/src/services-shim.ts000066400000000000000000000221111466162644600223410ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. /** * This module defines shims for @jupyterlab/services that allows you to use the * old comm API. Use this, @jupyterlab/services, and the widget base manager to * embed live widgets in a context outside of the notebook. */ import { Kernel, KernelMessage } from '@jupyterlab/services'; import type { JSONValue, JSONObject } from '@lumino/coreutils'; /** * Callbacks for services shim comms. */ export interface ICallbacks { shell?: { [key: string]: (msg: KernelMessage.IShellMessage) => void }; iopub?: { [key: string]: (msg: KernelMessage.IIOPubMessage) => void }; input?: (msg: KernelMessage.IStdinMessage) => void; } export interface IClassicComm { /** * Comm id * @return {string} */ comm_id: string; /** * Target name * @return {string} */ target_name: string; /** * Opens a sibling comm in the backend * @param data * @param callbacks * @param metadata * @param buffers * @return msg id */ open( data: JSONValue, callbacks?: ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string; /** * Sends a message to the sibling comm in the backend * @param data * @param callbacks * @param metadata * @param buffers * @return message id */ send( data: JSONValue, callbacks?: ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string; /** * Closes the sibling comm in the backend * @param data * @param callbacks * @param metadata * @param buffers * @return msg id */ close( data?: JSONValue, callbacks?: ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string; /** * Register a message handler * @param callback, which is given a message */ on_msg(callback: (x: any) => void): void; /** * Register a handler for when the comm is closed by the backend * @param callback, which is given a message */ on_close(callback: (x: any) => void): void; } export namespace shims { export namespace services { /** * Public constructor * @param jsServicesKernel - @jupyterlab/services Kernel.IKernel instance */ export class CommManager { constructor(jsServicesKernel: Kernel.IKernelConnection) { this.init_kernel(jsServicesKernel); } /** * Hookup kernel events. * @param {Kernel.IKernel} jsServicesKernel - @jupyterlab/services Kernel.IKernel instance */ init_kernel(jsServicesKernel: Kernel.IKernelConnection): void { this.kernel = jsServicesKernel; // These aren't really the same. this.jsServicesKernel = jsServicesKernel; } /** * Creates a new connected comm */ async new_comm( target_name: string, data: any, callbacks: any, metadata: any, comm_id: string, buffers?: ArrayBuffer[] | ArrayBufferView[] ): Promise { const c = this.jsServicesKernel.createComm(target_name, comm_id); const comm = new Comm(c); this.register_comm(comm); comm.open(data, callbacks, metadata, buffers); return comm; } /** * Register a comm target * @param {string} target_name * @param {(Comm, object) => void} f - callback that is called when the * comm is made. Signature of f(comm, msg). */ register_target( target_name: string, f: (comm: Comm, object: KernelMessage.IMessage) => void ): void { const handle = this.jsServicesKernel.registerCommTarget( target_name, (jsServicesComm, msg) => { // Create the comm. const comm = new Comm(jsServicesComm); this.register_comm(comm); // Call the callback for the comm. try { return f(comm, msg); } catch (e) { comm.close(); console.error(e); console.error(new Error('Exception opening new comm')); } } ); this.targets[target_name] = handle; } /** * Unregisters a comm target * @param {string} target_name */ unregister_target( target_name: string, f: (comm: Comm, object: KernelMessage.IMessage) => void ): void { const handle = this.targets[target_name]; handle.dispose(); delete this.targets[target_name]; } /** * Register a comm in the mapping */ register_comm(comm: Comm): string { this.comms[comm.comm_id] = Promise.resolve(comm); comm.kernel = this.kernel; return comm.comm_id; } targets = Object.create(null); comms = Object.create(null); kernel: Kernel.IKernelConnection; jsServicesKernel: Kernel.IKernelConnection; } /** * Public constructor * @param {IComm} jsServicesComm - @jupyterlab/services IComm instance */ export class Comm implements IClassicComm { constructor(jsServicesComm: Kernel.IComm) { this.jsServicesComm = jsServicesComm; } /** * Comm id * @return {string} */ get comm_id(): string { return this.jsServicesComm.commId; } /** * Target name * @return {string} */ get target_name(): string { return this.jsServicesComm.targetName; } /** * Opens a sibling comm in the backend * @param data * @param callbacks * @param metadata * @return msg id */ open( data: JSONValue, callbacks?: ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string { const future = this.jsServicesComm.open(data, metadata, buffers); this._hookupCallbacks(future, callbacks); return future.msg.header.msg_id; } /** * Sends a message to the sibling comm in the backend * @param data * @param callbacks * @param metadata * @param buffers * @return message id */ send( data: JSONValue, callbacks?: ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string { const future = this.jsServicesComm.send(data, metadata, buffers); this._hookupCallbacks(future, callbacks); return future.msg.header.msg_id; } /** * Closes the sibling comm in the backend * @param data * @param callbacks * @param metadata * @return msg id */ close( data?: JSONValue, callbacks?: ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string { const future = this.jsServicesComm.close(data, metadata, buffers); this._hookupCallbacks(future, callbacks); return future.msg.header.msg_id; } /** * Register a message handler * @param callback, which is given a message */ on_msg(callback: (x: any) => void): void { this.jsServicesComm.onMsg = callback.bind(this); } /** * Register a handler for when the comm is closed by the backend * @param callback, which is given a message */ on_close(callback: (x: any) => void): void { this.jsServicesComm.onClose = callback.bind(this); } /** * Hooks callback object up with @jupyterlab/services IKernelFuture * @param @jupyterlab/services IKernelFuture instance * @param callbacks */ _hookupCallbacks( future: Kernel.IShellFuture, callbacks?: ICallbacks ): void { if (callbacks) { future.onReply = function (msg): void { if (callbacks.shell && callbacks.shell.reply) { callbacks.shell.reply(msg); } }; future.onStdin = function (msg): void { if (callbacks.input) { callbacks.input(msg); } }; future.onIOPub = function (msg): void { if (callbacks.iopub) { if (callbacks.iopub.status && msg.header.msg_type === 'status') { callbacks.iopub.status(msg); } else if ( callbacks.iopub.clear_output && msg.header.msg_type === 'clear_output' ) { callbacks.iopub.clear_output(msg); } else if (callbacks.iopub.output) { switch (msg.header.msg_type) { case 'display_data': case 'execute_result': case 'stream': case 'error': callbacks.iopub.output(msg); break; default: break; } } } }; } } jsServicesComm: Kernel.IComm; kernel: Kernel.IKernelConnection; } } } ipywidgets-8.1.5/packages/base/src/utils.ts000066400000000000000000000207571466162644600207360ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { JSONObject, JSONValue, UUID, JSONExt } from '@lumino/coreutils'; import _isEqual from 'lodash/isEqual'; /** * Find all strings in the first argument that are not in the second. */ export function difference(a: string[], b: string[]): string[] { return a.filter((v) => b.indexOf(v) === -1); } /** * Compare two objects deeply to see if they are equal. */ export function isEqual(a: unknown, b: unknown): boolean { return _isEqual(a, b); } /** * A polyfill for Object.assign * * This is from code that Typescript 2.4 generates for a polyfill. */ export const assign = (Object as any).assign || function (t: any, ...args: any[]): any { for (let i = 1; i < args.length; i++) { const s = args[i]; for (const p in s) { if (Object.prototype.hasOwnProperty.call(s, p)) { t[p] = s[p]; } } } return t; }; /** * Generate a UUID * * http://www.ietf.org/rfc/rfc4122.txt */ export function uuid(): string { return UUID.uuid4(); } /** * A simple dictionary type. */ export type Dict = { [keys: string]: T }; /** * Resolve a promiseful dictionary. * Returns a single Promise. */ export function resolvePromisesDict( d: Dict | V> ): Promise> { const keys = Object.keys(d); const values: (PromiseLike | V)[] = []; keys.forEach(function (key) { values.push(d[key]); }); return Promise.all(values).then((v) => { const d: Dict = {}; for (let i = 0; i < keys.length; i++) { d[keys[i]] = v[i]; } return d; }); } /** * Creates a wrappable Promise rejection function. * * Creates a function that logs an error message before rethrowing * the original error that caused the promise to reject. */ export function reject(message: string, log: boolean) { return function promiseRejection(error: Error): never { if (log) { console.error(new Error(message)); } throw error; }; } /** * Takes an object 'state' and fills in buffer[i] at 'path' buffer_paths[i] * where buffer_paths[i] is a list indicating where in the object buffer[i] should * be placed * Example: state = {a: 1, b: {}, c: [0, null]} * buffers = [array1, array2] * buffer_paths = [['b', 'data'], ['c', 1]] * Will lead to {a: 1, b: {data: array1}, c: [0, array2]} */ export function put_buffers( state: Dict, buffer_paths: (string | number)[][], buffers: ( | DataView | ArrayBuffer | ArrayBufferView | { buffer: ArrayBuffer } )[] ): void { for (let i = 0; i < buffer_paths.length; i++) { const buffer_path = buffer_paths[i]; // make sure the buffers are DataViews let buffer = buffers[i]; if (!(buffer instanceof DataView)) { buffer = new DataView( buffer instanceof ArrayBuffer ? buffer : buffer.buffer ); } // say we want to set state[x][y][z] = buffer let obj = state as any; // we first get obj = state[x][y] for (let j = 0; j < buffer_path.length - 1; j++) { obj = obj[buffer_path[j]]; } // and then set: obj[z] = buffer obj[buffer_path[buffer_path.length - 1]] = buffer; } } export interface ISerializedState { state: JSONObject; buffers: ArrayBuffer[]; buffer_paths: (string | number)[][]; } export interface ISerializeable { toJSON(options?: {}): JSONObject; } export type BufferJSON = | { [property: string]: BufferJSON } | BufferJSON[] | string | number | boolean | null | ArrayBuffer | DataView; export function isSerializable(object: unknown): object is ISerializeable { return (typeof object === 'object' && object && 'toJSON' in object) ?? false; } export function isObject(data: BufferJSON): data is Dict { return JSONExt.isObject(data as JSONValue); } /** * The inverse of put_buffers, return an objects with the new state where all buffers(ArrayBuffer) * are removed. If a buffer is a member of an object, that object is cloned, and the key removed. If a buffer * is an element of an array, that array is cloned, and the element is set to null. * See put_buffers for the meaning of buffer_paths * Returns an object with the new state (.state) an array with paths to the buffers (.buffer_paths), * and the buffers associated to those paths (.buffers). */ export function remove_buffers( state: BufferJSON | ISerializeable ): ISerializedState { const buffers: ArrayBuffer[] = []; const buffer_paths: (string | number)[][] = []; // if we need to remove an object from a list, we need to clone that list, otherwise we may modify // the internal state of the widget model // however, we do not want to clone everything, for performance function remove( obj: BufferJSON | ISerializeable, path: (string | number)[] ): BufferJSON { if (isSerializable(obj)) { // We need to get the JSON form of the object before recursing. // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior obj = obj.toJSON(); } if (Array.isArray(obj)) { let is_cloned = false; for (let i = 0; i < obj.length; i++) { const value = obj[i]; if (value) { if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) { if (!is_cloned) { obj = obj.slice(); is_cloned = true; } buffers.push(ArrayBuffer.isView(value) ? value.buffer : value); buffer_paths.push(path.concat([i])); // easier to just keep the array, but clear the entry, otherwise we have to think // about array length, much easier this way obj[i] = null; } else { const new_value = remove(value, path.concat([i])); // only assigned when the value changes, we may serialize objects that don't support assignment if (new_value !== value) { if (!is_cloned) { obj = obj.slice(); is_cloned = true; } obj[i] = new_value; } } } } } else if (isObject(obj)) { for (const key in obj) { let is_cloned = false; if (Object.prototype.hasOwnProperty.call(obj, key)) { const value = obj[key]; if (value) { if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) { if (!is_cloned) { obj = { ...obj }; is_cloned = true; } buffers.push(ArrayBuffer.isView(value) ? value.buffer : value); buffer_paths.push(path.concat([key])); delete obj[key]; // for objects/dicts we just delete them } else { const new_value = remove(value, path.concat([key])); // only assigned when the value changes, we may serialize objects that don't support assignment if (new_value !== value) { if (!is_cloned) { obj = { ...obj }; is_cloned = true; } obj[key] = new_value; } } } } } } return obj; } const new_state = remove(state, []) as JSONObject; return { state: new_state, buffers: buffers, buffer_paths: buffer_paths }; } export const BROKEN_FILE_SVG_ICON = ` `; ipywidgets-8.1.5/packages/base/src/version.ts000066400000000000000000000003021466162644600212430ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. export const JUPYTER_WIDGETS_VERSION = '2.0.0'; export const PROTOCOL_VERSION = '2.1.0'; ipywidgets-8.1.5/packages/base/src/viewlist.ts000066400000000000000000000100361466162644600214310ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. /** * - create_view and remove_view are default functions called when adding or removing views * - create_view takes a model and an index and returns a view or a promise for a view for that model * - remove_view takes a view and destroys it (including calling `view.remove()`) * - each time the update() function is called with a new list, the create and remove * callbacks will be called in an order so that if you append the views created in the * create callback and remove the views in the remove callback, you will duplicate * the order of the list. * - the remove callback defaults to just removing the view (e.g., pass in null for the second parameter) * - the context defaults to the created ViewList. If you pass another context, the create and remove * will be called in that context. */ export class ViewList { constructor( create_view: (model: any, index: any) => T | Promise, remove_view: ((view: T) => void) | null, context: any ) { this.initialize(create_view, remove_view, context); } initialize( create_view: (model: any, index: any) => T | Promise, remove_view: ((view: T) => void) | null, context: any ): void { this._handler_context = context || this; this._models = []; this.views = []; // list of promises for views this._create_view = create_view; this._remove_view = remove_view || function (view): void { (view as any).remove(); }; } /** * the create_view, remove_view, and context arguments override the defaults * specified when the list is created. * after this function, the .views attribute is a list of promises for views * if you want to perform some action on the list of views, do something like * `Promise.all(myviewlist.views).then(function(views) {...});` */ update( new_models: any[], create_view?: (model: any, index: any) => T | Promise, remove_view?: (view: T) => void, context?: any ): Promise { const remove = remove_view || this._remove_view; const create = create_view || this._create_view; context = context || this._handler_context; let i = 0; // first, skip past the beginning of the lists if they are identical for (; i < new_models.length; i++) { if (i >= this._models.length || new_models[i] !== this._models[i]) { break; } } const first_removed = i; // Remove the non-matching items from the old list. const removed = this.views.splice( first_removed, this.views.length - first_removed ); for (let j = 0; j < removed.length; j++) { removed[j].then(function (view) { remove.call(context, view); }); } // Add the rest of the new list items. for (; i < new_models.length; i++) { this.views.push(Promise.resolve(create.call(context, new_models[i], i))); } // make a copy of the input array this._models = new_models.slice(); // return a promise that resolves to all of the resolved views return Promise.all(this.views); } /** * removes every view in the list; convenience function for `.update([])` * that should be faster * returns a promise that resolves after this removal is done */ remove(): Promise { return Promise.all(this.views).then((views) => { views.forEach((value) => this._remove_view.call(this._handler_context, value) ); this.views = []; this._models = []; }); } /** * Dispose this viewlist. * * A synchronous function which just deletes references to child views. This * function does not call .remove() on child views because that is * asynchronous. Use this in cases where child views will be removed in * another way. */ dispose(): void { this.views = null!; this._models = null!; } _handler_context: any; _models: any[]; views: Promise[]; _create_view: (model: any, index: any) => T | Promise; _remove_view: (view: T) => void; } ipywidgets-8.1.5/packages/base/src/widget.ts000066400000000000000000001116451466162644600210560ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as utils from './utils'; import * as backbonePatch from './backbone-patch'; import * as Backbone from 'backbone'; import $ from 'jquery'; import { NativeView } from './nativeview'; import { JSONObject, JSONValue, JSONExt } from '@lumino/coreutils'; import { Message, MessageLoop } from '@lumino/messaging'; import { Widget, Panel } from '@lumino/widgets'; import { LayoutModel } from './widget_layout'; import { StyleModel } from './widget_style'; import { IWidgetManager } from './manager'; import { IClassicComm, ICallbacks } from './services-shim'; import { JUPYTER_WIDGETS_VERSION } from './version'; import { BufferJSON, Dict } from './utils'; import { KernelMessage } from '@jupyterlab/services'; /** * The magic key used in the widget graph serialization. */ const IPY_MODEL_ = 'IPY_MODEL_'; /** * Replace model ids with models recursively. */ export function unpack_models( value: any | Dict | string | (Dict | string)[], manager?: IWidgetManager // actually required, but typed to be compatible with ISerializers ): Promise | WidgetModel[] | any> { if (Array.isArray(value)) { const unpacked: any[] = []; for (const sub_value of value) { unpacked.push(unpack_models(sub_value, manager)); } return Promise.all(unpacked); } else if (value instanceof Object && typeof value !== 'string') { const unpacked: { [key: string]: any } = {}; for (const [key, sub_value] of Object.entries(value)) { unpacked[key] = unpack_models(sub_value, manager); } return utils.resolvePromisesDict(unpacked); } else if (typeof value === 'string' && value.slice(0, 10) === IPY_MODEL_) { // get_model returns a promise already return manager!.get_model(value.slice(10, value.length)); } else { return Promise.resolve(value); } } /** Replace models with ids recursively. * * If the commonly-used `unpack_models` is given as the `deseralize` method, * pack_models would be the appropriate `serialize`. * However, the default serialize method will have the same effect, when * `unpack_models` is used as the deserialize method. * This is to ensure backwards compatibility, see: * https://github.com/jupyter-widgets/ipywidgets/pull/3738/commits/f9e27328bb631eb5247a7a6563595d3e655492c7#diff-efb19099381ae8911dd7f69b015a0138d08da7164512c1ee112aa75100bc9be2 */ export function pack_models( value: WidgetModel | Dict | WidgetModel[] | any, widget?: WidgetModel ): any | Dict | string | (Dict | string)[] { if (Array.isArray(value)) { const model_ids: string[] = []; for (const model of value) { model_ids.push(pack_models(model, widget)); } return model_ids; } else if (value instanceof WidgetModel) { return `${IPY_MODEL_}${value.model_id}`; } else if (value instanceof Object && typeof value !== 'string') { const packed: { [key: string]: string } = {}; for (const [key, sub_value] of Object.entries(value)) { packed[key] = pack_models(sub_value, widget); } return packed; } else { return value; } } /** * Type declaration for general widget serializers. */ export interface ISerializers { [key: string]: { deserialize?: (value?: any, manager?: IWidgetManager) => any; serialize?: (value?: any, widget?: WidgetModel) => any; }; } export interface IBackboneModelOptions extends Backbone.ModelSetOptions { model_id: string; comm?: any; widget_manager: any; } export class WidgetModel extends Backbone.Model { /** * The default attributes. */ defaults(): Backbone.ObjectHash { return { _model_module: '@jupyter-widgets/base', _model_name: 'WidgetModel', _model_module_version: JUPYTER_WIDGETS_VERSION, _view_module: '@jupyter-widgets/base', _view_name: null as string | null, _view_module_version: JUPYTER_WIDGETS_VERSION, _view_count: null as number | null, }; } /** * Test to see if the model has been synced with the server. * * #### Notes * As of backbone 1.1, backbone ignores `patch` if it thinks the * model has never been pushed. */ isNew(): boolean { return false; } /** * Constructor * * Initializes a WidgetModel instance. Called by the Backbone constructor. * * Parameters * ---------- * widget_manager : WidgetManager instance * model_id : string * An ID unique to this model. * comm : Comm instance (optional) */ initialize( attributes: Backbone.ObjectHash, options: IBackboneModelOptions ): void { this._expectedEchoMsgIds = new Map(); this._attrsToUpdate = new Set(); super.initialize(attributes, options); // Attributes should be initialized here, since user initialization may depend on it this.widget_manager = options.widget_manager; this.model_id = options.model_id; const comm = options.comm; this.views = Object.create(null); this.state_change = Promise.resolve(); this._closed = false; this._state_lock = null; this._msg_buffer = null; this._msg_buffer_callbacks = null; this._pending_msgs = 0; // _buffered_state_diff must be created *after* the super.initialize // call above. See the note in the set() method below. this._buffered_state_diff = {}; if (comm) { // Remember comm associated with the model. this.comm = comm; // Hook comm messages up to model. comm.on_close(this._handle_comm_closed.bind(this)); comm.on_msg(this._handle_comm_msg.bind(this)); this.comm_live = true; } else { this.comm_live = false; } } get comm_live(): boolean { return this._comm_live; } set comm_live(x) { this._comm_live = x; this.trigger('comm_live_update'); } /** * Send a custom msg over the comm. */ send( content: JSONValue, callbacks?: ICallbacks, buffers?: ArrayBuffer[] | ArrayBufferView[] ): void { if (this.comm !== undefined) { const data = { method: 'custom', content: content }; this.comm.send(data, callbacks, {}, buffers); } } /** * Close model * * @param comm_closed - true if the comm is already being closed. If false, the comm will be closed. * * @returns - a promise that is fulfilled when all the associated views have been removed. */ close(comm_closed = false): Promise { // can only be closed once. if (this._closed) { return Promise.resolve(); } this._closed = true; if (this.comm && !comm_closed) { this.comm.close(); } this.stopListening(); this.trigger('destroy', this); if (this.comm) { delete this.comm; } // Delete all views of this model if (this.views) { const views = Object.keys(this.views).map((id: string) => { return this.views![id].then((view) => view.remove()); }); delete this.views; return Promise.all(views).then(() => { return; }); } return Promise.resolve(); } /** * Handle when a widget comm is closed. */ _handle_comm_closed(msg: KernelMessage.ICommCloseMsg): void { this.trigger('comm:close'); this.close(true); } /** * Handle incoming comm msg. */ _handle_comm_msg(msg: KernelMessage.ICommMsgMsg): Promise { const data = msg.content.data as any; const method = data.method; switch (method) { case 'update': case 'echo_update': this.state_change = this.state_change .then(() => { const state: Dict = data.state; const buffer_paths = data.buffer_paths ?? []; const buffers = msg.buffers?.slice(0, buffer_paths.length) ?? []; utils.put_buffers(state, buffer_paths, buffers); if (msg.parent_header && method === 'echo_update') { const msgId = (msg.parent_header as any).msg_id; // we may have echos coming from other clients, we only care about // dropping echos for which we expected a reply const expectedEcho = Object.keys(state).filter((attrName) => this._expectedEchoMsgIds.has(attrName) ); expectedEcho.forEach((attrName: string) => { // Skip echo messages until we get the reply we are expecting. const isOldMessage = this._expectedEchoMsgIds.get(attrName) !== msgId; if (isOldMessage) { // Ignore an echo update that comes before our echo. delete state[attrName]; } else { // we got our echo confirmation, so stop looking for it this._expectedEchoMsgIds.delete(attrName); // Start accepting echo updates unless we plan to send out a new state soon if ( this._msg_buffer !== null && Object.prototype.hasOwnProperty.call( this._msg_buffer, attrName ) ) { delete state[attrName]; } } }); } return (this.constructor as typeof WidgetModel)._deserialize_state( // Combine the state updates, with preference for kernel updates state, this.widget_manager ); }) .then((state) => { this.set_state(state); }) .catch( utils.reject( `Could not process update msg for model id: ${this.model_id}`, true ) ); return this.state_change; case 'custom': this.trigger('msg:custom', data.content, msg.buffers); return Promise.resolve(); } return Promise.resolve(); } /** * Handle when a widget is updated from the backend. * * This function is meant for internal use only. Values set here will not be propagated on a sync. */ set_state(state: Dict): void { this._state_lock = state; try { this.set(state); } catch (e) { console.error( `Error setting state: ${e instanceof Error ? e.message : e}` ); } finally { this._state_lock = null; } } /** * Get the serializable state of the model. * * If drop_default is truthy, attributes that are equal to their default * values are dropped. */ get_state(drop_defaults?: boolean): JSONObject { const fullState = this.attributes; if (drop_defaults) { // if defaults is a function, call it const d = this.defaults; const defaults = typeof d === 'function' ? d.call(this) : d; const state: JSONObject = {}; Object.keys(fullState).forEach((key) => { if (!utils.isEqual(fullState[key], defaults[key])) { state[key] = fullState[key]; } }); return state; } else { return { ...fullState }; } } /** * Handle status msgs. * * execution_state : ('busy', 'idle', 'starting') */ _handle_status(msg: KernelMessage.IStatusMsg): void { if (this.comm !== void 0) { if (msg.content.execution_state === 'idle') { this._pending_msgs--; // Sanity check for logic errors that may push this below zero. if (this._pending_msgs < 0) { console.error( `Jupyter Widgets message throttle: Pending messages < 0 (=${this._pending_msgs}), which is unexpected. Resetting to 0 to continue.` ); this._pending_msgs = 0; // do not break message throttling in case of unexpected errors } // Send buffer if one is waiting and we are below the throttle. if (this._msg_buffer !== null && this._pending_msgs < 1) { const msgId = this.send_sync_message( this._msg_buffer, this._msg_buffer_callbacks ); this.rememberLastUpdateFor(msgId); this._msg_buffer = null; this._msg_buffer_callbacks = null; } } } } /** * Create msg callbacks for a comm msg. */ callbacks(view?: WidgetView): ICallbacks { return this.widget_manager.callbacks(view); } /** * Set one or more values. * * We just call the super method, in which val and options are optional. * Handles both "key", value and {key: value} -style arguments. */ set(key: any, val?: any, options?: any): any { // Call our patched backbone set. See #1642 and #1643. const return_value = backbonePatch.set.call(this, key, val, options); // Backbone only remembers the diff of the most recent set() // operation. Calling set multiple times in a row results in a // loss of change information. Here we keep our own running diff. // // We don't buffer the state set in the constructor (including // defaults), so we first check to see if we've initialized _buffered_state_diff. // which happens after the constructor sets attributes at creation. if (this._buffered_state_diff !== void 0) { const attrs = this.changedAttributes() || {}; // The state_lock lists attributes that are currently being changed // right now from a kernel message. We don't want to send these // non-changes back to the kernel, so we delete them out of attrs if // they haven't changed from their state_lock value. // The state lock could be null or undefined (if set is being called from // the initializer). if (this._state_lock) { for (const key of Object.keys(this._state_lock)) { if (attrs[key] === this._state_lock[key]) { delete attrs[key]; } } } // _buffered_state_diff_synced lists things that have already been sent to the kernel during a top-level call to .set(), so we don't need to buffer these things either. if (this._buffered_state_diff_synced) { for (const key of Object.keys(this._buffered_state_diff_synced)) { if (attrs[key] === this._buffered_state_diff_synced[key]) { delete attrs[key]; } } } this._buffered_state_diff = utils.assign( this._buffered_state_diff, attrs ); } // If this ended a top-level call to .set, then reset _buffered_state_diff_synced if ((this as any)._changing === false) { this._buffered_state_diff_synced = {}; } return return_value; } /** * Handle sync to the back-end. Called when a model.save() is called. * * Make sure a comm exists. * * Parameters * ---------- * method : create, update, patch, delete, read * create/update always send the full attribute set * patch - only send attributes listed in options.attrs, and if we * are queuing up messages, combine with previous messages that have * not been sent yet * model : the model we are syncing * will normally be the same as `this` * options : dict * the `attrs` key, if it exists, gives an {attr: value} dict that * should be synced, otherwise, sync all attributes. * */ sync(method: string, model: WidgetModel, options: any = {}): any { // the typing is to return `any` since the super.sync method returns a JqXHR, but we just return false if there is an error. if (this.comm === undefined) { throw 'Syncing error: no comm channel defined'; } const attrs = method === 'patch' ? options.attrs : model.get_state(options.drop_defaults); // The state_lock lists attributes that are currently being changed // right now from a kernel message. We don't want to send these // non-changes back to the kernel, so we delete them out of attrs if // they haven't changed from their state_lock value. // The state lock could be null or undefined (if this is triggered // from the initializer). if (this._state_lock) { for (const key of Object.keys(this._state_lock)) { if (attrs[key] === this._state_lock[key]) { delete attrs[key]; } } } Object.keys(attrs).forEach((attrName: string) => { this._attrsToUpdate.add(attrName); }); const msgState = this.serialize(attrs); if (Object.keys(msgState).length > 0) { // If this message was sent via backbone itself, it will not // have any callbacks. It's important that we create callbacks // so we can listen for status messages, etc... const callbacks = options.callbacks || this.callbacks(); // Check throttle. if (this._pending_msgs >= 1) { // The throttle has been exceeded, buffer the current msg so // it can be sent once the kernel has finished processing // some of the existing messages. // Combine updates if it is a 'patch' sync, otherwise replace updates switch (method) { case 'patch': this._msg_buffer = utils.assign(this._msg_buffer || {}, msgState); break; case 'update': case 'create': this._msg_buffer = msgState; break; default: throw 'unrecognized syncing method'; } this._msg_buffer_callbacks = callbacks; } else { // We haven't exceeded the throttle, send the message like // normal. const msgId = this.send_sync_message(attrs, callbacks); this.rememberLastUpdateFor(msgId); // Since the comm is a one-way communication, assume the message // arrived and was processed successfully. // Don't call options.success since we don't have a model back from // the server. Note that this means we don't have the Backbone // 'sync' event. } } } rememberLastUpdateFor(msgId: string) { this._attrsToUpdate.forEach((attrName) => { this._expectedEchoMsgIds.set(attrName, msgId); }); this._attrsToUpdate = new Set(); } /** * Serialize widget state. * * A serializer is a function which takes in a state attribute and a widget, * and synchronously returns a JSONable object. The returned object will * have toJSON called if possible, and the final result should be a * primitive object that is a snapshot of the widget state that may have * binary array buffers. */ serialize(state: Dict): JSONObject { const serializers = (this.constructor as typeof WidgetModel).serializers || JSONExt.emptyObject; for (const k of Object.keys(state)) { try { if (serializers[k] && serializers[k].serialize) { state[k] = serializers[k].serialize!(state[k], this); } else { // the default serializer just deep-copies the object state[k] = JSON.parse(JSON.stringify(state[k])); } if (state[k] && state[k].toJSON) { state[k] = state[k].toJSON(); } } catch (e) { console.error('Error serializing widget state attribute: ', k); throw e; } } return state; } /** * Send a sync message to the kernel. * * If a message is sent successfully, this returns the message ID of that * message. Otherwise it returns an empty string */ send_sync_message(state: JSONObject, callbacks: any = {}): string { if (!this.comm) { return ''; } try { // Make a 2-deep copy so we don't modify the caller's callbacks object. callbacks = { shell: { ...callbacks.shell }, iopub: { ...callbacks.iopub }, input: callbacks.input, }; // Save the caller's status callback so we can call it after we handle the message. const statuscb = callbacks.iopub.status; callbacks.iopub.status = (msg: KernelMessage.IStatusMsg): void => { this._handle_status(msg); if (statuscb) { statuscb(msg); } }; // split out the binary buffers const split = utils.remove_buffers(state); const msgId = this.comm.send( { method: 'update', state: split.state, buffer_paths: split.buffer_paths, }, callbacks, {}, split.buffers ); this._pending_msgs++; return msgId; } catch (e) { console.error('Could not send widget sync message', e); } return ''; } /** * Push this model's state to the back-end * * This invokes a Backbone.Sync. */ save_changes(callbacks?: {}): void { if (this.comm_live) { const options: any = { patch: true }; if (callbacks) { options.callbacks = callbacks; } this.save(this._buffered_state_diff, options); // If we are currently in a .set() call, save what state we have synced // to the kernel so we don't buffer it again as we come out of the .set call. if ((this as any)._changing) { utils.assign( this._buffered_state_diff_synced, this._buffered_state_diff ); } this._buffered_state_diff = {}; } } /** * on_some_change(['key1', 'key2'], foo, context) differs from * on('change:key1 change:key2', foo, context). * If the widget attributes key1 and key2 are both modified, * the second form will result in foo being called twice * while the first will call foo only once. */ on_some_change( keys: string[], callback: (...args: any[]) => void, context: any ): void { this.on( 'change', (...args) => { if (keys.some(this.hasChanged, this)) { callback.apply(context, args); } }, this ); } /** * Serialize the model. See the deserialization function at the top of this file * and the kernel-side serializer/deserializer. */ toJSON(options?: {}): string { return `IPY_MODEL_${this.model_id}`; } /** * Returns a promise for the deserialized state. The second argument * is an instance of widget manager, which is required for the * deserialization of widget models. */ static _deserialize_state( state: Dict, manager: IWidgetManager ): Promise> { const serializers = this.serializers; let deserialized: Dict; if (serializers) { deserialized = {}; for (const k in state) { if (serializers[k] && serializers[k].deserialize) { deserialized[k] = serializers[k].deserialize!(state[k], manager); } else { deserialized[k] = state[k]; } } } else { deserialized = state; } return utils.resolvePromisesDict(deserialized); } static serializers: ISerializers; // Backbone calls the overridden initialization function from the // constructor. We initialize the default values above in the initialization // function so that they are ready for the user code, and to not override // values subclasses may set in their initialization functions. widget_manager: IWidgetManager; model_id: string; views?: { [key: string]: Promise }; state_change: Promise; comm?: IClassicComm; name: string; module: string; private _comm_live: boolean; private _closed: boolean; private _state_lock: any; private _buffered_state_diff: any; private _buffered_state_diff_synced: any; private _msg_buffer: any; private _msg_buffer_callbacks: any; private _pending_msgs: number; // keep track of the msg id for each attr for updates we send out so // that we can ignore old messages that we send in order to avoid // 'drunken' sliders going back and forward private _expectedEchoMsgIds: Map; // because we don't know the attrs in _handle_status, we keep track of what we will send private _attrsToUpdate: Set; } export class DOMWidgetModel extends WidgetModel { static serializers: ISerializers = { ...WidgetModel.serializers, layout: { deserialize: unpack_models }, style: { deserialize: unpack_models }, }; defaults(): Backbone.ObjectHash { return utils.assign(super.defaults(), { _dom_classes: [], tabbable: null, tooltip: null, // We do not declare defaults for the layout and style attributes. // Those defaults are constructed on the kernel side and synced here // as needed, and our code here copes with those attributes being // undefined. See // https://github.com/jupyter-widgets/ipywidgets/issues/1620 and // https://github.com/jupyter-widgets/ipywidgets/pull/1621 }); } } export class WidgetView extends NativeView { /** * Public constructor. */ constructor(options?: Backbone.ViewOptions & { options?: any }) { super(options); } /** * Initializer, called at the end of the constructor. */ initialize(parameters: WidgetView.IInitializeParameters): void { this.listenTo(this.model, 'change', (model, options) => { const changed = Object.keys(this.model.changedAttributes() || {}); if (changed[0] === '_view_count' && changed.length === 1) { // Just the view count was updated return; } this.update(options); }); this.options = parameters.options; this.once('remove', () => { if (typeof this.model.get('_view_count') === 'number') { this.model.set('_view_count', this.model.get('_view_count') - 1); this.model.save_changes(); } }); this.once('displayed', () => { if (typeof this.model.get('_view_count') === 'number') { this.model.set('_view_count', this.model.get('_view_count') + 1); this.model.save_changes(); } }); this.displayed = new Promise((resolve, reject) => { this.once('displayed', resolve); this.model.on('msg:custom', this.handle_message.bind(this)); }); } /** * Handle message sent to the front end. * * Used to focus or blur the widget. */ handle_message(content: any): void { if (content.do === 'focus') { this.el.focus(); } else if (content.do === 'blur') { this.el.blur(); } } /** * Triggered on model change. * * Update view to be consistent with this.model */ update(options?: any): void { return; } /** * Render a view * * @returns the view or a promise to the view. */ render(): any { return; } /** * Create and promise that resolves to a child view of a given model */ create_child_view( child_model: DOMWidgetModel, options?: any ): Promise; create_child_view( child_model: WidgetModel, options?: any ): Promise; create_child_view( child_model: WidgetModel, options = {} ): Promise { options = { parent: this, ...options }; return this.model.widget_manager .create_view(child_model, options) .catch(utils.reject('Could not create child view', true)); } /** * Create msg callbacks for a comm msg. */ callbacks(): ICallbacks { return this.model.callbacks(this); } /** * Send a custom msg associated with this view. */ send(content: {}, buffers?: ArrayBuffer[] | ArrayBufferView[]): void { this.model.send(content, this.callbacks(), buffers); } touch(): void { this.model.save_changes(this.callbacks()); } remove(): any { // Raise a remove event when the view is removed. super.remove(); this.trigger('remove'); return this; } options: any; /** * A promise that resolves to the parent view when a child view is displayed. */ displayed: Promise; } export namespace WidgetView { export interface IInitializeParameters extends Backbone.ViewOptions { options: any; } } export namespace JupyterLuminoWidget { export interface IOptions { view: DOMWidgetView; } } export class JupyterLuminoWidget extends Widget { constructor(options: Widget.IOptions & JupyterLuminoWidget.IOptions) { const view = options.view; // Cast as any since we cannot delete a mandatory value delete (options as any).view; super(options); this._view = view; } /** * Dispose the widget. * * This causes the view to be destroyed as well with 'remove' */ dispose(): void { if (this.isDisposed) { return; } super.dispose(); this._view.remove(); this._view = null!; } /** * Process the Lumino message. * * Any custom Lumino widget used inside a Jupyter widget should override * the processMessage function like this. */ processMessage(msg: Message): void { super.processMessage(msg); this._view.processLuminoMessage(msg); } private _view: DOMWidgetView; } /** * @deprecated Use {@link JupyterLuminoWidget} instead (Since 8.0). */ export const JupyterPhosphorWidget = JupyterLuminoWidget; export class JupyterLuminoPanelWidget extends Panel { constructor(options: JupyterLuminoWidget.IOptions & Panel.IOptions) { const view = options.view; delete (options as any).view; super(options); this._view = view; } /** * Process the Lumino message. * * Any custom Lumino widget used inside a Jupyter widget should override * the processMessage function like this. */ processMessage(msg: Message): void { super.processMessage(msg); this._view.processLuminoMessage(msg); } /** * Dispose the widget. * * This causes the view to be destroyed as well with 'remove' */ dispose(): void { if (this.isDisposed) { return; } super.dispose(); this._view?.remove(); this._view = null!; } private _view: DOMWidgetView; } /** * @deprecated Use {@link JupyterLuminoPanelWidget} instead (Since 8.0). */ export const JupyterPhosphorPanelWidget = JupyterLuminoPanelWidget; export class DOMWidgetView extends WidgetView { /** * Public constructor */ initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.listenTo( this.model, 'change:_dom_classes', (model: WidgetModel, new_classes: string[]) => { const old_classes = model.previous('_dom_classes'); this.update_classes(old_classes, new_classes); } ); this.layoutPromise = Promise.resolve(); this.listenTo( this.model, 'change:layout', (model: WidgetModel, value: WidgetModel) => { this.setLayout(value, model.previous('layout')); } ); this.stylePromise = Promise.resolve(); this.listenTo( this.model, 'change:style', (model: WidgetModel, value: WidgetModel) => { this.setStyle(value, model.previous('style')); } ); this.displayed.then(() => { this.update_classes([], this.model.get('_dom_classes')); this.setLayout(this.model.get('layout')); this.setStyle(this.model.get('style')); }); this._comm_live_update(); this.listenTo(this.model, 'comm_live_update', () => { this._comm_live_update(); }); this.listenTo(this.model, 'change:tooltip', this.updateTooltip); this.updateTooltip(); } setLayout(layout: LayoutModel, oldLayout?: LayoutModel): void { if (layout) { this.layoutPromise = this.layoutPromise.then((oldLayoutView) => { if (oldLayoutView) { oldLayoutView.unlayout(); this.stopListening(oldLayoutView.model); oldLayoutView.remove(); } return this.create_child_view(layout) .then((view) => { // Trigger the displayed event of the child view. return this.displayed.then(() => { view.trigger('displayed'); this.listenTo(view.model, 'change', () => { // Post (asynchronous) so layout changes can take // effect first. MessageLoop.postMessage( this.luminoWidget, Widget.ResizeMessage.UnknownSize ); }); MessageLoop.postMessage( this.luminoWidget, Widget.ResizeMessage.UnknownSize ); this.trigger('layout-changed'); return view; }); }) .catch( utils.reject('Could not add LayoutView to DOMWidgetView', true) ); }); } } setStyle(style: StyleModel, oldStyle?: StyleModel): void { if (style) { this.stylePromise = this.stylePromise.then((oldStyleView) => { if (oldStyleView) { oldStyleView.unstyle(); this.stopListening(oldStyleView.model); oldStyleView.remove(); } return this.create_child_view(style) .then((view) => { // Trigger the displayed event of the child view. return this.displayed.then(() => { view.trigger('displayed'); this.trigger('style-changed'); // Unlike for the layout attribute, style changes don't // trigger Lumino resize messages. return view; }); }) .catch( utils.reject('Could not add styleView to DOMWidgetView', true) ); }); } } updateTooltip(): void { const title = this.model.get('tooltip'); if (!title) { this.el.removeAttribute('title'); } else if (this.model.get('description').length === 0) { this.el.setAttribute('title', title); } } /** * Update the DOM classes applied to an element, default to this.el. */ update_classes( old_classes: string[], new_classes: string[], el?: HTMLElement ): void { if (el === undefined) { el = this.el; } utils.difference(old_classes, new_classes).map(function (c) { if (el!.classList) { // classList is not supported by IE for svg elements el!.classList.remove(c); } else { el!.setAttribute('class', el!.getAttribute('class')!.replace(c, '')); } }); utils.difference(new_classes, old_classes).map(function (c) { if (el!.classList) { // classList is not supported by IE for svg elements el!.classList.add(c); } else { el!.setAttribute('class', el!.getAttribute('class')!.concat(' ', c)); } }); } /** * Update the DOM classes applied to the widget based on a single * trait's value. * * Given a trait value classes map, this function automatically * handles applying the appropriate classes to the widget element * and removing classes that are no longer valid. * * Parameters * ---------- * class_map: dictionary * Dictionary of trait values to class lists. * Example: * { * success: ['alert', 'alert-success'], * info: ['alert', 'alert-info'], * warning: ['alert', 'alert-warning'], * danger: ['alert', 'alert-danger'] * }; * trait_name: string * Name of the trait to check the value of. * el: optional DOM element handle, defaults to this.el * Element that the classes are applied to. */ update_mapped_classes( class_map: Dict, trait_name: string, el?: HTMLElement ): void { let key = this.model.previous(trait_name) as string; const old_classes = class_map[key] ? class_map[key] : []; key = this.model.get(trait_name); const new_classes = class_map[key] ? class_map[key] : []; this.update_classes(old_classes, new_classes, el || this.el); } set_mapped_classes( class_map: Dict, trait_name: string, el?: HTMLElement ): void { const key = this.model.get(trait_name); const new_classes = class_map[key] ? class_map[key] : []; this.update_classes([], new_classes, el || this.el); } _setElement(el: HTMLElement): void { if (this.luminoWidget) { this.luminoWidget.dispose(); } this.$el = el instanceof $ ? el : $(el); this.el = this.$el[0]; this.luminoWidget = new JupyterLuminoWidget({ node: el, view: this, }); } remove(): any { if (this.luminoWidget) { this.luminoWidget.dispose(); } return super.remove(); } processLuminoMessage(msg: Message): void { switch (msg.type) { case 'after-attach': this.trigger('displayed'); break; case 'show': this.trigger('shown'); break; } } private _comm_live_update(): void { if (this.model.comm_live) { this.luminoWidget.removeClass('jupyter-widgets-disconnected'); } else { this.luminoWidget.addClass('jupyter-widgets-disconnected'); } } updateTabindex(): void { const tabbable = this.model.get('tabbable'); if (tabbable === true) { this.el.setAttribute('tabIndex', '0'); } else if (tabbable === false) { this.el.setAttribute('tabIndex', '-1'); } else if (tabbable === null) { this.el.removeAttribute('tabIndex'); } } /** * @deprecated Use {@link luminoWidget} instead (Since 8.0). */ get pWidget(): Widget { return this.luminoWidget; } /** * @deprecated Use {@link luminoWidget} instead (Since 8.0). */ set pWidget(value: Widget) { this.luminoWidget = value; } el: HTMLElement; // Override typing '$el': any; luminoWidget: Widget; layoutPromise: Promise; stylePromise: Promise; } ipywidgets-8.1.5/packages/base/src/widget_layout.ts000066400000000000000000000065241466162644600224520ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { assign, Dict } from './utils'; import { WidgetModel, WidgetView, DOMWidgetView } from './widget'; /** * css properties exposed by the layout widget with their default values. */ const css_properties: Dict = { align_content: null, align_items: null, align_self: null, border_top: null, border_right: null, border_bottom: null, border_left: null, bottom: null, display: null, flex: null, flex_flow: null, height: null, justify_content: null, justify_items: null, left: null, margin: null, max_height: null, max_width: null, min_height: null, min_width: null, overflow: null, order: null, padding: null, right: null, top: null, visibility: null, width: null, // image-specific object_fit: null, object_position: null, // container grid_auto_columns: null, grid_auto_flow: null, grid_auto_rows: null, grid_gap: null, grid_template_rows: null, grid_template_columns: null, grid_template_areas: null, // items grid_row: null, grid_column: null, grid_area: null, }; export class LayoutModel extends WidgetModel { defaults(): Backbone.ObjectHash { return assign( super.defaults(), { _model_name: 'LayoutModel', _view_name: 'LayoutView', }, css_properties ); } } export class LayoutView extends WidgetView { /** * Public constructor */ initialize(parameters: WidgetView.IInitializeParameters): void { this._traitNames = []; super.initialize(parameters); // Register the traits that live on the Python side for (const key of Object.keys(css_properties)) { this.registerTrait(key); } } /** * Register a CSS trait that is known by the model * @param trait */ registerTrait(trait: string): void { this._traitNames.push(trait); // Listen to changes, and set the value on change. this.listenTo( this.model, 'change:' + trait, (model: LayoutModel, value: any) => { this.handleChange(trait, value); } ); // Set the initial value on display. this.handleChange(trait, this.model.get(trait)); } /** * Get the the name of the css property from the trait name * @param model attribute name * @return css property name */ css_name(trait: string): string { return trait.replace(/_/g, '-'); } /** * Handles when a trait value changes */ handleChange(trait: string, value: any): void { // should be synchronous so that we can measure later. const parent = this.options.parent as DOMWidgetView; if (parent) { if (value === null) { parent.el.style.removeProperty(this.css_name(trait)); } else { parent.el.style.setProperty(this.css_name(trait), value); } } else { console.warn('Style not applied because a parent view does not exist'); } } /** * Remove the styling from the parent view. */ unlayout(): void { const parent = this.options.parent as DOMWidgetView; this._traitNames.forEach((trait) => { if (parent) { parent.el.style.removeProperty(this.css_name(trait)); } else { console.warn('Style not removed because a parent view does not exist'); } }, this); } private _traitNames: string[]; } ipywidgets-8.1.5/packages/base/src/widget_style.ts000066400000000000000000000073101466162644600222670ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { assign } from './utils'; import { WidgetModel, WidgetView, DOMWidgetView } from './widget'; /** * Three functions to deal with some CSS attributes * to make them easier to use. */ export class StyleModel extends WidgetModel { defaults(): Backbone.ObjectHash { const Derived = this.constructor as typeof StyleModel; return assign( super.defaults(), { _model_name: 'StyleModel', _view_name: 'StyleView', }, Object.keys(Derived.styleProperties).reduce((obj: any, key: string) => { obj[key] = Derived.styleProperties[key].default; return obj; }, {}) ); } public static styleProperties: { [s: string]: IStyleProperty } = {}; } interface IStyleProperty { attribute: string; selector: string; default: string; } export class StyleView extends WidgetView { /** * Public constructor */ initialize(parameters: WidgetView.IInitializeParameters): void { this._traitNames = []; super.initialize(parameters); // Register the traits that live on the Python side const ModelType = this.model.constructor as typeof StyleModel; for (const key of Object.keys(ModelType.styleProperties)) { this.registerTrait(key); } // Set the initial styles this.style(); } /** * Register a CSS trait that is known by the model * @param trait */ registerTrait(trait: string): void { this._traitNames.push(trait); // Listen to changes, and set the value on change. this.listenTo( this.model, 'change:' + trait, (model: StyleModel, value: string) => { this.handleChange(trait, value); } ); } /** * Handles when a trait value changes */ handleChange(trait: string, value: any): void { // should be synchronous so that we can measure later. const parent = this.options.parent as DOMWidgetView; if (parent) { const ModelType = this.model.constructor as typeof StyleModel; const styleProperties = ModelType.styleProperties; const attribute = styleProperties[trait].attribute; const selector = styleProperties[trait].selector; const elements = selector ? parent.el.querySelectorAll(selector) : [parent.el]; if (value === null) { for (let i = 0; i !== elements.length; ++i) { elements[i].style.removeProperty(attribute); } } else { for (let i = 0; i !== elements.length; ++i) { elements[i].style.setProperty(attribute, value); } } } else { console.warn('Style not applied because a parent view does not exist'); } } /** * Apply styles for all registered traits */ style(): void { for (const trait of this._traitNames) { this.handleChange(trait, this.model.get(trait)); } } /** * Remove the styling from the parent view. */ unstyle(): void { const parent = this.options.parent as DOMWidgetView; const ModelType = this.model.constructor as typeof StyleModel; const styleProperties = ModelType.styleProperties; this._traitNames.forEach((trait) => { if (parent) { const attribute = styleProperties[trait].attribute; const selector = styleProperties[trait].selector; const elements = selector ? parent.el.querySelectorAll(selector) : [parent.el]; for (let i = 0; i !== elements.length; ++i) { elements[i].style.removeProperty(attribute); } } else { console.warn('Style not removed because a parent view does not exist'); } }, this); } private _traitNames: string[]; } ipywidgets-8.1.5/packages/base/test/000077500000000000000000000000001466162644600174035ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base/test/karma-cov.conf.js000066400000000000000000000010561466162644600225470ustar00rootroot00000000000000var path = require('path'); module.exports = function (config) { config.set({ basePath: '..', browsers: ['Firefox'], frameworks: ['mocha'], reporters: ['mocha', 'coverage'], files: ['test/build/coverage.js'], coverageReporter: { reporters: [ { type: 'text' }, { type: 'lcov', dir: 'test/coverage' }, { type: 'html', dir: 'test/coverage' }, ], }, mochaReporter: { showDiff: true, }, port: 9876, colors: true, singleRun: true, logLevel: config.LOG_INFO, }); }; ipywidgets-8.1.5/packages/base/test/karma.conf.js000066400000000000000000000005301466162644600217560ustar00rootroot00000000000000module.exports = function (config) { config.set({ basePath: '..', frameworks: ['mocha'], reporters: ['mocha'], mochaReporter: { showDiff: true, }, files: ['test/build/bundle.js'], port: 9876, colors: true, singleRun: true, logLevel: config.LOG_INFO, browserNoActivityTimeout: 30000, }); }; ipywidgets-8.1.5/packages/base/test/src/000077500000000000000000000000001466162644600201725ustar00rootroot00000000000000ipywidgets-8.1.5/packages/base/test/src/dummy-manager.ts000066400000000000000000000214551466162644600233140ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as widgets from '../../lib'; import * as Backbone from 'backbone'; import * as sinon from 'sinon'; void sinon; import { JSONObject } from '@lumino/coreutils'; let numComms = 0; export class MockComm implements widgets.IClassicComm { constructor() { this.comm_id = `mock-comm-id-${numComms}`; numComms += 1; } on_open(fn: Function): void { this._on_open = fn; } on_close(fn: Function): void { this._on_close = fn; } on_msg(fn: Function): void { this._on_msg = fn; } _process_msg(msg: any): any { if (this._on_msg) { return this._on_msg(msg); } else { return Promise.resolve(); } } open(): string { if (this._on_open) { this._on_open(); } return ''; } close(): string { if (this._on_close) { this._on_close(); } return ''; } send(): string { this._msgid += 1; return this._msgid.toString(); } comm_id: string; target_name: string; _on_msg: Function | null = null; _on_open: Function | null = null; _on_close: Function | null = null; _msgid = 0; } const typesToArray: { [key: string]: any } = { int8: Int8Array, int16: Int16Array, int32: Int32Array, uint8: Uint8Array, uint16: Uint16Array, uint32: Uint32Array, float32: Float32Array, float64: Float64Array, }; const JSONToArray = function (obj: any): any { return new typesToArray[obj.dtype](obj.buffer.buffer); }; const arrayToJSON = function (obj: any): any { const dtype = Object.keys(typesToArray).filter( (i) => typesToArray[i] === obj.constructor )[0]; return { dtype, buffer: obj }; }; const array_serialization = { deserialize: JSONToArray, serialize: arrayToJSON, }; class TestWidget extends widgets.WidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_module: 'test-widgets', _model_name: 'TestWidget', _model_module_version: '1.0.0', _view_module: 'test-widgets', _view_name: 'TestWidgetView', _view_module_version: '1.0.0', _view_count: null as any, }; } } class TestWidgetView extends widgets.WidgetView { render(): void { this._rendered += 1; super.render(); } remove(): void { this._removed += 1; super.remove(); } _removed = 0; _rendered = 0; } class BinaryWidget extends TestWidget { static serializers = { ...widgets.WidgetModel.serializers, array: array_serialization, }; defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'BinaryWidget', _view_name: 'BinaryWidgetView', array: new Int8Array(0), }; } } class BinaryWidgetView extends TestWidgetView { render(): void { this._rendered += 1; } _rendered = 0; } class ContainerWidget extends TestWidget { static serializers = { ...widgets.WidgetModel.serializers, children: { deserialize: widgets.unpack_models }, }; defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ContainerWidget', _view_name: 'ContainerWidgetView', children: [], }; } } class ContainerWidgetView extends TestWidgetView { render(): void { this._rendered += 1; } _rendered = 0; } const testWidgets = { TestWidget, TestWidgetView, BinaryWidget, BinaryWidgetView, ContainerWidget, ContainerWidgetView, }; export class DummyManager implements widgets.IWidgetManager { constructor() { this.el = window.document.createElement('div'); } protected loadClass( className: string, moduleName: string, moduleVersion: string ): Promise { if (moduleName === '@jupyter-widgets/base') { if ((widgets as any)[className]) { return Promise.resolve((widgets as any)[className]); } else { return Promise.reject(`Cannot find class ${className}`); } } else if (moduleName === 'test-widgets') { if ((testWidgets as any)[className]) { return Promise.resolve((testWidgets as any)[className]); } else { return Promise.reject(`Cannot find class ${className}`); } } else { return Promise.reject(`Cannot find module ${moduleName}`); } } el: HTMLElement; /** * Creates a promise for a view of a given model * * Make sure the view creation is not out of order with * any state updates. */ create_view( model: widgets.DOMWidgetModel, options?: any ): Promise; create_view( model: widgets.WidgetModel, options?: any ): Promise { throw new Error('Not implemented in dummy manager'); } /** * callback handlers specific to a view */ callbacks(view?: widgets.WidgetView): widgets.ICallbacks { return {}; } /** * Get a promise for a model by model id. * * #### Notes * If the model is not found, the returned Promise object is rejected. * * If you would like to synchronously test if a model exists, use .has_model(). */ async get_model(model_id: string): Promise { const modelPromise = this._models[model_id]; if (modelPromise === undefined) { throw new Error('widget model not found'); } return modelPromise; } /** * Returns true if the given model is registered, otherwise false. * * #### Notes * This is a synchronous way to check if a model is registered. */ has_model(model_id: string): boolean { return this._models[model_id] !== undefined; } /** * Create a comm and new widget model. * @param options - same options as new_model but comm is not * required and additional options are available. * @param serialized_state - serialized model attributes. */ new_widget( options: widgets.IWidgetOptions, serialized_state: JSONObject = {} ): Promise { return this.new_model(options, serialized_state); } register_model( model_id: string, modelPromise: Promise ): void { this._models[model_id] = modelPromise; modelPromise.then((model) => { model.once('comm:close', () => { delete this._models[model_id]; }); }); } /** * Create and return a promise for a new widget model * * @param options - the options for creating the model. * @param serialized_state - attribute values for the model. * * @example * widget_manager.new_model({ * model_name: 'IntSlider', * model_module: '@jupyter-widgets/controls', * model_module_version: '1.0.0', * model_id: 'u-u-i-d' * }).then((model) => { console.log('Create success!', model); }, * (err) => {console.error(err)}); * */ async new_model( options: widgets.IModelOptions, serialized_state: any = {} ): Promise { let model_id; if (options.model_id) { model_id = options.model_id; } else if (options.comm) { model_id = options.model_id = options.comm.comm_id; } else { throw new Error( 'Neither comm nor model_id provided in options object. At least one must exist.' ); } const modelPromise = this._make_model(options, serialized_state); // this call needs to happen before the first `await`, see note in `set_state`: this.register_model(model_id, modelPromise); return await modelPromise; } async _make_model( options: any, serialized_state: any = {} ): Promise { const model_id = options.model_id; const model_promise = this.loadClass( options.model_name, options.model_module, options.model_module_version ); let ModelType; try { ModelType = await model_promise; } catch (error) { console.error('Could not instantiate widget'); throw error; } if (!ModelType) { throw new Error( `Cannot find model module ${options.model_module}@${options.model_module_version}, ${options.model_name}` ); } const attributes = await ModelType._deserialize_state( serialized_state, this ); const modelOptions = { widget_manager: this, model_id: model_id, comm: options.comm, }; const widget_model = new ModelType(attributes, modelOptions); widget_model.name = options.model_name; widget_model.module = options.model_module; return widget_model; } /** * Resolve a URL relative to the current notebook location. * * The default implementation just returns the original url. */ resolveUrl(url: string): Promise { return Promise.resolve(url); } inline_sanitize(s: string): string { return s; } /** * Dictionary of model ids and model instance promises */ private _models: { [key: string]: Promise; } = Object.create(null); } ipywidgets-8.1.5/packages/base/test/src/index.ts000066400000000000000000000002271466162644600216520ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import './widget_test'; import './utils_test'; ipywidgets-8.1.5/packages/base/test/src/utils_test.ts000066400000000000000000000076051466162644600227510ustar00rootroot00000000000000import { expect } from 'chai'; import * as utils from '../../lib/utils'; import * as chai from 'chai'; import sinon from 'sinon'; void sinon; import sinonChai from 'sinon-chai'; chai.use(sinonChai); describe('remove_buffers', function () { const floatArray = new Float32Array([1.2, 3.14, 2.78, 5, 77.0001]); const uintArray = new Uint8Array([1, 2, 3, 4, 5]); it('extracts a Float32Array', function () { const rawState = { buffer: floatArray, }; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.eql({}); expect(buffers).to.deep.equal([floatArray.buffer]); expect(buffer_paths).to.deep.equal([['buffer']]); }); it('extracts a Uint8Array', function () { const rawState = { buffer: uintArray, }; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.eql({}); expect(buffers).to.deep.equal([uintArray.buffer]); expect(buffer_paths).to.deep.equal([['buffer']]); }); it('extracts a DataView', function () { const rawState = { buffer: new DataView(floatArray.buffer), }; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.eql({}); expect(buffers).to.deep.equal([floatArray.buffer]); expect(buffer_paths).to.deep.equal([['buffer']]); }); it('extracts an ArrayBuffer', function () { const rawState = { buffer: floatArray.buffer, }; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.eql({}); expect(buffers).to.deep.equal([floatArray.buffer]); expect(buffer_paths).to.deep.equal([['buffer']]); }); it('extracts buffers from an array', function () { const rawState = [uintArray, floatArray.buffer]; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.deep.equal([null, null]); expect(buffers).to.deep.equal([uintArray.buffer, floatArray.buffer]); expect(buffer_paths).to.deep.equal([[0], [1]]); }); describe('nested structures', function () { it('array in object', function () { const rawState = { buffers: [uintArray, floatArray.buffer], }; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.deep.equal({ buffers: [null, null] }); expect(buffers).to.deep.equal([uintArray.buffer, floatArray.buffer]); expect(buffer_paths).to.deep.equal([ ['buffers', 0], ['buffers', 1], ]); }); it('object in array', function () { const rawState = [{ buffer: uintArray }, { buffer: floatArray.buffer }]; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.deep.equal([{}, {}]); expect(buffers).to.deep.equal([uintArray.buffer, floatArray.buffer]); expect(buffer_paths).to.deep.equal([ [0, 'buffer'], [1, 'buffer'], ]); }); it('array in array', function () { const rawState = ['string', 45, [uintArray, floatArray.buffer]]; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.deep.equal(['string', 45, [null, null]]); expect(buffers).to.deep.equal([uintArray.buffer, floatArray.buffer]); expect(buffer_paths).to.deep.equal([ [2, 0], [2, 1], ]); }); it('object in object', function () { const rawState = { a: 'string', b: 45, buffers: { bufferA: uintArray, bufferB: floatArray.buffer, }, }; const { state, buffers, buffer_paths } = utils.remove_buffers(rawState); expect(state).to.deep.equal({ a: 'string', b: 45, buffers: {} }); expect(buffers).to.deep.equal([uintArray.buffer, floatArray.buffer]); expect(buffer_paths).to.deep.equal([ ['buffers', 'bufferA'], ['buffers', 'bufferB'], ]); }); }); }); ipywidgets-8.1.5/packages/base/test/src/widget_test.ts000066400000000000000000000656051466162644600231000ustar00rootroot00000000000000import { DummyManager, MockComm } from './dummy-manager'; import { expect } from 'chai'; import { IBackboneModelOptions } from '../../lib/'; import * as widgets from '../../lib/'; const WidgetModel = widgets.WidgetModel; import * as chai from 'chai'; import * as sinon from 'sinon'; import sinonChai from 'sinon-chai'; chai.use(sinonChai); describe('unpack_models', function () { beforeEach(async function () { this.manager = new DummyManager(); this.widgetA = await this.manager.new_widget({ model_name: 'WidgetModel', model_module: '@jupyter-widgets/base', model_module_version: '1.2.0', view_name: 'WidgetView', view_module: '@jupyter-widgets/base', view_module_version: '1.2.0', model_id: 'widgetA', }); this.widgetB = await this.manager.new_widget({ model_name: 'WidgetModel', model_module: '@jupyter-widgets/base', model_module_version: '1.2.0', view_name: 'WidgetView', view_module: '@jupyter-widgets/base', view_module_version: '1.2.0', model_id: 'widgetB', }); }); it('unpacks strings', async function () { const serialized = 'IPY_MODEL_widgetA'; const deserialized = this.widgetA; const value = await widgets.unpack_models(serialized, this.manager); expect(value).to.deep.equal(deserialized); }); it('recurses in arrays', async function () { const serialized = [ 'IPY_MODEL_widgetA', 'IPY_MODEL_widgetB', 'IPY_MODEL_widgetA', ]; const deserialized = [this.widgetA, this.widgetB, this.widgetA]; const value = await widgets.unpack_models(serialized, this.manager); expect(value).to.deep.equal(deserialized); }); it('recurses in objects', async function () { const serialized = { a: 'IPY_MODEL_widgetA', b: 'IPY_MODEL_widgetB' }; const deserialized = { a: this.widgetA, b: this.widgetB }; const value = await widgets.unpack_models(serialized, this.manager); expect(value).to.deep.equal(deserialized); }); it('recurses in nested objects', async function () { const serialized = { a: 'IPY_MODEL_widgetA', b: ['IPY_MODEL_widgetA', 'IPY_MODEL_widgetB', 'IPY_MODEL_widgetA'], c: { d: ['IPY_MODEL_widgetA'], e: 'IPY_MODEL_widgetB' }, }; const deserialized = { a: this.widgetA, b: [this.widgetA, this.widgetB, this.widgetA], c: { d: [this.widgetA], e: this.widgetB }, }; const value = await widgets.unpack_models(serialized, this.manager); expect(value).to.deep.equal(deserialized); }); }); describe('serialize/deserialize', function () { before(async function () { this.manager = new DummyManager(); this.widgetChild = await this.manager.new_widget({ model_name: 'WidgetModel', model_module: '@jupyter-widgets/base', model_module_version: '1.2.0', view_name: 'WidgetView', view_module: '@jupyter-widgets/base', view_module_version: '1.2.0', model_id: 'widgetChild', }); this.widgetChild2 = await this.manager.new_widget({ model_name: 'WidgetModel', model_module: '@jupyter-widgets/base', model_module_version: '1.2.0', view_name: 'WidgetView', view_module: '@jupyter-widgets/base', view_module_version: '1.2.0', model_id: 'widgetChild2', }); this.widgetContainer = await this.manager.new_widget( { model_name: 'ContainerWidget', model_module: 'test-widgets', model_module_version: '1.2.0', view_name: 'ContainerWidgetView', view_module: 'test-widgets', view_module_version: '1.2.0', model_id: 'widgetContainer', }, { children: [`IPY_MODEL_${this.widgetChild.model_id}`] } ); }); it('serializes', function () { const state = this.widgetContainer.get_state(false); const serializedState = this.widgetContainer.serialize(state); expect(serializedState).to.deep.equal({ _model_module: 'test-widgets', _model_module_version: '1.0.0', _model_name: 'ContainerWidget', _view_count: null, _view_module: 'test-widgets', _view_module_version: '1.0.0', _view_name: 'ContainerWidgetView', children: ['IPY_MODEL_widgetChild'], }); }); it('deserializes', async function () { const serializedState = { children: ['IPY_MODEL_widgetChild2'] }; const state = await ( this.widgetContainer.constructor as typeof WidgetModel )._deserialize_state(serializedState, this.manager); await this.widgetContainer.set_state(state); expect(this.widgetContainer.get('children')).to.deep.equal([ this.widgetChild2, ]); }); }); describe('WidgetModel', function () { before(async function () { this.setup = async function (): Promise { this.manager = new DummyManager(); this.comm = new MockComm(); sinon.spy(this.comm, 'send'); this.widget = new WidgetModel({}, { model_id: 'widget', widget_manager: this.manager, comm: this.comm, } as IBackboneModelOptions); // Create some dummy deserializers. One returns synchronously, and the // other asynchronously using a promise. this.serializeToJSON = sinon.spy(() => { return 'serialized'; }); this.widget.constructor.serializers = { times3: { deserialize: (value: number, manager: any): number => { return value * 3.0; }, }, halve: { deserialize: (value: number, manager: any): Promise => { return Promise.resolve(value / 2.0); }, }, spy: { deserialize: sinon.spy((value: any, manager: any) => { return 'deserialized'; }), serialize: sinon.spy((value: any, widget: any) => { return { toJSON: this.serializeToJSON, }; }), }, }; sinon.reset(); }; await this.setup(); sinon.spy(this.widget.constructor, '_deserialize_state'); }); describe('constructor', function () { beforeEach(async function () { await this.setup(); }); it('can take initial state', function () { const widget = new WidgetModel({ a: 1, b: 'b state' }, { model_id: 'widget', widget_manager: this.manager, } as IBackboneModelOptions); expect(widget.attributes).to.deep.equal({ ...widget.defaults(), a: 1, b: 'b state', }); }); it('sets the widget_manager, id, comm, and comm_live properties', function () { const widgetDead = new WidgetModel({}, { model_id: 'widgetDead', widget_manager: this.manager, } as IBackboneModelOptions); expect(widgetDead.model_id).to.equal('widgetDead'); expect(widgetDead.widget_manager).to.equal(this.manager); expect(widgetDead.comm).to.be.undefined; expect(widgetDead.comm_live).to.be.false; const comm = new MockComm(); const widgetLive = new WidgetModel({}, { model_id: 'widgetLive', widget_manager: this.manager, comm: comm, } as IBackboneModelOptions); expect(widgetLive.model_id).to.equal('widgetLive'); expect(widgetLive.widget_manager).to.equal(this.manager); expect(widgetLive.comm).to.equal(comm); expect(widgetLive.comm_live).to.be.true; }); it('initializes state_change and views attributes', async function () { const widget = new WidgetModel({ a: 1, b: 'b state' }, { model_id: 'widget', widget_manager: this.manager, } as IBackboneModelOptions); const x = await widget.state_change; expect(x).to.be.undefined; expect(widget.views).to.deep.equal({}); }); }); describe('send', function () { beforeEach(async function () { await this.setup(); }); it('sends custom messages with the right format', function () { const comm = new MockComm(); const send = sinon.spy(comm, 'send'); const widget = new WidgetModel({}, { model_id: 'widget', widget_manager: this.manager, comm: comm, } as IBackboneModelOptions); const data1 = { a: 1, b: 'state' }; const data2 = { a: 2, b: 'state' }; const callbacks = { iopub: {} }; const buffers = [new Int8Array([1, 2, 3])]; // send two messages to make sure the throttle does not affect sending. widget.send(data1, callbacks, buffers); widget.send(data2, callbacks, buffers); expect(send).to.be.calledTwice; expect(send.getCall(0)).to.be.calledWithExactly( { method: 'custom', content: data1 }, callbacks, {}, buffers ); expect(send.getCall(1)).to.be.calledWithExactly( { method: 'custom', content: data2 }, callbacks, {}, buffers ); }); }); describe('close', function () { beforeEach(async function () { await this.setup(); }); it('calls destroy', function () { const destroyed = sinon.spy(); this.widget.on('destroy', destroyed); this.widget.close(); expect(destroyed).to.be.calledOnce; }); it('deletes the reference to the comm', function () { this.widget.close(); expect(this.widget.comm).to.be.undefined; }); it('removes views', function () { this.widget.close(); expect(this.widget.views).to.be.undefined; }); it('closes and deletes the comm', function () { const close = sinon.spy(this.comm, 'close'); this.widget.close(); expect(close).to.be.calledOnce; expect(this.widget.comm).to.be.undefined; }); it('triggers a destroy event', function () { const destroyEventCallback = sinon.spy(); this.widget.on('destroy', destroyEventCallback); this.widget.close(); expect(destroyEventCallback).to.be.calledOnce; }); it('can be called twice', function () { this.widget.close(); this.widget.close(); }); }); describe('_handle_comm_closed', function () { beforeEach(async function () { await this.setup(); }); it('closes model', function () { const closeSpy = sinon.spy(this.widget, 'close'); this.widget._handle_comm_closed({}); expect(closeSpy).to.be.calledOnce; }); it('listens to the widget close event', function () { const closeSpy = sinon.spy(this.widget, 'close'); this.widget.comm.close(); expect(closeSpy).to.be.calledOnce; }); it('triggers a comm:close model event', function () { const closeEventCallback = sinon.spy(); this.widget.on('comm:close', closeEventCallback); this.widget._handle_comm_closed({}); expect(closeEventCallback).to.be.calledOnce; }); }); describe('_handle_comm_msg', function () { beforeEach(async function () { await this.setup(); }); it('listens to widget messages', async function () { await this.widget.comm._process_msg({ content: { data: { method: 'update', state: { a: 5 }, }, }, }); console.log(this.widget.get('a')); expect(this.widget.get('a')).to.equal(5); }); it('handles update messages', async function () { const deserialize = this.widget.constructor._deserialize_state; const setState = sinon.spy(this.widget, 'set_state'); const state_change = this.widget._handle_comm_msg({ content: { data: { method: 'update', state: { a: 5 }, }, }, }); expect(this.widget.state_change).to.equal(state_change); await state_change; expect(deserialize).to.be.calledOnce; expect(setState).to.be.calledOnce; expect(deserialize).to.be.calledBefore(setState); expect(this.widget.get('a')).to.equal(5); }); it('updates handle various types of binary buffers', async function () { const buffer1 = new Uint8Array([1, 2, 3]); const buffer2 = new Float64Array([2.3, 6.4]); const buffer3 = new Int16Array([10, 20, 30]); await this.widget._handle_comm_msg({ content: { data: { method: 'update', state: { a: 5, c: ['start', null, {}] }, buffer_paths: [['b'], ['c', 1], ['c', 2, 'd']], }, }, buffers: [buffer1, buffer2.buffer, new DataView(buffer3.buffer)], }); expect(this.widget.get('a')).to.equal(5); expect(this.widget.get('b')).to.deep.equal(new DataView(buffer1.buffer)); expect(this.widget.get('c')).to.deep.equal([ 'start', new DataView(buffer2.buffer), { d: new DataView(buffer3.buffer) }, ]); }); it('handles custom deserialization', async function () { await this.widget._handle_comm_msg({ content: { data: { method: 'update', state: { halve: 10, times3: 4 }, }, }, }); expect(this.widget.get('halve')).to.equal(5); expect(this.widget.get('times3')).to.equal(12); }); it('handles custom messages', function () { const customEventCallback = sinon.spy(); this.widget.on('msg:custom', customEventCallback); this.widget._handle_comm_msg({ content: { data: { method: 'custom' }, }, }); expect(customEventCallback).to.be.calledOnce; }); it('ignores echo_update messages when there is an expected echo_update', async function () { const send = sinon.spy(this.widget, 'send_sync_message'); // Set a value, generating an update message, get the message id from the comm? this.widget.set('a', 'original value'); this.widget.save_changes(); // Get the msg id const msgId = send.returnValues[0]; // Inject a echo_update message from another client await this.widget._handle_comm_msg({ parent_header: { msg_id: 'other-client', }, content: { data: { method: 'echo_update', state: { a: 'other client update 1' }, }, }, }); expect(this.widget.get('a')).to.equal('original value'); // Process a kernel update message, which should set the value await this.widget._handle_comm_msg({ parent_header: { msg_id: 'from-kernel', }, content: { data: { method: 'update', state: { a: 'kernel update' }, }, }, }); expect(this.widget.get('a')).to.equal('kernel update'); // Inject an echo_update message from us, resetting our value await this.widget._handle_comm_msg({ parent_header: { msg_id: msgId, }, content: { data: { method: 'echo_update', state: { a: 'original value' }, }, }, }); expect(this.widget.get('a')).to.equal('original value'); // Inject another echo_update message from another client, which also updates us await this.widget._handle_comm_msg({ parent_header: { msg_id: 'other-client-2', }, content: { data: { method: 'echo_update', state: { a: 'other client update 2' }, }, }, }); expect(this.widget.get('a')).to.equal('other client update 2'); }); }); describe('_deserialize_state', function () { beforeEach(async function () { await this.setup(); }); it('deserializes simple JSON state', async function () { const state = await this.widget.constructor._deserialize_state( { a: 10, b: [{ c: 'test1', d: ['test2'] }, 20] }, this.manager ); expect(state.a).to.equal(10); expect(state.b).to.deep.equal([{ c: 'test1', d: ['test2'] }, 20]); }); it('respects custom serializers', async function () { const state = await this.widget.constructor._deserialize_state( { times3: 2.0, halve: 2.0, c: 2.0 }, this.manager ); expect(state.times3).to.equal(6.0); expect(state.halve).to.equal(1.0); expect(state.c).to.equal(2.0); }); it('calls the deserializer with appropriate arguments', async function () { await this.widget.constructor._deserialize_state( { spy: 'value' }, this.manager ); const spy = this.widget.constructor.serializers.spy.deserialize; expect(spy).to.be.calledOnce; expect(spy).to.be.calledWithExactly('value', this.manager); }); }); describe('serialize', function () { beforeEach(async function () { await this.setup(); }); it('does simple serialization by copying values', function () { const b = { c: 'start' }; const state = { a: 5, b: b, }; const serialized_state = this.widget.serialize(state); // b state was copied expect(serialized_state.b).to.not.equal(b); expect(serialized_state).to.deep.equal({ a: 5, b: b }); }); it('serializes null values', function () { const state_with_null = { a: 5, b: null as any, }; const serialized_state = this.widget.serialize(state_with_null); expect(serialized_state.b).to.equal(null); }); it('calls custom serializers with appropriate arguments', function () { this.widget.serialize({ spy: 'value' }); const spy = this.widget.constructor.serializers.spy.serialize; expect(spy).to.be.calledWithExactly('value', this.widget); }); it('calls toJSON method if possible', function () { const serialized_state = this.widget.serialize({ spy: 'value' }); const spy = this.serializeToJSON; expect(spy).to.be.calledOnce; expect(serialized_state).to.deep.equal({ spy: 'serialized' }); }); }); describe('set_state', function () { beforeEach(async function () { await this.setup(); }); it('sets the state of the widget', function () { expect(this.widget.get('a')).to.be.undefined; expect(this.widget.get('b')).to.be.undefined; this.widget.set_state({ a: 2, b: 3 }); expect(this.widget.get('a')).to.equal(2); expect(this.widget.get('b')).to.equal(3); }); }); describe('set', function () { beforeEach(async function () { await this.setup(); }); it('triggers change events', async function () { const changeA = sinon.spy(function changeA() { return; }); const change = sinon.spy(function change() { return; }); this.widget.on('change:a', changeA); this.widget.on('change', change); this.widget.set('a', 100); expect(changeA).to.be.calledOnce; expect(changeA).to.be.calledWith(this.widget, 100); expect(changeA).to.be.calledBefore(change); expect(change).to.be.calledWith(this.widget); }); it('triggers change events after exception', async function () { const changeA = sinon.spy(function changeA() { return; }); const changeB = sinon.spy(function changeB() { throw 'error'; }); const change = sinon.spy(function change() { return; }); this.widget.on('change:a', changeA); this.widget.on('change:b', changeB); this.widget.on('change', change); // first we trigger a set that causes an exception try { this.widget.set('b', 42); } catch { // empty } expect(change).to.not.be.called; // from now on this test is similar to 'triggers change events' this.widget.set('a', 100); expect(changeA).to.be.calledOnce; expect(changeA).to.be.calledWith(this.widget, 100); expect(changeA).to.be.calledBefore(change); expect(change).to.be.calledWith(this.widget); }); it('handles multiple values to set', function () { expect(this.widget.get('a')).to.be.undefined; expect(this.widget.get('b')).to.be.undefined; this.widget.set({ a: 2, b: 3 }); expect(this.widget.get('a')).to.equal(2); expect(this.widget.get('b')).to.equal(3); }); }); describe('save_changes', function () { beforeEach(async function () { await this.setup(); }); it('remembers changes across multiple set calls', function () { sinon.spy(this.widget, 'save'); expect(this.widget.get('a')).to.be.undefined; expect(this.widget.get('b')).to.be.undefined; this.widget.set('a', 2); this.widget.set('b', 5); this.widget.save_changes(); expect(this.widget.save).to.be.calledWith({ a: 2, b: 5 }); }); it('will not sync changes done by set_state', function () { sinon.spy(this.widget, 'save'); expect(this.widget.get('a')).to.be.undefined; expect(this.widget.get('b')).to.be.undefined; this.widget.on('change:a', () => { this.widget.set('b', 15); }); this.widget.set_state({ a: 10 }); expect(this.widget.get('a')).to.equal(10); expect(this.widget.get('b')).to.equal(15); this.widget.save_changes(); expect(this.widget.save).to.be.calledWith({ b: 15 }); }); }); describe('get_state', function () { beforeEach(async function () { await this.setup(); }); it('gets all of the state', function () { this.widget.set('a', 'get_state test'); expect(this.widget.get_state()).to.deep.equal({ _model_module: '@jupyter-widgets/base', _model_name: 'WidgetModel', _model_module_version: '2.0.0', _view_module: '@jupyter-widgets/base', _view_name: null, _view_module_version: '2.0.0', _view_count: null, a: 'get_state test', }); }); it('drop_defaults is respected', function () { this.widget.set('a', 'get_state test'); expect(this.widget.get_state(true)).to.deep.equal({ a: 'get_state test', }); }); }); describe('callbacks', function () { beforeEach(async function () { await this.setup(); }); it('returns a blank object', function () { expect(this.widget.callbacks()).to.deep.equal({}); }); }); describe('sync', function () { beforeEach(async function () { await this.setup(); }); it('respects the message throttle', function () { // reuse the callback, similar to .touch in views, which will // expose an bug of calling onstatus multiple times const callbacks = this.widget.callbacks(); this.widget.set('a', 'sync test'); expect(this.widget._pending_msgs).to.equal(0); this.widget.save_changes(callbacks); expect(this.widget._pending_msgs).to.equal(1); this.widget.set('a', 'another sync test'); this.widget.set('b', 'change b'); this.widget.save_changes(callbacks); this.widget.set('b', 'change b again'); this.widget.save_changes(callbacks); expect(this.widget._pending_msgs).to.equal(1); // check that one sync message went through expect(this.comm.send).to.be.calledOnce; expect(this.comm.send).to.be.calledWith({ method: 'update', state: { a: 'sync test' }, buffer_paths: [], }); expect(this.widget._msg_buffer).to.deep.equal({ a: 'another sync test', b: 'change b again', }); expect(this.widget._msg_buffer_callbacks).to.not.equals(null); // have the comm send a status idle message this.comm.send.lastCall.args[1].iopub.status({ content: { execution_state: 'idle', }, }); // we directly get a new pending message expect(this.widget._pending_msgs).to.equal(1); expect(this.widget._msg_buffer).to.equal(null); expect(this.widget._msg_buffer_callbacks).to.equals(null); // check that the other sync message went through with the updated values expect(this.comm.send.secondCall).to.be.calledWith({ method: 'update', state: { a: 'another sync test', b: 'change b again', }, buffer_paths: [], }); this.comm.send.lastCall.args[1].iopub.status({ content: { execution_state: 'idle', }, }); expect(this.widget._pending_msgs).to.equal(0); // repeat again this.comm.send.resetHistory(); this.widget.set('a', 'sync test - 2'); this.widget.save_changes(callbacks); expect(this.widget._pending_msgs).to.equal(1); this.widget.set('a', 'another sync test - 2'); this.widget.set('b', 'change b - 2'); this.widget.save_changes(callbacks); this.widget.set('b', 'change b again - 2'); this.widget.save_changes(callbacks); expect(this.widget._pending_msgs).to.equal(1); expect(this.comm.send).to.be.calledOnce; expect(this.comm.send).to.be.calledWith({ method: 'update', state: { a: 'sync test - 2' }, buffer_paths: [], }); this.comm.send.lastCall.args[1].iopub.status({ content: { execution_state: 'idle', }, }); // again, directly a new message expect(this.widget._pending_msgs).to.equal(1); expect(this.comm.send.secondCall).to.be.calledWith({ method: 'update', state: { a: 'another sync test - 2', b: 'change b again - 2', }, buffer_paths: [], }); this.comm.send.lastCall.args[1].iopub.status({ content: { execution_state: 'idle', }, }); expect(this.widget._pending_msgs).to.equal(0); }); it('Initial values are *not* sent on creation', function () { expect(this.comm.send.callCount).to.equal(0); }); }); describe('send_sync_message', function () { beforeEach(async function () { await this.setup(); }); it('sends a message', function () { this.widget.send_sync_message( { a: 'send sync message', b: 'b value', }, {} ); expect(this.comm.send).to.be.calledWith({ method: 'update', state: { a: 'send sync message', b: 'b value', }, buffer_paths: [], }); }); it('handles buffers in messages', function () { const buffer = new Uint8Array([1, 2, 3]); this.widget.send_sync_message({ a: buffer, }); expect(this.comm.send.args[0][0]).to.deep.equal({ method: 'update', state: {}, buffer_paths: [['a']], }); expect(this.comm.send.args[0][3]).to.deep.equal([buffer.buffer]); }); }); describe('on_some_change', function () { beforeEach(async function () { await this.setup(); }); it('is called once for multiple change notifications', async function () { const changeCallback = sinon.spy(); const someChangeCallback = sinon.spy(); this.widget.on('change:a change:b', changeCallback); this.widget.on_some_change(['a', 'b'], someChangeCallback); this.widget.set_state({ a: true, b: true }); expect(changeCallback.callCount).to.equal(2); expect(someChangeCallback).to.be.calledOnce; }); }); describe('toJSON', function () { beforeEach(async function () { await this.setup(); }); it('encodes the widget', function () { expect(this.widget.toJSON()).to.equal( `IPY_MODEL_${this.widget.model_id}` ); }); }); }); ipywidgets-8.1.5/packages/base/test/tsconfig.json000066400000000000000000000003271466162644600221140ustar00rootroot00000000000000{ "extends": "../../../tsconfigbase", "compilerOptions": { "types": ["mocha"], "outDir": "build", "rootDir": "src" }, "include": ["src/*"], "references": [ { "path": ".." } ] } ipywidgets-8.1.5/packages/base/test/webpack-cov.conf.js000066400000000000000000000012631466162644600230700ustar00rootroot00000000000000var path = require('path'); module.exports = { entry: './test/build/index.js', output: { path: __dirname + '/build', filename: 'coverage.js', }, bail: true, module: { loaders: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.md$/, type: 'asset/source' }, { test: /\.html$/, type: 'asset/resource', generator: { filename: '[name].[ext]' }, }, { test: /\.ipynb$/, type: 'json' }, ], preLoaders: [ // instrument only testing sources with Istanbul { test: /\.js$/, include: path.resolve('lib/'), loader: 'istanbul-instrumenter', }, ], }, }; ipywidgets-8.1.5/packages/base/test/webpack.conf.js000066400000000000000000000010501466162644600222750ustar00rootroot00000000000000var path = require('path'); module.exports = { entry: './test/build/index.js', output: { path: __dirname + '/build', filename: 'bundle.js', }, bail: true, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.md$/, type: 'asset/source' }, { test: /\.html$/, type: 'asset/resource', generator: { filename: '[name].[ext]' }, }, { test: /\.ipynb$/, type: 'json' }, ], }, mode: 'development', resolve: { fallback: { util: false } }, }; ipywidgets-8.1.5/packages/base/tsconfig.json000066400000000000000000000002041466162644600211270ustar00rootroot00000000000000{ "extends": "../../tsconfigbase", "compilerOptions": { "outDir": "lib", "rootDir": "src" }, "include": ["src/*"] } ipywidgets-8.1.5/packages/controls/000077500000000000000000000000001466162644600173555ustar00rootroot00000000000000ipywidgets-8.1.5/packages/controls/.gitignore000066400000000000000000000001021466162644600213360ustar00rootroot00000000000000css/widgets.built.css lib-embed/ docs-embed/ dist/ test/coverage/ ipywidgets-8.1.5/packages/controls/.jshintrc000066400000000000000000000000731466162644600212020ustar00rootroot00000000000000{ "esnext": true, "expr": true, "node": true } ipywidgets-8.1.5/packages/controls/.npmignore000066400000000000000000000001151466162644600213510ustar00rootroot00000000000000.DS_Store node_modules/ test/ .jshintrc karma.conf.js build_css.js examples/ ipywidgets-8.1.5/packages/controls/README.md000066400000000000000000000007321466162644600206360ustar00rootroot00000000000000# Jupyter JS Widgets Interactive widgets for the Jupyter notebook. This packages contains the implementation of the core Jupyter interactive widgets. The reference Python backend, `ipywidgets` is available [here](https://github.com/jupyter-widgets/ipywidgets), with more examples. ## Package Install **Prerequisites** - [node](http://nodejs.org/) Run the following command **at the root of this repository**. ```bash npm install --save @jupyter-widgets/controls ``` ipywidgets-8.1.5/packages/controls/css/000077500000000000000000000000001466162644600201455ustar00rootroot00000000000000ipywidgets-8.1.5/packages/controls/css/labvariables.css000066400000000000000000000155771466162644600233250ustar00rootroot00000000000000/*----------------------------------------------------------------------------- | Copyright (c) Jupyter Development Team. | Distributed under the terms of the Modified BSD License. |----------------------------------------------------------------------------*/ /* This file is copied from the JupyterLab project to define default styling for when the widget styling is compiled down to eliminate CSS variables. We make one change - we comment out the font import below. */ @import './materialcolors.css'; /* The following CSS variables define the main, public API for styling JupyterLab. These variables should be used by all plugins wherever possible. In other words, plugins should not define custom colors, sizes, etc unless absolutely necessary. This enables users to change the visual theme of JupyterLab by changing these variables. Many variables appear in an ordered sequence (0,1,2,3). These sequences are designed to work well together, so for example, `--jp-border-color1` should be used with `--jp-layout-color1`. The numbers have the following meanings: * 0: super-primary, reserved for special emphasis * 1: primary, most important under normal situations * 2: secondary, next most important under normal situations * 3: tertiary, next most important under normal situations Throughout JupyterLab, we are mostly following principles from Google's Material Design when selecting colors. We are not, however, following all of MD as it is not optimized for dense, information rich UIs. */ /* * Optional monospace font for input/output prompt. */ /* Commented out in ipywidgets since we don't need it. */ /* @import url('https://fonts.googleapis.com/css?family=Roboto+Mono'); */ /* * Added for compatibility with output area */ :root { --jp-icon-search: none; --jp-ui-select-caret: none; } :root { /* Borders The following variables, specify the visual styling of borders in JupyterLab. */ --jp-border-width: 1px; --jp-border-color0: var(--md-grey-700); --jp-border-color1: var(--md-grey-500); --jp-border-color2: var(--md-grey-300); --jp-border-color3: var(--md-grey-100); /* UI Fonts The UI font CSS variables are used for the typography all of the JupyterLab user interface elements that are not directly user generated content. */ --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: calc( var(--jp-ui-font-size1) / var(--jp-ui-font-scale-factor) ); --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: calc( var(--jp-ui-font-size1) * var(--jp-ui-font-scale-factor) ); --jp-ui-font-size3: calc( var(--jp-ui-font-size2) * var(--jp-ui-font-scale-factor) ); --jp-ui-icon-font-size: 14px; /* Ensures px perfect FontAwesome icons */ --jp-ui-font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; /* Use these font colors against the corresponding main layout colors. In a light theme, these go from dark to light. */ --jp-ui-font-color0: rgba(0, 0, 0, 1); --jp-ui-font-color1: rgba(0, 0, 0, 0.8); --jp-ui-font-color2: rgba(0, 0, 0, 0.5); --jp-ui-font-color3: rgba(0, 0, 0, 0.3); /* Use these against the brand/accent/warn/error colors. These will typically go from light to darker, in both a dark and light theme */ --jp-ui-inverse-font-color0: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color1: rgba(255, 255, 255, 1); --jp-ui-inverse-font-color2: rgba(255, 255, 255, 0.7); --jp-ui-inverse-font-color3: rgba(255, 255, 255, 0.5); /* Content Fonts Content font variables are used for typography of user generated content. */ --jp-content-font-size: 13px; --jp-content-line-height: 1.5; --jp-content-font-color0: black; --jp-content-font-color1: black; --jp-content-font-color2: var(--md-grey-700); --jp-content-font-color3: var(--md-grey-500); --jp-ui-font-scale-factor: 1.2; --jp-ui-font-size0: calc( var(--jp-ui-font-size1) / var(--jp-ui-font-scale-factor) ); --jp-ui-font-size1: 13px; /* Base font size */ --jp-ui-font-size2: calc( var(--jp-ui-font-size1) * var(--jp-ui-font-scale-factor) ); --jp-ui-font-size3: calc( var(--jp-ui-font-size2) * var(--jp-ui-font-scale-factor) ); --jp-code-font-size: 13px; --jp-code-line-height: 1.307; --jp-code-padding: 5px; --jp-code-font-family: monospace; /* Layout The following are the main layout colors use in JupyterLab. In a light theme these would go from light to dark. */ --jp-layout-color0: white; --jp-layout-color1: white; --jp-layout-color2: var(--md-grey-200); --jp-layout-color3: var(--md-grey-400); /* Brand/accent */ --jp-brand-color0: var(--md-blue-700); --jp-brand-color1: var(--md-blue-500); --jp-brand-color2: var(--md-blue-300); --jp-brand-color3: var(--md-blue-100); --jp-accent-color0: var(--md-green-700); --jp-accent-color1: var(--md-green-500); --jp-accent-color2: var(--md-green-300); --jp-accent-color3: var(--md-green-100); /* State colors (warn, error, success, info) */ --jp-warn-color0: var(--md-orange-700); --jp-warn-color1: var(--md-orange-500); --jp-warn-color2: var(--md-orange-300); --jp-warn-color3: var(--md-orange-100); --jp-error-color0: var(--md-red-700); --jp-error-color1: var(--md-red-500); --jp-error-color2: var(--md-red-300); --jp-error-color3: var(--md-red-100); --jp-success-color0: var(--md-green-700); --jp-success-color1: var(--md-green-500); --jp-success-color2: var(--md-green-300); --jp-success-color3: var(--md-green-100); --jp-info-color0: var(--md-cyan-700); --jp-info-color1: var(--md-cyan-500); --jp-info-color2: var(--md-cyan-300); --jp-info-color3: var(--md-cyan-100); /* Cell specific styles */ --jp-cell-padding: 5px; --jp-cell-editor-background: #f7f7f7; --jp-cell-editor-border-color: #cfcfcf; --jp-cell-editor-background-edit: var(--jp-ui-layout-color1); --jp-cell-editor-border-color-edit: var(--jp-brand-color1); --jp-cell-prompt-width: 100px; --jp-cell-prompt-font-family: 'Roboto Mono', monospace; --jp-cell-prompt-letter-spacing: 0px; --jp-cell-prompt-opacity: 1; --jp-cell-prompt-opacity-not-active: 0.4; --jp-cell-prompt-font-color-not-active: var(--md-grey-700); /* A custom blend of MD grey and blue 600 * See https://meyerweb.com/eric/tools/color-blend/#546E7A:1E88E5:5:hex */ --jp-cell-inprompt-font-color: #307fc1; /* A custom blend of MD grey and orange 600 * https://meyerweb.com/eric/tools/color-blend/#546E7A:F4511E:5:hex */ --jp-cell-outprompt-font-color: #bf5b3d; /* Notebook specific styles */ --jp-notebook-padding: 10px; --jp-notebook-scroll-padding: 100px; /* Console specific styles */ --jp-console-background: var(--md-grey-100); /* Toolbar specific styles */ --jp-toolbar-border-color: var(--md-grey-400); --jp-toolbar-micro-height: 8px; --jp-toolbar-background: var(--jp-layout-color0); --jp-toolbar-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.24); --jp-toolbar-header-margin: 4px 4px 0px 4px; --jp-toolbar-active-background: var(--md-grey-300); } ipywidgets-8.1.5/packages/controls/css/lumino.css000066400000000000000000000211541466162644600221650ustar00rootroot00000000000000/* This file has code derived from Lumino CSS files, as noted below. The license for this Lumino code is: Copyright (c) 2019 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. Copyright (c) 2014-2017, PhosphorJS 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: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 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. * 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. */ /* * The following section is derived from https://github.com/jupyterlab/lumino/blob/23b9d075ebc5b73ab148b6ebfc20af97f85714c4/packages/widgets/style/tabbar.css * We've scoped the rules so that they are consistent with exactly our code. */ /* */ .jupyter-widgets.widget-tab > .p-TabBar, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar { display: flex; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } /* */ .jupyter-widgets.widget-tab > .p-TabBar[data-orientation='horizontal'], /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar[data-orientation='horizontal'], /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar[data-orientation='horizontal'] { flex-direction: row; } /* */ .jupyter-widgets.widget-tab > .p-TabBar[data-orientation='vertical'], /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar[data-orientation='vertical'], /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar[data-orientation='vertical'] { flex-direction: column; } /* */ .jupyter-widgets.widget-tab > .p-TabBar > .p-TabBar-content, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar > .p-TabBar-content, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar > .lm-TabBar-content { margin: 0; padding: 0; display: flex; flex: 1 1 auto; list-style-type: none; } /* */ .jupyter-widgets.widget-tab > .p-TabBar[data-orientation='horizontal'] > .p-TabBar-content, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar[data-orientation='horizontal'] > .p-TabBar-content, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar[data-orientation='horizontal'] > .lm-TabBar-content { flex-direction: row; } /* */ .jupyter-widgets.widget-tab > .p-TabBar[data-orientation='vertical'] > .p-TabBar-content, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar[data-orientation='vertical'] > .p-TabBar-content, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar[data-orientation='vertical'] > .lm-TabBar-content { flex-direction: column; } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tab, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tab, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tab { display: flex; flex-direction: row; box-sizing: border-box; overflow: hidden; } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tabIcon, /* */ /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tabCloseIcon, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tabIcon, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tabCloseIcon, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tabIcon, .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tabCloseIcon { flex: 0 0 auto; } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tabLabel, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tabLabel, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tabLabel { flex: 1 1 auto; overflow: hidden; white-space: nowrap; } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tab.p-mod-hidden, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tab.p-mod-hidden, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tab.lm-mod-hidden { display: none !important; } /* */ .jupyter-widgets.widget-tab > .p-TabBar.p-mod-dragging .p-TabBar-tab, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar.p-mod-dragging .p-TabBar-tab, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar.lm-mod-dragging .lm-TabBar-tab { position: relative; } /* */ .jupyter-widgets.widget-tab > .p-TabBar.p-mod-dragging[data-orientation='horizontal'] .p-TabBar-tab, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar.p-mod-dragging[data-orientation='horizontal'] .p-TabBar-tab, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar.lm-mod-dragging[data-orientation='horizontal'] .lm-TabBar-tab { left: 0; transition: left 150ms ease; } /* */ .jupyter-widgets.widget-tab > .p-TabBar.p-mod-dragging[data-orientation='vertical'] .p-TabBar-tab, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar.p-mod-dragging[data-orientation='vertical'] .p-TabBar-tab, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar.lm-mod-dragging[data-orientation='vertical'] .lm-TabBar-tab { top: 0; transition: top 150ms ease; } /* */ .jupyter-widgets.widget-tab > .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar.p-mod-dragging .p-TabBar-tab.p-mod-dragging, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar.lm-mod-dragging .lm-TabBar-tab.lm-mod-dragging { transition: none; } /* End tabbar.css */ ipywidgets-8.1.5/packages/controls/css/materialcolors.css000066400000000000000000000211721466162644600237020ustar00rootroot00000000000000/** * The material design colors are adapted from google-material-color v1.2.6 * https://github.com/danlevan/google-material-color * https://github.com/danlevan/google-material-color/blob/f67ca5f4028b2f1b34862f64b0ca67323f91b088/dist/palette.var.css * * The license for the material design color CSS variables is as follows (see * https://github.com/danlevan/google-material-color/blob/f67ca5f4028b2f1b34862f64b0ca67323f91b088/LICENSE) * * The MIT License (MIT) * * Copyright (c) 2014 Dan Le Van * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ :root { --md-red-50: #ffebee; --md-red-100: #ffcdd2; --md-red-200: #ef9a9a; --md-red-300: #e57373; --md-red-400: #ef5350; --md-red-500: #f44336; --md-red-600: #e53935; --md-red-700: #d32f2f; --md-red-800: #c62828; --md-red-900: #b71c1c; --md-red-A100: #ff8a80; --md-red-A200: #ff5252; --md-red-A400: #ff1744; --md-red-A700: #d50000; --md-pink-50: #fce4ec; --md-pink-100: #f8bbd0; --md-pink-200: #f48fb1; --md-pink-300: #f06292; --md-pink-400: #ec407a; --md-pink-500: #e91e63; --md-pink-600: #d81b60; --md-pink-700: #c2185b; --md-pink-800: #ad1457; --md-pink-900: #880e4f; --md-pink-A100: #ff80ab; --md-pink-A200: #ff4081; --md-pink-A400: #f50057; --md-pink-A700: #c51162; --md-purple-50: #f3e5f5; --md-purple-100: #e1bee7; --md-purple-200: #ce93d8; --md-purple-300: #ba68c8; --md-purple-400: #ab47bc; --md-purple-500: #9c27b0; --md-purple-600: #8e24aa; --md-purple-700: #7b1fa2; --md-purple-800: #6a1b9a; --md-purple-900: #4a148c; --md-purple-A100: #ea80fc; --md-purple-A200: #e040fb; --md-purple-A400: #d500f9; --md-purple-A700: #aa00ff; --md-deep-purple-50: #ede7f6; --md-deep-purple-100: #d1c4e9; --md-deep-purple-200: #b39ddb; --md-deep-purple-300: #9575cd; --md-deep-purple-400: #7e57c2; --md-deep-purple-500: #673ab7; --md-deep-purple-600: #5e35b1; --md-deep-purple-700: #512da8; --md-deep-purple-800: #4527a0; --md-deep-purple-900: #311b92; --md-deep-purple-A100: #b388ff; --md-deep-purple-A200: #7c4dff; --md-deep-purple-A400: #651fff; --md-deep-purple-A700: #6200ea; --md-indigo-50: #e8eaf6; --md-indigo-100: #c5cae9; --md-indigo-200: #9fa8da; --md-indigo-300: #7986cb; --md-indigo-400: #5c6bc0; --md-indigo-500: #3f51b5; --md-indigo-600: #3949ab; --md-indigo-700: #303f9f; --md-indigo-800: #283593; --md-indigo-900: #1a237e; --md-indigo-A100: #8c9eff; --md-indigo-A200: #536dfe; --md-indigo-A400: #3d5afe; --md-indigo-A700: #304ffe; --md-blue-50: #e3f2fd; --md-blue-100: #bbdefb; --md-blue-200: #90caf9; --md-blue-300: #64b5f6; --md-blue-400: #42a5f5; --md-blue-500: #2196f3; --md-blue-600: #1e88e5; --md-blue-700: #1976d2; --md-blue-800: #1565c0; --md-blue-900: #0d47a1; --md-blue-A100: #82b1ff; --md-blue-A200: #448aff; --md-blue-A400: #2979ff; --md-blue-A700: #2962ff; --md-light-blue-50: #e1f5fe; --md-light-blue-100: #b3e5fc; --md-light-blue-200: #81d4fa; --md-light-blue-300: #4fc3f7; --md-light-blue-400: #29b6f6; --md-light-blue-500: #03a9f4; --md-light-blue-600: #039be5; --md-light-blue-700: #0288d1; --md-light-blue-800: #0277bd; --md-light-blue-900: #01579b; --md-light-blue-A100: #80d8ff; --md-light-blue-A200: #40c4ff; --md-light-blue-A400: #00b0ff; --md-light-blue-A700: #0091ea; --md-cyan-50: #e0f7fa; --md-cyan-100: #b2ebf2; --md-cyan-200: #80deea; --md-cyan-300: #4dd0e1; --md-cyan-400: #26c6da; --md-cyan-500: #00bcd4; --md-cyan-600: #00acc1; --md-cyan-700: #0097a7; --md-cyan-800: #00838f; --md-cyan-900: #006064; --md-cyan-A100: #84ffff; --md-cyan-A200: #18ffff; --md-cyan-A400: #00e5ff; --md-cyan-A700: #00b8d4; --md-teal-50: #e0f2f1; --md-teal-100: #b2dfdb; --md-teal-200: #80cbc4; --md-teal-300: #4db6ac; --md-teal-400: #26a69a; --md-teal-500: #009688; --md-teal-600: #00897b; --md-teal-700: #00796b; --md-teal-800: #00695c; --md-teal-900: #004d40; --md-teal-A100: #a7ffeb; --md-teal-A200: #64ffda; --md-teal-A400: #1de9b6; --md-teal-A700: #00bfa5; --md-green-50: #e8f5e9; --md-green-100: #c8e6c9; --md-green-200: #a5d6a7; --md-green-300: #81c784; --md-green-400: #66bb6a; --md-green-500: #4caf50; --md-green-600: #43a047; --md-green-700: #388e3c; --md-green-800: #2e7d32; --md-green-900: #1b5e20; --md-green-A100: #b9f6ca; --md-green-A200: #69f0ae; --md-green-A400: #00e676; --md-green-A700: #00c853; --md-light-green-50: #f1f8e9; --md-light-green-100: #dcedc8; --md-light-green-200: #c5e1a5; --md-light-green-300: #aed581; --md-light-green-400: #9ccc65; --md-light-green-500: #8bc34a; --md-light-green-600: #7cb342; --md-light-green-700: #689f38; --md-light-green-800: #558b2f; --md-light-green-900: #33691e; --md-light-green-A100: #ccff90; --md-light-green-A200: #b2ff59; --md-light-green-A400: #76ff03; --md-light-green-A700: #64dd17; --md-lime-50: #f9fbe7; --md-lime-100: #f0f4c3; --md-lime-200: #e6ee9c; --md-lime-300: #dce775; --md-lime-400: #d4e157; --md-lime-500: #cddc39; --md-lime-600: #c0ca33; --md-lime-700: #afb42b; --md-lime-800: #9e9d24; --md-lime-900: #827717; --md-lime-A100: #f4ff81; --md-lime-A200: #eeff41; --md-lime-A400: #c6ff00; --md-lime-A700: #aeea00; --md-yellow-50: #fffde7; --md-yellow-100: #fff9c4; --md-yellow-200: #fff59d; --md-yellow-300: #fff176; --md-yellow-400: #ffee58; --md-yellow-500: #ffeb3b; --md-yellow-600: #fdd835; --md-yellow-700: #fbc02d; --md-yellow-800: #f9a825; --md-yellow-900: #f57f17; --md-yellow-A100: #ffff8d; --md-yellow-A200: #ffff00; --md-yellow-A400: #ffea00; --md-yellow-A700: #ffd600; --md-amber-50: #fff8e1; --md-amber-100: #ffecb3; --md-amber-200: #ffe082; --md-amber-300: #ffd54f; --md-amber-400: #ffca28; --md-amber-500: #ffc107; --md-amber-600: #ffb300; --md-amber-700: #ffa000; --md-amber-800: #ff8f00; --md-amber-900: #ff6f00; --md-amber-A100: #ffe57f; --md-amber-A200: #ffd740; --md-amber-A400: #ffc400; --md-amber-A700: #ffab00; --md-orange-50: #fff3e0; --md-orange-100: #ffe0b2; --md-orange-200: #ffcc80; --md-orange-300: #ffb74d; --md-orange-400: #ffa726; --md-orange-500: #ff9800; --md-orange-600: #fb8c00; --md-orange-700: #f57c00; --md-orange-800: #ef6c00; --md-orange-900: #e65100; --md-orange-A100: #ffd180; --md-orange-A200: #ffab40; --md-orange-A400: #ff9100; --md-orange-A700: #ff6d00; --md-deep-orange-50: #fbe9e7; --md-deep-orange-100: #ffccbc; --md-deep-orange-200: #ffab91; --md-deep-orange-300: #ff8a65; --md-deep-orange-400: #ff7043; --md-deep-orange-500: #ff5722; --md-deep-orange-600: #f4511e; --md-deep-orange-700: #e64a19; --md-deep-orange-800: #d84315; --md-deep-orange-900: #bf360c; --md-deep-orange-A100: #ff9e80; --md-deep-orange-A200: #ff6e40; --md-deep-orange-A400: #ff3d00; --md-deep-orange-A700: #dd2c00; --md-brown-50: #efebe9; --md-brown-100: #d7ccc8; --md-brown-200: #bcaaa4; --md-brown-300: #a1887f; --md-brown-400: #8d6e63; --md-brown-500: #795548; --md-brown-600: #6d4c41; --md-brown-700: #5d4037; --md-brown-800: #4e342e; --md-brown-900: #3e2723; --md-grey-50: #fafafa; --md-grey-100: #f5f5f5; --md-grey-200: #eeeeee; --md-grey-300: #e0e0e0; --md-grey-400: #bdbdbd; --md-grey-500: #9e9e9e; --md-grey-600: #757575; --md-grey-700: #616161; --md-grey-800: #424242; --md-grey-900: #212121; --md-blue-grey-50: #eceff1; --md-blue-grey-100: #cfd8dc; --md-blue-grey-200: #b0bec5; --md-blue-grey-300: #90a4ae; --md-blue-grey-400: #78909c; --md-blue-grey-500: #607d8b; --md-blue-grey-600: #546e7a; --md-blue-grey-700: #455a64; --md-blue-grey-800: #37474f; --md-blue-grey-900: #263238; } ipywidgets-8.1.5/packages/controls/css/nouislider-custom.css000066400000000000000000000042631466162644600243510ustar00rootroot00000000000000/* Copyright (c) Jupyter Development Team. * Distributed under the terms of the Modified BSD License. */ /* Custom CSS for nouislider */ .noUi-connect { background: rgb(33, 150, 243); } .noUi-horizontal { height: var(--jp-widgets-slider-track-thickness); } .noUi-vertical { width: var(--jp-widgets-slider-track-thickness); height: 100%; } .noUi-horizontal .noUi-handle { width: var(--jp-widgets-slider-handle-size); height: var(--jp-widgets-slider-handle-size); border-radius: 50%; top: calc( ( var(--jp-widgets-slider-track-thickness) - var(--jp-widgets-slider-handle-size) ) / 2 ); right: calc(var(--jp-widgets-slider-handle-size) / -2); } .noUi-vertical .noUi-handle { height: var(--jp-widgets-slider-handle-size); width: var(--jp-widgets-slider-handle-size); border-radius: 50%; right: calc( ( var(--jp-widgets-slider-handle-size) - var(--jp-widgets-slider-track-thickness) ) / -2 ); top: calc(var(--jp-widgets-slider-handle-size) / -2); } .noUi-handle:after { content: none; } .noUi-handle:before { content: none; } .noUi-target { background: #fafafa; border-radius: 4px; border: 1px; /* box-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB; */ } .ui-slider { border: var(--jp-widgets-slider-border-width) solid var(--jp-layout-color3); background: var(--jp-layout-color3); box-sizing: border-box; position: relative; border-radius: 0px; } .noUi-handle { width: var(--jp-widgets-slider-handle-size); border: 1px solid #d9d9d9; border-radius: 3px; background: #fff; cursor: default; box-shadow: none; outline: none; } .noUi-target:not([disabled]) .noUi-handle:hover, .noUi-target:not([disabled]) .noUi-handle:focus { background-color: var(--jp-widgets-slider-active-handle-color); border: var(--jp-widgets-slider-border-width) solid var(--jp-widgets-slider-active-handle-color); } [disabled].noUi-target { opacity: 0.35; } .noUi-connects { overflow: visible; z-index: 0; background: var(--jp-layout-color3); } .noUi-vertical .noUi-connect { width: calc(100% + 2px); right: -1px; } .noUi-horizontal .noUi-connect { height: calc(100% + 2px); top: -1px; } ipywidgets-8.1.5/packages/controls/css/nouislider.less000066400000000000000000000025551466162644600232210ustar00rootroot00000000000000/* The nouislider.css file is autogenerated from nouislider.less, which imports and wraps the nouislider/src/nouislider.less styles. MIT License Copyright (c) 2019 Léon Gersen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* The .widget-slider class is deprecated */ .widget-slider, .jupyter-widget-slider { @import "nouislider/src/nouislider.less"; @import (less) "./nouislider-custom.css"; }; ipywidgets-8.1.5/packages/controls/css/widgets-base.css000066400000000000000000001215511466162644600232420ustar00rootroot00000000000000/* Copyright (c) Jupyter Development Team. * Distributed under the terms of the Modified BSD License. */ /* * We assume that the CSS variables in * https://github.com/jupyterlab/jupyterlab/blob/master/src/default-theme/variables.css * have been defined. */ @import './lumino.css'; @import './nouislider.css'; :root { --jp-widgets-color: var(--jp-content-font-color1); --jp-widgets-label-color: var(--jp-widgets-color); --jp-widgets-readout-color: var(--jp-widgets-color); --jp-widgets-font-size: var(--jp-ui-font-size1); --jp-widgets-margin: 2px; --jp-widgets-inline-height: 28px; --jp-widgets-inline-width: 300px; --jp-widgets-inline-width-short: calc( var(--jp-widgets-inline-width) / 2 - var(--jp-widgets-margin) ); --jp-widgets-inline-width-tiny: calc( var(--jp-widgets-inline-width-short) / 2 - var(--jp-widgets-margin) ); --jp-widgets-inline-margin: 4px; /* margin between inline elements */ --jp-widgets-inline-label-width: 80px; --jp-widgets-border-width: var(--jp-border-width); --jp-widgets-vertical-height: 200px; --jp-widgets-horizontal-tab-height: 24px; --jp-widgets-horizontal-tab-width: 144px; --jp-widgets-horizontal-tab-top-border: 2px; --jp-widgets-progress-thickness: 20px; --jp-widgets-container-padding: 15px; --jp-widgets-input-padding: 4px; --jp-widgets-radio-item-height-adjustment: 8px; --jp-widgets-radio-item-height: calc( var(--jp-widgets-inline-height) - var(--jp-widgets-radio-item-height-adjustment) ); --jp-widgets-slider-track-thickness: 4px; --jp-widgets-slider-border-width: var(--jp-widgets-border-width); --jp-widgets-slider-handle-size: 16px; --jp-widgets-slider-handle-border-color: var(--jp-border-color1); --jp-widgets-slider-handle-background-color: var(--jp-layout-color1); --jp-widgets-slider-active-handle-color: var(--jp-brand-color1); --jp-widgets-menu-item-height: 24px; --jp-widgets-dropdown-arrow: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAxOCAxOCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTggMTg7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDpub25lO30KPC9zdHlsZT4KPHBhdGggZD0iTTUuMiw1LjlMOSw5LjdsMy44LTMuOGwxLjIsMS4ybC00LjksNWwtNC45LTVMNS4yLDUuOXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTAtMC42aDE4djE4SDBWLTAuNnoiLz4KPC9zdmc+Cg'); --jp-widgets-input-color: var(--jp-ui-font-color1); --jp-widgets-input-background-color: var(--jp-layout-color1); --jp-widgets-input-border-color: var(--jp-border-color1); --jp-widgets-input-focus-border-color: var(--jp-brand-color2); --jp-widgets-input-border-width: var(--jp-widgets-border-width); --jp-widgets-disabled-opacity: 0.6; /* From Material Design Lite */ --md-shadow-key-umbra-opacity: 0.2; --md-shadow-key-penumbra-opacity: 0.14; --md-shadow-ambient-shadow-opacity: 0.12; } .jupyter-widgets { margin: var(--jp-widgets-margin); box-sizing: border-box; color: var(--jp-widgets-color); overflow: visible; } .jp-Output-result > .jupyter-widgets { margin-left: 0; margin-right: 0; } /* vbox and hbox */ /* */ .widget-inline-hbox, /* */ .jupyter-widget-inline-hbox { /* Horizontal widgets */ box-sizing: border-box; display: flex; flex-direction: row; align-items: baseline; } /* */ .widget-inline-vbox, /* */ .jupyter-widget-inline-vbox { /* Vertical Widgets */ box-sizing: border-box; display: flex; flex-direction: column; align-items: center; } /* */ .widget-box, /* */ .jupyter-widget-box { box-sizing: border-box; display: flex; margin: 0; overflow: auto; } /* */ .widget-gridbox, /* */ .jupyter-widget-gridbox { box-sizing: border-box; display: grid; margin: 0; overflow: auto; } /* */ .widget-hbox, /* */ .jupyter-widget-hbox { flex-direction: row; } /* */ .widget-vbox, /* */ .jupyter-widget-vbox { flex-direction: column; } /* General Tags Styling */ .jupyter-widget-tagsinput { display: flex; flex-direction: row; flex-wrap: wrap; align-items: center; overflow: auto; cursor: text; } .jupyter-widget-tag { padding-left: 10px; padding-right: 10px; padding-top: 0px; padding-bottom: 0px; display: inline-block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: center; font-size: var(--jp-widgets-font-size); height: calc(var(--jp-widgets-inline-height) - 2px); border: 0px solid; line-height: calc(var(--jp-widgets-inline-height) - 2px); box-shadow: none; color: var(--jp-ui-font-color1); background-color: var(--jp-layout-color2); border-color: var(--jp-border-color2); border: none; user-select: none; cursor: grab; transition: margin-left 200ms; margin: 1px 1px 1px 1px; } .jupyter-widget-tag.mod-active { /* MD Lite 4dp shadow */ box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)), 0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)), 0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)); color: var(--jp-ui-font-color1); background-color: var(--jp-layout-color3); } .jupyter-widget-colortag { color: var(--jp-inverse-ui-font-color1); } .jupyter-widget-colortag.mod-active { color: var(--jp-inverse-ui-font-color0); } .jupyter-widget-taginput { color: var(--jp-ui-font-color0); background-color: var(--jp-layout-color0); cursor: text; text-align: left; } .jupyter-widget-taginput:focus { outline: none; } .jupyter-widget-tag-close { margin-left: var(--jp-widgets-inline-margin); padding: 2px 0px 2px 2px; } .jupyter-widget-tag-close:hover { cursor: pointer; } /* Tag "Primary" Styling */ .jupyter-widget-tag.mod-primary { color: var(--jp-inverse-ui-font-color1); background-color: var(--jp-brand-color1); } .jupyter-widget-tag.mod-primary.mod-active { color: var(--jp-inverse-ui-font-color0); background-color: var(--jp-brand-color0); } /* Tag "Success" Styling */ .jupyter-widget-tag.mod-success { color: var(--jp-inverse-ui-font-color1); background-color: var(--jp-success-color1); } .jupyter-widget-tag.mod-success.mod-active { color: var(--jp-inverse-ui-font-color0); background-color: var(--jp-success-color0); } /* Tag "Info" Styling */ .jupyter-widget-tag.mod-info { color: var(--jp-inverse-ui-font-color1); background-color: var(--jp-info-color1); } .jupyter-widget-tag.mod-info.mod-active { color: var(--jp-inverse-ui-font-color0); background-color: var(--jp-info-color0); } /* Tag "Warning" Styling */ .jupyter-widget-tag.mod-warning { color: var(--jp-inverse-ui-font-color1); background-color: var(--jp-warn-color1); } .jupyter-widget-tag.mod-warning.mod-active { color: var(--jp-inverse-ui-font-color0); background-color: var(--jp-warn-color0); } /* Tag "Danger" Styling */ .jupyter-widget-tag.mod-danger { color: var(--jp-inverse-ui-font-color1); background-color: var(--jp-error-color1); } .jupyter-widget-tag.mod-danger.mod-active { color: var(--jp-inverse-ui-font-color0); background-color: var(--jp-error-color0); } /* General Button Styling */ .jupyter-button { padding-left: 10px; padding-right: 10px; padding-top: 0px; padding-bottom: 0px; display: inline-block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; text-align: center; font-size: var(--jp-widgets-font-size); cursor: pointer; height: var(--jp-widgets-inline-height); border: 0px solid; line-height: var(--jp-widgets-inline-height); box-shadow: none; color: var(--jp-ui-font-color1); background-color: var(--jp-layout-color2); border-color: var(--jp-border-color2); border: none; user-select: none; } .jupyter-button i.fa { margin-right: var(--jp-widgets-inline-margin); pointer-events: none; } .jupyter-button:empty:before { content: '\200b'; /* zero-width space */ } .jupyter-widgets.jupyter-button:disabled { opacity: var(--jp-widgets-disabled-opacity); } .jupyter-button i.fa.center { margin-right: 0; } .jupyter-button:hover:enabled, .jupyter-button:focus:enabled { /* MD Lite 2dp shadow */ box-shadow: 0 2px 2px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)), 0 3px 1px -2px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)), 0 1px 5px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)); } .jupyter-button:active, .jupyter-button.mod-active { /* MD Lite 4dp shadow */ box-shadow: 0 4px 5px 0 rgba(0, 0, 0, var(--md-shadow-key-penumbra-opacity)), 0 1px 10px 0 rgba(0, 0, 0, var(--md-shadow-ambient-shadow-opacity)), 0 2px 4px -1px rgba(0, 0, 0, var(--md-shadow-key-umbra-opacity)); color: var(--jp-ui-font-color1); background-color: var(--jp-layout-color3); } .jupyter-button:focus:enabled { outline: 1px solid var(--jp-widgets-input-focus-border-color); } /* Button "Primary" Styling */ .jupyter-button.mod-primary { color: var(--jp-ui-inverse-font-color1); background-color: var(--jp-brand-color1); } .jupyter-button.mod-primary.mod-active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-brand-color0); } .jupyter-button.mod-primary:active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-brand-color0); } /* Button "Success" Styling */ .jupyter-button.mod-success { color: var(--jp-ui-inverse-font-color1); background-color: var(--jp-success-color1); } .jupyter-button.mod-success.mod-active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-success-color0); } .jupyter-button.mod-success:active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-success-color0); } /* Button "Info" Styling */ .jupyter-button.mod-info { color: var(--jp-ui-inverse-font-color1); background-color: var(--jp-info-color1); } .jupyter-button.mod-info.mod-active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-info-color0); } .jupyter-button.mod-info:active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-info-color0); } /* Button "Warning" Styling */ .jupyter-button.mod-warning { color: var(--jp-ui-inverse-font-color1); background-color: var(--jp-warn-color1); } .jupyter-button.mod-warning.mod-active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-warn-color0); } .jupyter-button.mod-warning:active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-warn-color0); } /* Button "Danger" Styling */ .jupyter-button.mod-danger { color: var(--jp-ui-inverse-font-color1); background-color: var(--jp-error-color1); } .jupyter-button.mod-danger.mod-active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-error-color0); } .jupyter-button.mod-danger:active { color: var(--jp-ui-inverse-font-color0); background-color: var(--jp-error-color0); } /* Widget Button, Widget Toggle Button, Widget Upload */ /* */ .widget-button, /* */ /* */ .widget-toggle-button, /* */ /* */ .widget-upload, /* */ .jupyter-widget-button, .jupyter-widget-toggle-button, .jupyter-widget-upload { width: var(--jp-widgets-inline-width-short); } /* Widget Label Styling */ /* Override Bootstrap label css */ .jupyter-widgets label { margin-bottom: initial; } /* */ .widget-label-basic, /* */ .jupyter-widget-label-basic { /* Basic Label */ color: var(--jp-widgets-label-color); font-size: var(--jp-widgets-font-size); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: var(--jp-widgets-inline-height); } /* */ .widget-label, /* */ .jupyter-widget-label { /* Label */ color: var(--jp-widgets-label-color); font-size: var(--jp-widgets-font-size); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; line-height: var(--jp-widgets-inline-height); } /* */ .widget-inline-hbox .widget-label, /* */ .jupyter-widget-inline-hbox .jupyter-widget-label { /* Horizontal Widget Label */ color: var(--jp-widgets-label-color); text-align: right; margin-right: calc(var(--jp-widgets-inline-margin) * 2); width: var(--jp-widgets-inline-label-width); flex-shrink: 0; } /* */ .widget-inline-vbox .widget-label, /* */ .jupyter-widget-inline-vbox .jupyter-widget-label { /* Vertical Widget Label */ color: var(--jp-widgets-label-color); text-align: center; line-height: var(--jp-widgets-inline-height); } /* Widget Readout Styling */ /* */ .widget-readout, /* */ .jupyter-widget-readout { color: var(--jp-widgets-readout-color); font-size: var(--jp-widgets-font-size); height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); overflow: hidden; white-space: nowrap; text-align: center; } /* */ .widget-readout.overflow, /* */ .jupyter-widget-readout.overflow { /* Overflowing Readout */ /* From Material Design Lite shadow-key-umbra-opacity: 0.2; shadow-key-penumbra-opacity: 0.14; shadow-ambient-shadow-opacity: 0.12; */ -webkit-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.2), 0 3px 1px -2px rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); -moz-box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.2), 0 3px 1px -2px rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.2), 0 3px 1px -2px rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12); } /* */ .widget-inline-hbox .widget-readout, /* */ .jupyter-widget-inline-hbox .jupyter-widget-readout { /* Horizontal Readout */ text-align: center; max-width: var(--jp-widgets-inline-width-short); min-width: var(--jp-widgets-inline-width-tiny); margin-left: var(--jp-widgets-inline-margin); } /* */ .widget-inline-vbox .widget-readout, /* */ .jupyter-widget-inline-vbox .jupyter-widget-readout { /* Vertical Readout */ margin-top: var(--jp-widgets-inline-margin); /* as wide as the widget */ width: inherit; } /* Widget Checkbox Styling */ /* */ .widget-checkbox, /* */ .jupyter-widget-checkbox { width: var(--jp-widgets-inline-width); height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); } /* */ .widget-checkbox input[type='checkbox'], /* */ .jupyter-widget-checkbox input[type='checkbox'] { margin: 0px calc(var(--jp-widgets-inline-margin) * 2) 0px 0px; line-height: var(--jp-widgets-inline-height); font-size: large; flex-grow: 1; flex-shrink: 0; align-self: center; } /* Widget Valid Styling */ /* */ .widget-valid, /* */ .jupyter-widget-valid { height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); width: var(--jp-widgets-inline-width-short); font-size: var(--jp-widgets-font-size); } /* */ .widget-valid i, /* */ .jupyter-widget-valid i { line-height: var(--jp-widgets-inline-height); margin-right: var(--jp-widgets-inline-margin); margin-left: var(--jp-widgets-inline-margin); } /* */ .widget-valid.mod-valid i, /* */ .jupyter-widget-valid.mod-valid i { color: green; } /* */ .widget-valid.mod-invalid i, /* */ .jupyter-widget-valid.mod-invalid i { color: red; } /* */ .widget-valid.mod-valid .widget-valid-readout, /* */ .jupyter-widget-valid.mod-valid .jupyter-widget-valid-readout { display: none; } /* Widget Text and TextArea Styling */ /* */ .widget-textarea, /* */ /* */ .widget-text, /* */ .jupyter-widget-textarea, .jupyter-widget-text { width: var(--jp-widgets-inline-width); } /* */ .widget-text input[type='text'], /* */ /* */ .widget-text input[type='number'], /* */ /* */ .widget-text input[type='password'], /* */ .jupyter-widget-text input[type='text'], .jupyter-widget-text input[type='number'], .jupyter-widget-text input[type='password'] { height: var(--jp-widgets-inline-height); } /* */ .widget-text input[type='text']:disabled, /* */ /* */ .widget-text input[type='number']:disabled, /* */ /* */ .widget-text input[type='password']:disabled, /* */ /* */ .widget-textarea textarea:disabled, /* */ .jupyter-widget-text input[type='text']:disabled, .jupyter-widget-text input[type='number']:disabled, .jupyter-widget-text input[type='password']:disabled, .jupyter-widget-textarea textarea:disabled { opacity: var(--jp-widgets-disabled-opacity); } /* */ .widget-text input[type='text'], /* */ /* */ .widget-text input[type='number'], /* */ /* */ .widget-text input[type='password'], /* */ /* */ .widget-textarea textarea, /* */ .jupyter-widget-text input[type='text'], .jupyter-widget-text input[type='number'], .jupyter-widget-text input[type='password'], .jupyter-widget-textarea textarea { box-sizing: border-box; border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color); background-color: var(--jp-widgets-input-background-color); color: var(--jp-widgets-input-color); font-size: var(--jp-widgets-font-size); flex-grow: 1; min-width: 0; /* This makes it possible for the flexbox to shrink this input */ flex-shrink: 1; outline: none !important; } /* */ .widget-text input[type='text'], /* */ /* */ .widget-text input[type='password'], /* */ /* */ .widget-textarea textarea, /* */ .jupyter-widget-text input[type='text'], .jupyter-widget-text input[type='password'], .jupyter-widget-textarea textarea { padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2); } /* */ .widget-text input[type='number'], /* */ .jupyter-widget-text input[type='number'] { padding: var(--jp-widgets-input-padding) 0 var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2); } /* */ .widget-textarea textarea, /* */ .jupyter-widget-textarea textarea { height: inherit; width: inherit; } /* */ .widget-text input:focus, /* */ /* */ .widget-textarea textarea:focus, /* */ .jupyter-widget-text input:focus, .jupyter-widget-textarea textarea:focus { border-color: var(--jp-widgets-input-focus-border-color); } /* Horizontal Slider */ /* */ .widget-hslider, /* */ .jupyter-widget-hslider { width: var(--jp-widgets-inline-width); height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); /* Override the align-items baseline. This way, the description and readout still seem to align their baseline properly, and we don't have to have align-self: stretch in the .slider-container. */ align-items: center; } /* */ .widgets-slider .slider-container, /* */ .jupyter-widgets-slider .slider-container { overflow: visible; } /* */ .widget-hslider .slider-container, /* */ .jupyter-widget-hslider .slider-container { margin-left: calc( var(--jp-widgets-slider-handle-size) / 2 - 2 * var(--jp-widgets-slider-border-width) ); margin-right: calc( var(--jp-widgets-slider-handle-size) / 2 - 2 * var(--jp-widgets-slider-border-width) ); flex: 1 1 var(--jp-widgets-inline-width-short); } /* Vertical Slider */ /* */ .widget-vbox .widget-label, /* */ .jupyter-widget-vbox .jupyter-widget-label { height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); } /* */ .widget-vslider, /* */ .jupyter-widget-vslider { /* Vertical Slider */ height: var(--jp-widgets-vertical-height); width: var(--jp-widgets-inline-width-tiny); } /* */ .widget-vslider .slider-container, /* */ .jupyter-widget-vslider .slider-container { flex: 1 1 var(--jp-widgets-inline-width-short); margin-left: auto; margin-right: auto; margin-bottom: calc( var(--jp-widgets-slider-handle-size) / 2 - 2 * var(--jp-widgets-slider-border-width) ); margin-top: calc( var(--jp-widgets-slider-handle-size) / 2 - 2 * var(--jp-widgets-slider-border-width) ); display: flex; flex-direction: column; } /* Widget Progress Styling */ .progress-bar { -webkit-transition: none; -moz-transition: none; -ms-transition: none; -o-transition: none; transition: none; } .progress-bar { height: var(--jp-widgets-inline-height); } .progress-bar { background-color: var(--jp-brand-color1); } .progress-bar-success { background-color: var(--jp-success-color1); } .progress-bar-info { background-color: var(--jp-info-color1); } .progress-bar-warning { background-color: var(--jp-warn-color1); } .progress-bar-danger { background-color: var(--jp-error-color1); } .progress { background-color: var(--jp-layout-color2); border: none; box-shadow: none; } /* Horisontal Progress */ /* */ .widget-hprogress, /* */ .jupyter-widget-hprogress { /* Progress Bar */ height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); width: var(--jp-widgets-inline-width); align-items: center; } /* */ .widget-hprogress .progress, /* */ .jupyter-widget-hprogress .progress { flex-grow: 1; margin-top: var(--jp-widgets-input-padding); margin-bottom: var(--jp-widgets-input-padding); align-self: stretch; /* Override bootstrap style */ height: initial; } /* Vertical Progress */ /* */ .widget-vprogress, /* */ .jupyter-widget-vprogress { height: var(--jp-widgets-vertical-height); width: var(--jp-widgets-inline-width-tiny); } /* */ .widget-vprogress .progress, /* */ .jupyter-widget-vprogress .progress { flex-grow: 1; width: var(--jp-widgets-progress-thickness); margin-left: auto; margin-right: auto; margin-bottom: 0; } /* Select Widget Styling */ /* */ .widget-dropdown, /* */ .jupyter-widget-dropdown { height: var(--jp-widgets-inline-height); width: var(--jp-widgets-inline-width); line-height: var(--jp-widgets-inline-height); } /* */ .widget-dropdown > select, /* */ .jupyter-widget-dropdown > select { padding-right: 20px; border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color); border-radius: 0; height: inherit; flex: 1 1 var(--jp-widgets-inline-width-short); min-width: 0; /* This makes it possible for the flexbox to shrink this input */ box-sizing: border-box; outline: none !important; box-shadow: none; background-color: var(--jp-widgets-input-background-color); color: var(--jp-widgets-input-color); font-size: var(--jp-widgets-font-size); vertical-align: top; padding-left: calc(var(--jp-widgets-input-padding) * 2); appearance: none; -webkit-appearance: none; -moz-appearance: none; background-repeat: no-repeat; background-size: 20px; background-position: right center; background-image: var(--jp-widgets-dropdown-arrow); } /* */ .widget-dropdown > select:focus, /* */ .jupyter-widget-dropdown > select:focus { border-color: var(--jp-widgets-input-focus-border-color); } /* */ .widget-dropdown > select:disabled, /* */ .jupyter-widget-dropdown > select:disabled { opacity: var(--jp-widgets-disabled-opacity); } /* To disable the dotted border in Firefox around select controls. See http://stackoverflow.com/a/18853002 */ /* */ .widget-dropdown > select:-moz-focusring, /* */ .jupyter-widget-dropdown > select:-moz-focusring { color: transparent; text-shadow: 0 0 0 #000; } /* Select and SelectMultiple */ /* */ .widget-select, /* */ .jupyter-widget-select { width: var(--jp-widgets-inline-width); line-height: var(--jp-widgets-inline-height); /* Because Firefox defines the baseline of a select as the bottom of the control, we align the entire control to the top and add padding to the select to get an approximate first line baseline alignment. */ align-items: flex-start; } /* */ .widget-select > select, /* */ .jupyter-widget-select > select { border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color); background-color: var(--jp-widgets-input-background-color); color: var(--jp-widgets-input-color); font-size: var(--jp-widgets-font-size); flex: 1 1 var(--jp-widgets-inline-width-short); outline: none !important; overflow: auto; height: inherit; /* Because Firefox defines the baseline of a select as the bottom of the control, we align the entire control to the top and add padding to the select to get an approximate first line baseline alignment. */ padding-top: 5px; } /* */ .widget-select > select:focus, /* */ .jupyter-widget-select > select:focus { border-color: var(--jp-widgets-input-focus-border-color); } .wiget-select > select > option, .jupyter-wiget-select > select > option { padding-left: var(--jp-widgets-input-padding); line-height: var(--jp-widgets-inline-height); /* line-height doesn't work on some browsers for select options */ padding-top: calc( var(--jp-widgets-inline-height) - var(--jp-widgets-font-size) / 2 ); padding-bottom: calc( var(--jp-widgets-inline-height) - var(--jp-widgets-font-size) / 2 ); } /* Toggle Buttons Styling */ /* */ .widget-toggle-buttons, /* */ .jupyter-widget-toggle-buttons { line-height: var(--jp-widgets-inline-height); } /* */ .widget-toggle-buttons .widget-toggle-button, /* */ .jupyter-widget-toggle-buttons .jupyter-widget-toggle-button { margin-left: var(--jp-widgets-margin); margin-right: var(--jp-widgets-margin); } /* */ .widget-toggle-buttons .jupyter-button:disabled, /* */ .jupyter-widget-toggle-buttons .jupyter-button:disabled { opacity: var(--jp-widgets-disabled-opacity); } /* Radio Buttons Styling */ /* */ .widget-radio, /* */ .jupyter-widget-radio { width: var(--jp-widgets-inline-width); line-height: var(--jp-widgets-inline-height); } /* */ .widget-radio-box, /* */ .jupyter-widget-radio-box { display: flex; flex-direction: column; align-items: stretch; box-sizing: border-box; flex-grow: 1; margin-bottom: var(--jp-widgets-radio-item-height-adjustment); } /* */ .widget-radio-box-vertical, /* */ .jupyter-widget-radio-box-vertical { flex-direction: column; } /* */ .widget-radio-box-horizontal, /* */ .jupyter-widget-radio-box-horizontal { flex-direction: row; } /* */ .widget-radio-box label, /* */ .jupyter-widget-radio-box label { height: var(--jp-widgets-radio-item-height); line-height: var(--jp-widgets-radio-item-height); font-size: var(--jp-widgets-font-size); } .widget-radio-box-horizontal label, .jupyter-widget-radio-box-horizontal label { margin: 0 calc(var(--jp-widgets-input-padding) * 2) 0 0; } /* */ .widget-radio-box input, /* */ .jupyter-widget-radio-box input { height: var(--jp-widgets-radio-item-height); line-height: var(--jp-widgets-radio-item-height); margin: 0 calc(var(--jp-widgets-input-padding) * 2) 0 1px; float: left; } /* Color Picker Styling */ /* */ .widget-colorpicker, /* */ .jupyter-widget-colorpicker { width: var(--jp-widgets-inline-width); height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); } /* */ .widget-colorpicker > .widget-colorpicker-input, /* */ .jupyter-widget-colorpicker > .jupyter-widget-colorpicker-input { flex-grow: 1; flex-shrink: 1; min-width: var(--jp-widgets-inline-width-tiny); } /* */ .widget-colorpicker input[type='color'], /* */ .jupyter-widget-colorpicker input[type='color'] { width: var(--jp-widgets-inline-height); height: var(--jp-widgets-inline-height); padding: 0 2px; /* make the color square actually square on Chrome on OS X */ background: var(--jp-widgets-input-background-color); color: var(--jp-widgets-input-color); border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color); border-left: none; flex-grow: 0; flex-shrink: 0; box-sizing: border-box; align-self: stretch; outline: none !important; } /* */ .widget-colorpicker.concise input[type='color'], /* */ .jupyter-widget-colorpicker.concise input[type='color'] { border-left: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color); } /* */ .widget-colorpicker input[type='color']:focus, /* */ /* */ .widget-colorpicker input[type='text']:focus, /* */ .jupyter-widget-colorpicker input[type='color']:focus, .jupyter-widget-colorpicker input[type='text']:focus { border-color: var(--jp-widgets-input-focus-border-color); } /* */ .widget-colorpicker input[type='text'], /* */ .jupyter-widget-colorpicker input[type='text'] { flex-grow: 1; outline: none !important; height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); background: var(--jp-widgets-input-background-color); color: var(--jp-widgets-input-color); border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color); font-size: var(--jp-widgets-font-size); padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2); min-width: 0; /* This makes it possible for the flexbox to shrink this input */ flex-shrink: 1; box-sizing: border-box; } /* */ .widget-colorpicker input[type='text']:disabled, /* */ .jupyter-widget-colorpicker input[type='text']:disabled { opacity: var(--jp-widgets-disabled-opacity); } /* Date Picker Styling */ /* */ .widget-datepicker, /* */ .jupyter-widget-datepicker { width: var(--jp-widgets-inline-width); height: var(--jp-widgets-inline-height); line-height: var(--jp-widgets-inline-height); } /* */ .widget-datepicker input[type='date'], /* */ .jupyter-widget-datepicker input[type='date'] { flex-grow: 1; flex-shrink: 1; min-width: 0; /* This makes it possible for the flexbox to shrink this input */ outline: none !important; height: var(--jp-widgets-inline-height); border: var(--jp-widgets-input-border-width) solid var(--jp-widgets-input-border-color); background-color: var(--jp-widgets-input-background-color); color: var(--jp-widgets-input-color); font-size: var(--jp-widgets-font-size); padding: var(--jp-widgets-input-padding) calc(var(--jp-widgets-input-padding) * 2); box-sizing: border-box; } /* */ .widget-datepicker input[type='date']:focus, /* */ .jupyter-widget-datepicker input[type='date']:focus { border-color: var(--jp-widgets-input-focus-border-color); } /* */ .widget-datepicker input[type='date']:invalid, /* */ .jupyter-widget-datepicker input[type='date']:invalid { border-color: var(--jp-warn-color1); } /* */ .widget-datepicker input[type='date']:disabled, /* */ .jupyter-widget-datepicker input[type='date']:disabled { opacity: var(--jp-widgets-disabled-opacity); } /* Play Widget */ /* */ .widget-play, /* */ .jupyter-widget-play { width: var(--jp-widgets-inline-width-short); display: flex; align-items: stretch; } /* */ .widget-play .jupyter-button, /* */ .jupyter-widget-play .jupyter-button { flex-grow: 1; height: auto; } /* */ .widget-play .jupyter-button:disabled, /* */ .jupyter-widget-play .jupyter-button:disabled { opacity: var(--jp-widgets-disabled-opacity); } /* Tab Widget */ /* */ .jupyter-widgets.widget-tab, /* */ .jupyter-widgets.jupyter-widget-tab { display: flex; flex-direction: column; } /* */ .jupyter-widgets.widget-tab > .p-TabBar, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar { /* Necessary so that a tab can be shifted down to overlay the border of the box below. */ overflow-x: visible; overflow-y: visible; } /* */ .jupyter-widgets.widget-tab > .p-TabBar > .p-TabBar-content, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar > .p-TabBar-content, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar > .lm-TabBar-content { /* Make sure that the tab grows from bottom up */ align-items: flex-end; min-width: 0; min-height: 0; } /* */ .jupyter-widgets.widget-tab > .widget-tab-contents, /* */ .jupyter-widgets.jupyter-widget-tab > .widget-tab-contents { width: 100%; box-sizing: border-box; margin: 0; background: var(--jp-layout-color1); color: var(--jp-ui-font-color1); border: var(--jp-border-width) solid var(--jp-border-color1); padding: var(--jp-widgets-container-padding); flex-grow: 1; overflow: auto; } /* */ .jupyter-widgets.widget-tab > .p-TabBar, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar { font: var(--jp-widgets-font-size) Helvetica, Arial, sans-serif; min-height: calc( var(--jp-widgets-horizontal-tab-height) + var(--jp-border-width) ); } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tab, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tab, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tab { flex: 0 1 var(--jp-widgets-horizontal-tab-width); min-width: 35px; min-height: calc( var(--jp-widgets-horizontal-tab-height) + var(--jp-border-width) ); line-height: var(--jp-widgets-horizontal-tab-height); margin-left: calc(-1 * var(--jp-border-width)); padding: 0px 10px; background: var(--jp-layout-color2); color: var(--jp-ui-font-color2); border: var(--jp-border-width) solid var(--jp-border-color1); border-bottom: none; position: relative; } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tab.p-mod-current, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tab.p-mod-current, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tab.lm-mod-current { color: var(--jp-ui-font-color0); /* We want the background to match the tab content background */ background: var(--jp-layout-color1); min-height: calc( var(--jp-widgets-horizontal-tab-height) + 2 * var(--jp-border-width) ); transform: translateY(var(--jp-border-width)); overflow: visible; } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tab.p-mod-current:before, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tab.p-mod-current:before, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tab.lm-mod-current:before { position: absolute; top: calc(-1 * var(--jp-border-width)); left: calc(-1 * var(--jp-border-width)); content: ''; height: var(--jp-widgets-horizontal-tab-top-border); width: calc(100% + 2 * var(--jp-border-width)); background: var(--jp-brand-color1); } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tab:first-child, /* */ /* */.jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tab:first-child, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tab:first-child { margin-left: 0; } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tab:hover:not(.p-mod-current), /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tab:hover:not(.p-mod-current), /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tab:hover:not(.lm-mod-current) { background: var(--jp-layout-color1); color: var(--jp-ui-font-color1); } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-mod-closable > .p-TabBar-tabCloseIcon, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-mod-closable > .p-TabBar-tabCloseIcon, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-mod-closable > .lm-TabBar-tabCloseIcon { margin-left: 4px; } /* This font-awesome strategy may not work across FA4 and FA5, but we don't actually support closable tabs, so it really doesn't matter */ /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-mod-closable > .p-TabBar-tabCloseIcon:before, /* */ /* */ .jupyter-widgets.jupyter-widget-widget-tab > .p-TabBar .p-mod-closable > .p-TabBar-tabCloseIcon:before, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-mod-closable > .lm-TabBar-tabCloseIcon:before { font-family: FontAwesome; content: '\f00d'; /* close */ } /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tabIcon, /* */ /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tabLabel, /* */ /* */ .jupyter-widgets.widget-tab > .p-TabBar .p-TabBar-tabCloseIcon, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tabIcon, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tabLabel, /* */ /* */ .jupyter-widgets.jupyter-widget-tab > .p-TabBar .p-TabBar-tabCloseIcon, /* */ .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tabIcon, .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tabLabel, .jupyter-widgets.jupyter-widget-tab > .lm-TabBar .lm-TabBar-tabCloseIcon { line-height: var(--jp-widgets-horizontal-tab-height); } /* Accordion Widget */ .jupyter-widget-Collapse { display: flex; flex-direction: column; align-items: stretch; } .jupyter-widget-Collapse-header { padding: var(--jp-widgets-input-padding); cursor: pointer; color: var(--jp-ui-font-color2); background-color: var(--jp-layout-color2); border: var(--jp-widgets-border-width) solid var(--jp-border-color1); padding: calc(var(--jp-widgets-container-padding) * 2 / 3) var(--jp-widgets-container-padding); font-weight: bold; } .jupyter-widget-Collapse-header:hover { background-color: var(--jp-layout-color1); color: var(--jp-ui-font-color1); } .jupyter-widget-Collapse-open > .jupyter-widget-Collapse-header { background-color: var(--jp-layout-color1); color: var(--jp-ui-font-color0); cursor: default; border-bottom: none; } .jupyter-widget-Collapse-contents { padding: var(--jp-widgets-container-padding); background-color: var(--jp-layout-color1); color: var(--jp-ui-font-color1); border-left: var(--jp-widgets-border-width) solid var(--jp-border-color1); border-right: var(--jp-widgets-border-width) solid var(--jp-border-color1); border-bottom: var(--jp-widgets-border-width) solid var(--jp-border-color1); overflow: auto; } .jupyter-widget-Accordion { display: flex; flex-direction: column; align-items: stretch; } .jupyter-widget-Accordion .jupyter-widget-Collapse { margin-bottom: 0; } .jupyter-widget-Accordion .jupyter-widget-Collapse + .jupyter-widget-Collapse { margin-top: 4px; } /* HTML widget */ /* */ .widget-html, /* */ /* */ .widget-htmlmath, /* */ .jupyter-widget-html, .jupyter-widget-htmlmath { font-size: var(--jp-widgets-font-size); } /* */ .widget-html > .widget-html-content, /* */ /* */.widget-htmlmath > .widget-html-content, /* */ .jupyter-widget-html > .jupyter-widget-html-content, .jupyter-widget-htmlmath > .jupyter-widget-html-content { /* Fill out the area in the HTML widget */ align-self: stretch; flex-grow: 1; flex-shrink: 1; /* Makes sure the baseline is still aligned with other elements */ line-height: var(--jp-widgets-inline-height); /* Make it possible to have absolutely-positioned elements in the html */ position: relative; } /* Image widget */ /* */ .widget-image, /* */ .jupyter-widget-image { max-width: 100%; height: auto; } ipywidgets-8.1.5/packages/controls/css/widgets.css000066400000000000000000000002501466162644600223220ustar00rootroot00000000000000/* Copyright (c) Jupyter Development Team. * Distributed under the terms of the Modified BSD License. */ @import './labvariables.css'; @import './widgets-base.css'; ipywidgets-8.1.5/packages/controls/karma.conf.js000066400000000000000000000052761466162644600217440ustar00rootroot00000000000000// Karma configuration // Generated on Mon Dec 07 2015 08:28:33 GMT-0800 (PST) module.exports = function (config) { var cfg = { // base path that will be used to resolve all patterns (eg. files, exclude) basePath: '', // frameworks to use // available frameworks: https://npmjs.org/browse/keyword/karma-adapter frameworks: ['mocha', 'chai', 'sinon-chai'], // list of files / patterns to load in the browser files: ['test/**/*_test.js'], // list of files to exclude exclude: [], // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { 'test/**/*.js': ['webpack'], }, webpack: { module: { loaders: [ { test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel?presets[]=es2015', }, { test: /\.css$/, use: ['style-loader', 'css-loader'] }, // required to load font-awesome { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource' }, { test: /\.svg$/i, type: 'asset' }, ], }, externals: { 'base/js/namespace': 'base/js/namespace', 'notebook/js/outputarea': 'notebook/js/outputarea', 'services/kernels/comm': 'services/kernels/comm', }, }, // test results reporter to use // possible values: 'dots', 'progress' // available reporters: https://npmjs.org/browse/keyword/karma-reporter reporters: ['mocha'], // web server port port: 9876, // enable / disable colors in the output (reporters and logs) colors: true, // level of logging // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG logLevel: config.LOG_DEBUG, // enable / disable watching file and executing tests whenever any file changes autoWatch: false, // start these browsers // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher browsers: ['Chrome'], customLaunchers: { Chrome_travis_ci: { base: 'Chrome', flags: ['--no-sandbox'], }, }, // Continuous Integration mode // if true, Karma captures browsers, runs the tests and exits singleRun: true, // Capture console output client: { captureConsole: true, }, browserConsoleLogOptions: { level: '', format: '%b %T: %m', terminal: true, }, // Concurrency level // how many browser should be started simultanous concurrency: Infinity, }; if (process.env.TRAVIS) { cfg.browsers = ['Chrome_travis_ci']; } config.set(cfg); }; ipywidgets-8.1.5/packages/controls/package.json000066400000000000000000000057121466162644600216500ustar00rootroot00000000000000{ "name": "@jupyter-widgets/controls", "version": "5.0.11", "description": "Jupyter interactive widgets", "repository": { "type": "git", "url": "https://github.com/jupyter-widgets/ipywidgets.git" }, "license": "BSD-3-Clause", "author": "Project Jupyter", "main": "lib/index.js", "typings": "lib/index.d.ts", "files": [ "lib/**/*.d.ts", "lib/**/*.js", "css/*.css", "dist/" ], "scripts": { "build": "npm run build:src && npm run build:css", "build:css": "lessc css/nouislider.less css/nouislider.css && postcss --use postcss-import --use postcss-cssnext -o css/widgets.built.css css/widgets.css", "build:src": "tsc --build", "build:test": "tsc --build test && webpack --config test/webpack.conf.js", "clean": "npm run clean:src", "clean:src": "rimraf lib && rimraf tsconfig.tsbuildinfo", "prepublish": "npm run clean && npm run build", "test": "npm run test:unit", "test:coverage": "npm run build:test && webpack --config test/webpack-cov.conf.js && karma start test/karma-cov.conf.js", "test:unit": "npm run test:unit:firefox && npm run test:unit:chrome", "test:unit:chrome": "npm run test:unit:default -- --browsers=Chrome", "test:unit:default": "npm run build:test && karma start test/karma.conf.js --log-level debug", "test:unit:firefox": "npm run test:unit:default -- --browsers=Firefox", "test:unit:firefox:headless": "npm run test:unit:default -- --browsers=FirefoxHeadless", "test:unit:ie": "npm run test:unit:default -- --browsers=IE" }, "dependencies": { "@jupyter-widgets/base": "^6.0.10", "@lumino/algorithm": "^1.9.1 || ^2.1", "@lumino/domutils": "^1.8.1 || ^2.1", "@lumino/messaging": "^1.10.1 || ^2.1", "@lumino/signaling": "^1.10.1 || ^2.1", "@lumino/widgets": "^1.30.0 || ^2.1", "d3-color": "^3.0.1", "d3-format": "^3.0.1", "jquery": "^3.1.1", "nouislider": "15.4.0" }, "devDependencies": { "@jupyterlab/services": "^6.0.0 || ^7.0.0", "@types/d3-color": "^3.0.2", "@types/d3-format": "^3.0.1", "@types/expect.js": "^0.3.29", "@types/jquery": "^3.5.16", "@types/mathjax": "^0.0.37", "@types/mocha": "^9.0.0", "@types/node": "^17.0.2", "chai": "^4.0.0", "css-loader": "^6.5.1", "expect.js": "^0.3.1", "istanbul-instrumenter-loader": "^3.0.1", "karma": "^6.3.3", "karma-chrome-launcher": "^3.1.0", "karma-coverage": "^2.0.3", "karma-firefox-launcher": "^2.1.1", "karma-ie-launcher": "^1.0.0", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", "karma-webpack": "^5.0.0", "less": "^4.1.2", "mocha": "^9.0.0", "npm-run-all": "^4.1.5", "postcss": "^8.3.2", "postcss-cli": "^9.1.0", "postcss-cssnext": "^3.1.0", "postcss-import": "^14.0.2", "postcss-loader": "^6.1.0", "rimraf": "^3.0.2", "sinon": "^12.0.1", "sinon-chai": "^3.3.0", "style-loader": "^3.3.1", "typescript": "~4.9.4", "webpack": "^5.65.0" } } ipywidgets-8.1.5/packages/controls/src/000077500000000000000000000000001466162644600201445ustar00rootroot00000000000000ipywidgets-8.1.5/packages/controls/src/index.ts000066400000000000000000000015771466162644600216350ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. export * from './utils'; export * from './version'; export * from './widget_link'; export * from './widget_bool'; export * from './widget_button'; export * from './widget_box'; export * from './widget_image'; export * from './widget_video'; export * from './widget_audio'; export * from './widget_color'; export * from './widget_date'; export * from './widget_datetime'; export * from './widget_time'; export * from './widget_int'; export * from './widget_float'; export * from './widget_controller'; export * from './widget_selection'; export * from './widget_selectioncontainer'; export * from './widget_tagsinput'; export * from './widget_string'; export * from './widget_description'; export * from './widget_upload'; export const version = (require('../package.json') as any).version; ipywidgets-8.1.5/packages/controls/src/lumino/000077500000000000000000000000001466162644600214475ustar00rootroot00000000000000ipywidgets-8.1.5/packages/controls/src/lumino/accordion.ts000066400000000000000000000205341466162644600237640ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { ArrayExt } from '@lumino/algorithm'; import { ISignal, Signal } from '@lumino/signaling'; import { Panel, PanelLayout, Widget, Title } from '@lumino/widgets'; import { Selection } from './currentselection'; /** * The class name added to Collapse instances. */ const COLLAPSE_CLASS = 'jupyter-widget-Collapse'; /** * The class name added to a Collapse's header. */ const COLLAPSE_HEADER_CLASS = 'jupyter-widget-Collapse-header'; /** * The class name added to a Collapse's contents. */ const COLLAPSE_CONTENTS_CLASS = 'jupyter-widget-Collapse-contents'; /** * The class name added to a Collapse when it is opened */ const COLLAPSE_CLASS_OPEN = 'jupyter-widget-Collapse-open'; /** * A panel that supports a collapsible header, made from the widget's title. * Clicking on the title expands or contracts the widget. */ export class Collapse extends Widget { constructor(options: Collapse.IOptions) { super(options); this.addClass(COLLAPSE_CLASS); this._header = new Widget(); this._header.addClass(COLLAPSE_HEADER_CLASS); this._header.node.addEventListener('click', this); // Fontawesome icon for caret const icon = document.createElement('i'); icon.classList.add('fa', 'fa-fw', 'fa-caret-right'); this._header.node.appendChild(icon); // Label content this._header.node.appendChild(document.createElement('span')); this._content = new Panel(); this._content.addClass(COLLAPSE_CONTENTS_CLASS); const layout = new PanelLayout(); this.layout = layout; layout.addWidget(this._header); layout.addWidget(this._content); if (options.widget) { this.widget = options.widget; } this.collapsed = false; } dispose(): void { if (this.isDisposed) { return; } super.dispose(); this._header = null!; this._widget = null!; this._content = null!; } get widget(): Widget { return this._widget; } set widget(widget: Widget) { const oldWidget = this._widget; if (oldWidget) { oldWidget.disposed.disconnect(this._onChildDisposed, this); oldWidget.title.changed.disconnect(this._onTitleChanged, this); oldWidget.parent = null; } this._widget = widget; widget.disposed.connect(this._onChildDisposed, this); widget.title.changed.connect(this._onTitleChanged, this); this._onTitleChanged(widget.title); this._content.addWidget(widget); } get collapsed(): boolean { return this._collapsed; } set collapsed(value: boolean) { // TODO: should we have this check here? if (value === this._collapsed) { return; } if (value) { this._collapse(); } else { this._uncollapse(); } } toggle(): void { this.collapsed = !this.collapsed; } get collapseChanged(): ISignal { return this._collapseChanged; } private _collapse(): void { this._collapsed = true; if (this._content) { this._content.hide(); } this.removeClass(COLLAPSE_CLASS_OPEN); this._header.node.children[0].classList.add('fa-caret-right'); this._header.node.children[0].classList.remove('fa-caret-down'); this._collapseChanged.emit(void 0); } private _uncollapse(): void { this._collapsed = false; if (this._content) { this._content.show(); } this.addClass(COLLAPSE_CLASS_OPEN); this._header.node.children[0].classList.add('fa-caret-down'); this._header.node.children[0].classList.remove('fa-caret-right'); this._collapseChanged.emit(void 0); } /** * Handle the DOM events for the Collapse widget. * * @param event - The DOM event sent to the panel. * * #### Notes * This method implements the DOM `EventListener` interface and is * called in response to events on the panel's DOM node. It should * not be called directly by user code. */ handleEvent(event: Event): void { switch (event.type) { case 'click': this._evtClick(event as MouseEvent); break; default: break; } } private _evtClick(event: MouseEvent): void { this.toggle(); } /** * Handle the `changed` signal of a title object. */ private _onTitleChanged(sender: Title): void { this._header.node.children[1].textContent = this._widget.title.label; } private _onChildDisposed(sender: Widget): void { this.dispose(); } private _collapseChanged = new Signal(this); _collapsed: boolean; _content: Panel; _widget: Widget; _header: Widget; } export namespace Collapse { export interface IOptions extends Widget.IOptions { widget: Widget; } } /** * The class name added to Accordion instances. */ const ACCORDION_CLASS = 'jupyter-widget-Accordion'; /** * The class name added to an Accordion child. */ const ACCORDION_CHILD_CLASS = 'jupyter-widget-Accordion-child'; const ACCORDION_CHILD_ACTIVE_CLASS = 'jupyter-widget-Accordion-child-active'; /** * A panel that supports a collapsible header, made from the widget's title. * Clicking on the title expands or contracts the widget. */ export class Accordion extends Panel { constructor(options?: Accordion.IOptions) { super(options); this._selection = new Selection(this.widgets as ReadonlyArray); this._selection.selectionChanged.connect(this._onSelectionChanged, this); this.addClass(ACCORDION_CLASS); } /** * A read-only sequence of the widgets in the panel. * * #### Notes * This is a read-only property. */ /* get widgets(): ISequence { return new ArraySequence(toArray(map((this.layout as PanelLayout).widgets, (w: Collapse) => w.widget))); } */ get collapseWidgets(): ReadonlyArray { return (this.layout as PanelLayout).widgets as ReadonlyArray; } get selection(): Selection { return this._selection; } indexOf(widget: Widget): number { return ArrayExt.findFirstIndex( this.collapseWidgets, (w: Collapse) => w.widget === widget ); } /** * Add a widget to the end of the accordion. * * @param widget - The widget to add to the accordion. * * @returns The Collapse widget wrapping the added widget. * * #### Notes * The widget will be wrapped in a CollapsedWidget. */ addWidget(widget: Widget): Widget { const collapse = this._wrapWidget(widget); collapse.collapsed = true; super.addWidget(collapse); this._selection.adjustSelectionForInsert(this.widgets.length - 1, collapse); return collapse; } /** * Insert a widget at the specified index. * * @param index - The index at which to insert the widget. * * @param widget - The widget to insert into to the accordion. * * #### Notes * If the widget is already contained in the panel, it will be moved. */ insertWidget(index: number, widget: Widget): void { const collapse = this._wrapWidget(widget); collapse.collapsed = true; super.insertWidget(index, collapse); this._selection.adjustSelectionForInsert(index, collapse); } removeWidget(widget: Widget): void { const index = this.indexOf(widget); if (index >= 0) { const collapse = this.collapseWidgets[index] as Collapse; widget.parent = null; collapse.dispose(); this._selection.adjustSelectionForRemove(index, null); } } private _wrapWidget(widget: Widget): Collapse { const collapse = new Collapse({ widget }); collapse.addClass(ACCORDION_CHILD_CLASS); collapse.collapseChanged.connect(this._onCollapseChange, this); return collapse; } private _onCollapseChange(sender: Collapse): void { if (!sender.collapsed) { this._selection.value = sender; } else if (this._selection.value === sender && sender.collapsed) { this._selection.value = null; } } private _onSelectionChanged( sender: Selection, change: Selection.ISelectionChangedArgs ): void { // Collapse previous widget, open current widget const pv = change.previousValue; const cv = change.currentValue; if (pv) { pv.collapsed = true; pv.removeClass(ACCORDION_CHILD_ACTIVE_CLASS); } if (cv) { cv.collapsed = false; cv.addClass(ACCORDION_CHILD_ACTIVE_CLASS); } } private _selection: Selection; } export namespace Accordion { export type IOptions = Panel.IOptions; } ipywidgets-8.1.5/packages/controls/src/lumino/currentselection.ts000066400000000000000000000265001466162644600254120ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. /** * A variety of convenience methods for maintaining a current selection */ import { ArrayExt } from '@lumino/algorithm'; import { ISignal, Signal } from '@lumino/signaling'; export class Selection { constructor(sequence: ReadonlyArray, options: Selection.IOptions = {}) { this._array = sequence; this._insertBehavior = options.insertBehavior || 'select-item-if-needed'; this._removeBehavior = options.removeBehavior || 'select-item-after'; } /** * A signal emitted when the current item is changed. * * #### Notes * This signal is emitted when the currently selected item is changed either * through user or programmatic interaction. * * Notably, this signal is not emitted when the index of the current item * changes due to other items being inserted, removed, or moved, but the * current item remains the same. It is only emitted when the actual current * item is changed. */ get selectionChanged(): ISignal< Selection, Selection.ISelectionChangedArgs > { return this._selectionChanged; } /** * Adjust for setting an item. * * This should be called *after* the set. * * @param index - The index set. * @param oldValue - The old value at the index. */ adjustSelectionForSet(index: number): void { // We just need to send a signal if the currentValue changed. // Get the current index and value. const pi = this.index; const pv = this.value; // Exit early if this doesn't affect the selection if (index !== pi) { return; } this._updateSelectedValue(); const cv = this.value; // The previous item is now null, since it is no longer in the array. this._previousValue = null; // Send signal if there was a change if (pv !== cv) { // Emit the current changed signal. this._selectionChanged.emit({ previousIndex: pi, previousValue: pv, currentIndex: pi, currentValue: cv, }); } } /** * Get the currently selected item. * * #### Notes * This will be `null` if no item is selected. */ get value(): T | null { return this._value; } /** * Set the currently selected item. * * #### Notes * If the item does not exist in the vector, the currentValue will be set to * `null`. This selects the first entry equal to the desired item. */ set value(value: T | null) { if (value === null || this._array === null) { this.index = null; } else { this.index = ArrayExt.firstIndexOf(this._array, value); } } /** * Get the index of the currently selected item. * * #### Notes * This will be `null` if no item is selected. */ get index(): number | null { return this._index; } /** * Set the index of the currently selected tab. * * @param index - The index to select. * * #### Notes * If the value is out of range, the index will be set to `null`, which * indicates no item is selected. */ set index(index: number | null) { // Coerce the value to an index. let i; if (index !== null && this._array !== null) { i = Math.floor(index); if (i < 0 || i >= this._array.length) { i = null; } } else { i = null; } // Bail early if the index will not change. if (this._index === i) { return; } // Look up the previous index and item. const pi = this._index; const pv = this._value; // Update the state this._index = i; this._updateSelectedValue(); this._previousValue = pv; // Emit the current changed signal. this._selectionChanged.emit({ previousIndex: pi, previousValue: pv, currentIndex: i, currentValue: this._value, }); } /** * Get the selection behavior when inserting a tab. */ get insertBehavior(): Selection.InsertBehavior { return this._insertBehavior; } /** * Set the selection behavior when inserting a tab. */ set insertBehavior(value: Selection.InsertBehavior) { this._insertBehavior = value; } /** * Get the selection behavior when removing a tab. */ get removeBehavior(): Selection.RemoveBehavior { return this._removeBehavior; } /** * Set the selection behavior when removing a tab. */ set removeBehavior(value: Selection.RemoveBehavior) { this._removeBehavior = value; } /** * Adjust the current index for a tab insert operation. * * @param i - The new index of the inserted item. * @param j - The inserted item. * * #### Notes * This method accounts for the tab bar's insertion behavior when adjusting * the current index and emitting the changed signal. This should be called * after the insertion. */ adjustSelectionForInsert(i: number, item: T): void { // Lookup commonly used variables. const cv = this._value; const ci = this._index; const bh = this._insertBehavior; // Handle the behavior where the new item is always selected, // or the behavior where the new item is selected if needed. if ( bh === 'select-item' || (bh === 'select-item-if-needed' && ci === null) ) { this._index = i; this._value = item; this._previousValue = cv; this._selectionChanged.emit({ previousIndex: ci, previousValue: cv, currentIndex: i, currentValue: item, }); return; } // Otherwise, silently adjust the current index if needed. if (ci !== null && ci >= i) { this._index!++; } } /** * Clear the selection and history. */ clearSelection(): void { // Get the current index and item. const pi = this._index; const pv = this._value; // Reset the current index and previous item. this._index = null; this._value = null; this._previousValue = null; // If no item was selected, there's nothing else to do. if (pi === null) { return; } // Emit the current changed signal. this._selectionChanged.emit({ previousIndex: pi, previousValue: pv, currentIndex: this._index, currentValue: this._value, }); } /** * Adjust the current index for an item remove operation. * * @param i - The former index of the removed item. * @param item - The removed item. * * #### Notes * This method accounts for the remove behavior when adjusting the current * index and emitting the changed signal. It should be called after the item * is removed. */ adjustSelectionForRemove(i: number, item: T | null): void { // If we have no selection, there is nothing to do if (this._index === null) { return; } // Lookup commonly used variables. const ci = this._index; const bh = this._removeBehavior; // Silently adjust the index if the current item is not removed. if (ci !== i) { if (ci > i) { this._index!--; } return; } // No item gets selected if the vector is empty. if (!this._array || this._array.length === 0) { // Reset the current index and previous item. this._index = null; this._value = null; this._previousValue = null; this._selectionChanged.emit({ previousIndex: i, previousValue: item, currentIndex: this._index, currentValue: this._value, }); return; } // Handle behavior where the next sibling item is selected. if (bh === 'select-item-after') { this._index = Math.min(i, this._array.length - 1); this._updateSelectedValue(); this._previousValue = null; this._selectionChanged.emit({ previousIndex: i, previousValue: item, currentIndex: this._index, currentValue: this._value, }); return; } // Handle behavior where the previous sibling item is selected. if (bh === 'select-item-before') { this._index = Math.max(0, i - 1); this._updateSelectedValue(); this._previousValue = null; this._selectionChanged.emit({ previousIndex: i, previousValue: item, currentIndex: this._index, currentValue: this._value, }); return; } // Handle behavior where the previous history item is selected. if (bh === 'select-previous-item') { if (this._previousValue) { this.value = this._previousValue; } else { this._index = Math.min(i, this._array.length - 1); this._updateSelectedValue(); } this._previousValue = null; this._selectionChanged.emit({ previousIndex: i, previousValue: item, currentIndex: this._index, currentValue: this.value, }); return; } // Otherwise, no item gets selected. this._index = null; this._value = null; this._previousValue = null; this._selectionChanged.emit({ previousIndex: i, previousValue: item, currentIndex: this._index, currentValue: this._value, }); } /** * Set the current value based on the current index. */ private _updateSelectedValue(): void { const i = this._index; this._value = i !== null && this._array ? this._array[i] : null; } private _array: ReadonlyArray | null = null; private _index: number | null; private _value: T | null = null; private _previousValue: T | null = null; private _insertBehavior: Selection.InsertBehavior; private _removeBehavior: Selection.RemoveBehavior; private _selectionChanged = new Signal< Selection, Selection.ISelectionChangedArgs >(this); } export namespace Selection { /** * An options object for creating a tab bar. */ export interface IOptions { /** * The selection behavior when inserting a tab. * * The default is `'select-tab-if-needed'`. */ insertBehavior?: Selection.InsertBehavior; /** * The selection behavior when removing a tab. * * The default is `'select-tab-after'`. */ removeBehavior?: Selection.RemoveBehavior; } /** * The arguments object for the `currentChanged` signal. */ export interface ISelectionChangedArgs { /** * The previously selected index. */ previousIndex: number | null; /** * The previous selected item. */ previousValue: T | null; /** * The currently selected index. */ currentIndex: number | null; /** * The currently selected item. */ currentValue: T | null; } /** * A type alias for the selection behavior on item insert. */ export type InsertBehavior = /** * The selected item will not be changed. */ | 'none' /** * The inserted item will be selected. */ | 'select-item' /** * The inserted item will be selected if the current item is null. */ | 'select-item-if-needed'; /** * A type alias for the selection behavior on item remove. */ export type RemoveBehavior = /** * No item will be selected. */ | 'none' /** * The item after the removed item will be selected if possible. */ | 'select-item-after' /** * The item before the removed item will be selected if possible. */ | 'select-item-before' /** * The previously selected item will be selected if possible. */ | 'select-previous-item'; } ipywidgets-8.1.5/packages/controls/src/lumino/tabpanel.ts000066400000000000000000000275151466162644600236170ustar00rootroot00000000000000/* This file has code derived from Lumino. The license for this Lumino code is: Copyright (c) 2019 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. Copyright (c) 2014-2017, PhosphorJS 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: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * 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. * 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. */ import { MessageLoop } from '@lumino/messaging'; import { ISignal, Signal } from '@lumino/signaling'; import { Platform } from '@lumino/domutils'; import { Panel, PanelLayout, TabBar, Widget } from '@lumino/widgets'; /** * A panel where visible widgets are stacked atop one another. * * #### Notes * This class provides a convenience wrapper around a [[PanelLayout]]. */ export class EventedPanel extends Panel { /** * A signal emitted when a widget is removed from the panel. */ get widgetRemoved(): ISignal { return this._widgetRemoved; } /** * A message handler invoked on a `'child-removed'` message. */ protected onChildRemoved(msg: Widget.ChildMessage): void { this._widgetRemoved.emit(msg.child); } private _widgetRemoved = new Signal(this); } /** * A widget which combines a `TabBar` and a `EventedPanel`. * * #### Notes * This is a simple panel which handles the common case of a tab bar * placed next to a content area. The selected tab controls the widget * which is shown in the content area. * * For use cases which require more control than is provided by this * panel, the `TabBar` widget may be used independently. * * TODO: Support setting the direction?? */ export class TabPanel extends Widget { /** * Construct a new tab panel. * * @param options - The options for initializing the tab panel. */ constructor(options: TabPanel.IOptions = {}) { super(); this.addClass('jupyter-widget-TabPanel'); // Create the tab bar and contents panel. this.tabBar = new TabBar(options); this.tabBar.addClass('jupyter-widget-TabPanel-tabBar'); this.tabContents = new EventedPanel(); this.tabContents.addClass('jupyter-widget-TabPanel-tabContents'); // Connect the tab bar signal handlers. this.tabBar.tabMoved.connect(this._onTabMoved, this); this.tabBar.currentChanged.connect(this._onCurrentChanged, this); this.tabBar.tabCloseRequested.connect(this._onTabCloseRequested, this); this.tabBar.tabActivateRequested.connect( this._onTabActivateRequested, this ); // Connect the evented panel signal handlers. this.tabContents.widgetRemoved.connect(this._onWidgetRemoved, this); // Create the layout. const layout = new PanelLayout(); // Add the child widgets to the layout. layout.addWidget(this.tabBar); layout.addWidget(this.tabContents); // Install the layout on the tab panel. this.layout = layout; } /** * A signal emitted when the current tab is changed. * * #### Notes * This signal is emitted when the currently selected tab is changed * either through user or programmatic interaction. * * Notably, this signal is not emitted when the index of the current * tab changes due to tabs being inserted, removed, or moved. It is * only emitted when the actual current tab node is changed. */ get currentChanged(): ISignal { return this._currentChanged; } /** * Get the index of the currently selected tab. * * #### Notes * This will be `null` if no tab is selected. */ get currentIndex(): number | null { const currentIndex = this.tabBar.currentIndex; // Lumino tab bars have an index of -1 if no tab is selected return currentIndex === -1 ? null : currentIndex; } /** * Set the index of the currently selected tab. * * #### Notes * If the index is out of range, it will be set to `null`. */ set currentIndex(value: number | null) { this.tabBar.currentIndex = value === null ? -1 : value; } /** * Get the currently selected widget. * * #### Notes * This will be `null` if there is no selected tab. */ get currentWidget(): Widget | null { const title = this.tabBar.currentTitle; return title ? title.owner : null; } /** * Set the currently selected widget. * * #### Notes * If the widget is not in the panel, it will be set to `null`. */ set currentWidget(value: Widget | null) { this.tabBar.currentTitle = value ? value.title : null; } /** * Get the whether the tabs are movable by the user. * * #### Notes * Tabs can always be moved programmatically. */ get tabsMovable(): boolean { return this.tabBar.tabsMovable; } /** * Set the whether the tabs are movable by the user. * * #### Notes * Tabs can always be moved programmatically. */ set tabsMovable(value: boolean) { this.tabBar.tabsMovable = value; } /** * The tab bar used by the tab panel. * * #### Notes * Modifying the tab bar directly can lead to undefined behavior. */ readonly tabBar: TabBar; /** * The panel used by the tab panel. * * #### Notes * Modifying the panel directly can lead to undefined behavior. */ readonly tabContents: EventedPanel; /** * A read-only array of the widgets in the panel. */ get widgets(): ReadonlyArray { return this.tabContents.widgets; } /** * Add a widget to the end of the tab panel. * * @param widget - The widget to add to the tab panel. * * #### Notes * If the widget is already contained in the panel, it will be moved. * * The widget's `title` is used to populate the tab. */ addWidget(widget: Widget): void { this.insertWidget(this.widgets.length, widget); } /** * Insert a widget into the tab panel at a specified index. * * @param index - The index at which to insert the widget. * * @param widget - The widget to insert into to the tab panel. * * #### Notes * If the widget is already contained in the panel, it will be moved. * * The widget's `title` is used to populate the tab. */ insertWidget(index: number, widget: Widget): void { if (widget !== this.currentWidget) { widget.hide(); } this.tabContents.insertWidget(index, widget); this.tabBar.insertTab(index, widget.title); } /** * Handle the `currentChanged` signal from the tab bar. */ private _onCurrentChanged( sender: TabBar, args: TabBar.ICurrentChangedArgs ): void { // Extract the previous and current title from the args. const { previousIndex, previousTitle, currentIndex, currentTitle } = args; // Extract the widgets from the titles. const previousWidget = previousTitle ? previousTitle.owner : null; const currentWidget = currentTitle ? currentTitle.owner : null; // Hide the previous widget. if (previousWidget) { previousWidget.hide(); } // Show the current widget. if (currentWidget) { currentWidget.show(); } // Emit the `currentChanged` signal for the tab panel. this._currentChanged.emit({ previousIndex, previousWidget, currentIndex, currentWidget, }); // Flush the message loop on IE and Edge to prevent flicker. if (Platform.IS_EDGE || Platform.IS_IE) { MessageLoop.flush(); } } /** * Handle the `tabActivateRequested` signal from the tab bar. */ private _onTabActivateRequested( sender: TabBar, args: TabBar.ITabActivateRequestedArgs ): void { args.title.owner.activate(); } /** * Handle the `tabCloseRequested` signal from the tab bar. */ private _onTabCloseRequested( sender: TabBar, args: TabBar.ITabCloseRequestedArgs ): void { args.title.owner.close(); } /** * Handle the `tabMoved` signal from the tab bar. */ private _onTabMoved( sender: TabBar, args: TabBar.ITabMovedArgs ): void { this.tabContents.insertWidget(args.toIndex, args.title.owner); } /** * Handle the `widgetRemoved` signal from the stacked panel. */ private _onWidgetRemoved(sender: EventedPanel, widget: Widget): void { this.tabBar.removeTab(widget.title); } private _currentChanged = new Signal( this ); } /** * The namespace for the `TabPanel` class statics. */ export namespace TabPanel { /** * An options object for initializing a tab panel. */ export interface IOptions { /** * Whether the tabs are movable by the user. * * The default is `false`. */ tabsMovable?: boolean; /** * The renderer for the panel's tab bar. * * The default is a shared renderer instance. */ renderer?: TabBar.IRenderer; } /** * The arguments object for the `currentChanged` signal. */ export interface ICurrentChangedArgs { /** * The previously selected index. */ previousIndex: number; /** * The previously selected widget. */ previousWidget: Widget | null; /** * The currently selected index. */ currentIndex: number; /** * The currently selected widget. */ currentWidget: Widget | null; } } ipywidgets-8.1.5/packages/controls/src/utils.ts000066400000000000000000000020411466162644600216510ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. export { uuid, resolvePromisesDict } from '@jupyter-widgets/base'; /** * Apply MathJax rendering to an element, and optionally set its text. * * If MathJax is not available, make no changes. * * Parameters * ---------- * element: Node * text: optional string */ export function typeset(element: HTMLElement, text?: string): void { if (text !== void 0) { element.textContent = text; } if ((window as any).MathJax !== void 0) { MathJax!.Hub!.Queue(['Typeset', MathJax.Hub, element]); } } /** * escape text to HTML */ export function escape_html(text: string): string { const esc = document.createElement('div'); esc.textContent = text; return esc.innerHTML; } /** * Creates a wrappable Promise rejection function. */ export function reject(message: string, log: boolean) { return function promiseRejection(error: Error): never { if (log) { console.error(new Error(message)); } throw error; }; } ipywidgets-8.1.5/packages/controls/src/version.ts000066400000000000000000000003771466162644600222100ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. /** * The version of the Jupyter controls widget attribute spec that this package * implements. */ export const JUPYTER_CONTROLS_VERSION = '2.0.0'; ipywidgets-8.1.5/packages/controls/src/widget_audio.ts000066400000000000000000000041551466162644600231650ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DOMWidgetView } from '@jupyter-widgets/base'; import { CoreDOMWidgetModel } from './widget_core'; export class AudioModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'AudioModel', _view_name: 'AudioView', format: 'mp3', autoplay: true, loop: true, controls: true, value: new DataView(new ArrayBuffer(0)), }; } static serializers = { ...CoreDOMWidgetModel.serializers, value: { serialize: (value: any): DataView => { return new DataView(value.buffer.slice(0)); }, }, }; } export class AudioView extends DOMWidgetView { render(): void { /** * Called when view is rendered. */ super.render(); this.luminoWidget.addClass('jupyter-widgets'); this.update(); // Set defaults. } update(): void { /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ let url; const format = this.model.get('format'); const value = this.model.get('value'); if (format !== 'url') { const blob = new Blob([value], { type: `audio/${this.model.get('format')}`, }); url = URL.createObjectURL(blob); } else { url = new TextDecoder('utf-8').decode(value.buffer); } // Clean up the old objectURL const oldurl = this.el.src; this.el.src = url; if (oldurl) { URL.revokeObjectURL(oldurl); } // Audio attributes this.el.loop = this.model.get('loop'); this.el.autoplay = this.model.get('autoplay'); this.el.controls = this.model.get('controls'); return super.update(); } remove(): void { if (this.el.src) { URL.revokeObjectURL(this.el.src); } super.remove(); } preinitialize() { // Must set this before the initialize method creates the element this.tagName = 'audio'; } el: HTMLAudioElement; } ipywidgets-8.1.5/packages/controls/src/widget_bool.ts000066400000000000000000000254021466162644600230150ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DOMWidgetView } from '@jupyter-widgets/base'; import { CoreDescriptionModel } from './widget_core'; import { DescriptionStyleModel, DescriptionView } from './widget_description'; export class CheckboxStyleModel extends DescriptionStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'CheckboxStyleModel', }; } public static styleProperties = { ...DescriptionStyleModel.styleProperties, background: { selector: '', attribute: 'background', default: null as any, }, }; } export class ToggleButtonStyleModel extends DescriptionStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ToggleButtonStyleModel', }; } public static styleProperties = { ...DescriptionStyleModel.styleProperties, font_family: { selector: '', attribute: 'font-family', default: '', }, font_size: { selector: '', attribute: 'font-size', default: '', }, font_style: { selector: '', attribute: 'font-style', default: '', }, font_variant: { selector: '', attribute: 'font-variant', default: '', }, font_weight: { selector: '', attribute: 'font-weight', default: '', }, text_color: { selector: '', attribute: 'color', default: '', }, text_decoration: { selector: '', attribute: 'text-decoration', default: '', }, }; } export class BoolModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), value: false, disabled: false, _model_name: 'BoolModel', }; } } export class CheckboxModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), indent: true, style: null, _view_name: 'CheckboxView', _model_name: 'CheckboxModel', }; } } export class CheckboxView extends DescriptionView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-checkbox'); // adding a zero-width space to the label to help // the browser set the baseline correctly this.label.innerHTML = '​'; // label containing the checkbox and description span this.checkboxLabel = document.createElement('label'); this.checkboxLabel.classList.add('widget-label-basic'); this.el.appendChild(this.checkboxLabel); // checkbox this.checkbox = document.createElement('input'); this.checkbox.setAttribute('type', 'checkbox'); this.checkboxLabel.appendChild(this.checkbox); // span to the right of the checkbox that will render the description this.descriptionSpan = document.createElement('span'); this.checkboxLabel.appendChild(this.descriptionSpan); this.listenTo(this.model, 'change:indent', this.updateIndent); this.listenTo(this.model, 'change:tabbable', this.updateTabindex); this.update(); // Set defaults. this.updateDescription(); this.updateIndent(); this.updateTabindex(); this.updateTooltip(); } /** * Overridden from super class * * Update the description span (rather than the label) since * we want the description to the right of the checkbox. */ updateDescription(): void { // can be called before the view is fully initialized if (this.checkboxLabel == null) { return; } const description = this.model.get('description'); if (this.model.get('description_allow_html')) { this.descriptionSpan.innerHTML = this.model.widget_manager.inline_sanitize(description); } else { this.descriptionSpan.textContent = description; } this.typeset(this.descriptionSpan); this.descriptionSpan.title = description; this.checkbox.title = description; } /** * Update the visibility of the label in the super class * to provide the optional indent. */ updateIndent(): void { const indent = this.model.get('indent'); this.label.style.display = indent ? '' : 'none'; } updateTabindex(): void { if (!this.checkbox) { return; // we might be constructing the parent } const tabbable = this.model.get('tabbable'); if (tabbable === true) { this.checkbox.setAttribute('tabIndex', '0'); } else if (tabbable === false) { this.checkbox.setAttribute('tabIndex', '-1'); } else if (tabbable === null) { this.checkbox.removeAttribute('tabIndex'); } } updateTooltip(): void { if (!this.checkbox) return; // we might be constructing the parent const title = this.model.get('tooltip'); if (!title) { this.checkbox.removeAttribute('title'); } else if (this.model.get('description').length === 0) { this.checkbox.setAttribute('title', title); } } events(): { [e: string]: string } { return { 'click input[type="checkbox"]': '_handle_click', }; } /** * Handles when the checkbox is clicked. * * Calling model.set will trigger all of the other views of the * model to update. */ _handle_click(): void { const value = this.model.get('value'); this.model.set('value', !value, { updated_view: this }); this.touch(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { this.checkbox.checked = this.model.get('value'); if (options === undefined || options.updated_view != this) { this.checkbox.disabled = this.model.get('disabled'); } return super.update(); } /** * Handle message sent to the front end. * * Used to focus or blur the widget. */ handle_message(content: any): void { if (content.do == 'focus') { this.checkbox.focus(); } else if (content.do == 'blur') { this.checkbox.blur(); } } checkbox: HTMLInputElement; checkboxLabel: HTMLLabelElement; descriptionSpan: HTMLSpanElement; } export class ToggleButtonModel extends BoolModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'ToggleButtonView', _model_name: 'ToggleButtonModel', tooltip: '', icon: '', button_style: '', style: null, }; } } export class ToggleButtonView extends DOMWidgetView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('jupyter-button'); this.el.classList.add('widget-toggle-button'); this.listenTo(this.model, 'change:button_style', this.update_button_style); this.listenTo(this.model, 'change:tabbable', this.updateTabindex); this.set_button_style(); this.update(); // Set defaults. } update_button_style(): void { this.update_mapped_classes(ToggleButtonView.class_map, 'button_style'); } set_button_style(): void { this.set_mapped_classes(ToggleButtonView.class_map, 'button_style'); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { if (this.model.get('value')) { this.el.classList.add('mod-active'); } else { this.el.classList.remove('mod-active'); } if (options === undefined || options.updated_view !== this) { this.el.disabled = this.model.get('disabled'); this.el.setAttribute('tabbable', this.model.get('tabbable')); this.el.setAttribute('title', this.model.get('tooltip')); const description = this.model.get('description'); const icon = this.model.get('icon'); if (description.trim().length === 0 && icon.trim().length === 0) { this.el.innerHTML = ' '; // Preserve button height } else { this.el.textContent = ''; if (icon.trim().length) { const i = document.createElement('i'); this.el.appendChild(i); i.classList.add('fa'); i.classList.add('fa-' + icon); } this.el.appendChild(document.createTextNode(description)); } } this.updateTabindex(); return super.update(); } events(): { [e: string]: string } { return { // Dictionary of events and their handlers. click: '_handle_click', }; } /** * Handles and validates user input. * * Calling model.set will trigger all of the other views of the * model to update. */ _handle_click(event: MouseEvent): void { event.preventDefault(); const value = this.model.get('value'); this.model.set('value', !value, { updated_view: this }); this.touch(); } preinitialize() { // Must set this before the initialize method creates the element this.tagName = 'button'; } el: HTMLButtonElement; static class_map = { primary: ['mod-primary'], success: ['mod-success'], info: ['mod-info'], warning: ['mod-warning'], danger: ['mod-danger'], }; } export class ValidModel extends BoolModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), readout: 'Invalid', _view_name: 'ValidView', _model_name: 'ValidModel', }; } } export class ValidView extends DescriptionView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-valid'); this.el.classList.add('widget-inline-hbox'); this.icon = document.createElement('i'); this.icon.classList.add('fa', 'fa-fw'); this.el.appendChild(this.icon); this.readout = document.createElement('span'); this.readout.classList.add('widget-valid-readout'); this.readout.classList.add('widget-readout'); this.el.appendChild(this.readout); this.update(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(): void { this.el.classList.remove('mod-valid'); this.el.classList.remove('mod-invalid'); this.icon.classList.remove('fa-check'); this.icon.classList.remove('fa-times'); this.readout.textContent = this.model.get('readout'); if (this.model.get('value')) { this.el.classList.add('mod-valid'); this.icon.classList.add('fa-check'); } else { this.el.classList.add('mod-invalid'); this.icon.classList.add('fa-times'); } } readout: HTMLSpanElement; icon: HTMLElement; } ipywidgets-8.1.5/packages/controls/src/widget_box.ts000066400000000000000000000114241466162644600226510ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DOMWidgetView, unpack_models, ViewList, JupyterLuminoPanelWidget, reject, WidgetModel, WidgetView, } from '@jupyter-widgets/base'; import { CoreDOMWidgetModel } from './widget_core'; import { ArrayExt } from '@lumino/algorithm'; import { MessageLoop } from '@lumino/messaging'; import { Widget } from '@lumino/widgets'; import $ from 'jquery'; export class BoxModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'BoxView', _model_name: 'BoxModel', children: [], box_style: '', }; } static serializers = { ...CoreDOMWidgetModel.serializers, children: { deserialize: unpack_models }, }; } export class HBoxModel extends BoxModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'HBoxView', _model_name: 'HBoxModel', }; } } export class VBoxModel extends BoxModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'VBoxView', _model_name: 'VBoxModel', }; } } export class BoxView extends DOMWidgetView { _createElement(tagName: string): HTMLElement { this.luminoWidget = new JupyterLuminoPanelWidget({ view: this }); return this.luminoWidget.node; } _setElement(el: HTMLElement): void { if (this.el || el !== this.luminoWidget.node) { // Boxes don't allow setting the element beyond the initial creation. throw new Error('Cannot reset the DOM element.'); } this.el = this.luminoWidget.node; this.$el = $(this.luminoWidget.node); } initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.children_views = new ViewList(this.add_child_model, null, this); this.listenTo(this.model, 'change:children', this.update_children); this.listenTo(this.model, 'change:box_style', this.update_box_style); this.luminoWidget.addClass('jupyter-widgets'); this.luminoWidget.addClass('widget-container'); this.luminoWidget.addClass('widget-box'); } render(): void { super.render(); this.update_children(); this.set_box_style(); } update_children(): void { this.children_views ?.update(this.model.get('children')) .then((views: DOMWidgetView[]) => { // Notify all children that their sizes may have changed. views.forEach((view) => { MessageLoop.postMessage( view.luminoWidget, Widget.ResizeMessage.UnknownSize ); }); }); } update_box_style(): void { this.update_mapped_classes(BoxView.class_map, 'box_style'); } set_box_style(): void { this.set_mapped_classes(BoxView.class_map, 'box_style'); } add_child_model(model: WidgetModel): Promise { // we insert a dummy element so the order is preserved when we add // the rendered content later. const dummy = new Widget(); this.luminoWidget.addWidget(dummy); return this.create_child_view(model) .then((view: DOMWidgetView) => { // replace the dummy widget with the new one. const i = ArrayExt.firstIndexOf(this.luminoWidget.widgets, dummy); this.luminoWidget.insertWidget(i, view.luminoWidget); dummy.dispose(); return view; }) .catch(reject('Could not add child view to box', true)); } remove(): void { this.children_views = null; super.remove(); } children_views: ViewList | null; luminoWidget: JupyterLuminoPanelWidget; static class_map = { success: ['alert', 'alert-success'], info: ['alert', 'alert-info'], warning: ['alert', 'alert-warning'], danger: ['alert', 'alert-danger'], }; } export class HBoxView extends BoxView { /** * Public constructor */ initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.luminoWidget.addClass('widget-hbox'); } } export class VBoxView extends BoxView { /** * Public constructor */ initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.luminoWidget.addClass('widget-vbox'); } } export class GridBoxView extends BoxView { /** * Public constructor */ initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.luminoWidget.addClass('widget-gridbox'); // display needn't be set to flex and grid this.luminoWidget.removeClass('widget-box'); } } export class GridBoxModel extends BoxModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'GridBoxView', _model_name: 'GridBoxModel', }; } } ipywidgets-8.1.5/packages/controls/src/widget_button.ts000066400000000000000000000104051466162644600233720ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DOMWidgetView, StyleModel } from '@jupyter-widgets/base'; import { CoreDOMWidgetModel } from './widget_core'; import { JUPYTER_CONTROLS_VERSION } from './version'; export class ButtonStyleModel extends StyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ButtonStyleModel', _model_module: '@jupyter-widgets/controls', _model_module_version: JUPYTER_CONTROLS_VERSION, }; } public static styleProperties = { button_color: { selector: '', attribute: 'background-color', default: null as any, }, font_family: { selector: '', attribute: 'font-family', default: '', }, font_size: { selector: '', attribute: 'font-size', default: '', }, font_style: { selector: '', attribute: 'font-style', default: '', }, font_variant: { selector: '', attribute: 'font-variant', default: '', }, font_weight: { selector: '', attribute: 'font-weight', default: '', }, text_color: { selector: '', attribute: 'color', default: '', }, text_decoration: { selector: '', attribute: 'text-decoration', default: '', }, }; } export class ButtonModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), description: '', tooltip: '', disabled: false, icon: '', button_style: '', _view_name: 'ButtonView', _model_name: 'ButtonModel', style: null, }; } } export class ButtonView extends DOMWidgetView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('jupyter-button'); this.el.classList.add('widget-button'); this.listenTo(this.model, 'change:button_style', this.update_button_style); this.listenTo(this.model, 'change:tabbable', this.updateTabindex); this.set_button_style(); this.update(); // Set defaults. } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(): void { this.el.disabled = this.model.get('disabled'); this.updateTabindex(); const tooltip = this.model.get('tooltip'); const description = this.model.get('description'); const icon = this.model.get('icon'); this.el.setAttribute('title', tooltip ?? description); if (description.length || icon.length) { this.el.textContent = ''; if (icon.length) { const i = document.createElement('i'); i.classList.add('fa'); i.classList.add( ...icon .split(/[\s]+/) .filter(Boolean) .map((v: string) => `fa-${v}`) ); if (description.length === 0) { i.classList.add('center'); } this.el.appendChild(i); } this.el.appendChild(document.createTextNode(description)); } return super.update(); } update_button_style(): void { this.update_mapped_classes(ButtonView.class_map, 'button_style'); } set_button_style(): void { this.set_mapped_classes(ButtonView.class_map, 'button_style'); } /** * Dictionary of events and handlers */ events(): { [e: string]: string } { // TODO: return typing not needed in Typescript later than 1.8.x // See http://stackoverflow.com/questions/22077023/why-cant-i-indirectly-return-an-object-literal-to-satisfy-an-index-signature-re and https://github.com/Microsoft/TypeScript/pull/7029 return { click: '_handle_click' }; } /** * Handles when the button is clicked. */ _handle_click(event: MouseEvent): void { event.preventDefault(); this.send({ event: 'click' }); } preinitialize() { // Must set this before the initialize method creates the element this.tagName = 'button'; } el: HTMLButtonElement; static class_map = { primary: ['mod-primary'], success: ['mod-success'], info: ['mod-info'], warning: ['mod-warning'], danger: ['mod-danger'], }; } ipywidgets-8.1.5/packages/controls/src/widget_color.ts000066400000000000000000000166531466162644600232100ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { CoreDescriptionModel } from './widget_core'; import { DescriptionView } from './widget_description'; import { uuid } from './utils'; const named_colors: { [key: string]: string } = { aliceblue: '#f0f8ff', antiquewhite: '#faebd7', aqua: '#00ffff', aquamarine: '#7fffd4', azure: '#f0ffff', beige: '#f5f5dc', bisque: '#ffe4c4', black: '#000000', blanchedalmond: '#ffebcd', blue: '#0000ff', blueviolet: '#8a2be2', brown: '#a52a2a', burlywood: '#deb887', cadetblue: '#5f9ea0', chartreuse: '#7fff00', chocolate: '#d2691e', coral: '#ff7f50', cornflowerblue: '#6495ed', cornsilk: '#fff8dc', crimson: '#dc143c', cyan: '#00ffff', darkblue: '#00008b', darkcyan: '#008b8b', darkgoldenrod: '#b8860b', darkgray: '#a9a9a9', darkgrey: '#a9a9a9', darkgreen: '#006400', darkkhaki: '#bdb76b', darkmagenta: '#8b008b', darkolivegreen: '#556b2f', darkorange: '#ff8c00', darkorchid: '#9932cc', darkred: '#8b0000', darksalmon: '#e9967a', darkseagreen: '#8fbc8f', darkslateblue: '#483d8b', darkslategray: '#2f4f4f', darkslategrey: '#2f4f4f', darkturquoise: '#00ced1', darkviolet: '#9400d3', deeppink: '#ff1493', deepskyblue: '#00bfff', dimgray: '#696969', dimgrey: '#696969', dodgerblue: '#1e90ff', firebrick: '#b22222', floralwhite: '#fffaf0', forestgreen: '#228b22', fuchsia: '#ff00ff', gainsboro: '#dcdcdc', ghostwhite: '#f8f8ff', gold: '#ffd700', goldenrod: '#daa520', gray: '#808080', grey: '#808080', green: '#008000', greenyellow: '#adff2f', honeydew: '#f0fff0', hotpink: '#ff69b4', indianred: '#cd5c5c', indigo: '#4b0082', ivory: '#fffff0', khaki: '#f0e68c', lavender: '#e6e6fa', lavenderblush: '#fff0f5', lawngreen: '#7cfc00', lemonchiffon: '#fffacd', lightblue: '#add8e6', lightcoral: '#f08080', lightcyan: '#e0ffff', lightgoldenrodyellow: '#fafad2', lightgreen: '#90ee90', lightgray: '#d3d3d3', lightgrey: '#d3d3d3', lightpink: '#ffb6c1', lightsalmon: '#ffa07a', lightseagreen: '#20b2aa', lightskyblue: '#87cefa', lightslategray: '#778899', lightslategrey: '#778899', lightsteelblue: '#b0c4de', lightyellow: '#ffffe0', lime: '#00ff00', limegreen: '#32cd32', linen: '#faf0e6', magenta: '#ff00ff', maroon: '#800000', mediumaquamarine: '#66cdaa', mediumblue: '#0000cd', mediumorchid: '#ba55d3', mediumpurple: '#9370db', mediumseagreen: '#3cb371', mediumslateblue: '#7b68ee', mediumspringgreen: '#00fa9a', mediumturquoise: '#48d1cc', mediumvioletred: '#c71585', midnightblue: '#191970', mintcream: '#f5fffa', mistyrose: '#ffe4e1', moccasin: '#ffe4b5', navajowhite: '#ffdead', navy: '#000080', oldlace: '#fdf5e6', olive: '#808000', olivedrab: '#6b8e23', orange: '#ffa500', orangered: '#ff4500', orchid: '#da70d6', palegoldenrod: '#eee8aa', palegreen: '#98fb98', paleturquoise: '#afeeee', palevioletred: '#db7093', papayawhip: '#ffefd5', peachpuff: '#ffdab9', peru: '#cd853f', pink: '#ffc0cb', plum: '#dda0dd', powderblue: '#b0e0e6', purple: '#800080', red: '#ff0000', rosybrown: '#bc8f8f', royalblue: '#4169e1', saddlebrown: '#8b4513', salmon: '#fa8072', sandybrown: '#f4a460', seagreen: '#2e8b57', seashell: '#fff5ee', sienna: '#a0522d', silver: '#c0c0c0', skyblue: '#87ceeb', slateblue: '#6a5acd', slategray: '#708090', slategrey: '#708090', snow: '#fffafa', springgreen: '#00ff7f', steelblue: '#4682b4', tan: '#d2b48c', teal: '#008080', thistle: '#d8bfd8', tomato: '#ff6347', turquoise: '#40e0d0', violet: '#ee82ee', wheat: '#f5deb3', white: '#ffffff', whitesmoke: '#f5f5f5', yellow: '#ffff00', yellowgreen: '#9acd32', }; export class ColorPickerModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), value: 'black', concise: false, _model_name: 'ColorPickerModel', _view_name: 'ColorPickerView', }; } } export class ColorPickerView extends DescriptionView { render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-colorpicker'); this._color_container = document.createElement('div'); this._color_container.className = 'widget-inline-hbox widget-colorpicker-input'; this.el.appendChild(this._color_container); this._textbox = document.createElement('input'); this._textbox.setAttribute('type', 'text'); this._textbox.id = this.label.htmlFor = uuid(); this._color_container.appendChild(this._textbox); this._textbox.value = this.model.get('value'); this._colorpicker = document.createElement('input'); this._colorpicker.setAttribute('type', 'color'); this._color_container.appendChild(this._colorpicker); this.listenTo(this.model, 'change:value', this._update_value); this.listenTo(this.model, 'change:concise', this._update_concise); this._update_concise(); this._update_value(); this.update(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { if (options === undefined || options.updated_view != this) { const disabled = this.model.get('disabled'); this._textbox.disabled = disabled; this._colorpicker.disabled = disabled; } return super.update(); } events(): { [e: string]: string } { // Typescript doesn't understand that these functions are called, so we // specifically use them here so it knows they are being used. void this._picker_change; void this._text_change; return { 'change [type="color"]': '_picker_change', 'change [type="text"]': '_text_change', }; } private _update_value(): void { const value = this.model.get('value'); this._colorpicker.value = color2hex(value); this._textbox.value = value; } private _update_concise(): void { const concise = this.model.get('concise'); if (concise) { this.el.classList.add('concise'); this._textbox.style.display = 'none'; } else { this.el.classList.remove('concise'); this._textbox.style.display = ''; } } private _picker_change(): void { this.model.set('value', this._colorpicker.value); this.touch(); } private _text_change(): void { const value = this._validate_color( this._textbox.value, this.model.get('value') ); this.model.set('value', value); this.touch(); } private _validate_color(color: string, fallback: any): any { return color.match(/#[a-fA-F0-9]{3}(?:[a-fA-F0-9]{3})?$/) || named_colors[color.toLowerCase()] ? color : fallback; } private _color_container: HTMLDivElement; private _textbox: HTMLInputElement; private _colorpicker: HTMLInputElement; } /* * From a valid html color (named color, 6-digits or 3-digits hex format) * return a 6-digits hexadecimal color #rrggbb. */ function color2hex(color: string): string { return named_colors[color.toLowerCase()] || rgb3_to_rgb6(color); } function rgb3_to_rgb6(rgb: string): string { if (rgb.length === 7) { return rgb; } else { return ( '#' + rgb.charAt(1) + rgb.charAt(1) + rgb.charAt(2) + rgb.charAt(2) + rgb.charAt(3) + rgb.charAt(3) ); } } ipywidgets-8.1.5/packages/controls/src/widget_controller.ts000066400000000000000000000305401466162644600242440ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { CoreDOMWidgetModel } from './widget_core'; import { DOMWidgetView, unpack_models, ViewList, JupyterLuminoPanelWidget, reject, WidgetView, Dict, } from '@jupyter-widgets/base'; import { Widget, Panel } from '@lumino/widgets'; import { ArrayExt } from '@lumino/algorithm'; import * as utils from './utils'; import $ from 'jquery'; export class ControllerButtonModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ControllerButtonModel', _view_name: 'ControllerButtonView', value: 0.0, pressed: false, }; } } /** * Very simple view for a gamepad button. */ export class ControllerButtonView extends DOMWidgetView { render(): void { this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-controller-button'); this.el.style.width = 'fit-content'; this.support = document.createElement('div'); this.support.style.position = 'relative'; this.support.style.margin = '1px'; this.support.style.width = '16px'; this.support.style.height = '16px'; this.support.style.border = '1px solid black'; this.support.style.background = 'lightgray'; this.el.appendChild(this.support); this.bar = document.createElement('div'); this.bar.style.position = 'absolute'; this.bar.style.width = '100%'; this.bar.style.bottom = '0px'; this.bar.style.background = 'gray'; this.support.appendChild(this.bar); this.update(); this.label = document.createElement('div'); this.label.textContent = this.model.get('description'); this.label.style.textAlign = 'center'; this.el.appendChild(this.label); } update(): void { this.bar.style.height = 100 * this.model.get('value') + '%'; } support: HTMLDivElement; bar: HTMLDivElement; label: HTMLDivElement; } export class ControllerAxisModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ControllerAxisModel', _view_name: 'ControllerAxisView', value: 0.0, }; } } /** * Very simple view for a gamepad axis. */ export class ControllerAxisView extends DOMWidgetView { render(): void { this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-controller-axis'); this.el.style.width = '16px'; this.el.style.padding = '4px'; this.support = document.createElement('div'); this.support.style.position = 'relative'; this.support.style.margin = '1px'; this.support.style.width = '4px'; this.support.style.height = '64px'; this.support.style.border = '1px solid black'; this.support.style.background = 'lightgray'; this.bullet = document.createElement('div'); this.bullet.style.position = 'absolute'; this.bullet.style.margin = '-3px'; this.bullet.style.boxSizing = 'unset'; this.bullet.style.width = '10px'; this.bullet.style.height = '10px'; this.bullet.style.background = 'gray'; this.label = document.createElement('div'); this.label.textContent = this.model.get('description'); this.label.style.textAlign = 'center'; this.support.appendChild(this.bullet); this.el.appendChild(this.support); this.el.appendChild(this.label); this.update(); } update(): void { this.bullet.style.top = 50 * (this.model.get('value') + 1) + '%'; } support: HTMLDivElement; bullet: HTMLDivElement; label: HTMLDivElement; } export class ControllerModel extends CoreDOMWidgetModel { static serializers = { ...CoreDOMWidgetModel.serializers, buttons: { deserialize: unpack_models }, axes: { deserialize: unpack_models }, }; defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ControllerModel', _view_name: 'ControllerView', index: 0, name: '', mapping: '', connected: false, timestamp: 0, buttons: [], axes: [], }; } initialize(attributes: Backbone.ObjectHash, options: any): void { super.initialize(attributes, options); if (navigator.getGamepads === void 0) { // Checks if the browser supports the gamepad API this.readout = 'This browser does not support gamepads.'; console.error(this.readout); } else { // Start the wait loop, and listen to updates of the only // user-provided attribute, the gamepad index. this.readout = 'Connect gamepad and press any button.'; if (this.get('connected')) { // No need to re-create Button and Axis widgets, re-use // the models provided by the backend which may already // be wired to other things. this.update_loop(); } else { // Wait for a gamepad to be connected. this.wait_loop(); } } } /** * Waits for a gamepad to be connected at the provided index. * Once one is connected, it will start the update loop, which * populates the update of axes and button values. */ wait_loop(): void { const index = this.get('index'); const pad = navigator.getGamepads()[index]; if (pad) { this.setup(pad).then((controls) => { this.set(controls); this.save_changes(); window.requestAnimationFrame(this.update_loop.bind(this)); }); } else { window.requestAnimationFrame(this.wait_loop.bind(this)); } } /** * Given a native gamepad object, returns a promise for a dictionary of * controls, of the form * { * buttons: list of Button models, * axes: list of Axis models, * } */ setup(pad: Gamepad): Promise> { // Set up the main gamepad attributes this.set({ name: pad.id, mapping: pad.mapping, connected: pad.connected, timestamp: pad.timestamp, }); // Create buttons and axes. When done, start the update loop return utils.resolvePromisesDict({ buttons: Promise.all( pad.buttons.map((btn, index) => { return this._create_button_model(index); }) ), axes: Promise.all( pad.axes.map((axis, index) => { return this._create_axis_model(index); }) ), }); } /** * Update axes and buttons values, until the gamepad is disconnected. * When the gamepad is disconnected, this.reset_gamepad is called. */ update_loop(): void { const index = this.get('index'); const id = this.get('name'); const pad = navigator.getGamepads()[index]; if (pad && index === pad.index && id === pad.id) { this.set({ timestamp: pad.timestamp, connected: pad.connected, }); this.save_changes(); this.get('buttons').forEach(function ( model: ControllerButtonModel, index: number ) { model.set({ value: pad!.buttons[index].value, pressed: pad!.buttons[index].pressed, }); model.save_changes(); }); this.get('axes').forEach(function ( model: ControllerAxisModel, index: number ) { model.set('value', pad!.axes[index]); model.save_changes(); }); window.requestAnimationFrame(this.update_loop.bind(this)); } else { this.reset_gamepad(); } } /** * Resets the gamepad attributes, and start the wait_loop. */ reset_gamepad(): void { this.get('buttons').forEach(function (button: ControllerButtonModel) { button.close(); }); this.get('axes').forEach(function (axis: ControllerAxisModel) { axis.close(); }); this.set({ name: '', mapping: '', connected: false, timestamp: 0.0, buttons: [], axes: [], }); this.save_changes(); window.requestAnimationFrame(this.wait_loop.bind(this)); } /** * Creates a gamepad button widget. */ _create_button_model(index: number): Promise { return this.widget_manager .new_widget({ model_name: 'ControllerButtonModel', model_module: '@jupyter-widgets/controls', model_module_version: this.get('_model_module_version'), view_name: 'ControllerButtonView', view_module: '@jupyter-widgets/controls', view_module_version: this.get('_view_module_version'), }) .then(function (model) { model.set('description', index); return model; }); } /** * Creates a gamepad axis widget. */ _create_axis_model(index: number): Promise { return this.widget_manager .new_widget({ model_name: 'ControllerAxisModel', model_module: '@jupyter-widgets/controls', model_module_version: this.get('_model_module_version'), view_name: 'ControllerAxisView', view_module: '@jupyter-widgets/controls', view_module_version: this.get('_view_module_version'), }) .then(function (model) { model.set('description', index); return model; }); } readout: string; } /** * A simple view for a gamepad. */ export class ControllerView extends DOMWidgetView { _createElement(tagName: string): HTMLElement { this.luminoWidget = new JupyterLuminoPanelWidget({ view: this }); return this.luminoWidget.node; } _setElement(el: HTMLElement): void { if (this.el || el !== this.luminoWidget.node) { // Boxes don't allow setting the element beyond the initial creation. throw new Error('Cannot reset the DOM element.'); } this.el = this.luminoWidget.node; this.$el = $(this.luminoWidget.node); } initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.button_views = new ViewList(this.add_button, null, this); this.listenTo(this.model, 'change:buttons', (model, value) => { this.button_views.update(value); }); this.axis_views = new ViewList(this.add_axis, null, this); this.listenTo(this.model, 'change:axes', (model, value) => { this.axis_views.update(value); }); this.listenTo(this.model, 'change:name', this.update_label); } render(): void { this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-controller'); this.label = document.createElement('div'); this.el.appendChild(this.label); this.axis_box = new Panel(); this.axis_box.node.style.display = 'flex'; this.luminoWidget.addWidget(this.axis_box); this.button_box = new Panel(); this.button_box.node.style.display = 'flex'; this.luminoWidget.addWidget(this.button_box); this.button_views.update(this.model.get('buttons')); this.axis_views.update(this.model.get('axes')); this.update_label(); } update_label(): void { this.label.textContent = this.model.get('name') || this.model.readout; } add_button(model: ControllerButtonModel): Promise { // we insert a dummy element so the order is preserved when we add // the rendered content later. const dummy = new Widget(); this.button_box.addWidget(dummy); return this.create_child_view(model) .then((view) => { // replace the dummy widget with the new one. const i = ArrayExt.firstIndexOf(this.button_box.widgets, dummy); this.button_box.insertWidget(i, view.luminoWidget); dummy.dispose(); return view; }) .catch(reject('Could not add child button view to controller', true)); } add_axis(model: ControllerAxisModel): Promise { // we insert a dummy element so the order is preserved when we add // the rendered content later. const dummy = new Widget(); this.axis_box.addWidget(dummy); return this.create_child_view(model) .then((view) => { // replace the dummy widget with the new one. const i = ArrayExt.firstIndexOf(this.axis_box.widgets, dummy); this.axis_box.insertWidget(i, view.luminoWidget); dummy.dispose(); return view; }) .catch(reject('Could not add child axis view to controller', true)); } remove(): void { super.remove(); this.button_views.remove(); this.axis_views.remove(); } button_views: ViewList; axis_views: ViewList; label: HTMLDivElement; axis_box: Panel; button_box: Panel; model: ControllerModel; luminoWidget: JupyterLuminoPanelWidget; } ipywidgets-8.1.5/packages/controls/src/widget_core.ts000066400000000000000000000031211466162644600230040ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. // widget_core implements some common patterns for the core widget collection // that are not to be used directly by third-party widget authors. import { DOMWidgetModel, WidgetModel } from '@jupyter-widgets/base'; import { DescriptionModel } from './widget_description'; import { JUPYTER_CONTROLS_VERSION } from './version'; export class CoreWidgetModel extends WidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'CoreWidgetModel', _view_module: '@jupyter-widgets/controls', _model_module: '@jupyter-widgets/controls', _view_module_version: JUPYTER_CONTROLS_VERSION, _model_module_version: JUPYTER_CONTROLS_VERSION, }; } } export class CoreDOMWidgetModel extends DOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'CoreDOMWidgetModel', _view_module: '@jupyter-widgets/controls', _model_module: '@jupyter-widgets/controls', _view_module_version: JUPYTER_CONTROLS_VERSION, _model_module_version: JUPYTER_CONTROLS_VERSION, }; } } export class CoreDescriptionModel extends DescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'CoreDescriptionModel', _view_module: '@jupyter-widgets/controls', _model_module: '@jupyter-widgets/controls', _view_module_version: JUPYTER_CONTROLS_VERSION, _model_module_version: JUPYTER_CONTROLS_VERSION, }; } } ipywidgets-8.1.5/packages/controls/src/widget_date.ts000066400000000000000000000062171466162644600230020ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DescriptionView } from './widget_description'; import { CoreDescriptionModel } from './widget_core'; import { uuid } from './utils'; export interface ISerializedDate { /** * Full year */ year: number; /** * Zero-based month (0 means January, 11 means December) */ month: number; /** * Day of month */ date: number; } export function serialize_date(value: Date | null): ISerializedDate | null { if (value === null) { return null; } else { return { year: value.getUTCFullYear(), month: value.getUTCMonth(), date: value.getUTCDate(), }; } } export function deserialize_date(value: ISerializedDate | null): Date | null { if (value === null) { return null; } else { const date = new Date(); date.setUTCFullYear(value.year, value.month, value.date); date.setUTCHours(0, 0, 0, 0); return date; } } export class DatePickerModel extends CoreDescriptionModel { static serializers = { ...CoreDescriptionModel.serializers, value: { serialize: serialize_date, deserialize: deserialize_date, }, }; defaults(): Backbone.ObjectHash { return { ...super.defaults(), value: null, _model_name: 'DatePickerModel', _view_name: 'DatePickerView', }; } } export class DatePickerView extends DescriptionView { render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-datepicker'); this._datepicker = document.createElement('input'); this._datepicker.setAttribute('type', 'date'); this._datepicker.id = this.label.htmlFor = uuid(); this.el.appendChild(this._datepicker); this.listenTo(this.model, 'change:value', this._update_value); this._update_value(); this.update(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { if (options === undefined || options.updated_view !== this) { this._datepicker.disabled = this.model.get('disabled'); } return super.update(); } events(): { [e: string]: string } { // Typescript doesn't understand that these functions are called, so we // specifically use them here so it knows they are being used. void this._picker_change; void this._picker_focusout; return { 'change [type="date"]': '_picker_change', 'focusout [type="date"]': '_picker_focusout', }; } private _update_value(): void { const value = this.model.get('value'); this._datepicker.valueAsDate = value; } private _picker_change(): void { if (!this._datepicker.validity.badInput) { this.model.set('value', this._datepicker.valueAsDate); this.touch(); } } private _picker_focusout(): void { if (this._datepicker.validity.badInput) { this.model.set('value', null); this.touch(); } } private _datepicker: HTMLInputElement; } ipywidgets-8.1.5/packages/controls/src/widget_datetime.ts000066400000000000000000000232031466162644600236530ustar00rootroot00000000000000// Copyright (c) Vidar Tonaas Fauske // Distributed under the terms of the Modified BSD License. import { ISerializers } from '@jupyter-widgets/base'; import { uuid } from './utils'; import { DescriptionView } from './widget_description'; import { CoreDescriptionModel } from './widget_core'; import { serialize_time } from './widget_time'; export interface ISerializedDatetime { /** * UTC full year */ year: number; /** * UTC zero-based month (0 means January, 11 means December) */ month: number; /** * UTC day of month */ date: number; /** * UTC hour (24H format) */ hours: number; /** * UTC minutes */ minutes: number; /** * UTC seconds */ seconds: number; /** * UTC millisconds */ milliseconds: number; } export function serialize_datetime(value: Date): ISerializedDatetime | null { if (value === null) { return null; } else { return { year: value.getUTCFullYear(), month: value.getUTCMonth(), date: value.getUTCDate(), hours: value.getUTCHours(), minutes: value.getUTCMinutes(), seconds: value.getUTCSeconds(), milliseconds: value.getUTCMilliseconds(), }; } } export function deserialize_datetime(value: ISerializedDatetime): Date | null { if (value === null) { return null; } else { const date = new Date(); date.setUTCFullYear(value.year, value.month, value.date); date.setUTCHours( value.hours, value.minutes, value.seconds, value.milliseconds ); return date; } } export const datetime_serializers = { serialize: serialize_datetime, deserialize: deserialize_datetime, }; export class DatetimeModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'DatetimeModel', _view_name: 'DatetimeView', value: null, disabled: false, min: null, max: null, }; } static serializers: ISerializers = { ...CoreDescriptionModel.serializers, value: datetime_serializers, min: datetime_serializers, max: datetime_serializers, }; } export class DatetimeView extends DescriptionView { render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-datetimepicker'); const test = document.createElement('input'); test.type = 'datetime-local'; if (test.type === 'text') { // No native support, split into date and time input: this._datepicker = document.createElement('input'); this._datepicker.setAttribute('type', 'date'); this._datepicker.id = this.label.htmlFor = uuid(); this._timepicker = document.createElement('input'); this._timepicker.setAttribute('type', 'time'); this._timepicker.id = uuid(); this.el.appendChild(this._datepicker); this.el.appendChild(this._timepicker); } else { this._datetimepicker = test; this._datetimepicker.id = this.label.htmlFor = uuid(); this.el.appendChild(this._datetimepicker); } this.listenTo(this.model, 'change:value', this._update_value); this.listenTo(this.model, 'change', this.update2); this._update_value(); this.update2(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update2(model?: Backbone.Model, options?: any): void { if (options === undefined || options.updated_view !== this) { const min = this.model.get('min') as Date | null; const max = this.model.get('max') as Date | null; if (this._datetimepicker) { this._datetimepicker.disabled = this.model.get('disabled'); this._datetimepicker!.min = Private.dt_as_dt_string(min); this._datetimepicker!.max = Private.dt_as_dt_string(max); } else { this._datepicker!.disabled = this.model.get('disabled'); this._datepicker!.min = Private.dt_as_date_string(min); this._datepicker!.max = Private.dt_as_date_string(max); this._timepicker!.disabled = this.model.get('disabled'); // Don't support min/max time here. // It could be added by enabling min time if value is min date, // and enabling max time if value is max date, but leave as // TODO for now. } } } events(): { [e: string]: string } { // Typescript doesn't understand that these functions are called, so we // specifically use them here so it knows they are being used. void this._picker_change; void this._picker_focusout; return { 'change [type="date"]': '_picker_change', 'change [type="time"]': '_picker_change', 'change [type="datetime-local"]': '_picker_change', 'focusout [type="date"]': '_picker_focusout', 'focusout [type="datetime-local"]': '_picker_focusout', 'focusout [type="time"]': '_picker_focusout', }; } private _update_value( model?: Backbone.Model, newValue?: any, options?: any ): void { if (options === undefined || options.updated_view !== this) { const value = this.model.get('value') as Date | null; if (this._datetimepicker) { this._datetimepicker.value = Private.dt_as_dt_string(value); } else { this._datepicker!.valueAsDate = value; this._timepicker!.value = Private.dt_as_time_string(value); } } } private _picker_change(): void { if (this._datetimepicker) { if (!this._datetimepicker.validity.badInput) { const v = this._datetimepicker.value; let date = v ? new Date(v) : null; if (date && isNaN(date.valueOf())) { date = null; } this.model.set('value', date, { updated_view: this }); this.touch(); } } else { if ( !this._datepicker!.validity.badInput && !this._timepicker!.validity.badInput ) { const date = this._datepicker!.valueAsDate; const time = serialize_time(this._timepicker!.value); if (date !== null && time !== null) { // * Use local time * date.setHours( time.hours, time.minutes, time.seconds, time.milliseconds ); } this.model.set('value', time !== null && date, { updated_view: this }); this.touch(); } } } private _picker_focusout(): void { const pickers = [this._datetimepicker, this._datepicker, this._timepicker]; if (pickers.some((p) => p && p.validity.badInput)) { this.model.set('value', null); this.touch(); } } private _datetimepicker: HTMLInputElement | undefined; private _timepicker: HTMLInputElement | undefined; private _datepicker: HTMLInputElement | undefined; } namespace Private { // eslint-disable-next-line no-inner-declarations export function dt_as_dt_string(value: Date | null): string { if (value === null) { return ''; } // Replicate `toISOString()` but in local time zone: const parts = []; parts.push(`${value.getFullYear().toString().padStart(4, '0')}`); parts.push(`-${(value.getMonth() + 1).toString().padStart(2, '0')}`); parts.push(`-${value.getDate().toString().padStart(2, '0')}`); parts.push(`T${value.getHours().toString().padStart(2, '0')}`); parts.push(`:${value.getMinutes().toString().padStart(2, '0')}`); if (value.getSeconds() > 0 || value.getMilliseconds() > 0) { parts.push(`:${value.getSeconds().toString().padStart(2, '0')}`); if (value.getMilliseconds() > 0) { parts.push(`.${value.getMilliseconds().toString().padStart(3, '0')}`); } } return parts.join(''); } // eslint-disable-next-line no-inner-declarations export function dt_as_date_string(value: Date | null): string { return value ? dt_as_dt_string(value).split('T', 2)[0] : ''; } // eslint-disable-next-line no-inner-declarations export function dt_as_time_string(value: Date | null): string { return value ? dt_as_dt_string(value).split('T', 2)[1] : ''; } } export interface ISerializedNaiveDatetime { /** * full year */ year: number; /** * zero-based month (0 means January, 11 means December) */ month: number; /** * day of month */ date: number; /** * hour (24H format) */ hours: number; /** * minutes */ minutes: number; /** * seconds */ seconds: number; /** * millisconds */ milliseconds: number; } export function serialize_naive( value: Date | null ): ISerializedNaiveDatetime | null { if (value === null) { return null; } else { return { year: value.getFullYear(), month: value.getMonth(), date: value.getDate(), hours: value.getHours(), minutes: value.getMinutes(), seconds: value.getSeconds(), milliseconds: value.getMilliseconds(), }; } } export function deserialize_naive( value: ISerializedNaiveDatetime ): Date | null { if (value === null) { return null; } else { const date = new Date(); date.setFullYear(value.year, value.month, value.date); date.setHours( value.hours, value.minutes, value.seconds, value.milliseconds ); return date; } } export const naive_serializers = { serialize: serialize_naive, deserialize: deserialize_naive, }; export class NaiveDatetimeModel extends DatetimeModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'NaiveDatetimeModel' }; } static serializers: ISerializers = { ...CoreDescriptionModel.serializers, value: naive_serializers, min: naive_serializers, max: naive_serializers, }; } ipywidgets-8.1.5/packages/controls/src/widget_description.ts000066400000000000000000000062721466162644600244110ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DOMWidgetModel, DOMWidgetView, StyleModel, } from '@jupyter-widgets/base'; import { typeset } from './utils'; import { JUPYTER_CONTROLS_VERSION } from './version'; export class DescriptionStyleModel extends StyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'DescriptionStyleModel', _model_module: '@jupyter-widgets/controls', _model_module_version: JUPYTER_CONTROLS_VERSION, }; } public static styleProperties = { description_width: { selector: '.widget-label', attribute: 'width', default: null as any, }, }; } export class DescriptionModel extends DOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'DescriptionModel', _view_name: 'DescriptionView', _view_module: '@jupyter-widgets/controls', _model_module: '@jupyter-widgets/controls', _view_module_version: JUPYTER_CONTROLS_VERSION, _model_module_version: JUPYTER_CONTROLS_VERSION, description: '', description_allow_html: false, }; } } export class DescriptionView extends DOMWidgetView { render(): void { this.label = document.createElement('label'); this.el.appendChild(this.label); this.label.className = 'widget-label'; this.label.style.display = 'none'; this.listenTo(this.model, 'change:description', this.updateDescription); this.listenTo( this.model, 'change:description_allow_html', this.updateDescription ); this.listenTo(this.model, 'change:tabbable', this.updateTabindex); this.updateDescription(); this.updateTabindex(); this.updateTooltip(); } typeset(element: HTMLElement, text?: string): void { this.displayed.then(() => { if ((window as any).MathJax?.Hub?.Queue) { return typeset(element, text); } const widget_manager: any = this.model.widget_manager; const latexTypesetter = widget_manager._rendermime?.latexTypesetter; if (latexTypesetter) { if (text !== void 0) { element.textContent = text; } latexTypesetter.typeset(element); } }); } updateDescription(): void { const description = this.model.get('description'); if (description.length === 0) { this.label.style.display = 'none'; } else { if (this.model.get('description_allow_html')) { this.label.innerHTML = this.model.widget_manager.inline_sanitize(description); } else { this.label.textContent = description; } this.typeset(this.label); this.label.style.display = ''; } } updateTooltip(): void { if (!this.label) return; this.label.title = this.model.get('tooltip'); } label: HTMLLabelElement; } /** * For backwards compatibility with jupyter-js-widgets 2.x. * * Use DescriptionModel instead. */ export class LabeledDOMWidgetModel extends DescriptionModel {} /** * For backwards compatibility with jupyter-js-widgets 2.x. * * Use DescriptionView instead. */ export class LabeledDOMWidgetView extends DescriptionView {} ipywidgets-8.1.5/packages/controls/src/widget_float.ts000066400000000000000000000232471466162644600231740ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { CoreDescriptionModel } from './widget_core'; import { BaseIntSliderView, IntRangeSliderView, IntSliderView, IntTextView, } from './widget_int'; import { format } from 'd3-format'; import noUiSlider from 'nouislider'; export class FloatModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'FloatModel', value: 0, }; } } export class BoundedFloatModel extends FloatModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'BoundedFloatModel', max: 100.0, min: 0.0, }; } } export class FloatSliderModel extends BoundedFloatModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'FloatSliderModel', _view_name: 'FloatSliderView', step: 1.0, orientation: 'horizontal', _range: false, readout: true, readout_format: '.2f', slider_color: null, continuous_update: true, disabled: false, }; } initialize( attributes: any, options: { model_id: string; comm?: any; widget_manager: any } ): void { super.initialize(attributes, options); this.on('change:readout_format', this.update_readout_format, this); this.update_readout_format(); } update_readout_format(): void { this.readout_formatter = format(this.get('readout_format')); } readout_formatter: any; } export class FloatLogSliderModel extends BoundedFloatModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'FloatLogSliderModel', _view_name: 'FloatLogSliderView', step: 0.1, orientation: 'horizontal', _range: false, readout: true, readout_format: '.3g', slider_color: null, continuous_update: true, disabled: false, base: 10, value: 1.0, min: 0, max: 4, }; } initialize( attributes: any, options: { model_id: string; comm: any; widget_manager: any } ): void { super.initialize(attributes, options); this.on('change:readout_format', this.update_readout_format, this); this.update_readout_format(); } update_readout_format(): void { this.readout_formatter = format(this.get('readout_format')); } readout_formatter: any; } export class FloatRangeSliderModel extends FloatSliderModel {} export class FloatSliderView extends IntSliderView { /** * Validate the value of the slider before sending it to the back-end * and applying it to the other views on the page. */ _validate_slide_value(x: any): any { return x; } _parse_value = parseFloat; } export class FloatLogSliderView extends BaseIntSliderView { update(options?: any): void { super.update(options); const value = this.model.get('value'); this.readout.textContent = this.valueToString(value); } /** * Convert from value to exponent * * @param value the widget value * @returns the log-value between the min/max exponents */ logCalc(value: number): number { const min = this.model.get('min'); const max = this.model.get('max'); const base = this.model.get('base'); let log_value = Math.log(value) / Math.log(base); if (log_value > max) { log_value = max; } else if (log_value < min) { log_value = min; } return log_value; } createSlider(): void { const orientation = this.model.get('orientation'); const behavior = this.model.get('behavior'); noUiSlider.create(this.$slider, { start: this.logCalc(this.model.get('value')), behaviour: behavior, range: { min: this.model.get('min'), max: this.model.get('max'), }, step: this.model.get('step') ?? undefined, animate: false, orientation: orientation, direction: orientation === 'horizontal' ? 'ltr' : 'rtl', format: { from: (value: string): number => Number(value), to: (value: number): number => value, }, }); // Using noUiSlider's 'update' and 'change' events. // See reference: https://refreshless.com/nouislider/events-callbacks/ this.$slider.noUiSlider.on('update', (values: any, handle: any) => { this.handleSliderUpdateEvent(values, handle); }); this.$slider.noUiSlider.on('change', (values: any, handle: any) => { this.handleSliderChangeEvent(values, handle); }); } /** * Write value to a string */ valueToString(value: number): string { const format = this.model.readout_formatter; return format(value); } /** * Parse value from a string */ stringToValue(text: string | null): number { return text === null ? NaN : this._parse_value(text); } /** * this handles the entry of text into the contentEditable label first, the * value is checked if it contains a parseable value then it is clamped * within the min-max range of the slider finally, the model is updated if * the value is to be changed * * if any of these conditions are not met, the text is reset */ handleTextChange(): void { let value = this.stringToValue(this.readout.textContent); const vmin = this.model.get('min'); const vmax = this.model.get('max'); const base = this.model.get('base'); if (isNaN(value)) { this.readout.textContent = this.valueToString(this.model.get('value')); } else { value = Math.max( Math.min(value, Math.pow(base, vmax)), Math.pow(base, vmin) ); if (value !== this.model.get('value')) { this.readout.textContent = this.valueToString(value); this.model.set('value', value); this.touch(); } else { this.readout.textContent = this.valueToString(this.model.get('value')); } } } /** * Called whilst the slider is dragged, tapped or moved by the arrow keys. */ handleSliderUpdateEvent(values: number[], handle: number): void { const base = this.model.get('base'); const actual_value = Math.pow(base, this._validate_slide_value(values[0])); this.readout.textContent = this.valueToString(actual_value); // Only persist the value while sliding if the continuous_update // trait is set to true. if (this.model.get('continuous_update')) { this.handleSliderChanged(values, handle); } } /** * Called when the slider handle is released after dragging, * or by tapping or moving by the arrow keys. */ handleSliderChangeEvent(values: number[], handle: number): void { const base = this.model.get('base'); const actual_value = Math.pow(base, this._validate_slide_value(values[0])); this.readout.textContent = this.valueToString(actual_value); this.handleSliderChanged(values, handle); } /** * Called when the slider value has changed. * * Calling model.set will trigger all of the other views of the * model to update. */ handleSliderChanged(values: number[], handle: number): void { if (this._updating_slider) { return; } const base = this.model.get('base'); const actual_value = Math.pow(base, this._validate_slide_value(values[0])); this.model.set('value', actual_value, { updated_view: this }); this.touch(); } updateSliderValue(model: any, value: any, options: any): void { if (options.updated_view === this) { return; } const log_value = this.logCalc(this.model.get('value')); this.$slider.noUiSlider.set(log_value); } updateSliderOptions(e: any): void { this.$slider.noUiSlider.updateOptions({ start: this.logCalc(this.model.get('value')), range: { min: this.model.get('min'), max: this.model.get('max'), }, step: this.model.get('step'), }); } _validate_slide_value(x: any): any { return x; } _parse_value = parseFloat; private _updating_slider: boolean; } export class FloatRangeSliderView extends IntRangeSliderView { /** * Validate the value of the slider before sending it to the back-end * and applying it to the other views on the page. */ _validate_slide_value(x: any): any { return x; } _parse_value = parseFloat; // matches: whitespace?, float, whitespace?, (hyphen, colon, or en-dash), whitespace?, float _range_regex = /^\s*([+-]?(?:\d*\.?\d+|\d+\.)(?:[eE][-:]?\d+)?)\s*[-:–]\s*([+-]?(?:\d*\.?\d+|\d+\.)(?:[eE][+-]?\d+)?)/; } export class FloatTextModel extends FloatModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'FloatTextModel', _view_name: 'FloatTextView', disabled: false, continuous_update: false, }; } } export class BoundedFloatTextModel extends BoundedFloatModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'BoundedFloatTextModel', _view_name: 'FloatTextView', disabled: false, continuous_update: false, step: 0.1, }; } } export class FloatTextView extends IntTextView { _parse_value = parseFloat; _default_step = 'any'; /** * Handle key press */ handleKeypress(e: KeyboardEvent): void { // Overwrite IntTextView's handleKeypress // which prevents decimal points. e.stopPropagation(); } /** * Handle key up */ handleKeyUp(e: KeyboardEvent): void { // Overwrite IntTextView's handleKeyUp // which prevents decimal points. } } export class FloatProgressModel extends BoundedFloatModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'FloatProgressModel', _view_name: 'ProgressView', orientation: 'horizontal', bar_style: '', style: null, }; } } ipywidgets-8.1.5/packages/controls/src/widget_image.ts000066400000000000000000000045501466162644600231450ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DOMWidgetView } from '@jupyter-widgets/base'; import { CoreDOMWidgetModel } from './widget_core'; export class ImageModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ImageModel', _view_name: 'ImageView', format: 'png', width: '', height: '', value: new DataView(new ArrayBuffer(0)), }; } static serializers = { ...CoreDOMWidgetModel.serializers, value: { serialize: (value: any): DataView => { return new DataView(value.buffer.slice(0)); }, }, }; } export class ImageView extends DOMWidgetView { render(): void { /** * Called when view is rendered. */ super.render(); this.luminoWidget.addClass('jupyter-widgets'); this.luminoWidget.addClass('widget-image'); this.update(); // Set defaults. } update(): void { /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ let url; const format = this.model.get('format'); const value = this.model.get('value'); if (format !== 'url') { const blob = new Blob([value], { type: `image/${this.model.get('format')}`, }); url = URL.createObjectURL(blob); } else { url = new TextDecoder('utf-8').decode(value.buffer); } // Clean up the old objectURL const oldurl = this.el.src; this.el.src = url; if (oldurl) { URL.revokeObjectURL(oldurl); } const width = this.model.get('width'); if (width !== undefined && width.length > 0) { this.el.setAttribute('width', width); } else { this.el.removeAttribute('width'); } const height = this.model.get('height'); if (height !== undefined && height.length > 0) { this.el.setAttribute('height', height); } else { this.el.removeAttribute('height'); } return super.update(); } remove(): void { if (this.el.src) { URL.revokeObjectURL(this.el.src); } super.remove(); } preinitialize() { // Must set this before the initialize method creates the element this.tagName = 'img'; } el: HTMLImageElement; } ipywidgets-8.1.5/packages/controls/src/widget_int.ts000066400000000000000000000676731466162644600226740ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { CoreDescriptionModel } from './widget_core'; import { DescriptionStyleModel, DescriptionView } from './widget_description'; import { DOMWidgetView, WidgetView } from '@jupyter-widgets/base'; import { uuid } from './utils'; import { format } from 'd3-format'; import noUiSlider from 'nouislider'; export class IntModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'IntModel', value: 0, }; } } export class BoundedIntModel extends IntModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'BoundedIntModel', max: 100, min: 0, }; } } export class SliderStyleModel extends DescriptionStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'SliderStyleModel' }; } public static styleProperties = { ...DescriptionStyleModel.styleProperties, handle_color: { selector: '.noUi-handle', attribute: 'background-color', default: null as any, }, }; } export class IntSliderModel extends BoundedIntModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'IntSliderModel', _view_name: 'IntSliderView', step: 1, orientation: 'horizontal', readout: true, readout_format: 'd', continuous_update: true, style: null, disabled: false, }; } initialize( attributes: Backbone.ObjectHash, options: { model_id: string; comm: any; widget_manager: any } ): void { super.initialize(attributes, options); this.on('change:readout_format', this.update_readout_format, this); this.update_readout_format(); } update_readout_format(): void { this.readout_formatter = format(this.get('readout_format')); } readout_formatter: any; } export class IntRangeSliderModel extends IntSliderModel {} export abstract class BaseIntSliderView extends DescriptionView { render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-slider'); this.el.classList.add('widget-hslider'); // Creating noUiSlider instance and scaffolding this.$slider = document.createElement('div'); this.$slider.classList.add('slider'); // Put the slider in a container this.slider_container = document.createElement('div'); this.slider_container.classList.add('slider-container'); this.slider_container.appendChild(this.$slider); this.el.appendChild(this.slider_container); this.readout = document.createElement('div'); this.el.appendChild(this.readout); this.readout.classList.add('widget-readout'); this.readout.contentEditable = 'true'; this.readout.style.display = 'none'; // noUiSlider constructor and event handlers this.createSlider(); // Event handlers this.model.on('change:orientation', this.regenSlider, this); this.model.on('change:max', this.updateSliderOptions, this); this.model.on('change:min', this.updateSliderOptions, this); this.model.on('change:step', this.updateSliderOptions, this); this.model.on('change:value', this.updateSliderValue, this); // Set defaults. this.update(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { if (options === undefined || options.updated_view !== this) { if (this.model.get('disabled')) { this.readout.contentEditable = 'false'; this.$slider.setAttribute('disabled', true); } else { this.readout.contentEditable = 'true'; this.$slider.removeAttribute('disabled'); } // Use the right CSS classes for vertical & horizontal sliders const orientation = this.model.get('orientation'); if (orientation === 'vertical') { this.el.classList.remove('widget-hslider'); this.el.classList.add('widget-vslider'); this.el.classList.remove('widget-inline-hbox'); this.el.classList.add('widget-inline-vbox'); } else { this.el.classList.remove('widget-vslider'); this.el.classList.add('widget-hslider'); this.el.classList.remove('widget-inline-vbox'); this.el.classList.add('widget-inline-hbox'); } const readout = this.model.get('readout'); if (readout) { this.readout.style.display = ''; this.displayed.then(() => { if (this.readout_overflow()) { this.readout.classList.add('overflow'); } else { this.readout.classList.remove('overflow'); } }); } else { this.readout.style.display = 'none'; } } return super.update(); } /** * Returns true if the readout box content overflows. */ readout_overflow(): boolean { return this.readout.scrollWidth > this.readout.clientWidth; } /** * Write value to a string */ abstract valueToString(value: number | number[]): string; /** * Parse value from a string */ abstract stringToValue(text: string): number | number[] | null; events(): { [e: string]: string } { return { // Dictionary of events and their handlers. 'blur [contentEditable=true]': 'handleTextChange', 'keydown [contentEditable=true]': 'handleKeyDown', }; } handleKeyDown(e: KeyboardEvent): void { if (e.keyCode === 13) { /* keyboard keycodes `enter` */ e.preventDefault(); this.handleTextChange(); } } /** * Create a new noUiSlider object */ createSlider(): void { const orientation = this.model.get('orientation'); const behavior = this.model.get('behavior'); noUiSlider.create(this.$slider, { start: this.model.get('value'), connect: true, behaviour: behavior, range: { min: this.model.get('min'), max: this.model.get('max'), }, step: this.model.get('step'), animate: false, orientation: orientation, direction: orientation === 'horizontal' ? 'ltr' : 'rtl', format: { from: (value: string): number => Number(value), to: (value: number): number => this._validate_slide_value(value), }, }); // Using noUiSlider's 'update' and 'change' events. // See reference: https://refreshless.com/nouislider/events-callbacks/ this.$slider.noUiSlider.on('update', (values: any, handle: any) => { this.handleSliderUpdateEvent(values, handle); }); this.$slider.noUiSlider.on('change', (values: any, handle: any) => { this.handleSliderChangeEvent(values, handle); }); } /** * Recreate/Regenerate a slider object * noUiSlider does not support in-place mutation of the orientation * state. We therefore need to destroy the current instance * and create a new one with the new properties. This is * handled in a separate function and has a dedicated event * handler. */ regenSlider(e: any): void { this.$slider.noUiSlider.destroy(); this.createSlider(); } /** * Update noUiSlider object in-place with new options */ abstract updateSliderOptions(e: any): void; /** * Update noUiSlider's state so that it is * synced with the Backbone.jas model */ abstract updateSliderValue(model: any, value: any, options: any): void; /** * this handles the entry of text into the contentEditable label first, the * value is checked if it contains a parseable value then it is clamped * within the min-max range of the slider finally, the model is updated if * the value is to be changed * * if any of these conditions are not met, the text is reset */ abstract handleTextChange(): void; /** * Called when the slider handle is released after dragging, * or by tapping or moving by the arrow keys. */ abstract handleSliderChangeEvent(value: any, handle: any): void; /** * Called whilst the slider is dragged, tapped or moved by the arrow keys. */ abstract handleSliderUpdateEvent(value: any, handle: any): void; /** * Called when the slider value has changed. * * Calling model.set will trigger all of the other views of the * model to update. */ abstract handleSliderChanged(values: number[], handle: number): void; /** * Validate the value of the slider before sending it to the back-end * and applying it to the other views on the page. */ _validate_slide_value(x: number): number { return Math.round(x); } $slider: any; slider_container: HTMLElement; readout: HTMLDivElement; model: IntSliderModel; _parse_value = parseInt; } export class IntRangeSliderView extends BaseIntSliderView { update(options?: any): void { super.update(options); const value = this.model.get('value'); this.readout.textContent = this.valueToString(value); if (this.model.get('value') !== value) { this.model.set('value', value, { updated_view: this }); this.touch(); } } /** * Write value to a string */ valueToString(value: number[]): string { const format = this.model.readout_formatter; return value .map(function (v) { return format(v); }) .join(' – '); } /** * Parse value from a string */ stringToValue(text: string | null): number[] | null { if (text === null) { return null; } // ranges can be expressed either 'val-val' or 'val:val' (+spaces) const match = this._range_regex.exec(text); if (match) { return [this._parse_value(match[1]), this._parse_value(match[2])]; } else { return null; } } handleTextChange(): void { let value = this.stringToValue(this.readout.textContent); const vmin = this.model.get('min'); const vmax = this.model.get('max'); // reject input where NaN or lower > upper if ( value === null || isNaN(value[0]) || isNaN(value[1]) || value[0] > value[1] ) { this.readout.textContent = this.valueToString(this.model.get('value')); } else { // clamp to range value = [ Math.max(Math.min(value[0], vmax), vmin), Math.max(Math.min(value[1], vmax), vmin), ]; if ( value[0] !== this.model.get('value')[0] || value[1] !== this.model.get('value')[1] ) { this.readout.textContent = this.valueToString(value); this.model.set('value', value); this.touch(); } else { this.readout.textContent = this.valueToString(this.model.get('value')); } } } /** * Called when the slider handle is released after dragging, * or by tapping or moving by the arrow keys. */ handleSliderChangeEvent(values: any, handle: any): void { const actual_value = values.map(this._validate_slide_value); this.readout.textContent = this.valueToString(actual_value); this.handleSliderChanged(values, handle); } /** * Called whilst the slider is dragged, tapped or moved by the arrow keys. */ handleSliderUpdateEvent(values: any, handle: any): void { const actual_value = values.map(this._validate_slide_value); this.readout.textContent = this.valueToString(actual_value); // Only persist the value while sliding if the continuous_update // trait is set to true. if (this.model.get('continuous_update')) { this.handleSliderChanged(values, handle); } } handleSliderChanged(values: number[], handle: number): void { const actual_value = values.map(this._validate_slide_value); this.model.set('value', actual_value, { updated_view: this }); this.touch(); } updateSliderOptions(e: any): void { this.$slider.noUiSlider.updateOptions({ start: this.model.get('value'), range: { min: this.model.get('min'), max: this.model.get('max'), }, step: this.model.get('step'), }); } updateSliderValue(model: any, _: any, options: any): void { if (options.updated_view === this) { return; } const prev_value = this.$slider.noUiSlider.get(); const value = this.model.get('value'); if (prev_value[0] !== value[0] || prev_value[1] !== value[1]) { this.$slider.noUiSlider.set(value); } } // range numbers can be separated by a hyphen, colon, or an en-dash _range_regex = /^\s*([+-]?\d+)\s*[-:–]\s*([+-]?\d+)/; } export class IntSliderView extends BaseIntSliderView { update(options?: any): void { super.update(options); const min = this.model.get('min'); const max = this.model.get('max'); let value = this.model.get('value'); if (value > max) { value = max; } else if (value < min) { value = min; } this.readout.textContent = this.valueToString(value); if (this.model.get('value') !== value) { this.model.set('value', value, { updated_view: this }); this.touch(); } } valueToString(value: number | number[]): string { const format = this.model.readout_formatter; return format(value); } stringToValue(text: string): number | number[] { return this._parse_value(text); } handleTextChange(): void { let value = this.stringToValue(this.readout.textContent ?? ''); const vmin = this.model.get('min'); const vmax = this.model.get('max'); if (isNaN(value as number)) { this.readout.textContent = this.valueToString(this.model.get('value')); } else { value = Math.max(Math.min(value as number, vmax), vmin); if (value !== this.model.get('value')) { this.readout.textContent = this.valueToString(value); this.model.set('value', value); this.touch(); } else { this.readout.textContent = this.valueToString(this.model.get('value')); } } } handleSliderChangeEvent(values: any, handle: any): void { const actual_value = values.map(this._validate_slide_value); this.readout.textContent = this.valueToString(actual_value); this.handleSliderChanged(values, handle); } handleSliderUpdateEvent(values: any, handle: any): void { const actual_value = values.map(this._validate_slide_value); this.readout.textContent = this.valueToString(actual_value); // Only persist the value while sliding if the continuous_update // trait is set to true. if (this.model.get('continuous_update')) { this.handleSliderChanged(values, handle); } } handleSliderChanged(values: any, handle: any): void { const actual_value = this._validate_slide_value(values[handle]); const model_value = this.model.get('value'); if (parseFloat(model_value) !== actual_value) { this.model.set('value', actual_value, { updated_view: this }); this.touch(); } } updateSliderOptions(e: any): void { this.$slider.noUiSlider.updateOptions({ start: this.model.get('value'), range: { min: this.model.get('min'), max: this.model.get('max'), }, step: this.model.get('step'), }); } updateSliderValue(model: any, _: any, options: any): void { if (options.updated_view === this) { return; } const prev_value = this.$slider.noUiSlider.get(); const value = this.model.get('value'); if (prev_value !== value) { this.$slider.noUiSlider.set(value); } } } export class IntTextModel extends IntModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'IntTextModel', _view_name: 'IntTextView', disabled: false, continuous_update: false, }; } } export class BoundedIntTextModel extends BoundedIntModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'BoundedIntTextModel', _view_name: 'IntTextView', disabled: false, continuous_update: false, step: 1, }; } } export class IntTextView extends DescriptionView { render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-text'); this.textbox = document.createElement('input'); this.textbox.type = 'number'; this.textbox.required = true; this.textbox.id = this.label.htmlFor = uuid(); this.el.appendChild(this.textbox); this.update(); // Set defaults. } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { if (options === undefined || options.updated_view !== this) { const value: number = this.model.get('value'); if (this._parse_value(this.textbox.value) !== value) { this.textbox.value = value.toString(); } if (this.model.get('min') !== undefined) { this.textbox.min = this.model.get('min'); } if (this.model.get('max') !== undefined) { this.textbox.max = this.model.get('max'); } if ( this.model.get('step') !== undefined && this.model.get('step') !== null ) { this.textbox.step = this.model.get('step'); } else { this.textbox.step = this._default_step; } this.textbox.disabled = this.model.get('disabled'); } return super.update(); } events(): { [e: string]: string } { return { 'keydown input': 'handleKeyDown', 'keypress input': 'handleKeypress', 'keyup input': 'handleKeyUp', 'input input': 'handleChanging', 'change input': 'handleChanged', }; } /** * Handle key down * * Stop propagation so the event isn't sent to the application. */ handleKeyDown(e: KeyboardEvent): void { e.stopPropagation(); } /** * Handles key press */ handleKeypress(e: KeyboardEvent): void { if (/[e,. ]/.test(String.fromCharCode(e.keyCode))) { e.preventDefault(); } } /** * Handle key up */ handleKeyUp(e: KeyboardEvent): void { if (e.altKey || e.ctrlKey) { return; } const target = e.target as HTMLInputElement; /* remove invalid characters */ let value = target.value; value = value.replace(/[e,.\s]/g, ''); if (value.length >= 1) { const subvalue = value.substr(1); value = value[0] + subvalue.replace(/[+-]/g, ''); } if (target.value !== value) { e.preventDefault(); target.value = value; } } /** * Call the submit handler if continuous update is true and we are not * obviously incomplete. */ handleChanging(e: Event): void { const target = e.target as HTMLInputElement; const trimmed = target.value.trim(); if (trimmed === '' || ['-', '-.', '.', '+.', '+'].indexOf(trimmed) >= 0) { // incomplete number return; } if (this.model.get('continuous_update')) { this.handleChanged(e); } } /** * Applies validated input. */ handleChanged(e: Event): void { const target = e.target as HTMLInputElement; let numericalValue = this._parse_value(target.value); // If parse failed, reset value to value stored in model. if (isNaN(numericalValue)) { target.value = this.model.get('value'); } else { // Handle both the unbounded and bounded case by // checking to see if the max/min properties are defined let boundedValue = numericalValue; if (this.model.get('max') !== undefined) { boundedValue = Math.min(this.model.get('max'), boundedValue); } if (this.model.get('min') !== undefined) { boundedValue = Math.max(this.model.get('min'), boundedValue); } if (boundedValue !== numericalValue) { target.value = boundedValue as any; numericalValue = boundedValue; } // Apply the value if it has changed. if (numericalValue !== this.model.get('value')) { this.model.set('value', numericalValue, { updated_view: this }); this.touch(); } } } _parse_value = parseInt; _default_step = '1'; textbox: HTMLInputElement; } export class ProgressStyleModel extends DescriptionStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ProgressStyleModel' }; } public static styleProperties = { ...DescriptionStyleModel.styleProperties, bar_color: { selector: '.progress-bar', attribute: 'background-color', default: null as any, }, }; } export class IntProgressModel extends BoundedIntModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'IntProgressModel', _view_name: 'ProgressView', orientation: 'horizontal', bar_style: '', style: null, }; } } export class ProgressView extends DescriptionView { initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.listenTo(this.model, 'change:bar_style', this.update_bar_style); this.luminoWidget.addClass('jupyter-widgets'); } render(): void { super.render(); const orientation = this.model.get('orientation'); const className = orientation === 'horizontal' ? 'widget-hprogress' : 'widget-vprogress'; this.el.classList.add(className); this.progress = document.createElement('div'); this.progress.classList.add('progress'); this.progress.style.position = 'relative'; this.el.appendChild(this.progress); this.bar = document.createElement('div'); this.bar.classList.add('progress-bar'); this.bar.style.position = 'absolute'; this.bar.style.bottom = '0px'; this.bar.style.left = '0px'; this.progress.appendChild(this.bar); // Set defaults. this.update(); this.set_bar_style(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(): void { const value = this.model.get('value'); const max = this.model.get('max'); const min = this.model.get('min'); const orientation = this.model.get('orientation'); const percent = (100.0 * (value - min)) / (max - min); if (orientation === 'horizontal') { this.el.classList.remove('widget-inline-vbox'); this.el.classList.remove('widget-vprogress'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-hprogress'); this.bar.style.width = percent + '%'; this.bar.style.height = '100%'; } else { this.el.classList.remove('widget-inline-hbox'); this.el.classList.remove('widget-hprogress'); this.el.classList.add('widget-inline-vbox'); this.el.classList.add('widget-vprogress'); this.bar.style.width = '100%'; this.bar.style.height = percent + '%'; } return super.update(); } update_bar_style(): void { this.update_mapped_classes(ProgressView.class_map, 'bar_style', this.bar); } set_bar_style(): void { this.set_mapped_classes(ProgressView.class_map, 'bar_style', this.bar); } progress: HTMLDivElement; bar: HTMLDivElement; static class_map = { success: ['progress-bar-success'], info: ['progress-bar-info'], warning: ['progress-bar-warning'], danger: ['progress-bar-danger'], }; } export class PlayModel extends BoundedIntModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'PlayModel', _view_name: 'PlayView', repeat: false, playing: false, show_repeat: true, interval: 100, step: 1, disabled: false, }; } initialize( attributes: any, options: { model_id: string; comm: any; widget_manager: any } ): void { super.initialize(attributes, options); } loop(): void { if (!this.get('playing')) { return; } const next_value = this.get('value') + this.get('step'); if (next_value <= this.get('max')) { this.set('value', next_value); this.schedule_next(); } else { if (this.get('repeat')) { this.set('value', this.get('min')); this.schedule_next(); } else { this.pause(); } } this.save_changes(); } schedule_next(): void { this._timerId = window.setTimeout( this.loop.bind(this), this.get('interval') ); } stop(): void { this.pause(); this.set('value', this.get('min')); this.save_changes(); } pause(): void { window.clearTimeout(this._timerId); this._timerId = undefined; this.set('playing', false); this.save_changes(); } animate(): void { if (this._timerId !== undefined) { return; } if (this.get('value') === this.get('max')) { // if the value is at the end, reset it first, and then schedule the next this.set('value', this.get('min')); this.schedule_next(); this.save_changes(); } else { // otherwise directly start with the next value // loop will call save_changes in this case this.loop(); } this.save_changes(); } play(): void { this.set('playing', !this.get('playing')); this.save_changes(); } repeat(): void { this.set('repeat', !this.get('repeat')); this.save_changes(); } private _timerId: number | undefined; } export class PlayView extends DOMWidgetView { render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-play'); this.playPauseButton = document.createElement('button'); this.stopButton = document.createElement('button'); this.repeatButton = document.createElement('button'); this.playPauseButton.className = 'jupyter-button'; this.stopButton.className = 'jupyter-button'; this.repeatButton.className = 'jupyter-button'; this.el.appendChild(this.playPauseButton); // Toggle button with playing this.el.appendChild(this.stopButton); // Disable if not playing this.el.appendChild(this.repeatButton); // Always enabled, but may be hidden const playIcon = document.createElement('i'); playIcon.className = 'fa fa-play'; this.playPauseButton.appendChild(playIcon); const stopIcon = document.createElement('i'); stopIcon.className = 'fa fa-stop'; this.stopButton.appendChild(stopIcon); const repeatIcon = document.createElement('i'); repeatIcon.className = 'fa fa-retweet'; this.repeatButton.appendChild(repeatIcon); this.playPauseButton.onclick = this.model.play.bind(this.model); this.stopButton.onclick = this.model.stop.bind(this.model); this.repeatButton.onclick = this.model.repeat.bind(this.model); this.listenTo(this.model, 'change:playing', this.onPlayingChanged); this.listenTo(this.model, 'change:repeat', this.updateRepeat); this.listenTo(this.model, 'change:show_repeat', this.updateRepeat); this.updatePlaying(); this.updateRepeat(); this.update(); } update(): void { const disabled = this.model.get('disabled'); this.playPauseButton.disabled = disabled; this.stopButton.disabled = disabled; this.repeatButton.disabled = disabled; this.updatePlaying(); } onPlayingChanged(): void { this.updatePlaying(); const previous = this.model.previous('playing'); const current = this.model.get('playing'); if (!previous && current) { this.model.animate(); } else { this.model.pause(); } } updatePlaying(): void { const playing = this.model.get('playing'); const icon = this.playPauseButton.getElementsByTagName('i')[0]; if (playing) { icon.className = 'fa fa-pause'; } else { icon.className = 'fa fa-play'; } } updateRepeat(): void { const repeat = this.model.get('repeat'); this.repeatButton.style.display = this.model.get('show_repeat') ? this.playPauseButton.style.display : 'none'; if (repeat) { this.repeatButton.classList.add('mod-active'); } else { this.repeatButton.classList.remove('mod-active'); } } playPauseButton: HTMLButtonElement; stopButton: HTMLButtonElement; repeatButton: HTMLButtonElement; model: PlayModel; } ipywidgets-8.1.5/packages/controls/src/widget_link.ts000066400000000000000000000063561466162644600230260ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { WidgetModel, unpack_models } from '@jupyter-widgets/base'; import { CoreWidgetModel } from './widget_core'; export class DirectionalLinkModel extends CoreWidgetModel { static serializers = { ...CoreWidgetModel.serializers, target: { deserialize: unpack_models }, source: { deserialize: unpack_models }, }; defaults(): Backbone.ObjectHash { return { ...super.defaults(), target: undefined, source: undefined, _model_name: 'DirectionalLinkModel', }; } initialize( attributes: Backbone.ObjectHash, options: { model_id: string; comm: any; widget_manager: any } ): void { super.initialize(attributes, options); this.on('change', this.updateBindings, this); this.updateBindings(); } updateValue( sourceModel: WidgetModel, sourceAttr: string, targetModel: WidgetModel, targetAttr: string ): void { if (this._updating) { return; } this._updating = true; try { if (targetModel) { targetModel.set(targetAttr, sourceModel.get(sourceAttr)); targetModel.save_changes(); } } finally { this._updating = false; } } updateBindings(): void { this.cleanup(); [this.sourceModel, this.sourceAttr] = this.get('source') || [null, null]; [this.targetModel, this.targetAttr] = this.get('target') || [null, null]; if (this.sourceModel) { this.listenTo(this.sourceModel, 'change:' + this.sourceAttr, () => { this.updateValue( this.sourceModel, this.sourceAttr, this.targetModel, this.targetAttr ); }); this.updateValue( this.sourceModel, this.sourceAttr, this.targetModel, this.targetAttr ); this.listenToOnce(this.sourceModel, 'destroy', this.cleanup); } if (this.targetModel) { this.listenToOnce(this.targetModel, 'destroy', this.cleanup); } } cleanup(): void { // Stop listening to 'change' and 'destroy' events of the source and target if (this.sourceModel) { this.stopListening( this.sourceModel, 'change:' + this.sourceAttr, undefined ); this.stopListening(this.sourceModel, 'destroy', undefined); } if (this.targetModel) { this.stopListening(this.targetModel, 'destroy', undefined); } } sourceModel: WidgetModel; sourceAttr: string; targetModel: WidgetModel; targetAttr: string; private _updating: boolean; } export class LinkModel extends DirectionalLinkModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'LinkModel', }; } updateBindings(): void { super.updateBindings(); if (this.targetModel) { this.listenTo(this.targetModel, 'change:' + this.targetAttr, () => { this.updateValue( this.targetModel, this.targetAttr, this.sourceModel, this.sourceAttr ); }); } } cleanup(): void { super.cleanup(); if (this.targetModel) { this.stopListening( this.targetModel, 'change:' + this.targetAttr, undefined ); } } } ipywidgets-8.1.5/packages/controls/src/widget_selection.ts000066400000000000000000000701141466162644600240470ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { WidgetView } from '@jupyter-widgets/base'; import { CoreDescriptionModel } from './widget_core'; import { DescriptionStyleModel, DescriptionView } from './widget_description'; import { uuid } from './utils'; import noUiSlider from 'nouislider'; import * as utils from './utils'; export class SelectionModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'SelectionModel', index: '', _options_labels: [], disabled: false, }; } } export class SelectionView extends DescriptionView { /** * Called when view is rendered. */ render(): void { super.render(); // Incl. setting some defaults. this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(): void { super.update(); // Disable listbox if needed if (this.listbox) { this.listbox.disabled = this.model.get('disabled'); } // Set tabindex this.updateTabindex(); this.updateTooltip(); } updateTabindex(): void { if (!this.listbox) { return; // we might be constructing the parent } const tabbable = this.model.get('tabbable'); if (tabbable === true) { this.listbox.setAttribute('tabIndex', '0'); } else if (tabbable === false) { this.listbox.setAttribute('tabIndex', '-1'); } else if (tabbable === null) { this.listbox.removeAttribute('tabIndex'); } } updateTooltip(): void { if (!this.listbox) return; // we might be constructing the parent const title = this.model.get('tooltip'); if (!title) { this.listbox.removeAttribute('title'); } else if (this.model.get('description').length === 0) { this.listbox.setAttribute('title', title); } } listbox: HTMLSelectElement; } export class DropdownModel extends SelectionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'DropdownModel', _view_name: 'DropdownView', button_style: '', }; } } // TODO: Make a Lumino dropdown control, wrapped in DropdownView. Also, fix // bugs in keyboard handling. See // https://github.com/jupyter-widgets/ipywidgets/issues/1055 and // https://github.com/jupyter-widgets/ipywidgets/issues/1049 // For now, we subclass SelectView to provide DropdownView // For the old code, see commit f68bfbc566f3a78a8f3350b438db8ed523ce3642 export class DropdownView extends SelectionView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-dropdown'); this.listbox = document.createElement('select'); this.listbox.id = this.label.htmlFor = uuid(); this.el.appendChild(this.listbox); this._updateOptions(); this.update(); } /** * Update the contents of this view */ update(options?: { updated_view?: DropdownView }): void { // Debounce set calls from ourselves: if (options?.updated_view !== this) { const optsChanged = this.model.hasChanged('_options_labels'); if (optsChanged) { // Need to update options: this._updateOptions(); } } // Select the correct element const index = this.model.get('index'); this.listbox.selectedIndex = index === null ? -1 : index; return super.update(); } _updateOptions(): void { this.listbox.textContent = ''; const items = this.model.get('_options_labels'); for (let i = 0; i < items.length; i++) { const item = items[i]; const option = document.createElement('option'); option.textContent = item.replace(/ /g, '\xa0'); // space ->   option.setAttribute('data-value', encodeURIComponent(item)); option.value = item; this.listbox.appendChild(option); } } events(): { [e: string]: string } { return { 'change select': '_handle_change', }; } /** * Handle when a new value is selected. */ _handle_change(): void { this.model.set( 'index', this.listbox.selectedIndex === -1 ? null : this.listbox.selectedIndex, { updated_view: this } ); this.touch(); } /** * Handle message sent to the front end. */ handle_message(content: any): void { if (content.do === 'focus') { this.listbox.focus(); } else if (content.do === 'blur') { this.listbox.blur(); } } } export class SelectModel extends SelectionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'SelectModel', _view_name: 'SelectView', rows: 5, }; } } export class SelectView extends SelectionView { /** * Public constructor. */ initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); // Create listbox here so that subclasses can modify it before it is populated in render() this.listbox = document.createElement('select'); } /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-select'); this.listbox.id = this.label.htmlFor = uuid(); this.el.appendChild(this.listbox); this._updateOptions(); this.update(); this.updateSelection(); } /** * Update the contents of this view */ update(options?: { updated_view?: WidgetView }): void { // Don't update options/index on set calls from ourselves: if (options?.updated_view !== this) { const optsChange = this.model.hasChanged('_options_labels'); const idxChange = this.model.hasChanged('index'); if (optsChange || idxChange) { // Stash the index to guard against change events const idx = this.model.get('index'); if (optsChange) { this._updateOptions(); } this.updateSelection(idx); } } super.update(); let rows = this.model.get('rows'); if (rows === null) { rows = ''; } this.listbox.setAttribute('size', rows); } updateSelection(index?: null | number): void { index = index || (this.model.get('index') as null | number); this.listbox.selectedIndex = index === null ? -1 : index; } _updateOptions(): void { this.listbox.textContent = ''; const items = this.model.get('_options_labels'); for (let i = 0; i < items.length; i++) { const item = items[i]; const option = document.createElement('option'); option.textContent = item.replace(/ /g, '\xa0'); // space ->   option.setAttribute('data-value', encodeURIComponent(item)); option.value = item; this.listbox.appendChild(option); } } events(): { [e: string]: string } { return { 'change select': '_handle_change', }; } /** * Handle when a new value is selected. */ _handle_change(): void { this.model.set('index', this.listbox.selectedIndex, { updated_view: this }); this.touch(); } /** * Handle message sent to the front end. */ handle_message(content: any): void { if (content.do == 'focus') { this.listbox.focus(); } else if (content.do == 'blur') { this.listbox.blur(); } } } export class RadioButtonsModel extends SelectionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'RadioButtonsModel', _view_name: 'RadioButtonsView', tooltips: [], icons: [], button_style: '', orientation: 'vertical', }; } } export class RadioButtonsView extends DescriptionView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-radio'); this.container = document.createElement('div'); this.el.appendChild(this.container); this.container.classList.add('widget-radio-box'); this.update(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { if (this.model.get('orientation') === 'vertical') { this.container.classList.remove('widget-radio-box-horizontal'); this.container.classList.add('widget-radio-box-vertical'); } else { this.container.classList.remove('widget-radio-box-vertical'); this.container.classList.add('widget-radio-box-horizontal'); } const items: string[] = this.model.get('_options_labels'); const radios = Array.from( this.container.querySelectorAll('input[type="radio"]') ).map((x) => x.value); let stale = items.length !== radios.length; if (!stale) { for (let i = 0, len = items.length; i < len; ++i) { if (radios[i] !== items[i]) { stale = true; break; } } } if (stale && (options === undefined || options.updated_view !== this)) { // Add items to the DOM. this.container.textContent = ''; items.forEach((item: any, index: number) => { const label = document.createElement('label'); label.textContent = item; this.container.appendChild(label); const radio = document.createElement('input'); radio.setAttribute('type', 'radio'); radio.value = index.toString(); radio.setAttribute('data-value', encodeURIComponent(item)); label.appendChild(radio); }); } items.forEach((item: any, index: number) => { const item_query = 'input[data-value="' + encodeURIComponent(item) + '"]'; const radio = this.container.querySelectorAll(item_query); if (radio.length > 0) { const radio_el = radio[0]; radio_el.checked = this.model.get('index') === index; radio_el.disabled = this.model.get('disabled'); } }); // Schedule adjustPadding asynchronously to // allow dom elements to be created properly setTimeout(this.adjustPadding, 0, this); return super.update(options); } /** * Adjust Padding to Multiple of Line Height * * Adjust margins so that the overall height * is a multiple of a single line height. * * This widget needs it because radio options * are spaced tighter than individual widgets * yet we would like the full widget line up properly * when displayed side-by-side with other widgets. */ adjustPadding(e: this): void { // Vertical margins on a widget const elStyles = window.getComputedStyle(e.el); const margins = parseInt(elStyles.marginTop, 10) + parseInt(elStyles.marginBottom, 10); // Total spaces taken by a single-line widget const lineHeight = e.label.offsetHeight + margins; // Current adjustment value on this widget const cStyles = window.getComputedStyle(e.container); const containerMargin = parseInt(cStyles.marginBottom, 10); // How far we are off from a multiple of single windget lines const diff = (e.el.offsetHeight + margins - containerMargin) % lineHeight; // Apply the new adjustment const extraMargin = diff === 0 ? 0 : lineHeight - diff; e.container.style.marginBottom = extraMargin + 'px'; } events(): { [e: string]: string } { return { 'click input[type="radio"]': '_handle_click', }; } /** * Handle when a value is clicked. * * Calling model.set will trigger all of the other views of the * model to update. */ _handle_click(event: Event): void { const target = event.target as HTMLInputElement; this.model.set('index', parseInt(target.value, 10), { updated_view: this }); this.touch(); } /** * Handle message sent to the front end. */ handle_message(content: any): void { if (content.do == 'focus') { const firstItem = this.container.firstElementChild as HTMLElement; firstItem.focus(); } else if (content.do == 'blur') { for (let i = 0; i < this.container.children.length; i++) { const item = this.container.children[i] as HTMLElement; item.blur(); } } } container: HTMLDivElement; } export class ToggleButtonsStyleModel extends DescriptionStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ToggleButtonsStyleModel', }; } public static styleProperties = { ...DescriptionStyleModel.styleProperties, button_width: { selector: '.widget-toggle-button', attribute: 'width', default: null as any, }, font_weight: { selector: '.widget-toggle-button', attribute: 'font-weight', default: '', }, }; } export class ToggleButtonsModel extends SelectionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ToggleButtonsModel', _view_name: 'ToggleButtonsView', }; } } export class ToggleButtonsView extends DescriptionView { initialize(options: WidgetView.IInitializeParameters): void { this._css_state = {}; super.initialize(options); this.listenTo(this.model, 'change:button_style', this.update_button_style); } /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-toggle-buttons'); this.buttongroup = document.createElement('div'); this.el.appendChild(this.buttongroup); this.update(); this.set_button_style(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { const items: string[] = this.model.get('_options_labels'); const icons = this.model.get('icons') || []; const previous_icons = this.model.previous('icons') || []; const previous_bstyle = (ToggleButtonsView.classMap as any)[ this.model.previous('button_style') ] || ''; const tooltips = this.model.get('tooltips') || []; const disabled = this.model.get('disabled'); const buttons = this.buttongroup.querySelectorAll('button'); const values = Array.from(buttons).map((x) => x.value); let stale = false; for (let i = 0, len = items.length; i < len; ++i) { if (values[i] !== items[i] || icons[i] !== previous_icons[i]) { stale = true; break; } } if (stale && (options === undefined || options.updated_view !== this)) { // Add items to the DOM. this.buttongroup.textContent = ''; items.forEach((item: any, index: number) => { let item_html; const empty = item.trim().length === 0 && (!icons[index] || icons[index].trim().length === 0); if (empty) { item_html = ' '; } else { item_html = utils.escape_html(item); } const icon = document.createElement('i'); const button = document.createElement('button'); if (icons[index]) { icon.className = 'fa fa-' + icons[index]; } button.setAttribute('type', 'button'); button.className = 'widget-toggle-button jupyter-button'; if (previous_bstyle) { button.classList.add(previous_bstyle); } button.innerHTML = item_html; button.setAttribute('data-value', encodeURIComponent(item)); button.setAttribute('value', index.toString()); button.appendChild(icon); button.disabled = disabled; if (tooltips[index]) { button.setAttribute('title', tooltips[index]); } this.update_style_traits(button); this.buttongroup.appendChild(button); }); } // Select active button. items.forEach((item: any, index: number) => { const item_query = '[data-value="' + encodeURIComponent(item) + '"]'; const button = this.buttongroup.querySelector(item_query)!; if (this.model.get('index') === index) { button.classList.add('mod-active'); } else { button.classList.remove('mod-active'); } }); this.stylePromise.then(function (style) { if (style) { style.style(); } }); return super.update(options); } update_style_traits(button?: HTMLButtonElement): void { for (const name in this._css_state as string[]) { if (Object.prototype.hasOwnProperty.call(this._css_state, 'name')) { if (name === 'margin') { this.buttongroup.style[name] = this._css_state[name]; } else if (name !== 'width') { if (button) { button.style[name] = this._css_state[name]; } else { const buttons = this.buttongroup.querySelectorAll('button'); if (buttons.length) { buttons[0].style[name] = this._css_state[name]; } } } } } } update_button_style(): void { const buttons = this.buttongroup.querySelectorAll('button'); for (let i = 0; i < buttons.length; i++) { this.update_mapped_classes( ToggleButtonsView.classMap, 'button_style', buttons[i] ); } } set_button_style(): void { const buttons = this.buttongroup.querySelectorAll('button'); for (let i = 0; i < buttons.length; i++) { this.set_mapped_classes( ToggleButtonsView.classMap, 'button_style', buttons[i] ); } } events(): { [e: string]: string } { return { 'click button': '_handle_click', }; } /** * Handle when a value is clicked. * * Calling model.set will trigger all of the other views of the * model to update. */ _handle_click(event: Event): void { const target = event.target as HTMLButtonElement; this.model.set('index', parseInt(target.value, 10), { updated_view: this }); this.touch(); // We also send a clicked event, since the value is only set if it changed. // See https://github.com/jupyter-widgets/ipywidgets/issues/763 this.send({ event: 'click' }); } private _css_state: any; buttongroup: HTMLDivElement; } export namespace ToggleButtonsView { export const classMap = { primary: ['mod-primary'], success: ['mod-success'], info: ['mod-info'], warning: ['mod-warning'], danger: ['mod-danger'], }; } export class SelectionSliderModel extends SelectionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'SelectionSliderModel', _view_name: 'SelectionSliderView', orientation: 'horizontal', readout: true, continuous_update: true, }; } } export class SelectionSliderView extends DescriptionView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-hslider'); this.el.classList.add('widget-slider'); // Creating noUiSlider instance and scaffolding this.$slider = document.createElement('div'); this.$slider.classList.add('slider'); // Put the slider in a container this.slider_container = document.createElement('div'); this.slider_container.classList.add('slider-container'); this.slider_container.appendChild(this.$slider); this.el.appendChild(this.slider_container); this.readout = document.createElement('div'); this.el.appendChild(this.readout); this.readout.classList.add('widget-readout'); this.readout.style.display = 'none'; // noUiSlider constructor and event handlers this.createSlider(); // Event handlers this.model.on('change:orientation', this.regenSlider, this); this.model.on('change:index', this.updateSliderValue, this); // Set defaults. this.update(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: { updated_view?: WidgetView }): void { if (options?.updated_view !== this) { this.updateSliderOptions(this.model); const orientation = this.model.get('orientation'); const disabled = this.model.get('disabled'); if (disabled) { this.readout.contentEditable = 'false'; this.$slider.setAttribute('disabled', true); } else { this.readout.contentEditable = 'true'; this.$slider.removeAttribute('disabled'); } // Use the right CSS classes for vertical & horizontal sliders if (orientation === 'vertical') { this.el.classList.remove('widget-hslider'); this.el.classList.remove('widget-inline-hbox'); this.el.classList.add('widget-vslider'); this.el.classList.add('widget-inline-vbox'); } else { this.el.classList.remove('widget-vslider'); this.el.classList.remove('widget-inline-vbox'); this.el.classList.add('widget-hslider'); this.el.classList.add('widget-inline-hbox'); } const readout = this.model.get('readout'); if (readout) { // this.$readout.show(); this.readout.style.display = ''; } else { // this.$readout.hide(); this.readout.style.display = 'none'; } this.updateSelection(); } return super.update(options); } regenSlider(e: any): void { this.$slider.noUiSlider.destroy(); this.createSlider(); } createSlider(): void { const labels = this.model.get('_options_labels'); const min = 0; const max = labels.length - 1; const orientation = this.model.get('orientation'); const behavior = this.model.get('behavior'); noUiSlider.create(this.$slider, { start: this.model.get('index'), connect: true, behaviour: behavior, range: { min: min, max: max, }, step: 1, animate: false, orientation: orientation, direction: orientation === 'horizontal' ? 'ltr' : 'rtl', format: { from: (value: string): number => Number(value), to: (value: number): number => Math.round(value), }, }); // Using noUiSlider's 'update' and 'change' events. // See reference: https://refreshless.com/nouislider/events-callbacks/ this.$slider.noUiSlider.on('update', (values: number[], handle: number) => { this.handleSliderUpdateEvent(values, handle); }); this.$slider.noUiSlider.on('change', (values: number[], handle: number) => { this.handleSliderChangeEvent(values, handle); }); } events(): { [e: string]: string } { return { slide: 'handleSliderChange', slidestop: 'handleSliderChanged', }; } updateSelection(): void { const index = this.model.get('index'); this.updateReadout(index); } updateReadout(index: any): void { const value = this.model.get('_options_labels')[index]; this.readout.textContent = value; } /** * Called whilst the slider is dragged, tapped or moved by the arrow keys. */ handleSliderUpdateEvent(values: number[], handle: number): void { const index = values[0]; this.updateReadout(index); // Only persist the value while sliding if the continuous_update // trait is set to true. if (this.model.get('continuous_update')) { this.handleSliderChanged(values, handle); } } /** * Called when the slider handle is released after dragging, * or by tapping or moving by the arrow keys. */ handleSliderChangeEvent(values: number[], handle: number): void { const index = values[0]; this.updateReadout(index); this.handleSliderChanged(values, handle); } /** * Called when the slider value has changed. * * Calling model.set will trigger all of the other views of the * model to update. */ handleSliderChanged(values: number[], handle: number): void { const index = values[0]; this.updateReadout(index); this.model.set('index', index, { updated_view: this }); this.touch(); } updateSliderOptions(e: any): void { const labels = this.model.get('_options_labels'); const min = 0; const max = labels.length - 1; this.$slider.noUiSlider.updateOptions({ start: this.model.get('index'), range: { min: min, max: max, }, step: 1, }); } updateSliderValue(model: any, _: any, options: any): void { if (options.updated_view === this) { return; } const prev_index = this.$slider.noUiSlider.get(); const index = this.model.get('index'); if (prev_index !== index) { this.$slider.noUiSlider.set(index); } } $slider: any; slider_container: HTMLDivElement; readout: HTMLDivElement; } export class MultipleSelectionModel extends SelectionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'MultipleSelectionModel' }; } } export class SelectMultipleModel extends MultipleSelectionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'SelectMultipleModel', _view_name: 'SelectMultipleView', rows: null, }; } } export class SelectMultipleView extends SelectView { /** * Public constructor. */ initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.listbox.multiple = true; } /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-select-multiple'); } updateSelection(): void { const selected = this.model.get('index') || []; const listboxOptions = this.listbox.options; // Clear the selection this.listbox.selectedIndex = -1; // Select the appropriate options selected.forEach((i: number) => { listboxOptions[i].selected = true; }); } /** * Handle when a new value is selected. */ _handle_change(): void { const index = Array.prototype.map.call( this.listbox.selectedOptions || [], function (option: HTMLOptionElement) { return option.index; } ); this.model.set('index', index, { updated_view: this }); this.touch(); } } export class SelectionRangeSliderModel extends MultipleSelectionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'SelectionSliderModel', _view_name: 'SelectionSliderView', orientation: 'horizontal', readout: true, continuous_update: true, }; } } export class SelectionRangeSliderView extends SelectionSliderView { /** * Called when view is rendered. */ render(): void { super.render(); } updateSelection(index?: number[]): void { index = index || (this.model.get('index') as number[]); this.updateReadout(index); } updateReadout(index: number[]): void { const labels = this.model.get('_options_labels'); const minValue = labels[index[0]]; const maxValue = labels[index[1]]; this.readout.textContent = `${minValue}-${maxValue}`; } /** * Called when the slider value is changing. */ handleSliderUpdateEvent(values: number[], handle: any): void { const intValues = values.map(Math.trunc); this.updateReadout(intValues); // Only persist the value while sliding if the continuous_update // trait is set to true. if (this.model.get('continuous_update')) { this.handleSliderChanged(values, handle); } } /** * Called when the slider value has changed. * * Calling model.set will trigger all of the other views of the * model to update. */ handleSliderChanged(values: number[], handle: number): void { const intValues = values.map(Math.round); this.updateReadout(intValues); // set index to a snapshot of the values passed by the slider this.model.set('index', intValues.slice(), { updated_view: this }); this.touch(); } updateSliderValue(model: any, _: any, options: any): void { if (options.updated_view === this) { return; } // Rounding values to avoid floating point precision error for the if statement below const prev_index = this.$slider.noUiSlider.get().map(Math.round); const index = this.model.get('index').map(Math.round); if (prev_index[0] !== index[0] || prev_index[1] !== index[1]) { this.$slider.noUiSlider.set(index); } } $slider: any; slider_container: HTMLDivElement; readout: HTMLDivElement; } ipywidgets-8.1.5/packages/controls/src/widget_selectioncontainer.ts000066400000000000000000000314541466162644600257560ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DOMWidgetView, ViewList, JupyterLuminoWidget, WidgetModel, reject, WidgetView, } from '@jupyter-widgets/base'; import { BoxModel, BoxView } from './widget_box'; import { TabBar } from '@lumino/widgets'; import { TabPanel } from './lumino/tabpanel'; import { Accordion } from './lumino/accordion'; import { Widget } from '@lumino/widgets'; import { each, ArrayExt } from '@lumino/algorithm'; import { Message, MessageLoop } from '@lumino/messaging'; import $ from 'jquery'; export class SelectionContainerModel extends BoxModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'SelectionContainerModel', selected_index: null, titles: [], }; } } export class AccordionModel extends SelectionContainerModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'AccordionModel', _view_name: 'AccordionView', }; } } // We implement our own tab widget since Phoshpor's TabPanel uses an absolute // positioning BoxLayout, but we want a more an html/css-based Panel layout. export class JupyterLuminoAccordionWidget extends Accordion { constructor(options: JupyterLuminoWidget.IOptions & Accordion.IOptions) { const view = options.view; delete (options as any).view; super(options); this._view = view; } /** * Process the Lumino message. * * Any custom Lumino widget used inside a Jupyter widget should override * the processMessage function like this. */ processMessage(msg: Message): void { super.processMessage(msg); this._view?.processLuminoMessage(msg); } /** * Dispose the widget. * * This causes the view to be destroyed as well with 'remove' */ dispose(): void { if (this.isDisposed) { return; } super.dispose(); this._view.remove(); this._view = null!; } private _view: DOMWidgetView; } export class AccordionView extends DOMWidgetView { _createElement(tagName: string): HTMLElement { this.luminoWidget = new JupyterLuminoAccordionWidget({ view: this }); return this.luminoWidget.node; } _setElement(el: HTMLElement): void { if (this.el || el !== this.luminoWidget.node) { // Accordions don't allow setting the element beyond the initial creation. throw new Error('Cannot reset the DOM element.'); } this.el = this.luminoWidget.node; this.$el = $(this.luminoWidget.node); } initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.children_views = new ViewList( this.add_child_view, this.remove_child_view, this ); this.listenTo(this.model, 'change:children', () => this.updateChildren()); this.listenTo(this.model, 'change:selected_index', () => this.update_selected_index() ); this.listenTo(this.model, 'change:titles', () => this.update_titles()); } /** * Called when view is rendered. */ render(): void { super.render(); const accordion = this.luminoWidget; accordion.addClass('jupyter-widgets'); accordion.addClass('widget-accordion'); accordion.addClass('widget-container'); accordion.selection.selectionChanged.connect((sender) => { if (!this.updatingChildren) { this.model.set('selected_index', accordion.selection.index); this.touch(); } }); this.children_views?.update(this.model.get('children')); this.update_titles(); this.update_selected_index(); } /** * Update children */ updateChildren(): void { // While we are updating, the index may not be valid, so deselect the // tabs before updating so we don't get spurious changes in the index, // which would then set off another sync cycle. this.updatingChildren = true; this.luminoWidget.selection.index = null; this.children_views?.update(this.model.get('children')); this.update_selected_index(); this.updatingChildren = false; } /** * Set header titles */ update_titles(): void { const collapsed = this.luminoWidget.collapseWidgets; const titles = this.model.get('titles'); for (let i = 0; i < collapsed.length; i++) { if (titles[i] !== void 0) { collapsed[i].widget.title.label = titles[i]; } } } /** * Make the rendering and selected index consistent. */ update_selected_index(): void { this.luminoWidget.selection.index = this.model.get('selected_index'); } /** * Called when a child is removed from children list. */ remove_child_view(view: DOMWidgetView): void { this.luminoWidget.removeWidget(view.luminoWidget); view.remove(); } /** * Called when a child is added to children list. */ add_child_view(model: WidgetModel, index: number): Promise { // Placeholder widget to keep our position in the tab panel while we create the view. const accordion = this.luminoWidget; const placeholder = new Widget(); placeholder.title.label = this.model.get('titles')[index] || ''; accordion.addWidget(placeholder); return this.create_child_view(model) .then((view: DOMWidgetView) => { const widget = view.luminoWidget; widget.title.label = placeholder.title.label; const collapse = accordion.collapseWidgets[accordion.indexOf(placeholder)]; collapse.widget = widget; placeholder.dispose(); return view; }) .catch(reject('Could not add child view to box', true)); } remove(): void { this.children_views = null; super.remove(); } children_views: ViewList | null; luminoWidget: Accordion; updatingChildren: boolean; } export class TabModel extends SelectionContainerModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'TabModel', _view_name: 'TabView', }; } } // We implement our own tab widget since Phoshpor's TabPanel uses an absolute // positioning BoxLayout, but we want a more an html/css-based Panel layout. export class JupyterLuminoTabPanelWidget extends TabPanel { constructor(options: JupyterLuminoWidget.IOptions & TabPanel.IOptions) { const view = options.view; delete (options as any).view; super(options); this._view = view; // We want the view's messages to be the messages the tabContents panel // gets. MessageLoop.installMessageHook(this.tabContents, (handler, msg) => { // There may be times when we want the view's handler to be called // *after* the message has been processed by the widget, in which // case we'll need to revisit using a message hook. this._view.processLuminoMessage(msg); return true; }); } /** * Dispose the widget. * * This causes the view to be destroyed as well with 'remove' */ dispose(): void { if (this.isDisposed) { return; } super.dispose(); this._view.remove(); this._view = null!; } private _view: DOMWidgetView; } export class TabView extends DOMWidgetView { _createElement(tagName: string): HTMLElement { this.luminoWidget = new JupyterLuminoTabPanelWidget({ view: this, }); return this.luminoWidget.node; } _setElement(el: HTMLElement): void { if (this.el || el !== this.luminoWidget.node) { // TabViews don't allow setting the element beyond the initial creation. throw new Error('Cannot reset the DOM element.'); } this.el = this.luminoWidget.node; this.$el = $(this.luminoWidget.node); } /** * Public constructor. */ initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.childrenViews = new ViewList( this.addChildView, (view) => { view.remove(); }, this ); this.listenTo(this.model, 'change:children', () => this.updateTabs()); this.listenTo(this.model, 'change:titles', () => this.updateTitles()); } /** * Called when view is rendered. */ render(): void { super.render(); const tabs = this.luminoWidget; tabs.addClass('jupyter-widgets'); tabs.addClass('widget-container'); tabs.addClass('jupyter-widget-tab'); tabs.addClass('widget-tab'); tabs.tabsMovable = true; tabs.tabBar.insertBehavior = 'none'; // needed for insert behavior, see below. tabs.tabBar.currentChanged.connect(this._onTabChanged, this); tabs.tabBar.tabMoved.connect(this._onTabMoved, this); tabs.tabBar.addClass('widget-tab-bar'); tabs.tabContents.addClass('widget-tab-contents'); // TODO: expose this option in python tabs.tabBar.tabsMovable = false; this.updateTabs(); this.update(); } /** * Render tab views based on the current model's children. */ updateTabs(): void { // While we are updating, the index may not be valid, so deselect the // tabs before updating so we don't get spurious changes in the index, // which would then set off another sync cycle. this.updatingTabs = true; this.luminoWidget.currentIndex = null; this.childrenViews?.update(this.model.get('children')); this.luminoWidget.currentIndex = this.model.get('selected_index'); this.updatingTabs = false; } /** * Called when a child is added to children list. */ addChildView(model: WidgetModel, index: number): Promise { // Placeholder widget to keep our position in the tab panel while we create the view. const label = this.model.get('titles')[index] || ''; const tabs = this.luminoWidget; const placeholder = new Widget(); placeholder.title.label = label; tabs.addWidget(placeholder); return this.create_child_view(model) .then((view: DOMWidgetView) => { const widget = view.luminoWidget; widget.title.label = placeholder.title.label; widget.title.closable = false; const i = ArrayExt.firstIndexOf(tabs.widgets, placeholder); // insert after placeholder so that if placeholder is selected, the // real widget will be selected now (this depends on the tab bar // insert behavior) tabs.insertWidget(i + 1, widget); placeholder.dispose(); return view; }) .catch(reject('Could not add child view to box', true)); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(): void { // Update the selected index in the overall update method because it // should be run after the tabs have been updated. Otherwise the // selected index may not be a valid tab in the tab bar. this.updateSelectedIndex(); return super.update(); } /** * Updates the tab page titles. */ updateTitles(): void { const titles = this.model.get('titles') || []; each(this.luminoWidget.widgets, (widget, i) => { widget.title.label = titles[i] || ''; }); } /** * Updates the selected index. */ updateSelectedIndex(): void { this.luminoWidget.currentIndex = this.model.get('selected_index'); } remove(): void { this.childrenViews = null; super.remove(); } _onTabChanged( sender: TabBar, args: TabBar.ICurrentChangedArgs ): void { if (!this.updatingTabs) { const i = args.currentIndex; this.model.set('selected_index', i === -1 ? null : i); this.touch(); } } /** * Handle the `tabMoved` signal from the tab bar. */ _onTabMoved( sender: TabBar, args: TabBar.ITabMovedArgs ): void { const children = this.model.get('children').slice(); ArrayExt.move(children, args.fromIndex, args.toIndex); this.model.set('children', children); this.touch(); } updatingTabs = false; childrenViews: ViewList | null; luminoWidget: JupyterLuminoTabPanelWidget; } export class StackModel extends SelectionContainerModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'StackModel', _view_name: 'StackView', }; } } export class StackView extends BoxView { initialize(parameters: WidgetView.IInitializeParameters): void { super.initialize(parameters); this.listenTo(this.model, 'change:selected_index', this.update_children); } update_children(): void { let child: any[]; if (this.model.get('selected_index') === null) { child = []; } else { child = [this.model.get('children')[this.model.get('selected_index')]]; } this.children_views?.update(child).then((views: DOMWidgetView[]) => { // Notify all children that their sizes may have changed. views.forEach((view) => { MessageLoop.postMessage( view.luminoWidget, Widget.ResizeMessage.UnknownSize ); }); }); } } ipywidgets-8.1.5/packages/controls/src/widget_string.ts000066400000000000000000000421511466162644600233700ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { CoreDescriptionModel } from './widget_core'; import { DescriptionStyleModel, DescriptionView } from './widget_description'; import { uuid } from './utils'; import { JUPYTER_CONTROLS_VERSION } from './version'; /** * Class name for a combobox with an invalid value. */ const INVALID_VALUE_CLASS = 'jpwidgets-invalidComboValue'; class StringStyleModel extends DescriptionStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'StringStyleModel', _model_module: '@jupyter-widgets/controls', _model_module_version: JUPYTER_CONTROLS_VERSION, }; } public static styleProperties = { ...DescriptionStyleModel.styleProperties, background: { selector: '', attribute: 'background', default: null as any, }, font_size: { selector: '', attribute: 'font-size', default: '', }, text_color: { selector: '', attribute: 'color', default: '', }, }; } export class HTMLStyleModel extends StringStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'HTMLStyleModel', _model_module: '@jupyter-widgets/controls', _model_module_version: JUPYTER_CONTROLS_VERSION, }; } public static styleProperties = { ...StringStyleModel.styleProperties, }; } export class HTMLMathStyleModel extends StringStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'HTMLMathStyleModel', _model_module: '@jupyter-widgets/controls', _model_module_version: JUPYTER_CONTROLS_VERSION, }; } public static styleProperties = { ...StringStyleModel.styleProperties, }; } export class LabelStyleModel extends StringStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'LabelStyleModel', _model_module: '@jupyter-widgets/controls', _model_module_version: JUPYTER_CONTROLS_VERSION, }; } public static styleProperties = { ...StringStyleModel.styleProperties, font_family: { selector: '', attribute: 'font-family', default: '', }, font_style: { selector: '', attribute: 'font-style', default: '', }, font_variant: { selector: '', attribute: 'font-variant', default: '', }, font_weight: { selector: '', attribute: 'font-weight', default: '', }, text_decoration: { selector: '', attribute: 'text-decoration', default: '', }, }; } export class TextStyleModel extends DescriptionStyleModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'TextStyleModel', _model_module: '@jupyter-widgets/controls', _model_module_version: JUPYTER_CONTROLS_VERSION, }; } public static styleProperties = { ...DescriptionStyleModel.styleProperties, background: { selector: '.widget-input', attribute: 'background', default: null as any, }, font_size: { selector: '.widget-input', attribute: 'font-size', default: '', }, text_color: { selector: '.widget-input', attribute: 'color', default: '', }, }; } export class StringModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), value: '', disabled: false, placeholder: '\u200b', _model_name: 'StringModel', }; } } export class StringView extends DescriptionView { /** * Called when view is rendered. */ render(): void { super.render(); // Incl. setting some defaults. this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ content: HTMLDivElement; } export class HTMLModel extends StringModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'HTMLView', _model_name: 'HTMLModel', }; } } export class HTMLView extends StringView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-html'); this.content = document.createElement('div'); this.content.classList.add('widget-html-content'); this.el.appendChild(this.content); this.update(); // Set defaults. } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(): void { this.content.innerHTML = this.model.get('value'); return super.update(); } /** * Handle message sent to the front end. */ handle_message(content: any): void { if (content.do === 'focus') { this.content.focus(); } else if (content.do === 'blur') { this.content.blur(); } } content: HTMLDivElement; } export class HTMLMathModel extends StringModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'HTMLMathView', _model_name: 'HTMLMathModel', }; } } export class HTMLMathView extends StringView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-htmlmath'); this.content = document.createElement('div'); this.content.classList.add('widget-htmlmath-content'); this.el.appendChild(this.content); this.update(); // Set defaults. } /** * Update the contents of this view */ update(): void { this.content.innerHTML = this.model.get('value'); this.typeset(this.content); return super.update(); } /** * Handle message sent to the front end. */ handle_message(content: any): void { if (content.do === 'focus') { this.content.focus(); } else if (content.do === 'blur') { this.content.blur(); } } content: HTMLDivElement; } export class LabelModel extends StringModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'LabelView', _model_name: 'LabelModel', }; } } export class LabelView extends StringView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-label'); this.update(); // Set defaults. } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(): void { this.typeset(this.el, this.model.get('value')); return super.update(); } } export class TextareaModel extends StringModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'TextareaView', _model_name: 'TextareaModel', rows: null, continuous_update: true, }; } } export class TextareaView extends StringView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-textarea'); this.textbox = document.createElement('textarea'); this.textbox.setAttribute('rows', '5'); this.textbox.id = this.label.htmlFor = uuid(); this.textbox.classList.add('widget-input'); this.el.appendChild(this.textbox); this.update(); // Set defaults. this.listenTo(this.model, 'change:placeholder', (model, value, options) => { this.update_placeholder(value); }); this.update_placeholder(); this.updateTooltip(); } update_placeholder(value?: string): void { const v = value || this.model.get('placeholder'); this.textbox.setAttribute('placeholder', v.toString()); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(options?: any): void { if (options === undefined || options.updated_view !== this) { this.textbox.value = this.model.get('value'); let rows = this.model.get('rows'); if (rows === null) { rows = ''; } this.textbox.setAttribute('rows', rows); this.textbox.disabled = this.model.get('disabled'); } this.updateTabindex(); this.updateTooltip(); return super.update(); } updateTabindex(): void { if (!this.textbox) { return; // we might be constructing the parent } const tabbable = this.model.get('tabbable'); if (tabbable === true) { this.textbox.setAttribute('tabIndex', '0'); } else if (tabbable === false) { this.textbox.setAttribute('tabIndex', '-1'); } else if (tabbable === null) { this.textbox.removeAttribute('tabIndex'); } } updateTooltip(): void { if (!this.textbox) return; // we might be constructing the parent const title = this.model.get('tooltip'); if (!title) { this.textbox.removeAttribute('title'); } else if (this.model.get('description').length === 0) { this.textbox.setAttribute('title', title); } } events(): { [e: string]: string } { return { 'keydown input': 'handleKeyDown', 'keypress input': 'handleKeypress', 'input textarea': 'handleChanging', 'change textarea': 'handleChanged', }; } /** * Handle key down * * Stop propagation so the event isn't sent to the application. */ handleKeyDown(e: Event): void { e.stopPropagation(); } /** * Handles key press * * Stop propagation so the keypress isn't sent to the application. */ handleKeypress(e: Event): void { e.stopPropagation(); } /** * Triggered on input change */ handleChanging(e: Event): void { if (this.model.get('continuous_update')) { this.handleChanged(e); } } /** * Sync the value with the kernel. * * @param e Event */ handleChanged(e: Event): void { const target = e.target as HTMLTextAreaElement; this.model.set('value', target.value, { updated_view: this }); this.touch(); } /** * Handle message sent to the front end. */ handle_message(content: any): void { if (content.do === 'focus') { this.textbox.focus(); } else if (content.do === 'blur') { this.textbox.blur(); } } textbox: HTMLTextAreaElement; } export class TextModel extends StringModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'TextView', _model_name: 'TextModel', continuous_update: true, }; } } export class TextView extends StringView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('widget-text'); this.textbox = document.createElement('input'); this.textbox.setAttribute('type', this.inputType); this.textbox.id = this.label.htmlFor = uuid(); this.textbox.classList.add('widget-input'); this.el.appendChild(this.textbox); this.update(); // Set defaults. this.listenTo(this.model, 'change:placeholder', (model, value, options) => { this.update_placeholder(value); }); this.update_placeholder(); this.updateTabindex(); this.updateTooltip(); } update_placeholder(value?: string): void { this.textbox.setAttribute( 'placeholder', value || this.model.get('placeholder') ); } updateTabindex(): void { if (!this.textbox) { return; // we might be constructing the parent } const tabbable = this.model.get('tabbable'); if (tabbable === true) { this.textbox.setAttribute('tabIndex', '0'); } else if (tabbable === false) { this.textbox.setAttribute('tabIndex', '-1'); } else if (tabbable === null) { this.textbox.removeAttribute('tabIndex'); } } updateTooltip(): void { if (!this.textbox) return; // we might be constructing the parent const title = this.model.get('tooltip'); if (!title) { this.textbox.removeAttribute('title'); } else if (this.model.get('description').length === 0) { this.textbox.setAttribute('title', title); } } update(options?: any): void { /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ if (options === undefined || options.updated_view !== this) { if (this.textbox.value !== this.model.get('value')) { this.textbox.value = this.model.get('value'); } this.textbox.disabled = this.model.get('disabled'); } return super.update(); } events(): { [e: string]: string } { return { 'keydown input': 'handleKeyDown', 'keypress input': 'handleKeypress', 'input input': 'handleChanging', 'change input': 'handleChanged', }; } /** * Handle key down * * Stop propagation so the keypress isn't sent to the application. */ handleKeyDown(e: Event): void { e.stopPropagation(); } /** * Handles text submission */ handleKeypress(e: KeyboardEvent): void { e.stopPropagation(); // The submit message is deprecated in widgets 7 if (e.keyCode === 13) { // Return key this.send({ event: 'submit' }); } } /** * Handles user input. * * Calling model.set will trigger all of the other views of the * model to update. */ handleChanging(e: Event): void { if (this.model.get('continuous_update')) { this.handleChanged(e); } } /** * Handles user input. * * Calling model.set will trigger all of the other views of the * model to update. */ handleChanged(e: Event): void { const target = e.target as HTMLInputElement; this.model.set('value', target.value, { updated_view: this }); this.touch(); } /** * Handle message sent to the front end. */ handle_message(content: any): void { if (content.do === 'focus') { this.textbox.focus(); } else if (content.do === 'blur') { this.textbox.blur(); } } protected readonly inputType: string = 'text'; textbox: HTMLInputElement; } export class PasswordModel extends TextModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'PasswordView', _model_name: 'PasswordModel', }; } } export class PasswordView extends TextView { protected readonly inputType: string = 'password'; } /** * Combobox widget model class. */ export class ComboboxModel extends TextModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'ComboboxModel', _view_name: 'ComboboxView', options: [], ensure_options: false, }; } } /** * Combobox widget view class. */ export class ComboboxView extends TextView { render(): void { this.datalist = document.createElement('datalist'); this.datalist.id = uuid(); super.render(); this.textbox.setAttribute('list', this.datalist.id); this.el.appendChild(this.datalist); this.updateTooltip(); } update(options?: any): void { super.update(options); if (!this.datalist) { return; } const valid = this.isValid(this.model.get('value')); this.highlightValidState(valid); // Check if we need to update options if ( (options !== undefined && options.updated_view) || (!this.model.hasChanged('options') && !this.isInitialRender) ) { // Value update only, keep current options return; } this.isInitialRender = false; const opts = this.model.get('options') as string[]; const optionFragment = document.createDocumentFragment(); for (const v of opts) { const o = document.createElement('option'); o.value = v; optionFragment.appendChild(o); } this.datalist.replaceChildren(...optionFragment.children); } isValid(value: string): boolean { if (true === this.model.get('ensure_option')) { const options = this.model.get('options') as string[]; if (options.indexOf(value) === -1) { return false; } } return true; } handleChanging(e: KeyboardEvent): void { // Override to validate value const target = e.target as HTMLInputElement; const valid = this.isValid(target.value); this.highlightValidState(valid); if (valid) { super.handleChanging(e); } } handleChanged(e: KeyboardEvent): void { // Override to validate value const target = e.target as HTMLInputElement; const valid = this.isValid(target.value); this.highlightValidState(valid); if (valid) { super.handleChanged(e); } } /** * Handle message sent to the front end. */ handle_message(content: any): void { if (content.do === 'focus') { this.textbox.focus(); } else if (content.do === 'blur') { this.textbox.blur(); } } highlightValidState(valid: boolean): void { this.textbox.classList.toggle(INVALID_VALUE_CLASS, !valid); } datalist: HTMLDataListElement | undefined; isInitialRender = true; } ipywidgets-8.1.5/packages/controls/src/widget_tagsinput.ts000066400000000000000000000527121466162644600241040ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as d3Color from 'd3-color'; import * as d3Format from 'd3-format'; import { CoreDOMWidgetModel } from './widget_core'; import { DOMWidgetView, Dict, uuid } from '@jupyter-widgets/base'; /** * Returns a new string after removing any leading and trailing whitespaces. * The original string is left unchanged. */ function trim(value: string): string { return value.replace(/^\s+|\s+$/g, ''); } /** * Clamp a number between min and max and return the result. */ function clamp(value: number, min: number, max: number): number { return Math.min(Math.max(value, min), max); } /** * Remove children from an HTMLElement */ function removeChildren(el: HTMLElement): void { while (el.firstChild) { el.removeChild(el.firstChild); } } /** * Selection class which keeps track on selected indices. */ class Selection { constructor(start: number, dx: number, max: number) { this.start = start; this.dx = dx; this.max = max; } /** * Check if a given index is currently selected. */ isSelected(index: number): boolean { let min: number; let max: number; if (this.dx >= 0) { min = this.start; max = this.start + this.dx; } else { min = this.start + this.dx; max = this.start; } return min <= index && index < max; } /** * Update selection */ updateSelection(dx: number): void { this.dx += dx; if (this.start + this.dx > this.max) { this.dx = this.max - this.start; } if (this.start + this.dx < 0) { this.dx = -this.start; } } private start: number; private dx: number; private max: number; } class TagsInputBaseModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), value: [], placeholder: '\u200b', allowed_tags: null, allow_duplicates: true, }; } } abstract class TagsInputBaseView extends DOMWidgetView { /** * Called when view is rendered. */ render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('jupyter-widget-tagsinput'); this.taginputWrapper = document.createElement('div'); // The taginput is hidden until the user focuses on the widget // Unless there is no value if (this.model.get('value').length) { this.taginputWrapper.style.display = 'none'; } else { this.taginputWrapper.style.display = 'inline-block'; } this.datalistID = uuid(); this.taginput = document.createElement('input'); this.taginput.classList.add('jupyter-widget-tag'); this.taginput.classList.add('jupyter-widget-taginput'); this.taginput.setAttribute('list', this.datalistID); this.taginput.setAttribute('type', 'text'); this.autocompleteList = document.createElement('datalist'); this.autocompleteList.id = this.datalistID; this.updateAutocomplete(); this.model.on('change:allowed_tags', this.updateAutocomplete.bind(this)); this.updatePlaceholder(); this.model.on('change:placeholder', this.updatePlaceholder.bind(this)); this.taginputWrapper.classList.add('widget-text'); this.taginputWrapper.appendChild(this.taginput); this.taginputWrapper.appendChild(this.autocompleteList); this.el.onclick = this.focus.bind(this); this.el.ondrop = (event: DragEvent): void => { // Put the tag at the end of the list if there is no currently hovered tag const index = this.hoveredTagIndex == null ? this.tags.length : this.hoveredTagIndex; return this.ondrop(event, index); }; this.el.ondragover = this.ondragover.bind(this); this.taginput.onchange = this.handleValueAdded.bind(this); this.taginput.oninput = this.resizeInput.bind(this); this.taginput.onkeydown = this.handleKeyEvent.bind(this); this.taginput.onblur = this.loseFocus.bind(this); this.resizeInput(); this.inputIndex = this.model.get('value').length; this.selection = null; this.preventLoosingFocus = false; this.update(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update(): void { // Prevent hiding the input element and clearing the selection when updating everything this.preventLoosingFocus = true; removeChildren(this.el); this.tags = []; const value: Array = this.model.get('value'); this.inputIndex = value.length; for (const idx in value) { const index = parseInt(idx); const tag = this.createTag( value[index], index, this.selection != null && this.selection.isSelected(index) ); // Drag and drop tag.draggable = true; tag.ondragstart = ((index: number, value: any) => { return (event: DragEvent): void => { this.ondragstart(event, index, value, this.model.model_id); }; })(index, value[index]); tag.ondrop = ((index: number) => { return (event: DragEvent): void => { this.ondrop(event, index); }; })(index); tag.ondragover = this.ondragover.bind(this); tag.ondragenter = ((index: number) => { return (event: DragEvent): void => { this.ondragenter(event, index); }; })(index); tag.ondragend = this.ondragend.bind(this); this.tags.push(tag); this.el.appendChild(tag); } this.el.insertBefore( this.taginputWrapper, this.el.children[this.inputIndex] ); // The taginput is hidden until the user focuses on the widget // Unless there is no value if (this.model.get('value').length) { this.taginputWrapper.style.display = 'none'; } else { this.taginputWrapper.style.display = 'inline-block'; } this.preventLoosingFocus = false; return super.update(); } /** * Update the auto-completion list */ updateAutocomplete(): void { removeChildren(this.autocompleteList); const allowedTags = this.model.get('allowed_tags'); for (const tag of allowedTags) { const option = document.createElement('option'); option.value = tag; this.autocompleteList.appendChild(option); } } /** * Update the auto-completion list */ updatePlaceholder(): void { this.taginput.placeholder = this.model.get('placeholder'); this.resizeInput(); } /** * Update the tags, called when the selection has changed and we need to update the tags CSS */ updateTags(): void { const value: Array = this.model.get('value'); for (const idx in this.tags) { const index = parseInt(idx); this.updateTag( this.tags[index], value[index], index, this.selection != null && this.selection.isSelected(index) ); } } /** * Handle a new value is added from the input element */ handleValueAdded(event: Event): void { const newTagValue = trim(this.taginput.value); const tagIndex = this.inputIndex; if (newTagValue == '') { return; } this.inputIndex++; const tagAdded = this.addTag(tagIndex, newTagValue); if (tagAdded) { // Clear the input and keep focus on it allowing the user to add more tags this.taginput.value = ''; this.resizeInput(); this.focus(); } } /** * Add a new tag with a value of `tagValue` at the `index` position * Return true if the tag was correctly added, false otherwise */ addTag(index: number, tagValue: string): boolean { const value: Array = this.model.get('value'); let newTagValue: any; try { newTagValue = this.validateValue(tagValue); } catch (error) { return false; } const allowedTagValues = this.model.get('allowed_tags'); if (allowedTagValues.length && !allowedTagValues.includes(newTagValue)) { // Do nothing for now, maybe show a proper error message? return false; } if (!this.model.get('allow_duplicates') && value.includes(newTagValue)) { // Do nothing for now, maybe add an animation to highlight the tag? return false; } // Clearing the current selection before setting the new value this.selection = null; // Making a copy so that backbone sees the change, and insert the new tag const newValue = [...value]; newValue.splice(index, 0, newTagValue); this.model.set('value', newValue); this.model.save_changes(); return true; } /** * Resize the input element */ resizeInput(): void { let content: string; if (this.taginput.value.length != 0) { content = this.taginput.value; } else { content = this.model.get('placeholder'); } const size = content.length + 1; this.taginput.setAttribute('size', String(size)); } /** * Handle key events on the input element */ handleKeyEvent(event: KeyboardEvent): void { const valueLength = this.model.get('value').length; // Do nothing if the user is typing something if (this.taginput.value.length) { return; } const currentElement: number = this.inputIndex; switch (event.key) { case 'ArrowLeft': if (event.ctrlKey && event.shiftKey) { this.select(currentElement, -currentElement); } if (!event.ctrlKey && event.shiftKey) { this.select(currentElement, -1); } if (event.ctrlKey) { this.inputIndex = 0; } else { this.inputIndex--; } break; case 'ArrowRight': if (event.ctrlKey && event.shiftKey) { this.select(currentElement, valueLength - currentElement); } if (!event.ctrlKey && event.shiftKey) { this.select(currentElement, 1); } if (event.ctrlKey) { this.inputIndex = valueLength; } else { this.inputIndex++; } break; case 'Backspace': if (this.selection) { this.removeSelectedTags(); } else { this.removeTag(this.inputIndex - 1); } break; case 'Delete': if (this.selection) { this.removeSelectedTags(); } else { this.removeTag(this.inputIndex); } break; default: // Do nothing by default return; break; } // Reset selection is shift key is not pressed if (!event.shiftKey) { this.selection = null; } this.inputIndex = clamp(this.inputIndex, 0, valueLength); this.update(); this.focus(); } /** * Function that gets called when a tag with a given `value` is being dragged. */ ondragstart( event: DragEvent, index: number, tagValue: any, origin: string ): void { if (event.dataTransfer == null) { return; } event.dataTransfer.setData('index', String(index)); event.dataTransfer.setData('tagValue', String(tagValue)); event.dataTransfer.setData('origin', origin); } /** * Function that gets called when a tag has been dragged on the tag at the `index` position. */ ondrop(event: DragEvent, index: number): void { if (event.dataTransfer == null) { return; } event.preventDefault(); event.stopPropagation(); const draggedTagValue: string = event.dataTransfer.getData('tagValue'); const draggedTagindex: number = parseInt( event.dataTransfer.getData('index') ); const sameOrigin = event.dataTransfer.getData('origin') == this.model.model_id; // If something else than a tag was dropped, draggedTagindex should be NaN if (isNaN(draggedTagindex)) { return; } // If it's the same origin, the drag and drop results in a reordering if (sameOrigin) { const value: Array = this.model.get('value'); const newValue = [...value]; // If the old position is on the left of the new position, we need to re-index the new position // after removing the tag at the old position if (draggedTagindex < index) { index--; } newValue.splice(draggedTagindex, 1); // Removing at the old position newValue.splice(index, 0, draggedTagValue); // Adding at the new one this.model.set('value', newValue); this.model.save_changes(); return; } // Else we add a new tag with the given draggedTagValue this.addTag(index, draggedTagValue); } ondragover(event: DragEvent): void { // This is needed for the drag and drop to work event.preventDefault(); } ondragenter(event: DragEvent, index: number): void { if (this.hoveredTag != null && this.hoveredTag != this.tags[index]) { this.hoveredTag.style.marginLeft = '1px'; } this.hoveredTag = this.tags[index]; this.hoveredTagIndex = index; this.hoveredTag.style.marginLeft = '30px'; } ondragend(): void { if (this.hoveredTag != null) { this.hoveredTag.style.marginLeft = '1px'; } this.hoveredTag = null; this.hoveredTagIndex = null; } /** * Select tags from `start` to `start + dx` not included. */ select(start: number, dx: number): void { const valueLength = this.model.get('value').length; if (!this.selection) { this.selection = new Selection(start, dx, valueLength); } else { this.selection.updateSelection(dx); } } /** * Remove all the selected tags. */ removeSelectedTags(): void { const value: Array = [...this.model.get('value')]; const valueLength = value.length; // It is simpler to remove from right to left for (let idx = valueLength - 1; idx >= 0; idx--) { if (this.selection != null && this.selection.isSelected(idx)) { value.splice(idx, 1); // Move the input to the left if we remove a tag that is before the input if (idx < this.inputIndex) { this.inputIndex--; } } } this.model.set('value', value); this.model.save_changes(); } /** * Remove a tag given its index in the list */ removeTag(tagIndex: number): void { const value: Array = [...this.model.get('value')]; value.splice(tagIndex, 1); // Move the input to the left if we remove a tag that is before the input if (tagIndex < this.inputIndex) { this.inputIndex--; } this.model.set('value', value); this.model.save_changes(); } /** * Focus on the input element */ focus(): void { this.taginputWrapper.style.display = 'inline-block'; this.taginput.focus(); } /** * Lose focus on the input element */ loseFocus(): void { if (this.preventLoosingFocus) { return; } // Only hide the input if we have tags displayed if (this.model.get('value').length) { this.taginputWrapper.style.display = 'none'; } this.selection = null; this.updateTags(); } preinitialize() { // Must set this before the initialize method creates the element this.tagName = 'div'; } /** * Validate an input tag typed by the user, returning the correct tag type. This should be overridden in subclasses. */ validateValue(value: string): any { return value; } abstract createTag(value: any, index: number, selected: boolean): HTMLElement; abstract updateTag( tag: HTMLElement, value: any, index: number, selected: boolean ): void; el: HTMLDivElement; taginputWrapper: HTMLDivElement; taginput: HTMLInputElement; autocompleteList: HTMLDataListElement; tags: HTMLElement[]; hoveredTag: HTMLElement | null = null; hoveredTagIndex: number | null = null; datalistID: string; inputIndex: number; selection: null | Selection; preventLoosingFocus: boolean; model: TagsInputBaseModel; } export class TagsInputModel extends TagsInputBaseModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), value: [], tag_style: '', _view_name: 'TagsInputView', _model_name: 'TagsInputModel', }; } } export class TagsInputView extends TagsInputBaseView { /** * Create the string tag */ createTag(value: string, index: number, selected: boolean): HTMLDivElement { const tag = document.createElement('div'); const style: string = this.model.get('tag_style'); tag.classList.add('jupyter-widget-tag'); tag.classList.add(TagsInputView.class_map[style]); if (selected) { tag.classList.add('mod-active'); } tag.appendChild(document.createTextNode(this.getTagText(value))); const i = document.createElement('i'); i.classList.add('fa'); i.classList.add('fa-times'); i.classList.add('jupyter-widget-tag-close'); tag.appendChild(i); i.onmousedown = ((index: number) => { return (): void => { this.removeTag(index); this.loseFocus(); }; })(index); return tag; } /** * Returns the text that should be displayed in the tag element */ getTagText(value: string): string { return value; } /** * Update a given tag */ updateTag( tag: HTMLDivElement, value: any, index: number, selected: boolean ): void { if (selected) { tag.classList.add('mod-active'); } else { tag.classList.remove('mod-active'); } } model: TagsInputModel; static class_map: Dict = { primary: 'mod-primary', success: 'mod-success', info: 'mod-info', warning: 'mod-warning', danger: 'mod-danger', }; } export class ColorsInputModel extends TagsInputBaseModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), value: [], _view_name: 'ColorsInputView', _model_name: 'ColorsInputModel', }; } } export class ColorsInputView extends TagsInputBaseView { /** * Create the Color tag */ createTag(value: string, index: number, selected: boolean): HTMLDivElement { const tag = document.createElement('div'); const color = value; const darkerColor: string = d3Color.color(value)!.darker().toString(); tag.classList.add('jupyter-widget-tag'); tag.classList.add('jupyter-widget-colortag'); if (!selected) { tag.style.backgroundColor = color; } else { tag.classList.add('mod-active'); tag.style.backgroundColor = darkerColor; } const i = document.createElement('i'); i.classList.add('fa'); i.classList.add('fa-times'); i.classList.add('jupyter-widget-tag-close'); tag.appendChild(i); i.onmousedown = ((index: number) => { return (): void => { this.removeTag(index); this.loseFocus(); }; })(index); return tag; } /** * Update a given tag */ updateTag( tag: HTMLDivElement, value: any, index: number, selected: boolean ): void { const color = value; const darkerColor: string = d3Color.color(value)!.darker().toString(); if (!selected) { tag.classList.remove('mod-active'); tag.style.backgroundColor = color; } else { tag.classList.add('mod-active'); tag.style.backgroundColor = darkerColor; } } /** * Validate an input tag typed by the user, returning the correct tag type. This should be overridden in subclasses. */ validateValue(value: string): any { if (d3Color.color(value) == null) { throw value + ' is not a valid Color'; } return value; } model: ColorsInputModel; } abstract class NumbersInputModel extends TagsInputModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), min: null, max: null, }; } } abstract class NumbersInputView extends TagsInputView { render(): void { // Initialize text formatter this.model.on('change:format', () => { this.formatter = d3Format.format(this.model.get('format')); this.update(); }); this.formatter = d3Format.format(this.model.get('format')); super.render(); } /** * Returns the text that should be displayed in the tag element */ getTagText(value: string): string { return this.formatter(this.parseNumber(value)); } /** * Validate an input tag typed by the user, returning the correct tag type. This should be overridden in subclasses. */ validateValue(value: string): any { const parsed = this.parseNumber(value); const min: number | null = this.model.get('min'); const max: number | null = this.model.get('max'); if ( isNaN(parsed) || (min != null && parsed < min) || (max != null && parsed > max) ) { throw ( value + ' is not a valid number, it should be in the range [' + min + ', ' + max + ']' ); } return parsed; } abstract parseNumber(value: string): number; formatter: (value: number) => string; } export class FloatsInputModel extends NumbersInputModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'FloatsInputView', _model_name: 'FloatsInputModel', format: '.1f', }; } } export class FloatsInputView extends NumbersInputView { parseNumber(value: string): number { return parseFloat(value); } model: FloatsInputModel; } export class IntsInputModel extends NumbersInputModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _view_name: 'IntsInputView', _model_name: 'IntsInputModel', format: 'd', }; } } export class IntsInputView extends NumbersInputView { parseNumber(value: string): number { const int = parseInt(value); if (int != parseFloat(value)) { throw value + ' should be an integer'; } return int; } model: IntsInputModel; } ipywidgets-8.1.5/packages/controls/src/widget_time.ts000066400000000000000000000106051466162644600230170ustar00rootroot00000000000000// Copyright (c) Vidar Tonaas Fauske // Distributed under the terms of the Modified BSD License. import { ISerializers } from '@jupyter-widgets/base'; import { uuid } from './utils'; import { DescriptionView } from './widget_description'; import { CoreDescriptionModel } from './widget_core'; const PARSER = /(\d\d):(\d\d)(:(\d\d)(.(\d{1,3})\d*)?)?/; export interface ISerializedTime { /** * Integer hour (24H format) */ hours: number; /** * Integer minutes */ minutes: number; /** * Integer seconds */ seconds: number; /** * Millisconds */ milliseconds: number; } export function serialize_time(value: string): ISerializedTime | null { if (value === null) { return null; } else { const res = PARSER.exec(value); if (res === null) { return null; } return { hours: Math.min(23, parseInt(res[1], 10)), minutes: Math.min(59, parseInt(res[2], 10)), seconds: res[4] ? Math.min(59, parseInt(res[4], 10)) : 0, milliseconds: res[6] ? parseInt(res[6], 10) : 0, }; } } export function deserialize_time(value: ISerializedTime): string | null { if (value === null) { return null; } else { const parts = [ `${value.hours.toString().padStart(2, '0')}:${value.minutes .toString() .padStart(2, '0')}`, ]; if (value.seconds > 0 || value.milliseconds > 0) { parts.push(`:${value.seconds.toString().padStart(2, '0')}`); if (value.milliseconds > 0) { parts.push(`.${value.milliseconds.toString().padStart(3, '0')}`); } } return parts.join(''); } } export const time_serializers = { serialize: serialize_time, deserialize: deserialize_time, }; export class TimeModel extends CoreDescriptionModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: TimeModel.model_name, _view_name: TimeModel.view_name, value: null, disabled: false, min: null, max: null, step: 60, }; } static serializers: ISerializers = { ...CoreDescriptionModel.serializers, value: time_serializers, min: time_serializers, max: time_serializers, }; static model_name = 'TimeModel'; static view_name = 'TimeView'; } export class TimeView extends DescriptionView { render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-inline-hbox'); this.el.classList.add('widget-timepicker'); this._timepicker = document.createElement('input'); this._timepicker.setAttribute('type', 'time'); this._timepicker.id = this.label.htmlFor = uuid(); this.el.appendChild(this._timepicker); this.listenTo(this.model, 'change:value', this._update_value); this.listenTo(this.model, 'change', this.update2); this._update_value(); this.update2(); } /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ update2(model?: Backbone.Model, options?: any): void { if (options === undefined || options.updated_view !== this) { this._timepicker!.disabled = this.model.get('disabled'); this._timepicker!.min = this.model.get('min'); this._timepicker!.max = this.model.get('max'); this._timepicker!.step = this.model.get('step'); } return super.update(); } events(): { [e: string]: string } { // Typescript doesn't understand that these functions are called, so we // specifically use them here so it knows they are being used. void this._picker_change; void this._picker_focusout; return { 'change [type="time"]': '_picker_change', 'focusout [type="time"]': '_picker_focusout', }; } private _update_value( model?: Backbone.Model, newValue?: any, options?: any ): void { if (options === undefined || options.updated_view !== this) { this._timepicker!.value = this.model.get('value'); } } private _picker_change(): void { if (!this._timepicker!.validity.badInput) { this.model.set('value', this._timepicker!.value, { updated_view: this }); this.touch(); } } private _picker_focusout(): void { if (this._timepicker!.validity.badInput) { this.model.set('value', null, { updated_view: this }); this.touch(); } } private _timepicker: HTMLInputElement | undefined; } ipywidgets-8.1.5/packages/controls/src/widget_upload.ts000066400000000000000000000107141466162644600233460ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { CoreDOMWidgetModel } from './widget_core'; import { DOMWidgetView } from '@jupyter-widgets/base'; interface IFileUploaded { content: ArrayBuffer; name: string; size: number; type: string; last_modified: number; } export class FileUploadModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'FileUploadModel', _view_name: 'FileUploadView', accept: '', description: 'Upload', disabled: false, icon: 'upload', button_style: '', multiple: false, value: [], // has type Array error: '', style: null, }; } static serializers = { ...CoreDOMWidgetModel.serializers, // use a dummy serializer for value to circumvent the default serializer. value: { serialize: (x: T): T => x }, }; } export class FileUploadView extends DOMWidgetView { el: HTMLButtonElement; fileInput: HTMLInputElement; preinitialize() { // Must set this before the initialize method creates the element this.tagName = 'button'; } render(): void { super.render(); this.el.classList.add('jupyter-widgets'); this.el.classList.add('widget-upload'); this.el.classList.add('jupyter-button'); this.fileInput = document.createElement('input'); this.fileInput.type = 'file'; this.fileInput.style.display = 'none'; this.el.addEventListener('click', () => { this.fileInput.click(); }); this.fileInput.addEventListener('click', () => { this.fileInput.value = ''; }); this.fileInput.addEventListener('change', () => { const promisesFile: Array> = []; Array.from(this.fileInput.files ?? []).forEach((file: File) => { promisesFile.push( new Promise((resolve, reject) => { const fileReader = new FileReader(); fileReader.onload = (): void => { // We know we can read the result as an array buffer since // we use the `.readAsArrayBuffer` method const content: ArrayBuffer = fileReader.result as ArrayBuffer; resolve({ content, name: file.name, type: file.type, size: file.size, last_modified: file.lastModified, }); }; fileReader.onerror = (): void => { reject(); }; fileReader.onabort = fileReader.onerror; fileReader.readAsArrayBuffer(file); }) ); }); Promise.all(promisesFile) .then((files: Array) => { this.model.set({ value: files, error: '', }); this.touch(); }) .catch((err) => { console.error('error in file upload: %o', err); this.model.set({ error: err, }); this.touch(); }); }); this.listenTo(this.model, 'change:button_style', this.update_button_style); this.set_button_style(); this.update(); // Set defaults. } update(): void { this.el.disabled = this.model.get('disabled'); this.el.setAttribute('title', this.model.get('tooltip')); const value: [] = this.model.get('value'); const description = `${this.model.get('description')} (${value.length})`; const icon = this.model.get('icon'); if (description.length || icon.length) { this.el.textContent = ''; if (icon.length) { const i = document.createElement('i'); i.classList.add('fa'); i.classList.add('fa-' + icon); if (description.length === 0) { i.classList.add('center'); } this.el.appendChild(i); } this.el.appendChild(document.createTextNode(description)); } this.fileInput.accept = this.model.get('accept'); this.fileInput.multiple = this.model.get('multiple'); return super.update(); } update_button_style(): void { this.update_mapped_classes( FileUploadView.class_map, 'button_style', this.el ); } set_button_style(): void { this.set_mapped_classes(FileUploadView.class_map, 'button_style', this.el); } static class_map = { primary: ['mod-primary'], success: ['mod-success'], info: ['mod-info'], warning: ['mod-warning'], danger: ['mod-danger'], }; } ipywidgets-8.1.5/packages/controls/src/widget_video.ts000066400000000000000000000051531466162644600231710ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { DOMWidgetView } from '@jupyter-widgets/base'; import { CoreDOMWidgetModel } from './widget_core'; export class VideoModel extends CoreDOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'VideoModel', _view_name: 'VideoView', format: 'mp4', width: '', height: '', autoplay: true, loop: true, controls: true, value: new DataView(new ArrayBuffer(0)), }; } static serializers = { ...CoreDOMWidgetModel.serializers, value: { serialize: (value: any): DataView => { return new DataView(value.buffer.slice(0)); }, }, }; } export class VideoView extends DOMWidgetView { render(): void { /** * Called when view is rendered. */ super.render(); this.luminoWidget.addClass('jupyter-widgets'); this.luminoWidget.addClass('widget-image'); this.update(); // Set defaults. } update(): void { /** * Update the contents of this view * * Called when the model is changed. The model may have been * changed by another view or by a state update from the back-end. */ let url; const format = this.model.get('format'); const value = this.model.get('value'); if (format !== 'url') { const blob = new Blob([value], { type: `video/${this.model.get('format')}`, }); url = URL.createObjectURL(blob); } else { url = new TextDecoder('utf-8').decode(value.buffer); } // Clean up the old objectURL const oldurl = this.el.src; this.el.src = url; if (oldurl) { URL.revokeObjectURL(oldurl); } // Height and width const width = this.model.get('width'); if (width !== undefined && width.length > 0) { this.el.setAttribute('width', width); } else { this.el.removeAttribute('width'); } const height = this.model.get('height'); if (height !== undefined && height.length > 0) { this.el.setAttribute('height', height); } else { this.el.removeAttribute('height'); } // Video attributes this.el.loop = this.model.get('loop'); this.el.autoplay = this.model.get('autoplay'); this.el.controls = this.model.get('controls'); return super.update(); } remove(): void { if (this.el.src) { URL.revokeObjectURL(this.el.src); } super.remove(); } preinitialize() { // Must set this before the initialize method creates the element this.tagName = 'video'; } el: HTMLVideoElement; } ipywidgets-8.1.5/packages/controls/test/000077500000000000000000000000001466162644600203345ustar00rootroot00000000000000ipywidgets-8.1.5/packages/controls/test/karma-cov.conf.js000066400000000000000000000007741466162644600235060ustar00rootroot00000000000000var path = require('path'); module.exports = function (config) { config.set({ basePath: '..', browsers: ['Firefox'], frameworks: ['mocha'], reporters: ['mocha', 'coverage'], files: ['test/build/coverage.js'], coverageReporter: { reporters: [ { type: 'text' }, { type: 'lcov', dir: 'test/coverage' }, { type: 'html', dir: 'test/coverage' }, ], }, port: 9876, colors: true, singleRun: true, logLevel: config.LOG_INFO, }); }; ipywidgets-8.1.5/packages/controls/test/karma.conf.js000066400000000000000000000004461466162644600227150ustar00rootroot00000000000000module.exports = function (config) { config.set({ basePath: '..', frameworks: ['mocha'], reporters: ['mocha'], files: ['test/build/bundle.js'], port: 9876, colors: true, singleRun: true, logLevel: config.LOG_INFO, browserNoActivityTimeout: 30000, }); }; ipywidgets-8.1.5/packages/controls/test/src/000077500000000000000000000000001466162644600211235ustar00rootroot00000000000000ipywidgets-8.1.5/packages/controls/test/src/dummy-manager.ts000066400000000000000000000055721466162644600242470ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as widgets from '../../lib'; import * as Backbone from 'backbone'; import * as base from '@jupyter-widgets/base'; import { WidgetModel, WidgetView } from '@jupyter-widgets/base'; import { ManagerBase } from '@jupyter-widgets/base-manager'; let numComms = 0; export class MockComm { constructor() { this.comm_id = `mock-comm-id-${numComms}`; numComms += 1; } on_open(fn: Function): void { this._on_open = fn; } on_close(fn: Function): void { this._on_close = fn; } on_msg(fn: Function): void { this._on_msg = fn; } _process_msg(msg: any): any { if (this._on_msg) { return this._on_msg(msg); } else { return Promise.resolve(); } } open(): string { if (this._on_open) { this._on_open(); } return ''; } close(): string { if (this._on_close) { this._on_close(); } return ''; } send(): string { return ''; } comm_id: string; target_name: string; _on_msg: Function | null = null; _on_open: Function | null = null; _on_close: Function | null = null; } class TestWidget extends base.WidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_module: 'test-widgets', _model_name: 'TestWidget', _model_module_version: '1.0.0', _view_module: 'test-widgets', _view_name: 'TestWidgetView', _view_module_version: '1.0.0', _view_count: null as any, }; } } class TestWidgetView extends base.WidgetView { render(): void { this._rendered += 1; super.render(); } remove(): void { this._removed += 1; super.remove(); } _removed = 0; _rendered = 0; } const testWidgets = { TestWidget, TestWidgetView }; export class DummyManager extends ManagerBase { constructor() { super(); this.el = window.document.createElement('div'); } protected loadClass( className: string, moduleName: string, moduleVersion: string ): Promise { if (moduleName === '@jupyter-widgets/controls') { if ((widgets as any)[className]) { return Promise.resolve((widgets as any)[className]); } else { return Promise.reject(`Cannot find class ${className}`); } } else if (moduleName === 'test-widgets') { if ((testWidgets as any)[className]) { return Promise.resolve((testWidgets as any)[className]); } else { return Promise.reject(`Cannot find class ${className}`); } } else { return Promise.reject(`Cannot find module ${moduleName}`); } } _get_comm_info(): Promise<{}> { return Promise.resolve({}); } _create_comm(): Promise { return Promise.resolve(new MockComm()); } el: HTMLElement; testClasses: { [key: string]: any } = testWidgets; } ipywidgets-8.1.5/packages/controls/test/src/index.ts000066400000000000000000000005141466162644600226020ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import './widget_date_test'; import './widget_datetime_test'; import './widget_time_test'; import './widget_selection_test'; import './widget_string_test'; import './widget_upload_test'; import './lumino/currentselection_test'; ipywidgets-8.1.5/packages/controls/test/src/lumino/000077500000000000000000000000001466162644600224265ustar00rootroot00000000000000ipywidgets-8.1.5/packages/controls/test/src/lumino/currentselection_test.ts000066400000000000000000000114171466162644600274310ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { expect } from 'chai'; import { spy } from 'sinon'; import { ArrayExt } from '@lumino/algorithm'; import { Selection } from '../../../lib/lumino/currentselection'; function getLastMessage(subscriber: { getCall: (arg0: number) => { args: [any, any] }; }): any { const [, message] = subscriber.getCall(0).args; return message; } describe('Selection with items', function () { let selection: Selection; let subscriber: any; // subscribe to signals from selection let sequence: string[]; beforeEach(function () { sequence = ['value-0', 'value-1']; selection = new Selection(sequence) as Selection; selection.index = null; subscriber = spy(); selection.selectionChanged.connect(subscriber); }); it('be unselected', function () { expect(selection.index).to.be.null; expect(selection.value).to.be.null; }); it('set an item', function () { selection.index = 1; expect(selection.index).to.equal(1); expect(selection.value).to.equal('value-1'); }); it('dispatch a signal when setting an item', function () { selection.index = 1; expect(subscriber.calledOnce).to.be.true; const message = getLastMessage(subscriber); expect(message).to.deep.equal({ previousIndex: null, previousValue: null, currentIndex: 1, currentValue: 'value-1', }); }); it('set a value', function () { selection.value = 'value-0'; expect(selection.value).to.equal('value-0'); expect(selection.index).to.equal(0); }); it('dispatch a signal when setting a value', function () { selection.value = 'value-0'; expect(subscriber.calledOnce).to.be.true; const [, message] = subscriber.getCall(0).args; expect(message).to.deep.equal({ previousIndex: null, previousValue: null, currentIndex: 0, currentValue: 'value-0', }); }); it('set to null if the index is out of bounds', function () { selection.index = 22; expect(selection.index).to.be.null; expect(selection.value).to.be.null; }); it('set to null if the value is not present', function () { selection.value = 'not-a-value'; expect(selection.index).to.be.null; expect(selection.value).to.be.null; }); it('adjust after inserting an item', function () { const insertedValue = 'value-before-1'; ArrayExt.insert(sequence, 1, insertedValue); // sequence is now [value-0, value-before-1, value-1] selection.adjustSelectionForInsert(1, insertedValue); expect(selection.index).to.equal(1); expect(selection.value).to.equal(insertedValue); }); it('adjust after removing an item', function () { ArrayExt.removeAt(sequence, 0); selection.adjustSelectionForRemove(0, 'value-0'); expect(selection.index).to.be.null; expect(selection.value).to.be.null; }); it('clear the selection', function () { selection.clearSelection(); expect(selection.index).to.be.null; expect(selection.value).to.be.null; }); }); describe('Selection with items with an item selected', function () { let selection: Selection; let subscriber: any; // subscribe to signals from selection let sequence: string[]; beforeEach(function () { sequence = ['value-0', 'value-1']; selection = new Selection(sequence); selection.index = 1; subscriber = spy(); selection.selectionChanged.connect(subscriber); }); it('set another item', function () { selection.index = 0; expect(selection.index).to.equal(0); expect(selection.value).to.equal('value-0'); const message = getLastMessage(subscriber); expect(message).to.deep.equal({ previousIndex: 1, previousValue: 'value-1', currentIndex: 0, currentValue: 'value-0', }); }); it('adjust after inserting an item', function () { const insertedValue = 'value-before-1'; ArrayExt.insert(sequence, 1, insertedValue); selection.adjustSelectionForInsert(1, insertedValue); expect(selection.index).to.equal(2); expect(selection.value).to.equal('value-1'); }); it('adjust after removing an item', function () { ArrayExt.removeAt(sequence, 0); selection.adjustSelectionForRemove(0, 'value-0'); expect(selection.index).to.equal(0); expect(selection.value).to.equal('value-1'); }); it('adjust after removing the selected item', function () { ArrayExt.removeAt(sequence, 1); selection.adjustSelectionForRemove(1, 'value-1'); expect(selection.index).to.equal(0); expect(selection.value).to.equal('value-0'); const message = getLastMessage(subscriber); expect(message).to.deep.equal({ previousIndex: 1, previousValue: 'value-1', currentIndex: 0, currentValue: 'value-0', }); }); }); ipywidgets-8.1.5/packages/controls/test/src/utils.ts000066400000000000000000000053621466162644600226410ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as widgets from '@jupyter-widgets/base'; import * as services from '@jupyterlab/services'; import { DummyManager } from './dummy-manager'; import type { JSONValue, JSONObject } from '@lumino/coreutils'; let numComms = 0; export class MockComm implements widgets.IClassicComm { constructor() { this.comm_id = `mock-comm-id-${numComms}`; numComms += 1; } on_close(fn: Function | null): void { this._on_close = fn; } on_msg(fn: Function | null): void { this._on_msg = fn; } _process_msg(msg: services.KernelMessage.ICommMsgMsg): void | Promise { if (this._on_msg) { return this._on_msg(msg); } else { return Promise.resolve(); } } open( data: JSONValue, callbacks?: widgets.ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string { if (this._on_open) { this._on_open(); } return ''; } close( data?: JSONValue, callbacks?: widgets.ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string { if (this._on_close) { this._on_close(); } return ''; } send( data: JSONValue, callbacks?: widgets.ICallbacks, metadata?: JSONObject, buffers?: ArrayBuffer[] | ArrayBufferView[] ): string { return ''; } comm_id: string; target_name: string; _on_msg: Function | null = null; _on_close: Function | null = null; _on_open: Function | null = null; } export interface IConstructor { new (attributes?: any, options?: any): T; } export function createTestModel( constructor: IConstructor, attributes?: any, widget_manager?: widgets.WidgetModel['widget_manager'] ): T { const id = widgets.uuid(); const modelOptions = { widget_manager: widget_manager || new DummyManager(), model_id: id, }; return new constructor(attributes, modelOptions); } export async function createTestModelFromSerialized< T extends widgets.WidgetModel >( constructor: IConstructor, state?: any, widget_manager?: widgets.WidgetModel['widget_manager'] ): Promise { widget_manager = widget_manager || new DummyManager(); const attributes = await (constructor as any)._deserialize_state( state, widget_manager ); return createTestModel(constructor, attributes, widget_manager); } export function createTestView( model: widgets.WidgetModel, viewCtor: IConstructor ): Promise { const mgr = model.widget_manager as DummyManager; mgr.testClasses[model.get('_view_name')] = viewCtor; return model.widget_manager.create_view(model, undefined) as any; } ipywidgets-8.1.5/packages/controls/test/src/widget_date_test.ts000066400000000000000000000074121466162644600250160ustar00rootroot00000000000000import { DummyManager } from './dummy-manager'; import { expect } from 'chai'; import * as widgets from '../../lib'; function getDatepicker(parent: Element): HTMLInputElement { const elem = parent.querySelector('input[type="date"]'); return elem as HTMLInputElement; } describe('DatePickerView', function () { beforeEach(async function () { this.manager = new DummyManager(); const modelId = 'u-u-i-d'; this.model = await this.manager.new_model( { model_name: 'DatePickerModel', model_module: '@jupyter-widgets/controls', model_module_version: '1.0.0', model_id: modelId, }, { description: 'test-date-model' } ); }); it('construction', function () { const options = { model: this.model }; const view = new widgets.DatePickerView(options); expect(view).to.not.be.undefined; }); it('initial date value', function () { const testDate = new Date('2017-02-25'); this.model.set('value', testDate); const options = { model: this.model }; const view = new widgets.DatePickerView(options); view.render(); expect(getDatepicker(view.el).valueAsDate!.getTime()).to.equal( testDate.getTime() ); }); it('no initial value', function () { this.model.set('value', null); const options = { model: this.model }; const view = new widgets.DatePickerView(options); view.render(); expect(getDatepicker(view.el).valueAsDate).to.be.a('null'); }); it('set the model date', function () { this.model.set('value', null); const options = { model: this.model }; const view = new widgets.DatePickerView(options); view.render(); // Simulate setting the date in the datepicker const testDate = new Date('2015-02-22'); const datepicker = getDatepicker(view.el); datepicker.valueAsDate = testDate; datepicker.dispatchEvent(new Event('change', { bubbles: true })); expect(this.model.get('value').getTime()).to.equal(testDate.getTime()); }); it('update when the model changes', function () { this.model.set('value', null); const options = { model: this.model }; const view = new widgets.DatePickerView(options); view.render(); const testDate = new Date('2015-02-22'); this.model.set('value', testDate); const datepicker = getDatepicker(view.el); expect(datepicker.valueAsDate!.getTime()).to.equal(testDate.getTime()); }); }); describe('serialize_date', function () { it('null date', function () { expect(widgets.serialize_date(null)).to.be.a('null'); }); it('UTC date', function () { const date = new Date('Sat May 13 2017 00:00:00 UTC'); const expectedSerialization = { year: 2017, month: 4, date: 13, }; expect(widgets.serialize_date(date)).to.deep.equal(expectedSerialization); }); it('date in other locale as UTC', function () { const date = new Date('Sat May 13 2017 00:00:00 GMT+0100 (BST)'); const expectedSerialization = { year: 2017, month: 4, date: 12, // still on 12th May in UTC }; expect(widgets.serialize_date(date)).to.deep.equal(expectedSerialization); }); it('date before 100AD', function () { const date = new Date('0005-04-28'); const expectedSerialization = { year: 5, month: 3, date: 28, }; expect(widgets.serialize_date(date)).to.deep.equal(expectedSerialization); }); }); describe('deserialize_date', function () { it('null date', function () { expect(widgets.deserialize_date(null)).to.be.a('null'); }); it('valid date', function () { const serialized = { year: 2017, month: 4, date: 12, }; const expectedDate = new Date('2017-05-12'); expect(widgets.deserialize_date(serialized)!.getTime()).to.equal( expectedDate.getTime() ); }); }); ipywidgets-8.1.5/packages/controls/test/src/widget_datetime_test.ts000066400000000000000000000125561466162644600257020ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { expect } from 'chai'; import { DummyManager } from './dummy-manager'; import { createTestModel, createTestView, createTestModelFromSerialized, } from './utils'; import { DatetimeModel, DatetimeView, NaiveDatetimeModel } from '../../lib'; describe('Datetime', () => { const date = new Date(); describe('DatetimeModel', () => { it('should be createable', () => { const model = createTestModel(DatetimeModel); expect(model).to.be.an.instanceof(DatetimeModel); expect(model.get('value')).to.be.a('null'); }); it('should be creatable with a value', () => { const state = { value: date }; const model = createTestModel(DatetimeModel, state); expect(model).to.be.instanceof(DatetimeModel); expect(model.get('value')).to.equal(date); }); it('should serialize as expected', async () => { const state_in = { value: { year: 2002, month: 2, date: 20, hours: 20, minutes: 2, seconds: 20, milliseconds: 2, }, }; const model = await createTestModelFromSerialized( DatetimeModel, state_in ); model.widget_manager.register_model( model.model_id, Promise.resolve(model) ); const state_out = await ( model.widget_manager as DummyManager ).get_state(); const models = Object.keys(state_out.state).map( (k) => state_out.state[k].state ); expect(models.length).to.equal(1); expect(models[0]._model_name).to.equal('DatetimeModel'); expect(models[0].value).to.eql(state_in.value); }); it('should deserialize to Date object', async () => { const state_in = { value: { year: 2002, month: 2, date: 20, hours: 20, minutes: 2, seconds: 20, milliseconds: 2, }, }; const model = await createTestModelFromSerialized( DatetimeModel, state_in ); expect(model.get('value')).to.eql( new Date(Date.UTC(2002, 2, 20, 20, 2, 20, 2)) ); }); it('should deserialize null', async () => { const state_in = { value: null }; const model = await createTestModelFromSerialized( DatetimeModel, state_in ); expect(model.get('value')).to.be.a('null'); }); it('should deserialize undefined', async () => { const state_in = {}; const model = await createTestModelFromSerialized( DatetimeModel, state_in ); expect(model.get('value')).to.be.a('null'); }); }); describe('DatetimeView', () => { it('should be createable', async () => { const state = {}; const model = createTestModel(DatetimeModel, state); const view = await createTestView(model, DatetimeView); expect(view).to.be.an.instanceof(DatetimeView); expect(view.model).to.equal(model); }); }); describe('NaiveDatetimeModel', () => { it('should be createable', () => { const model = createTestModel(NaiveDatetimeModel); expect(model).to.be.an.instanceof(NaiveDatetimeModel); expect(model.get('value')).to.be.a('null'); }); it('should be creatable with a value', () => { const state = { value: date }; const model = createTestModel(NaiveDatetimeModel, state); expect(model).to.be.an.instanceof(NaiveDatetimeModel); expect(model.get('value')).to.eql(date); }); it('should serialize as expected', async () => { const state_in = { value: { year: 2002, month: 2, date: 20, hours: 20, minutes: 2, seconds: 20, milliseconds: 2, }, }; const model = await createTestModelFromSerialized( NaiveDatetimeModel, state_in ); model.widget_manager.register_model( model.model_id, Promise.resolve(model) ); const state_out = await ( model.widget_manager as DummyManager ).get_state(); const models = Object.keys(state_out.state).map( (k) => state_out.state[k].state ); expect(models.length).to.eql(1); expect(models[0]._model_name).to.eql('NaiveDatetimeModel'); expect(models[0].value).to.eql(state_in.value); }); it('should deserialize to Date object', async () => { const state_in = { value: { year: 2002, month: 2, date: 20, hours: 20, minutes: 2, seconds: 20, milliseconds: 2, }, }; const model = await createTestModelFromSerialized( NaiveDatetimeModel, state_in ); expect(model.get('value')).to.eql(new Date(2002, 2, 20, 20, 2, 20, 2)); }); it('should deserialize null', async () => { const state_in = { value: null }; const model = await createTestModelFromSerialized( NaiveDatetimeModel, state_in ); expect(model.get('value')).to.be.a('null'); }); it('should deserialize undefined', async () => { const state_in = {}; const model = await createTestModelFromSerialized( NaiveDatetimeModel, state_in ); expect(model.get('value')).to.be.a('null'); }); }); }); ipywidgets-8.1.5/packages/controls/test/src/widget_selection_test.ts000066400000000000000000000125041466162644600260640ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { expect } from 'chai'; import { createTestModel, createTestView } from './utils'; import { DropdownModel, DropdownView, SelectModel, SelectView, SelectMultipleModel, SelectMultipleView, } from '../../lib'; describe('Dropdown', () => { describe('DropdownModel', () => { it('should be createable', () => { const model = createTestModel(DropdownModel); expect(model).to.be.an.instanceof(DropdownModel); expect(model.get('index')).to.equal(''); expect(model.get('_options_labels')).to.eql([]); }); it('should be creatable with a state', () => { const state = { _options_labels: ['A', 'B', 'C'], index: 1 }; const model = createTestModel(DropdownModel, state); expect(model).to.be.an.instanceof(DropdownModel); expect(model.get('index')).to.equal(1); expect(model.get('_options_labels')).to.eql(['A', 'B', 'C']); }); }); describe('DropdownView', () => { it('should be createable', async () => { const model = createTestModel(DropdownModel); const view = await createTestView(model, DropdownView); expect(view).to.be.an.instanceof(DropdownView); expect(view.model).to.equal(model); }); it('should handle a set independent of order', async () => { const model = createTestModel(DropdownModel); const view = await createTestView(model, DropdownView); expect(view).to.be.an.instanceof(DropdownView); model.set_state({ _options_labels: ['A', 'B', 'C'], index: 1 }); expect(view.listbox.selectedIndex).to.equal(1, 'order 1 failed'); model.set_state({ _options_labels: [], index: null }); expect(view.listbox.selectedIndex).to.equal(-1); model.set_state({ index: 1, _options_labels: ['A', 'B', 'C'] }); expect(view.listbox.selectedIndex).to.equal(1, 'order 2 failed'); }); }); }); describe('Select', () => { describe('SelectModel', () => { it('should be createable', () => { const model = createTestModel(SelectModel); expect(model).to.be.an.instanceof(SelectModel); expect(model.get('index')).to.equal(''); expect(model.get('_options_labels')).to.eql([]); }); it('should be creatable with a state', () => { const state = { _options_labels: ['A', 'B', 'C'], index: 1 }; const model = createTestModel(SelectModel, state); expect(model).to.be.an.instanceof(SelectModel); expect(model.get('index')).to.equal(1); expect(model.get('_options_labels')).to.eql(['A', 'B', 'C']); }); }); describe('SelectView', () => { it('should be createable', async () => { const model = createTestModel(SelectModel); const view = await createTestView(model, SelectView); expect(view).to.be.an.instanceof(SelectView); expect(view.model).to.equal(model); }); it('should handle a set independent of order', async () => { const model = createTestModel(SelectModel); const view = await createTestView(model, SelectView); expect(view).to.be.an.instanceof(SelectView); model.set_state({ _options_labels: ['A', 'B', 'C'], index: 1 }); expect(view.listbox.selectedIndex).to.equal(1, 'order 1 failed'); model.set_state({ _options_labels: [], index: null }); expect(view.listbox.selectedIndex).to.equal(-1); model.set_state({ index: 1, _options_labels: ['A', 'B', 'C'] }); expect(view.listbox.selectedIndex).to.equal(1, 'order 2 failed'); }); }); }); describe('SelectMultiple', () => { describe('SelectMultipleModel', () => { it('should be createable', () => { const model = createTestModel(SelectMultipleModel); expect(model).to.be.an.instanceof(SelectMultipleModel); expect(model.get('index')).to.equal(''); expect(model.get('_options_labels')).to.eql([]); }); it('should be creatable with a state', () => { const state = { _options_labels: ['A', 'B', 'C'], index: 1 }; const model = createTestModel(SelectMultipleModel, state); expect(model).to.be.an.instanceof(SelectMultipleModel); expect(model.get('index')).to.equal(1); expect(model.get('_options_labels')).to.eql(['A', 'B', 'C']); }); }); describe('SelectMultipleView', () => { it('should be createable', async () => { const model = createTestModel(SelectMultipleModel); const view = await createTestView(model, SelectMultipleView); expect(view).to.be.an.instanceof(SelectMultipleView); expect(view.model).to.equal(model); }); it('should handle a set independent of order', async () => { const model = createTestModel(SelectMultipleModel); const view = await createTestView(model, SelectMultipleView); expect(view).to.be.an.instanceof(SelectMultipleView); model.set_state({ _options_labels: ['A', 'B', 'C'], index: [1, 2] }); expect([...view.listbox.selectedOptions].map((o) => o.index)).to.eql( [1, 2], 'order 1 failed' ); model.set_state({ _options_labels: [], index: null }); expect([...view.listbox.selectedOptions].map((o) => o.index)).to.eql([]); model.set_state({ index: [1, 2], _options_labels: ['A', 'B', 'C'] }); expect([...view.listbox.selectedOptions].map((o) => o.index)).to.eql( [1, 2], 'order 2 failed' ); }); }); }); ipywidgets-8.1.5/packages/controls/test/src/widget_string_test.ts000066400000000000000000000072321466162644600254070ustar00rootroot00000000000000import { DummyManager } from './dummy-manager'; import { expect } from 'chai'; import * as widgets from '../../lib'; describe('ComboboxView', function () { beforeEach(async function () { this.manager = new DummyManager(); const modelId = 'u-u-i-d'; this.model = await this.manager.new_model( { model_name: 'ComboboxModel', model_module: '@jupyter-widgets/controls', model_module_version: '1.0.0', model_id: modelId, }, { description: 'test-combo-model' } ); }); it('construction', function () { const options = { model: this.model }; const view = new widgets.ComboboxView(options); expect(view).to.not.be.undefined; }); it('no invalid flag when not checking', function () { this.model.set({ value: 'ABC', options: ['ABCDEF', '123', 'foobar'], ensure_option: false, }); const options = { model: this.model }; const view = new widgets.ComboboxView(options); view.render(); expect( view.textbox.classList.contains('jpwidgets-invalidComboValue') ).to.equal(false); }); it('no invalid flag with valid value', function () { this.model.set({ value: 'ABCDEF', options: ['ABCDEF', '123', 'foobar'], ensure_option: true, }); const options = { model: this.model }; const view = new widgets.ComboboxView(options); view.render(); expect( view.textbox.classList.contains('jpwidgets-invalidComboValue') ).to.equal(false); }); it('sets invalid flag when it should', function () { this.model.set({ value: 'ABC', options: ['ABCDEF', '123', 'foobar'], ensure_option: true, }); const options = { model: this.model }; const view = new widgets.ComboboxView(options); view.render(); expect( view.textbox.classList.contains('jpwidgets-invalidComboValue') ).to.equal(true); }); it('escapes characters in options', function () { const input = [ 'foo"', '"> { const timeString = new Date().toISOString().split('T', 2)[1].slice(0, -1); describe('TimeModel', () => { it('should be createable', () => { const model = createTestModel(TimeModel); expect(model).to.be.an.instanceof(TimeModel); expect(model.get('value')).to.be.a('null'); }); it('should be creatable with a value', () => { const state = { value: timeString }; const model = createTestModel(TimeModel, state); expect(model).to.be.an.instanceof(TimeModel); expect(model.get('value')).to.equal(timeString); }); it('should serialize as expected', async () => { const state_in = { value: { hours: 13, minutes: 37, seconds: 42, milliseconds: 333, }, }; const model = await createTestModelFromSerialized(TimeModel, state_in); model.widget_manager.register_model( model.model_id, Promise.resolve(model) ); const state_out = await ( model.widget_manager as DummyManager ).get_state(); const models = Object.keys(state_out.state).map( (k) => state_out.state[k].state ); expect(models.length).to.equal(1); expect(models[0]._model_name).to.equal('TimeModel'); expect(models[0].value).to.eql(state_in.value); }); it('should deserialize to short form', async () => { const state_in = { value: { hours: 13, minutes: 37, seconds: 0, milliseconds: 0, }, }; const model = await createTestModelFromSerialized(TimeModel, state_in); expect(model.get('value')).to.equal('13:37'); }); it('should deserialize to medium form', async () => { const state_in = { value: { hours: 13, minutes: 37, seconds: 42, milliseconds: 0, }, }; const model = await createTestModelFromSerialized(TimeModel, state_in); expect(model.get('value')).to.equal('13:37:42'); }); it('should not be thrown off by irrelevant zeroes', async () => { const state_in = { value: { hours: 0, minutes: 0, seconds: 0, milliseconds: 7, }, }; const model = await createTestModelFromSerialized(TimeModel, state_in); expect(model.get('value')).to.equal('00:00:00.007'); }); it('should deserialize null', async () => { const state_in = { value: null }; const model = await createTestModelFromSerialized(TimeModel, state_in); expect(model.get('value')).to.be.a('null'); }); it('should deserialize undefined', async () => { const state_in = {}; const model = await createTestModelFromSerialized(TimeModel, state_in); expect(model.get('value')).to.be.a('null'); }); }); describe('TimeView', () => { it('should be createable', async () => { const state = {}; const model = createTestModel(TimeModel, state); const view = await createTestView(model, TimeView); expect(view).to.be.an.instanceof(TimeView); expect(view.model).to.equal(model); }); it('should be updated when the value changes', async () => { const state = {}; const model = createTestModel(TimeModel, state); const view = await createTestView(model, TimeView); model.set('value', timeString); const picker = view.el.querySelector( 'input[type="time"]' ) as HTMLInputElement; expect(picker.value).to.equal(timeString); }); }); }); ipywidgets-8.1.5/packages/controls/test/src/widget_upload_test.ts000066400000000000000000000107431466162644600253660ustar00rootroot00000000000000import { DummyManager } from './dummy-manager'; import { expect } from 'chai'; import * as widgets from '../../lib'; function getFileInput(view: widgets.FileUploadView): HTMLInputElement { const elem = view.fileInput; return elem as HTMLInputElement; } function getProxyButton(view: widgets.FileUploadView): HTMLButtonElement { const elem = view.el; return elem as HTMLButtonElement; } function fileInputForModel(model: widgets.FileUploadModel): HTMLInputElement { // For a given model, create and render a view and return the // view's input. const options = { model }; const view = new widgets.FileUploadView(options); view.render(); return getFileInput(view); } function proxyButtonForModel( model: widgets.FileUploadModel ): HTMLButtonElement { const options = { model }; const view = new widgets.FileUploadView(options); view.render(); return getProxyButton(view); } function simulateUpload(fileInput: HTMLInputElement, files: Array): void { // The 'files' property on an input element is normally not writeable // programmatically, so we explicitly overwrite it. // The type of fileInput.files is FileList, an Array with an // extra `.item` method. const fileList: any = files; fileList.item = (index: number): File => files[index]; Object.defineProperty(fileInput, 'files', { value: fileList, writable: false, }); fileInput.dispatchEvent(new Event('change', { bubbles: true })); } describe('FileUploadView', function () { beforeEach(async function () { this.manager = new DummyManager(); const modelId = 'u-u-i-d'; this.model = await this.manager.new_model( { model_name: 'FileUploadModel', model_module: '@jupyter-widgets/controls', model_module_version: '1.0.0', model_id: modelId, }, {} ); }); it('construction', function () { const options = { model: this.model }; const view = new widgets.FileUploadView(options); expect(view).to.not.be.undefined; }); it('default options', function () { const options = { model: this.model }; const view = new widgets.FileUploadView(options); view.render(); const fileInput = getFileInput(view); const proxyButton = getProxyButton(view); expect(fileInput.disabled).to.be.false; expect(fileInput.multiple).to.be.false; expect(proxyButton.innerText).to.equal('Upload (0)'); expect(proxyButton.querySelector('i')).to.not.be.null; expect(proxyButton.querySelector('i')!.className).to.equal('fa fa-upload'); }); it('multiple', function () { this.model.set('multiple', true); const fileInput = fileInputForModel(this.model); expect(fileInput.multiple).to.be.true; }); it('accept', function () { this.model.set('accept', 'text/csv'); const fileInput = fileInputForModel(this.model); expect(fileInput.accept).to.equal('text/csv'); }); it('disabled', function () { this.model.set('disabled', true); const proxyButton = proxyButtonForModel(this.model); expect(proxyButton.disabled).to.be.true; }); it('no icon', function () { this.model.set('icon', ''); const proxyButton = proxyButtonForModel(this.model); expect(proxyButton.querySelector('i')).to.be.null; }); it('other icon', function () { this.model.set('icon', 'check'); const proxyButton = proxyButtonForModel(this.model); expect(proxyButton.querySelector('i')).to.not.be.null; expect(proxyButton.querySelector('i')!.className).to.equal('fa fa-check'); }); it('description', function () { this.model.set('description', 'some text'); const proxyButton = proxyButtonForModel(this.model); expect(proxyButton.innerText).to.equal('some text (0)'); }); it('set model value on upload', function (done) { const fileInput = fileInputForModel(this.model); const lastModified = Date.UTC(2019, 0, 0); const uploadedFile = new File(['some file content'], 'some-name', { type: 'text/plain', lastModified, }); simulateUpload(fileInput, [uploadedFile]); setTimeout(() => { expect(this.model.get('value')).to.have.length(1); const [fileInModel] = this.model.get('value'); expect(fileInModel.name).to.equal('some-name'); expect(fileInModel.type).to.equal('text/plain'); expect(fileInModel.last_modified).to.equal(lastModified); const contentInModel = new TextDecoder('utf-8').decode( fileInModel.content ); expect(contentInModel).to.equal('some file content'); done(); }, 100); }); }); ipywidgets-8.1.5/packages/controls/test/tsconfig.json000066400000000000000000000003321466162644600230410ustar00rootroot00000000000000{ "extends": "../../../tsconfigbase", "compilerOptions": { "types": ["mocha"], "outDir": "build", "rootDir": "src" }, "include": ["src/**/*"], "references": [ { "path": ".." } ] } ipywidgets-8.1.5/packages/controls/test/webpack-cov.conf.js000066400000000000000000000012631466162644600240210ustar00rootroot00000000000000var path = require('path'); module.exports = { entry: './test/build/index.js', output: { path: __dirname + '/build', filename: 'coverage.js', }, bail: true, module: { loaders: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.md$/, type: 'asset/source' }, { test: /\.html$/, type: 'asset/resource', generator: { filename: '[name].[ext]' }, }, { test: /\.ipynb$/, type: 'json' }, ], preLoaders: [ // instrument only testing sources with Istanbul { test: /\.js$/, include: path.resolve('lib/'), loader: 'istanbul-instrumenter', }, ], }, }; ipywidgets-8.1.5/packages/controls/test/webpack.conf.js000066400000000000000000000010501466162644600232260ustar00rootroot00000000000000var path = require('path'); module.exports = { entry: './test/build/index.js', output: { path: __dirname + '/build', filename: 'bundle.js', }, bail: true, module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, { test: /\.md$/, type: 'asset/source' }, { test: /\.html$/, type: 'asset/resource', generator: { filename: '[name].[ext]' }, }, { test: /\.ipynb$/, type: 'json' }, ], }, mode: 'development', resolve: { fallback: { util: false } }, }; ipywidgets-8.1.5/packages/controls/tsconfig.json000066400000000000000000000003441466162644600220650ustar00rootroot00000000000000{ "extends": "../../tsconfigbase", "compilerOptions": { "outDir": "lib", "rootDir": "src", "types": ["mathjax", "node"] }, "include": ["src/**/*"], "references": [ { "path": "../base" } ] } ipywidgets-8.1.5/packages/html-manager/000077500000000000000000000000001466162644600200665ustar00rootroot00000000000000ipywidgets-8.1.5/packages/html-manager/.gitignore000066400000000000000000000000131466162644600220500ustar00rootroot00000000000000lib/ dist/ ipywidgets-8.1.5/packages/html-manager/amd-public-path.js000066400000000000000000000012071466162644600233730ustar00rootroot00000000000000// In an AMD module, we set the public path using the magic requirejs 'module' dependency // See https://github.com/requirejs/requirejs/wiki/Differences-between-the-simplified-CommonJS-wrapper-and-standard-AMD-define#module // Since 'module' is a requirejs magic module, we must include 'module' in the webpack externals configuration. var module = require('module'); var url = new URL(module.uri, document.location); // Using lastIndexOf('/')+1 gives us the empty string if there is no '/', so pathname becomes '/' url.pathname = url.pathname.slice(0, url.pathname.lastIndexOf('/') + 1); __webpack_public_path__ = `${url.origin}${url.pathname}`; ipywidgets-8.1.5/packages/html-manager/css/000077500000000000000000000000001466162644600206565ustar00rootroot00000000000000ipywidgets-8.1.5/packages/html-manager/css/output.css000066400000000000000000000006641466162644600227360ustar00rootroot00000000000000/*----------------------------------------------------------------------------- | Copyright (c) Jupyter Development Team. | Distributed under the terms of the Modified BSD License. |----------------------------------------------------------------------------*/ /* */ .jupyter-widgets.widget-output .jp-OutputArea-prompt, /* */ .jupyter-widgets.jupyter-widget-output .jp-OutputArea-prompt { display: none; } ipywidgets-8.1.5/packages/html-manager/package.json000066400000000000000000000055561466162644600223670ustar00rootroot00000000000000{ "name": "@jupyter-widgets/html-manager", "version": "1.0.13", "description": "Standalone package for rendering Jupyter widgets outside notebooks", "homepage": "https://github.com/jupyter-widgets/ipywidgets#readme", "bugs": { "url": "https://github.com/jupyter-widgets/ipywidgets/issues" }, "repository": { "type": "git", "url": "https://github.com/jupyter-widgets/ipywidgets.git" }, "license": "BSD-3-Clause", "author": "Jupyter Project", "main": "lib/index.js", "typings": "lib/index.d.ts", "files": [ "lib/**/*.d.ts", "lib/**/*.js", "dist/", "css/*.css" ], "scripts": { "build": "npm run build:src && webpack && npm run build:embed-amd", "build:embed-amd": "node scripts/concat-amd-build.js && rimraf dist/amd", "build:src": "tsc --build", "build:test": "tsc --build test && webpack --config test/webpack.conf.js", "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo && rimraf dist", "prepublish": "npm run clean && npm run build", "test": "npm run test:unit", "test:unit": "npm run test:unit:firefox && npm run test:unit:chrome", "test:unit:chrome": "npm run test:unit:default -- --browsers=Chrome", "test:unit:default": "npm run build:test && karma start test/karma.conf.js --log-level debug --browsers=Firefox", "test:unit:firefox": "npm run test:unit:default -- --browsers=Firefox", "test:unit:firefox:headless": "npm run test:unit:default -- --browsers=FirefoxHeadless" }, "dependencies": { "@fortawesome/fontawesome-free": "^5.12.0", "@jupyter-widgets/base": "^6.0.10", "@jupyter-widgets/base-manager": "^1.0.11", "@jupyter-widgets/base7": "npm:@jupyter-widgets/base@4.1.6", "@jupyter-widgets/controls": "^5.0.11", "@jupyter-widgets/controls7": "npm:@jupyter-widgets/controls@3.1.6", "@jupyter-widgets/output": "^6.0.10", "@jupyter-widgets/schema": "^0.5.6", "@jupyterlab/outputarea": "^3.0.0 || ^4.0.0", "@jupyterlab/rendermime": "^3.0.0 || ^4.0.0", "@jupyterlab/rendermime-interfaces": "^3.0.0 || ^4.0.0", "@lumino/messaging": "^1.10.1 || ^2.1", "@lumino/widgets": "^1.30.0 || ^2.1", "ajv": "^8.6.0", "jquery": "^3.1.1", "semver": "^7.3.5" }, "devDependencies": { "@types/jquery": "^3.5.16", "@types/mocha": "^9.0.0", "@types/node": "^17.0.2", "@types/sanitize-html": "^2.6.0", "chai": "^4.0.0", "css-loader": "^6.5.1", "karma": "^6.3.3", "karma-chrome-launcher": "^3.1.0", "karma-firefox-launcher": "^2.1.1", "karma-ie-launcher": "^1.0.0", "karma-mocha": "^2.0.1", "karma-mocha-reporter": "^2.2.5", "mocha": "^9.0.0", "postcss": "^8.3.2", "postcss-cssnext": "^3.1.0", "postcss-import": "^14.0.2", "postcss-loader": "^6.1.0", "rimraf": "^3.0.2", "style-loader": "^3.3.1", "typescript": "~4.9.4", "webpack": "^5.65.0", "webpack-cli": "^4.7.2" } } ipywidgets-8.1.5/packages/html-manager/scripts/000077500000000000000000000000001466162644600215555ustar00rootroot00000000000000ipywidgets-8.1.5/packages/html-manager/scripts/concat-amd-build.js000077500000000000000000000016261466162644600252260ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. var fs = require('fs'); // Make a script file that defines all of the relevant AMD modules var files = [ 'base.js', 'controls.js', 'base7.js', 'controls7.js', 'index.js', 'libembed-amd.js', ]; var output = files .map((f) => { return fs.readFileSync('./dist/amd/' + f).toString(); }) .join(';\n\n'); fs.writeFileSync('./dist/libembed-amd.js', output); // Make a script that has all of the above AMD modules and runs a function which // renders all of the widgets on page load automatically. files = [ 'base.js', 'controls.js', 'base7.js', 'controls7.js', 'index.js', 'libembed-amd.js', 'embed-amd-render.js', ]; var output = files .map((f) => { return fs.readFileSync('./dist/amd/' + f).toString(); }) .join(';\n\n'); fs.writeFileSync('./dist/embed-amd.js', output); ipywidgets-8.1.5/packages/html-manager/src/000077500000000000000000000000001466162644600206555ustar00rootroot00000000000000ipywidgets-8.1.5/packages/html-manager/src/embed-amd-render.ts000066400000000000000000000006721466162644600243220ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. (window as any).require( ['@jupyter-widgets/html-manager/dist/libembed-amd'], function (embed: { renderWidgets: { (): void; (): void } }) { if (document.readyState === 'complete') { embed.renderWidgets(); } else { window.addEventListener('load', function () { embed.renderWidgets(); }); } } ); ipywidgets-8.1.5/packages/html-manager/src/embed.ts000066400000000000000000000006411466162644600223020ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { HTMLManager } from './index'; import { renderWidgets } from './libembed'; // Render the widgets that we can if (!(window as any)._jupyter_widget_embedder) { (window as any)._jupyter_widget_embedder = true; window.addEventListener('load', () => { renderWidgets(() => new HTMLManager()); }); } ipywidgets-8.1.5/packages/html-manager/src/htmlmanager.ts000066400000000000000000000132711466162644600235300ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { maxSatisfying } from 'semver'; import * as base from '@jupyter-widgets/base'; import * as outputWidgets from './output'; import { ManagerBase } from '@jupyter-widgets/base-manager'; import { MessageLoop } from '@lumino/messaging'; import * as LuminoWidget from '@lumino/widgets'; import { RenderMimeRegistry, standardRendererFactories, } from '@jupyterlab/rendermime'; import { WidgetRenderer, WIDGET_MIMETYPE } from './output_renderers'; import { WidgetModel, WidgetView, DOMWidgetView } from '@jupyter-widgets/base'; export class HTMLManager extends ManagerBase { constructor(options?: { loader?: (moduleName: string, moduleVersion: string) => Promise; }) { super(); this.loader = options?.loader; this.renderMime = new RenderMimeRegistry({ initialFactories: standardRendererFactories, }); this.renderMime.addFactory( { safe: false, mimeTypes: [WIDGET_MIMETYPE], createRenderer: (options) => new WidgetRenderer(options, this), }, 0 ); this._viewList = new Set(); window.addEventListener('resize', () => { this._viewList.forEach((view) => { MessageLoop.postMessage( view.luminoWidget || view.pWidget, LuminoWidget.Widget.ResizeMessage.UnknownSize ); }); }); } /** * Display the specified view. Element where the view is displayed * is specified in the `options.el` argument. */ async display_view( view: Promise | DOMWidgetView, el: HTMLElement ): Promise { let v: DOMWidgetView; try { v = await view; } catch (error) { const msg = `Could not create a view for ${view}`; console.error(msg); const ModelCls = base.createErrorWidgetModel(error, msg); const errorModel = new ModelCls(); v = new base.ErrorWidgetView({ model: errorModel, }); v.render(); } LuminoWidget.Widget.attach(v.luminoWidget || v.pWidget, el); this._viewList.add(v); v.once('remove', () => { this._viewList.delete(v); }); } /** * Placeholder implementation for _get_comm_info. */ _get_comm_info(): Promise<{}> { return Promise.resolve({}); } /** * Placeholder implementation for _create_comm. */ _create_comm( comm_target_name: string, model_id: string, data?: any, metadata?: any, buffers?: ArrayBuffer[] | ArrayBufferView[] ): Promise { return Promise.resolve({ on_close: () => { return; }, on_msg: () => { return; }, close: () => { return; }, }); } /** * Load a class and return a promise to the loaded object. */ protected loadClass( className: string, moduleName: string, moduleVersion: string ): Promise { return new Promise((resolve, reject) => { if ( moduleName === '@jupyter-widgets/base' || moduleName === '@jupyter-widgets/controls' ) { moduleVersion = `^${moduleVersion}`; } if (moduleName === '@jupyter-widgets/base') { const best = maxSatisfying(['1.2.0', '2.0.0'], moduleVersion); if (best === '1.2.0') { // ipywidgets 7 model resolve(require('@jupyter-widgets/base7')); } else { // ipywidgets 8 model resolve(require('@jupyter-widgets/base')); } } else if (moduleName === '@jupyter-widgets/controls') { const best = maxSatisfying(['1.5.0', '2.0.0'], moduleVersion); if (best === '1.5.0') { // ipywidgets 7 controls JS and CSS require('@jupyter-widgets/controls7/css/widgets-base.css'); // If lab variables are not found, we set them (we don't want to reset the variables if they are already defined) if ( getComputedStyle(document.documentElement).getPropertyValue( '--jp-layout-color0' ) === '' ) { require('@jupyter-widgets/controls7/css/labvariables.css'); } resolve(require('@jupyter-widgets/controls7')); } else { // ipywidgets 8 controls JS and CSS require('@jupyter-widgets/controls/css/widgets-base.css'); // If lab variables are not found, we set them (we don't want to reset the variables if they are already defined) if ( getComputedStyle(document.documentElement).getPropertyValue( '--jp-layout-color0' ) === '' ) { require('@jupyter-widgets/controls/css/labvariables.css'); } resolve(require('@jupyter-widgets/controls')); } } else if (moduleName === '@jupyter-widgets/output') { resolve(outputWidgets); } else if (this.loader !== undefined) { resolve(this.loader(moduleName, moduleVersion)); } else { reject(`Could not load module ${moduleName}@${moduleVersion}`); } }).then((module) => { if ((module as any)[className]) { return (module as any)[className]; } else { return Promise.reject( `Class ${className} not found in module ${moduleName}@${moduleVersion}` ); } }); } /** * Renderers for contents of the output widgets * * Defines how outputs in the output widget should be rendered. */ renderMime: RenderMimeRegistry; /** * A loader for a given module name and module version, and returns a promise to a module */ loader: | ((moduleName: string, moduleVersion: string) => Promise) | undefined; private _viewList: Set; } ipywidgets-8.1.5/packages/html-manager/src/index.ts000066400000000000000000000007711466162644600223410ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. export * from './htmlmanager'; export { requireLoader } from './libembed-amd'; export const version = require('../package.json').version; export function generateEmbedScript( widgetState: any, imageDataUrl: string ): string { return ` `; } ipywidgets-8.1.5/packages/html-manager/src/libembed-amd.ts000066400000000000000000000075521466162644600235400ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as libembed from './libembed'; /** * Load a package using requirejs and return a promise * * @param pkg Package name or names to load */ const requirePromise = function (pkg: string | string[]): Promise { return new Promise((resolve, reject) => { const require = (window as any).requirejs; if (require === undefined) { reject('Requirejs is needed, please ensure it is loaded on the page.'); } else { require(pkg, resolve, reject); } }); }; let cdn = 'https://cdn.jsdelivr.net/npm/'; let onlyCDN = false; // find the data-cdn for any script tag, assuming it is only used for embed-amd.js const scripts = document.getElementsByTagName('script'); Array.prototype.forEach.call(scripts, (script: HTMLScriptElement) => { cdn = script.getAttribute('data-jupyter-widgets-cdn') || cdn; onlyCDN = onlyCDN || script.hasAttribute('data-jupyter-widgets-cdn-only'); }); function moduleNameToCDNUrl(moduleName: string, moduleVersion: string): string { let packageName = moduleName; let fileName = 'index'; // default filename // if a '/' is present, like 'foo/bar', packageName is changed to 'foo', and path to 'bar' // We first find the first '/' let index = moduleName.indexOf('/'); if (index != -1 && moduleName[0] == '@') { // if we have a namespace, it's a different story // @foo/bar/baz should translate to @foo/bar and baz // so we find the 2nd '/' index = moduleName.indexOf('/', index + 1); } if (index != -1) { fileName = moduleName.substr(index + 1); packageName = moduleName.substr(0, index); } return `${cdn}${packageName}@${moduleVersion}/dist/${fileName}`; } /** * Load an amd module locally and fall back to specified CDN if unavailable. * * @param moduleName The name of the module to load.. * @param version The semver range for the module, if loaded from a CDN. * * By default, the CDN service used is jsDelivr. However, this default can be * overridden by specifying another URL via the HTML attribute * "data-jupyter-widgets-cdn" on a script tag of the page. * * The semver range is only used with the CDN. */ export function requireLoader( moduleName: string, moduleVersion: string ): Promise { const require = (window as any).requirejs; if (require === undefined) { throw new Error( 'Requirejs is needed, please ensure it is loaded on the page.' ); } function loadFromCDN(): Promise { const conf: { paths: { [key: string]: string } } = { paths: {} }; conf.paths[moduleName] = moduleNameToCDNUrl(moduleName, moduleVersion); require.config(conf); return requirePromise([`${moduleName}`]); } if (onlyCDN) { console.log(`Loading from ${cdn} for ${moduleName}@${moduleVersion}`); return loadFromCDN(); } return requirePromise([`${moduleName}`]).catch((err) => { const failedId = err.requireModules && err.requireModules[0]; if (failedId) { require.undef(failedId); console.log(`Falling back to ${cdn} for ${moduleName}@${moduleVersion}`); return loadFromCDN(); } }); } /** * Render widgets in a given element. * * @param element (default document.documentElement) The element containing widget state and views. * @param loader (default requireLoader) The function used to look up the modules containing * the widgets' models and views classes. (The default loader looks them up on jsDelivr) */ export function renderWidgets( element = document.documentElement, loader: ( moduleName: string, moduleVersion: string ) => Promise = requireLoader ): void { requirePromise(['@jupyter-widgets/html-manager']).then((htmlmanager) => { const managerFactory = (): any => { return new htmlmanager.HTMLManager({ loader: loader }); }; libembed.renderWidgets(managerFactory, element); }); } ipywidgets-8.1.5/packages/html-manager/src/libembed.ts000066400000000000000000000075151466162644600230000ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. declare let __webpack_public_path__: string; /* eslint-disable prefer-const, @typescript-eslint/no-unused-vars */ __webpack_public_path__ = (window as any).__jupyter_widgets_assets_path__ || __webpack_public_path__; /* eslint-enable prefer-const, @typescript-eslint/no-unused-vars */ import '@fortawesome/fontawesome-free/css/all.min.css'; import '@fortawesome/fontawesome-free/css/v4-shims.min.css'; import '@lumino/widgets/style/index.css'; // Used just for the typing. We must not import the javascript because we don't // want to include it in the require embedding. import { HTMLManager } from './index'; // Load json schema validator import Ajv from 'ajv'; import { IManagerState } from '@jupyter-widgets/base-manager'; const widget_state_schema = require('@jupyter-widgets/schema').v2.state; const widget_view_schema = require('@jupyter-widgets/schema').v2.view; interface IViewState { version_major: number; version_minor: number; model_id: string; } const ajv = new Ajv(); const model_validate = ajv.compile(widget_state_schema); const view_validate = ajv.compile(widget_view_schema); /** * Render the inline widgets inside a DOM element. * * @param managerFactory A function that returns a new HTMLManager * @param element (default document.documentElement) The document element in which to process for widget state. */ export async function renderWidgets( managerFactory: () => HTMLManager, element: HTMLElement = document.documentElement ): Promise { const tags = element.querySelectorAll( 'script[type="application/vnd.jupyter.widget-state+json"]' ); await Promise.all( Array.from(tags).map(async (t) => renderManager(element, JSON.parse(t.innerHTML), managerFactory) ) ); } /** * Create a widget manager for a given widget state. * * @param element The DOM element to search for widget view state script tags * @param widgetState The widget manager state * * #### Notes * * Widget view state should be in script tags with type * "application/vnd.jupyter.widget-view+json". Any such script tag containing a * model id the manager knows about is replaced with a rendered view. * Additionally, if the script tag has a prior img sibling with class * 'jupyter-widget', then that img tag is deleted. */ async function renderManager( element: HTMLElement, widgetState: unknown, managerFactory: () => HTMLManager ): Promise { const valid = model_validate(widgetState); if (!valid) { throw new Error(`Model state has errors: ${model_validate.errors}`); } const manager = managerFactory(); const models = await manager.set_state(widgetState as IManagerState); const tags = element.querySelectorAll( 'script[type="application/vnd.jupyter.widget-view+json"]' ); await Promise.all( Array.from(tags).map(async (viewtag) => { const widgetViewObject = JSON.parse(viewtag.innerHTML); const valid = view_validate(widgetViewObject); if (!valid) { throw new Error(`View state has errors: ${view_validate.errors}`); } const model_id: string = widgetViewObject.model_id; const model = models.find((item) => item.model_id == model_id); if (model !== undefined && viewtag.parentElement !== null) { const prev = viewtag.previousElementSibling; if ( prev && prev.tagName === 'img' && prev.classList.contains('jupyter-widget') ) { viewtag.parentElement.removeChild(prev); } const widgetTag = document.createElement('div'); widgetTag.className = 'widget-subarea'; viewtag.parentElement.insertBefore(widgetTag, viewtag); const view = await manager.create_view(model); manager.display_view(view, widgetTag); } }) ); } ipywidgets-8.1.5/packages/html-manager/src/output.ts000066400000000000000000000046171466162644600225750ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import * as outputBase from '@jupyter-widgets/output'; import { JupyterLuminoPanelWidget } from '@jupyter-widgets/base'; import { OutputAreaModel, OutputArea } from '@jupyterlab/outputarea'; import { HTMLManager } from './htmlmanager'; import $ from 'jquery'; import '../css/output.css'; export class OutputModel extends outputBase.OutputModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), msg_id: '', outputs: [], }; } initialize(attributes: any, options: any): void { super.initialize(attributes, options); this._outputs = new OutputAreaModel({ trusted: true }); this.listenTo(this, 'change:outputs', this.setOutputs); this.setOutputs(); } get outputs(): OutputAreaModel { return this._outputs; } clear_output(wait = false): void { this._outputs.clear(wait); } setOutputs(model?: any, value?: any, options?: any): void { if (!(options && options.newMessage)) { // fromJSON does not clear the existing output this.clear_output(); // fromJSON does not copy the message, so we make a deep copy this._outputs.fromJSON(JSON.parse(JSON.stringify(this.get('outputs')))); } } private _outputs: OutputAreaModel; widget_manager: HTMLManager; } export class OutputView extends outputBase.OutputView { _createElement(tagName: string): HTMLElement { this.luminoWidget = new JupyterLuminoPanelWidget({ view: this }); return this.luminoWidget.node; } _setElement(el: HTMLElement): void { if (this.el || el !== this.luminoWidget.node) { // Boxes don't allow setting the element beyond the initial creation. throw new Error('Cannot reset the DOM element.'); } this.el = this.luminoWidget.node; this.$el = $(this.luminoWidget.node); } render(): void { super.render(); this._outputView = new OutputArea({ rendermime: this.model.widget_manager.renderMime, model: this.model.outputs, }); this.luminoWidget.insertWidget(0, this._outputView); this.luminoWidget.addClass('jupyter-widgets'); this.luminoWidget.addClass('widget-output'); this.update(); } remove(): any { this._outputView.dispose(); return super.remove(); } model: OutputModel; private _outputView: OutputArea; luminoWidget: JupyterLuminoPanelWidget; } ipywidgets-8.1.5/packages/html-manager/src/output_renderers.ts000066400000000000000000000026661466162644600246500ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { Widget } from '@lumino/widgets'; import { IRenderMime } from '@jupyterlab/rendermime-interfaces'; import { HTMLManager } from './htmlmanager'; export const WIDGET_MIMETYPE = 'application/vnd.jupyter.widget-view+json'; // Renderer to allow the output widget to render sub-widgets export class WidgetRenderer extends Widget implements IRenderMime.IRenderer { constructor(options: IRenderMime.IRendererOptions, manager: HTMLManager) { super(); this.mimeType = options.mimeType; this._manager = manager; } async renderModel(model: IRenderMime.IMimeModel): Promise { const source: any = model.data[this.mimeType]; if (!this._manager.has_model(source.model_id)) { this.node.textContent = 'Error creating widget: could not find model'; this.addClass('jupyter-widgets'); return; } try { const wModel = await this._manager.get_model(source.model_id); const wView = await this._manager.create_view(wModel); Widget.attach(wView.luminoWidget || wView.pWidget, this.node); } catch (err) { console.log('Error displaying widget'); console.log(err); this.node.textContent = 'Error displaying widget'; this.addClass('jupyter-widgets'); } } /** * The mimetype being rendered. */ readonly mimeType: string; private _manager: HTMLManager; } ipywidgets-8.1.5/packages/html-manager/test/000077500000000000000000000000001466162644600210455ustar00rootroot00000000000000ipywidgets-8.1.5/packages/html-manager/test/karma.conf.js000066400000000000000000000004461466162644600234260ustar00rootroot00000000000000module.exports = function (config) { config.set({ basePath: '..', frameworks: ['mocha'], reporters: ['mocha'], files: ['test/build/bundle.js'], port: 9876, colors: true, singleRun: true, logLevel: config.LOG_INFO, browserNoActivityTimeout: 30000, }); }; ipywidgets-8.1.5/packages/html-manager/test/src/000077500000000000000000000000001466162644600216345ustar00rootroot00000000000000ipywidgets-8.1.5/packages/html-manager/test/src/index.ts000066400000000000000000000002001466162644600233030ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import './output_test'; ipywidgets-8.1.5/packages/html-manager/test/src/output_test.ts000066400000000000000000000230671466162644600246130ustar00rootroot00000000000000import { expect } from 'chai'; import { RenderedText } from '@jupyterlab/rendermime'; import { IRenderMime } from '@jupyterlab/rendermime-interfaces'; import { HTMLManager } from '../../lib/'; import * as base from '@jupyter-widgets/base'; const newWidget = async (modelState: any): Promise => { const widgetTag = document.createElement('div'); widgetTag.className = 'widget-subarea'; document.body.appendChild(widgetTag); const manager = new HTMLManager(); const modelId = 'u-u-i-d'; const modelCreate: base.IModelOptions = { model_name: 'OutputModel', model_id: modelId, model_module: '@jupyter-widgets/output', model_module_version: '*', }; const model = await manager.new_model(modelCreate, modelState); await manager.display_view(manager.create_view(model), widgetTag); return widgetTag; }; describe('Output widget', function () { it('renders text output', async () => { const textValue = 'this-is-a-test\n'; const modelState = { _view_module: '@jupyter-widgets/output', outputs: [ { output_type: 'stream', name: 'stdout', text: textValue, }, ], }; const elt = await newWidget(modelState); expect(elt.textContent).to.equal(textValue); }); it('renders data output', async function () { // Pandas dataframe const modelState = { _view_module: '@jupyter-widgets/output', outputs: [ { output_type: 'display_data', data: { 'text/plain': ' a b\n0 1 4\n1 2 5\n2 3 6', 'text/html': '
\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
ab
014
125
236
\n
', }, metadata: {}, }, ], }; const elt = await newWidget(modelState); expect(elt.querySelectorAll('table').length).to.equal(1); }); it('renders widgets ipywidgets 7', async function () { const modelState = { _view_module: '@jupyter-widgets/output', outputs: [ { output_type: 'display_data', data: { 'application/vnd.jupyter.widget-view+json': { model_id: 'adffc4580a0944f6929c381463b0059b', version_minor: 0, version_major: 2, }, 'text/plain': 'A Jupyter Widget', }, metadata: {}, }, ], }; const elt = document.createElement('div'); elt.className = 'widget-subarea'; document.body.appendChild(elt); const manager = new HTMLManager(); // We need to seed the manager with the state of the widgets const managerState = { adffc4580a0944f6929c381463b0059b: { model_name: 'IntSliderModel', model_module: '@jupyter-widgets/controls', model_module_version: '1.5.0', state: { style: 'IPY_MODEL_3b8780f457254737a83be48bc32b0613', _view_module: '@jupyter-widgets/controls', layout: 'IPY_MODEL_33cb011834fd4c9d9af512e5e98c9904', value: 45, _model_module: '@jupyter-widgets/controls', }, }, '3b8780f457254737a83be48bc32b0613': { model_name: 'SliderStyleModel', model_module: '@jupyter-widgets/controls', model_module_version: '1.5.0', state: { description_width: '', _model_module: '@jupyter-widgets/controls', }, }, '33cb011834fd4c9d9af512e5e98c9904': { model_name: 'LayoutModel', model_module: '@jupyter-widgets/base', model_module_version: '1.2.0', state: {}, }, }; await manager.set_state({ state: managerState, version_major: 2, version_minor: 0, }); const modelId = 'u-u-i-d'; const modelCreate: base.IModelOptions = { model_name: 'OutputModel', model_id: modelId, model_module: '@jupyter-widgets/output', model_module_version: '*', }; const model = await manager.new_model(modelCreate, modelState); await manager.display_view(manager.create_view(model), elt); // Give the widget time to render await new Promise((resolve) => { setTimeout(resolve, 20); }); expect(elt.querySelectorAll('.slider').length).to.equal(1); }); it('renders widgets', async function () { const modelState = { _view_module: '@jupyter-widgets/output', outputs: [ { output_type: 'display_data', data: { 'application/vnd.jupyter.widget-view+json': { model_id: 'adffc4580a0944f6929c381463b0059b', version_minor: 0, version_major: 2, }, 'text/plain': 'A Jupyter Widget', }, metadata: {}, }, ], }; const elt = document.createElement('div'); elt.className = 'widget-subarea'; document.body.appendChild(elt); const manager = new HTMLManager(); // We need to seed the manager with the state of the widgets const managerState = { adffc4580a0944f6929c381463b0059b: { model_name: 'IntSliderModel', model_module: '@jupyter-widgets/controls', model_module_version: '2.0.0', state: { style: 'IPY_MODEL_3b8780f457254737a83be48bc32b0613', _view_module: '@jupyter-widgets/controls', layout: 'IPY_MODEL_33cb011834fd4c9d9af512e5e98c9904', value: 45, _model_module: '@jupyter-widgets/controls', }, }, '3b8780f457254737a83be48bc32b0613': { model_name: 'SliderStyleModel', model_module: '@jupyter-widgets/controls', model_module_version: '2.0.0', state: { description_width: '', _model_module: '@jupyter-widgets/controls', }, }, '33cb011834fd4c9d9af512e5e98c9904': { model_name: 'LayoutModel', model_module: '@jupyter-widgets/base', model_module_version: '2.0.0', state: {}, }, }; await manager.set_state({ state: managerState, version_major: 2, version_minor: 0, }); const modelId = 'u-u-i-d'; const modelCreate: base.IModelOptions = { model_name: 'OutputModel', model_id: modelId, model_module: '@jupyter-widgets/output', model_module_version: '*', }; const model = await manager.new_model(modelCreate, modelState); await manager.display_view(manager.create_view(model), elt); // Give the widget time to render await new Promise((resolve) => { setTimeout(resolve, 20); }); expect(elt.querySelectorAll('.slider').length).to.equal(1); }); it('renders custom mimetypes', async function () { const t = 'hello'; // Text renderer that always renders 'something different' class MockTextRenderer extends RenderedText { /** * Render a mime model. * * @param model - The mime model to render. * * @returns A promise which resolves when rendering is complete. */ render(model: IRenderMime.IMimeModel): Promise { expect(model.data['text/plain']).to.equal(t); this.node.textContent = 'something different'; return Promise.resolve(); } } const widgetTag = document.createElement('div'); widgetTag.className = 'widget-subarea'; document.body.appendChild(widgetTag); const manager = new HTMLManager(); manager.renderMime.addFactory( { safe: true, mimeTypes: ['text/plain'], createRenderer: (options) => new MockTextRenderer(options), }, 0 ); const modelId = 'u-u-i-d'; const modelCreate: base.IModelOptions = { model_name: 'OutputModel', model_id: modelId, model_module: '@jupyter-widgets/output', model_module_version: '*', }; const modelState = { _view_module: '@jupyter-widgets/output', outputs: [ { output_type: 'display_data', data: { 'text/plain': t, }, metadata: {}, }, ], }; const model = await manager.new_model(modelCreate, modelState); await manager.display_view(manager.create_view(model), widgetTag); expect(widgetTag.innerText).to.equal('something different'); }); it('renders text output', async () => { const manager = new HTMLManager(); const modelId = 'u-u-i-d'; const modelCreate: base.IModelOptions = { model_name: 'OutputModel', model_id: modelId, model_module: '@jupyter-widgets/output', model_module_version: '*', }; const startingText = 'starting text'; const endingText = 'ending text'; const modelState = { _view_module: '@jupyter-widgets/output', outputs: [ { output_type: 'stream', name: 'stdout', text: startingText, }, ], }; const widgetTag = document.createElement('div'); widgetTag.className = 'widget-subarea'; document.body.appendChild(widgetTag); const model = await manager.new_model(modelCreate, modelState); await manager.display_view(manager.create_view(model), widgetTag); expect(widgetTag.innerText).to.equal(startingText); model.set('outputs', [ { output_type: 'stream', name: 'stdout', text: endingText, }, ]); expect(widgetTag.innerText).to.equal(endingText); }); }); ipywidgets-8.1.5/packages/html-manager/test/tsconfig.json000066400000000000000000000003271466162644600235560ustar00rootroot00000000000000{ "extends": "../../../tsconfigbase", "compilerOptions": { "types": ["mocha"], "outDir": "build", "rootDir": "src" }, "include": ["src/*"], "references": [ { "path": ".." } ] } ipywidgets-8.1.5/packages/html-manager/test/webpack.conf.js000066400000000000000000000027111466162644600237440ustar00rootroot00000000000000var path = require('path'); var postcss = require('postcss'); const webpack = require('webpack'); module.exports = { mode: 'development', entry: './test/build/index.js', output: { path: path.resolve(__dirname, 'build'), filename: 'bundle.js', }, bail: true, module: { rules: [ { test: /\.css$/, use: [ 'style-loader', 'css-loader', { loader: 'postcss-loader', options: { postcssOptions: { plugins: [ postcss.plugin('delete-tilde', function () { return function (css) { css.walkAtRules('import', function (rule) { rule.params = rule.params.replace('~', ''); }); }; }), postcss.plugin('prepend', function () { return function (css) { css.prepend( "@import '@jupyter-widgets/controls/css/labvariables.css';" ); }; }), require('postcss-import')(), require('postcss-cssnext')(), ], }, }, }, ], }, // required to load font-awesome { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource' }, { test: /\.svg$/i, type: 'asset' }, ], }, }; ipywidgets-8.1.5/packages/html-manager/tsconfig.json000066400000000000000000000004741466162644600226020ustar00rootroot00000000000000{ "extends": "../../tsconfigbase", "compilerOptions": { "outDir": "lib", "rootDir": "src" }, "include": ["src/*"], "references": [ { "path": "../base" }, { "path": "../base-manager" }, { "path": "../controls" }, { "path": "../output" } ] } ipywidgets-8.1.5/packages/html-manager/webpack.config.js000066400000000000000000000076461466162644600233210ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. // Here we generate the /dist files that allow widget embedding var path = require('path'); var options = { devtool: 'source-map', mode: 'production', module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, // required to load font-awesome { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource' }, { test: /\.svg$/i, type: 'asset' }, ], }, }; module.exports = [ { // script that renders widgets using the standard embedding and can only render standard controls entry: './lib/embed.js', output: { filename: 'embed.js', path: path.resolve(__dirname, 'dist'), }, ...options, }, { // script that renders widgets using the amd embedding and can render third-party custom widgets entry: './lib/embed-amd-render.js', output: { filename: 'embed-amd-render.js', path: path.resolve(__dirname, 'dist', 'amd'), }, ...options, }, { // embed library that depends on requirejs, and can load third-party widgets dynamically entry: ['./amd-public-path.js', './lib/libembed-amd.js'], output: { library: '@jupyter-widgets/html-manager/dist/libembed-amd', filename: 'libembed-amd.js', path: path.resolve(__dirname, 'dist', 'amd'), libraryTarget: 'amd', publicPath: '', // Set in amd-public-path.js }, // 'module' is the magic requirejs dependency used to set the publicPath externals: ['module'], ...options, }, { // @jupyter-widgets/html-manager entry: ['./amd-public-path.js', './lib/index.js'], output: { library: '@jupyter-widgets/html-manager', filename: 'index.js', path: path.resolve(__dirname, 'dist', 'amd'), libraryTarget: 'amd', publicPath: '', // Set in amd-public-path.js }, // 'module' is the magic requirejs dependency used to set the publicPath externals: ['@jupyter-widgets/base', '@jupyter-widgets/controls', 'module'], ...options, }, { // @jupyter-widgets/base entry: ['./amd-public-path.js', '@jupyter-widgets/base/lib/index'], output: { library: '@jupyter-widgets/base', filename: 'base.js', path: path.resolve(__dirname, 'dist', 'amd'), libraryTarget: 'amd', publicPath: '', // Set in amd-public-path.js }, // 'module' is the magic requirejs dependency used to set the publicPath externals: ['module'], ...options, }, { // @jupyter-widgets/controls entry: ['./amd-public-path.js', '@jupyter-widgets/controls/lib/index'], output: { library: '@jupyter-widgets/controls', filename: 'controls.js', path: path.resolve(__dirname, 'dist', 'amd'), libraryTarget: 'amd', publicPath: '', // Set in amd-public-path.js }, // 'module' is the magic requirejs dependency used to set the publicPath externals: ['@jupyter-widgets/base', 'module'], ...options, }, { // @jupyter-widgets/base ipywidgets 7 entry: ['./amd-public-path.js', '@jupyter-widgets/base7/lib/index'], output: { library: '@jupyter-widgets/base7', filename: 'base7.js', path: path.resolve(__dirname, 'dist', 'amd'), libraryTarget: 'amd', publicPath: '', // Set in amd-public-path.js }, // 'module' is the magic requirejs dependency used to set the publicPath externals: ['module'], ...options, }, { // @jupyter-widgets/controls entry: ['./amd-public-path.js', '@jupyter-widgets/controls7/lib/index'], output: { library: '@jupyter-widgets/controls7', filename: 'controls7.js', path: path.resolve(__dirname, 'dist', 'amd'), libraryTarget: 'amd', publicPath: '', // Set in amd-public-path.js }, // 'module' is the magic requirejs dependency used to set the publicPath externals: ['@jupyter-widgets/base7', 'module'], ...options, }, ]; ipywidgets-8.1.5/packages/output/000077500000000000000000000000001466162644600170525ustar00rootroot00000000000000ipywidgets-8.1.5/packages/output/.gitignore000066400000000000000000000000041466162644600210340ustar00rootroot00000000000000lib/ipywidgets-8.1.5/packages/output/package.json000066400000000000000000000015561466162644600213470ustar00rootroot00000000000000{ "name": "@jupyter-widgets/output", "version": "6.0.10", "description": "Jupyter widget wrapping cell output", "bugs": { "url": "https://github.com/jupyter-widgets/ipywidgets/issues" }, "repository": { "type": "git", "url": "https://github.com/jupyter-widgets/ipywidgets.git" }, "license": "BSD-3-Clause", "author": "Project Jupyter", "main": "lib/index.js", "typings": "lib/index.d.ts", "files": [ "lib/**/*.d.ts", "lib/**/*.js" ], "scripts": { "build": "npm run build:src", "build:src": "tsc --build", "clean": "rimraf lib && rimraf tsconfig.tsbuildinfo", "prepublish": "npm run clean && npm run build", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "@jupyter-widgets/base": "^6.0.10" }, "devDependencies": { "rimraf": "^3.0.2", "typescript": "~4.9.4" } } ipywidgets-8.1.5/packages/output/src/000077500000000000000000000000001466162644600176415ustar00rootroot00000000000000ipywidgets-8.1.5/packages/output/src/index.ts000066400000000000000000000000321466162644600213130ustar00rootroot00000000000000export * from './output'; ipywidgets-8.1.5/packages/output/src/output.ts000066400000000000000000000010741466162644600215530ustar00rootroot00000000000000import { DOMWidgetModel, DOMWidgetView } from '@jupyter-widgets/base'; export const OUTPUT_WIDGET_VERSION = '1.0.0'; export class OutputModel extends DOMWidgetModel { defaults(): Backbone.ObjectHash { return { ...super.defaults(), _model_name: 'OutputModel', _view_name: 'OutputView', _model_module: '@jupyter-widgets/output', _view_module: '@jupyter-widgets/output', _model_module_version: OUTPUT_WIDGET_VERSION, _view_module_version: OUTPUT_WIDGET_VERSION, }; } } export class OutputView extends DOMWidgetView {} ipywidgets-8.1.5/packages/output/tsconfig.json000066400000000000000000000003021466162644600215540ustar00rootroot00000000000000{ "extends": "../../tsconfigbase", "compilerOptions": { "outDir": "lib", "rootDir": "src" }, "include": ["src/**/*"], "references": [ { "path": "../base" } ] } ipywidgets-8.1.5/packages/schema/000077500000000000000000000000001466162644600167525ustar00rootroot00000000000000ipywidgets-8.1.5/packages/schema/README.md000066400000000000000000000002461466162644600202330ustar00rootroot00000000000000# Jupyter Widgets Schema JSON schema for the json serialization of Jupyter Interactive Widgets. ## Package Install **Prerequisites** - [node](http://nodejs.org/) ipywidgets-8.1.5/packages/schema/generate-spec.py000066400000000000000000000210571466162644600220530ustar00rootroot00000000000000# Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. import argparse import json from operator import itemgetter import pathlib import sys from traitlets import ( CaselessStrEnum, Unicode, Tuple, List, Bool, CFloat, Float, CInt, Int, Instance, Dict, Bytes, Any, Union, ) import ipywidgets as widgets from ipywidgets import Color from ipywidgets.widgets.trait_types import TypedTuple, ByteMemoryView from ipywidgets.widgets.widget_link import Link HEADER = '''# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 8. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ''' NUMBER_MAP = { 'int': 'number (integer)', 'float': 'number (float)', 'bool': 'boolean', 'bytes': 'Bytes' } def trait_type(trait, widget_list): attributes = {} if isinstance(trait, CaselessStrEnum): w_type = 'string' attributes['enum'] = trait.values elif isinstance(trait, Unicode): w_type = 'string' elif isinstance(trait, (Tuple, List)): w_type = 'array' elif isinstance(trait, TypedTuple): w_type = 'array' attributes['items'] = trait_type(trait._trait, widget_list) elif isinstance(trait, Bool): w_type = 'bool' elif isinstance(trait, (CFloat, Float)): w_type = 'float' elif isinstance(trait, (CInt, Int)): w_type = 'int' elif isinstance(trait, Color): w_type = 'color' elif isinstance(trait, Dict): w_type = 'object' elif isinstance(trait, Union): union_attributes = [] union_types = [] for ut in trait.trait_types: ua = trait_type(ut, widget_list) union_attributes.append(ua) union_types.append(ua['type']) w_type = union_types attributes['union_attributes'] = union_attributes elif isinstance(trait, (Bytes, ByteMemoryView)): w_type = 'bytes' elif isinstance(trait, Instance) and issubclass(trait.klass, widgets.Widget): w_type = 'reference' attributes['widget'] = trait.klass.__name__ # ADD the widget to this documenting list if (trait.klass not in [i[1] for i in widget_list] and trait.klass is not widgets.Widget): widget_list.append((trait.klass.__name__, trait.klass)) elif isinstance(trait, Any): # In our case, these all happen to be values that are converted to # strings w_type = 'label' else: w_type = trait.__class__.__name__ attributes['type'] = w_type if trait.allow_none: attributes['allow_none'] = True return attributes def jsdefault(trait): if isinstance(trait, Instance): default = trait.make_dynamic_default() if issubclass(trait.klass, widgets.Widget): return 'reference to new instance' else: try: # traitlets 5 default = trait.default() except AttributeError: # traitlets 4 - can be deleted when we depend only on traitlets 5 if isinstance(trait, Union): default = trait.make_dynamic_default() else: default = trait.default_value if isinstance(default, bytes) or isinstance(default, memoryview): default = trait.default_value_repr() return default def mddefault(attribute): default = attribute['default'] is_ref = isinstance(default, str) and default.startswith('reference') if default is None: default = 'null' elif isinstance(default, bool): default = str(default).lower() elif not is_ref and attribute['type'] != 'bytes': default = "{!r}".format(default) if not is_ref: default = '`{}`'.format(default) return default def mdtype(attribute): md_type = attribute['type'] if 'union_attributes' in attribute and isinstance(md_type, (list, tuple)): md_type = ' or '.join( mdtype(ua) for ua in attribute['union_attributes'] ) if md_type in NUMBER_MAP: md_type = NUMBER_MAP[md_type] if attribute.get('allow_none'): md_type = '`null` or {}'.format(md_type) if 'enum' in attribute: md_type = '{} (one of {})'.format( md_type, ', '.join('`{!r}`'.format(n) for n in attribute['enum']) ) if 'items' in attribute: md_type = '{} of {}'.format(md_type, mdtype(attribute['items'])) if 'widget' in attribute: md_type = '{} to {} widget'.format(md_type, attribute['widget']) return md_type def format_widget(widget): out = [] fmt = '%(name)s (%(module)s, %(version)s)' out.append('### %s; %s' % (fmt % widget['model'], fmt % widget['view'])) out.append('') out.append('{name: <16} | {typing: <16} | {default: <16} | {help}'.format( name='Attribute', typing='Type', default='Default', help='Help') ) out.append('{0:-<16}-|-{0:-<16}-|-{0:-<16}-|----'.format('-')) for attribute in sorted(widget['attributes'], key=itemgetter('name')): s = '{name: <16} | {type: <16} | {default: <16} | {help}'.format( name='`{}`'.format(attribute['name']), default=mddefault(attribute), type=mdtype(attribute), help=attribute['help'] ) out.append(s) out.append('') return '\n'.join(out) def jsonify(identifier, widget, widget_list): model = dict(zip(['module', 'version', 'name'], identifier[:3])) view = dict(zip(['module', 'version', 'name'], identifier[3:])) attributes = [] for name, trait in widget.traits(sync=True).items(): if name == '_view_count': # don't document this since it is totally experimental at this point continue attribute = dict( name=name, help=trait.help or '', default=jsdefault(trait) ) attribute.update(trait_type(trait, widget_list)) attributes.append(attribute) return dict(model=model, view=view, attributes=attributes) def create_spec(widget_list): widget_data = [] for widget_name, widget_cls in widget_list: if issubclass(widget_cls, Link): widget = widget_cls((widgets.IntSlider(), 'value'), (widgets.IntSlider(), 'value')) elif issubclass(widget_cls, (widgets.SelectionRangeSlider, widgets.SelectionSlider)): widget = widget_cls(options=[1]) else: widget = widget_cls() widget_data.append(jsonify(widget_name, widget, widget_list)) return widget_data def create_markdown(spec): output = [HEADER] for widget in spec: output.append(format_widget(widget)) return '\n'.join(output) if __name__ == '__main__': parser = argparse.ArgumentParser(description='Description of your program') parser.add_argument('-f', '--format', choices=['json', 'json-pretty', 'markdown'], help='Format to generate', default='json') parser.add_argument('output', nargs='?', type=pathlib.Path) args = parser.parse_args() format = args.format widgets_to_document = sorted(widgets.Widget._widget_types.items()) spec = create_spec(widgets_to_document) if args.output: args.output.parent.mkdir(exist_ok=True) output = open(args.output, mode='w', encoding='utf8') else: output = sys.stdout try: if format == 'json': try: json.dump(spec, output, sort_keys=True) except TypeError: print('Encountered error when converting spec to JSON. Here is the spec:') print(spec) raise elif format == 'json-pretty': json.dump(spec, output, sort_keys=True, indent=2, separators=(',', ': ')) elif format == 'markdown': # We go through the json engine to convert tuples to lists, etc. output.write(create_markdown(json.loads(json.dumps(spec)))) output.write('\n') finally: if args.output: output.close() ipywidgets-8.1.5/packages/schema/index.js000066400000000000000000000003441466162644600204200ustar00rootroot00000000000000module.exports = { v1: { state: require('./v1/state.schema.json'), view: require('./v1/view.schema.json'), }, v2: { state: require('./v2/state.schema.json'), view: require('./v2/view.schema.json'), }, }; ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.latest.json000066400000000000000000005700761466162644600252710ustar00rootroot00000000000000[ { "attributes": [ { "default": "@jupyter-widgets/base", "help": "The namespace for the model.", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "A semver requirement for namespace version containing the model.", "name": "_model_module_version", "type": "string" }, { "default": "LayoutModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "LayoutView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": null, "enum": [ "flex-start", "flex-end", "center", "space-between", "space-around", "space-evenly", "stretch", "inherit", "initial", "unset" ], "help": "The align-content CSS attribute.", "name": "align_content", "type": "string" }, { "allow_none": true, "default": null, "enum": [ "flex-start", "flex-end", "center", "baseline", "stretch", "inherit", "initial", "unset" ], "help": "The align-items CSS attribute.", "name": "align_items", "type": "string" }, { "allow_none": true, "default": null, "enum": [ "auto", "flex-start", "flex-end", "center", "baseline", "stretch", "inherit", "initial", "unset" ], "help": "The align-self CSS attribute.", "name": "align_self", "type": "string" }, { "allow_none": true, "default": null, "help": "The border bottom CSS attribute.", "name": "border_bottom", "type": "string" }, { "allow_none": true, "default": null, "help": "The border left CSS attribute.", "name": "border_left", "type": "string" }, { "allow_none": true, "default": null, "help": "The border right CSS attribute.", "name": "border_right", "type": "string" }, { "allow_none": true, "default": null, "help": "The border top CSS attribute.", "name": "border_top", "type": "string" }, { "allow_none": true, "default": null, "help": "The bottom CSS attribute.", "name": "bottom", "type": "string" }, { "allow_none": true, "default": null, "help": "The display CSS attribute.", "name": "display", "type": "string" }, { "allow_none": true, "default": null, "help": "The flex CSS attribute.", "name": "flex", "type": "string" }, { "allow_none": true, "default": null, "help": "The flex-flow CSS attribute.", "name": "flex_flow", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-area CSS attribute.", "name": "grid_area", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-auto-columns CSS attribute.", "name": "grid_auto_columns", "type": "string" }, { "allow_none": true, "default": null, "enum": [ "column", "row", "row dense", "column dense", "inherit", "initial", "unset" ], "help": "The grid-auto-flow CSS attribute.", "name": "grid_auto_flow", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-auto-rows CSS attribute.", "name": "grid_auto_rows", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-column CSS attribute.", "name": "grid_column", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-gap CSS attribute.", "name": "grid_gap", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-row CSS attribute.", "name": "grid_row", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-template-areas CSS attribute.", "name": "grid_template_areas", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-template-columns CSS attribute.", "name": "grid_template_columns", "type": "string" }, { "allow_none": true, "default": null, "help": "The grid-template-rows CSS attribute.", "name": "grid_template_rows", "type": "string" }, { "allow_none": true, "default": null, "help": "The height CSS attribute.", "name": "height", "type": "string" }, { "allow_none": true, "default": null, "enum": [ "flex-start", "flex-end", "center", "space-between", "space-around", "inherit", "initial", "unset" ], "help": "The justify-content CSS attribute.", "name": "justify_content", "type": "string" }, { "allow_none": true, "default": null, "enum": [ "flex-start", "flex-end", "center", "inherit", "initial", "unset" ], "help": "The justify-items CSS attribute.", "name": "justify_items", "type": "string" }, { "allow_none": true, "default": null, "help": "The left CSS attribute.", "name": "left", "type": "string" }, { "allow_none": true, "default": null, "help": "The margin CSS attribute.", "name": "margin", "type": "string" }, { "allow_none": true, "default": null, "help": "The max-height CSS attribute.", "name": "max_height", "type": "string" }, { "allow_none": true, "default": null, "help": "The max-width CSS attribute.", "name": "max_width", "type": "string" }, { "allow_none": true, "default": null, "help": "The min-height CSS attribute.", "name": "min_height", "type": "string" }, { "allow_none": true, "default": null, "help": "The min-width CSS attribute.", "name": "min_width", "type": "string" }, { "allow_none": true, "default": null, "enum": ["contain", "cover", "fill", "scale-down", "none"], "help": "The object-fit CSS attribute.", "name": "object_fit", "type": "string" }, { "allow_none": true, "default": null, "help": "The object-position CSS attribute.", "name": "object_position", "type": "string" }, { "allow_none": true, "default": null, "help": "The order CSS attribute.", "name": "order", "type": "string" }, { "allow_none": true, "default": null, "help": "The overflow CSS attribute.", "name": "overflow", "type": "string" }, { "allow_none": true, "default": null, "help": "The padding CSS attribute.", "name": "padding", "type": "string" }, { "allow_none": true, "default": null, "help": "The right CSS attribute.", "name": "right", "type": "string" }, { "allow_none": true, "default": null, "help": "The top CSS attribute.", "name": "top", "type": "string" }, { "allow_none": true, "default": null, "enum": ["visible", "hidden", "inherit", "initial", "unset"], "help": "The visibility CSS attribute.", "name": "visibility", "type": "string" }, { "allow_none": true, "default": null, "help": "The width CSS attribute.", "name": "width", "type": "string" } ], "model": { "module": "@jupyter-widgets/base", "name": "LayoutModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "LayoutView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "AccordionModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "AccordionView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the box.", "name": "box_style", "type": "string" }, { "default": [], "help": "List of widget children", "items": { "type": "reference", "widget": "Widget" }, "name": "children", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.", "name": "selected_index", "type": "int" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "default": [], "help": "Titles of the pages", "items": { "type": "string" }, "name": "titles", "type": "array" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "AccordionModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "AccordionView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "AudioModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "AudioView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "When true, the audio starts when it's displayed", "name": "autoplay", "type": "bool" }, { "default": true, "help": "Specifies that audio controls should be displayed (such as a play/pause button etc)", "name": "controls", "type": "bool" }, { "default": "mp3", "help": "The format of the audio.", "name": "format", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": true, "help": "When true, the audio will start from the beginning after finishing", "name": "loop", "type": "bool" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "b''", "help": "The media data as a memory view of bytes.", "name": "value", "type": "bytes" } ], "model": { "module": "@jupyter-widgets/controls", "name": "AudioModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "AudioView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "BoundedFloatTextModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "FloatTextView", "help": "", "name": "_view_name", "type": "string" }, { "default": false, "help": "Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100.0, "help": "Max value", "name": "max", "type": "float" }, { "default": 0.0, "help": "Min value", "name": "min", "type": "float" }, { "allow_none": true, "default": null, "help": "Minimum step to increment the value", "name": "step", "type": "float" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0.0, "help": "Float value", "name": "value", "type": "float" } ], "model": { "module": "@jupyter-widgets/controls", "name": "BoundedFloatTextModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "FloatTextView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "BoundedIntTextModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "IntTextView", "help": "", "name": "_view_name", "type": "string" }, { "default": false, "help": "Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100, "help": "Max value", "name": "max", "type": "int" }, { "default": 0, "help": "Min value", "name": "min", "type": "int" }, { "default": 1, "help": "Minimum step to increment the value", "name": "step", "type": "int" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0, "help": "Int value", "name": "value", "type": "int" } ], "model": { "module": "@jupyter-widgets/controls", "name": "BoundedIntTextModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "IntTextView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "BoxModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "BoxView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the box.", "name": "box_style", "type": "string" }, { "default": [], "help": "List of widget children", "items": { "type": "reference", "widget": "Widget" }, "name": "children", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "BoxModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "BoxView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ButtonModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ButtonView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["primary", "success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the button.", "name": "button_style", "type": "string" }, { "default": "", "help": "Button label.", "name": "description", "type": "string" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": "", "help": "Font-awesome icon names, without the 'fa-' prefix.", "name": "icon", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "ButtonStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ButtonModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ButtonView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ButtonStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": null, "help": "Color of the button", "name": "button_color", "type": "string" }, { "allow_none": true, "default": null, "help": "Button text font family.", "name": "font_family", "type": "string" }, { "allow_none": true, "default": null, "help": "Button text font size.", "name": "font_size", "type": "string" }, { "allow_none": true, "default": null, "help": "Button text font style.", "name": "font_style", "type": "string" }, { "allow_none": true, "default": null, "help": "Button text font variant.", "name": "font_variant", "type": "string" }, { "allow_none": true, "default": null, "help": "Button text font weight.", "name": "font_weight", "type": "string" }, { "allow_none": true, "default": null, "help": "Button text color.", "name": "text_color", "type": "string" }, { "allow_none": true, "default": null, "help": "Button text decoration.", "name": "text_decoration", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ButtonStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "CheckboxModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "CheckboxView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": true, "help": "Indent the control to align with other controls with a description.", "name": "indent", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "CheckboxStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": false, "help": "Bool value", "name": "value", "type": "bool" } ], "model": { "module": "@jupyter-widgets/controls", "name": "CheckboxModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "CheckboxView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "CheckboxStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": null, "help": "Background specifications.", "name": "background", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "CheckboxStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ColorPickerModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ColorPickerView", "help": "", "name": "_view_name", "type": "string" }, { "default": false, "help": "Display short version with just a color selector.", "name": "concise", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "black", "help": "The color value.", "name": "value", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ColorPickerModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ColorPickerView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ColorsInputModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ColorsInputView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "", "name": "allow_duplicates", "type": "bool" }, { "default": [], "help": "", "name": "allowed_tags", "type": "array" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "\u200b", "help": "", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": [], "help": "List of string tags", "name": "value", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ColorsInputModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ColorsInputView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ComboboxModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ComboboxView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": false, "help": "If set, ensure value is in options. Implies continuous_update=False.", "name": "ensure_option", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": [], "help": "Dropdown options for the combobox", "items": { "type": "string" }, "name": "options", "type": "array" }, { "default": "\u200b", "help": "Placeholder text to display when nothing has been typed", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "TextStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "", "help": "String value", "name": "value", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ComboboxModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ComboboxView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ControllerAxisModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ControllerAxisView", "help": "", "name": "_view_name", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0.0, "help": "The value of the axis.", "name": "value", "type": "float" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ControllerAxisModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ControllerAxisView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ControllerButtonModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ControllerButtonView", "help": "", "name": "_view_name", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": false, "help": "Whether the button is pressed.", "name": "pressed", "type": "bool" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0.0, "help": "The value of the button.", "name": "value", "type": "float" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ControllerButtonModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ControllerButtonView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ControllerModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ControllerView", "help": "", "name": "_view_name", "type": "string" }, { "default": [], "help": "The axes on the gamepad.", "items": { "type": "reference", "widget": "Axis" }, "name": "axes", "type": "array" }, { "default": [], "help": "The buttons on the gamepad.", "items": { "type": "reference", "widget": "Button" }, "name": "buttons", "type": "array" }, { "default": false, "help": "Whether the gamepad is connected.", "name": "connected", "type": "bool" }, { "default": 0, "help": "The id number of the controller.", "name": "index", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "", "help": "The name of the control mapping.", "name": "mapping", "type": "string" }, { "default": "", "help": "The name of the controller.", "name": "name", "type": "string" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "default": 0.0, "help": "The last time the data from this gamepad was updated.", "name": "timestamp", "type": "float" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ControllerModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ControllerView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "DOMWidgetModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "allow_none": true, "default": null, "help": "Name of the view.", "name": "_view_name", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "b''", "help": "The media data as a memory view of bytes.", "name": "value", "type": "bytes" } ], "model": { "module": "@jupyter-widgets/controls", "name": "DOMWidgetModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": null, "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "DatePickerModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "DatePickerView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "", "name": "max", "type": "Date" }, { "allow_none": true, "default": null, "help": "", "name": "min", "type": "Date" }, { "default": 1, "help": "The date step to use for the picker, in days, or \"any\".", "name": "step", "type": ["int", "string"], "union_attributes": [ { "type": "int" }, { "enum": ["any"], "type": "string" } ] }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "allow_none": true, "default": null, "help": "", "name": "value", "type": "Date" } ], "model": { "module": "@jupyter-widgets/controls", "name": "DatePickerModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "DatePickerView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "DatetimeModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "DatetimeView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "", "name": "max", "type": "Datetime" }, { "allow_none": true, "default": null, "help": "", "name": "min", "type": "Datetime" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "allow_none": true, "default": null, "help": "", "name": "value", "type": "Datetime" } ], "model": { "module": "@jupyter-widgets/controls", "name": "DatetimeModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "DatetimeView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "DescriptionStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "DescriptionStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "DirectionalLinkModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "allow_none": true, "default": null, "help": "Name of the view.", "name": "_view_name", "type": "string" }, { "default": [], "help": "The source (widget, 'trait_name') pair", "name": "source", "type": "array" }, { "default": [], "help": "The target (widget, 'trait_name') pair", "name": "target", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "DirectionalLinkModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": null, "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "DropdownModel", "help": "", "name": "_model_name", "type": "string" }, { "default": [], "help": "The labels for the options.", "items": { "type": "string" }, "name": "_options_labels", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "DropdownView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "allow_none": true, "default": null, "help": "Selected index", "name": "index", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "DropdownModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "DropdownView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "FileUploadModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "FileUploadView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "File types to accept, empty string for all", "name": "accept", "type": "string" }, { "default": "", "enum": ["primary", "success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the button.", "name": "button_style", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable button", "name": "disabled", "type": "bool" }, { "default": "", "help": "Error message", "name": "error", "type": "string" }, { "default": "upload", "help": "Font-awesome icon name, without the 'fa-' prefix.", "name": "icon", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": false, "help": "If True, allow for multiple files upload", "name": "multiple", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "ButtonStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": [], "help": "The file upload value", "items": { "type": "object" }, "name": "value", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "FileUploadModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "FileUploadView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "FloatLogSliderModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "FloatLogSliderView", "help": "", "name": "_view_name", "type": "string" }, { "default": 10.0, "help": "Base for the logarithm", "name": "base", "type": "float" }, { "default": "drag-tap", "enum": ["drag-tap", "drag-snap", "tap", "drag", "snap"], "help": "Slider dragging behavior.", "name": "behavior", "type": "string" }, { "default": true, "help": "Update the value of the widget as the user is holding the slider.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 4.0, "help": "Max value for the exponent", "name": "max", "type": "float" }, { "default": 0.0, "help": "Min value for the exponent", "name": "min", "type": "float" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": true, "help": "Display the current value of the slider next to it.", "name": "readout", "type": "bool" }, { "default": ".3g", "help": "Format for the readout", "name": "readout_format", "type": "string" }, { "allow_none": true, "default": 0.1, "help": "Minimum step in the exponent to increment the value", "name": "step", "type": "float" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "SliderStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 1.0, "help": "Float value", "name": "value", "type": "float" } ], "model": { "module": "@jupyter-widgets/controls", "name": "FloatLogSliderModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "FloatLogSliderView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "FloatProgressModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ProgressView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the progress bar.", "name": "bar_style", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100.0, "help": "Max value", "name": "max", "type": "float" }, { "default": 0.0, "help": "Min value", "name": "min", "type": "float" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "ProgressStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0.0, "help": "Float value", "name": "value", "type": "float" } ], "model": { "module": "@jupyter-widgets/controls", "name": "FloatProgressModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ProgressView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "FloatRangeSliderModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "FloatRangeSliderView", "help": "", "name": "_view_name", "type": "string" }, { "default": "drag-tap", "enum": ["drag-tap", "drag-snap", "tap", "drag", "snap"], "help": "Slider dragging behavior.", "name": "behavior", "type": "string" }, { "default": true, "help": "Update the value of the widget as the user is sliding the slider.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100.0, "help": "Max value", "name": "max", "type": "float" }, { "default": 0.0, "help": "Min value", "name": "min", "type": "float" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": true, "help": "Display the current value of the slider next to it.", "name": "readout", "type": "bool" }, { "default": ".2f", "help": "Format for the readout", "name": "readout_format", "type": "string" }, { "allow_none": true, "default": 0.1, "help": "Minimum step to increment the value", "name": "step", "type": "float" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "SliderStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": [0.0, 1.0], "help": "Tuple of (lower, upper) bounds", "name": "value", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "FloatRangeSliderModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "FloatRangeSliderView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "FloatSliderModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "FloatSliderView", "help": "", "name": "_view_name", "type": "string" }, { "default": "drag-tap", "enum": ["drag-tap", "drag-snap", "tap", "drag", "snap"], "help": "Slider dragging behavior.", "name": "behavior", "type": "string" }, { "default": true, "help": "Update the value of the widget as the user is holding the slider.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100.0, "help": "Max value", "name": "max", "type": "float" }, { "default": 0.0, "help": "Min value", "name": "min", "type": "float" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": true, "help": "Display the current value of the slider next to it.", "name": "readout", "type": "bool" }, { "default": ".2f", "help": "Format for the readout", "name": "readout_format", "type": "string" }, { "allow_none": true, "default": 0.1, "help": "Minimum step to increment the value", "name": "step", "type": "float" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "SliderStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0.0, "help": "Float value", "name": "value", "type": "float" } ], "model": { "module": "@jupyter-widgets/controls", "name": "FloatSliderModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "FloatSliderView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "FloatTextModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "FloatTextView", "help": "", "name": "_view_name", "type": "string" }, { "default": false, "help": "Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "Minimum step to increment the value", "name": "step", "type": "float" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0.0, "help": "Float value", "name": "value", "type": "float" } ], "model": { "module": "@jupyter-widgets/controls", "name": "FloatTextModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "FloatTextView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "FloatsInputModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "FloatsInputView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "", "name": "allow_duplicates", "type": "bool" }, { "default": [], "help": "", "name": "allowed_tags", "type": "array" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": ".1f", "help": "", "name": "format", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "", "name": "max", "type": "float" }, { "allow_none": true, "default": null, "help": "", "name": "min", "type": "float" }, { "default": "\u200b", "help": "", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "default": "", "enum": ["primary", "success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the tags.", "name": "tag_style", "type": "string" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": [], "help": "List of float tags", "name": "value", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "FloatsInputModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "FloatsInputView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "GridBoxModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "GridBoxView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the box.", "name": "box_style", "type": "string" }, { "default": [], "help": "List of widget children", "items": { "type": "reference", "widget": "Widget" }, "name": "children", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "GridBoxModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "GridBoxView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "HBoxModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "HBoxView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the box.", "name": "box_style", "type": "string" }, { "default": [], "help": "List of widget children", "items": { "type": "reference", "widget": "Widget" }, "name": "children", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "HBoxModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "HBoxView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "HTMLMathModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "HTMLMathView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "\u200b", "help": "Placeholder text to display when nothing has been typed", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "HTMLMathStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "", "help": "String value", "name": "value", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "HTMLMathModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "HTMLMathView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "HTMLMathStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": null, "help": "Background specifications.", "name": "background", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" }, { "allow_none": true, "default": null, "help": "Text font size.", "name": "font_size", "type": "string" }, { "allow_none": true, "default": null, "help": "Text color", "name": "text_color", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "HTMLMathStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "HTMLModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "HTMLView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "\u200b", "help": "Placeholder text to display when nothing has been typed", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "HTMLStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "", "help": "String value", "name": "value", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "HTMLModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "HTMLView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "HTMLStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": null, "help": "Background specifications.", "name": "background", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" }, { "allow_none": true, "default": null, "help": "Text font size.", "name": "font_size", "type": "string" }, { "allow_none": true, "default": null, "help": "Text color", "name": "text_color", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "HTMLStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ImageModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ImageView", "help": "", "name": "_view_name", "type": "string" }, { "default": "png", "help": "The format of the image.", "name": "format", "type": "string" }, { "default": "", "help": "Height of the image in pixels. Use layout.height for styling the widget.", "name": "height", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "b''", "help": "The media data as a memory view of bytes.", "name": "value", "type": "bytes" }, { "default": "", "help": "Width of the image in pixels. Use layout.width for styling the widget.", "name": "width", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ImageModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ImageView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "IntProgressModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ProgressView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the progress bar.", "name": "bar_style", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100, "help": "Max value", "name": "max", "type": "int" }, { "default": 0, "help": "Min value", "name": "min", "type": "int" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "ProgressStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0, "help": "Int value", "name": "value", "type": "int" } ], "model": { "module": "@jupyter-widgets/controls", "name": "IntProgressModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ProgressView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "IntRangeSliderModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "IntRangeSliderView", "help": "", "name": "_view_name", "type": "string" }, { "default": "drag-tap", "enum": ["drag-tap", "drag-snap", "tap", "drag", "snap"], "help": "Slider dragging behavior.", "name": "behavior", "type": "string" }, { "default": true, "help": "Update the value of the widget as the user is sliding the slider.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100, "help": "Max value", "name": "max", "type": "int" }, { "default": 0, "help": "Min value", "name": "min", "type": "int" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": true, "help": "Display the current value of the slider next to it.", "name": "readout", "type": "bool" }, { "default": "d", "help": "Format for the readout", "name": "readout_format", "type": "string" }, { "default": 1, "help": "Minimum step that the value can take", "name": "step", "type": "int" }, { "default": "reference to new instance", "help": "Slider style customizations.", "name": "style", "type": "reference", "widget": "SliderStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": [0, 1], "help": "Tuple of (lower, upper) bounds", "name": "value", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "IntRangeSliderModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "IntRangeSliderView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "IntSliderModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "IntSliderView", "help": "", "name": "_view_name", "type": "string" }, { "default": "drag-tap", "enum": ["drag-tap", "drag-snap", "tap", "drag", "snap"], "help": "Slider dragging behavior.", "name": "behavior", "type": "string" }, { "default": true, "help": "Update the value of the widget as the user is holding the slider.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100, "help": "Max value", "name": "max", "type": "int" }, { "default": 0, "help": "Min value", "name": "min", "type": "int" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": true, "help": "Display the current value of the slider next to it.", "name": "readout", "type": "bool" }, { "default": "d", "help": "Format for the readout", "name": "readout_format", "type": "string" }, { "default": 1, "help": "Minimum step to increment the value", "name": "step", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "SliderStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0, "help": "Int value", "name": "value", "type": "int" } ], "model": { "module": "@jupyter-widgets/controls", "name": "IntSliderModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "IntSliderView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "IntTextModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "IntTextView", "help": "", "name": "_view_name", "type": "string" }, { "default": false, "help": "Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 1, "help": "Minimum step to increment the value", "name": "step", "type": "int" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0, "help": "Int value", "name": "value", "type": "int" } ], "model": { "module": "@jupyter-widgets/controls", "name": "IntTextModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "IntTextView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "IntsInputModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "IntsInputView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "", "name": "allow_duplicates", "type": "bool" }, { "default": [], "help": "", "name": "allowed_tags", "type": "array" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": "d", "help": "", "name": "format", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "", "name": "max", "type": "int" }, { "allow_none": true, "default": null, "help": "", "name": "min", "type": "int" }, { "default": "\u200b", "help": "", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "default": "", "enum": ["primary", "success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the tags.", "name": "tag_style", "type": "string" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": [], "help": "List of int tags", "name": "value", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "IntsInputModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "IntsInputView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "LabelModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "LabelView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "\u200b", "help": "Placeholder text to display when nothing has been typed", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "LabelStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "", "help": "String value", "name": "value", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "LabelModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "LabelView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "LabelStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": null, "help": "Background specifications.", "name": "background", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" }, { "allow_none": true, "default": null, "help": "Label text font family.", "name": "font_family", "type": "string" }, { "allow_none": true, "default": null, "help": "Text font size.", "name": "font_size", "type": "string" }, { "allow_none": true, "default": null, "help": "Label text font style.", "name": "font_style", "type": "string" }, { "allow_none": true, "default": null, "help": "Label text font variant.", "name": "font_variant", "type": "string" }, { "allow_none": true, "default": null, "help": "Label text font weight.", "name": "font_weight", "type": "string" }, { "allow_none": true, "default": null, "help": "Text color", "name": "text_color", "type": "string" }, { "allow_none": true, "default": null, "help": "Label text decoration.", "name": "text_decoration", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "LabelStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "LinkModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "allow_none": true, "default": null, "help": "Name of the view.", "name": "_view_name", "type": "string" }, { "default": [], "help": "The source (widget, 'trait_name') pair", "name": "source", "type": "array" }, { "default": [], "help": "The target (widget, 'trait_name') pair", "name": "target", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "LinkModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": null, "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "NaiveDatetimeModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "DatetimeView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "", "name": "max", "type": "Datetime" }, { "allow_none": true, "default": null, "help": "", "name": "min", "type": "Datetime" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "allow_none": true, "default": null, "help": "", "name": "value", "type": "Datetime" } ], "model": { "module": "@jupyter-widgets/controls", "name": "NaiveDatetimeModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "DatetimeView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "PasswordModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "PasswordView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "\u200b", "help": "Placeholder text to display when nothing has been typed", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "TextStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "", "help": "String value", "name": "value", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "PasswordModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "PasswordView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "PlayModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "PlayView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": 100, "help": "The time between two animation steps (ms).", "name": "interval", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 100, "help": "Max value", "name": "max", "type": "int" }, { "default": 0, "help": "Min value", "name": "min", "type": "int" }, { "default": false, "help": "Whether the control is currently playing.", "name": "playing", "type": "bool" }, { "default": false, "help": "Whether the control will repeat in a continuous loop.", "name": "repeat", "type": "bool" }, { "default": true, "help": "Show the repeat toggle button in the widget.", "name": "show_repeat", "type": "bool" }, { "default": 1, "help": "Increment step", "name": "step", "type": "int" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": 0, "help": "Int value", "name": "value", "type": "int" } ], "model": { "module": "@jupyter-widgets/controls", "name": "PlayModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "PlayView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ProgressStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": null, "help": "Color of the progress bar.", "name": "bar_color", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ProgressStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "RadioButtonsModel", "help": "", "name": "_model_name", "type": "string" }, { "default": [], "help": "The labels for the options.", "items": { "type": "string" }, "name": "_options_labels", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "RadioButtonsView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "allow_none": true, "default": null, "help": "Selected index", "name": "index", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "vertical", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "RadioButtonsModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "RadioButtonsView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "SelectModel", "help": "", "name": "_model_name", "type": "string" }, { "default": [], "help": "The labels for the options.", "items": { "type": "string" }, "name": "_options_labels", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "SelectView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "allow_none": true, "default": null, "help": "Selected index", "name": "index", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 5, "help": "The number of rows to display.", "name": "rows", "type": "int" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "SelectModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "SelectView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "SelectMultipleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": [], "help": "The labels for the options.", "items": { "type": "string" }, "name": "_options_labels", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "SelectMultipleView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": [], "help": "Selected indices", "items": { "type": "int" }, "name": "index", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": 5, "help": "The number of rows to display.", "name": "rows", "type": "int" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "SelectMultipleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "SelectMultipleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "SelectionRangeSliderModel", "help": "", "name": "_model_name", "type": "string" }, { "default": [], "help": "The labels for the options.", "items": { "type": "string" }, "name": "_options_labels", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "SelectionRangeSliderView", "help": "", "name": "_view_name", "type": "string" }, { "default": "drag-tap", "enum": ["drag-tap", "drag-snap", "tap", "drag", "snap"], "help": "Slider dragging behavior.", "name": "behavior", "type": "string" }, { "default": true, "help": "Update the value of the widget as the user is holding the slider.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": [0, 0], "help": "Min and max selected indices", "name": "index", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": true, "help": "Display the current selected label next to the slider", "name": "readout", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "SliderStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "SelectionRangeSliderModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "SelectionRangeSliderView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "SelectionSliderModel", "help": "", "name": "_model_name", "type": "string" }, { "default": [], "help": "The labels for the options.", "items": { "type": "string" }, "name": "_options_labels", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "SelectionSliderView", "help": "", "name": "_view_name", "type": "string" }, { "default": "drag-tap", "enum": ["drag-tap", "drag-snap", "tap", "drag", "snap"], "help": "Slider dragging behavior.", "name": "behavior", "type": "string" }, { "default": true, "help": "Update the value of the widget as the user is holding the slider.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": 0, "help": "Selected index", "name": "index", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "horizontal", "enum": ["horizontal", "vertical"], "help": "Vertical or horizontal.", "name": "orientation", "type": "string" }, { "default": true, "help": "Display the current selected label next to the slider", "name": "readout", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "SliderStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "SelectionSliderModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "SelectionSliderView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "SliderStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" }, { "allow_none": true, "default": null, "help": "Color of the slider handle.", "name": "handle_color", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "SliderStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "StackModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StackView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the box.", "name": "box_style", "type": "string" }, { "default": [], "help": "List of widget children", "items": { "type": "reference", "widget": "Widget" }, "name": "children", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.", "name": "selected_index", "type": "int" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "default": [], "help": "Titles of the pages", "items": { "type": "string" }, "name": "titles", "type": "array" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "StackModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "StackView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "TabModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "TabView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the box.", "name": "box_style", "type": "string" }, { "default": [], "help": "List of widget children", "items": { "type": "reference", "widget": "Widget" }, "name": "children", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected.", "name": "selected_index", "type": "int" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "default": [], "help": "Titles of the pages", "items": { "type": "string" }, "name": "titles", "type": "array" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "TabModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "TabView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "TagsInputModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "TagsInputView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "", "name": "allow_duplicates", "type": "bool" }, { "default": [], "help": "", "name": "allowed_tags", "type": "array" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "\u200b", "help": "", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "default": "", "enum": ["primary", "success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the tags.", "name": "tag_style", "type": "string" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": [], "help": "List of string tags", "name": "value", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "TagsInputModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "TagsInputView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "TextModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "TextView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "\u200b", "help": "Placeholder text to display when nothing has been typed", "name": "placeholder", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "TextStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "", "help": "String value", "name": "value", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "TextModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "TextView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "TextStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": null, "help": "Background specifications.", "name": "background", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" }, { "allow_none": true, "default": null, "help": "Text font size.", "name": "font_size", "type": "string" }, { "allow_none": true, "default": null, "help": "Text color", "name": "text_color", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "TextStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "TextareaModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "TextareaView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away.", "name": "continuous_update", "type": "bool" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "\u200b", "help": "Placeholder text to display when nothing has been typed", "name": "placeholder", "type": "string" }, { "allow_none": true, "default": null, "help": "The number of rows to display.", "name": "rows", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "TextStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "", "help": "String value", "name": "value", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "TextareaModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "TextareaView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "TimeModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "TimeView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "", "name": "max", "type": "Time" }, { "allow_none": true, "default": null, "help": "", "name": "min", "type": "Time" }, { "default": 60, "help": "The time step to use for the picker, in seconds, or \"any\".", "name": "step", "type": ["float", "string"], "union_attributes": [ { "type": "float" }, { "enum": ["any"], "type": "string" } ] }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "allow_none": true, "default": null, "help": "", "name": "value", "type": "Time" } ], "model": { "module": "@jupyter-widgets/controls", "name": "TimeModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "TimeView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ToggleButtonModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ToggleButtonView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["primary", "success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the button.", "name": "button_style", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": "", "help": "Font-awesome icon.", "name": "icon", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "ToggleButtonStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": false, "help": "Bool value", "name": "value", "type": "bool" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ToggleButtonModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ToggleButtonView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ToggleButtonStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" }, { "allow_none": true, "default": null, "help": "Toggle button text font family.", "name": "font_family", "type": "string" }, { "allow_none": true, "default": null, "help": "Toggle button text font size.", "name": "font_size", "type": "string" }, { "allow_none": true, "default": null, "help": "Toggle button text font style.", "name": "font_style", "type": "string" }, { "allow_none": true, "default": null, "help": "Toggle button text font variant.", "name": "font_variant", "type": "string" }, { "allow_none": true, "default": null, "help": "Toggle button text font weight.", "name": "font_weight", "type": "string" }, { "allow_none": true, "default": null, "help": "Toggle button text color", "name": "text_color", "type": "string" }, { "allow_none": true, "default": null, "help": "Toggle button text decoration.", "name": "text_decoration", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ToggleButtonStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ToggleButtonsModel", "help": "", "name": "_model_name", "type": "string" }, { "default": [], "help": "The labels for the options.", "items": { "type": "string" }, "name": "_options_labels", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ToggleButtonsView", "help": "", "name": "_view_name", "type": "string" }, { "allow_none": true, "default": "", "enum": ["primary", "success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the buttons.", "name": "button_style", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes", "name": "disabled", "type": "bool" }, { "default": [], "help": "Icons names for each button (FontAwesome names without the fa- prefix).", "items": { "type": "string" }, "name": "icons", "type": "array" }, { "allow_none": true, "default": null, "help": "Selected index", "name": "index", "type": "int" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "reference to new instance", "help": "", "name": "style", "type": "reference", "widget": "ToggleButtonsStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": [], "help": "Tooltips for each button.", "items": { "type": "string" }, "name": "tooltips", "type": "array" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ToggleButtonsModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ToggleButtonsView", "version": "2.0.0" } }, { "attributes": [ { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ToggleButtonsStyleModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/base", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "StyleView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "The width of each button.", "name": "button_width", "type": "string" }, { "default": "", "help": "Width of the description to the side of the control.", "name": "description_width", "type": "string" }, { "default": "", "help": "Text font weight of each button.", "name": "font_weight", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ToggleButtonsStyleModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/base", "name": "StyleView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "VBoxModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "VBoxView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "enum": ["success", "info", "warning", "danger", ""], "help": "Use a predefined styling for the box.", "name": "box_style", "type": "string" }, { "default": [], "help": "List of widget children", "items": { "type": "reference", "widget": "Widget" }, "name": "children", "type": "array" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "VBoxModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "VBoxView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "ValidModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "ValidView", "help": "", "name": "_view_name", "type": "string" }, { "default": "", "help": "Description of the control.", "name": "description", "type": "string" }, { "default": false, "help": "Accept HTML in the description.", "name": "description_allow_html", "type": "bool" }, { "default": false, "help": "Enable or disable user changes.", "name": "disabled", "type": "bool" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "Invalid", "help": "Message displayed when the value is False", "name": "readout", "type": "string" }, { "default": "reference to new instance", "help": "Styling customizations", "name": "style", "type": "reference", "widget": "DescriptionStyle" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": false, "help": "Bool value", "name": "value", "type": "bool" } ], "model": { "module": "@jupyter-widgets/controls", "name": "ValidModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "ValidView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_model_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "VideoModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/controls", "help": "", "name": "_view_module", "type": "string" }, { "default": "2.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "VideoView", "help": "", "name": "_view_name", "type": "string" }, { "default": true, "help": "When true, the video starts when it's displayed", "name": "autoplay", "type": "bool" }, { "default": true, "help": "Specifies that video controls should be displayed (such as a play/pause button etc)", "name": "controls", "type": "bool" }, { "default": "mp4", "help": "The format of the video.", "name": "format", "type": "string" }, { "default": "", "help": "Height of the video in pixels.", "name": "height", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": true, "help": "When true, the video will start from the beginning after finishing", "name": "loop", "type": "bool" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" }, { "default": "b''", "help": "The media data as a memory view of bytes.", "name": "value", "type": "bytes" }, { "default": "", "help": "Width of the video in pixels.", "name": "width", "type": "string" } ], "model": { "module": "@jupyter-widgets/controls", "name": "VideoModel", "version": "2.0.0" }, "view": { "module": "@jupyter-widgets/controls", "name": "VideoView", "version": "2.0.0" } }, { "attributes": [ { "default": [], "help": "CSS classes applied to widget DOM element", "items": { "type": "string" }, "name": "_dom_classes", "type": "array" }, { "default": "@jupyter-widgets/output", "help": "", "name": "_model_module", "type": "string" }, { "default": "1.0.0", "help": "", "name": "_model_module_version", "type": "string" }, { "default": "OutputModel", "help": "", "name": "_model_name", "type": "string" }, { "default": "@jupyter-widgets/output", "help": "", "name": "_view_module", "type": "string" }, { "default": "1.0.0", "help": "", "name": "_view_module_version", "type": "string" }, { "default": "OutputView", "help": "", "name": "_view_name", "type": "string" }, { "default": "reference to new instance", "help": "", "name": "layout", "type": "reference", "widget": "Layout" }, { "default": "", "help": "Parent message id of messages to capture", "name": "msg_id", "type": "string" }, { "default": [], "help": "The output messages synced from the frontend.", "items": { "type": "object" }, "name": "outputs", "type": "array" }, { "allow_none": true, "default": null, "help": "Is widget tabbable?", "name": "tabbable", "type": "bool" }, { "allow_none": true, "default": null, "help": "A tooltip caption.", "name": "tooltip", "type": "string" } ], "model": { "module": "@jupyter-widgets/output", "name": "OutputModel", "version": "1.0.0" }, "view": { "module": "@jupyter-widgets/output", "name": "OutputView", "version": "1.0.0" } } ] ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.latest.md000066400000000000000000006061361466162644600247150ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 8. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ### LayoutModel (@jupyter-widgets/base, 2.0.0); LayoutView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/base'` | The namespace for the model. | | `_model_module_version` | string | `'2.0.0'` | A semver requirement for namespace version containing the model. | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-content CSS attribute. | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-items CSS attribute. | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-self CSS attribute. | | `border_bottom` | `null` or string | `null` | The border bottom CSS attribute. | | `border_left` | `null` or string | `null` | The border left CSS attribute. | | `border_right` | `null` or string | `null` | The border right CSS attribute. | | `border_top` | `null` or string | `null` | The border top CSS attribute. | | `bottom` | `null` or string | `null` | The bottom CSS attribute. | | `display` | `null` or string | `null` | The display CSS attribute. | | `flex` | `null` or string | `null` | The flex CSS attribute. | | `flex_flow` | `null` or string | `null` | The flex-flow CSS attribute. | | `grid_area` | `null` or string | `null` | The grid-area CSS attribute. | | `grid_auto_columns` | `null` or string | `null` | The grid-auto-columns CSS attribute. | | `grid_auto_flow` | `null` or string (one of `'column'`, `'row'`, `'row dense'`, `'column dense'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The grid-auto-flow CSS attribute. | | `grid_auto_rows` | `null` or string | `null` | The grid-auto-rows CSS attribute. | | `grid_column` | `null` or string | `null` | The grid-column CSS attribute. | | `grid_gap` | `null` or string | `null` | The grid-gap CSS attribute. | | `grid_row` | `null` or string | `null` | The grid-row CSS attribute. | | `grid_template_areas` | `null` or string | `null` | The grid-template-areas CSS attribute. | | `grid_template_columns` | `null` or string | `null` | The grid-template-columns CSS attribute. | | `grid_template_rows` | `null` or string | `null` | The grid-template-rows CSS attribute. | | `height` | `null` or string | `null` | The height CSS attribute. | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-content CSS attribute. | | `justify_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-items CSS attribute. | | `left` | `null` or string | `null` | The left CSS attribute. | | `margin` | `null` or string | `null` | The margin CSS attribute. | | `max_height` | `null` or string | `null` | The max-height CSS attribute. | | `max_width` | `null` or string | `null` | The max-width CSS attribute. | | `min_height` | `null` or string | `null` | The min-height CSS attribute. | | `min_width` | `null` or string | `null` | The min-width CSS attribute. | | `object_fit` | `null` or string (one of `'contain'`, `'cover'`, `'fill'`, `'scale-down'`, `'none'`) | `null` | The object-fit CSS attribute. | | `object_position` | `null` or string | `null` | The object-position CSS attribute. | | `order` | `null` or string | `null` | The order CSS attribute. | | `overflow` | `null` or string | `null` | The overflow CSS attribute. | | `padding` | `null` or string | `null` | The padding CSS attribute. | | `right` | `null` or string | `null` | The right CSS attribute. | | `top` | `null` or string | `null` | The top CSS attribute. | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The visibility CSS attribute. | | `width` | `null` or string | `null` | The width CSS attribute. | ### AccordionModel (@jupyter-widgets/controls, 2.0.0); AccordionView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'AccordionModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `titles` | array of string | `[]` | Titles of the pages | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### AudioModel (@jupyter-widgets/controls, 2.0.0); AudioView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'AudioModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'AudioView'` | | `autoplay` | boolean | `true` | When true, the audio starts when it's displayed | | `controls` | boolean | `true` | Specifies that audio controls should be displayed (such as a play/pause button etc) | | `format` | string | `'mp3'` | The format of the audio. | | `layout` | reference to Layout widget | reference to new instance | | `loop` | boolean | `true` | When true, the audio will start from the beginning after finishing | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | Bytes | `b''` | The media data as a memory view of bytes. | ### BoundedFloatTextModel (@jupyter-widgets/controls, 2.0.0); FloatTextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'BoundedFloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | Float value | ### BoundedIntTextModel (@jupyter-widgets/controls, 2.0.0); IntTextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'BoundedIntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### BoxModel (@jupyter-widgets/controls, 2.0.0); BoxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### ButtonModel (@jupyter-widgets/controls, 2.0.0); ButtonView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | -------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon names, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ButtonStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### ButtonStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_family` | `null` or string | `null` | Button text font family. | | `font_size` | `null` or string | `null` | Button text font size. | | `font_style` | `null` or string | `null` | Button text font style. | | `font_variant` | `null` or string | `null` | Button text font variant. | | `font_weight` | `null` or string | `null` | Button text font weight. | | `text_color` | `null` or string | `null` | Button text color. | | `text_decoration` | `null` or string | `null` | Button text decoration. | ### CheckboxModel (@jupyter-widgets/controls, 2.0.0); CheckboxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------- | ----------------------------- | ------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `indent` | boolean | `true` | Indent the control to align with other controls with a description. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to CheckboxStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | boolean | `false` | Bool value | ### CheckboxStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'CheckboxStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### ColorPickerModel (@jupyter-widgets/controls, 2.0.0); ColorPickerView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | Display short version with just a color selector. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `'black'` | The color value. | ### ColorsInputModel (@jupyter-widgets/controls, 2.0.0); ColorsInputView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ColorsInputModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ColorsInputView'` | | `allow_duplicates` | boolean | `true` | | `allowed_tags` | array | `[]` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[]` | List of string tags | ### ComboboxModel (@jupyter-widgets/controls, 2.0.0); ComboboxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ComboboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ComboboxView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `ensure_option` | boolean | `false` | If set, ensure value is in options. Implies continuous_update=False. | | `layout` | reference to Layout widget | reference to new instance | | `options` | array of string | `[]` | Dropdown options for the combobox | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to TextStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### ControllerAxisModel (@jupyter-widgets/controls, 2.0.0); ControllerAxisView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | The value of the axis. | ### ControllerButtonModel (@jupyter-widgets/controls, 2.0.0); ControllerButtonView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `layout` | reference to Layout widget | reference to new instance | | `pressed` | boolean | `false` | Whether the button is pressed. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | The value of the button. | ### ControllerModel (@jupyter-widgets/controls, 2.0.0); ControllerView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ----------------------------------- | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array of reference to Axis widget | `[]` | The axes on the gamepad. | | `buttons` | array of reference to Button widget | `[]` | The buttons on the gamepad. | | `connected` | boolean | `false` | Whether the gamepad is connected. | | `index` | number (integer) | `0` | The id number of the controller. | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | The name of the control mapping. | | `name` | string | `''` | The name of the controller. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `timestamp` | number (float) | `0.0` | The last time the data from this gamepad was updated. | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### DOMWidgetModel (@jupyter-widgets/controls, 2.0.0); None (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DOMWidgetModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | Bytes | `b''` | The media data as a memory view of bytes. | ### DatePickerModel (@jupyter-widgets/controls, 2.0.0); DatePickerView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------- | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or Date | `null` | | `min` | `null` or Date | `null` | | `step` | number (integer) or string (one of `'any'`) | `1` | The date step to use for the picker, in days, or "any". | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | `null` or Date | `null` | ### DatetimeModel (@jupyter-widgets/controls, 2.0.0); DatetimeView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DatetimeModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'DatetimeView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or Datetime | `null` | | `min` | `null` or Datetime | `null` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | `null` or Datetime | `null` | ### DescriptionStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DescriptionStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | ### DirectionalLinkModel (@jupyter-widgets/controls, 2.0.0); None (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### DropdownModel (@jupyter-widgets/controls, 2.0.0); DropdownView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### FileUploadModel (@jupyter-widgets/controls, 2.0.0); FileUploadView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FileUploadModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FileUploadView'` | | `accept` | string | `''` | File types to accept, empty string for all | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable button | | `error` | string | `''` | Error message | | `icon` | string | `'upload'` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `multiple` | boolean | `false` | If True, allow for multiple files upload | | `style` | reference to ButtonStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array of object | `[]` | The file upload value | ### FloatLogSliderModel (@jupyter-widgets/controls, 2.0.0); FloatLogSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatLogSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatLogSliderView'` | | `base` | number (float) | `10.0` | Base for the logarithm | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `4.0` | Max value for the exponent | | `min` | number (float) | `0.0` | Min value for the exponent | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.3g'` | Format for the readout | | `step` | `null` or number (float) | `0.1` | Minimum step in the exponent to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `1.0` | Float value | ### FloatProgressModel (@jupyter-widgets/controls, 2.0.0); ProgressView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------------ | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | Float value | ### FloatRangeSliderModel (@jupyter-widgets/controls, 2.0.0); FloatRangeSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatRangeSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | `null` or number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### FloatSliderModel (@jupyter-widgets/controls, 2.0.0); FloatSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | `null` or number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | Float value | ### FloatTextModel (@jupyter-widgets/controls, 2.0.0); FloatTextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | Float value | ### FloatsInputModel (@jupyter-widgets/controls, 2.0.0); FloatsInputView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatsInputModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatsInputView'` | | `allow_duplicates` | boolean | `true` | | `allowed_tags` | array | `[]` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `format` | string | `'.1f'` | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or number (float) | `null` | | `min` | `null` or number (float) | `null` | | `placeholder` | string | `'\u200b'` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tag_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the tags. | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[]` | List of float tags | ### GridBoxModel (@jupyter-widgets/controls, 2.0.0); GridBoxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'GridBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'GridBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### HBoxModel (@jupyter-widgets/controls, 2.0.0); HBoxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### HTMLMathModel (@jupyter-widgets/controls, 2.0.0); HTMLMathView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------- | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to HTMLMathStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### HTMLMathStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HTMLMathStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_size` | `null` or string | `null` | Text font size. | | `text_color` | `null` or string | `null` | Text color | ### HTMLModel (@jupyter-widgets/controls, 2.0.0); HTMLView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to HTMLStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### HTMLStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HTMLStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_size` | `null` or string | `null` | Text font size. | | `text_color` | `null` or string | `null` | Text color | ### ImageModel (@jupyter-widgets/controls, 2.0.0); ImageView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | The format of the image. | | `height` | string | `''` | Height of the image in pixels. Use layout.height for styling the widget. | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | Bytes | `b''` | The media data as a memory view of bytes. | | `width` | string | `''` | Width of the image in pixels. Use layout.width for styling the widget. | ### IntProgressModel (@jupyter-widgets/controls, 2.0.0); ProgressView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | -------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### IntRangeSliderModel (@jupyter-widgets/controls, 2.0.0); IntRangeSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntRangeSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step that the value can take | | `style` | reference to SliderStyle widget | reference to new instance | Slider style customizations. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### IntSliderModel (@jupyter-widgets/controls, 2.0.0); IntSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### IntTextModel (@jupyter-widgets/controls, 2.0.0); IntTextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### IntsInputModel (@jupyter-widgets/controls, 2.0.0); IntsInputView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntsInputModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntsInputView'` | | `allow_duplicates` | boolean | `true` | | `allowed_tags` | array | `[]` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `format` | string | `'d'` | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or number (integer) | `null` | | `min` | `null` or number (integer) | `null` | | `placeholder` | string | `'\u200b'` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tag_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the tags. | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[]` | List of int tags | ### LabelModel (@jupyter-widgets/controls, 2.0.0); LabelView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to LabelStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### LabelStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'LabelStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_family` | `null` or string | `null` | Label text font family. | | `font_size` | `null` or string | `null` | Text font size. | | `font_style` | `null` or string | `null` | Label text font style. | | `font_variant` | `null` or string | `null` | Label text font variant. | | `font_weight` | `null` or string | `null` | Label text font weight. | | `text_color` | `null` or string | `null` | Text color | | `text_decoration` | `null` or string | `null` | Label text decoration. | ### LinkModel (@jupyter-widgets/controls, 2.0.0); None (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### NaiveDatetimeModel (@jupyter-widgets/controls, 2.0.0); DatetimeView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'NaiveDatetimeModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'DatetimeView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or Datetime | `null` | | `min` | `null` or Datetime | `null` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | `null` or Datetime | `null` | ### PasswordModel (@jupyter-widgets/controls, 2.0.0); PasswordView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'PasswordModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'PasswordView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to TextStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### PlayModel (@jupyter-widgets/controls, 2.0.0); PlayView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'PlayModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | The time between two animation steps (ms). | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `playing` | boolean | `false` | Whether the control is currently playing. | | `repeat` | boolean | `false` | Whether the control will repeat in a continuous loop. | | `show_repeat` | boolean | `true` | Show the repeat toggle button in the widget. | | `step` | number (integer) | `1` | Increment step | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### ProgressStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | Color of the progress bar. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### RadioButtonsModel (@jupyter-widgets/controls, 2.0.0); RadioButtonsView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | -------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'vertical'` | Vertical or horizontal. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SelectModel (@jupyter-widgets/controls, 2.0.0); SelectView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SelectMultipleModel (@jupyter-widgets/controls, 2.0.0); SelectMultipleView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array of number (integer) | `[]` | Selected indices | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SelectionRangeSliderModel (@jupyter-widgets/controls, 2.0.0); SelectionRangeSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SelectionRangeSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'SelectionRangeSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[0, 0]` | Min and max selected indices | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SelectionSliderModel (@jupyter-widgets/controls, 2.0.0); SelectionSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | number (integer) | `0` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SliderStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `handle_color` | `null` or string | `null` | Color of the slider handle. | ### StackModel (@jupyter-widgets/controls, 2.0.0); StackView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'StackModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StackView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `titles` | array of string | `[]` | Titles of the pages | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### TabModel (@jupyter-widgets/controls, 2.0.0); TabView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TabModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `titles` | array of string | `[]` | Titles of the pages | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### TagsInputModel (@jupyter-widgets/controls, 2.0.0); TagsInputView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TagsInputModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TagsInputView'` | | `allow_duplicates` | boolean | `true` | | `allowed_tags` | array | `[]` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tag_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the tags. | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[]` | List of string tags | ### TextModel (@jupyter-widgets/controls, 2.0.0); TextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TextView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to TextStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### TextStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TextStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_size` | `null` or string | `null` | Text font size. | | `text_color` | `null` or string | `null` | Text color | ### TextareaModel (@jupyter-widgets/controls, 2.0.0); TextareaView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TextareaView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | The number of rows to display. | | `style` | reference to TextStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### TimeModel (@jupyter-widgets/controls, 2.0.0); TimeView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------------------- | ----------------------------- | ---------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TimeModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TimeView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or Time | `null` | | `min` | `null` or Time | `null` | | `step` | number (float) or string (one of `'any'`) | `60` | The time step to use for the picker, in seconds, or "any". | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | `null` or Time | `null` | ### ToggleButtonModel (@jupyter-widgets/controls, 2.0.0); ToggleButtonView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | boolean | `false` | Bool value | ### ToggleButtonStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ToggleButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_family` | `null` or string | `null` | Toggle button text font family. | | `font_size` | `null` or string | `null` | Toggle button text font size. | | `font_style` | `null` or string | `null` | Toggle button text font style. | | `font_variant` | `null` or string | `null` | Toggle button text font variant. | | `font_weight` | `null` or string | `null` | Toggle button text font weight. | | `text_color` | `null` or string | `null` | Toggle button text color | | `text_decoration` | `null` or string | `null` | Toggle button text decoration. | ### ToggleButtonsModel (@jupyter-widgets/controls, 2.0.0); ToggleButtonsView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array of string | `[]` | Icons names for each button (FontAwesome names without the fa- prefix). | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonsStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `tooltips` | array of string | `[]` | Tooltips for each button. | ### ToggleButtonsStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ToggleButtonsStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_width` | string | `''` | The width of each button. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_weight` | string | `''` | Text font weight of each button. | ### VBoxModel (@jupyter-widgets/controls, 2.0.0); VBoxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### ValidModel (@jupyter-widgets/controls, 2.0.0); ValidView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | boolean | `false` | Bool value | ### VideoModel (@jupyter-widgets/controls, 2.0.0); VideoView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'VideoModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'VideoView'` | | `autoplay` | boolean | `true` | When true, the video starts when it's displayed | | `controls` | boolean | `true` | Specifies that video controls should be displayed (such as a play/pause button etc) | | `format` | string | `'mp4'` | The format of the video. | | `height` | string | `''` | Height of the video in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `loop` | boolean | `true` | When true, the video will start from the beginning after finishing | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | Bytes | `b''` | The media data as a memory view of bytes. | | `width` | string | `''` | Width of the video in pixels. | ### OutputModel (@jupyter-widgets/output, 1.0.0); OutputView (@jupyter-widgets/output, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | --------------------------- | --------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/output'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'@jupyter-widgets/output'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `outputs` | array of object | `[]` | The output messages synced from the frontend. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.v6.md000066400000000000000000003300601466162644600237420ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 6.0 and jupyter-js-widgets 2.1.0. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the string the widget is registered with in the kernel. ### Jupyter.Accordion | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'AccordionModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `selected_index` | number (integer) | `0` | ### Jupyter.BoundedFloatText | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'FloatTextView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `step` | number (float) | `0.1` | Minimum step to increment the value (ignored by some views) | | `value` | number (float) | `0.0` | Float value | ### Jupyter.BoundedIntText | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'IntTextView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `step` | number (integer) | `1` | Minimum step to increment the value (ignored by some views) | | `value` | number (integer) | `0` | Int value | ### Jupyter.Box | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | ### Jupyter.Button | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `style` | reference to ButtonStyle widget | reference to new instance | | `tooltip` | string | `''` | Tooltip caption of the button. | ### Jupyter.ButtonStyle | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ---------------------- | --------------------------------------------------------------------------------------------- | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_weight` | string | `''` | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | ### Jupyter.Checkbox | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | boolean | `false` | Bool value | ### Jupyter.ColorPicker | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | string | `'black'` | ### Jupyter.Controller | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array | `[]` | | `buttons` | array | `[]` | | `connected` | boolean | `false` | | `index` | number (integer) | `0` | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `name` | string | `''` | | `timestamp` | number (float) | `0.0` | ### Jupyter.ControllerAxis | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------- | --------------------------------------------------------------------------------------------- | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | number (float) | `0.0` | ### Jupyter.ControllerButton | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `pressed` | boolean | `false` | | `value` | number (float) | `0.0` | ### Jupyter.DatePicker | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | `null` or Datetime | `null` | ### Jupyter.Dropdown | Attribute | Type | Default | Help | | ----------------------- | --------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array | `[]` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | string (valid option label) | `null` | Selected value | ### Jupyter.FloatProgress | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------ | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ProgressModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `step` | number (float) | `0.1` | Minimum step to increment the value (ignored by some views) | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### Jupyter.FloatRangeSlider | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_range` | boolean | `true` | Display a range selector | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'FloatSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `slider_color` | `null` or string | `null` | | `step` | number (float) | `1.0` | Minimum step that the value can take (ignored by some views) | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### Jupyter.FloatSlider | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_range` | boolean | `false` | Display a range selector | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'FloatSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `slider_color` | `null` or string | `null` | | `step` | number (float) | `0.1` | Minimum step to increment the value (ignored by some views) | | `value` | number (float) | `0.0` | Float value | ### Jupyter.FloatText | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'FloatTextView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | number (float) | `0.0` | Float value | ### Jupyter.HBox | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | ### Jupyter.HTML | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `value` | string | `''` | String value | ### Jupyter.HTMLMath | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `value` | string | `''` | String value | ### Jupyter.Image | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_b64value` | string | `''` | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | | `height` | string | `''` | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `width` | string | `''` | ### Jupyter.IntProgress | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ProgressModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `step` | number (integer) | `1` | Minimum step to increment the value (ignored by some views) | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### Jupyter.IntRangeSlider | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_range` | boolean | `true` | Display a range selector | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'IntSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `slider_color` | `null` or string | `null` | | `step` | number (integer) | `1` | Minimum step that the value can take (ignored by some views) | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### Jupyter.IntSlider | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_range` | boolean | `false` | Display a range selector | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'IntSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value (ignored by some views) | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### Jupyter.IntText | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'IntTextView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | number (integer) | `0` | Int value | ### Jupyter.Label | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `value` | string | `''` | String value | ### Jupyter.Play | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'PlayModel'` | | `_playing` | boolean | `false` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `step` | number (integer) | `1` | Minimum step to increment the value (ignored by some views) | | `value` | number (integer) | `0` | Int value | ### Jupyter.ProgressStyle | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ---------------------- | --------------------------------------------------------------------------------------------- | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | ### Jupyter.RadioButtons | Attribute | Type | Default | Help | | ----------------------- | --------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array | `[]` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | string (valid option label) | `null` | Selected value | ### Jupyter.Select | Attribute | Type | Default | Help | | ----------------------- | --------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array | `[]` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | string (valid option label) | `null` | Selected value | ### Jupyter.SelectMultiple | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array | `[]` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `value` | array | `[]` | Selected values | ### Jupyter.SelectionSlider | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array | `[]` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `value` | string (valid option label) | `null` | Selected value | ### Jupyter.SliderStyle | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ---------------------- | --------------------------------------------------------------------------------------------- | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'StyleView'` | | `handle_color` | `null` or string | `null` | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | ### Jupyter.Tab | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'TabModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `selected_index` | number (integer) | `0` | ### Jupyter.Text | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'TextView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `value` | string | `''` | String value | ### Jupyter.Textarea | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'TextareaView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | | `value` | string | `''` | String value | ### Jupyter.ToggleButton | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `tooltip` | string | `''` | Tooltip caption of the toggle button. | | `value` | boolean | `false` | Bool value | ### Jupyter.ToggleButtons | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array | `[]` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array | `[]` | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `tooltips` | array | `[]` | | `value` | string (valid option label) | `null` | Selected value | ### Jupyter.VBox | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | ### Jupyter.Valid | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `value` | boolean | `false` | Bool value | ### jupyter.DirectionalLink | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ------------------------ | --------------------------------------------------------------------------------------------- | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | `null` or string | `null` | Name of the view object. | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### jupyter.Link | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ---------------------- | --------------------------------------------------------------------------------------------- | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | `null` or string | `null` | Name of the view object. | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### Layout | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- | --------------------------------------------------------------------------------------------- | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | | `border` | `null` or string | `null` | | `bottom` | `null` or string | `null` | | `display` | `null` or string | `null` | | `flex` | `null` or string | `null` | | `flex_flow` | `null` or string | `null` | | `height` | `null` or string | `null` | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | | `left` | `null` or string | `null` | | `margin` | `null` or string | `null` | | `max_height` | `null` or string | `null` | | `max_width` | `null` or string | `null` | | `min_height` | `null` or string | `null` | | `min_width` | `null` or string | `null` | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | | `order` | `null` or string | `null` | | `overflow` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | | `overflow_x` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | | `overflow_y` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | | `padding` | `null` or string | `null` | | `right` | `null` or string | `null` | | `top` | `null` or string | `null` | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | | `width` | `null` or string | `null` | ### Output | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ------------------------- | --------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'jupyter-js-widgets'` | | `_model_module_version` | string | `'~2.1.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'jupyter-js-widgets'` | | `_view_module_version` | string | `'~2.1.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `msg_throttle` | number (integer) | `1` | Maximum number of msgs the front-end can send before receiving an idle msg from the back-end. | ## Inheritance In the list below, the notation `WidgetB(WidgetA)` indicates that WidgetB inherits all of the attributes from WidgetA. This may help in implementing widgets to easily see the inheritance hierarchy. - CoreWidget - Abstract - DOMWidget(Widget) - Abstract - LabeledDOMWidget(DOMWidget) - Accordion(LabeledDOMWidget) - BoundedFloatText(LabeledDOMWidget) - BoundedIntText(LabeledDOMWidget) - Box(DOMWIdget) - HBox(Box) - VBox(Box) - Button(DOMWidget) - ButtonStyle - Checkbox(LabeledDOMWidget) - ColorPicker(LabeledDOMWidget) - Controller - DatePicker(LabeledDOMWidget) - Dropdown(LabeledDOMWidget) - Progress(LabeledDOMWidget) - ProgressStyle - FloatRangeSlider(LabeledDOMWidget) - FloatSlider(LabeledDOMWidget) - FloatText(LabeledDOMWidget) - HTML(LabeledDOMWidget) - HTMLMath(HTML) - Image(DOMWidget) - IntRangeSlider(LabeledDOMWidget) - IntSlider(LabeledDOMWidget) - IntText(LabeledDOMWidget) - Label(LabeledDOMWidget) - Layout - Output - Play(LabeledDOMWidget) - RadioButtons(LabeledDOMWidget) - Select(LabeledDOMWidget) - SelectMultiple(LabeledDOMWidget) - SelectionSlider(LabeledDOMWidget) - Text(LabeledDOMWidget) - Textarea(LabeledDOMWidget) - ToggleButton(LabeledDOMWidget) - ToggleButtons(LabeledDOMWidget) - Valid(LabeledDOMWidget) - Tab(DOMWidget) - Link(Widget) ## Automated documentation The code to generate the model attribute listing is below. ```python import ipywidgets as widgets from ipywidgets import * from traitlets import CaselessStrEnum, Unicode, Tuple, List, Bool, CFloat, Float, CInt, Int, Instance, Undefined, Dict, Any from ipywidgets import Color widgets_to_document = sorted(widgets.Widget.widget_types.items()) + [('Layout', widgets.Layout), ('Output', widgets.Output)] def typing(x): s = '' if isinstance(x, CaselessStrEnum): s = 'string (one of %s)'%(', '.join('`%r`'%i for i in x.values)) elif isinstance(x, Unicode): s = 'string' elif isinstance(x, (Tuple, List)): s = 'array' elif isinstance(x, Bool): s = 'boolean' elif isinstance(x, (CFloat, Float)): s = 'number (float)' elif isinstance(x, (CInt, Int)): s = 'number (integer)' elif isinstance(x, Color): s = 'string (valid color)' elif isinstance(x, Dict): s = 'object' elif isinstance(x, Instance) and issubclass(x.klass, widgets.Widget): s = 'reference to %s widget'%(x.klass.__name__) # ADD the widget to this documenting list if x.klass not in [i[1] for i in widgets_to_document]: widgets_to_document.append((x.klass.__name__, x.klass)) elif isinstance(x, Any): # In our case, these all happen to be values that are converted to strings s = 'string (valid option label)' else: s = x.__class__.__name__ if x.allow_none: s = "`null` or "+s return s def jsdefault(t): x = t.default_value if isinstance(t, Instance): x = t.make_dynamic_default() if issubclass(t.klass, widgets.Widget): return 'reference to new instance' if x is True: return '`true`' elif x is False: return '`false`' elif x is None: return '`null`' elif isinstance(x, tuple): return '`{0}`'.format(list(x)) else: return '`%s`'%t.default_value_repr() def format_widget(n, w): out = [] out.append('### %s'%n) out.append('') out.append('{name: <16} | {typing: <16} | {default: <16} | {help}'.format(name='Attribute', typing='Type', allownone='Nullable', default='Default', help='Help')) out.append('{0:-<16}-|-{0:-<16}-|-{0:-<16}-|----'.format('-')) for name, t in sorted(w.traits(sync=True).items()): if name in ['_model_module', '_view_module', '_model_module_version', '_view_module_version', 'msg_throttle', '_dom_classes', 'layout']: # document these separately, since they apply to all classes pass s = '{name: <16} | {typing: <16} | {default: <16} | {help}'.format(name='`%s`'%name, typing=typing(t), allownone='*' if t.allow_none else '', default=jsdefault(t), help=t.help if t.help else '') out.append(s) out.append('') return '\n'.join(out) out = '' for n,w in widgets_to_document: if n in ['jupyter.Link', 'jupyter.DirectionalLink']: out += '\n'+format_widget(n, w((IntSlider(), 'value'), (IntSlider(), 'value'))) else: out += '\n'+format_widget(n,w()) print(out) ``` ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.v7-1.md000066400000000000000000003410651466162644600241100ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 7.1._, @jupyter-widgets/base 1.0._, and @jupyter-widgets/controls 1.1.\*. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ### LayoutModel (@jupyter-widgets/base, 1.0.0); LayoutView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/base'` | The namespace for the model. | | `_model_module_version` | string | `'1.0.0'` | A semver requirement for namespace version containing the model. | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-content CSS attribute. | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-items CSS attribute. | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-self CSS attribute. | | `border` | `null` or string | `null` | The border CSS attribute. | | `bottom` | `null` or string | `null` | The bottom CSS attribute. | | `display` | `null` or string | `null` | The display CSS attribute. | | `flex` | `null` or string | `null` | The flex CSS attribute. | | `flex_flow` | `null` or string | `null` | The flex-flow CSS attribute. | | `height` | `null` or string | `null` | The height CSS attribute. | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-content CSS attribute. | | `left` | `null` or string | `null` | The left CSS attribute. | | `margin` | `null` or string | `null` | The margin CSS attribute. | | `max_height` | `null` or string | `null` | The max-height CSS attribute. | | `max_width` | `null` or string | `null` | The max-width CSS attribute. | | `min_height` | `null` or string | `null` | The min-height CSS attribute. | | `min_width` | `null` or string | `null` | The min-width CSS attribute. | | `order` | `null` or string | `null` | The order CSS attribute. | | `overflow` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow CSS attribute. | | `overflow_x` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-x CSS attribute. | | `overflow_y` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-y CSS attribute. | | `padding` | `null` or string | `null` | The padding CSS attribute. | | `right` | `null` or string | `null` | The right CSS attribute. | | `top` | `null` or string | `null` | The top CSS attribute. | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The visibility CSS attribute. | | `width` | `null` or string | `null` | The width CSS attribute. | ### AccordionModel (@jupyter-widgets/controls, 1.1.0); AccordionView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'AccordionModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### BoundedFloatTextModel (@jupyter-widgets/controls, 1.1.0); FloatTextView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'BoundedFloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### BoundedIntTextModel (@jupyter-widgets/controls, 1.1.0); IntTextView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'BoundedIntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### BoxModel (@jupyter-widgets/controls, 1.1.0); BoxView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ButtonModel (@jupyter-widgets/controls, 1.1.0); ButtonView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ButtonStyle widget | reference to new instance | | `tooltip` | string | `''` | Tooltip caption of the button. | ### ButtonStyleModel (@jupyter-widgets/controls, 1.1.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ------------------------ | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_weight` | string | `''` | Button text font weight. | ### CheckboxModel (@jupyter-widgets/controls, 1.1.0); CheckboxView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `indent` | boolean | `true` | Indent the control to align with other controls with a description. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### ColorPickerModel (@jupyter-widgets/controls, 1.1.0); ColorPickerView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | Display short version with just a color selector. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `'black'` | The color value. | ### ControllerAxisModel (@jupyter-widgets/controls, 1.1.0); ControllerAxisView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `layout` | reference to Layout widget | reference to new instance | | `value` | number (float) | `0.0` | The value of the axis. | ### ControllerButtonModel (@jupyter-widgets/controls, 1.1.0); ControllerButtonView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `layout` | reference to Layout widget | reference to new instance | | `pressed` | boolean | `false` | Whether the button is pressed. | | `value` | number (float) | `0.0` | The value of the button. | ### ControllerModel (@jupyter-widgets/controls, 1.1.0); ControllerView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array | `[]` | The axes on the gamepad. | | `buttons` | array | `[]` | The buttons on the gamepad. | | `connected` | boolean | `false` | Whether the gamepad is connected. | | `index` | number (integer) | `0` | The id number of the controller. | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | The name of the control mapping. | | `name` | string | `''` | The name of the controller. | | `timestamp` | number (float) | `0.0` | The last time the data from this gamepad was updated. | ### DatePickerModel (@jupyter-widgets/controls, 1.1.0); DatePickerView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | `null` or Date | `null` | ### DescriptionStyleModel (@jupyter-widgets/controls, 1.1.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'DescriptionStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | ### DirectionalLinkModel (@jupyter-widgets/controls, 1.1.0); None (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### DropdownModel (@jupyter-widgets/controls, 1.1.0); DropdownView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### FloatProgressModel (@jupyter-widgets/controls, 1.1.0); ProgressView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------ | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'FloatProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatRangeSliderModel (@jupyter-widgets/controls, 1.1.0); FloatRangeSliderView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'FloatRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'FloatRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### FloatSliderModel (@jupyter-widgets/controls, 1.1.0); FloatSliderView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'FloatSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatTextModel (@jupyter-widgets/controls, 1.1.0); FloatTextView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### HBoxModel (@jupyter-widgets/controls, 1.1.0); HBoxView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HTMLMathModel (@jupyter-widgets/controls, 1.1.0); HTMLMathView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### HTMLModel (@jupyter-widgets/controls, 1.1.0); HTMLView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ImageModel (@jupyter-widgets/controls, 1.1.0); ImageView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | The format of the image. | | `height` | string | `''` | Height of the image in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `value` | Bytes | `b''` | The image data as a byte string. | | `width` | string | `''` | Width of the image in pixels. | ### IntProgressModel (@jupyter-widgets/controls, 1.1.0); ProgressView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'IntProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntRangeSliderModel (@jupyter-widgets/controls, 1.1.0); IntRangeSliderView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'IntRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'IntRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step that the value can take | | `style` | reference to SliderStyle widget | reference to new instance | Slider style customizations. | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### IntSliderModel (@jupyter-widgets/controls, 1.1.0); IntSliderView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'IntSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntTextModel (@jupyter-widgets/controls, 1.1.0); IntTextView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### LabelModel (@jupyter-widgets/controls, 1.1.0); LabelView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### LinkModel (@jupyter-widgets/controls, 1.1.0); None (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### PasswordModel (@jupyter-widgets/controls, 1.1.0); PasswordView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'PasswordModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'PasswordView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### PlayModel (@jupyter-widgets/controls, 1.1.0); PlayView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'PlayModel'` | | `_playing` | boolean | `false` | Whether the control is currently playing. | | `_repeat` | boolean | `false` | Whether the control will repeat in a continuous loop. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | The maximum value for the play control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `show_repeat` | boolean | `true` | Show the repeat toggle button in the widget. | | `step` | number (integer) | `1` | Increment step | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### ProgressStyleModel (@jupyter-widgets/controls, 1.1.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | Color of the progress bar. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### RadioButtonsModel (@jupyter-widgets/controls, 1.1.0); RadioButtonsView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectModel (@jupyter-widgets/controls, 1.1.0); SelectView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectMultipleModel (@jupyter-widgets/controls, 1.1.0); SelectMultipleView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[]` | Selected indices | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionRangeSliderModel (@jupyter-widgets/controls, 1.1.0); SelectionRangeSliderView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'SelectionRangeSliderModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'SelectionRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[0, 0]` | Min and max selected indices | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionSliderModel (@jupyter-widgets/controls, 1.1.0); SelectionSliderView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | number (integer) | `0` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SliderStyleModel (@jupyter-widgets/controls, 1.1.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `handle_color` | `null` or string | `null` | Color of the slider handle. | ### TabModel (@jupyter-widgets/controls, 1.1.0); TabView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'TabModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### TextModel (@jupyter-widgets/controls, 1.1.0); TextView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'TextView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### TextareaModel (@jupyter-widgets/controls, 1.1.0); TextareaView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'TextareaView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ToggleButtonModel (@jupyter-widgets/controls, 1.1.0); ToggleButtonView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tooltip` | string | `''` | Tooltip caption of the toggle button. | | `value` | boolean | `false` | Bool value | ### ToggleButtonsModel (@jupyter-widgets/controls, 1.1.0); ToggleButtonsView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array | `[]` | Icons names for each button (FontAwesome names without the fa- prefix). | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonsStyle widget | reference to new instance | | `tooltips` | array | `[]` | Tooltips for each button. | ### ToggleButtonsStyleModel (@jupyter-widgets/controls, 1.1.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ToggleButtonsStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_width` | string | `''` | The width of each button. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_weight` | string | `''` | Text font weight of each button. | ### VBoxModel (@jupyter-widgets/controls, 1.1.0); VBoxView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ValidModel (@jupyter-widgets/controls, 1.1.0); ValidView (@jupyter-widgets/controls, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.1.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### OutputModel (@jupyter-widgets/output, 1.0.0); OutputView (@jupyter-widgets/output, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | --------------------------- | --------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/output'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'@jupyter-widgets/output'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `outputs` | array | `[]` | The output messages synced from the frontend. | ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.v7-2.md000066400000000000000000003500541466162644600241070ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 7.2._, @jupyter-widgets/base 1.0._, and @jupyter-widgets/controls 1.2.\*. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ### LayoutModel (@jupyter-widgets/base, 1.0.0); LayoutView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/base'` | The namespace for the model. | | `_model_module_version` | string | `'1.0.0'` | A semver requirement for namespace version containing the model. | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-content CSS attribute. | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-items CSS attribute. | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-self CSS attribute. | | `border` | `null` or string | `null` | The border CSS attribute. | | `bottom` | `null` or string | `null` | The bottom CSS attribute. | | `display` | `null` or string | `null` | The display CSS attribute. | | `flex` | `null` or string | `null` | The flex CSS attribute. | | `flex_flow` | `null` or string | `null` | The flex-flow CSS attribute. | | `height` | `null` or string | `null` | The height CSS attribute. | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-content CSS attribute. | | `left` | `null` or string | `null` | The left CSS attribute. | | `margin` | `null` or string | `null` | The margin CSS attribute. | | `max_height` | `null` or string | `null` | The max-height CSS attribute. | | `max_width` | `null` or string | `null` | The max-width CSS attribute. | | `min_height` | `null` or string | `null` | The min-height CSS attribute. | | `min_width` | `null` or string | `null` | The min-width CSS attribute. | | `order` | `null` or string | `null` | The order CSS attribute. | | `overflow` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow CSS attribute. | | `overflow_x` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-x CSS attribute. | | `overflow_y` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-y CSS attribute. | | `padding` | `null` or string | `null` | The padding CSS attribute. | | `right` | `null` or string | `null` | The right CSS attribute. | | `top` | `null` or string | `null` | The top CSS attribute. | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The visibility CSS attribute. | | `width` | `null` or string | `null` | The width CSS attribute. | ### AccordionModel (@jupyter-widgets/controls, 1.2.0); AccordionView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'AccordionModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### BoundedFloatTextModel (@jupyter-widgets/controls, 1.2.0); FloatTextView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'BoundedFloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### BoundedIntTextModel (@jupyter-widgets/controls, 1.2.0); IntTextView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'BoundedIntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### BoxModel (@jupyter-widgets/controls, 1.2.0); BoxView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ButtonModel (@jupyter-widgets/controls, 1.2.0); ButtonView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ButtonStyle widget | reference to new instance | | `tooltip` | string | `''` | Tooltip caption of the button. | ### ButtonStyleModel (@jupyter-widgets/controls, 1.2.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ------------------------ | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_weight` | string | `''` | Button text font weight. | ### CheckboxModel (@jupyter-widgets/controls, 1.2.0); CheckboxView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `indent` | boolean | `true` | Indent the control to align with other controls with a description. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### ColorPickerModel (@jupyter-widgets/controls, 1.2.0); ColorPickerView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | Display short version with just a color selector. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `'black'` | The color value. | ### ControllerAxisModel (@jupyter-widgets/controls, 1.2.0); ControllerAxisView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `layout` | reference to Layout widget | reference to new instance | | `value` | number (float) | `0.0` | The value of the axis. | ### ControllerButtonModel (@jupyter-widgets/controls, 1.2.0); ControllerButtonView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `layout` | reference to Layout widget | reference to new instance | | `pressed` | boolean | `false` | Whether the button is pressed. | | `value` | number (float) | `0.0` | The value of the button. | ### ControllerModel (@jupyter-widgets/controls, 1.2.0); ControllerView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ----------------------------------- | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array of reference to Axis widget | `[]` | The axes on the gamepad. | | `buttons` | array of reference to Button widget | `[]` | The buttons on the gamepad. | | `connected` | boolean | `false` | Whether the gamepad is connected. | | `index` | number (integer) | `0` | The id number of the controller. | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | The name of the control mapping. | | `name` | string | `''` | The name of the controller. | | `timestamp` | number (float) | `0.0` | The last time the data from this gamepad was updated. | ### DatePickerModel (@jupyter-widgets/controls, 1.2.0); DatePickerView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | `null` or Date | `null` | ### DescriptionStyleModel (@jupyter-widgets/controls, 1.2.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'DescriptionStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | ### DirectionalLinkModel (@jupyter-widgets/controls, 1.2.0); None (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### DropdownModel (@jupyter-widgets/controls, 1.2.0); DropdownView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### FloatLogSliderModel (@jupyter-widgets/controls, 1.2.0); FloatLogSliderView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'FloatLogSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'FloatLogSliderView'` | | `base` | number (float) | `10.0` | Base for the logarithm | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `4.0` | Max value for the exponent | | `min` | number (float) | `0.0` | Min value for the exponent | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.3g'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step in the exponent to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `1.0` | Float value | ### FloatProgressModel (@jupyter-widgets/controls, 1.2.0); ProgressView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------ | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'FloatProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatRangeSliderModel (@jupyter-widgets/controls, 1.2.0); FloatRangeSliderView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'FloatRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'FloatRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### FloatSliderModel (@jupyter-widgets/controls, 1.2.0); FloatSliderView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'FloatSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatTextModel (@jupyter-widgets/controls, 1.2.0); FloatTextView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### HBoxModel (@jupyter-widgets/controls, 1.2.0); HBoxView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HTMLMathModel (@jupyter-widgets/controls, 1.2.0); HTMLMathView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### HTMLModel (@jupyter-widgets/controls, 1.2.0); HTMLView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ImageModel (@jupyter-widgets/controls, 1.2.0); ImageView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | The format of the image. | | `height` | string | `''` | Height of the image in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `value` | Bytes | `b''` | The image data as a byte string. | | `width` | string | `''` | Width of the image in pixels. | ### IntProgressModel (@jupyter-widgets/controls, 1.2.0); ProgressView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'IntProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntRangeSliderModel (@jupyter-widgets/controls, 1.2.0); IntRangeSliderView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'IntRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'IntRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step that the value can take | | `style` | reference to SliderStyle widget | reference to new instance | Slider style customizations. | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### IntSliderModel (@jupyter-widgets/controls, 1.2.0); IntSliderView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'IntSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntTextModel (@jupyter-widgets/controls, 1.2.0); IntTextView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### LabelModel (@jupyter-widgets/controls, 1.2.0); LabelView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### LinkModel (@jupyter-widgets/controls, 1.2.0); None (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### PasswordModel (@jupyter-widgets/controls, 1.2.0); PasswordView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'PasswordModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'PasswordView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### PlayModel (@jupyter-widgets/controls, 1.2.0); PlayView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'PlayModel'` | | `_playing` | boolean | `false` | Whether the control is currently playing. | | `_repeat` | boolean | `false` | Whether the control will repeat in a continuous loop. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | The maximum value for the play control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `show_repeat` | boolean | `true` | Show the repeat toggle button in the widget. | | `step` | number (integer) | `1` | Increment step | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### ProgressStyleModel (@jupyter-widgets/controls, 1.2.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | Color of the progress bar. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### RadioButtonsModel (@jupyter-widgets/controls, 1.2.0); RadioButtonsView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectModel (@jupyter-widgets/controls, 1.2.0); SelectView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectMultipleModel (@jupyter-widgets/controls, 1.2.0); SelectMultipleView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array of number (integer) | `[]` | Selected indices | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionRangeSliderModel (@jupyter-widgets/controls, 1.2.0); SelectionRangeSliderView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'SelectionRangeSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'SelectionRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[0, 0]` | Min and max selected indices | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionSliderModel (@jupyter-widgets/controls, 1.2.0); SelectionSliderView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | number (integer) | `0` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SliderStyleModel (@jupyter-widgets/controls, 1.2.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `handle_color` | `null` or string | `null` | Color of the slider handle. | ### TabModel (@jupyter-widgets/controls, 1.2.0); TabView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'TabModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### TextModel (@jupyter-widgets/controls, 1.2.0); TextView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'TextView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### TextareaModel (@jupyter-widgets/controls, 1.2.0); TextareaView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'TextareaView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ToggleButtonModel (@jupyter-widgets/controls, 1.2.0); ToggleButtonView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tooltip` | string | `''` | Tooltip caption of the toggle button. | | `value` | boolean | `false` | Bool value | ### ToggleButtonsModel (@jupyter-widgets/controls, 1.2.0); ToggleButtonsView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array of string | `[]` | Icons names for each button (FontAwesome names without the fa- prefix). | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonsStyle widget | reference to new instance | | `tooltips` | array of string | `[]` | Tooltips for each button. | ### ToggleButtonsStyleModel (@jupyter-widgets/controls, 1.2.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ToggleButtonsStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_width` | string | `''` | The width of each button. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_weight` | string | `''` | Text font weight of each button. | ### VBoxModel (@jupyter-widgets/controls, 1.2.0); VBoxView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ValidModel (@jupyter-widgets/controls, 1.2.0); ValidView (@jupyter-widgets/controls, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.2.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### OutputModel (@jupyter-widgets/output, 1.0.0); OutputView (@jupyter-widgets/output, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | --------------------------- | --------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/output'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'@jupyter-widgets/output'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `outputs` | array of object | `[]` | The output messages synced from the frontend. | ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.v7-3.md000066400000000000000000003757721466162644600241260ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 7.3._, @jupyter-widgets/base 1.1._, and @jupyter-widgets/controls 1.3.\*. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ### LayoutModel (@jupyter-widgets/base, 1.1.0); LayoutView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/base'` | The namespace for the model. | | `_model_module_version` | string | `'1.1.0'` | A semver requirement for namespace version containing the model. | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-content CSS attribute. | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-items CSS attribute. | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-self CSS attribute. | | `border` | `null` or string | `null` | The border CSS attribute. | | `bottom` | `null` or string | `null` | The bottom CSS attribute. | | `display` | `null` or string | `null` | The display CSS attribute. | | `flex` | `null` or string | `null` | The flex CSS attribute. | | `flex_flow` | `null` or string | `null` | The flex-flow CSS attribute. | | `grid_area` | `null` or string | `null` | The grid-area CSS attribute. | | `grid_auto_columns` | `null` or string | `null` | The grid-auto-columns CSS attribute. | | `grid_auto_flow` | `null` or string (one of `'column'`, `'row'`, `'row dense'`, `'column dense'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The grid-auto-flow CSS attribute. | | `grid_auto_rows` | `null` or string | `null` | The grid-auto-rows CSS attribute. | | `grid_column` | `null` or string | `null` | The grid-column CSS attribute. | | `grid_gap` | `null` or string | `null` | The grid-gap CSS attribute. | | `grid_row` | `null` or string | `null` | The grid-row CSS attribute. | | `grid_template_areas` | `null` or string | `null` | The grid-template-areas CSS attribute. | | `grid_template_columns` | `null` or string | `null` | The grid-template-columns CSS attribute. | | `grid_template_rows` | `null` or string | `null` | The grid-template-rows CSS attribute. | | `height` | `null` or string | `null` | The height CSS attribute. | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-content CSS attribute. | | `left` | `null` or string | `null` | The left CSS attribute. | | `margin` | `null` or string | `null` | The margin CSS attribute. | | `max_height` | `null` or string | `null` | The max-height CSS attribute. | | `max_width` | `null` or string | `null` | The max-width CSS attribute. | | `min_height` | `null` or string | `null` | The min-height CSS attribute. | | `min_width` | `null` or string | `null` | The min-width CSS attribute. | | `order` | `null` or string | `null` | The order CSS attribute. | | `overflow` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow CSS attribute. | | `overflow_x` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-x CSS attribute. | | `overflow_y` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-y CSS attribute. | | `padding` | `null` or string | `null` | The padding CSS attribute. | | `right` | `null` or string | `null` | The right CSS attribute. | | `top` | `null` or string | `null` | The top CSS attribute. | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The visibility CSS attribute. | | `width` | `null` or string | `null` | The width CSS attribute. | ### AccordionModel (@jupyter-widgets/controls, 1.3.0); AccordionView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'AccordionModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### BoundedFloatTextModel (@jupyter-widgets/controls, 1.3.0); FloatTextView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'BoundedFloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### BoundedIntTextModel (@jupyter-widgets/controls, 1.3.0); IntTextView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'BoundedIntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### BoxModel (@jupyter-widgets/controls, 1.3.0); BoxView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ButtonModel (@jupyter-widgets/controls, 1.3.0); ButtonView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ButtonStyle widget | reference to new instance | | `tooltip` | string | `''` | Tooltip caption of the button. | ### ButtonStyleModel (@jupyter-widgets/controls, 1.3.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ------------------------ | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_weight` | string | `''` | Button text font weight. | ### CheckboxModel (@jupyter-widgets/controls, 1.3.0); CheckboxView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `indent` | boolean | `true` | Indent the control to align with other controls with a description. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### ColorPickerModel (@jupyter-widgets/controls, 1.3.0); ColorPickerView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | Display short version with just a color selector. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `'black'` | The color value. | ### ControllerAxisModel (@jupyter-widgets/controls, 1.3.0); ControllerAxisView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `layout` | reference to Layout widget | reference to new instance | | `value` | number (float) | `0.0` | The value of the axis. | ### ControllerButtonModel (@jupyter-widgets/controls, 1.3.0); ControllerButtonView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `layout` | reference to Layout widget | reference to new instance | | `pressed` | boolean | `false` | Whether the button is pressed. | | `value` | number (float) | `0.0` | The value of the button. | ### ControllerModel (@jupyter-widgets/controls, 1.3.0); ControllerView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ----------------------------------- | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array of reference to Axis widget | `[]` | The axes on the gamepad. | | `buttons` | array of reference to Button widget | `[]` | The buttons on the gamepad. | | `connected` | boolean | `false` | Whether the gamepad is connected. | | `index` | number (integer) | `0` | The id number of the controller. | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | The name of the control mapping. | | `name` | string | `''` | The name of the controller. | | `timestamp` | number (float) | `0.0` | The last time the data from this gamepad was updated. | ### DatePickerModel (@jupyter-widgets/controls, 1.3.0); DatePickerView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | `null` or Date | `null` | ### DescriptionStyleModel (@jupyter-widgets/controls, 1.3.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'DescriptionStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | ### DirectionalLinkModel (@jupyter-widgets/controls, 1.3.0); None (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### DropdownModel (@jupyter-widgets/controls, 1.3.0); DropdownView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### FloatLogSliderModel (@jupyter-widgets/controls, 1.3.0); FloatLogSliderView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'FloatLogSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'FloatLogSliderView'` | | `base` | number (float) | `10.0` | Base for the logarithm | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `4.0` | Max value for the exponent | | `min` | number (float) | `0.0` | Min value for the exponent | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.3g'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step in the exponent to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `1.0` | Float value | ### FloatProgressModel (@jupyter-widgets/controls, 1.3.0); ProgressView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'FloatProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatRangeSliderModel (@jupyter-widgets/controls, 1.3.0); FloatRangeSliderView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'FloatRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'FloatRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### FloatSliderModel (@jupyter-widgets/controls, 1.3.0); FloatSliderView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'FloatSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatTextModel (@jupyter-widgets/controls, 1.3.0); FloatTextView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### GridBoxModel (@jupyter-widgets/controls, 1.3.0); GridBoxView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'GridBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'GridBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HBoxModel (@jupyter-widgets/controls, 1.3.0); HBoxView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HTMLMathModel (@jupyter-widgets/controls, 1.3.0); HTMLMathView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### HTMLModel (@jupyter-widgets/controls, 1.3.0); HTMLView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ImageModel (@jupyter-widgets/controls, 1.3.0); ImageView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | The format of the image. | | `height` | string | `''` | Height of the image in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `value` | Bytes | `b''` | The image data as a byte string. | | `width` | string | `''` | Width of the image in pixels. | ### IntProgressModel (@jupyter-widgets/controls, 1.3.0); ProgressView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'IntProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntRangeSliderModel (@jupyter-widgets/controls, 1.3.0); IntRangeSliderView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'IntRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'IntRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step that the value can take | | `style` | reference to SliderStyle widget | reference to new instance | Slider style customizations. | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### IntSliderModel (@jupyter-widgets/controls, 1.3.0); IntSliderView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'IntSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntTextModel (@jupyter-widgets/controls, 1.3.0); IntTextView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### LabelModel (@jupyter-widgets/controls, 1.3.0); LabelView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### LinkModel (@jupyter-widgets/controls, 1.3.0); None (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### PasswordModel (@jupyter-widgets/controls, 1.3.0); PasswordView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'PasswordModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'PasswordView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### PlayModel (@jupyter-widgets/controls, 1.3.0); PlayView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'PlayModel'` | | `_playing` | boolean | `false` | Whether the control is currently playing. | | `_repeat` | boolean | `false` | Whether the control will repeat in a continuous loop. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | The maximum value for the play control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `show_repeat` | boolean | `true` | Show the repeat toggle button in the widget. | | `step` | number (integer) | `1` | Increment step | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### ProgressStyleModel (@jupyter-widgets/controls, 1.3.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | Color of the progress bar. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### RadioButtonsModel (@jupyter-widgets/controls, 1.3.0); RadioButtonsView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectModel (@jupyter-widgets/controls, 1.3.0); SelectView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectMultipleModel (@jupyter-widgets/controls, 1.3.0); SelectMultipleView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array of number (integer) | `[]` | Selected indices | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionRangeSliderModel (@jupyter-widgets/controls, 1.3.0); SelectionRangeSliderView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'SelectionRangeSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'SelectionRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[0, 0]` | Min and max selected indices | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionSliderModel (@jupyter-widgets/controls, 1.3.0); SelectionSliderView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | number (integer) | `0` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SliderStyleModel (@jupyter-widgets/controls, 1.3.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `handle_color` | `null` or string | `null` | Color of the slider handle. | ### TabModel (@jupyter-widgets/controls, 1.3.0); TabView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'TabModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### TextModel (@jupyter-widgets/controls, 1.3.0); TextView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'TextView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### TextareaModel (@jupyter-widgets/controls, 1.3.0); TextareaView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'TextareaView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ToggleButtonModel (@jupyter-widgets/controls, 1.3.0); ToggleButtonView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tooltip` | string | `''` | Tooltip caption of the toggle button. | | `value` | boolean | `false` | Bool value | ### ToggleButtonsModel (@jupyter-widgets/controls, 1.3.0); ToggleButtonsView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array of string | `[]` | Icons names for each button (FontAwesome names without the fa- prefix). | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonsStyle widget | reference to new instance | | `tooltips` | array of string | `[]` | Tooltips for each button. | ### ToggleButtonsStyleModel (@jupyter-widgets/controls, 1.3.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ToggleButtonsStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `button_width` | string | `''` | The width of each button. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_weight` | string | `''` | Text font weight of each button. | ### VBoxModel (@jupyter-widgets/controls, 1.3.0); VBoxView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ValidModel (@jupyter-widgets/controls, 1.3.0); ValidView (@jupyter-widgets/controls, 1.3.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.3.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.3.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### OutputModel (@jupyter-widgets/output, 1.0.0); OutputView (@jupyter-widgets/output, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | --------------------------- | --------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/output'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'@jupyter-widgets/output'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `outputs` | array of object | `[]` | The output messages synced from the frontend. | ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.v7-4.md000066400000000000000000004113721466162644600241120ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 7.4._, @jupyter-widgets/base 1.1._, and @jupyter-widgets/controls 1.4.\*. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ### LayoutModel (@jupyter-widgets/base, 1.1.0); LayoutView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/base'` | The namespace for the model. | | `_model_module_version` | string | `'1.1.0'` | A semver requirement for namespace version containing the model. | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-content CSS attribute. | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-items CSS attribute. | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-self CSS attribute. | | `border` | `null` or string | `null` | The border CSS attribute. | | `bottom` | `null` or string | `null` | The bottom CSS attribute. | | `display` | `null` or string | `null` | The display CSS attribute. | | `flex` | `null` or string | `null` | The flex CSS attribute. | | `flex_flow` | `null` or string | `null` | The flex-flow CSS attribute. | | `grid_area` | `null` or string | `null` | The grid-area CSS attribute. | | `grid_auto_columns` | `null` or string | `null` | The grid-auto-columns CSS attribute. | | `grid_auto_flow` | `null` or string (one of `'column'`, `'row'`, `'row dense'`, `'column dense'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The grid-auto-flow CSS attribute. | | `grid_auto_rows` | `null` or string | `null` | The grid-auto-rows CSS attribute. | | `grid_column` | `null` or string | `null` | The grid-column CSS attribute. | | `grid_gap` | `null` or string | `null` | The grid-gap CSS attribute. | | `grid_row` | `null` or string | `null` | The grid-row CSS attribute. | | `grid_template_areas` | `null` or string | `null` | The grid-template-areas CSS attribute. | | `grid_template_columns` | `null` or string | `null` | The grid-template-columns CSS attribute. | | `grid_template_rows` | `null` or string | `null` | The grid-template-rows CSS attribute. | | `height` | `null` or string | `null` | The height CSS attribute. | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-content CSS attribute. | | `left` | `null` or string | `null` | The left CSS attribute. | | `margin` | `null` or string | `null` | The margin CSS attribute. | | `max_height` | `null` or string | `null` | The max-height CSS attribute. | | `max_width` | `null` or string | `null` | The max-width CSS attribute. | | `min_height` | `null` or string | `null` | The min-height CSS attribute. | | `min_width` | `null` or string | `null` | The min-width CSS attribute. | | `order` | `null` or string | `null` | The order CSS attribute. | | `overflow` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow CSS attribute. | | `overflow_x` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-x CSS attribute. | | `overflow_y` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-y CSS attribute. | | `padding` | `null` or string | `null` | The padding CSS attribute. | | `right` | `null` or string | `null` | The right CSS attribute. | | `top` | `null` or string | `null` | The top CSS attribute. | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The visibility CSS attribute. | | `width` | `null` or string | `null` | The width CSS attribute. | ### AccordionModel (@jupyter-widgets/controls, 1.4.0); AccordionView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'AccordionModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### AudioModel (@jupyter-widgets/controls, 1.4.0); AudioView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'AudioModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'AudioView'` | | `autoplay` | boolean | `true` | When true, the audio starts when it's displayed | | `controls` | boolean | `true` | Specifies that audio controls should be displayed (such as a play/pause button etc) | | `format` | string | `'mp3'` | The format of the audio. | | `layout` | reference to Layout widget | reference to new instance | | `loop` | boolean | `true` | When true, the audio will start from the beginning after finishing | | `value` | Bytes | `b''` | The media data as a byte string. | ### BoundedFloatTextModel (@jupyter-widgets/controls, 1.4.0); FloatTextView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'BoundedFloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### BoundedIntTextModel (@jupyter-widgets/controls, 1.4.0); IntTextView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'BoundedIntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### BoxModel (@jupyter-widgets/controls, 1.4.0); BoxView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ButtonModel (@jupyter-widgets/controls, 1.4.0); ButtonView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ButtonStyle widget | reference to new instance | | `tooltip` | string | `''` | Tooltip caption of the button. | ### ButtonStyleModel (@jupyter-widgets/controls, 1.4.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ------------------------ | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_weight` | string | `''` | Button text font weight. | ### CheckboxModel (@jupyter-widgets/controls, 1.4.0); CheckboxView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `indent` | boolean | `true` | Indent the control to align with other controls with a description. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### ColorPickerModel (@jupyter-widgets/controls, 1.4.0); ColorPickerView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | Display short version with just a color selector. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `'black'` | The color value. | ### ControllerAxisModel (@jupyter-widgets/controls, 1.4.0); ControllerAxisView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `layout` | reference to Layout widget | reference to new instance | | `value` | number (float) | `0.0` | The value of the axis. | ### ControllerButtonModel (@jupyter-widgets/controls, 1.4.0); ControllerButtonView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `layout` | reference to Layout widget | reference to new instance | | `pressed` | boolean | `false` | Whether the button is pressed. | | `value` | number (float) | `0.0` | The value of the button. | ### ControllerModel (@jupyter-widgets/controls, 1.4.0); ControllerView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ----------------------------------- | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array of reference to Axis widget | `[]` | The axes on the gamepad. | | `buttons` | array of reference to Button widget | `[]` | The buttons on the gamepad. | | `connected` | boolean | `false` | Whether the gamepad is connected. | | `index` | number (integer) | `0` | The id number of the controller. | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | The name of the control mapping. | | `name` | string | `''` | The name of the controller. | | `timestamp` | number (float) | `0.0` | The last time the data from this gamepad was updated. | ### DOMWidgetModel (@jupyter-widgets/controls, 1.4.0); None (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'DOMWidgetModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `layout` | reference to Layout widget | reference to new instance | | `value` | Bytes | `b''` | The media data as a byte string. | ### DatePickerModel (@jupyter-widgets/controls, 1.4.0); DatePickerView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | `null` or Date | `null` | ### DescriptionStyleModel (@jupyter-widgets/controls, 1.4.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'DescriptionStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | ### DirectionalLinkModel (@jupyter-widgets/controls, 1.4.0); None (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### DropdownModel (@jupyter-widgets/controls, 1.4.0); DropdownView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### FloatLogSliderModel (@jupyter-widgets/controls, 1.4.0); FloatLogSliderView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'FloatLogSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'FloatLogSliderView'` | | `base` | number (float) | `10.0` | Base for the logarithm | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `4.0` | Max value for the exponent | | `min` | number (float) | `0.0` | Min value for the exponent | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.3g'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step in the exponent to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `1.0` | Float value | ### FloatProgressModel (@jupyter-widgets/controls, 1.4.0); ProgressView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'FloatProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatRangeSliderModel (@jupyter-widgets/controls, 1.4.0); FloatRangeSliderView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'FloatRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'FloatRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### FloatSliderModel (@jupyter-widgets/controls, 1.4.0); FloatSliderView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'FloatSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatTextModel (@jupyter-widgets/controls, 1.4.0); FloatTextView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### GridBoxModel (@jupyter-widgets/controls, 1.4.0); GridBoxView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'GridBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'GridBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HBoxModel (@jupyter-widgets/controls, 1.4.0); HBoxView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HTMLMathModel (@jupyter-widgets/controls, 1.4.0); HTMLMathView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### HTMLModel (@jupyter-widgets/controls, 1.4.0); HTMLView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ImageModel (@jupyter-widgets/controls, 1.4.0); ImageView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | The format of the image. | | `height` | string | `''` | Height of the image in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `value` | Bytes | `b''` | The media data as a byte string. | | `width` | string | `''` | Width of the image in pixels. | ### IntProgressModel (@jupyter-widgets/controls, 1.4.0); ProgressView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'IntProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntRangeSliderModel (@jupyter-widgets/controls, 1.4.0); IntRangeSliderView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'IntRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'IntRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step that the value can take | | `style` | reference to SliderStyle widget | reference to new instance | Slider style customizations. | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### IntSliderModel (@jupyter-widgets/controls, 1.4.0); IntSliderView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'IntSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntTextModel (@jupyter-widgets/controls, 1.4.0); IntTextView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### LabelModel (@jupyter-widgets/controls, 1.4.0); LabelView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### LinkModel (@jupyter-widgets/controls, 1.4.0); None (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### PasswordModel (@jupyter-widgets/controls, 1.4.0); PasswordView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'PasswordModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'PasswordView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### PlayModel (@jupyter-widgets/controls, 1.4.0); PlayView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'PlayModel'` | | `_playing` | boolean | `false` | Whether the control is currently playing. | | `_repeat` | boolean | `false` | Whether the control will repeat in a continuous loop. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | The maximum value for the play control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `show_repeat` | boolean | `true` | Show the repeat toggle button in the widget. | | `step` | number (integer) | `1` | Increment step | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### ProgressStyleModel (@jupyter-widgets/controls, 1.4.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | Color of the progress bar. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### RadioButtonsModel (@jupyter-widgets/controls, 1.4.0); RadioButtonsView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectModel (@jupyter-widgets/controls, 1.4.0); SelectView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectMultipleModel (@jupyter-widgets/controls, 1.4.0); SelectMultipleView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array of number (integer) | `[]` | Selected indices | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionRangeSliderModel (@jupyter-widgets/controls, 1.4.0); SelectionRangeSliderView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'SelectionRangeSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'SelectionRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[0, 0]` | Min and max selected indices | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionSliderModel (@jupyter-widgets/controls, 1.4.0); SelectionSliderView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | number (integer) | `0` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SliderStyleModel (@jupyter-widgets/controls, 1.4.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `handle_color` | `null` or string | `null` | Color of the slider handle. | ### TabModel (@jupyter-widgets/controls, 1.4.0); TabView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'TabModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### TextModel (@jupyter-widgets/controls, 1.4.0); TextView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'TextView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### TextareaModel (@jupyter-widgets/controls, 1.4.0); TextareaView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'TextareaView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ToggleButtonModel (@jupyter-widgets/controls, 1.4.0); ToggleButtonView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tooltip` | string | `''` | Tooltip caption of the toggle button. | | `value` | boolean | `false` | Bool value | ### ToggleButtonsModel (@jupyter-widgets/controls, 1.4.0); ToggleButtonsView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array of string | `[]` | Icons names for each button (FontAwesome names without the fa- prefix). | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonsStyle widget | reference to new instance | | `tooltips` | array of string | `[]` | Tooltips for each button. | ### ToggleButtonsStyleModel (@jupyter-widgets/controls, 1.4.0); StyleView (@jupyter-widgets/base, 1.1.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ToggleButtonsStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.1.0'` | | `_view_name` | string | `'StyleView'` | | `button_width` | string | `''` | The width of each button. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_weight` | string | `''` | Text font weight of each button. | ### VBoxModel (@jupyter-widgets/controls, 1.4.0); VBoxView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ValidModel (@jupyter-widgets/controls, 1.4.0); ValidView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### VideoModel (@jupyter-widgets/controls, 1.4.0); VideoView (@jupyter-widgets/controls, 1.4.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.4.0'` | | `_model_name` | string | `'VideoModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.4.0'` | | `_view_name` | string | `'VideoView'` | | `autoplay` | boolean | `true` | When true, the video starts when it's displayed | | `controls` | boolean | `true` | Specifies that video controls should be displayed (such as a play/pause button etc) | | `format` | string | `'mp4'` | The format of the video. | | `height` | string | `''` | Height of the video in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `loop` | boolean | `true` | When true, the video will start from the beginning after finishing | | `value` | Bytes | `b''` | The media data as a byte string. | | `width` | string | `''` | Width of the video in pixels. | ### OutputModel (@jupyter-widgets/output, 1.0.0); OutputView (@jupyter-widgets/output, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | --------------------------- | --------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/output'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'@jupyter-widgets/output'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `outputs` | array of object | `[]` | The output messages synced from the frontend. | ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.v7-5.md000066400000000000000000004317641466162644600241220ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 7.4._, @jupyter-widgets/base 1.1._, and @jupyter-widgets/controls 1.4.\*. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ### LayoutModel (@jupyter-widgets/base, 1.2.0); LayoutView (@jupyter-widgets/base, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/base'` | The namespace for the model. | | `_model_module_version` | string | `'1.2.0'` | A semver requirement for namespace version containing the model. | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-content CSS attribute. | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-items CSS attribute. | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-self CSS attribute. | | `border` | `null` or string | `null` | The border CSS attribute. | | `bottom` | `null` or string | `null` | The bottom CSS attribute. | | `display` | `null` or string | `null` | The display CSS attribute. | | `flex` | `null` or string | `null` | The flex CSS attribute. | | `flex_flow` | `null` or string | `null` | The flex-flow CSS attribute. | | `grid_area` | `null` or string | `null` | The grid-area CSS attribute. | | `grid_auto_columns` | `null` or string | `null` | The grid-auto-columns CSS attribute. | | `grid_auto_flow` | `null` or string (one of `'column'`, `'row'`, `'row dense'`, `'column dense'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The grid-auto-flow CSS attribute. | | `grid_auto_rows` | `null` or string | `null` | The grid-auto-rows CSS attribute. | | `grid_column` | `null` or string | `null` | The grid-column CSS attribute. | | `grid_gap` | `null` or string | `null` | The grid-gap CSS attribute. | | `grid_row` | `null` or string | `null` | The grid-row CSS attribute. | | `grid_template_areas` | `null` or string | `null` | The grid-template-areas CSS attribute. | | `grid_template_columns` | `null` or string | `null` | The grid-template-columns CSS attribute. | | `grid_template_rows` | `null` or string | `null` | The grid-template-rows CSS attribute. | | `height` | `null` or string | `null` | The height CSS attribute. | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-content CSS attribute. | | `justify_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-items CSS attribute. | | `left` | `null` or string | `null` | The left CSS attribute. | | `margin` | `null` or string | `null` | The margin CSS attribute. | | `max_height` | `null` or string | `null` | The max-height CSS attribute. | | `max_width` | `null` or string | `null` | The max-width CSS attribute. | | `min_height` | `null` or string | `null` | The min-height CSS attribute. | | `min_width` | `null` or string | `null` | The min-width CSS attribute. | | `object_fit` | `null` or string (one of `'contain'`, `'cover'`, `'fill'`, `'scale-down'`, `'none'`) | `null` | The object-fit CSS attribute. | | `object_position` | `null` or string | `null` | The object-position CSS attribute. | | `order` | `null` or string | `null` | The order CSS attribute. | | `overflow` | `null` or string | `null` | The overflow CSS attribute. | | `overflow_x` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-x CSS attribute (deprecated). | | `overflow_y` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-y CSS attribute (deprecated). | | `padding` | `null` or string | `null` | The padding CSS attribute. | | `right` | `null` or string | `null` | The right CSS attribute. | | `top` | `null` or string | `null` | The top CSS attribute. | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The visibility CSS attribute. | | `width` | `null` or string | `null` | The width CSS attribute. | ### AccordionModel (@jupyter-widgets/controls, 1.5.0); AccordionView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'AccordionModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### AudioModel (@jupyter-widgets/controls, 1.5.0); AudioView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'AudioModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'AudioView'` | | `autoplay` | boolean | `true` | When true, the audio starts when it's displayed | | `controls` | boolean | `true` | Specifies that audio controls should be displayed (such as a play/pause button etc) | | `format` | string | `'mp3'` | The format of the audio. | | `layout` | reference to Layout widget | reference to new instance | | `loop` | boolean | `true` | When true, the audio will start from the beginning after finishing | | `value` | Bytes | `b''` | The media data as a byte string. | ### BoundedFloatTextModel (@jupyter-widgets/controls, 1.5.0); FloatTextView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'BoundedFloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### BoundedIntTextModel (@jupyter-widgets/controls, 1.5.0); IntTextView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'BoundedIntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### BoxModel (@jupyter-widgets/controls, 1.5.0); BoxView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ButtonModel (@jupyter-widgets/controls, 1.5.0); ButtonView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ButtonStyle widget | reference to new instance | | `tooltip` | string | `''` | Tooltip caption of the button. | ### ButtonStyleModel (@jupyter-widgets/controls, 1.5.0); StyleView (@jupyter-widgets/base, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ------------------------ | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_weight` | string | `''` | Button text font weight. | ### CheckboxModel (@jupyter-widgets/controls, 1.5.0); CheckboxView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `indent` | boolean | `true` | Indent the control to align with other controls with a description. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### ColorPickerModel (@jupyter-widgets/controls, 1.5.0); ColorPickerView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | Display short version with just a color selector. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `'black'` | The color value. | ### ComboboxModel (@jupyter-widgets/controls, 1.5.0); ComboboxView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ComboboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ComboboxView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `ensure_option` | boolean | `false` | If set, ensure value is in options. Implies continuous_update=False. | | `layout` | reference to Layout widget | reference to new instance | | `options` | array of string | `[]` | Dropdown options for the combobox | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ControllerAxisModel (@jupyter-widgets/controls, 1.5.0); ControllerAxisView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `layout` | reference to Layout widget | reference to new instance | | `value` | number (float) | `0.0` | The value of the axis. | ### ControllerButtonModel (@jupyter-widgets/controls, 1.5.0); ControllerButtonView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `layout` | reference to Layout widget | reference to new instance | | `pressed` | boolean | `false` | Whether the button is pressed. | | `value` | number (float) | `0.0` | The value of the button. | ### ControllerModel (@jupyter-widgets/controls, 1.5.0); ControllerView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ----------------------------------- | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array of reference to Axis widget | `[]` | The axes on the gamepad. | | `buttons` | array of reference to Button widget | `[]` | The buttons on the gamepad. | | `connected` | boolean | `false` | Whether the gamepad is connected. | | `index` | number (integer) | `0` | The id number of the controller. | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | The name of the control mapping. | | `name` | string | `''` | The name of the controller. | | `timestamp` | number (float) | `0.0` | The last time the data from this gamepad was updated. | ### DOMWidgetModel (@jupyter-widgets/controls, 1.5.0); None (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'DOMWidgetModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `layout` | reference to Layout widget | reference to new instance | | `value` | Bytes | `b''` | The media data as a byte string. | ### DatePickerModel (@jupyter-widgets/controls, 1.5.0); DatePickerView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | `null` or Date | `null` | ### DescriptionStyleModel (@jupyter-widgets/controls, 1.5.0); StyleView (@jupyter-widgets/base, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'DescriptionStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | ### DirectionalLinkModel (@jupyter-widgets/controls, 1.5.0); None (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### DropdownModel (@jupyter-widgets/controls, 1.5.0); DropdownView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### FileUploadModel (@jupyter-widgets/controls, 1.5.0); FileUploadView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ | | `_counter` | number (integer) | `0` | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'FileUploadModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'FileUploadView'` | | `accept` | string | `''` | File types to accept, empty string for all | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `data` | array | `[]` | List of file content (bytes) | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable button | | `error` | string | `''` | Error message | | `icon` | string | `'upload'` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `metadata` | array | `[]` | List of file metadata | | `multiple` | boolean | `false` | If True, allow for multiple files upload | | `style` | reference to ButtonStyle widget | reference to new instance | ### FloatLogSliderModel (@jupyter-widgets/controls, 1.5.0); FloatLogSliderView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'FloatLogSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'FloatLogSliderView'` | | `base` | number (float) | `10.0` | Base for the logarithm | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `4.0` | Max value for the exponent | | `min` | number (float) | `0.0` | Min value for the exponent | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.3g'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step in the exponent to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `1.0` | Float value | ### FloatProgressModel (@jupyter-widgets/controls, 1.5.0); ProgressView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'FloatProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatRangeSliderModel (@jupyter-widgets/controls, 1.5.0); FloatRangeSliderView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'FloatRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'FloatRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### FloatSliderModel (@jupyter-widgets/controls, 1.5.0); FloatSliderView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'FloatSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatTextModel (@jupyter-widgets/controls, 1.5.0); FloatTextView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### GridBoxModel (@jupyter-widgets/controls, 1.5.0); GridBoxView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'GridBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'GridBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HBoxModel (@jupyter-widgets/controls, 1.5.0); HBoxView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HTMLMathModel (@jupyter-widgets/controls, 1.5.0); HTMLMathView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### HTMLModel (@jupyter-widgets/controls, 1.5.0); HTMLView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ImageModel (@jupyter-widgets/controls, 1.5.0); ImageView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | The format of the image. | | `height` | string | `''` | Height of the image in pixels. Use layout.height for styling the widget. | | `layout` | reference to Layout widget | reference to new instance | | `value` | Bytes | `b''` | The media data as a byte string. | | `width` | string | `''` | Width of the image in pixels. Use layout.width for styling the widget. | ### IntProgressModel (@jupyter-widgets/controls, 1.5.0); ProgressView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'IntProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntRangeSliderModel (@jupyter-widgets/controls, 1.5.0); IntRangeSliderView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'IntRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'IntRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step that the value can take | | `style` | reference to SliderStyle widget | reference to new instance | Slider style customizations. | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### IntSliderModel (@jupyter-widgets/controls, 1.5.0); IntSliderView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'IntSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntTextModel (@jupyter-widgets/controls, 1.5.0); IntTextView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### LabelModel (@jupyter-widgets/controls, 1.5.0); LabelView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### LinkModel (@jupyter-widgets/controls, 1.5.0); None (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### PasswordModel (@jupyter-widgets/controls, 1.5.0); PasswordView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'PasswordModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'PasswordView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### PlayModel (@jupyter-widgets/controls, 1.5.0); PlayView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'PlayModel'` | | `_playing` | boolean | `false` | Whether the control is currently playing. | | `_repeat` | boolean | `false` | Whether the control will repeat in a continuous loop. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | The maximum value for the play control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `show_repeat` | boolean | `true` | Show the repeat toggle button in the widget. | | `step` | number (integer) | `1` | Increment step | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### ProgressStyleModel (@jupyter-widgets/controls, 1.5.0); StyleView (@jupyter-widgets/base, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | Color of the progress bar. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### RadioButtonsModel (@jupyter-widgets/controls, 1.5.0); RadioButtonsView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectModel (@jupyter-widgets/controls, 1.5.0); SelectView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectMultipleModel (@jupyter-widgets/controls, 1.5.0); SelectMultipleView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array of number (integer) | `[]` | Selected indices | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionRangeSliderModel (@jupyter-widgets/controls, 1.5.0); SelectionRangeSliderView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'SelectionRangeSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'SelectionRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[0, 0]` | Min and max selected indices | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionSliderModel (@jupyter-widgets/controls, 1.5.0); SelectionSliderView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | number (integer) | `0` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SliderStyleModel (@jupyter-widgets/controls, 1.5.0); StyleView (@jupyter-widgets/base, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `handle_color` | `null` or string | `null` | Color of the slider handle. | ### TabModel (@jupyter-widgets/controls, 1.5.0); TabView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'TabModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### TextModel (@jupyter-widgets/controls, 1.5.0); TextView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'TextView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### TextareaModel (@jupyter-widgets/controls, 1.5.0); TextareaView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'TextareaView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ToggleButtonModel (@jupyter-widgets/controls, 1.5.0); ToggleButtonView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tooltip` | string | `''` | Tooltip caption of the toggle button. | | `value` | boolean | `false` | Bool value | ### ToggleButtonsModel (@jupyter-widgets/controls, 1.5.0); ToggleButtonsView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array of string | `[]` | Icons names for each button (FontAwesome names without the fa- prefix). | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonsStyle widget | reference to new instance | | `tooltips` | array of string | `[]` | Tooltips for each button. | ### ToggleButtonsStyleModel (@jupyter-widgets/controls, 1.5.0); StyleView (@jupyter-widgets/base, 1.2.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ToggleButtonsStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.2.0'` | | `_view_name` | string | `'StyleView'` | | `button_width` | string | `''` | The width of each button. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_weight` | string | `''` | Text font weight of each button. | ### VBoxModel (@jupyter-widgets/controls, 1.5.0); VBoxView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ValidModel (@jupyter-widgets/controls, 1.5.0); ValidView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `description_tooltip` | `null` or string | `null` | Tooltip for the description (defaults to description). | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### VideoModel (@jupyter-widgets/controls, 1.5.0); VideoView (@jupyter-widgets/controls, 1.5.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.5.0'` | | `_model_name` | string | `'VideoModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.5.0'` | | `_view_name` | string | `'VideoView'` | | `autoplay` | boolean | `true` | When true, the video starts when it's displayed | | `controls` | boolean | `true` | Specifies that video controls should be displayed (such as a play/pause button etc) | | `format` | string | `'mp4'` | The format of the video. | | `height` | string | `''` | Height of the video in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `loop` | boolean | `true` | When true, the video will start from the beginning after finishing | | `value` | Bytes | `b''` | The media data as a byte string. | | `width` | string | `''` | Width of the video in pixels. | ### OutputModel (@jupyter-widgets/output, 1.0.0); OutputView (@jupyter-widgets/output, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | --------------------------- | --------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/output'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'@jupyter-widgets/output'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `outputs` | array of object | `[]` | The output messages synced from the frontend. | ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.v7.md000066400000000000000000003403511466162644600237470ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 7.0, @jupyter-widgets/base 1.0.0, and @jupyter-widgets/controls 1.0.0. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ### LayoutModel (@jupyter-widgets/base, 1.0.0); LayoutView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/base'` | The namespace for the model. | | `_model_module_version` | string | `'1.0.0'` | A semver requirement for namespace version containing the model. | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-content CSS attribute. | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-items CSS attribute. | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-self CSS attribute. | | `border` | `null` or string | `null` | The border CSS attribute. | | `bottom` | `null` or string | `null` | The bottom CSS attribute. | | `display` | `null` or string | `null` | The display CSS attribute. | | `flex` | `null` or string | `null` | The flex CSS attribute. | | `flex_flow` | `null` or string | `null` | The flex-flow CSS attribute. | | `height` | `null` or string | `null` | The height CSS attribute. | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-content CSS attribute. | | `left` | `null` or string | `null` | The left CSS attribute. | | `margin` | `null` or string | `null` | The margin CSS attribute. | | `max_height` | `null` or string | `null` | The max-height CSS attribute. | | `max_width` | `null` or string | `null` | The max-width CSS attribute. | | `min_height` | `null` or string | `null` | The min-height CSS attribute. | | `min_width` | `null` or string | `null` | The min-width CSS attribute. | | `order` | `null` or string | `null` | The order CSS attribute. | | `overflow` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow CSS attribute. | | `overflow_x` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-x CSS attribute. | | `overflow_y` | `null` or string (one of `'visible'`, `'hidden'`, `'scroll'`, `'auto'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The overflow-y CSS attribute. | | `padding` | `null` or string | `null` | The padding CSS attribute. | | `right` | `null` or string | `null` | The right CSS attribute. | | `top` | `null` or string | `null` | The top CSS attribute. | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The visibility CSS attribute. | | `width` | `null` or string | `null` | The width CSS attribute. | ### AccordionModel (@jupyter-widgets/controls, 1.0.0); AccordionView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'AccordionModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### BoundedFloatTextModel (@jupyter-widgets/controls, 1.0.0); FloatTextView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'BoundedFloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### BoundedIntTextModel (@jupyter-widgets/controls, 1.0.0); IntTextView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'BoundedIntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### BoxModel (@jupyter-widgets/controls, 1.0.0); BoxView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ButtonModel (@jupyter-widgets/controls, 1.0.0); ButtonView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ButtonStyle widget | reference to new instance | | `tooltip` | string | `''` | Tooltip caption of the button. | ### ButtonStyleModel (@jupyter-widgets/controls, 1.0.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ------------------------ | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_weight` | string | `''` | Button text font weight. | ### CheckboxModel (@jupyter-widgets/controls, 1.0.0); CheckboxView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `indent` | boolean | `true` | Indent the control to align with other controls with a description. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### ColorPickerModel (@jupyter-widgets/controls, 1.0.0); ColorPickerView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | Display short version with just a color selector. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `'black'` | The color value. | ### ControllerAxisModel (@jupyter-widgets/controls, 1.0.0); ControllerAxisView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `layout` | reference to Layout widget | reference to new instance | | `value` | number (float) | `0.0` | The value of the axis. | ### ControllerButtonModel (@jupyter-widgets/controls, 1.0.0); ControllerButtonView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `layout` | reference to Layout widget | reference to new instance | | `pressed` | boolean | `false` | Whether the button is pressed. | | `value` | number (float) | `0.0` | The value of the button. | ### ControllerModel (@jupyter-widgets/controls, 1.0.0); ControllerView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array | `[]` | The axes on the gamepad. | | `buttons` | array | `[]` | The buttons on the gamepad. | | `connected` | boolean | `false` | Whether the gamepad is connected. | | `index` | number (integer) | `0` | The id number of the controller. | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | The name of the control mapping. | | `name` | string | `''` | The name of the controller. | | `timestamp` | number (float) | `0.0` | The last time the data from this gamepad was updated. | ### DatePickerModel (@jupyter-widgets/controls, 1.0.0); DatePickerView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | `null` or Date | `null` | ### DescriptionStyleModel (@jupyter-widgets/controls, 1.0.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'DescriptionStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | ### DirectionalLinkModel (@jupyter-widgets/controls, 1.0.0); None (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### DropdownModel (@jupyter-widgets/controls, 1.0.0); DropdownView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### FloatProgressModel (@jupyter-widgets/controls, 1.0.0); ProgressView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------ | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'FloatProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatRangeSliderModel (@jupyter-widgets/controls, 1.0.0); FloatRangeSliderView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'FloatRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'FloatRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### FloatSliderModel (@jupyter-widgets/controls, 1.0.0); FloatSliderView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'FloatSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (float) | `0.0` | Float value | ### FloatTextModel (@jupyter-widgets/controls, 1.0.0); FloatTextView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (float) | `0.0` | Float value | ### HBoxModel (@jupyter-widgets/controls, 1.0.0); HBoxView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### HTMLMathModel (@jupyter-widgets/controls, 1.0.0); HTMLMathView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### HTMLModel (@jupyter-widgets/controls, 1.0.0); HTMLView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ImageModel (@jupyter-widgets/controls, 1.0.0); ImageView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | The format of the image. | | `height` | string | `''` | Height of the image in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `value` | Bytes | `b''` | The image data as a byte string. | | `width` | string | `''` | Width of the image in pixels. | ### IntProgressModel (@jupyter-widgets/controls, 1.0.0); ProgressView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'IntProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntRangeSliderModel (@jupyter-widgets/controls, 1.0.0); IntRangeSliderView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'IntRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'IntRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step that the value can take | | `style` | reference to SliderStyle widget | reference to new instance | Slider style customizations. | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### IntSliderModel (@jupyter-widgets/controls, 1.0.0); IntSliderView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'IntSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `value` | number (integer) | `0` | Int value | ### IntTextModel (@jupyter-widgets/controls, 1.0.0); IntTextView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### LabelModel (@jupyter-widgets/controls, 1.0.0); LabelView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### LinkModel (@jupyter-widgets/controls, 1.0.0); None (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### PasswordModel (@jupyter-widgets/controls, 1.0.0); PasswordView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'PasswordModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'PasswordView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### PlayModel (@jupyter-widgets/controls, 1.0.0); PlayView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'PlayModel'` | | `_playing` | boolean | `false` | Whether the control is currently playing. | | `_repeat` | boolean | `false` | Whether the control will repeat in a continuous loop. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | The maximum value for the play control. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `show_repeat` | boolean | `true` | Show the repeat toggle button in the widget. | | `step` | number (integer) | `1` | Increment step | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | number (integer) | `0` | Int value | ### ProgressStyleModel (@jupyter-widgets/controls, 1.0.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | Color of the progress bar. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### RadioButtonsModel (@jupyter-widgets/controls, 1.0.0); RadioButtonsView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectModel (@jupyter-widgets/controls, 1.0.0); SelectView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectMultipleModel (@jupyter-widgets/controls, 1.0.0); SelectMultipleView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[]` | Selected indices | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionRangeSliderModel (@jupyter-widgets/controls, 1.0.0); SelectionRangeSliderView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'SelectionRangeSliderModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'SelectionRangeSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[0, 0]` | Min and max selected indices | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SelectionSliderModel (@jupyter-widgets/controls, 1.0.0); SelectionSliderView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------- | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | number (integer) | `0` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | ### SliderStyleModel (@jupyter-widgets/controls, 1.0.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `handle_color` | `null` or string | `null` | Color of the slider handle. | ### TabModel (@jupyter-widgets/controls, 1.0.0); TabView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'TabModel'` | | `_titles` | object | `{}` | Titles of the pages | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `0` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | ### TextModel (@jupyter-widgets/controls, 1.0.0); TextView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'TextView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### TextareaModel (@jupyter-widgets/controls, 1.0.0); TextareaView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'TextareaView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | string | `''` | String value | ### ToggleButtonModel (@jupyter-widgets/controls, 1.0.0); ToggleButtonView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tooltip` | string | `''` | Tooltip caption of the toggle button. | | `value` | boolean | `false` | Bool value | ### ToggleButtonsModel (@jupyter-widgets/controls, 1.0.0); ToggleButtonsView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array | `[]` | Icons names for each button (FontAwesome names without the fa- prefix). | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonsStyle widget | reference to new instance | | `tooltips` | array | `[]` | Tooltips for each button. | ### ToggleButtonsStyleModel (@jupyter-widgets/controls, 1.0.0); StyleView (@jupyter-widgets/base, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ToggleButtonsStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_width` | string | `''` | The width of each button. | ### VBoxModel (@jupyter-widgets/controls, 1.0.0); VBoxView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | ### ValidModel (@jupyter-widgets/controls, 1.0.0); ValidView (@jupyter-widgets/controls, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `value` | boolean | `false` | Bool value | ### OutputModel (@jupyter-widgets/output, 1.0.0); OutputView (@jupyter-widgets/output, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | --------------------------- | --------------------------------------------- | | `_dom_classes` | array | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/output'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'@jupyter-widgets/output'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `outputs` | array | `[]` | The output messages synced from the frontend. | ipywidgets-8.1.5/packages/schema/jupyterwidgetmodels.v8.md000066400000000000000000006054661466162644600237630ustar00rootroot00000000000000# Model State This is a description of the model state for each widget in the core Jupyter widgets library. The model ID of a widget is the id of the comm object the widget is using. A reference to a widget is serialized to JSON as a string of the form `"IPY_MODEL_"`, where `` is the model ID of a previously created widget of the specified type. This model specification is for ipywidgets 8. ## Model attributes Each widget in the Jupyter core widgets is represented below. The heading represents the model name, module, and version, view name, module, and version that the widget is registered with. ### LayoutModel (@jupyter-widgets/base, 2.0.0); LayoutView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | ---------------------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/base'` | The namespace for the model. | | `_model_module_version` | string | `'2.0.0'` | A semver requirement for namespace version containing the model. | | `_model_name` | string | `'LayoutModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'LayoutView'` | | `align_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'space-evenly'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-content CSS attribute. | | `align_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-items CSS attribute. | | `align_self` | `null` or string (one of `'auto'`, `'flex-start'`, `'flex-end'`, `'center'`, `'baseline'`, `'stretch'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The align-self CSS attribute. | | `border_bottom` | `null` or string | `null` | The border bottom CSS attribute. | | `border_left` | `null` or string | `null` | The border left CSS attribute. | | `border_right` | `null` or string | `null` | The border right CSS attribute. | | `border_top` | `null` or string | `null` | The border top CSS attribute. | | `bottom` | `null` or string | `null` | The bottom CSS attribute. | | `display` | `null` or string | `null` | The display CSS attribute. | | `flex` | `null` or string | `null` | The flex CSS attribute. | | `flex_flow` | `null` or string | `null` | The flex-flow CSS attribute. | | `grid_area` | `null` or string | `null` | The grid-area CSS attribute. | | `grid_auto_columns` | `null` or string | `null` | The grid-auto-columns CSS attribute. | | `grid_auto_flow` | `null` or string (one of `'column'`, `'row'`, `'row dense'`, `'column dense'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The grid-auto-flow CSS attribute. | | `grid_auto_rows` | `null` or string | `null` | The grid-auto-rows CSS attribute. | | `grid_column` | `null` or string | `null` | The grid-column CSS attribute. | | `grid_gap` | `null` or string | `null` | The grid-gap CSS attribute. | | `grid_row` | `null` or string | `null` | The grid-row CSS attribute. | | `grid_template_areas` | `null` or string | `null` | The grid-template-areas CSS attribute. | | `grid_template_columns` | `null` or string | `null` | The grid-template-columns CSS attribute. | | `grid_template_rows` | `null` or string | `null` | The grid-template-rows CSS attribute. | | `height` | `null` or string | `null` | The height CSS attribute. | | `justify_content` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'space-between'`, `'space-around'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-content CSS attribute. | | `justify_items` | `null` or string (one of `'flex-start'`, `'flex-end'`, `'center'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The justify-items CSS attribute. | | `left` | `null` or string | `null` | The left CSS attribute. | | `margin` | `null` or string | `null` | The margin CSS attribute. | | `max_height` | `null` or string | `null` | The max-height CSS attribute. | | `max_width` | `null` or string | `null` | The max-width CSS attribute. | | `min_height` | `null` or string | `null` | The min-height CSS attribute. | | `min_width` | `null` or string | `null` | The min-width CSS attribute. | | `object_fit` | `null` or string (one of `'contain'`, `'cover'`, `'fill'`, `'scale-down'`, `'none'`) | `null` | The object-fit CSS attribute. | | `object_position` | `null` or string | `null` | The object-position CSS attribute. | | `order` | `null` or string | `null` | The order CSS attribute. | | `overflow` | `null` or string | `null` | The overflow CSS attribute. | | `padding` | `null` or string | `null` | The padding CSS attribute. | | `right` | `null` or string | `null` | The right CSS attribute. | | `top` | `null` or string | `null` | The top CSS attribute. | | `visibility` | `null` or string (one of `'visible'`, `'hidden'`, `'inherit'`, `'initial'`, `'unset'`) | `null` | The visibility CSS attribute. | | `width` | `null` or string | `null` | The width CSS attribute. | ### AccordionModel (@jupyter-widgets/controls, 2.0.0); AccordionView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'AccordionModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'AccordionView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `titles` | array of string | `[]` | Titles of the pages | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### AudioModel (@jupyter-widgets/controls, 2.0.0); AudioView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'AudioModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'AudioView'` | | `autoplay` | boolean | `true` | When true, the audio starts when it's displayed | | `controls` | boolean | `true` | Specifies that audio controls should be displayed (such as a play/pause button etc) | | `format` | string | `'mp3'` | The format of the audio. | | `layout` | reference to Layout widget | reference to new instance | | `loop` | boolean | `true` | When true, the audio will start from the beginning after finishing | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | Bytes | `b''` | The media data as a memory view of bytes. | ### BoundedFloatTextModel (@jupyter-widgets/controls, 2.0.0); FloatTextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'BoundedFloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | Float value | ### BoundedIntTextModel (@jupyter-widgets/controls, 2.0.0); IntTextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'BoundedIntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### BoxModel (@jupyter-widgets/controls, 2.0.0); BoxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'BoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'BoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### ButtonModel (@jupyter-widgets/controls, 2.0.0); ButtonView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | --------------------------------------------------------------------------------- | ----------------------------- | -------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Button label. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon names, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ButtonStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### ButtonStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_color` | `null` or string | `null` | Color of the button | | `font_family` | `null` or string | `null` | Button text font family. | | `font_size` | `null` or string | `null` | Button text font size. | | `font_style` | `null` or string | `null` | Button text font style. | | `font_variant` | `null` or string | `null` | Button text font variant. | | `font_weight` | `null` or string | `null` | Button text font weight. | | `text_color` | `null` or string | `null` | Button text color. | | `text_decoration` | `null` or string | `null` | Button text decoration. | ### CheckboxModel (@jupyter-widgets/controls, 2.0.0); CheckboxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------- | ----------------------------- | ------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'CheckboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'CheckboxView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `indent` | boolean | `true` | Indent the control to align with other controls with a description. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to CheckboxStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | boolean | `false` | Bool value | ### CheckboxStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'CheckboxStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### ColorPickerModel (@jupyter-widgets/controls, 2.0.0); ColorPickerView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ColorPickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ColorPickerView'` | | `concise` | boolean | `false` | Display short version with just a color selector. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `'black'` | The color value. | ### ColorsInputModel (@jupyter-widgets/controls, 2.0.0); ColorsInputView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ColorsInputModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ColorsInputView'` | | `allow_duplicates` | boolean | `true` | | `allowed_tags` | array | `[]` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[]` | List of string tags | ### ComboboxModel (@jupyter-widgets/controls, 2.0.0); ComboboxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ComboboxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ComboboxView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `ensure_option` | boolean | `false` | If set, ensure value is in options. Implies continuous_update=False. | | `layout` | reference to Layout widget | reference to new instance | | `options` | array of string | `[]` | Dropdown options for the combobox | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to TextStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### ControllerAxisModel (@jupyter-widgets/controls, 2.0.0); ControllerAxisView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ControllerAxisModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ControllerAxisView'` | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | The value of the axis. | ### ControllerButtonModel (@jupyter-widgets/controls, 2.0.0); ControllerButtonView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ControllerButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ControllerButtonView'` | | `layout` | reference to Layout widget | reference to new instance | | `pressed` | boolean | `false` | Whether the button is pressed. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | The value of the button. | ### ControllerModel (@jupyter-widgets/controls, 2.0.0); ControllerView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ----------------------------------- | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ControllerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ControllerView'` | | `axes` | array of reference to Axis widget | `[]` | The axes on the gamepad. | | `buttons` | array of reference to Button widget | `[]` | The buttons on the gamepad. | | `connected` | boolean | `false` | Whether the gamepad is connected. | | `index` | number (integer) | `0` | The id number of the controller. | | `layout` | reference to Layout widget | reference to new instance | | `mapping` | string | `''` | The name of the control mapping. | | `name` | string | `''` | The name of the controller. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `timestamp` | number (float) | `0.0` | The last time the data from this gamepad was updated. | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### DOMWidgetModel (@jupyter-widgets/controls, 2.0.0); None (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DOMWidgetModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | Bytes | `b''` | The media data as a memory view of bytes. | ### DatePickerModel (@jupyter-widgets/controls, 2.0.0); DatePickerView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------- | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DatePickerModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'DatePickerView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or Date | `null` | | `min` | `null` or Date | `null` | | `step` | number (integer) or string (one of `'any'`) | `1` | The date step to use for the picker, in days, or "any". | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | `null` or Date | `null` | ### DatetimeModel (@jupyter-widgets/controls, 2.0.0); DatetimeView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DatetimeModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'DatetimeView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or Datetime | `null` | | `min` | `null` or Datetime | `null` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | `null` or Datetime | `null` | ### DescriptionStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DescriptionStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | ### DirectionalLinkModel (@jupyter-widgets/controls, 2.0.0); None (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DirectionalLinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### DropdownModel (@jupyter-widgets/controls, 2.0.0); DropdownView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'DropdownModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'DropdownView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### FileUploadModel (@jupyter-widgets/controls, 2.0.0); FileUploadView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FileUploadModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FileUploadView'` | | `accept` | string | `''` | File types to accept, empty string for all | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable button | | `error` | string | `''` | Error message | | `icon` | string | `'upload'` | Font-awesome icon name, without the 'fa-' prefix. | | `layout` | reference to Layout widget | reference to new instance | | `multiple` | boolean | `false` | If True, allow for multiple files upload | | `style` | reference to ButtonStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array of object | `[]` | The file upload value | ### FloatLogSliderModel (@jupyter-widgets/controls, 2.0.0); FloatLogSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatLogSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatLogSliderView'` | | `base` | number (float) | `10.0` | Base for the logarithm | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `4.0` | Max value for the exponent | | `min` | number (float) | `0.0` | Min value for the exponent | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.3g'` | Format for the readout | | `step` | `null` or number (float) | `0.1` | Minimum step in the exponent to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `1.0` | Float value | ### FloatProgressModel (@jupyter-widgets/controls, 2.0.0); ProgressView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------------ | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | `null` or string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | Float value | ### FloatRangeSliderModel (@jupyter-widgets/controls, 2.0.0); FloatRangeSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatRangeSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | `null` or number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[0.0, 1.0]` | Tuple of (lower, upper) bounds | ### FloatSliderModel (@jupyter-widgets/controls, 2.0.0); FloatSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (float) | `100.0` | Max value | | `min` | number (float) | `0.0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'.2f'` | Format for the readout | | `step` | `null` or number (float) | `0.1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | Float value | ### FloatTextModel (@jupyter-widgets/controls, 2.0.0); FloatTextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | `null` or number (float) | `null` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (float) | `0.0` | Float value | ### FloatsInputModel (@jupyter-widgets/controls, 2.0.0); FloatsInputView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'FloatsInputModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'FloatsInputView'` | | `allow_duplicates` | boolean | `true` | | `allowed_tags` | array | `[]` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `format` | string | `'.1f'` | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or number (float) | `null` | | `min` | `null` or number (float) | `null` | | `placeholder` | string | `'\u200b'` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tag_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the tags. | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[]` | List of float tags | ### GridBoxModel (@jupyter-widgets/controls, 2.0.0); GridBoxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'GridBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'GridBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### HBoxModel (@jupyter-widgets/controls, 2.0.0); HBoxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'HBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### HTMLMathModel (@jupyter-widgets/controls, 2.0.0); HTMLMathView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------- | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HTMLMathModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'HTMLMathView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to HTMLMathStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### HTMLMathStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HTMLMathStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_size` | `null` or string | `null` | Text font size. | | `text_color` | `null` or string | `null` | Text color | ### HTMLModel (@jupyter-widgets/controls, 2.0.0); HTMLView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HTMLModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'HTMLView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to HTMLStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### HTMLStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'HTMLStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_size` | `null` or string | `null` | Text font size. | | `text_color` | `null` or string | `null` | Text color | ### ImageModel (@jupyter-widgets/controls, 2.0.0); ImageView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ImageModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ImageView'` | | `format` | string | `'png'` | The format of the image. | | `height` | string | `''` | Height of the image in pixels. Use layout.height for styling the widget. | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | Bytes | `b''` | The media data as a memory view of bytes. | | `width` | string | `''` | Width of the image in pixels. Use layout.width for styling the widget. | ### IntProgressModel (@jupyter-widgets/controls, 2.0.0); ProgressView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | -------------------------------------------------------------------- | ----------------------------- | ---------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntProgressModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ProgressView'` | | `bar_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the progress bar. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `style` | reference to ProgressStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### IntRangeSliderModel (@jupyter-widgets/controls, 2.0.0); IntRangeSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntRangeSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntRangeSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is sliding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step that the value can take | | `style` | reference to SliderStyle widget | reference to new instance | Slider style customizations. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[0, 1]` | Tuple of (lower, upper) bounds | ### IntSliderModel (@jupyter-widgets/controls, 2.0.0); IntSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntSliderModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current value of the slider next to it. | | `readout_format` | string | `'d'` | Format for the readout | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### IntTextModel (@jupyter-widgets/controls, 2.0.0); IntTextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntTextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntTextView'` | | `continuous_update` | boolean | `false` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `step` | number (integer) | `1` | Minimum step to increment the value | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### IntsInputModel (@jupyter-widgets/controls, 2.0.0); IntsInputView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'IntsInputModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'IntsInputView'` | | `allow_duplicates` | boolean | `true` | | `allowed_tags` | array | `[]` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `format` | string | `'d'` | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or number (integer) | `null` | | `min` | `null` or number (integer) | `null` | | `placeholder` | string | `'\u200b'` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tag_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the tags. | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[]` | List of int tags | ### LabelModel (@jupyter-widgets/controls, 2.0.0); LabelView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------ | ----------------------------- | ------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'LabelModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'LabelView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to LabelStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### LabelStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'LabelStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_family` | `null` or string | `null` | Label text font family. | | `font_size` | `null` or string | `null` | Text font size. | | `font_style` | `null` or string | `null` | Label text font style. | | `font_variant` | `null` or string | `null` | Label text font variant. | | `font_weight` | `null` or string | `null` | Label text font weight. | | `text_color` | `null` or string | `null` | Text color | | `text_decoration` | `null` or string | `null` | Label text decoration. | ### LinkModel (@jupyter-widgets/controls, 2.0.0); None (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | -------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'LinkModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | `null` or string | `null` | Name of the view. | | `source` | array | `[]` | The source (widget, 'trait_name') pair | | `target` | array | `[]` | The target (widget, 'trait_name') pair | ### NaiveDatetimeModel (@jupyter-widgets/controls, 2.0.0); DatetimeView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'NaiveDatetimeModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'DatetimeView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or Datetime | `null` | | `min` | `null` or Datetime | `null` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | `null` or Datetime | `null` | ### PasswordModel (@jupyter-widgets/controls, 2.0.0); PasswordView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'PasswordModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'PasswordView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to TextStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### PlayModel (@jupyter-widgets/controls, 2.0.0); PlayView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'PlayModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'PlayView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `interval` | number (integer) | `100` | The time between two animation steps (ms). | | `layout` | reference to Layout widget | reference to new instance | | `max` | number (integer) | `100` | Max value | | `min` | number (integer) | `0` | Min value | | `playing` | boolean | `false` | Whether the control is currently playing. | | `repeat` | boolean | `false` | Whether the control will repeat in a continuous loop. | | `show_repeat` | boolean | `true` | Show the repeat toggle button in the widget. | | `step` | number (integer) | `1` | Increment step | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | number (integer) | `0` | Int value | ### ProgressStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ProgressStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `bar_color` | `null` or string | `null` | Color of the progress bar. | | `description_width` | string | `''` | Width of the description to the side of the control. | ### RadioButtonsModel (@jupyter-widgets/controls, 2.0.0); RadioButtonsView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'RadioButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'RadioButtonsView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SelectModel (@jupyter-widgets/controls, 2.0.0); SelectView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SelectModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'SelectView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SelectMultipleModel (@jupyter-widgets/controls, 2.0.0); SelectMultipleView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SelectMultipleModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'SelectMultipleView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array of number (integer) | `[]` | Selected indices | | `layout` | reference to Layout widget | reference to new instance | | `rows` | number (integer) | `5` | The number of rows to display. | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SelectionRangeSliderModel (@jupyter-widgets/controls, 2.0.0); SelectionRangeSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SelectionRangeSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'SelectionRangeSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | array | `[0, 0]` | Min and max selected indices | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SelectionSliderModel (@jupyter-widgets/controls, 2.0.0); SelectionSliderView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------ | ----------------------------- | ----------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SelectionSliderModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'SelectionSliderView'` | | `behavior` | string (one of `'drag-tap'`, `'drag-snap'`, `'tap'`, `'drag'`, `'snap'`) | `'drag-tap'` | Slider dragging behavior. | | `continuous_update` | boolean | `true` | Update the value of the widget as the user is holding the slider. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `index` | number (integer) | `0` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `orientation` | string (one of `'horizontal'`, `'vertical'`) | `'horizontal'` | Vertical or horizontal. | | `readout` | boolean | `true` | Display the current selected label next to the slider | | `style` | reference to SliderStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### SliderStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'SliderStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `handle_color` | `null` or string | `null` | Color of the slider handle. | ### StackModel (@jupyter-widgets/controls, 2.0.0); StackView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'StackModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StackView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `titles` | array of string | `[]` | Titles of the pages | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### TabModel (@jupyter-widgets/controls, 2.0.0); TabView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TabModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TabView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `selected_index` | `null` or number (integer) | `null` | The index of the selected page. This is either an integer selecting a particular sub-widget, or None to have no widgets selected. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `titles` | array of string | `[]` | Titles of the pages | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### TagsInputModel (@jupyter-widgets/controls, 2.0.0); TagsInputView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TagsInputModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TagsInputView'` | | `allow_duplicates` | boolean | `true` | | `allowed_tags` | array | `[]` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tag_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the tags. | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | array | `[]` | List of string tags | ### TextModel (@jupyter-widgets/controls, 2.0.0); TextView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TextModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TextView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `style` | reference to TextStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### TextStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TextStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `background` | `null` or string | `null` | Background specifications. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_size` | `null` or string | `null` | Text font size. | | `text_color` | `null` or string | `null` | Text color | ### TextareaModel (@jupyter-widgets/controls, 2.0.0); TextareaView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TextareaModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TextareaView'` | | `continuous_update` | boolean | `true` | Update the value as the user types. If False, update on submission, e.g., pressing Enter or navigating away. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `layout` | reference to Layout widget | reference to new instance | | `placeholder` | string | `'\u200b'` | Placeholder text to display when nothing has been typed | | `rows` | `null` or number (integer) | `null` | The number of rows to display. | | `style` | reference to TextStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | string | `''` | String value | ### TimeModel (@jupyter-widgets/controls, 2.0.0); TimeView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ----------------------------------------- | ----------------------------- | ---------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'TimeModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'TimeView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `max` | `null` or Time | `null` | | `min` | `null` or Time | `null` | | `step` | number (float) or string (one of `'any'`) | `60` | The time step to use for the picker, in seconds, or "any". | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | `null` or Time | `null` | ### ToggleButtonModel (@jupyter-widgets/controls, 2.0.0); ToggleButtonView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | --------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ToggleButtonModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ToggleButtonView'` | | `button_style` | string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the button. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `icon` | string | `''` | Font-awesome icon. | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | boolean | `false` | Bool value | ### ToggleButtonStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ---------------- | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ToggleButtonStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_family` | `null` or string | `null` | Toggle button text font family. | | `font_size` | `null` or string | `null` | Toggle button text font size. | | `font_style` | `null` or string | `null` | Toggle button text font style. | | `font_variant` | `null` or string | `null` | Toggle button text font variant. | | `font_weight` | `null` or string | `null` | Toggle button text font weight. | | `text_color` | `null` or string | `null` | Toggle button text color | | `text_decoration` | `null` or string | `null` | Toggle button text decoration. | ### ToggleButtonsModel (@jupyter-widgets/controls, 2.0.0); ToggleButtonsView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------------------------------------------------------------- | ----------------------------- | ----------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ToggleButtonsModel'` | | `_options_labels` | array of string | `[]` | The labels for the options. | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ToggleButtonsView'` | | `button_style` | `null` or string (one of `'primary'`, `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the buttons. | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes | | `icons` | array of string | `[]` | Icons names for each button (FontAwesome names without the fa- prefix). | | `index` | `null` or number (integer) | `null` | Selected index | | `layout` | reference to Layout widget | reference to new instance | | `style` | reference to ToggleButtonsStyle widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `tooltips` | array of string | `[]` | Tooltips for each button. | ### ToggleButtonsStyleModel (@jupyter-widgets/controls, 2.0.0); StyleView (@jupyter-widgets/base, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | ------ | ----------------------------- | ---------------------------------------------------- | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ToggleButtonsStyleModel'` | | `_view_module` | string | `'@jupyter-widgets/base'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'StyleView'` | | `button_width` | string | `''` | The width of each button. | | `description_width` | string | `''` | Width of the description to the side of the control. | | `font_weight` | string | `''` | Text font weight of each button. | ### VBoxModel (@jupyter-widgets/controls, 2.0.0); VBoxView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------------------------------------------------- | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'VBoxModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'VBoxView'` | | `box_style` | string (one of `'success'`, `'info'`, `'warning'`, `'danger'`, `''`) | `''` | Use a predefined styling for the box. | | `children` | array of reference to Widget widget | `[]` | List of widget children | | `layout` | reference to Layout widget | reference to new instance | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ### ValidModel (@jupyter-widgets/controls, 2.0.0); ValidView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ------------------------ | ------------------------------------ | ----------------------------- | ----------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'ValidModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'ValidView'` | | `description` | string | `''` | Description of the control. | | `description_allow_html` | boolean | `false` | Accept HTML in the description. | | `disabled` | boolean | `false` | Enable or disable user changes. | | `layout` | reference to Layout widget | reference to new instance | | `readout` | string | `'Invalid'` | Message displayed when the value is False | | `style` | reference to DescriptionStyle widget | reference to new instance | Styling customizations | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | boolean | `false` | Bool value | ### VideoModel (@jupyter-widgets/controls, 2.0.0); VideoView (@jupyter-widgets/controls, 2.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | ----------------------------- | ----------------------------------------------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/controls'` | | `_model_module_version` | string | `'2.0.0'` | | `_model_name` | string | `'VideoModel'` | | `_view_module` | string | `'@jupyter-widgets/controls'` | | `_view_module_version` | string | `'2.0.0'` | | `_view_name` | string | `'VideoView'` | | `autoplay` | boolean | `true` | When true, the video starts when it's displayed | | `controls` | boolean | `true` | Specifies that video controls should be displayed (such as a play/pause button etc) | | `format` | string | `'mp4'` | The format of the video. | | `height` | string | `''` | Height of the video in pixels. | | `layout` | reference to Layout widget | reference to new instance | | `loop` | boolean | `true` | When true, the video will start from the beginning after finishing | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | | `value` | Bytes | `b''` | The media data as a memory view of bytes. | | `width` | string | `''` | Width of the video in pixels. | ### OutputModel (@jupyter-widgets/output, 1.0.0); OutputView (@jupyter-widgets/output, 1.0.0) | Attribute | Type | Default | Help | | ----------------------- | -------------------------- | --------------------------- | --------------------------------------------- | | `_dom_classes` | array of string | `[]` | CSS classes applied to widget DOM element | | `_model_module` | string | `'@jupyter-widgets/output'` | | `_model_module_version` | string | `'1.0.0'` | | `_model_name` | string | `'OutputModel'` | | `_view_module` | string | `'@jupyter-widgets/output'` | | `_view_module_version` | string | `'1.0.0'` | | `_view_name` | string | `'OutputView'` | | `layout` | reference to Layout widget | reference to new instance | | `msg_id` | string | `''` | Parent message id of messages to capture | | `outputs` | array of object | `[]` | The output messages synced from the frontend. | | `tabbable` | `null` or boolean | `null` | Is widget tabbable? | | `tooltip` | `null` or string | `null` | A tooltip caption. | ipywidgets-8.1.5/packages/schema/messages.md000066400000000000000000000476541466162644600211230ustar00rootroot00000000000000# Widget messaging protocol, version 1 This is implemented in ipywidgets 6.0. A Jupyter widget has both a frontend and kernel object communicating with each other using the `comm` messages provided by the Jupyter kernel messaging protocol. The primary communication that happens is synchronizing widget state, represented in the messages by a dictionary of key-value pairs. The Jupyter widget messaging protocol covers `comm` messages for the following actions: - creating a companion Jupyter widget object through opening a `comm` - synchronizing widget state between the frontend and the kernel companion objects - sending custom messages between these objects - displaying a widget For more details on the `comm` infrastructure, see the [Custom messages section](http://jupyter-client.readthedocs.io/en/latest/messaging.html#custom-messages) of the Jupyter kernel message specification. Throughout this document, relevant parts of messages to the discussion are quoted, and fields irrelevant to the discussion are not displayed. ## Implementing the Jupyter widgets protocol in the kernel In this section, we concentrate on implementing the Jupyter widget messaging protocol in the kernel. ### The `jupyter.widget.version` comm target A kernel-side Jupyter widgets library registers the `jupyter.widget.version` comm target for communicating version information between the frontend and the kernel. When a frontend initializes a Jupyter widgets extension (for example, when a notebook is opened), the frontend widgets extension sends the kernel a `comm_open` message to the `jupyter.widget.version` comm target: ``` { 'comm_id': 'u-u-i-d', 'target_name': 'jupyter.widget.version' } ``` The kernel widgets implementation should immediately send a message on the opened comm channel containing the semver range of the frontend version of jupyter-js-widgets that it expects to communicate with: ``` { 'comm_id': 'u-u-i-d', 'data': { 'version': '~2.1.0' } } ``` The frontend widgets extension then compares the expected semver range with the actual version number and replies with a message on the comm channel giving the validation status and the frontend widgets extension version: ``` { 'comm_id': 'u-u-i-d', 'data': { 'frontend_version: '2.1.4', 'validated': true } } ``` ### The `jupyter.widget` comm target A kernel-side Jupyter widgets library also registers a `jupyter.widget` comm target for created creating widget comm channels (one per widget instance). State synchronization and custom messages for a particular widget instance are then sent over the created widget comm channel. ### Instantiating a widget object When a widget is instantiated in either the kernel or the frontend, it creates a companion object on the other side by sending a `comm_open` message to the `jupyter.widget` comm target. #### Reception of a `comm_open` message from the frontend When a frontend creates a Jupyter widget, it sends a `comm_open` message to the kernel: ``` { 'comm_id' : 'u-u-i-d', 'target_name' : 'jupyter.widget', 'data' : { 'widget_class': 'some.string' } } ``` The type of widget to be instantiated is given in the `widget_class` string. In the ipywidgets implementation, this string is actually the key in a registry of widget types. In the ipywidgets implementation, widget types are registered in the dictionary with the `register` decorator. For example the integral progress bar class is registered with `@register('Jupyter.IntProgress')`. When the `widget_class` is not in the registry, it is parsed as a `module` `+` `class` string. #### Sending a `comm_open` message upon instantiation of a widget Symmetrically, when instantiating a widget in the kernel, the kernel widgets library sends a `comm_open` message to the frontend: ``` { 'comm_id' : 'u-u-i-d', 'target_name' : 'jupyter.widget', 'data' : { } } ``` The type of widget to be instantiated in the frontend is determined by the `_model_name`, `_model_module` and `_model_module_version` keys in the state, which respectively stand for the name of the class that must be instantiated in the frontend, the JavaScript module where this class is defined, and a semver range for that module. See the [Model State](jupyterwidgetmodels.v6.md) documentation for the serialized state for core Jupyter widgets. ### State synchronization #### Synchronizing from kernel to frontend: `update` When a widget's state changes in the kernel, the changed state keys and values are sent to the frontend over the widget's comm channel using an `update` message: ``` { 'comm_id' : 'u-u-i-d', 'data' : { 'method': 'update', 'state': { }, 'buffers': [ ] } } ``` The state update is split between values that are serializable with JSON (in the `data.state` dictionary), and binary values (represented in `data.buffers`). The `data.state` value is a dictionary of widget state keys and values that can be serialized to JSON. Comm messages for state synchronization may contain binary buffers. The optional `data.buffers` value contains a list of keys corresponding to the binary buffers. For example, if `data.buffers` is `['x', 'y']`, then the first binary buffer is the value of the `'x'` state attribute and the second binary buffer is the value of the `'y'` state attribute. See the [Model state](jupyterwidgetmodels.v6.md) documentation for the attributes of core Jupyter widgets. #### Synchronizing from frontend to kernel: `backbone` When a widget's state changes in the frontend, the changed keys are sent to the kernel over the widget's comm channel using a `backbone` message: ``` { 'comm_id' : 'u-u-i-d', 'data' : { 'method': 'backbone', 'sync_data': { } 'buffer_keys': [ ] } } ``` The state update is split between values that are serializable with JSON (in the `data.sync_data` dictionary), and binary values (represented in `data.buffer_keys`). The `data.sync_data` value is a dictionary of widget state keys and values that can be serialized to JSON. Comm messages for state synchronization may contain binary buffers. The `data.buffer_keys` optional value contains a list of keys corresponding to the binary buffers. For example, if `data.buffer_keys` is `['x', 'y']`, then the first binary buffer is the value of the `'x'` state attribute and the second binary buffer is the value of the `'y'` state attribute. #### State requests: `request_state` When a frontend wants to request the full state of a widget, the frontend sends a `request_state` message: ``` { 'comm_id' : 'u-u-i-d', 'data' : { 'method': 'request_state' } } ``` The kernel side of the widget should immediately send an `update` message with the entire widget state. ### Custom messages: `custom` Widgets may also send custom comm messages to their counterpart. ``` { 'comm_id': 'u-u-i-d', 'data': { 'method': 'custom', 'content': , } } ``` In the ipywidgets implementation, the `Widget.send(content, buffers=None)` method will produce these messages. ### Displaying widgets To display a widget in the classic Jupyter notebook, the kernel sends a `display` comm message to the frontend on the widget's comm channel: ``` { 'comm_id': 'u-u-i-d', 'data': { 'method': 'display' } } ``` To display a widget in JupyterLab, the kernel sends a Jupyter [iopub `display_data` message](http://jupyter-client.readthedocs.io/en/latest/messaging.html#display-data) with a special mimetype (where the `model_id` is the widget's comm channel id): ``` { 'data': { 'application/vnd.jupyter.widget-view+json': { 'model_id': 'u-u-i-d' } } } ``` In order to display widgets in both the classic notebook and JupyterLab, ipywidgets sends both the `display` comm message and the iopub `display_data` message, and omits the `text/plain` mimetype from the `display_data` message (so the classic notebook will not show any output from the iopub message). # Widget messaging protocol, version 2 This is implemented in ipywidgets 7.0. A Jupyter widget has both a frontend and kernel object communicating with each other using the `comm` messages provided by the Jupyter kernel messaging protocol. The primary communication that happens is synchronizing widget state, represented in the messages by a dictionary of key-value pairs. The Jupyter widget messaging protocol covers `comm` messages for the following actions: - creating a companion Jupyter widget object through opening a `comm` - synchronizing widget state between the frontend and the kernel companion objects - sending custom messages between these objects - displaying a widget For more details on the `comm` infrastructure, see the [Custom messages section](http://jupyter-client.readthedocs.io/en/latest/messaging.html#custom-messages) of the Jupyter kernel message specification. Throughout this document, relevant parts of messages to the discussion are quoted, and fields irrelevant to the discussion are not displayed. ## Highlights of changes from version 1 The `jupyter.widget.version` comm target and associated version validation messages are gone. Instead, it is up to the package maintainers to ensure that the versions of the packages speak the same widget message protocol. We encourage kernel and frontend package developers to clearly indicate which protocol version the package supports. While in version 1, binary buffers could only be top level attributes of the `state` object, now any item in the state can be a binary buffer. All binary buffers that are a descendant of the state object (in a nested object or list) will be removed from an object or replaced by null in a list. The 'path' of each binary buffer and its data are sent separately, so the state object can be reconstructed on the other side of the wire. This change was necessary to allow sending the data for a binary array plus its metadata (shape, type, masks) in one attribute. The sync update event from the frontend to the kernel was restructured to have the same field names as the event from the kernel to the frontend, namely the method field is `'update'` and the state data is in the `state` attribute. Widgets are displayed via `display_data` messages, which now include the version of the schema. The `msg_throttle` attribute of models is removed. ## Widget state The core idea of widgets is that some state is automatically synced back and forth between a kernel object and a frontend object. Several fields are assumed to be in every state object: - `_model_module`: the model module - `_model_module_version`: the semver range of the model - `_model_name`: the name of the model - `_view_module`: the view module - `_view_module_version`: the semver range of the view - `_view_name`: the name of the view These fields are assumed immutable (set at initialization, and never changed). ## Implementing the Jupyter widgets protocol in the kernel In this section, we concentrate on implementing the Jupyter widget messaging protocol in the kernel. ### The `jupyter.widget` comm target A kernel-side Jupyter widgets library registers a `jupyter.widget` comm target for creating widget comm channels (one per widget instance). State synchronization and custom messages for a particular widget instance are then sent over the created widget comm channel. ### Instantiating a widget object When a widget is instantiated in either the kernel or the frontend, it creates a companion model on the other side by sending a `comm_open` message to the `jupyter.widget` comm target. The `comm_open` message's metadata gives the version of the widget messaging protocol, i.e., `{'version': '2.0.0'}`. ``` { 'comm_id' : 'u-u-i-d', 'target_name' : 'jupyter.widget', 'data' : { 'state': { }, 'buffer_paths': [ ] } } ``` The model instantiated on the other side is determined by the `_model_module`, and `_model_module_version`, `_model_name`, `_view_module`, `_view_module_version`, and `_view_name` keys in `data.state`. Any unspecified keys will be take on the default values given in the relevant model specification. The `data.state` value is a dictionary of widget state keys and values that can be serialized to JSON. Comm messages for state synchronization may contain binary buffers. The `data.buffer_paths` value contains a list of 'paths' in the `data.state` object corresponding to the binary buffers. For example, if `data.buffer_paths` is `[['x'], ['y', 'z', 0]]`, then the first binary buffer is the value of the `data.state['x']` attribute and the second binary buffer is the value of the `data.state['y']['z'][0]` state attribute. A path representing a list value (i.e., last index of the path is an integer) will be `null` in `data.state`, and a path representing a dictionary key (i.e., last index of the path is a string) will not exist in `data.state`. See the [Model State](jupyterwidgetmodels.latest.md) documentation for the serialized state for core Jupyter widgets. ### State synchronization #### Synchronizing widget state: `update` When a widget's state changes in either the kernel or the frontend, the changed state keys and values are sent to the other side over the widget's comm channel using an `update` message: ``` { 'comm_id' : 'u-u-i-d', 'data' : { 'method': 'update', 'state': { }, 'buffer_paths': [ ] } } ``` The `data.state` and `data.buffer_paths` values are the same as in the `comm_open` case. See the [Model state](jupyterwidgetmodels.latest.md) documentation for the attributes of core Jupyter widgets. #### Synchronizing multiple frontends: `echo_update` Starting with protocol version `2.1.0`, `echo_update` messages from the kernel to the frontend are optional update messages for echoing state in messages from a frontend to the kernel back out to all the frontends. ``` { 'comm_id' : 'u-u-i-d', 'data' : { 'method': 'echo_update', 'state': { }, 'buffer_paths': [ ] } } ``` The Jupyter comm protocol is asymmetric in how messages flow: messages flow from a single frontend to a single kernel, but messages are broadcast from the kernel to _all_ frontends. In the widget protocol, if a frontend updates the value of a widget, the frontend does not have a way to directly notify other frontends about the state update. The `echo_update` optional messages enable a kernel to broadcast out frontend updates to all frontends. This can also help resolve the race condition where the kernel and a frontend simultaneously send updates to each other since the frontend now knows the order of kernel updates. The `echo_update` messages enable a frontend to optimistically update its widget views to reflect its own changes that it knows the kernel will yet process. These messages are intended to be used as follows: 1. A frontend model attribute is updated, and the frontend views are optimistically updated to reflect the attribute. 2. The frontend queues an update message to the kernel and records the message id for the attribute. 3. The frontend ignores updates to the attribute from the kernel contained in `echo_update` messages until it gets an `echo_update` message corresponding to its own update of the attribute (i.e., the [parent_header](https://jupyter-client.readthedocs.io/en/latest/messaging.html#parent-header) id matches the stored message id for the attribute). It also ignores `echo_update` updates if it has a pending attribute update to send to the kernel. Once the frontend receives its own `echo_update` and does not have any more pending attribute updates to send to the kernel, it starts applying attribute updates from `echo_update` messages. Since the `echo_update` update messages are optional, and not all attribute updates may be echoed, it is important that only `echo_update` updates are ignored in the last step above, and `update` message updates are always applied. Implementation note: For attributes where sending back an `echo_update` is considered too expensive or unnecessary, we have implemented an opt-out mechanism in the ipywidgets package. A model trait can have the `echo_update` metadata attribute set to `False` to flag that the kernel should never send an `echo_update` update for that attribute to the frontends. Additionally, we have a system-wide flag to disable echoing for all attributes via the environment variable `JUPYTER_WIDGETS_ECHO`. For ipywdgets 7.7, we default `JUPYTER_WIDGETS_ECHO` to off (disabling all echo messages) and in ipywidgets 8.0 we default `JUPYTER_WIDGETS_ECHO` to on (enabling echo messages). #### State requests: `request_state` When a frontend wants to request the full state of a widget, the frontend sends a `request_state` message: ``` { 'comm_id' : 'u-u-i-d', 'data' : { 'method': 'request_state' } } ``` The kernel side of the widget should immediately send an `update` message with the entire widget state. ### Custom messages: `custom` Widgets may also send custom comm messages to their counterpart. ``` { 'comm_id': 'u-u-i-d', 'data': { 'method': 'custom', 'content': , } } ``` In the ipywidgets implementation, the `Widget.send(content, buffers=None)` method will produce these messages. ### Displaying widgets To display a widget, the kernel sends a Jupyter [iopub `display_data` message](http://jupyter-client.readthedocs.io/en/latest/messaging.html#display-data) with the `application/vnd.jupyter.widget-view+json` mimetype. In this message, the `model_id` is the comm channel id of the widget to display. ``` { 'data': { 'application/vnd.jupyter.widget-view+json': { 'model_id': 'u-u-i-d' 'version_major': 2 'version_minor': 0 } } } ``` # Control Widget messaging protocol, version 1.0 This is implemented in ipywidgets 7.7. ### The `jupyter.widget.control` comm target A kernel-side Jupyter widgets library may optionally register a `jupyter.widget.control` comm target that is used for fetching all kernel widget state through a single comm message. #### State requests: `request_states` When a frontend wants to request the full state of all widgets from the kernel in a single message, the frontend sends a `request_states` message through the `jupyter.widget.control` comm channel: ``` { 'comm_id' : 'u-u-i-d', 'data' : { 'method': 'request_states' } } ``` The kernel handler for the `jupyter.widget.control` comm target should immediately send an `update_states` message with all widgets states: ``` { 'comm_id' : 'u-u-i-d', 'data' : { 'method': 'update_states', 'states': { : , : , [...] }, 'buffer_paths': [ ] } } ``` Comm messages for state synchronization may contain binary buffers. The `data.buffer_paths` value contains a list of 'paths' in the `data.states` object corresponding to the binary buffers. For example, if `data.buffer_paths` is `[['widget-id1', 'x'], ['widget-id2', 'y', 'z', 0]]`, then the first binary buffer is the value of the `data.states['widget-id1']['x']` attribute and the second binary buffer is the value of the `data.states['widget-id2']['y']['z'][0]` state attribute. A path representing a list value (i.e., last index of the path is an integer) will have a `null` placeholder in the list in `data.states`, and a path representing a value for a dictionary key (i.e., last index of the path is a string) will not exist in the dictionary in `data.states`. Since the `update_states` message may be very large, it may be dropped in the communication channel (for example, the message may exceed the websocket message limit size). For that reason, we suggest that frontends fall back to other ways to retrieve state from the kernel if they do not get an `update_states` reply in a reasonable amount of time. ipywidgets-8.1.5/packages/schema/package.json000066400000000000000000000011101466162644600212310ustar00rootroot00000000000000{ "name": "@jupyter-widgets/schema", "version": "0.5.6", "description": "Schemas for the Jupyter interactive Widgets", "keywords": [ "jupyter", "schemas", "notebook" ], "homepage": "https://github.com/jupyter-widgets/ipywidgets#readme", "bugs": { "url": "https://github.com/jupyter-widgets/ipywidgets/issues" }, "repository": { "type": "git", "url": "git+https://github.com/jupyter-widgets/ipywidgets.git" }, "license": "BSD-3-Clause", "author": "Project Jupyter", "main": "index.js", "scripts": { "test": "node index.js" } } ipywidgets-8.1.5/packages/schema/v1/000077500000000000000000000000001466162644600173005ustar00rootroot00000000000000ipywidgets-8.1.5/packages/schema/v1/state.schema.json000066400000000000000000000027431466162644600225600ustar00rootroot00000000000000{ "$schema": "http://json-schema.org/draft-04/schema#", "description": "Jupyter Interactive Widget State JSON schema.", "type": "object", "properties": { "version_major": { "description": "Format version (major)", "type": "number", "minimum": 1, "maximum": 1 }, "version_minor": { "description": "Format version (minor)", "type": "number" }, "state": { "description": "Model State for All Widget Models", "type": "object", "additionalProperties": true, "additionalProperties": { "type": "object", "properties": { "model_name": { "description": "Name of the JavaScript class holding the model implementation", "type": "string" }, "model_module": { "description": "Name of the JavaScript module holding the model implementation", "type": "string" }, "model_module_version": { "description": "Semver range for the JavaScript module holding the model implementation", "type": "string" }, "state": { "description": "Serialized state of the model", "type": "object", "additional_properties": true } }, "required": ["model_name", "model_module", "state"], "additionalProperties": false } } }, "required": ["version_major", "version_minor", "state"], "additionalProperties": false } ipywidgets-8.1.5/packages/schema/v1/view.schema.json000066400000000000000000000011211466162644600223770ustar00rootroot00000000000000{ "$schema": "http://json-schema.org/draft-04/schema#", "description": "Jupyter Interactive Widget View JSON schema.", "type": "object", "properties": { "version_major": { "description": "Format version (major)", "type": "number", "minimum": 1, "maximum": 1 }, "version_minor": { "description": "Format version (minor)", "type": "number" }, "model_id": { "description": "Unique identifier of the widget model to be displayed", "type": "string" } }, "required": ["model_id"], "additionalProperties": false } ipywidgets-8.1.5/packages/schema/v2/000077500000000000000000000000001466162644600173015ustar00rootroot00000000000000ipywidgets-8.1.5/packages/schema/v2/state.schema.json000066400000000000000000000055011466162644600225540ustar00rootroot00000000000000{ "$schema": "http://json-schema.org/draft-07/schema#", "description": "Jupyter Interactive Widget State JSON schema.", "type": "object", "properties": { "version_major": { "description": "Format version (major)", "type": "number", "minimum": 2, "maximum": 2 }, "version_minor": { "description": "Format version (minor)", "type": "number", "minimum": 0, "maximum": 0 }, "state": { "description": "Model State for All Widget Models - keys are model ids, values are model state", "type": "object", "additionalProperties": { "type": "object", "properties": { "model_name": { "description": "Name of the JavaScript class holding the model implementation", "type": "string" }, "model_module": { "description": "Name of the JavaScript module holding the model implementation", "type": "string" }, "model_module_version": { "description": "Semver range for the JavaScript module holding the model implementation", "type": "string" }, "state": { "description": "Serialized state of the model", "type": "object" }, "buffers": { "description": "Binary buffers in the state", "type": "array", "items": { "type": "object", "properties": { "path": { "description": "A path for a binary buffer value.", "type": "array", "items": { "description": "An object key or array index", "type": ["string", "number"] } }, "data": { "description": "A binary buffer encoded as specified in the 'encoding' property", "type": "string" }, "encoding": { "description": "The encoding of the buffer data", "type": "string", "oneOf": [ { "const": "hex", "description": "Base 16 encoding, as specified in RFC 4648, section 8 (https://tools.ietf.org/html/rfc4648#section-8)" }, { "const": "base64", "description": "Base 64 encoding, as specified in RFC 4648, section 4 (https://tools.ietf.org/html/rfc4648#section-4)" } ] } }, "required": ["path", "data", "encoding"] } } }, "required": ["model_name", "model_module", "state"] } } }, "required": ["version_major", "version_minor", "state"] } ipywidgets-8.1.5/packages/schema/v2/view.schema.json000066400000000000000000000010601466162644600224020ustar00rootroot00000000000000{ "$schema": "http://json-schema.org/draft-07/schema#", "description": "Jupyter Interactive Widget View JSON schema.", "type": "object", "properties": { "version_major": { "description": "Format version (major)", "type": "number", "minimum": 2, "maximum": 2 }, "version_minor": { "description": "Format version (minor)", "type": "number" }, "model_id": { "description": "Unique identifier of the widget model to be displayed", "type": "string" } }, "required": ["model_id"] } ipywidgets-8.1.5/python/000077500000000000000000000000001466162644600152555ustar00rootroot00000000000000ipywidgets-8.1.5/python/ipywidgets/000077500000000000000000000000001466162644600174455ustar00rootroot00000000000000ipywidgets-8.1.5/python/ipywidgets/LICENSE000066400000000000000000000027511466162644600204570ustar00rootroot00000000000000Copyright (c) 2015 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. ipywidgets-8.1.5/python/ipywidgets/MANIFEST.in000066400000000000000000000007131466162644600212040ustar00rootroot00000000000000include LICENSE include CONTRIBUTING.md include README.md include package.json # Documentation graft docs exclude docs/\#* # Tests graft ipywidgets/tests # Static Assets graft ipywidgets/static # Docs subdirs we want to skip prune docs/build prune docs/dist # Patterns to exclude from any directory global-exclude *~ global-exclude *.pyc global-exclude *.pyo global-exclude .git global-exclude .ipynb_checkpoints # Exclude build scripts exclude scripts ipywidgets-8.1.5/python/ipywidgets/README.md000066400000000000000000000015601466162644600207260ustar00rootroot00000000000000# ipywidgets: Interactive HTML Widgets **ipywidgets**, also known as jupyter-widgets or simply widgets, are [interactive HTML widgets](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) for Jupyter notebooks and the IPython kernel. This package contains the python implementation of the core interactive widgets bundled in ipywidgets. ## Core Interactive Widgets The fundamental widgets provided by this library are called core interactive widgets. A [demonstration notebook](https://github.com/jupyter-widgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb) provides an overview of the core interactive widgets, including: - sliders - progress bars - text boxes - toggle buttons and checkboxes - display areas - and more For more information, see the main [documentation](https://github.com/jupyter-widgets/ipywidgets#readme). ipywidgets-8.1.5/python/ipywidgets/ipywidgets/000077500000000000000000000000001466162644600216355ustar00rootroot00000000000000ipywidgets-8.1.5/python/ipywidgets/ipywidgets/__init__.py000066400000000000000000000033001466162644600237420ustar00rootroot00000000000000# Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. """Interactive widgets for the Jupyter notebook. Provide simple interactive controls in the notebook. Each Widget corresponds to an object in Python and Javascript, with controls on the page. To put a Widget on the page, you can display it with Jupyter's display machinery:: from ipywidgets import IntSlider slider = IntSlider(min=1, max=10) display(slider) Moving the slider will change the value. Most Widgets have a current value, accessible as a `value` attribute. """ # Must import __version__ first to avoid errors importing this file during the build process. See https://github.com/pypa/setuptools/issues/1724#issuecomment-627241822 from ._version import __version__, __protocol_version__, __jupyter_widgets_controls_version__, __jupyter_widgets_base_version__ import os import sys from traitlets import link, dlink from IPython import get_ipython from .widgets import * def load_ipython_extension(ip): """Set up Jupyter to work with widgets""" if not hasattr(ip, 'kernel'): return register_comm_target() def register_comm_target(kernel=None): """Register the jupyter.widget comm target""" from . import comm comm_manager = comm.get_comm_manager() if comm_manager is None: return comm_manager.register_target('jupyter.widget', Widget.handle_comm_opened) comm_manager.register_target('jupyter.widget.control', Widget.handle_control_comm_opened) def _handle_ipython(): """Register with the comm target at import if running in Jupyter""" ip = get_ipython() if ip is None: return register_comm_target() _handle_ipython() ipywidgets-8.1.5/python/ipywidgets/ipywidgets/_version.py000066400000000000000000000011421466162644600240310ustar00rootroot00000000000000# Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. __version__ = '8.1.5' __protocol_version__ = '2.1.0' __control_protocol_version__ = '1.0.0' # These are *protocol* versions for each package, *not* npm versions. To check, look at each package's src/version.ts file for the protocol version the package implements. __jupyter_widgets_base_version__ = '2.0.0' __jupyter_widgets_output_version__ = '1.0.0' __jupyter_widgets_controls_version__ = '2.0.0' # A compatible @jupyter-widgets/html-manager npm package semver range __html_manager_version__ = '^1.0.1' ipywidgets-8.1.5/python/ipywidgets/ipywidgets/comm.py000066400000000000000000000013741466162644600231470ustar00rootroot00000000000000# compatibility shim for ipykernel < 6.18 import sys from IPython import get_ipython import comm def requires_ipykernel_shim(): if "ipykernel" in sys.modules: import ipykernel version = ipykernel.version_info return version < (6, 18) else: return False def get_comm_manager(): if requires_ipykernel_shim(): ip = get_ipython() if ip is not None and getattr(ip, "kernel", None) is not None: return get_ipython().kernel.comm_manager else: return comm.get_comm_manager() def create_comm(*args, **kwargs): if requires_ipykernel_shim(): from ipykernel.comm import Comm return Comm(*args, **kwargs) else: return comm.create_comm(*args, **kwargs) ipywidgets-8.1.5/python/ipywidgets/ipywidgets/embed.py000066400000000000000000000260271466162644600232720ustar00rootroot00000000000000# Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. # # # Parts of this code is from IPyVolume (24.05.2017), used here under # this copyright and license with permission from the author # (see https://github.com/jupyter-widgets/ipywidgets/pull/1387) """ Functions for generating embeddable HTML/javascript of a widget. """ import json import re from .widgets import Widget, DOMWidget, widget as widget_module from .widgets.widget_link import Link from .widgets.docutils import doc_subst from ._version import __html_manager_version__ snippet_template = """ {load} {widget_views} """ load_template = """""" load_requirejs_template = """ """ requirejs_snippet_template = """ {widget_views} """ html_template = """ {title} {snippet} """ widget_view_template = """""" DEFAULT_EMBED_SCRIPT_URL = 'https://cdn.jsdelivr.net/npm/@jupyter-widgets/html-manager@%s/dist/embed.js'%__html_manager_version__ DEFAULT_EMBED_REQUIREJS_URL = 'https://cdn.jsdelivr.net/npm/@jupyter-widgets/html-manager@%s/dist/embed-amd.js'%__html_manager_version__ _doc_snippets = {} _doc_snippets['views_attribute'] = """ views: widget or collection of widgets or None The widgets to include views for. If None, all DOMWidgets are included (not just the displayed ones). """ _doc_snippets['embed_kwargs'] = """ drop_defaults: boolean Whether to drop default values from the widget states. state: dict or None (default) The state to include. When set to None, the state of all widgets know to the widget manager is included. Otherwise it uses the passed state directly. This allows for end users to include a smaller state, under the responsibility that this state is sufficient to reconstruct the embedded views. indent: integer, string or None The indent to use for the JSON state dump. See `json.dumps` for full description. embed_url: string or None Allows for overriding the URL used to fetch the widget manager for the embedded code. This defaults (None) to a `jsDelivr` CDN url. requirejs: boolean (True) Enables the requirejs-based embedding, which allows for custom widgets. If True, the embed_url should point to an AMD module. cors: boolean (True) If True avoids sending user credentials while requesting the scripts. When opening an HTML file from disk, some browsers may refuse to load the scripts. """ def _find_widget_refs_by_state(widget, state): """Find references to other widgets in a widget's state""" # Copy keys to allow changes to state during iteration: keys = tuple(state.keys()) for key in keys: value = getattr(widget, key) # Trivial case: Direct references to other widgets: if isinstance(value, Widget): yield value # Also check for buried references in known, JSON-able structures # Note: This might miss references buried in more esoteric structures elif isinstance(value, (list, tuple)): for item in value: if isinstance(item, Widget): yield item elif isinstance(value, dict): for item in value.values(): if isinstance(item, Widget): yield item def _get_recursive_state(widget, store=None, drop_defaults=False): """Gets the embed state of a widget, and all other widgets it refers to as well""" if store is None: store = dict() state = widget._get_embed_state(drop_defaults=drop_defaults) store[widget.model_id] = state # Loop over all values included in state (i.e. don't consider excluded values): for ref in _find_widget_refs_by_state(widget, state['state']): if ref.model_id not in store: _get_recursive_state(ref, store, drop_defaults=drop_defaults) return store def add_resolved_links(store, drop_defaults): """Adds the state of any link models between two models in store""" for widget_id, widget in widget_module._instances.items(): # go over all widgets if isinstance(widget, Link) and widget_id not in store: if widget.source[0].model_id in store and widget.target[0].model_id in store: store[widget.model_id] = widget._get_embed_state(drop_defaults=drop_defaults) def dependency_state(widgets, drop_defaults=True): """Get the state of all widgets specified, and their dependencies. This uses a simple dependency finder, including: - any widget directly referenced in the state of an included widget - any widget in a list/tuple attribute in the state of an included widget - any widget in a dict attribute in the state of an included widget - any jslink/jsdlink between two included widgets What this alogorithm does not do: - Find widget references in nested list/dict structures - Find widget references in other types of attributes Note that this searches the state of the widgets for references, so if a widget reference is not included in the serialized state, it won't be considered as a dependency. Parameters ---------- widgets: single widget or list of widgets. This function will return the state of every widget mentioned and of all their dependencies. drop_defaults: boolean Whether to drop default values from the widget states. Returns ------- A dictionary with the state of the widgets and any widget they depend on. """ # collect the state of all relevant widgets if widgets is None: # Get state of all widgets, no smart resolution needed. state = Widget.get_manager_state(drop_defaults=drop_defaults, widgets=None)['state'] else: try: widgets[0] except (IndexError, TypeError): widgets = [widgets] state = {} for widget in widgets: _get_recursive_state(widget, state, drop_defaults) # Add any links between included widgets: add_resolved_links(state, drop_defaults) return state @doc_subst(_doc_snippets) def embed_data(views, drop_defaults=True, state=None): """Gets data for embedding. Use this to get the raw data for embedding if you have special formatting needs. Parameters ---------- {views_attribute} drop_defaults: boolean Whether to drop default values from the widget states. state: dict or None (default) The state to include. When set to None, the state of all widgets know to the widget manager is included. Otherwise it uses the passed state directly. This allows for end users to include a smaller state, under the responsibility that this state is sufficient to reconstruct the embedded views. Returns ------- A dictionary with the following entries: manager_state: dict of the widget manager state data view_specs: a list of widget view specs """ if views is None: views = [w for w in widget_module._instances.values() if isinstance(w, DOMWidget)] else: try: views[0] except (IndexError, TypeError): views = [views] if state is None: # Get state of all known widgets state = Widget.get_manager_state(drop_defaults=drop_defaults, widgets=None)['state'] # Rely on ipywidget to get the default values json_data = Widget.get_manager_state(widgets=[]) # but plug in our own state json_data['state'] = state view_specs = [w.get_view_spec() for w in views] return dict(manager_state=json_data, view_specs=view_specs) script_escape_re = re.compile(r'<(script|/script|!--)', re.IGNORECASE) def escape_script(s): """Escape a string that will be the content of an HTML script tag. We replace the opening bracket of ` tags. """ data = embed_data(views, drop_defaults=drop_defaults, state=state) widget_views = '\n'.join( widget_view_template.format(view_spec=escape_script(json.dumps(view_spec))) for view_spec in data['view_specs'] ) if embed_url is None: embed_url = DEFAULT_EMBED_REQUIREJS_URL if requirejs else DEFAULT_EMBED_SCRIPT_URL load = load_requirejs_template if requirejs else load_template use_cors = ' crossorigin="anonymous"' if cors else '' values = { 'load': load.format(embed_url=embed_url, use_cors=use_cors), 'json_data': escape_script(json.dumps(data['manager_state'], indent=indent)), 'widget_views': widget_views, } return snippet_template.format(**values) @doc_subst(_doc_snippets) def embed_minimal_html(fp, views, title='IPyWidget export', template=None, **kwargs): """Write a minimal HTML file with widget views embedded. Parameters ---------- fp: filename or file-like object The file to write the HTML output to. {views_attribute} title: title of the html page. template: Template in which to embed the widget state. This should be a Python string with placeholders `{{title}}` and `{{snippet}}`. The `{{snippet}}` placeholder will be replaced by all the widgets. {embed_kwargs} """ snippet = embed_snippet(views, **kwargs) values = { 'title': title, 'snippet': snippet, } if template is None: template = html_template html_code = template.format(**values) # Check if fp is writable: if hasattr(fp, 'write'): fp.write(html_code) else: # Assume fp is a filename: with open(fp, "w") as f: f.write(html_code) ipywidgets-8.1.5/python/ipywidgets/ipywidgets/state.schema.json000066400000000000000000000055031466162644600251120ustar00rootroot00000000000000{ "$schema": "http://json-schema.org/draft-07/schema#", "description": "Jupyter Interactive Widget State JSON schema.", "type": "object", "properties": { "version_major": { "description": "Format version (major)", "type": "number", "minimum": 2, "maximum": 2 }, "version_minor": { "description": "Format version (minor)", "type": "number", "minimum": 0, "maximum": 0 }, "state": { "description": "Model State for All Widget Models - keys are model ids, values are model state", "type": "object", "additionalProperties": { "type": "object", "properties": { "model_name": { "description": "Name of the JavaScript class holding the model implementation", "type": "string" }, "model_module": { "description": "Name of the JavaScript module holding the model implementation", "type": "string" }, "model_module_version": { "description": "Semver range for the JavaScript module holding the model implementation", "type": "string" }, "state": { "description": "Serialized state of the model", "type": "object" }, "buffers": { "description": "Binary buffers in the state", "type": "array", "items": { "type": "object", "properties": { "path": { "description": "A path for a binary buffer value.", "type": "array", "items": { "description": "An object key or array index", "type": ["string", "number"] } }, "data": { "description": "A binary buffer encoded as specified in the 'encoding' property", "type": "string" }, "encoding": { "description": "The encoding of the buffer data", "type": "string", "oneOf": [ { "enum": ["hex"], "description": "Base 16 encoding, as specified in RFC 4648, section 8 (https://tools.ietf.org/html/rfc4648#section-8)" }, { "enum": ["base64"], "description": "Base 64 encoding, as specified in RFC 4648, section 4 (https://tools.ietf.org/html/rfc4648#section-4)" } ] } }, "required": ["path", "data", "encoding"] } } }, "required": ["model_name", "model_module", "state"] } } }, "required": ["version_major", "version_minor", "state"] } ipywidgets-8.1.5/python/ipywidgets/ipywidgets/tests/000077500000000000000000000000001466162644600227775ustar00rootroot00000000000000ipywidgets-8.1.5/python/ipywidgets/ipywidgets/tests/__init__.py000066400000000000000000000000001466162644600250760ustar00rootroot00000000000000ipywidgets-8.1.5/python/ipywidgets/ipywidgets/tests/test_embed.py000066400000000000000000000151111466162644600254630ustar00rootroot00000000000000 from io import StringIO from html.parser import HTMLParser import json import os import re import tempfile import shutil import traitlets from ..widgets import IntSlider, IntText, Text, Widget, jslink, HBox, widget_serialization, widget as widget_module from ..embed import embed_data, embed_snippet, embed_minimal_html, dependency_state class CaseWidget(Widget): """Widget to test dependency traversal""" a = traitlets.Instance(Widget, allow_none=True).tag(sync=True, **widget_serialization) b = traitlets.Instance(Widget, allow_none=True).tag(sync=True, **widget_serialization) _model_name = traitlets.Unicode('CaseWidgetModel').tag(sync=True) other = traitlets.Dict().tag(sync=True, **widget_serialization) class TestEmbed: def teardown(self): for w in tuple(widget_module._instances.values()): w.close() def test_embed_data_simple(self): w = IntText(4) state = dependency_state(w, drop_defaults=True) data = embed_data(views=w, drop_defaults=True, state=state) state = data['manager_state']['state'] views = data['view_specs'] assert len(state) == 3 assert len(views) == 1 model_names = [s['model_name'] for s in state.values()] assert 'IntTextModel' in model_names def test_cors(self): w = IntText(4) code = embed_snippet(w) # 1 is from the require assert len(re.findall(' crossorigin', code)) > 1 f = StringIO() embed_minimal_html(f, w) assert len(re.findall(' crossorigin', f.getvalue())) > 1 code = embed_snippet(w, cors=False, requirejs=False) assert ' crossorigin' not in code f = StringIO() embed_minimal_html(f, w, cors=False, requirejs=False) assert ' crossorigin' not in f.getvalue() code = embed_snippet(w, cors=False, requirejs=True) assert len(re.findall(' crossorigin', code)) == 1 # 1 is from the require, which is ok f = StringIO() embed_minimal_html(f, w, cors=False, requirejs=True) assert len(re.findall(' crossorigin', f.getvalue())) == 1 # 1 is from the require, which is ok def test_escape(self): w = Text(' hi') code = embed_snippet(w) assert code.find(r'', '', '', '', '', '', ].join('\n'); var views = []; var cells = Jupyter.notebook.get_cells(); Jupyter.notebook.get_cells().forEach(function (cell) { if (cell.output_area) { cell.output_area.outputs.forEach(function (output) { if ( output.data && output.data[VIEW_MIME_TYPE] && state.state[output.data[VIEW_MIME_TYPE].model_id] ) { views.push( '\n' ); } }); } }); value += views.join('\n'); value += '\n\n\n\n'; var content = document.createElement('textarea'); content.setAttribute('readonly', 'true'); content.style.width = '100%'; content.style.minHeight = '250px'; content.value = value; var mod = dialog.modal({ show: true, title: 'Embed widgets', body: content, keyboard_manager: Jupyter.notebook.keyboard_manager, notebook: Jupyter.notebook, buttons: { 'Copy to Clipboard': { class: 'btn-primary', click: function (event) { content.select(); return document.execCommand('copy'); }, }, }, }); }); } ); }); }; var action = { help: 'Embed interactive widgets', icon: 'fa-sliders', help_index: 'zz', handler: embed_widgets, }; var action_name = 'embed-interactive-widgets'; var prefix = 'widgets'; requirejs(['base/js/namespace'], function (Jupyter) { Jupyter.notebook.keyboard_manager.actions.register( action, action_name, prefix ); }); module.exports = { action: action, }; ipywidgets-8.1.5/python/widgetsnbextension/src/extension.js000066400000000000000000000164401466162644600243460ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. 'use strict'; window['requirejs'].config({ map: { '*': { '@jupyter-widgets/controls': 'nbextensions/jupyter-js-widgets/extension', '@jupyter-widgets/base': 'nbextensions/jupyter-js-widgets/extension', '@jupyter-widgets/output': 'nbextensions/jupyter-js-widgets/extension', }, }, }); var MIME_TYPE = 'application/vnd.jupyter.widget-view+json'; var CLASS_NAME = 'jupyter-widgets-view'; var mngr = require('./manager'); require('./save_state'); require('./embed_widgets'); var LuminoWidget = require('@lumino/widgets'); var LuminoMessaging = require('@lumino/messaging'); var NOTEBOOK_VERSION_INFO = Jupyter.version.split('.'); var NOTEBOOK_MAJOR = parseInt(NOTEBOOK_VERSION_INFO[0]); var NOTEBOOK_MINOR = parseInt(NOTEBOOK_VERSION_INFO[1]); var NOTEBOOK_PATCH = parseInt(NOTEBOOK_VERSION_INFO[2]); var RENDER_SHOULD_THROW = NOTEBOOK_MAJOR > 6 || (NOTEBOOK_MAJOR == 6 && NOTEBOOK_MINOR > 4) || (NOTEBOOK_MAJOR == 6 && NOTEBOOK_MINOR == 4 && NOTEBOOK_PATCH > 4); /** * Create a widget manager for a kernel instance. */ var handle_kernel = function (Jupyter, kernel) { if (kernel.comm_manager && kernel.widget_manager === undefined) { // Clear any old widget manager if (Jupyter.WidgetManager) { Jupyter.WidgetManager._managers[0].clear_state(); } // Create a new widget manager instance. Use the global // Jupyter.notebook handle. var manager = new mngr.WidgetManager(kernel.comm_manager, Jupyter.notebook); // For backwards compatibility and interactive use. Jupyter.WidgetManager = mngr.WidgetManager; // Store a handle to the manager so we know not to // another for this kernel. This also is a convenience // for the user. kernel.widget_manager = manager; } }; function register_events(Jupyter, events, outputarea) { // If a kernel already exists, create a widget manager. if (Jupyter.notebook && Jupyter.notebook.kernel) { handle_kernel(Jupyter, Jupyter.notebook.kernel); } // When the kernel is created, create a widget manager. events.on( 'kernel_created.Kernel kernel_created.Session', function (event, data) { handle_kernel(Jupyter, data.kernel); } ); // When a kernel dies, disconnect the widgets. events.on( 'kernel_killed.Session kernel_killed.Kernel kernel_restarting.Kernel', function (event, data) { var kernel = data.kernel; if (kernel && kernel.widget_manager) { kernel.widget_manager.disconnect(); } } ); /** * The views on this page. We keep this list so that we can call the view.remove() * method when a view is removed from the page. */ var views = {}; window.addEventListener('resize', () => { Object.keys(views).forEach((viewKey) => { LuminoMessaging.MessageLoop.postMessage( views[viewKey].luminoWidget, LuminoWidget.Widget.ResizeMessage.UnknownSize ); }); }); var removeView = function (event, data) { var output = data.cell ? data.cell.output_area : data.output_area; var viewids = output ? output._jupyterWidgetViews : void 0; if (viewids) { viewids.forEach(function (id) { // this may be called after the widget is pulled off the page // so we temporarily put it back on the page as a kludge // so that Lumino can trigger the appropriate detach signals var view = views[id]; view.el.style.display = 'none'; document.body.appendChild(view.el); view.remove(); delete views[id]; }); output._jupyterWidgetViews = []; } }; // Deleting a cell does *not* clear the outputs first. events.on('delete.Cell', removeView); // add an event to the notebook element for *any* outputs that are cleared. Jupyter.notebook.container.on('clearing', '.output', removeView); // For before https://github.com/jupyter/notebook/pull/2411 is merged and // released. This does not handle the case where an empty cell is executed // to clear input. events.on('execute.CodeCell', removeView); events.on('clear_output.CodeCell', removeView); /** * Render data to the output area. */ function render(output, data, node) { // data is a model id var manager = Jupyter.notebook && Jupyter.notebook.kernel && Jupyter.notebook.kernel.widget_manager; if (!manager) { var msg = 'Error rendering Jupyter widget: missing widget manager'; if (RENDER_SHOULD_THROW) { throw new Error(msg); } node.textContent = msg; return; } // Missing model id means the view was removed. Hide this element. if (data.model_id === '') { if (RENDER_SHOULD_THROW) { throw new Error('Jupyter Widgets model not found'); } node.style.display = 'none'; return; } if (manager.has_model(data.model_id)) { manager .get_model(data.model_id) .then(function (model) { return manager.create_view(model, { output: output }); }) .then(function (view) { var id = view.cid; output._jupyterWidgetViews = output._jupyterWidgetViews || []; output._jupyterWidgetViews.push(id); views[id] = view; LuminoWidget.Widget.attach(view.luminoWidget, node); // Make the node completely disappear if the view is removed. view.once('remove', () => { // Since we have a mutable reference to the data, delete the // model id to indicate the view is removed. data.model_id = ''; node.style.display = 'none'; }); }); } else { var msg = 'A Jupyter widget could not be displayed because the widget state could not be found. This could happen if the kernel storing the widget is no longer available, or if the widget state was not saved in the notebook. You may be able to create the widget by running the appropriate cells.'; if (RENDER_SHOULD_THROW) { throw new Error(msg); } node.textContent = msg; return; } } // `this` is the output area we are appending to var append_mime = function (json, md, element) { var toinsert = this.create_output_subarea(md, CLASS_NAME, MIME_TYPE); this.keyboard_manager.register_events(toinsert); render(this, json, toinsert[0]); element.append(toinsert); return toinsert; }; // Register mime type with the output area outputarea.OutputArea.prototype.register_mime_type(MIME_TYPE, append_mime, { // An output widget could contain arbitrary user javascript safe: false, // Index of renderer in `output_area.display_order` index: 0, }); } function load_ipython_extension() { return new Promise(function (resolve) { requirejs( ['base/js/namespace', 'base/js/events', 'notebook/js/outputarea'], function (Jupyter, events, outputarea) { require('@lumino/widgets/style/index.css'); require('@jupyter-widgets/base/css/index.css'); require('@jupyter-widgets/controls/css/widgets.css'); register_events(Jupyter, events, outputarea); resolve(); } ); }); } module.exports = { load_ipython_extension: load_ipython_extension, ...require('@jupyter-widgets/controls'), ...require('@jupyter-widgets/base'), ...require('./widget_output'), }; ipywidgets-8.1.5/python/widgetsnbextension/src/manager.js000066400000000000000000000253531466162644600237470ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. 'use strict'; var base = require('@jupyter-widgets/base'); var ManagerBase = require('@jupyter-widgets/base-manager').ManagerBase; var widgets = require('@jupyter-widgets/controls'); var outputWidgets = require('./widget_output'); var saveState = require('./save_state'); var embedWidgets = require('./embed_widgets'); var MIME_TYPE = 'application/vnd.jupyter.widget-view+json'; function polyfill_new_comm_buffers( manager, target_name, data, callbacks, metadata, comm_id, buffers ) { /** * This polyfills services/kernel/comm/CommManager.new_comm to * accept the buffers argument. * * argument comm_id is optional */ return new Promise(function (resolve) { requirejs(['services/kernels/comm'], function (comm) { var comm = new comm.Comm(target_name, comm_id); manager.register_comm(comm); // inline Comm.open(), but with buffers var content = { comm_id: comm_id, target_name: target_name, data: data || {}, }; comm.kernel.send_shell_message( 'comm_open', content, callbacks, metadata, buffers ); resolve(comm); }); }); } function new_comm( manager, target_name, data, callbacks, metadata, comm_id, buffers ) { // Checks whether new_comm needs a polyfill, and calls the correct version // Polyfill needed for notebook <5.1, in which the new_comm method does not support a buffers argument. // See https://github.com/jupyter-widgets/ipywidgets/pull/1817 var need_polyfill = manager.new_comm.length < 6; if (need_polyfill) { return polyfill_new_comm_buffers.apply(null, arguments); } return manager.new_comm.apply( manager, Array.prototype.slice.call(arguments, 1) ); } //-------------------------------------------------------------------- // WidgetManager class //-------------------------------------------------------------------- export class WidgetManager extends ManagerBase { constructor(comm_manager, notebook) { super(); // Managers are stored in *reverse* order, so that _managers[0] is the most recent. WidgetManager._managers.unshift(this); // Attach a comm manager this.notebook = notebook; this.keyboard_manager = notebook.keyboard_manager; this.comm_manager = comm_manager; var widget_md = notebook.metadata.widgets; // Steps that needs to be done: // 1. Register comm target // 2. Get any widget state from the kernel and open comms with existing state // 3. Check saved state for widgets, and restore any that would not overwrite // any live widgets. // Register with the comm manager. (1) this.comm_manager.register_target( this.comm_target_name, this.handle_comm_open.bind(this) ); var that = this; this._loadFromKernel() .then(function () { // Now that we have mirrored any widgets from the kernel... // Restore any widgets from saved state that are not live (3) if ( widget_md && widget_md['application/vnd.jupyter.widget-state+json'] ) { var state = notebook.metadata.widgets[ 'application/vnd.jupyter.widget-state+json' ]; state = that.filterExistingModelState(state); return that.set_state(state); } }) .then(function () { // Rerender cells that have widget data that.notebook.get_cells().forEach(function (cell) { var rerender = cell.output_area && cell.output_area.outputs.find(function (output) { return output.data && output.data[MIME_TYPE]; }); if (rerender) { that.notebook.render_cell_output(cell); } }); }); // Create the actions and menu this._init_actions(); this._init_menu(); } loadClass(className, moduleName, moduleVersion) { const failure = () => { throw new Error( 'Class ' + className + ' not found in module ' + moduleName ); }; if (moduleName === '@jupyter-widgets/controls') { return widgets[className] ? Promise.resolve(widgets[className]) : failure(); } else if (moduleName === '@jupyter-widgets/base') { return base[className] ? Promise.resolve(base[className]) : failure(); } else if (moduleName == '@jupyter-widgets/output') { return outputWidgets[className] ? Promise.resolve(outputWidgets[className]) : failure(); } else { return new Promise(function (resolve, reject) { window.require([moduleName], resolve, reject); }).then(function (mod) { if (mod[className]) { return mod[className]; } else { return failure(); } }); } } /** * Registers manager level actions with the notebook actions list */ _init_actions() { var notifier = Jupyter.notification_area.widget('widgets'); this.saveWidgetsAction = { handler: function () { this.get_state({ drop_defaults: true, }).then(function (state) { Jupyter.notebook.metadata.widgets = { 'application/vnd.jupyter.widget-state+json': state, }; Jupyter.menubar.actions .get('jupyter-notebook:save-notebook') .handler({ notebook: Jupyter.notebook, }); }); }.bind(this), icon: 'fa-truck', help: 'Save the notebook with the widget state information for static rendering', }; Jupyter.menubar.actions.register( this.saveWidgetsAction, 'save-with-widgets', 'widgets' ); this.clearWidgetsAction = { handler: function () { delete Jupyter.notebook.metadata.widgets; Jupyter.menubar.actions.get('jupyter-notebook:save-notebook').handler({ notebook: Jupyter.notebook, }); }, help: 'Clear the widget state information from the notebook', }; Jupyter.menubar.actions.register( this.saveWidgetsAction, 'save-clear-widgets', 'widgets' ); } /** * Initialize the widget menu */ _init_menu() { // Add a widgets menubar item, before help. var widgetsMenu = document.createElement('li'); widgetsMenu.classList.add('dropdown'); var helpMenu = document.querySelector('#help_menu').parentElement; helpMenu.parentElement.insertBefore(widgetsMenu, helpMenu); var widgetsMenuLink = document.createElement('a'); widgetsMenuLink.setAttribute('href', '#'); widgetsMenuLink.setAttribute('data-toggle', 'dropdown'); widgetsMenuLink.classList.add('dropdown-toggle'); widgetsMenuLink.innerText = 'Widgets'; widgetsMenu.appendChild(widgetsMenuLink); var widgetsSubmenu = document.createElement('ul'); widgetsSubmenu.setAttribute('id', 'widget-submenu'); widgetsSubmenu.classList.add('dropdown-menu'); widgetsMenu.appendChild(widgetsSubmenu); var divider = document.createElement('ul'); divider.classList.add('divider'); widgetsSubmenu.appendChild( this._createMenuItem('Save Notebook Widget State', this.saveWidgetsAction) ); widgetsSubmenu.appendChild( this._createMenuItem( 'Clear Notebook Widget State', this.clearWidgetsAction ) ); widgetsSubmenu.appendChild(divider); widgetsSubmenu.appendChild( this._createMenuItem('Download Widget State', saveState.action) ); widgetsSubmenu.appendChild( this._createMenuItem('Embed Widgets', embedWidgets.action) ); } /** * Creates a menu item for an action. * @param {string} title - display string for the menu item * @param {Action} action * @return {HTMLElement} menu item */ _createMenuItem(title, action) { var item = document.createElement('li'); item.setAttribute('title', action.help); var itemLink = document.createElement('a'); itemLink.setAttribute('href', '#'); itemLink.innerText = title; item.appendChild(itemLink); item.onclick = action.handler; return item; } _create_comm(comm_target_name, comm_id, data, metadata, buffers) { var that = this; return this._get_connected_kernel().then(function (kernel) { if (data || metadata) { return new_comm( kernel.comm_manager, comm_target_name, data, that.callbacks(), metadata, comm_id, buffers ); } else { // Construct a comm that already is open on the kernel side. We // don't want to send an open message, which would supersede the // kernel comm object, so we instead do by hand the necessary parts // of the new_comm call above. return new Promise(function (resolve) { requirejs(['services/kernels/comm'], function (comm) { var new_comm = new comm.Comm(comm_target_name, comm_id); kernel.comm_manager.register_comm(new_comm); resolve(new_comm); }); }); } }); } _get_comm_info() { /** * Gets a promise for the valid widget models. */ var that = this; return this._get_connected_kernel().then(function (kernel) { return new Promise(function (resolve, reject) { kernel.comm_info('jupyter.widget', function (msg) { resolve(msg['content']['comms']); }); }); }); } _get_connected_kernel() { /** * Gets a promise for a connected kernel */ var that = this; return new Promise(function (resolve, reject) { if ( that.comm_manager && that.comm_manager.kernel && that.comm_manager.kernel.is_connected() ) { resolve(that.comm_manager.kernel); } else { that.notebook.events.on( 'kernel_connected.Kernel', function (event, data) { resolve(data.kernel); } ); } }); } setViewOptions(options) { var options = options || {}; if (!options.output && options.parent) { // use the parent output if we don't have one options.output = options.parent.options.output; } if (options.output) { options.iopub_callbacks = { output: options.output.handle_output.bind(options.output), clear_output: options.output.handle_clear_output.bind(options.output), }; } return options; } /** * Callback handlers for a specific view */ callbacks(view) { var callbacks = ManagerBase.prototype.callbacks.call(this, view); if (view && view.options.iopub_callbacks) { callbacks.iopub = view.options.iopub_callbacks; } return callbacks; } } /** * List of widget managers in *reverse* order * (_managers[0] is the most recent) */ WidgetManager._managers = []; ipywidgets-8.1.5/python/widgetsnbextension/src/save_state.js000066400000000000000000000022661466162644600244710ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. 'use strict'; var save_state = function () { return new Promise(function (resolve, reject) { requirejs(['base/js/namespace'], function (Jupyter) { var wm = Jupyter.WidgetManager._managers[0]; if (!wm) { reject('No widget manager'); } return wm .get_state({ drop_defaults: true, }) .then(function (state) { var data = 'text/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(state, null, ' ')); var a = document.createElement('a'); a.download = 'widget_state.json'; a.href = 'data:' + data; a.click(); resolve(); }); }); }); }; var action = { help: 'Download the widget state as a JSON file', icon: 'fa-sliders', help_index: 'zz', handler: save_state, }; var action_name = 'save-widget-state'; var prefix = 'widgets'; requirejs(['base/js/namespace'], function (Jupyter) { Jupyter.notebook.keyboard_manager.actions.register( action, action_name, prefix ); }); module.exports = { action: action }; ipywidgets-8.1.5/python/widgetsnbextension/src/widget_output.css000066400000000000000000000010221466162644600253770ustar00rootroot00000000000000/* * Copyright (c) Jupyter Development Team. * Distributed under the terms of the Modified BSD License. */ /* Override the correction for the prompt area in https://github.com/jupyter/notebook/blob/dd41d9fd5c4f698bd7468612d877828a7eeb0e7a/IPython/html/static/notebook/less/outputarea.less#L110 */ .jupyter-widgets-output-area div.output_subarea { max-width: 100%; } /* Work-around for the bug fixed in https://github.com/jupyter/notebook/pull/2961 */ .jupyter-widgets-output-area > .out_prompt_overlay { display: none; } ipywidgets-8.1.5/python/widgetsnbextension/src/widget_output.js000066400000000000000000000121421466162644600252300ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. 'use strict'; // This widget is strongly coupled to the notebook because of the outputarea // dependency. var outputBase = require('@jupyter-widgets/output'); require('./widget_output.css'); var outputArea = new Promise(function (resolve, reject) { requirejs(['notebook/js/outputarea'], resolve, reject); }); export class OutputModel extends outputBase.OutputModel { defaults() { return { ...super.defaults(), msg_id: '', outputs: [], }; } initialize(attributes, options) { super.initialize(attributes, options); this.listenTo(this, 'change:msg_id', this.reset_msg_id); if (this.comm && this.comm.kernel) { this.kernel = this.comm.kernel; this.kernel.set_callbacks_for_msg(this.model_id, this.callbacks(), false); } var that = this; // Create an output area to handle the data model part outputArea.then(function (outputArea) { that.output_area = new outputArea.OutputArea({ selector: document.createElement('div'), config: { data: { OutputArea: {} } }, prompt_area: false, events: that.widget_manager.notebook.events, keyboard_manager: that.widget_manager.keyboard_manager, }); that.listenTo( that, 'new_message', function (msg) { that.output_area.handle_output(msg); that.set('outputs', that.output_area.toJSON(), { newMessage: true }); that.save_changes(); }, that ); that.listenTo(that, 'clear_output', function (msg) { that.output_area.handle_clear_output(msg); that.set('outputs', that.output_area.toJSON(), { newMessage: true }); that.save_changes(); }); that.listenTo(that, 'change:outputs', that.setOutputs); that.setOutputs(); }); } // make callbacks callbacks() { // Merge our callbacks with the base class callbacks. var cb = super.callbacks(); var iopub = cb.iopub || {}; var iopubCallbacks = { ...iopub, output: function (msg) { this.trigger('new_message', msg); if (iopub.output) { iopub.output.apply(this, arguments); } }.bind(this), clear_output: function (msg) { this.trigger('clear_output', msg); if (iopub.clear_output) { iopub.clear_output.apply(this, arguments); } }.bind(this), }; return { ...cb, iopub: iopubCallbacks }; } reset_msg_id() { var kernel = this.kernel; // Pop previous message id var prev_msg_id = this.previous('msg_id'); if (prev_msg_id && kernel) { var previous_callback = kernel.output_callback_overrides_pop(prev_msg_id); if (previous_callback !== this.model_id) { console.error( 'Popped wrong message (' + previous_callback + ' instead of ' + this.model_id + ') - likely the stack was not maintained in kernel.' ); } } var msg_id = this.get('msg_id'); if (msg_id && kernel) { kernel.output_callback_overrides_push(msg_id, this.model_id); } } setOutputs(model, value, options) { if (!(options && options.newMessage)) { // fromJSON does not clear the existing output this.output_area.clear_output(); // fromJSON does not copy the message, so we make a deep copy this.output_area.fromJSON( JSON.parse(JSON.stringify(this.get('outputs'))) ); } } } export class OutputView extends outputBase.OutputView { render() { var that = this; this.el.classList.add('jupyter-widgets-output-area'); outputArea.then(function (outputArea) { that.output_area = new outputArea.OutputArea({ selector: that.el, // use default values for the output area config config: { data: { OutputArea: {} } }, prompt_area: false, events: that.model.widget_manager.notebook.events, keyboard_manager: that.model.widget_manager.keyboard_manager, }); that.listenTo( that.model, 'new_message', function (msg) { that.output_area.handle_output(msg); }, that ); that.listenTo(that.model, 'clear_output', function (msg) { that.output_area.handle_clear_output(msg); // fake the event on the output area element. This can be // deleted when we can rely on // https://github.com/jupyter/notebook/pull/2411 being // available. that.output_area.element.trigger('clearing', { output_area: this }); }); // Render initial contents from the current model that.listenTo(that.model, 'change:outputs', that.setOutputs); that.setOutputs(); }); super.render(); } setOutputs(model, value, options) { if (!(options && options.newMessage)) { // fromJSON does not clear the existing output this.output_area.clear_output(); // fromJSON does not copy the message, so we make a deep copy this.output_area.fromJSON( JSON.parse(JSON.stringify(this.model.get('outputs'))) ); } } } ipywidgets-8.1.5/python/widgetsnbextension/webpack.config.js000066400000000000000000000012421466162644600244150ustar00rootroot00000000000000var path = require('path'); module.exports = { entry: ['./amd-public-path.js', './src/extension.js'], output: { filename: 'extension.js', path: path.resolve(__dirname, 'widgetsnbextension', 'static'), libraryTarget: 'amd', publicPath: '', // Set in amd-public-path.js }, devtool: 'source-map', module: { rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader'] }, // required to load font-awesome { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource' }, { test: /\.svg$/i, type: 'asset' }, ], }, // 'module' is the magic requirejs dependency used to set the publicPath externals: ['module'], }; ipywidgets-8.1.5/python/widgetsnbextension/widgetsnbextension.json000066400000000000000000000001101466162644600260060ustar00rootroot00000000000000{ "load_extensions": { "jupyter-js-widgets/extension": true } } ipywidgets-8.1.5/python/widgetsnbextension/widgetsnbextension/000077500000000000000000000000001466162644600251235ustar00rootroot00000000000000ipywidgets-8.1.5/python/widgetsnbextension/widgetsnbextension/__init__.py000066400000000000000000000013751466162644600272420ustar00rootroot00000000000000"""Interactive widgets for the Jupyter notebook. Provide simple interactive controls in the notebook. Each widget corresponds to an object in Python and Javascript, with controls on the page. You can display widgets with IPython's display machinery:: from ipywidgets import IntSlider from IPython.display import display slider = IntSlider(min=1, max=10) display(slider) Moving the slider will change the value. Most widgets have a current value, accessible as a `value` attribute. """ from ._version import __version__ from warnings import warn def _jupyter_nbextension_paths(): return [{ 'section': 'notebook', 'src': 'static', 'dest': 'jupyter-js-widgets', 'require': 'jupyter-js-widgets/extension' }] ipywidgets-8.1.5/python/widgetsnbextension/widgetsnbextension/_version.py000066400000000000000000000001751466162644600273240ustar00rootroot00000000000000# Copyright (c) Jupyter Development Team. # Distributed under the terms of the Modified BSD License. __version__ = '4.0.13' ipywidgets-8.1.5/scripts/000077500000000000000000000000001466162644600154235ustar00rootroot00000000000000ipywidgets-8.1.5/scripts/hashes000077500000000000000000000002651466162644600166270ustar00rootroot00000000000000#!/bin/sh for f in $@ do echo "$f" echo md5: `md5 -q "$f"` echo sha1: `shasum -a 1 "$f" | awk '{print $1}'` echo sha256: `shasum -a 256 "$f" | awk '{print $1}'` echo done ipywidgets-8.1.5/scripts/hashes_fedora000077500000000000000000000003001466162644600201350ustar00rootroot00000000000000#!/bin/sh for f in $@ do echo "$f" echo md5: `md5sum "$f" | awk '{print $1}'` echo sha1: `sha1sum "$f" | awk '{print $1}'` echo sha256: `sha256sum "$f" | awk '{print $1}'` echo done ipywidgets-8.1.5/scripts/milestone_check.py000066400000000000000000000136621466162644600211410ustar00rootroot00000000000000# Copyright (c) 2018 Jupyter Development Team. # Distributed under the terms of the Modified BSD License. # Generate a GitHub token at https://github.com/settings/tokens # Invoke this script using something like: # python scripts/milestone_check.py # From the milestone_check.py script in JupyterLab import subprocess import requests import os import sys REPO = 'jupyter-widgets/ipywidgets' ranges = { '8.0': 'origin/main ^7.x', } try: api_token = os.environ['GITHUB_TOKEN'] except KeyError: print('Error: set the environment variable GITHUB_TOKEN to a GitHub authentication token (see https://github.com/settings/tokens)') exit(1) if len(sys.argv) != 2: print('Error: exactly one argument expected, the milestone.') exit(1) MILESTONE=sys.argv[1] if MILESTONE not in ranges: print('Error: I do not know about milestone %r. Possible milestones are %r'%(MILESTONE, list(ranges.keys()))) exit(1) out = subprocess.run("git log {} --format='%H,%cE,%s'".format(ranges[MILESTONE]), shell=True, encoding='utf8', stdout=subprocess.PIPE) commits = {i[0]: (i[1], i[2]) for i in (x.split(',',2) for x in out.stdout.splitlines())} url = 'https://api.github.com/graphql' json = { 'query' : """ query test($cursor: String) { search(first: 50, after: $cursor, type: ISSUE, query: "repo:%(repo)s milestone:%(milestone)s is:pr is:merged ") { issueCount pageInfo { endCursor hasNextPage } nodes { ... on PullRequest { title number mergeCommit { oid } commits(first: 100) { totalCount nodes { commit { oid } } } } } } } """%{'milestone': MILESTONE, 'repo': REPO}, 'variables': { 'cursor': None } } headers = {'Authorization': 'token %s' % api_token} # construct a commit to PR dictionary prs = {} large_prs = [] cursor = None while True: json['variables']['cursor'] = cursor r = requests.post(url=url, json=json, headers=headers) results = r.json()['data']['search'] total_prs = results['issueCount'] pr_list = results['nodes'] for pr in pr_list: if pr['commits']['totalCount'] > 100: large_prs.append(pr['number']) continue # TODO fetch commits prs[pr['number']] = {'mergeCommit': pr['mergeCommit']['oid'], 'commits': set(i['commit']['oid'] for i in pr['commits']['nodes'])} has_next_page = results['pageInfo']['hasNextPage'] cursor = results['pageInfo']['endCursor'] if not has_next_page: break prjson = {'query': """ query test($pr:Int!, $cursor: String) { repository(owner: "%(repoowner)s", name: "%(reponame)s") { pullRequest(number: $pr) { title number mergeCommit { oid } commits(first: 100, after: $cursor) { totalCount pageInfo { endCursor hasNextPage } nodes { commit { oid } } } } } } """%{'repoowner': REPO.split('/')[0], 'reponame': REPO.split('/')[1]}, 'variables': { 'pr': None, 'cursor': None }} for prnumber in large_prs: prjson['variables']['pr']=prnumber pr_commits = set() while True: r = requests.post(url=url, json=prjson, headers=headers) pr = r.json()['data']['repository']['pullRequest'] assert pr['number']==prnumber total_commits = pr['commits']['totalCount'] pr_commits.update(i['commit']['oid'] for i in pr['commits']['nodes']) has_next_page = results['pageInfo']['hasNextPage'] cursor = results['pageInfo']['endCursor'] if not pr['commits']['pageInfo']['hasNextPage']: break prjson['variables']['cursor'] = pr['commits']['pageInfo']['endCursor'] prs[prnumber] = {'mergeCommit': pr['mergeCommit']['oid'], 'commits': pr_commits} if total_commits > len(pr_commits): print("WARNING: PR %d (merge %s) has %d commits, but GitHub is only giving us %d of them"%(prnumber, pr['mergeCommit']['oid'], total_commits, len(pr_commits))) # Check we got all PRs assert len(prs) == total_prs # Reverse dictionary commits_to_prs={} for key,value in prs.items(): commits_to_prs[value['mergeCommit']]=key for c in value['commits']: commits_to_prs[c]=key # Check to see if commits in the repo are represented in PRs good = set() notfound = set() for c in commits: if c in commits_to_prs: good.add(commits_to_prs[c]) else: notfound.add(c) prs_not_represented = set(prs.keys()) - good print("Milestone: %s, %d merged PRs, %d commits in history"%(MILESTONE, total_prs, len(commits))) print() print('-'*40) print() if len(prs_not_represented) > 0: print(""" PRs that are in the milestone, but have no commits in the version range. These PRs probably belong in a different milestone. """) print('\n'.join(f'https://github.com/{REPO}/pull/{i}' for i in prs_not_represented)) else: print('Congratulations! All PRs in this milestone have commits in the commit history for this version range, so they all probably belong in this milestone.') print() print('-'*40) print() if len(notfound): print("""The following commits are not included in any PR on this milestone. This probably means the commit's PR needs to be assigned to this milestone, or the commit was pushed to main directly. """) print('\n'.join('%s %s %s'%(c, commits[c][0], commits[c][1]) for c in notfound)) prs_to_check = [c for c in notfound if 'Merge pull request #' in commits[c][1] and commits[c][0] == 'noreply@github.com'] if len(prs_to_check)>0: print() print("Try checking these PRs. They probably should be in the milestone, but probably aren't:") print() print('\n'.join('%s %s'%(c, commits[c][1]) for c in prs_to_check)) else: print('Congratulations! All commits in the commit history are included in some PR in this milestone.') ipywidgets-8.1.5/scripts/package-integrity.js000066400000000000000000000103241466162644600213700ustar00rootroot00000000000000/** * Verify the integrity of each package - ensure package json matches * imports * * Originally based on https://github.com/jupyterlab/jupyterlab/blob/a36639e65aa0c5bc50b2b0bfa562bde1bb393c28/scripts/package-integrity.js * */ var readFileSync = require('fs').readFileSync; var writeFileSync = require('fs').writeFileSync; var ts = require('typescript'); var glob = require('glob'); var childProcess = require('child_process'); var path = require('path'); // Packages to ignore var IGNORE = { '@jupyter-widgets/base': ['@types/backbone', '@types/lodash'], '@jupyter-widgets/controls': ['@jupyter-widgets/base'], '@jupyter-widgets/jupyterlab-manager': [ 'backbone', '@types/backbone', '@jupyterlab/cells', ], '@jupyter-widgets/html-manager': ['ajv', '@jupyter-widgets/schema'], '@jupyter-widgets/example-web-tmpnb': ['http-server', 'font-awesome'], '@jupyter-widgets/example-web3': ['http-server', '@jupyter-widgets/controls'], }; /** * Extract the module imports from a TypeScript source file. */ function getImports(sourceFile) { var imports = []; handleNode(sourceFile); function handleNode(node) { switch (node.kind) { case ts.SyntaxKind.ImportDeclaration: imports.push(node.moduleSpecifier.text); break; case ts.SyntaxKind.ImportEqualsDeclaration: imports.push(node.moduleReference.expression.text); break; } ts.forEachChild(node, handleNode); } return imports; } /** * Validate the integrity of a package in a directory. */ function validate(dname) { var filenames = glob.sync(dname + '/src/*.ts*'); filenames = filenames.concat(glob.sync(dname + '/src/**/*.ts*')); if (filenames.length == 0) { return []; } var imports = []; try { var pkg = require(path.resolve(dname) + '/package.json'); } catch (e) { return []; } var ignore = IGNORE[pkg['name']] || []; var deps = pkg['dependencies']; // Extract all of the imports from the TypeScript files. filenames.forEach((fileName) => { var sourceFile = ts.createSourceFile( fileName, readFileSync(fileName).toString(), ts.ScriptTarget.ES6, /*setParentNodes */ true ); imports = imports.concat(getImports(sourceFile)); //console.log(fileName, getImports(sourceFile)); }); var names = Array.from(new Set(imports)).sort(); names = names.map(function (name) { var parts = name.split('/'); if (name.indexOf('@') === 0) { return parts[0] + '/' + parts[1]; } return parts[0]; }); var problems = []; names.forEach(function (name) { if (name === '..' || name === '.' || ignore.indexOf(name) !== -1) { return; } if (!deps[name]) { problems.push('Missing package: ' + name); } }); Object.keys(deps).forEach(function (name) { if (ignore.indexOf(name) !== -1) { return; } if (versions[name]) { var desired = '^' + versions[name]; if (deps[name] !== desired) { problems.push('Bad core version: ' + name + ' should be ' + desired); } } if ( names.indexOf(name) === -1 && !name.startsWith('@jupyter-widgets/base') && !name.startsWith('@jupyter-widgets/controls') ) { problems.push('Unused package: ' + name); } }); return problems; } // Find all of the packages. var basePath = path.resolve('.'); var baseConfig = require(path.join(basePath, 'package.json')); // Gather the versions of each package. var versions = {}; baseConfig.workspaces.forEach(function (spec) { var dirs = glob.sync(path.join(basePath, spec)); dirs.forEach(function (dname) { try { var pkg = require(path.resolve(dname) + '/package.json'); versions[pkg['name']] = pkg['version']; } catch (e) { return; } }); }); var errors = {}; // Validate each package. baseConfig.workspaces.forEach(function (spec) { var dirs = glob.sync(path.join(basePath, spec)); dirs.forEach(function (dname) { var name = path.relative('.', dname); var problems = validate(dname); if (problems.length > 0) { errors[name] = problems; } }); }); // Handle any errors. if (Object.keys(errors).length > 0) { console.log('Package integrity failures:'); console.log(JSON.stringify(errors, null, 2)); process.exit(1); } ipywidgets-8.1.5/scripts/release_template.txt000066400000000000000000000011571466162644600215030ustar00rootroot00000000000000### [v{{ version }}](https://github.com/jupyter-widgets/ipywidgets/releases/tag/v{{ version }}) ({{ close_date }}) See the [ipywidgets {{ version }}](https://github.com/jupyter-widgets/ipywidgets/milestone/XXXX?closed=1) milestone on GitHub for the full list of pull requests and issues closed. {% for pr in pull_requests -%} * {{ pr['title'] | capitalize }} ([#{{ pr['number'] }}]({{pr['html_url']}}) {%- if pr['loghub_related_issues']|length %} {%- for pri in pr['loghub_related_issues'] -%} , [#{{ pri['text'] }}]({{ pri['url'] }}) {%- endfor -%} {%- endif %}) {% endfor %} ipywidgets-8.1.5/scripts/strip_examples.py000077500000000000000000000041221466162644600210360ustar00rootroot00000000000000#!/usr/bin/env python """strip outputs from an IPython Notebook Opens a notebook, strips its output, and writes the outputless version to the original file. Useful mainly as a git filter or pre-commit hook for users who don't want to track output in VCS. This does mostly the same thing as the `Clear All Output` command in the notebook UI. LICENSE: Public Domain From https://gist.github.com/minrk/6176788 ls docs/source/examples/*.ipynb | xargs -I {} ./scripts/strip_examples.py "{}" After running this on the examples, re-run the outputs on: Using Interact.ipynb Output Widget.ipynb Image Browser.ipynb Widget Basics.ipynb Beat Frequencies.ipynb Lorenz Differential Equations.ipynb Widget Events.ipynb Export As (nbconvert).ipynb Exploring Graphs.ipynb Image Processing.ipynb Widget List.ipynb Widget Styling.ipynb Widget Low Level.ipynb Factoring.ipynb Widget Alignment.ipynb """ import io import sys try: # Jupyter >= 4 from nbformat import read, write, NO_CONVERT except ImportError: # IPython 3 try: from IPython.nbformat import read, write, NO_CONVERT except ImportError: # IPython < 3 from IPython.nbformat import current def read(f, as_version): return current.read(f, 'json') def write(nb, f): return current.write(nb, f, 'json') def _cells(nb): """Yield all cells in an nbformat-insensitive manner""" if nb.nbformat < 4: for ws in nb.worksheets: yield from ws.cells else: yield from nb.cells def strip_output(nb): """strip the outputs from a notebook object""" nb.metadata.pop('signature', None) nb.metadata.pop('widgets', None) for cell in _cells(nb): if 'outputs' in cell: cell['outputs'] = [] if 'prompt_number' in cell: cell['prompt_number'] = None return nb if __name__ == '__main__': filename = sys.argv[1] with open(filename, 'r', encoding='utf8') as f: nb = read(f, as_version=NO_CONVERT) nb = strip_output(nb) with open(filename, 'w', encoding='utf8') as f: write(nb, f) ipywidgets-8.1.5/tests/000077500000000000000000000000001466162644600150765ustar00rootroot00000000000000ipywidgets-8.1.5/tests/jlogo-small.png000066400000000000000000000026571466162644600200360ustar00rootroot00000000000000PNG  IHDR2gAMA a cHRMz&u0`:pQ<bKGDtIME!EdIDATHǭ[]ULgڙV\X޸ 5j,HAy &F3Jډ1<1>pi5B ZA|P zP*@939=g>OL[Kdego2JDG1X塞SN)-9ܚ0c8;F`KJ!h@;"z!t.j 583NXk}DO܆{g'j/Ff\`yh4G |['E*"V>\㓭q_UHvе?Cs3:)">oy8:7b([Sӷma{U73Hyc1;gr؀7 @{tjQJIDxxgs5f"< )""`Q|OnѫV܏;p`مFv[Қ_Q]:l͠7ѩiͬ3w>\ P}2ٱo Uë>?7w[)qJs9B&IEϘrD#"NwˎޞsraVD(\]87oF]+ac5& 4GF?yRp).{pw𪼶d#?uY+xPUdKU[UoS*Xpk]w( Vc/>x("s%:;[~ QuӸ'~6{ſ #3\ }ȅ:7"n%"XUcЪnyT\wGn/bJ355UH_CsS^Z4|SJj^맜e ڋz͹z::5 5twq ^[^E*r ;UotjZϬlvS!_q8'yi$}QՇ+qC,Z#Un9QǓ ZV5.=6v;iǺgI[],HV|uzlq['Bkۛ.%}A5WVyʲ|(&@?z|FE!agkr|grxF3ȟݕ8Kr`w r*;o璉w51v;DHDňxK;}颈GM9/^ux=%tEXtdate:create2020-06-08T17:22:33+02:00Kة%tEXtdate:modify2020-06-08T17:22:33+02:00:5IENDB`ipywidgets-8.1.5/tests/test_borders.ipynb000066400000000000000000000042021466162644600206360ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from ipywidgets import *" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t1 = Text(\"text input\", layout=Layout(\n", " width=\"80px\", border=\"1px dashed red\"\n", "))\n", "b1 = Button(description=\"button\")\n", "HBox((t1,b1))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b1.layout.border = \"2px solid yellow\"\n", "t1.layout.border_left = \"5px dotted blue\"\n", "b1.layout.border_right = \"2px dotted blue\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t2 = Text(\"text input\")\n", "b2 = ToggleButton(description=\"toggle button\", layout=Layout(\n", " width=\"200px\", border_left=\"2px solid yellow\"\n", "))\n", "HBox((t2,b2))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t2.layout.border_left = \"5px dotted blue\"\n", "b2.layout.border_right = \"2px dotted blue\"\n", "t2.layout.border = \"1px dashed red\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t1.layout.border_top = \"5px solid green\"\n", "b1.layout.border = \"1px solid purple\"\n", "t2.layout.border_right = \"5px double skyblue\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "t2.layout.border_right = None" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 } ipywidgets-8.1.5/tests/test_sanitizer.ipynb000066400000000000000000000047601466162644600212170ustar00rootroot00000000000000{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from ipywidgets import *" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Checkbox(description=\"

italic

bold

\", description_allow_html=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Checkbox(description=\"

italic

bold

\", description_allow_html=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Text(description=\" NOT styled\", description_allow_html=False)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Text(description=\" styled\", description_allow_html=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "Textarea(description=\" underlined\", description_allow_html=True)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "VBox((Text(description=\"$ y < a, x $\", allow_html=True),\n", " Text(description=\"$ y < a, x $\", description_allow_html=True)\n", " ))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "VBox((Label(\"$ y < a, x > a$\"), HTMLMath(\"$ y < a, x > a$\")))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.1" } }, "nbformat": 4, "nbformat_minor": 4 } ipywidgets-8.1.5/tsconfig.typedoc.json000066400000000000000000000012031466162644600201050ustar00rootroot00000000000000{ "$schema": "http://json.schemastore.org/tsconfig", "compilerOptions": { "lib": ["ES2019", "WebWorker", "ScriptHost", "DOM", "DOM.Iterable"], "paths": { "@jupyter-widgets/*": [ "./packages/*/src", "./python/jupyterlab_widgets/src" ] } }, "extends": "./tsconfigbase", "references": [ { "path": "./packages/base" }, { "path": "./packages/base-manager" }, { "path": "./packages/controls" }, { "path": "./packages/html-manager" }, { "path": "./packages/output" }, { "path": "./python/jupyterlab_widgets" } ] } ipywidgets-8.1.5/tsconfigbase.json000066400000000000000000000012021466162644600172710ustar00rootroot00000000000000{ "$schema": "http://json.schemastore.org/tsconfig", "compilerOptions": { "allowSyntheticDefaultImports": true, "composite": true, "declaration": true, "declarationMap": true, "esModuleInterop": true, "incremental": true, "jsx": "react", "module": "esnext", "moduleResolution": "node", "noEmitOnError": true, "noImplicitAny": true, "noImplicitThis": false, "noUnusedLocals": true, "preserveWatchOutput": true, "resolveJsonModule": true, "skipLibCheck": true, "sourceMap": true, "strict": true, "strictPropertyInitialization": false, "target": "es2017" } } ipywidgets-8.1.5/typedoc.json000066400000000000000000000006441466162644600163020ustar00rootroot00000000000000{ "$schema": "https://typedoc.org/schema.json", "entryPointStrategy": "packages", "entryPoints": [ "packages/base", "packages/base-manager", "packages/controls", "packages/html-manager", "packages/output", "python/jupyterlab_widgets" ], "githubPages": false, "logLevel": "Verbose", "name": "jupyter-widgets", "out": "docs/typedoc/typedoc", "tsconfig": "tsconfig.typedoc.json" } ipywidgets-8.1.5/ui-tests/000077500000000000000000000000001466162644600155115ustar00rootroot00000000000000ipywidgets-8.1.5/ui-tests/.yarn/000077500000000000000000000000001466162644600165405ustar00rootroot00000000000000ipywidgets-8.1.5/ui-tests/.yarn/install-state.gz000066400000000000000000014036021466162644600216740ustar00rootroot00000000000000[gIr]X`Y`+T~_~????ҏo?}oiu]e0Y9sZqz=jv4V ;u]#W޸:qqѯ=:'}ça?×w{~?|C_~˿ӗz~~:~տ=ZpbO'kSpo^zڥʱ!v4 ~|QlMeෝ0½t~Ͽ/o§e;O?r>:yNL7KC-ؤV^AиrcN`! k&H>l 9 n"tQqN'0oBKXLJ^q^N3rcxxH/rFQp W $k+B sW&2zxB@e#\NaCy5vc%zSHԅ\t'o%qBԃF^ZD6 py 09=g"jNE+v{f$u8c4GLt]qY_Mf=Aa{1׵`Qv4P*k/s<}amO6Zd) vgJ܇ K_ҀGla^˨z2nӊ!csV;;iS +&1MLݣa0aA5TȚ0տk E^=BsU0PɆ  E6G{`sHWH5sq W$3Beih9F#YMA:4 0a]@1t]NJƆfC"y ,qhf'~W,*u据Y87A^/nuuT,/v% B//o ʋ*"&R&PaQu?܋N1ejD2^(S.'J9B T.hW׈r}"ɬG VaDK#ee4H`.R;t1ifx D"JH6Ïo/]LIcDҪ.<@$⌯W Lɗ34j<b'ֳJaZ7r2vU^aB]CCz⚡164Uz$%%>P шG~'2adH(|&84_p(5r>$ ~{dCV+kb{*ϓxɮj-*)Ċk,Wq(5P]ɉ CO~&M:Jb/>}3@ERHC*Df({ޔ23g:6Du+Ԭ ޤvO\tm/ԑ~埾w_o?o~_c_N}- ݅iCd]A@:.[ɺEGF/f{pF!Qg޶YWQ>*(ʼn->6˕lmEBD8i + V {7O)j8,ى ҭU :E_|G&OGɁxj!X "zܾaX+xe--$k/y&m6H o-'A%T^I=n 450aْX |t.$݅v)ZC{#5ᄚOv;Y8z;Q =ޡM)Kf}AI\@̫Hg)w~Ouwy}Ϩox_F< {YȒޙM9jQ!6-KbK祴m $o?^ $l]Ȗ}3P{pI#G;( ȷb+6%P8vJbC+* >EO%[=}K8Ko: 2ߧ* m,G5Ju5d yˁ:tt}q,=ɾkwP4,®, bZC.PQH*ʦީnL&? X j[CBQ/9&  ,RheJbՕ!l^쳎x#[ 9ȤQ;[j#}y@Ϥ5dA/_F@D"W5u. (?+%Z,Κ|C\/RJE[WE.}@BkѦٓ Y*ɺy iC[vZ3Ug@e/R@rT~U7 \M:Y5J wsg?.w/څK`C<|y!%z{tg$w# 4 <d.hGOi~C"[p!c~U{0HG5.K]߶֛UAuJA Brܮ[Ue!xo ۊ7 d'Mp!kFGh 6G.M؋:jD.C,EǦ9 de`Qg$Z(keK ՠ*/FiP|yT"Y7IZ'7΁MmAG*#_|AHBw<7=/a,0ι׊,ʛŻTrPpN)si,uHΚ&8jqgYwF֤&o ]GjnWL/^aZ:Ddb "RvW —dPGj4Z}CwLjGHfW%6YT_^'}FzV&?xw޿ge:I4P I0ki1uFIM1DآEZP-r^uBeU2oލRe]7ϑ+un*yٽ:牑1UPt-ymRS&_f+;X4@8R9#A7o٬+: (rN\uj32^ '^b5yS'*'n3/gUMJiËk5*0ILExW*7?NrھI"]=znfr, "zXeRAI`6$Kwh)A% uн24Dq%:OUIځRxS(G%,mLبf[|z/( 6Z 6/I}!\!JFgUay|#h{TՇ^I`Kc{BeLwh#,agfcŸÁZJ*WOkǖtPui~|Uoz~Ҷx0td.5{;g,%{JJcИ1j[=UV[E$EMd\|5yC"}OK9Y`֣Mw28jHmSZx "Y4ˬ:s~ .2=^y" k:ұ i+D%&dU *ƽc32g$`HH%0*WRj/"j>'4RZT=ԾGQq EA;x I9MlSs Wxh97R9(ɷz|,4&2=z ;-PwA6 x)r S:(ҁI@6-  k4SCԂxNj̬zßCN] ЪK宦rO`oddiO)ge v"i`RZW9 EM-(BƬhBﶘVk)5_KP],.nG!@Q|mA<2U<> j+Qvn0ERqfTE6WיN -{-Zd*x#VdEm Vm,`lN3 h,fN8tLs>j7%M vŅ_߼݆,^$g*@`DE3Gh素ٚQ dɋN Om/Z!" FVYH7Md& cz`tZoeErCTβ_ )SHqHb˼|fSȰEMS$7m{TKKɦV-2whQiu&\cUG9)V얇O9vLa M(r[.)1u ՍȧGD6Zbn"6vTodlrONOdl6l6AReَP\Ŝ@36<#4L8D >'o|v^0aylΐ"j?*ZxQ7j⨱UVq7[۳k@ A"<+X̼z~nֻ:H'Tpg,LAB3c@(bgXnj `3I,qI4ʋ, A4cVae֢ *g ʳ`r](olU`?Җm?)"ٛwU $+D ΑL{nH.]Y$e@ʖ*U oLh70M|Jѐ>ڪ*x;pq\_S3dL+T ?ڦ,.7+;򌭱WS9,!ȟzԆz$Vt -.{l[Elk9.u*-ZU}/A; k!$>7;t d+$+E䉨^j~V!nr;5sOEƍi RH(eD7{(Ia}b,_]AF"-}ɠ::e}:C{+6lm* }Z% ,qL˛/Lsh79Y TDZwN,I|=iZl\#g¾&XmRXwȱe2W 6޼(ayUzg* pBEZo2lou4BjiȜV]i9 'WDv0v1Pϛ]kdι.U(,lP[-WBka n_sdO{+mERR[Se _e/ !>x>'K~Tku7G.tڈLypzTSfjn[uT&-YME>1Yc7~_eVc g$t>(ptDOh>{S:r++@q깫IɁe3-%ɆDȼDJS%]&F} ]HcK |ISkS`.*x5fccՌ T~ a8d=B԰SLd+ulչa fߗVTRw'yk>)i!?ա`cpBVXGP*e[kNQY)_dԠ&FYPrYS(d(9`& SZYL$j`aFQNN<:PFn¢;k ovl6FPYg}.ޓ ][@=Wq\YK-WXIu: -ڤy Zљ廊8li O!l.O ذ;)QuP!ّE㇝+[fTf#yIޑe+6Б:]Gz^@o!Et=VU\ -gbUDc_[rx^6nz5m#؂ !XGeUR!"Mb*wL[ɼ\N'; ->SЋ1l&t-tr%iA* gY\&ZP[,G6˟6/D=1!'Cbz x$d Ϊݘm=˵NZҡxըC0DHcHZrGWroyP/o#o3J.5bC"7MP_ZǍ^)̻ :! 2H\{C#[Tk$Xjy\8ʗVW@ރe VEyc=#`<_{K1˼} 241ʀ`;Џ w-7gk.J *}Ŧ:oi9L*+h+W-l ׺_^D OB,9u[ؚ5 ?r+$DwϚ52fRZ3fHQuJiٶV4ٴ՝,*vq:W 5u@T"z5L%xj4Sa,}l.Rjg<*ۆ0*@|.QV٪E){֖Mc0 I(yx_'q~Ǐ_o?_D~&Ĭ:r=ׂ${.ir=kkj\kڎA+;M2 v̮&]6/_ ;Y[k_@GEjd5#8`к=ԙ9G#ʔq!n-Yi$̧~*sε/֢ޅ/C*ބ\DjjB"/v $& $9~ѩ:;3 F[6օhwMRot{$Cw`Ξth@ ۳Wx#t4Dz54x$ٺg9 qISv4k #؛,W.,*.Q>RĴB^gy6mK^dR<MuUQ!Fn=y"Z}싐qKm GN"/!'5M\*%39 j6" l䓧A(jttR-t れ|PR蠶)w.Kݔ:պ>u<MHZxEə[^ (j3YWJlkg ǂߦA.vl5X<4BQ|:k cP"-yf41QT'F|&݃j]sTK^0kOu^UI 4bVMPHn^8rg\Er7OFe) ;)]?pe-OJOHGVM18YGNH 'sANd3eTh׈#K#O꥗dچŽLU:y $jg5agִ9ȧtOD?GaW?cZwk _V1waw>~PaCA5fE:e!~6G$gޗ$$ Ho?~_7?΃mL4Ᾰ bᬓuezĘ!h =H'twy':$C^JS%&zqd^ ӈ*PS*S.G%BR پ.C̗6%&ĦP=}{D O) =Q5Y6{JgH1BZk:G#5f1SS;- 2Z3eEevPd,&0:],d2V?]冚q̓fUeW:Ze;[MΪG*z^XfUJۉ, uWb 1CeBD(,P%M~iQW37#qJԓe2LE->2lTQiOM'9e8#$Qb=0l5ؠO/DT;Mʈ-;(oSA{JTqսT@-sTU#AcFؓV.e GMِDEB@NTjM&/j-ʛuI>x/UK^<%A-[?ȦUyV'U;" -C,`&d[tƓ;U.'\U|,;/NAIQSaoη׹󘲶&ڨZmiJO,PSZ<]y=B uOJ 3 1UZ،awUk9Kz}H&n=* i.p㡓 Gigė Ȟ[U|ˢN\JajK a4"d:DŽ7Q?DW6 #pė4zgA.+v[~]xnEzE/l6~h2p'ߟ~?8;gʴ$IJuu*^Q^R1:U_)gMkY| Zjt3${#[R@%jA sp gf9#XJIzt.iphϊ\kQqG}U)j!ʀKF(b/Jج&H!v̦^Uhi]aܑr^uۡ),'ĭ:O֩Dgpoiv[rt֕LW'}]$5 * I> _F ->V2Ssqی4:2ެOW'-.cu񰏄޲kqS"btM"\hn>uIWI*,"eUpYD#|prOw~>|y/>u3aSdu}8@u@WK;<`HG_!q4_? R՝js/*+;cd "D^V=Y$/yĂޅFhRTS~P$VOA2:Nh C5" Q}g4T,AC4LH~e[c]HRA82WH2۩ ꔇkra{5Q)QrV:ot\{6T-*XmҤ4p=[`ʼWAM:8`,-+Kyb俐36W!:v[YI(xD5f *}Q SU _5gjX) ),W)br+ԩ+(SZsuJ2L#C^}f Gu6xSbW'Z@nW˫ůڰJ5UB}u @tlvUv[ic0i/86ۊȏ&_u&=Ybf#jf&{& C=+KupP cSMУWܪ^{zZHV .:.:bK6(;su/MRĵ&95rmj+ejp&H.#(׼)=ׯN%d.Lt*[FܭV [ǚY4׹\>~Ҡ5yPN9di붸i\*orTMֳdekrY3 H's+DK( Ywy* KZh4f]GÁv"mJ O:$8'r"+*)3D.TR&Hܦ%mU_ʥh3v/* SCZE7<# e3)QI:h2φi${7%O^P5cE#yNR,W6͐m1UȂwM˳H\3uݜS(*_F'eXnՔVu7xcI8}QЉEEd:"xrE֚g7D[z6/KSy/<SzSu%RSA3`kk(;'ffsF[GeUv(OkH'7HɤުƏjE1j:9ࣆqM)=:^*wVDSyZ : < 5hfBu"IO=sT\ !jnхN hUQY%.Vuľ]R#ݲor&>Q)+Ǭi撧>!fdM%YK.%Ɠ'Ҳ= ʾaa֒7{ qY>^Đ# ي <1 d%hG2,i|H)\P\gd͐8`yzԱBBBOvtU7ǐľUM`v*ܗ"IF.b*u Cij5%Xx2:roQ\20#` {eayfڈD"ZXsI WK5ryO>Z7 IdX~UVG6fۛ^հ:Waٌ({>e~j]N #2ru>N15^Ҡ0]G[0*[_ jttQ yعEyk_FMK4Kc}a3T{Ol`wѥiӔCh5 .M\ktIDxФ`c[b:%4<WIn[B5 Pr2̃WEdM9B[ug  94 ZsWWEfc \,蒫I) b>pFP)<2ݼSHj-0'e%84Hח}5gm {PtӪOvA4,z @Zp (ݡkʪOIXMdruS7? n^7Y3i£JR߀XbGd.xW:K-U:H:M,LU Y;9#/ FjjGd=zcsX#U 𖥰뽮"gF_&PMo$-}Ы4lUg!P3$ ;µq:}Ur{t&BFltȮWV'Cw)Xj0ϏբFzXB^cn'u!l^p}TԲ欎8|i^`ۛ`񔯈/7tNN@.ȒO鹷gu>&!5S udkh` y sEd6jQ3K0&KYNPEJo^Z"rUyLluzC~5p,9Oyr}Q̺=% $SǞħnS9qChD`%`ѥo&tblcT5DP2DqplȬId,gЗn;"NCCɊDR4@XԢ '@Z^B5=aT2w&k0c7ђ(Z>Ha]URQ5jДd{HuMo8j\oWY,ȡ[rX G!i`ѵ.eWhȮ\CPT*yY5wUmii -F]L3I"uu5mb,~/?$hd[nUjHEHKe ](HuwBK"duFh-unD,8A=1n%}Ut [wujJ"+3cY6#uBL#Ȭ2 {39}!B#D28=eq[]`9i+Vm*Z"!E1& sr,+>u϶|(.z*01D>dQUQ4>" K/]6]y) DPh79MD oENF\NSLo: \R9^7tk&T>|H$@FQ9Y3t{#eRxn5C7b!0nS曄 9蚳5 Ԡ}|K5;I6B7ovدz{'EjԆ|iH/Ovҩ,!92:t.ExC:ЕUj:k"6=P#01iΓsE/mA? tzN ѶZ} Z"47<x/1!҈n=ITv)"F| ru.oqT aݗC $ue! 5 LJ5'nϞ"^F ?)O%+QUo߬VվX4]*̠rU%FVHTi&3/g)aљ966xq1!3ߎdEԶfh5mPN$65R!ɉl 5!II`O^p.zQq:=IOV_ulWݑyWJj L2Yܭ ewG`as)&È |Ztf_<ˮnIv2I%~dXpCRUdW3bgQl̿.D9ƌ9 yN47tY zxR=|5\c9Q1Q6Ys/(W60DBW6I5s gHΖ6uutRӼNcZDp %Og}\o;?4JKX+t؍BrS}]L>xEԏ_cjLlg|Q8!.`gU.Z8hp$eSቅIT;)0hY+u+noo5i,*=%3WK 3噽wժJ lD{iKḷ(sɧmǎxzu>Nn #&:,wigx{7llV\UtT~%[@ӥtH vq: v-r#ĭblb?ZxD1ttJ=.XsVu'1h]'z.l]tEfgjThdO<;}5h]9cTr˙臜NObc};I8; $6] GW"Ӊ-Dzbud0bsw[Jp&_-28t]^䢑@tlSNx}jWK޹CBG8+ HGp5qKSo>avL[Uf0"IRe?ـ@^%3;DA/iBu|c ZuH۱t+ij[N(݈AJUG3 W,ԥsԟsd3_~?}ro"9JG8jogłjzB<r}Q+fxD5pFkjM{1[ VQժ:(; N:t [ x 6i5$ŘW,K-NmMpPb ԇIڄ6P8v 'ϝmյzԄ<BuHVe&K8qݞi;ȘL*CiJȀ]^%Ko֜1Y ;Úrfwf& Q9kԸڥoaC5,^=/RA'^ǺفclZW)vGp~G UqQ L+{݃utB;JY{@AYa.Y|K^"Oѯٝl^JYJzڟ+Mutb /R2_`;sh83m(p~}?E-1>ÛU `^<|*xʵ6UWWmb--*|ysw}j8D,[5)8GTk%'7 $c^>H OޘlQ@}"Y'3;m~w~Vq ?>}͈&J`hZYEM]O9-LV&x0|VTƒ)ݱSb34!8)|1IԞ+ö E F)Bv--[X=BɂMZ! `shMİ<>}#5=pTU؊NZ p,µiøs.j >X ׫Mn2i*?.iAB.:\N x jD@3(Ǘ} T8wk7Q\ԑ@z=%b%Kn) MՏHڴEV$|.")ai.Kt=kT# VGмV% o<`R!(ġV"x@ؘYU# HKeL] /dxwiC>Zn^phU@^fnO$B" 1m /MM,,Z_Џu y+=VUюQz.jʦhK(ڱDKv^uhZhe9^՛I~McPJ8954rCЫ>i tk8"+VޞzAblזuuGŞo/ʰgw5e$+)lG V˾ O Z3O_|S hTxYv$8_+ClG=#?Izv&-2l[aFpRTvHsIh^u+7Pca3'y| cz+)9~v;IN\{ XTȥCE0.-6l^=A󩫨Q^{тՂ|*z TW5~WBpv >ZX !%sP} Qa ͕!_dIJ('DZǖ]'R+fh9S/ J N8ݫUnzg@Ӭ%$ dx<.GG w&=MVJR,>]{nVD0#ry j/ک6g4x,9RDlKd0Q_-4'7!43c_w5Xooh+x*ѭ|z$n H EժMMAsEbm(j;7T\ɮS># qx&szfS] ܫ +HBʥ {* G2o_a~:F6UTPf%|=2m$%-" qjr6}ɶBzčבxta+TMx]2w:"F)wk~8vMqǩ\J굼 ǰ. 8-l?1d]K?;YeLa^;a@^6˾t k@)Nƕ҄ߴȪ{rHߞ78C g[] &d[ I`F;>_9-Rj^^=3}&MYx :{=IHg&J[.K}=l0{f*>@`U; !6;3o֚o^À'x[ Kciv62STv H ?!6qlr]ӕa^$Hy+Nɩ)3&5]Ru"み#M{YU7Y l5@8G(Gy1# A𐅁GFbGLw Yn$4WiNjIvY~ W`nJchwA";n.˶9gKU[uȰ=b(3"NJ 0#9`+^oda}vI`&TG8\Ͽ~q7}o;b~^esv^,LikkT6W‡G)g^H |*TeY=gw>=:sUZ114PMia3!_)vF1j+6 ZК^#{f{mhXh'NgWY.:L?J>:o7H:6E9ږ"q0u}UgiSp¸Ůp;I!0;x L1׳Rd+Ҁ0k"s^ D]^5##]rkpFIߍu<8=SF }:H$XB0ۆ.po:,N02kU-t=I1f룪]IdUx?sr{ZI:<UOQI*6UtP^"g驃득dӫڳ'l/Q +QLᦎ8ذ ?~O34Ψb Zt\L ܤ+J0T٫|3}xɪq&X; EsT 4^:L M.|7.Hܾd>)y@J݌ctzSC A/FKD/y;'F]Qn3%K<>+RI*MZqzJ姬[Gʚ$xuBf6uS;`0 o<Ϊe93/wo_?o~?}O1įOԏos>z~s?Eoz ^O8{]7xd۬f)bӇL<+qm3X&1)5UFxG{>k_DYIOPuҶjbOUPfg뼛MӒƢQ̎S38 ?9Q+½Lu~==tՃ )ё_FGU]rhд;dF{El3R%񒗥ecM1Nwo:k׷'WoOG~g{&УzIZ^92/gݼ]fu!&LSGXvl,5Veݎ8}d[:KD^ب] Jyyr0hrB_j-oIX62œki:1٣<+> zXo>d >8n77ڐ\Eq koܽ];{̕N$9T~;:%uI8]OpT"$T6 bo*7#O'#s*!=ժ e *r9g?M,Լ*_710lph>'SyN{į\M P;vy~T<'Rè弢ISs>cTWǞ4Oj?^G ɨ:eef8ִj#xT\^Ջ-T΀@R6lƞۧ]36Fi+B .[9'so=@Nk1l`3U6H:<ذɮQWQjGnPȪl'ue'}{?cĽoCU=^K <@e6$8#I~\(p.W/'a5OKSge< AՎ|4;$w; |[5}2xȓms>;n^6ht'gx~:;sٹ r*)z]wnj@/D4‚P=*X2#hIyoG~3sV׺Ʊ"jɄ\Hri;z*aS G+o&cwEP|5v^CWM|0߯Vm,ceSL&j+>l̓lJU,U/pqZ2~5VffHgyDqv58= xݙ 1;D%5R`e|}Oo[HYX|B 8ͻn|e{ߛC6j] z U3Zy%(`9P%O/ vRּMRPz{B[O:Ͱ5td+i~흝Ac~jK ==_QgEy6Q1~e;Lbﰮo)Rq뢣>imk?c7( -!kÇ&*|~I~GtgH)>u?Q ?U"wIKy5S` s"aQ9]LkRũts3gD6oJB0>9姙; m. ]588;:ﺩCxhն8&~fߪ|IU6ֵ5lDeqIgx{^pܮo^g%M~a6guvVvƒCwF`6lvd':&RҁIۅI8YIҁax`Ň;NX僓O{KLݞ2qPWP@xO ع yi%^_gv^sl=0 ʖVqL: ũm} D訒__BWG[ bW'[2ja]C/c(z/ߚ<< ` @gӬޖ!}9iz)6^>BN[>lV3#HZ{5k ޞvG' ʯOC/ ;3RDF֚H?Wj!赦hXV@3c =o9-DRLDyn VKtfx@}OuGޑ߇H <7DaG=r:C7ywd&h)A{V1{1;T0Ehh+;᭶S4o^/7~ "JwQQ?:| ^Il/)~u B &S$L˕:ta[YٻNvmZŁT/J C1ǫy. fR8vB ğT>쒞/0۷Iu!Ꙃ3f^ntaA=Z 3!bkY zrpKK8 &Aެh3:ݐY9_!Oo?fo׷GwƏO__>+>o~(I7򝍜DX\8BZfg "}w*;mUL\Ix豓λ7Y}Z]2;×sɎW:u5b/˗/򭶘/埊R4[ $ DhM%IosN+EN0VI6ֽϑ;%Tɕワ%)U_N%#(A8 @JcIQ^4=;ym!' qnpyZ'/ (mTT:乖(dKKGׄ}ٽ<{c*^{ ?1-;j2%*)7 ĩhM)՗,˃'hT]RXJ$c qϮ(h/zAt} W ʕ)t휯_.V0q. 6N^}Cdl AlJ )w܌yjϵljc_ع̥:_²N Rɠku(hf89Y 6Co^LW3ێnIdzH"S[}` D>ajg@TAl>x} rm~ώde9C۱C׻'(_fwDJ:@B hbsY.iSa{w{!ڡb [p緬^K:UwO1B=PxgsjnMgBN?H' OO =יݡ{HHgE0 01=BnpuyހjvqT`"I.:98~N_KJ(Qo?W sEV/YD>%R|K&si}$&9m>?2c>m*3oX=1Za\48ʷGջt,M+ VVN˜`a֕kA`|%µs&Jݫ,!YO֪#gqQo.,N:ڢi>࠿N#v0nE vkP_#>h+EI]/r}RmQV"V/^R;'Oet*y u>R/~;Hj'YV*,ee^M p2JO]OG]0dL/-*z^]Vۇys]Q=G(OWUm[%` eԛToGn{/|Ҵ튗poE0-WMI'M<(OLHT4'ոtH+*:HG@ސ{tp!LI&24#̈́ ܼ yAbjD fȣUqZfb:F!:гq5>U`':-`KgD5٢vmt^r|FVe9~kz}y:k:Ǒ,m8nb/-<=2MΙ׳ncHd0Rd9!+Rf[[<\ӺV/8kkaZ=C,E_kIP"KlvhR#b{RrFۖ3>Z lҴhr>ow9-O-<ߌ7?㷿e\6f$~(O_=<|p^P{(\DY,m콛`uyg@<#z1G[xO.϶uWb%*p-]_4cqN^Grrx߾tmOҒ냖AmuʞMGɓi$xweƏ__oW?~?U/}?;wo?McooO_roذ/؊\)&e JY]OK ;'0j[9ITdv: `1@hHzmiML-Gг#ᶭRxAY1|G54|s(:oYJzgItŲ'ϲ TX7]'ݗi(mp>yE+y7ΘA*7`~yW $1Nϫ0pOy<-}m2t lVc nA,[L9G}TG>&z07`hGEVVYR5 ]Ch˼6Xm s&GI{ \ΚO$l 6<p{Άgl:kVƽrN"lR_*mmyw <ǎƢ&ǹ-%usOwy׊:B|&Yyh9$p5?WP |Oե!^շa :o lZ]_%|ƒ?zN,Ȅ@:Dm :Rb^;U1"CrJ$\1y)9jk׭: V%Ӵ:RD<@@rNJB}?3dw*ov;rTQ7`]Y 殳1?Q8 o<";b{޷jYXp89:w"p+fKWK+ߊ ^7DNgilw;,&O!b' B<+ ?83~'.~ |;}R<zDIl{h,\0/%ytި΁K!UaO[N^tzp nD:-GOK!dqڧɞU6soFt}IH("@IZ2`+W=@o,7lQg嵳rcy0B8crSFֻ3!*|?5_ LT[ڊn e8M| vlsaFG`PU@GJ݁p0NtBqPA1%qASW9dle!rXUkTr{#9{X`Vξt%#ՉbmvF5X[n67oyl#'f:  *h+Ⱥ'r<~с$BփPZ. V u, lȑ'qa9MnЬIwD(mUD_0[&0bgy}i@=o#zv! ێw?i&T-sv繲!۴=e@g*(Y<[{ҚiF@w;46<,O$1Ӂ)A:J\] lNg8Ԩ|27,ܣ}JY,-#׬-nJrAOEUzֆ(3˄6f %%+!Ip-PSsbM.K&ɛMWzMmZ#,/4rW%4ԧ9P^}n>ċS^V3|ECǸKwlA>V̾쇇 p@s:NrT hr[r }}{.sJ{C=5f-``_KDWQbRW> fw (iT!cf#km`H7sls2RbX<#(rɫrAh9gnz@i"yB##A0cඕ국(HT}6xy>d:]g5+*ks3@"mi`+?zg*܍FNSg -uj΁-#Ke:x `@,)A X`^@N% .QJچp/z$M묗 Awdshy~O#78FH\NYLA+7%hHcXv.#!]iP h\auRU QEml'4)u؏RM[WOzӒ_@f v 4E 7XYolCTPlnq+^H ^^OX (@ ׂ4`Zaַtբn Er=m2:6uW3%?rT!i'Y|NU*ۺXVzΒe:b3(| nPY~e3%7wFX'l"TfBKL` l!- ϻr1.y $u:@p>gӎow.<-ɴ}9I:yhTNb#Pá:R!L扶|9w*]g9.(tXm 5&zL=͓؍!epv+;gMáHy$^2W*hTnv=[O@iI퉾32A[LVeI@F`t%`AÆ^]``֚Ãv`:A)WF6{Lw32#!JAy%zY[E[V#^\_,^,EvJ*Xm6LP/w- sdiV`/!j8 wBGVO!%@_^bޫK:cP[+$֭[ 헂30WEr_&dytz`O4iFt]J tD 1';\kB9T&d/#VF =`G,%e n0p|U٦ɢG<OÜ @h $3  ZU*w$­F vr5Y?rc:?tw #w9pU c0ٖMp d\0%`Mž#Vdd*-UBJ4+|ߵuΦ̮Rk30|P@8Kb6).|GP$H8*(yXHh7#}2yxeyp`tp!(Z9S[Q2Be]QY[^bZ$%"&Z$nK@iXJ(\| )IǷO^Ѧ"@u͘Cv y"htHb{ϥu?X8T"uΈ!>]\Z0@1Y=W횀5j+*ݧH`iW xo.qpug,f>iaܢY_G"6݁J%p4LnuE^СAE=fm$=ǤU$I؞ˏ#,dXzU1AE$XӞ:u7O@-}<#J‚g[Ce);2 H5N!kWKf<_0D!B+zԶR?ӉSA*^v 'md:yx " P52@}cB lcF<[ΫZmP av6ObVlj$i ܸBRT(}[8G|R[3:GxR fmjfׯr+p=Rk9@>|s}Ұq&;%!\ 'rZDhOʽnhj]]t]7ٟz'] 1xDvEc@":_xm~Uc doс y% !m<8׭NU7G,ٳ^דEQtdaʪ<K W5h=uǚ]50୭]z!ԫyyi6ood?7s~D&*ä$g ^<*\v6rS~2[eZ27tG._X,EZ _ßt@K_{G,>Tl^t6ZB/W$dZ6vFHZ#Bw_Ebg@;z$隀{{eqvPvhQ]CFgM= ac6Xa;,?E5|5 Q$,Ѿ=)s4@vt4ڮMl n!H(,-8QaqF1ԥX=5( 6;1nOFR箟RQp~doC<#,(_ 1Dv^!-NS/H'Yg6/VB)Ml ʗ Hpw_j?~KVC#\{,5A.sf8a*㭙11%u=J=ʭgrzځpK0#'5Tĩ@=J(SQPJ Š#M%{6^wmP69 :L~"kkr[%\2o6l[famZeIg^)Vs,p*';f;E2",8gb:*IHH*hetY`7 fM.椋6k uE):V q6^UAmRXP'='U``Jl,d4!f~ @> )9},`$9&!"`٥Relj> Um\yRK6Y;O.h($3tՔ"`-G-nP N MrIE|ܪ$Վj”og⎀=yu n[ !!a:6`^x~\Iv AԠN: '&(&掀ObnF@d-V(QPG)QRyl_jECmKL 0=DcX<8X*.vL uBuTgenC'x[ QP>dM9^N>EG!@˲ӎ|9hQY=f\>y(gG] A -_k1l_(dU9XnrRSS'Nn[pC&x( 5!Hg9h rĈ| sr`¡;ur*aJAq& ݹ7lx:|=bSk`B7I*"L%LT@:Srl8v_l:%Sw" .srl-Ucө.`hT>94!I:Zv%][78e} 5wʝT_޷P(pz I #Uݻlt .L5h+deNP<8۽N؆h|θ'Y+[|JNրކ"PLuC7IT 5>zz:!D6*u"?-? LS ='UYQ0 8>y}:^u3] RA/7eO>:<@XEZ#';I)0'ҁe1ĖǓ`$Y'{/;T"tz[Κ$'ő=JaI"=5Pίk}//x^RN+z`8 yFeR F@ 5>$ t;MS~RO bg)/"% c('4ЇwFֶȯ ph?Ȟt| _v3錽o8v|8vd7n47wӿ;U ݖas!-Лd }a@yݤIKLޟ↝W͌,GWJ˪>\A3"'ӕ|OGT>6=O!4^DcRSww \NY q)HccqÛ|D;{- %nT,Pls3(4@R #y^gjd9:'}CaGk!y4n <:Bw19ilCby`߶0/";9#/6%=KcJaS h:RW4mfUTerJ-O;?qkMÀ#JO@ɫ(8xҵ _ez~$voxELm j*ւ<>1AemAczʃNjH%5rz iSY~Qt.jM,>㝄g{,[J9fUNͪ?~mۑ;8ί]bVJ3$ȃ{A{-rKHisS dVnX>#,6B2C^ W QQmD P!@ .vEy/ϕGA="fT8n)*6s<1_&<N`rDHu0zɈY9d6q-;AWwhWE9F<``[͞j㜓2_]IJ-/90zFY}>JAm; Κ謠 "{{-(10"a> ]6<;GϞFL2NzmYFPϷy3+-Ls>lj.k.`h~˜l.ۦ NмeYCz*cF|*ptȅ`n;{%v~$ A<<4\x,V d"X.m.My> ߯S^`3XUl{{jek)TeiC4˜"3Tq2B:=kkﲫdim298eHZ-w<۱r~/~$$,*LEҡ絃2y^FuT(ERyu{mD*p9|uN) N֠ UfU9.5S1BzUg {l?0<5*زwv2`_l dU=*["&#|ʉ (撕kJm]W ) `=(W{ZA`uRMN isPKg4PlGRr*K8S0&\^ĵYiu: 0o E2ngPiV9JڙCy vY60ftjK6R󃻍%gegdjs/5e_YMGӮ7Q㼺CQǕU%?]8SۼOs?7Gxe!_3ŀ.j>sEj_*Q\ZQzgiYtnDW-= e#Cћ{kj]E/Tx.r=&u&Hw4f]S}]y@{/IW tq6u[{PU筝G%of%D`iCArA,p&MG6MDpNCOPεdz7wćoU]vLl07(@%^Xdx){t>N~: r&}^%0l]1l{ /fDYA0zIJ! j{1K+LIe}} I&Em0*sCLhnҦg ρz;ZDz&VL8or=<=Z($ELKbi"qv} $Q:rSU[Pn+ptA3tW_BoQ+$t#b;d|h> !5~\xװ "t#^RM)];jOW5zEmiV+/*>)u%,d8m-[lIPubAYn閲D;T9@JԠrK%tGCb4V[?ENF?Ns7zWd?BnW )tZ,(1 RJ;&φng藌Q=1&H+ު&IߪIџ($اTӜRwȢ& :8$J++\t%3Euk!%@"ҫ ,v%<(j%Yy( G[].#ڊvI\Ys ݙ3v@Cv{mH(L Bp@ e8_꜐Ocڜ^>rRV!帔jeDE.)ѷ)4*qBEYk3P4V_sKx&;\("bʬ*4qɎ*\+X=S9#_ݝWκ[-Kw$+lT.2@ Oxnm==)lpMtcZt I@@28+mkozӅSzɧ4wU 'ʮw& 成{/NG,$eʎnJ;)ennjޕ?BXN!vɞHz*=!%86Ux-r79Щ WQ=t'[RWu5Ȧ3bRUIKP)}["-G!a*|\}|G~7kJy"Gwo)V87ySnݹĠ䔽|65H{g9ּSȇ?r HtW5IjA4m%|Р6\BG8S%hid?IFd&uE+M>AYKu#)/!WI4أ$XåHД MgawCںT_Įn 髟"X+54^ `VmFinfr}I" mj?'2T90']ƒQНCܺG" ;S"M3Rku"l+X2I2[`Z4"o$SLt3v5cA@|`^M)r<)"!i5;ric;+[7g|Yf\W `tsxI1P;|ݮ`J C5oWde-XnjQJ[ӵU`:W[7'+& 1o 1c|Is»!gp[+eo%DBC1L2ueCgL)2vc;.:As+a,@6c϶Xd1ޝO9Kͅ}.g ȧ#bԩsMd`/՜2@D/ZLS(7{ǫB~a{ZTA%e;1~E61+#6%C8^4x+'&ŰqˑH}qJNq%5IJB*[|+J7?a7X?N8]7::lߗɤ+~dc;y^-Q+?`:Y'ZT\QuNFo(N;.ͣid^v@Q,kBMs#'%pk@FEn^Z9UVYxy}MS~bE&yGs`pL6Z"֔tcv;[>jʾTqpeo!G#*u!q(̴vv0*A쫸 ~9bǣ8w@P\C!Jȑ:/L ЊK(f+BeIb? vcZ ?QE~ą󐬨ͥcF>/\ܓ6px |& K= 8Rmڧvg/)w{EYAp:#!acw]G^>!9Vn(ZnoVZR&iG˖ϥ J ™{^AyjAě:8ȝRc\L5_+T1=#zHjt45wC޷>ĩܥqd\G$IԮ`*?{g~b| ur!1>7x]*6K.'[ӲMIQ܇-3g7lfJzzOɐR`J |NaCXo`Ȍ>[\}-UD? <-J3j0]/ZX:(rm-ޥ*S>cUa1\xQMaC)>IpsIZr;J5B)*K87qWnR>!7f胢XW]KXIGq:DC yp(NNxnWIRj80VnNRqIĦG6DHgq ]{i N ī45-h@E~gnD(`+XExC^!K 'Ȏӫ+d Fl ?Pww)K:p'w .$z/ӝ;S"4$Zjc Q鴬WּJi:P:EeUGrK(PZqEIz߽(U- `}o6StꙪs備KחW4S"p(qzzoBrMjNul(f(V',rpUn 1y\̫͏x<[XXb%q$nO%}])Kpz3^uEka3,UgCLmt7::p|WO i%l\ \DDC%B*Z p+W\4$?*ek.ʪxa\۔:p(Rҥxltd%<~Txxv=hvS\tZQ%qhrŗqC^]{d^&\pw_\2/pxY[i A'ϻ:_dTlyʄۄlbrgaHG/qCxP r 2DչS/ Hg#$MW:$Ǻ BYUN92kNEHΨ?%+W}HK^ܯh|.1p7*/zO*Kny^{^:uS\VΗFt5NGOeC_myh &sx| "Fx!')s7k"-JGwJ(okjr]8DXN`v3_&f'y(JJ䯳[ߚr#H@n٦keuzy] iSW; 6r<4WΔM1 D# m,n5 o;DuVCo|R=Fr7QZkjߣ,?A)ݷ={N(hȲRm9];5!j (4mNA+ I[U& 5c+^_JXߊ^kYcgTYGإL?k0lw}X6ytXʦdSq\ǚA o5.UvuhS Nvf 0OUyLC&}2yͤC.GN+uŖ-3p#.jơ8C %j,nDdҬ3{j=Uԟr2*bk:,Ξtw7&>[˯۪f r%O%tƽGL݀E(brW(Rj&PvܰCza4j9ik5g(LH;@MKW8vJh$~i >e/dkx&tqrD/Ui "M1}ʼ)ISlⵏtKjVOV! f?iQLenYHc6`UGNOլay9>^[9wz9"@._t$|;\}R:7ۜ|/?aC~ğԩE\*]P&O3LX%g7*Xb_ϭٺݵ.&t)|nI$o:<:җGC=@F8}],W#e Տ쾱@PLA!BY;HD[i:&itS-csתjnIUDuM{d ]#qt;YmnњpUqk)kv j]Wn II܃Ш6>E_ c` N,ZE뤅ٓ"V[mA!ZL7c%Z\,&gO8%mRZ:=^iܹ:~cZHՓ[E$%ty?T}4q ܣCc}&+z M,T J]RIdMO=8ƪTT(rJ0)ħs1/hҽCvQ! 9IM%'/Js՝FQ|>Y ةd.R S,ITiǻu$nWWݴ,u벫~RǞG a%&<{y~blp$jKHuG6*HOo( j+,) Ohk(LT5H4=,v˲^[4VfK e>K&JrbGW=fkh?aIrsQUMABg lՁtRŀz20v.s iRCb E?>tsJ(K\TnžR+Qλg}w)OSg[@jߞ#Ug">Jٱ:QQ?eOVݜLYėQ9@y@h& :+m5Ŗ!e(ɴ~HAuy) |9hP?]DbpC[|T 1E1<$}4WYr!6@d݉;]xsX ʲ=zHe;Wl>)te 1HX(=Q)•!NA7YahCQ45R Soΰ*$es9<4׮H@w]ܕ0/rN*V7/OR xd]{S_MBI+C`C#\x^ũE]K跷;u,'{QN13bL:`ņŢT5Z&$T%'5\{^"X.*ra}:REG֕LU龜B fWsTN?nЅ"s;Dܪ!L3?A.Rzg=83#GVPѣY#5=meixp|;^7HCNuhrT:NE~/PvcNw$릣J#<;6SlBCt.R 㴎>biTaTx6O&8V`A\\ԓu&EC&rDA~PS|kSUY&\15o{[[X#80sZGOBָ$TѵuM"׵|=Q6Zjc_17cms,6h5$oeWQ\6\uF=W>)H$̺k攎Uy"G(fu-JqIsɵʃNjD'Ey]T,<qGJп1-+b4s&KBU]f2^C3)j O :8UyMJuٚN8ngʜ[ H5ԏ9M)-N`=2?1/GE"z'Wjt@Bޗ9㒚Zz~IhUK-]оX6ǯϴyy5w΢ک75ȭU HE=>ti %Np/0Xzas}Ax9YGJJ4-t-9DGUnα$[Ǵe/e=iOJ_]H8yUGTnsQCءbN$ ۧ}S9W6^4K2XAziffêCT_pC#<F!?pC11T& Dy 9;1+Y1GOVxQttU=Vqq计˨.rkz24_klvb i*v +FkBz+{5MuB5ZV ,ˇ-H/W<*oE]oLlGb9Qp;:U@[*4T R]]tm V؍ ?{܎s^pN 9E E_.@РX jɥd8/VK+%)uy !q(Eg~Z;d򪰔2|n0aۖJᔁ.;$䰞Jfҭ! On ZPHr6b7vkO[@"YǨ\V=I}eTsV@-%?%8qJ\nWagjkbp>zdzv"IPZڶye޼H'34GV@WJ{ڹUJ:ZWP._{Ht~*S#BgjkET⫝}.B{NyI[O,e"hb]zAzΛxd{U{K7eh$۬hX,r?ဉtKj9  n0 ?<6- $)4b3b~`RA/ZIzKyؠV *j_6L!VD[&\5Q嫦qOɏA!+˃ V'7x:Z*sOڅЕsc0.J0;jA0]^7/_߳ps&bSl5%9T+E065Z P9o zNUE52먵swW=#3 |‹%^vYH2pTu`U>=5^`kKWV.ctWiDDݦ{so.f`C[x-o8 WwG# e)`pD9NWP`#jw!+rµC1KqzCj8PR} objcm3ϥ) vb ^nZR< Uv{37Ze_=%-cQ#RQncC >jR̬`Nn(s>d1sPՃBŪ3Oq ӶXa$7w`idqXO( gm_zM<Y$;l["'fһ*:n2:TQakiG+-oռO2P;г䭨w&}] 3e1+O}:Tp]F %۟ ;^@DifoU5%ܼȋ /,Lп8)٩Ѐ ?::Q]]1c~:\,SV;<9-/b<'QaW>2eA J8J ¿zܜ[ʈ&To۹ "<9 }N󝳵$\l f5&SbSJto5r=v"녣p_MNȏUL͚_H+#6R✯R<%Uhi]q̼iYrB "KyiմPľ!QpGpm)m{**HS|}8p ;[l;>dW1^:* K A8+o+ 4Rꟺ_՗-'_䴯a' Km7/ M|n rKvme(4=w~}b Jr.k:h(D?-sѽs1g*!λXb"δjEv7_MrU>%U>O-g՛"E(F}{<0{n)(C;.p5Ჸi㡿N*2ii& xoQdAJ;'IVNY. TA<$8|Hns6BF)ǠHJ"MK˘q(d[\lMwrrI @uQצGBQv(=^fP'yu\T \:^q>,bȔẠ#5W% Sfe` T|V@IxYE'26yMv]]˞R$.4Ci9nU8o@!Բ\ܾ*R+w_ל]22N6fVjv)5PZK_X0 t Be6SiMMtGQ $Ӥ϶#9C8h*ν͚ &]9uUȚ@{KG/( Łw!^z'ZNUWIG !F9 u p$CPT,[G:`zKoXx_r6 Rz#֯WD'WTw efg~;u~ $U1B2pN\ a\v:'}+m De3%D&gH#Y+HMT=kxM:*p($6=Y3N}#f Rr{ڟ9yK0wʍ`\ #vaESoG0y)礮)r]g)Ω4[ݤkݗ$3g8EXIJ8UZT>N:@ȋ/R;@߻2^@֩b7IrrY&ꔜ?*+s{5mZ]5oMR#֪;ћDZJxd^2#Oz%Q[# [2{i&^Uu\!A D<:9 tN ,s##yO<mY9ɼ:S3\{YJ9LID">  ]W-\ @n8gMI,8ÀOBHh_8qmPSw7d@\km YDg7W W]Cyn"37z$ϡɜ_̩TY: x>J]èdNQ#26XIv@-97g{S}nǪ)e564%<#+wS(`+6" AK'v۪Inj1vio0WX򠭚R_ByZpݟhǐZ(@L@bﯣC#9)9aerDզgPtE:{7)[H`}*d`ruYLuhJd]:+Y\b \޵y7GQ r;1u`!V@:SؔQNenU5JTT9n}B|X0.\+1w :$Q"PK'@{hQU߿JqPjDGoJ&o?,gGRD}yگ~J*=T &4G0Q^.amפ/⛎mFU] UUQ.׈5`v6 ԕI=]W^GuVşl6U53  ݹg?҈$YBG/pL<`'4a}I\z\\!6y8c*PH|nƞݭVb-XamJ?k&xor{49jzon*5֔bZ(JhPKb8(C5-u/z $zZ񻫋Ym:@i`?k^о/)5$ bRи(c|)tf[#1܍j*}k@B(<2.ͫ(Ygxж "jb:ـՔ}EXݲuI*<y+@F$HV|mcA|+GdMC7g\1Q鱇} NLEljMk[4":>TkxuUr_Md-(Tv3z/ۼݯ&+C8^dP$SG^~Ug,&k\n`%-VՎp u:*]8=ZS=3BrO4@#jN=Xݻ5d:-MJcWAu/(Ф ,z~?+{0㗦;}3q"!sI XIgrHeo캂6Īl2Jq]wPl!䲓 -4ecn7 :^v0U^ Re+NU(ޕ{Z/l]ٗՁH *O" ׿÷Y"?;=俼W y|n_X|4r $.ڏyKYN - +j&sUvIy{khl?}F*2~dBp_^"( rȩyXB[Ƴ B)г]J kj[tXڞ落j#P٩/C:w/!5bFxC&= |hƐRKaIm(ٜKq @mIԲlcn;rP my:YR.Vrj똸6xLSʨqJ\ M ky0{)whkHnU[db'0+!rRiI OY[Cx@JXKQD"7_@W` /FV0:EΧ$ΆloQû=Bxru=hR*aBԭ$"Ħ̡Sw2{Fc$#ZCPIx7>(6,4>~(o\TM s]킛:>2ӒPqSQE\P| oT&"셦Χ % [<#٬ lr]v`@sUzO+pyz+-24T ϐN;G^f5"_]x6k4$r22PډyFB7#Qx3k:ߵhX%:Z_v>[ /.xx-4UX{(ᦋws(Op5V!.J_|n?GƬ&B>Ru8Byw`BP9͉rerN@]ѭ(NP.1]ѢkWǫ/{,dnjNf\t 9ڭ.rI΁ 9L} &!_{9vs烻jqWU ВѾU[WHR Go"c c,R4T,Oͨ=C_$e K Hw|3mEo}j_1/oF~v /"gM?kZi H%>) N9Otli H> 2 x?]da1Hjޫ䙊Җ39C2R0a4FKa"ԓ-2\Q6clT]9䗏h2BMr:Lj}Uxf}<_Գ sqIzR/ v6!INI= dnsiTl{%[.E' J}U"TA"$j5W%4FIV:Y_a<-0+ɣ`j 8fs. M}GYݰp+0S,Oա}hv=P٧xFQ7NqRן3tx Uge{.'`@gنEUbJ:J_:J[Q:$ R+ڡ柚v5 q͟>eJĂry%9HBvJP z-׭ 2WέP3rzlT٥u>iz5pzFY\F(`=}eJXÂUOb? Z e `)NUoe[쐮 D䴫;_G~NLNhb*AptY`TUC 7hA-\iܹxS_JP`Z@wW pJTPG#kj\p:Q:- =?]j-ۨ[_gfsH#5Ijj*|'OY ^JX(Jz U@۠Vw܌yDj&ux.MN" רƅS}*w)L]ݨ~nœ*)oj|))]6$r藰SwO&xko ǩ֊ҭ3jQ=?x|Q&~-L畒{ktYկi+vܔ1)n.V(:8m92]cŐM,Ԍ NZ 2+36ci @ "R\ǩB6t7!~Vj[<,gH} ɦ@-x?t}xUG1xЄ,PQ9YZC\v*P7[ *Y3&r8AuX;|>*qR uyF9-a@Ũu A|-y#_m25Ry,v94k򑖰>:5*XV1%(W4JRa?|~U0gU("&\v+ױ$=~]%o>,)>\4]R %G&/ՒxF.ۯv pʉ'g{>mC$8=+Sɶu~=٧U"<<ڞ ۣe9$[?܎;@%mM3'Q 4d˲A"/`I؎XG 9}ku?#2߿8΁HDiP4ZO.N*^w] hXL&>!՜c(_Qy&H ̧{:[e^m%„ F 97r*9@}TqAxNJRO9+㽭 izȐ gP>S{~ҭek)Q6zrB.T|2l:LdSuCI22ΕBy*f-u+Gpޏ[/'}*.>~[u}dM xD<<[9\nFwpth.^b&0=s|'t[(iM|/ϾlH|5I?zu$ >a;5IswEb6tÇFIW9JQ0zISe7oQp taN[Օj4@e_V+2`k x_\4)d Rh87l.)r:T~iKmiҜ^|CEW6-|r̓2}8֟ˑEw4UHջ('gb7;]DǖR½תU(~PRX&٢yn8$bUXqRGv"W}-dxERG}|BWLTʅMS\uӣԒV%T$)Jɼ9]\'&Z)4Jx $0D k#R1&!+ Tr截5IJ䬀5E6IR`U٫o_Rj$=CM=OC5@6'iQ% aUJ֢KǣOeB8$)q0Pc[{MRfK>{=Q&%/ppĸeNpզ@6R(pϛQbBд p|Y\ڎ7w, uܹ,DJ\t$ez 2ZR JןrlQ.~Iۦ^O%j]uE$q"MmIZ- Pw?bZ~tKj[e8,i 6ل4幓AȘ^cn 9ɊQA'Z-首@l?OiP|~}J0"ՔÄFE O]CK;,&㔘HTtWRrQ%4ɇ=_u PԤe%/'UnE)xs*2OսSSTy5 ]_0Wmp[M EҨm[TTy΢T0EvtH[\S[pEe}t)=w_8C/b%7E QϦi ~jmwޜe6$i_BBZBSt_uiX;ʎ3]]"~Н4Y3)jDtۤՆ`8'⇭_^}M?ig5|pU͏IF ok۶NZY4tPvw@١̭Ʒi~5lK;Tu~)@ǡ# u7_>ۘEH s|܊#Xkn}& Af:+shʎML)\|MX yJx|,u?*-;jץ aA󛤃>YiN g.4@ܜ.nP#㑧&k]7KUtK*T) N-jkDSi:G+Zeǯ?/GeʏSzA;-miq X)Ϣ֝TrnzcR B1SkQ&g0T0Ea<40BazU3n~ېH$==r̉|:W UIyŝRJbyK/W4m KS0WsCj&Qa/ iׯ/U?"fܡdi42Ixmrۊ볏n&qDCg8U{*3DM|[^, ۮ["04zn.J) *b;61+VTKނyŝ3w[%po1}Sæ0)" P"]FdrV4L]ʸ 4qsH\(*rH8 L7Y[ef'=S`Xp8c - \jB6.[3<[Ћ3Ǭ Ų%&g-¡xΪ}TAD&1!$V .\Md=6T NEL>T1k`Eש} ^KS4dryPz=SiZdʼtBO}oxכQCB08a"8cTQG{KL!5Vז#\.h%>6_Z䰛CjE5ԑ%D`V~+Mg"#G( V uQp׿իdrLSy3TDn~)y4L:0eJ!rxOW5ڛPl Ia+oe9xJp3GHbdtӷ}G$8_k կ S?ڲz N{(1eB_||Ϳ?7oߍo?|7?9'_a{؆7nFl`=ehM63 GC jL ՑdTᐋJyL 6~|dC/袂Sm2YHׄ_1oTڧPUIZ*isI"<ަ'1x?×/×_~e|_>׿o~Ļ ~o/˯$/ʤoҹtz9R.VU lJRNxK͢{u6<^ZR[IjN)j&5"%;^1ɻia|TzTڭ+Ñ q^ZUx<}r*PVrV}->Kc_~_w_;o_zo~?}o;9;}Q*] 2ojk6N}GʦBN.B5P%t`8V&Z*9ܺ-k5~J~·!ǗZ&:+Q^TW,f*.չuujy! ng6;xUm Ÿby͗{^qx?''r<繩x0YJJpTKEf V v2g8.M)gK*vK5Fwg[i%sœ,SZ*3 b?\|UXPiFr2uC*vg$լ5;?}.xϿS)w~ۿ>8/dr>aSF5Y`hCAirЯL8"2ZewuB}TB8R𱈽4y,EcMU#iԖ(ں>$'>5 _tiVS%>_o|?~'O>u7o÷~QT8V: hru\uT}(I+b9ʳe(I$m u}j'Dz&4pIΝ[ns ̝$okEq9z.mpQN2SNŔJd#,VcY|ĪthM?~o'/UǯieJ@+=k 4s :P `URX5?O#e*OR{-NʥmnS#c:wT WA1E"uU.)ajʷ)-O2UwLoVi\ZaQ/O/+ gW/[[*z W~~u;=G¾Y6ezml@;V&ZʓyeЏWS"^ Tn8Q.PSt;$躊p>/"Mqwy3Ko됆RoWyυG/352EN<{poK?~U~ʪWĻq7+ɮ4neTRIP5 hB3`sldP )wFPgNFE=dž2{-֎L9=]\\$p0؟`hʑ6ȶ a؄,!EY zK󘊭V -)%&ۍ(6:4Y$o*;H4δOZA =@O+q٪]uTav:YjED T]XKx G7%8yv!bg4hjX w˩ Z^5!1Hh`qiEҽ.yD䞯,}u8$+}))<{kӡcJ^A҇syOrG}8#97/qVhnzM:: M .A@*\a<h,L+ d "#R[9f6W>W\u'rݲc8ȭ2Jјqѽ5X>ԶZ=X)˦P;r{ Vmc}ͥ~z3xྜྷJ GZDLK&ZJQS=Q{g1\~P5$N'MSjk2u}U\\d4.2Ny^  NgE{ &ڀ$r{7 $Q%[nZzj_\o}hʪTGGCD$b )|ʽ}Z$tBA) 㚠2QIwzʑxzbE. 1sue"0'mPHFgք_3 %FO(C:])N,Щ\ mdiF!ߟh~SGur ӨݳZcC8F;p)Q-Oe+ cfg ?!C yj E A?+ Rim\SB&]oX;mdo`}gAձ-T)0}tJH I8zzp3ݟr`xov=sҴVW) ~Zvy F0([D.8c#d*^LOAqqi%*H휊wE02 %! DžfQL@HN;>iT6XQ2MPXkauzģ^\u|[ FjJ 9<_7DTH$H>%(J Mi *0;A@)%P/cpRLNccidMuNa5ȝ8PJhCURWFJn%KЖVe2dwjF?ǏC={ӫ'=!1 чP45-8~QX:ߎ-bqQH0P3(eIHUF~UD=t#g N :] `ƂNvS.Mlq`S63=io ]/}|̏{[[л7L㈏QLp2G_AYnoQʤ!%"W)8k2JFZY32qxh`ZExji$ȳyqqo_A`/չuocQE *$ir?~^?ޘG-+`D6=.:SN*y;u0{i{Q2Lt(,jic8i=5t\Ckv`&/s}#O&V32[I/n*H!^m`pR=[md]+9*뗲zӻnAGE2:m+.PޤnA șKBcN˂ FHFKfEa%sF5%\H|eD9'!MG -=TRuS"+Ύ]b fͣqG2˷&(s'??ϟ}x޾{[s౼DڦqyY!7ڜyOiY!a&̊%`WDbu[b ܴUR!F^]WȎv,ro\㜍:xGRC ;lm[rYCe8^\A#` t4+&]C]k߬|~j*+K-Tv*%Y((XgrL 2!8NU1X$h\ӈ\whChcbe**.!jd:1=fqAk]DK )}5X3LzZ#2}ԃGp>0NB~:|s0tX?갪2F>Le4e/E e)QzQJ2,E7׆Q޿+gDQ.71R3,c Vb͙qDŽRY5kb8kk+iE1|Smc$@*ikOǏMaG!OG;_on|^BqE40!}*<ѱ]0q a\ǰtAp"Xx8eFEW T8WTkqR(׽Q22Fx𢈬ع vS8W )? L,&q}u baa@}(kU$tQ7µOm{[딦/|<֟TZU9(&J_i;y*xV )ke5&O&}E #!r!āZȣ 3;&0Z֐+Lδ&VÂП QwQtlA N~>WgJA?Zd/7{L=NkVy 7#BcRnRkD*LRtRF\C)ߢo,RC߄]Z8+=%7 ha_s_-G:P}{޿m7;NVO5=1MK_y( ,%z~EQvI@xii8ԍVFͲ`g;lUt9ЬR^ ǭhK@@bdla mq-35osM,viނ*}*{փÂnsXP2U6wOAwq_(M~;5j+sV&c VN6a~/#$ 'VB8 iaj'lg[N:~%J(Wrϊ2 JhueЛq|k; FagZLU\DK&.FP,Hoin:gxJv]7qcعMi7 _hg0cb!`s4Q S0µL]d樹t+JPd0RZJmӞIC[@sv7[0q+4;)d}E ?|t"ѣv-aAFTdX-u Xȕɉ:>eqբ*MishYCj( ?LR<-~!:LUPFv;r F}P$b"̷*9oEftAo56e\mT\1S8lHiD 4Z?6l^\H[Ha ({8N{pI n!G~JXF!4M/?tq6 mTA|b~q]?!~5z66KiD?'9JK{UwỢ^}Rh}qAGpw>mQ zOF•S4xeG(d\ðوGlȚOU٫g]SLQo1@)D>X1ŜxdNxp4`8iX;u%E~Q+=ntv _90FC&ʠUWKZ`JAD!$bMc84ZwiMAMѭl'\T"`7'S4id{-k?Gs4kYQ${4"%KMH؜{Rl â&X U9-{d.Z.?G[s豻$CDԴ9P~r>Bo۝TnEՔ0]0 ݳnK!)09z0 +yt_uLԮ&C HX { 8 K#8?]Sc拏v+0BJɎMv"2kkc7ӿiOOVGL'Xp(`v|ؘh rؑCs,BBB2NQOx$ 87HGG#;W QPhqx.|pyA_xXPpnIRKL9̧C3W B!W[4X)qDȯ?=}6׃[2j_^ٗL"9jD!>3[]R`ZZ4$c8ᑁ\үɘ]P4^bW0.U u~ݣxƬ[FkN\R p>Yiֆv{: |> ҨR[0h)+1냕"=)p(>g˼4xa9<^$Ohj6k"]Inҥhqi-(&\.VSA]` D$B.:͇IdϝAX/ڕ'Zմ=g?}ue@J|CF7P֣G!KԝG׽Pr(\P/a "g^<,\@ǂPH%SF*VIшba5Lb:=_U Nte\XgIMSے(6uT6z܁Xx8tM v@R(8v( L-ƌ5v`XTŠkvImDZW@%^5 ykFh(R"(ЎM *4iJ0s6 i 4 mE1o_Y&xbDkZ  nn{Cx oȘ] )HqLo(L4,W,lv\E"W@T e:|*ki_,a EC$VW]"ACp7:*J4%}*P}59-AH0yޥKRffjzqxBۜ <1-bX>mV'Vwo?%}u7= qs&%%#uT }id2͵ N;~JRD1Pۜ|"r0l5Y,k/"¥ 4GYlh-_oVa*ZI/U~7^{t fkRJױݵcgHڣGg~*WT+hgE=+B$.S/v ;ّ_(T}!U/<Y2֥f C ]84]ʚ}cE1~^,ZhGFxX߯Ƒ<#lY?S?}zMh=p'Ћ*'*n" J QbnG&@PYΑ^ɥM9 !TFMR ?.vbU+ G (Rn8VJTnNCf!>`ѽ2' -}ChJh~7衻ZRр7 8bqQ+[fBVrvæUPHm5-n5vg(=N{)D%E7/#/="[.܌66dꛙ致+is(d2jϣn-9OfSvKkC oo%<4:i#8ӚtO;.v8ՠĕ=' @Dф[RȄR#=$6 Gӈ=v#fzm+ԡQ#M 4zU_93OznΥq?ځl1ؕND<1]K^E ;_ǎa>G"F%Vz5p]^L AiX@.H){ \Gqa@xie.ފz\Ck*\U$-ƸAX) p Օ5vk1fJGo4D|>ÑY_*1h2e`dyuK{Zo|ִ7]ңGu-jGP͹kE&3#nj"NƕڄvQ86[.mFt.H-|z3,h52 V[G,[Ai1|.kL[S T  [ ~8O/\hNc F7ϟDmn =MO7VIp@i|M? Q Ku2vb'[ Q RZ30\a|j*ƹ(MY/Gv{ѳ9-qKSZ(A tp&?ni;+$@)L]K7EdoqMA~/l~уmYAre6&Q'oCX^yǎY#`7$bNՓu q <Pbʸ栨J,qb]6}>z^,/mJ ݯ \փ֘haѣ`9R:JA/c **ҹ'F[G9]_YP2Z M괺QSdVi3uTPw+tk?eX% ڝӆڐ0'cCKWZIQg^8c}e~Z_x-Z o4ґhDcJ xs89"5ӉyFD+(J]bŏUd>bmME}[NEє2.F̎q8l'lXєTiLDfiro]+"ƨG&+F"h9uޝGR] k;-.Ip4Z*g |mRp# 2*|t]%x&e} d1lhyH:h8"9$@rE]B.$DTa\8 6$]%iJDI7=^s.E}o=~3fOV5ۉVҏMefŊ~u\~2zU{lyAB1.;dMƥ_>">xAtDž%V5dqO+ʙaDdPPP3mM'\FnQ$k|Y{;rfc2-Y^ҩ;\>#wUb>K/JXr^xcz~q3# %>*+o<DO4XHlY_`#OsLbHLXbjN:#r4se/A4J&&Z>ilT I4 A d6BZ}{ND1߂l+ e/e^|zZ?ͱ7<׭i6B.DcmL8 Ls;Fv'Ӑz~`Rhtw; 8+&5UalRˮL/jbv  G訍#bSgVN (,̦N^hQQ.*ix|}+,"F~uιn= ZTd2 >}R eꏛ"Vlh;ƆCA֭ cGq{iYȄ%RJT FXXk΅PHfĻ;}z}МRs^T%`9(zMmO7/=l1lb)j75QQKǁd),4sJ86)%hH("9cMe7+*qͬJG0ZVDJܱZ%+5zߴfל *z DB"^I_n E-B@ ; a0qDbV{Oweh&WkO(jŒPC3 WS%1 tg#a(\W*ZQŹ tJ[M>zN{E&Wm=h(*)q $ &<턊ؕWHV= -Ź;9C7VmzmXFb z:В O_K Z0l2AбN' .TY[=aIZOwBo劋NGF56o4nPa=-BxIvz'hET&L-u'Z7w7K,+BGg^^A~& RX`:hMڣR) 06rZKAN_ZvT=b@SJYY⼞iys`ho(dNYaJ DMc)uzЀZ[ΥqILh PԒIu-Ho tC]Qt';A>tAX! =. ]U?( Li#M?=eGECqЛ)f .w1+nn=z*q Fw/Gn}lozwŪmu)G=32xB8]-Fk\7yG՜q~2 KSמ 88L%h"s ;>Pì# Mט-^)a:}Et;UܧhF{%y&lzݛT( 'e%Jq z֔jl9[ݦ e N)XG| z^# d<~b\;zUp}(#d8HBp؀/]"[FSq5!]oD&w A;EAf#w<9*[O9_ Q5F]rݥ.(5;1(2NA‰WG^;jqeI:: 'Pwl> Y-~~8*,ڢb 8IʗMt+98Ę,H uagw=:갯ggF72{F8 AO/6GT'N Y'D5!#l# bbK0<}NC1.A56l^rn&T:7{fa[ ѧ.Z֓PNwUC.Y MA;RD|[h1M~A JZG0]Cݏn55>z^# J!i%k9m_t)s+8R ZhBݧ([:k4BͤQR(G*R]9ӤhF֠?X@ieح -i&DH[kaO5)ksn & ,a-R = ORu~7;zgʯx(WVO:wϸuR ^Rֵ 63B1kX@=z o.6Gyw9>N/X2]$]8=&vhr8&]Xʅ%zhHsx3hB+ %I:ƖN6ϨLS{t<ן>}P"qQ\XeQaUZTu#1r*YZH~`h'Z@N%F·W!d+p #:2Nd;F _lFqXxChMXyZs1DߘuK5ncz5$wGӓu *=z2n㴨EnKunOpDJS B+|jATD3i+ V%~ eCkEz8bDR]<Ӗ􊍃n#H@9,^ › QO)4vZMXB͆jI "">/$FJId^*G-_^x(ΧycSh;:~8.D V*hFx ڏyZ b5^/%BœaS=h:7J- xSl01Ń ˕fА۶l|EwGB1%OT U{5U8ϋ9q{VCUU7:]Z¿sVFFT6k^C)^ɢ}NYy "dPaAړ'Ɓ!氾[1+I&1'8­BO᎕ܴ 0ra=cK(5,]E1pEemdoO?5ۃޤjsظZre!S;&}'7p2wR>"ĝ]yvžf1m8He-u=Sn H\z>In  e(աOAXXA٫#Po7m"Gk4ošXՎMֶ]VʁVkoOoQ>ܼ@}ݮ"") Qđ'昑Dtܘ5j5L.Z"R&!iT" ךVMPIZ`5 l:58]IXU]4s!E4h(E3V."Ts| L;tgBf'`YsΫ9%4g%Z"/dW6\8 8c4pL4nNzEO~HuGn:WemvL;hȱ2?ې_!n~c޴*N ԶѸKx uQ@| E X0P4#p{y 9X^"E ,y TI$av"*/V܅&G˵*(–B =p>aG4E3EkpEg7K"Sq n$SvVكnziXJHnb\#s 7¬o %|J)Ijؑ`{xS8s$\`8 Pj+hސ89d L E֘*Lۊ,PEKc4@N(4*{DmpQm [M.{:`޴V޴<bUVt,2i6aqP:Z0,((ܹ>^T~"Vji(+ &yݭt4QE>,408XD5R=P {"z610-eZ"b!fj!/7nnJ>=P`.yp7-)!Gbִa)uU0B<ۊRv˘|0Np.7ĤcEoh}rEC{0O xx' )PT*N@bԨ _/?Rgޝ\szu0KSZH¡IМ2|B+_薠f[4N,fX84ss=>= hҧ.qrzE|Jтh{Eq%KsUaޅ`]Y%Tl7t u;ywm^%^s=7><~ݫݔ远+ tk)i'.?h#.rq +5!Ȯ覍4XbjaYf)GH-VX)RnJTH`JU#"շ'H"hNʶ(.W}Jk<.~pUԇ5%?[ޓf|' A}-֟z>DL{S]$*L`NRJuk,8t,1î16:(Rt M3.>GHj?-ELZimLj ;rQTfb4$r@@aDnB)y$v!rmB쪂ׯs/6j8~BjRڅVQ'+ؤ~; '%OeRq(QhtLGWϗ8nĢ .N,:8^HSɂ|X#)`Z&x)j=buKIʘ&Ӹ;LH>bl*dJPJA~Ÿ8]v\'zSϏi}bΈ'#/Q^ӺBcї%R"HIYo 5~*Tu[dzV-G )Y쉋4ZM!c Y/Půq0~fFڵ4nuWĖ&.%`KC+l oZZIe};qݶ!sqXcWVHP+LU-+h =/$QU+B*W_/m9Gm ֋Ba+՚dmbYWXY+ L_AxMpvA "dmc8XN@xŠ*,EHqBQ,^jo,p3wT0,EWCf9Z0R9ꈓ{b(dBbϵɥ+GrD#6D ;h Ì~h~\jxhokS FQR6QQ<`6Z|;+ 6jqxae,R P T4ƣwZQ.xwe_E3Fy^bk{˰8̹5q,?΍GnUbB*LcpB* ڕtuG:KZ sEGIעar#PED U!j5>}Ee=n|ibbOAk4o/kOjS\~L{ynĕȥcQ!.+c%c9-y-\;jo}sh H~U־}`qK#(Q ]V;6⨾E̦`AB bmzaka}Bz (N dO(֔ݥ`{(C۾TRU|T~_& hWmEmzCTmnqxSwWE |/EҤ㜤sDZ̫MQ%xq<1U.<&n+%pV mBS1fk7ߓ|ᣇ/wY_*JbDff6^9ָP\Zx(ѩtP(Y P ˡC-X>k]ve{L5郩Mxs5FhV AH[,"ZƯ JL"l9ȪdI(ô#)zkGբ#gf+y^%ZX=镯c<.>Y 5toM {fpbH)#BO1RX4!qW" k;D;B2H6oz7MI"r \r41SX5ީ+Ҩ(cC}&s eXG:։M#jWa!ɁJ9o=rS,\H Ӑ~r`h+!^&yݟш;|+[K(d9RpK Ezby)Sf)osJ6*B͖AnA DIAuj_޵/zy,HM |lL=w~kϥԴ1QW vhE:^#HOfЩ mdφdGυ͛w;rwlo*5cfH^(]y>/jQ@BqͽC~gB[m| Jh{)oƍ|kNCcd6p;9DD:j'KRDN 9{:f>zNT_IԈ젝h4h't[}~3>zupx* _UFƋ9!"`!:Rte+A3&B :EsmAxD& м@D`𹗗%TҴec9°ՠ6n{०H|oPQTGG˴-:es{gZwu{Mo_xWC}P>JQ!D7*Hh\'sQMW3CXX:;)rtY^; )?xd<+%DN&\ԌM ] ]PWdrd'" 5%:u]LX#G?:Q2l^ro[w oz 8AwA\|!f~k%ےE_44P]P*@Bah!`1jM%8a`a|ujTdfi!7ZlCm^ fkp6BI+ d샄dHN1=^f3(!7gR<~nԞ}(T~ٯf6=+9N;V#*=.AGFT{=^3>oNH#*L&k{`Rv`o ލ\&Q>0~@fa*bkb!jWD̑3sq-Ӯq ~C/ UG;U4_ Eam'dif7!mBri 8⚉u ('4/yC+Wf1{S8Yv^!Qki6S"CTþ$RQ_TF`V-06rZ?;SK)bӤC0MV A[L%eH_)b`U&)[iܣkH( Zwo޷lv냇KVQ[4(Ћ |fimՙSȭaDXaBEɼ|[`btq_+*t-0'>]s.ԩ'fcWT42t7G="f&91+ԀCյ/=)h4!f o?rz};}9^Qɽ@&Mi!hs0獡y8(u Ae\z5 !:)z ULXz7rkjy]"g7) }:Fǔq1FFO-=r1uwo.{'/)w9tvqڥ^݌=~ G4n ҘhoI.k` f\ \" .rʦ ŢPh~sbm{)戛)As/cEHwzC_L\]X ! .Zu ʍcra9ɛ`#V̙BQgﲦq^ y}G_:&#TB;-:@~ZrwCc/6*ZU^(_.z-^GR_3%%wYt* ::=3 7؉ d"u-ljn: (FG?%p;Ɲsה ("Q<pW(?wwnGujP7.`_9PŤ ;lк`;~>B*s1W$ExhRjC"'fŅLnIaӽѶ|ZU-iɆ.+.=Q׊T}SMA8z]1ۄ*ʬF;A 52!/cs݇w1zx2`AC(ŷ>PА4N;ַB4$!mQ12Ҋ C}t( /rOzyBmfNR\MaKCL^0 X,jg_VՋ;4\lŭ5ˠ97&';m琧G-Lj#j*geA*͏כuW`+Pwxx9'xr| g!h=Xps2W(ZjX~Ưq{E΃t\׺Ү߮x322644Um(1(K.6Liўh^OV𴣟=j%z`(b0Ƶq.]m}^ujLh Up%juQj3l-*k>Yݛ&*bv֕RŲTܤPP9^H..^~H6UaM&b޴8w.\9`%ZE0}3IZ!$0zO۟G&quo9~o^ڨQԵ)(T(RĴ|TUUtd\#!ĩz9яwf yLLڤ%ro ޯIPE&[}(M;SbSU^[85XCʷ\r3I﫥*BVTEQq, 0ӏ4ɧiq"#z%g{}Aõ\kfA[*b*wsfFqje/r-MslfF7 ]պ^0^nS.m)ܨSei~ 0 zʮ+M,K]]h7Vo 4ĺ_~Mc]S!3D)B )soiJ'q2k9N~`afOT (> ^1fhg][BmzxX*[XoikD?"Qk -\)Kc#!*.Ņ[i]h}X~;#PᢜFISJrSgח\)yeՈCxtĠ ?Qi`$h(>b/bu}i1|S;`K aP1NKM;_Yne[K`ûjBuRx'rŴ?>5.. VTE؋SkLq@WpR5a$Պ+(`ʹO {h9H4ȆbQ³['A|cEև?M|ݶ5WG}b*# mô1=>)[c2sYL=S8vx't85 y* Ԑ|@'-3Z)V4Vdr rm錂*>BBy;rr0 w*g[5ߗPr^=]dz,".;kQ+a}xQ0&ü?_|K0:+Oh]+L%T_ utZJOhz[ǪsjUA{AS;cWH1ho"C:ӚYVTWtŃ6ӎ(?n\EY/X*cs:'dQ+kq(ZTW,%z1E/WM]S0tϔ~r:VVMl-q6 tfG {C[ժc95;EN횵VMh)TmShJ|IVGH k㺄t#k#ۧw?xn9#(UOqʱm1( i`wxl asL6KհQZF4(p<J#5b3/Zc݈ :QEP3AZQ"7qxejBĊ~G;1F~5ORq87H)@np)vzOO?~h߭to>zn+*7-T妌 %0oڊW1(tX)ЅpfkoʽEmpM  bz#qTm/&\Q7/+{[L ބ) X%PsäQ?_@M|I4g_]Gm+kU~&h)sD|#sL 1QK0! 䅒@>ԭp|Qji2ʋ [ 0>vRӸ$9O墧M@rrYoK>:mMsZ#جO5X(<,g/pIuVϬ~|ڽs_œCaQpv5P ,ts\4.t -))grb7)]DķgZ9R n6R& mVPi8 mi]8R\;nl8“E)uΩґ|E w-~-Júc-Nz{J[A.Ť t-Xe"Y؀4>n7U54=v0HK LK'GUctMbV/dM.k+~-rQWqihw`ׁ좐GY_] -rmյoD:}i{Mj/ "]a"\Lh*iZ5R)A_ġ n޲Tט<RM<־e.5 nW|_-dc(yq"#f*V]VsBpk}#Νl^O1R9 8ΈUv_{Sу}-jr.JuFL tb@Ľw-0ǰ։ 4b(>7XM-:h#B8 mׯ6\UOcIu=zۭQO4&gn}bmӘx%v;#7[[⎮@4Н&^p5" rң[k٬yRxqQziAVЄl<-F&9cmc8zDW&,X߸߯%ݽH1|XXatTN) 55gwz30yspKq}B"p8q63@~jgj_)oA%Ip-+μJĽ@.E>(LcK_Be.Sx[\#,ܜ5Vx δ痟ڽA:/m>Duy̲! .ID$; З)*x͕ȂC)z #6[Sњl(~~cG. *5B6<&hz5c48+If6A9 EoiiLkD{=|mqa"Qq3B()_Ϯ|:g<GrcM7R;<ԋ!)=:vVӹœϮ*ι%$*,erq.kJg{уVZqEB}*( bv0]1p`s b4i5=m^!JeZwx%LQ5-m]աyO)ӘkѢMI!b[ls [+XhiO uW DNS ґ}&^)_5gwu4=h?oP4\vݭ(:VL+YfQ{EX5bܷ_UJ5eٔ ZRiV,;`al } ^/4]Jzw] ޔT<]|`X2;ގ i[1@5xyPj?A1 fn?Y~8Lgs*{OYާHm+Ghvw]I&wL[ںXuC'E==4 )6BP!4[E hYS!m-z S&{5;PؑUM޷wTH#P)Z@,6w*q N>m ި3Ҷtl8l}3F:''-uf䧘lΒk.8cMQI띡]p(2zhF*x}n5~HHmsʛKFӠm=BIFUNzyG9FNkU6XF#:Aː|7Zw6` Er·"7܆8Q_7zҳ-lT~OckS*v(lj4̱7bp )&|EjT5\5{JG5a%!$⪞xP=.El76(# ^*8>_CyCf!o c!\.hcVʸ iz c~ +Vv.J >ц6E8Ԭ-%HP4eYA5 Ͼ(J.f>+nq'5b&'me0*㪉r ᶋ}Ʒ[ ➦δ(w{ga!n\j˽GF[=)2n-w}[Ȏ(o8At\LZ<;/^>/*8tѸcX ~1hN`\{=r Mnofѐ&9R㤯O&2QZBJJP(Tll$_Hךk{ӻ]G-y~ۤ(5VOXj@ ܴU9\++wl: &*#6|4Dj4[BD\RT6QIѰ^]5<يtw3[KyJx79@Fd m <ո*Zg5! snH҇滟}eG[FZz_l |2F,G#7A ʄO.A;-sV' cOGHM+ QSypE< zz~:=zj1wji[@X1i/sf,2p#-kS ޹K*ǦxηNa(絺b<f]Qǎ9sjHk-s Zt+"( 7!̈AB#B>,w+;#Byah/qUKёa,U-f#MI5ĩ96Ҡpͪ,J/DM1>zFoLqS;X%SJX#z+&ZOO^>xn Z(sQPDE1SR^0s`LG z)xg0 kT>z mQF w4J虸.(\W(k%*LzOQm%z@Y;>Um4 r&^#BG4YX"tє+FіQEmmG*ŊU=~ePKOՆNA˩ŦSד4F)֝MzZnKҴ-eEQ~="mF"x~DcT<Ņ5Q݇>ĕjYu[k ^HPuKZsz972|H+HQF@!$,Q1[<]{q+%裥/ 0HC05O)Ej~-;Hk󇿾葻娯0 z/J":FVq a4T"ҫz-Τp)^U%Sܳ.$D R'kevrh}LG rn,EWӄHA/uV7cArI*}k:ufEFgFT=RgxERd0<֨(.j"mv[% QV,Wv4sAzГ{UnlMzUsg}iD)8E—-Ţ<$9i|!Ƽ`{k^p+9뽄+,b".g1 @p?&5> 1JEo0I5hmOŠs:uPlb)Sv|rWaѐ C@kXX' Ν4f)i)1+}{ t7s]?zخ7PdZ$}*rZcFO-jKޠ'֮0:8dGhx++3ŠC{Љft.)7#:jH%h#nL!|tCso3C p=4zcG@P2w4,-r:?L+a+ݟ>na⣇^K^F9JkbԢr͚//NG‰7%7:mke%N#0Ixs:_;mV+\O `EE UlA B;'L}"?e ڣhdPT\ 9%ne4kķ7rD=Ԙ 9MүvKB Jnp%(* x} + ѓl}k ԁGr!\زHB~VٌKHx4ށNMb$ڍ!4z9;愉q T]c $iZVX4$jbbkq!ӍZ=}]GY ڨ#kpY ZfeNt٤G}('LC+:ĻQC;XIh"4-7' ^==d+^Gw3*#΁)uB`xCЎc*qgDݗ+A4|F(ҡ:= % )$}O\|s[iE}N #>|{c5 +~PT׎IL9$&aeH<ЈKTȴo46ߔ({(#z ˴MOYF0fXHSOHW\37һH{`vǂ59*Sqpe,)bF_ǟf*}qqP*IFL|qtl4&O6*'ה3sA^~_KBxqX-2J5s dM~ A dhul0(asQ\_*HGe%#ZBxkH/5$"cUX{a"mp<3(Iѵi.iO!۶6T 6*qdP̱ :[)`L636m-t}Lk7Д'(jdU68ݽGnuGYo߮eG翎kj<Π1Ⰴ~rOշŕvLh'?Q*h=z8a\QĉxHKAaA>W+l{' r_XS/p&R\.B"^-cD¿t;5:'%N͗'Qgq )4#^!֭ͺB$]𳉲teY /8Aqh5.cX:*7xv5LýXC k'?%~T8_) !sj4cҒ6hC T7{yޭ!#:4~8,[WJK4 ['+\R! $8"#;UUpMdI$w@kp MvmXߎ H&r\w}ͽQ)Cp_/j9p+( }e4JhL M65f9;6cOq(Ȟ>Z˯s:=jә_4/6qFhO"HjUVh+X.׭%L[ r_:ceS=ua#MSWp#ƴ56r* gu;@zb*VL}t+LB>U_!Ӑ ?ؒ0,h6H K$!85PJݴ-1f M]q<& #K{;md&+ɿXQ؆C.=p EF;eDʹZXjζV=z޼7/-BnHѨ y/jMoQ l b^ÝDӽ:zy =1}Thj-%NPa֫^t]gy>q1S)}ܺEWfk~5laXhOt J(Ex.Qt!4Li^9em ~ Pɇfׄ#mS'! zq=EU԰h* *{A,݄%iQLm|#yfAD6 fH<|VѶUSlF9JH,(E<֧{{fJ:jFG$Ґ9g-}zo5ʦ <0t_P b,тɉ=Y[p}FPJh]a{obfbjIJhB(VP*ˈLzޚVzRsEK[_UEG7)kU88% 6"^C]F?'*(١DE]i'T74F&W>LPXX:TKX '`)O{AY7%%b[pe1: i\ev=Hvj?ۮU-תwTx6UxEI%KPH[-ϱ]I(ǟT(E}r%o] -W"}lЏWznqjk{;itZ2 `*vD[ Iy`((7>.5q S`-E:46mV+&!Ѽ9!#@8!UiJqNQ. Բ4&/kDAvή Bݲ[j5ukߊX Sb$m6Gx-nuK혊p/D4ͅ` Bx6?,0pjb:Be4b%VUsn(q8VcU:,-cQAFEKƑ&=ڮ^*#Yo@Nݼ:tr ` q6gZNloΑpWJUӲ͕26UOgZׇ7J=x׽Z־[5≸^֒8f\p =瑄`Ƥ6)DutA tDCz.@E cqHQL^pI#jǹ~7Z%~`]+v?;@EXzJz4#,B.!ψ1,hy[ʞFsX2G0HY(GSYq!uN޷>zi ͞nU#orɅJbKN _61~m!SFabF*-;PZ׽ S\:u-:V>$zZvvo-8p_t3\=z'Bx~M7J^}J}GuoV vʧHb$E_taq,:i p7ģo[_E) >Z;;XBSA@wȽEHLj,+j_ eH4za+&m4HAn9"a 6?ONIMXMaismq!6߫g_AEDQ:> yM'zr!ͦ@QXh rckVI16`VĺxSˑkˋ+%4PMazDײ3B+qX 'Ӭ&ƪ_N^< =v!8}XDZIM it yuCrԤGǽ{V*YD@Y{&mإZYxT؆֐phrMt׉W8%؈TAy3E }taIzаughi 8lJ>r$5wEtA-Y}Y?Oޘmnb) H?x+U%6Иpe>R[A̮% ިB S jڹ SzuLЎlJ$g#vК6OvxyMD-Pf"\:Lc2tqcS:h¯6J]雠GMvZN>?twmN=ua@N!=Ts˧¾TU:QY($ެHT~#j~&(o㵉ExO Vb[0c:}fؘٔDv-mٵ!YZ_ې 4nY}EKݛGs_wjN.ɴ EZUm&o(²[26*9 MOkq{؉pG';5gM=Xvc Ҕ'z+B4 E*ڨg _8_OxM`N T27BBn412냢pxORXR"ji`Ft_- ZE5 f{FDVHca77;m9Q8n"(ZHd$?"kr_l^zWOƀ-t)35762v1*ƮOhDlүeᚔ X황RN\܏1( -c4ꨵ(xlڥG*1<,ٯZjack8WK][vN|raVK_ΜWߝ}#>z辟_j  A le$F;R'k&kT&[,$7!{C$,'"( yڃUmqZZ5b!r1]IɄ{LJl[W 'g2T_8%< ׂ׽YC˛g7Y~;d #,u,T0T|hc$gr! B16pm]SQ˼:[5]LF3̝%-xJPFH 2iOAwl CIoeSyz~5n dA̾"{~Z5K 'd?Sv7?ñ[:dnSE!Hv-"oĄGҗiiV[e nЛ)VB$\KDj64[/ƤQæ1(+~)RRz5:0V֒XJ( ƛjᝨWUvO/}(ޞ"*XtϦTQX63P1Y( bFrE8#H->6(YlJ˚BWifvG£O0Q]6[ϵcoգNk=E#aoa&:5mE ʜJB]t_i TQp+P{I?11+ݷٽ'qd)i,ڏh̲No7PL8Cq`uc@P͠╵ th'\Zv Ю!lni:sSS]!l@ !u-knpARW ģGuV94;4hWǝuZBos^YQ4ޝ݆W" g 4ngGU+q!BGU4T^[JN92o "z 65l9́I"?H5N$ 0m\ ";W C{6__x󽞸GQSoj)TY09ѭjj$'2$/$lfb*=o7QIaFF) '%mVtӏ(1TvT/*L$kYTca*@*COPyH`X fhBz\2r^h8њѐZw/Vx/b9tG8LFU;V yQp+j*gT U؄˫G(iiw|ԐV[Q,CC6!ƎȐ NӾ!LŋgFt" ZeU  Uh;~U@R8J˙ JnkOz[уo]BC왻>g-cGDP/^Ȃ֣妣Nn H.ZG)H=ٍ8l [ hP7(Njvdr "zh1)YUqѶJ@_KXR`&4ic45Ƚ:eRϧO#}GM0KX)wKlVXZ1+MZ t%v:/a%+B25q p epGz,kPq[/Rqm.1JÈ74El7bRD|ЕP;!PD-`5ik^#l[o>wr8#]Ţ3q[nRAiW+S`.ZE:ĉ B!crly>HPhlI&f,֭h@QEn[KY4WVh.' Y4=Q/Hi~J4Ƣ\T9d AJJZh37#t pfݝa95~xgN» R\h*Wy,QK ޏgjg_X'zWb3\k5!"E\mGHfb~]QM>o/ǁ"!T(j!b"HjTMg?Mkk/ qc~Q\I;>}bvm"!04X1oLVK,#p[#Ei1T`C4e[A.Q-r4$,੕nx+՞*A &:R +xԤȬs6(>).4*mg}qE e[qy*EFU[إpFMs_?rozcG&uf5| s=U׉N bPh0+ eLZRP(9j&ps8E" o/mv jLr!P] #ryD E:l)L GAH+u3d/Z肐—J9֋c*weX952).a|sz'5j{0hy99F= ֧RgVЯB9:J)]WM Kvѣ9̼4UI8h҅`L@&Bgxk`\\2"I1⢅*uh:"[A#7گxu fa޺*Wk*i- fSS8͈Xɼ~~M<~om)/i%`2[D QmT玼u5@8v3h"#d(ҴbL_*|)RR ]•BZ  iGUEϫЅO]At!ixD8hl-=mmj);HKI8;#81kXzxq.~/w%StAhLp'Ɛ:W?B S3RlR$ hUolDԑL*19sm_^wxAޫx}?1x-n."НpFICU#FZEhJW0]SKΒ,Zjp@X^M@A4]kx+BqM00AQ_Ln\ܠn &;svHA G.-u G nY冭 a8_>#Rz ?x+0"!jsp"}?9O++މ1:-RtrSܪ2+R鍻2-e^x",Fb1龹rͧT) 6n q)6,yOAA)eFdp>04| fM$@TP7.w^~=Fڣ:mLaZ9I!Jjak(/m W*"㬯^wDG5OVreCiG=P|Ape-aOcw(Dbq/AlAn(ު5޽0d'PM-Pp> BXHp6xnգM^$j;䥶rh9~2kSwbDhѝxa6Y"&K[(ɶ9.{`kSTQBrew.'dA) Zl[) /a sZVK8bNS/~z 㣇ztҾvPh>1ssz-T-ez+z=ppE!TW;7 %vTP$ZrGhAw\-~tP8C$(ut S](&"S92 H6_FQ 2^Z/]9Shύ[|}n?<ݫzzw%ҏI q z **bQ29F\ac"?z.QzjzZ#nK 7nȳ#dCS6];v@IOѴB5'MA& f&G/fTF](& 6c6}(2QճhM?/G=|Oѣ}!~uبZ%{1gAoeϵ5:5 tu86 . ݫ4!޴fa'vlGo .E#K*슌O]h#ӛ|##bSԆ4"ҢQt1pd-?V_֜#NxULEz.{ky>+hib0IqP(F)rK)4RX畔8aOd^3:uvWxPITa88iKKz[F'\;hBv\Y0ԜC*k=Mg:Zn} lH=ufKT@b "t?91\ Ĭ:8jV.YQs=iM"4TUնUuil׻/o>zohȘ Ы M̔mb}.+TdEUo(":pG%CAH7q2'4r-0~7UxIu!";e]|_Sj%)"Wp <-zC)i)y Z3Sr@ޑ6m]ؘ~m?U^u}|^ʽN(Wpnͪi Ws)ܯ੎Snbk{gYsM\BZtX-}ewwǑwW L*-DbwK5AJ,z@vmF`}T| -9fAU,`D1BH( R8TTZ0=6ӧw߷;k&;}B~Ӌbtq0{T: O&cq dY֦@Ha N靐Jw[Y*}0f+ 9BcKXV*ر)UXE뺩jO ^ cۣ<i.K(,&g2>{ѻmzͰՔh;-aq O~p(z+s2{V~TL艸(PcAa*8e܋"A rWhYAOCչFbxZ(o7?դc?0Ev  ƊN (B9{(Z{ E1WkєKoJLgKI(lM"]1'Zj^ ?ͮj,G:㔱tIإx£‡Ҏ{"jD${ͪ2D&aOJ( &XIJ*{ rt;DJ3e&q6W|TP4RGbW[s.:z痏|?鮡 d-|32`/E\V<"ňFG"њE)o ]F[ gGL/֨5ZV.X}fs.PḌ5U!⒜QH lyc#p^vEƦYԜ MBQ(wS{S{HY^DU(C٦tF}9Q{jkJG:9JT5AoD4NKn yL%EWIAjsI7a i^\P;QHeRz2 Y\ˢat&lHf-!X[o2 ҷEg{q_]^ W@π Yd<..kz9NPAw.t拤XJELĂ U};v@E(CaT ]F4 PkkbDj?-B{]SWցD2 dqtbv{oC* 1).%$2 ʑЂEw2paW|0JJovN )s?|7A b#ܢbjMYg*_jĭ7Ҙ('تGVp8iX# UKU!1\Qb BQ9k ׊ѿ{w1{+fVv9@*hMrNW6'tS #%xv{Cn#$>* jK :MYQ%j ccVJ^L婘)o>FҗEkw )NHrWbA[Ԃq-t%4ațO?o>zުV&( ~SGj c`cq/XGʴDqj1x/cB"T5I* k_n?F}UjPZ: 4Ϛ*mQJDO[fuRj EFwf8:Jn]N\^‘>^J8"Q(4V֗uJ5/}n/poxw+YB \ÍE f4hf ifԆ'43A8+9ԟٱۦJkmShY(MQS>zmB.ֿ~uwEQ|0(81wloQ!b7<DAW p.3ysc s^+5WYҖ*  ڒiYV^K|h'-۔D*zGE} 8J6Fel ~/^UM a}y^)~Ms~o 0U1KY)cF@PLLz5Zls:[b)"n~v/u+Ge陮Ѓ, ffYJHf׌0o9ɜ8k a2{-yWS5ҎrNiQ !86ϸcN`kvMi&1hÓsG@^-ΐU]I|0`{ g$(\wCYq>]z83wo(?{:2T瞅 K_)Y"%䱨%e jwC|4.m >yQ\V~nʀFcl]үxcVC3DyVxȚ? V"]l簩P 0@eL򌆎8SU1M2HUh?{Z}QJY+y5S,cPݢ}"D10ز!׬!U# iZzJUha3>=x4լ91\]^d lxctpq7[1N ^|iϓQ &`W2Zxspm`W\uiddڶ}SS]H8~0:k2g#,Beatu ;A_^}:^"{Ƚ%` B~dH>{Б@ vջAay5vKbHj.l݀*<~\tZ g.6V׾حEv,k $X۶y3(ncI2t3:eu5fߴ~=oJ突G%zmoo0nfOxロpkdqcUdu(/}=-[m[$_עnm󴅛F?܈hnU=o3_o|ܦswٕ-rU M7τ_LەX|̨Yn~[=okJG )N{, +q͋MSE0o fN}܎\RڱY|s?8`"'rjեVE!LC ~ߊˈV"ª[orm%.Lɹd"uF-wR ?$/S|>y^nկ y=c𦽄5ތ6DĀq0q<y m37!ңxԀNk֮*MGoL;xa9H-BPd˄H|ՙkJwAUOU85[^_wɁr @o oaq}a״{*A?6B>fS#$4v ٭ywvTf)W\X`'PB[/E٣o<<{ڤ{JbZ,Ӂ f:rϢ0"i!ai$M콒q-y~C!Xjz媳I%c=v ["AC(EH`'m¹Skz 5dZJmǪ `AN<N2UENd+7;>BzO?z{S lƍ%pm Pj]]QyXj( +9WUGv0ԭ BT9j,mAo8iG@S1E;ey/ fb }1ObX ͥ< H1V1:`)%DYݳ8 ’jj-Ӧ+ϪZ>i ؗga\@7J\S}K-,nh%\VCpR|[f?55mF~SCZ[jѶWiU?G^F5$^H!pËbżԒ\ G/b՞u4g5 h^I88ZJ! >-E= ϲ/k:\9$PJH ^6u+{{{R҆pPvʈ,]l".$aݪdזΑblx.{Fu0YRa 'ORjexOc6ZIBS4jY@ を~xn^髅tN0,7Ia.5$x$,hZ'z,`iVXv(B1kg:sNrUdH0Gݕ@ lSO"ԓ7NMjޭ>8틝O߿&{ovIk#ƒV[%&͛[Z|FZm0{Q-E]sۑ=AQN͗9ZoۦCu<^ ࠺HDr9>Vݤ 5X],n)oMz&}R$o}ϛKqa&˾%HY-'Fic&n}÷^g ,nlߊwĥ%b>ZQMaoZ(p-fWkd:_İhKg: ٖ,5ЇpjoP+0Hn )K H2S}}C.+ڪcO^y}ֿqZs=_zx[/"RBx Y6`(LLQo&]'Eu(Z eRny[RO e7/,+{R6C湩=CLZ(WQLΜWTCd}g5,t,p(c>x]gك| 1ք 50d$O4:bR DzxLU.fSV#ZN66[~ WpGե|˶V}dN%%{e{ΣFS,+}\^x--yxyx*Լf'dNܦk(+@D9JŸ́rz_ţ Z}нyE[aW7i3Krfl%Zϯ+,K=JPN#GoVZe[O;/emXxݗmHÓ$m&(D,ijxU2bFj o͇߼v{8g%C/Žs,qH6&l:D˶wPnƐl| imUcmV?mwRxi~koZ".8YZj/cmE]ǭË%ZXX3^Ay#&}7>|hOn|+lvK_8Y74gP>bҬD8،h?h^.tex5'`U}sd7wToe$YU$ϥ>ƘjDus%(Z+8ی *PR\r-jO<oZwn)?{޺#63rkpXKR~/ᅒz>Xڼl\ ǜ; RPym-0!T-C'F5q .|c=RoNEVlPk:/B} ^ -ڵmU?Eò_չUx9oo>y=nzݬL6)%1I.T'VUy#ᢛE%HuF5F_#^EbvS,})n_/Ϡ.6[C<z? w^%ַ~iX YL&zzww|+u%?M_~x4iվJz gC[d&/85\=R6}[m:/ z #~S e3O6sZ 5\qTPC!Bd2PQU&GBjԡʹgW. Yeִ Y4RG>=wn룢~b6쓇e_UN g9QaT.Beďv!f=@$c J<i6G:K{W.W"hrk[=L]V_#TvD +ܓtݰ7./SzjTj-fm_A 䙣iS X0_|<%,:<Ғ-+jd ePMJDk .Ql`vY>S_\yнemZz_@#). .?bl)Ŏ dTga@-HX6.mYY+Lu`^{!\*BnǧV]J۶Qu{m黻k)=EoUv.mOm~/ ˚ 2zg(tgcUmp>khO:AZ+4-ot!̥:C'v_CD>Z_,#ANۇ/; + m3(yR:½Iet Zyydu;sW܈$0?z5^{Aef 7v#nb:cwk~>{hCr=_SV-wY G_5~-I*l͜GIGw腺,o%w ]YM׵e+m=YD2RJ "0Q 1y/}gB d=hK˵c㣈]n||Nʭ3&+fg|>XA~>&y%u,CNY;1j%3zWxWBUK1<±T-*fwshvryX*sbxZ:zȋ~*u╩Ræ,Ym5H|{[!},6<'_LDzBXXy^nnTSkA]=]E/f0 8U EFP{@U6@=,쐴~c+-0h㞴]` <۟|RO9_?_pH4w ugTN|mb!G+FK+ٗ^/Lypl׭bޮ´ _P}=s+\j= ;[힐adN R^3FOj^^vف j5j^kzz dbMۖjj[s(? d[1>J |CNm>G7`*V}?~7bImY2%6bAԾ/;"_͖J>V:pyGzZ05D{zpd5;D5sc^elvue@+d;2₎r{ 넠(BߠsuP k*g`4csKIRZ|k)}Q~h?|xqƯɁ0$fl*Pu'lS#IQav`͘RrL};K Xb3"$TغZL!Vˤ9^*AN*_ vmbk,B+IrL9:˛=^MDlӗX@TT#~|?>ԓ-t_ByxzzΑB{ɡs3X7ZS/Nu6>o:Զ= JeMsx[{CX6^\FM@U8>f^Ag6 )b1+kHC^S //Ʈ/򞬖)L&Hcҧ?}Jwr>{ުݦaWQhhm3slql51{BůJE~`IyFx^;̐}w[WtSA(>,K[AlV%FadPeQ$ kIV XfBX+-s(s?i_CKO o?o#ML:MSe 빱n5+KU(㈶kn޼}$j|~w}x͸C|Q~F_Uʈ띌si̴3<$lfOҋeSUrTEzJ~_5RqCNPI$ۜǼxrIJE29R[:`yڄ:Cf&830\ 5ݵiwYwR~Qd B/9U@X~׍\rڤmy(Csd]+cX.Vk!JUN{Um^Fm"%Ɯ͓Ug[}'vE:6tֻ6v-bY'NmplŴZy4 "CR~h;l5Ɬ"ֽG6Q#"0)sfi/cg3}|1EK]HA` WkqRm{-6-rX_{->y_ԯU[iWb8Hlݚpmڶacdp(+Y~AO2I$ōJ0,+/$F-x;ך3Ys0&)j"RXD3‹éӱW\ 'H`v>WJN?)'0W5bI,UQ~ KlHd>ֳ,g 8/&Ȣ]sI^H[nv/qj>C]AKxT4o%i|ܪYQ4X͉π1[ӾmyUcVe+y8_5sVr?,X p.zgzw @ :Ox; zWSʆ3X3(*t xD6|Pޏu-~t*U(+{zDXLluivgA~WH;7&c JJ֔iJv!a6r_osWCU>I&nh'3l9[_sܔyk;-*}qxj{KV[jCˆ“Fxτ̑2?oJF;n.ڱubg(bM9mM靧iͪJwco8^|<7/nO|'Ї7-OO~ nPi:"Lk^D )5fRbvh/~?wVx%>yRhAw*tfE C:6^KMl8H#d_/c]@WZC }w=w:'hʳ\˪s<`ӌ,Ͳ(I%m9Kx `ήKy_Rj^ "k9Lzl?H6no٦Z!d5DƲTQfXDj&Rjj@9RV^U/~&_هBPQF0s'  fRy̝0U zw ,j5QDE+A?%Va?^d|1MͲB= Ǫ֕{z1ڽ1O>7,sPh-@ڠHPcTuMk7[i/Xץ A˰t b7z'&&en]7*S-BSUUk=nR]?W7iQMUCmzشmxы}w~7ͳdWIu a#Ev;`y&+.xOW3xYdnd,M&xsJwZb۞ Uq7,n5:ODVE祰 ʓ}vIB eSK }M Ɉۧ6*y]W棞zEKLJ?pu=t8@RH1<=ta0]ՠj=]qw=vVM4T^Ot]WVI~0,& d ZyJJ$nN~+d ʥ(aЏ̗bRZ])7;{'/`?%?s3 fzT:- $pkwxsFt* ?j՜( u.vXĖPqeg",u\&ȓx{B#z~baR薍RI0 Q?_$^Q5=xgPK^g{S-/sk0AgDrƅmO΋x#4Jʪ3BP6lE6Vnl Jp9( 6<58)z6Ë%C34. Ж$ [,hV<@Nޏvw$Qt8$:G&!ġ _Q-bmፘaa& ,*+j;{>@Tg Geo1me}x wɂ4ycCPn4Tx/ԏ*)ᬸǫ(lR4itWNŲn%Cofjo>{'caa幺Œ Rɦ(6㞝65 >zxIԸ blPUVҲ͋ ~(/Dy]3Y1.0ܙ"{/_Q#EljM9fRAh'/\[wF2G߽x_osU,i;v@V9"ը'^~PB0,mΛU./40l,{@J]= iuO+Jލv _lǥX9џjbCVtcA#k^*kQK*mޔ;q-@7 OD>y~q¦ +3FÎsX1eݦD? \g^kjߗTT=Ra/A80I8ɡlXW'{i%t$[4bؘ}xBjǪo[rЌt+|#AK9$N}'{]W{N94px.`!F8@8shKi𼷉:5@'쒆^-=`!֒:?owJFu fҍd< Kp-2<2-JOHnScp `@,4y-v 25Ͷ}pE0SyPx1;!?lmd-mr68%}P;gAky̳J$}~y>\й?W*r>78`QTtp)Z:'F[~#i` :6ghxx*\q~O?\G-0~w5L-Ӗ`zY/vj gO:(cmudHOo]졘XIf{2f-n|p 莴,= d@ =1edmeyP׷kq/Jutͽ?lZᓇeWMj]&9;2-#< v|Om'Y*y㕮dq{9JnS6dXY[Qynv ZDGdžy*z+1IoЩ;V)|S*TY $3bh fg/|߷AB8`g5ɘTK.3U|I_8KV: $^qUCkWsv#ۚ >ϵhP@<ڱfD-n(LeսS胪똉X5rK|JuNk# /?_gb+`B1_E_RM_FؓndpNbD—N]CHQ)/[貟}>gà@A ~Gv \oJn#ÚL}ٗ\ݲv)ڂfaЙ3PGvA/,5MɻO㧏_+ry=b-.t/V:Tn4m竲Z&oT@?4ItBآF)Ks=|+؃ ɳzi2pr.e '8r6OveOԬ<иOwM#ح\V+$Xx?y~n>465_"yytN VZڶv/az=W:-< \v>C.N ԁ#LU˘ZrӶ=jU G^%OIF))-Y=L=B~jk r$+KAl;5Bn^_ 6MaۮuE97e%( 5f/yT^;}=7KE` 0`m:d~d[MGF9&9JˆH%dE%U{ۼ;Oׯ=cSn~e~ToXx$V۶",wj&'b0@f.m/LxOv 0$ U9dZRt]ly.KC Ye?QnˆrHOU5nW@*^(*ǯO~{%Pdww:kK&X39p0 9uYTpc0k.[2;8yr )֬(z6Rǣ`Rz󨼇1E.xbRGyxJ<њ5iS&١#Q-ֽtg hBfln/:<_o^'qQWY/(z9pS  0D"$'m T;(|xtNiuYՅ䱫8aj_ayXCcێUXOy) ^Rv,&rz x<;fT}?~Zg/dbQuE] $a+cTFPXȔX;c&{)yE[EH Iokǔp L,hƀTw`&q}j!ih@yZĔ[Qv-Xŧϫ*tN&b_BwObokS;B,Kf8"ֵ'v,cSwS/niojdE. JphLg6LAXG7$&dFbD偔hYx=(:~ު ǥ`b=]dA (lߴ5=5hTu! &Ui)62mWд<} (l}P:4=ifI-A.t6ac;(U%;)r0JhZ*>&O?tGg\[gjܒnլ5BU`%8Hڕ:ZECU;1%[t"}ϗu=%{λ4^_yWM@/PDXUa]wu)]b%NrmApHc Ӗe<0%"wVO_oz P"R`հ]! :-3U_Ȓ-uyk\wHs!.e$67!~͞R Kׯ) j{45?rXg-ϰVZTvS&y@==CJ^Hy-cg鍞K t4TlWi& AlK:H2CDf!y}ވ[{`q|?>}ng[&DPDSk܂FӶva $QuZ؀k[- ub_Ȁdw=!`z^URl8& iPSo7aiWc~\ɿ {NK}ȓڹ+MF4c2ր6,e4R4,DQ+oýZ-"ˉeCA֟(&)@/bZ{L\P UT9yڳJ`_x]!y>^md[j.LSXH(6<њ.7 @"&6HTaKAC^=4*f!CkӋsׇw__}}rb3Ak7UEܮvnR!ʛYSp# <08S!oF2ks x3"_GW+=1M \Bu 0vuaL8 YS4p | dDd PRS?U_KЫ}ZdyEz̫LbNS 1: g/RU?| Ȱ בqDGRdt8j8@ Gzɣ ?W_$8 LL.j橛` :ۺKɋͺV1Iw%E7vءElWR}ax^y2JD?a.6kK3mJ X;mA S)p¶A<ET^nGg[8okU2FP~U4/|QIzz6-Й=ٮzl=1Ggډ+tA$c&5if ;: kX42"֯#Њ,qNVZYoxt?2[{s;_ VR}pczw8٘1zE9eb{I5qs]͕Sx !&mH"!?85EoK bQ(~6*7D"=o@dϜq=FXr8dyWl;Z{P'0mL@wRޒyX xb,m Z˶ºfm)KFm=ž,lPvTs C:6jla('֮`xDY}wgCkS;w*ǵLޭg dBNn,BP\s]m>wn:a5K˅e(:K"1WW弖unAjZNHqA 3^Yf =31Q$#ß px "W`Z؋YU)Ȣdeƒ\FTi>m9 JD:Xm Ξeϩd8\z+x(jIσ`Y ~|ӻO?=x?0=.({DmWʨ1G;0•4}+fʫ$&]ܛu$Uz[YQjS+u;@D%X\폡Xo@" k'sevtʼ/2i@A:v} ekKBs;UNĖ`XEXO}O}j˓7MEͭU6Rq::e=?mf~l,2ag.@u@yZ{JXiJ /z\n?;)cKV:֮nG@Ke yXjl^P0K,G,h[~Sk׹޿{+B*3} ncYJ=uɛDGԽ5&TY~*VcRp 3;E ۛ~w?{YRDnn39TyPRd_ ROHA?}e_|܉Cgb @o9m P'V\/Q :'IB. =ƷqFokȀ\_=ʛ7~\e"U^!LW0tVJQ:U<\Pz[9U-kOWhpWii$[m6 vPUˌW5Ԩv*${ޱ\~や@5 <ڢ@G w`> I(Jm5p*}M#<ژvfW nEfÇO_ޯ=zϪC} |`/zM5vuɄsء\i4ŻgZɚOƈ_g sOaV!o(ơbң[HMy,Lԓ%U\wkI!hp4% GmdyOdoCV5):5|ԑOs|~>Iy^s=roVƀHq~ v ;Jj,iՔrl}M -mz>1U}gWoRXEs[:6]/ qH̺H@^WoñO* \Z36f?T(]뜹ΩhHSʬk@gbXE SI޲T䶙￞{r9_f"fhm%" ɉXhq`AF4%YTN*4Gh'U6J|̵_^Lű%\ uJ}~N[ mg~m֠kb'7=m#d >؊I;Har)Q G}ÿe$yR=roI3]4itC9= &ɚ:ڬhΜJIVgQO9''k*A.푷ZkPR3{)fav=o[ *t!HO٩-qr츘]m:<,-xȐݻ怯I ǟ>7k`^gO = 11?U@ơ 7"FKʻnƈqTI.6/B)YV ZE*]א^݇Jz MH)~[t%+wFVy=h(9j: i|po-a K->cMcOb2J?J×ލwyǟ^ Oo3?;y~fCtj$ $ځe#%-b!N}ƾU+{f LguF: |tܽIh ,/RcQFm'wzx|e_T4lfgfFE o4@!>яeXow>_a{Mɣ諮ORW&m^JiF&ۮ]-V.'AX aLt)n|El7snɺ,u^X Ef~Q܃̪L bv}ρ8{˜cd9"nmĤk/s rLh'g!Պ5F$Gu`-ϣm ryoC蟽ls+uz~i+ >YX0㵮 B~.d8)jROpL}/m3~VWֺOH1dXezdJ>J-輵{խfH:*$Z3m7BТn5MypTh/.ԣ,ws͒ciI*7o-OwLP_MȒzzV^g`lEN'+ZoҒjj' &fYpSZ$Mao'P tc[;@px=4/Ş |J _gD7"z?42וeq3L"ԧ0nœuw] S(^ bW佧9#>·UwCFx\go;;X=xq7zEH$ yX2[]@-<{gq)8[0ʵ5M;o5by#VnMI>ІAҍz j,?aj ַa9G*5֣oci濏ݴ( <]Iݿ$TkljMw.0EFx%u+X$O-dl4b6!B86v|ң{).h[a#GQ[6db 4J r 6Kƭ` qQ>[{Ď-G ccX]5ŠS=98?wV:oќ~}X-6>1_TړEՒU[x$]20U3lLmZ=V8Q12 Yn:RmJZ%|K67[@nc ꈞLr>o1FT%H|"(e.7o?Ӟf*qOJbԵ u{-M:#Y{Dumo"c ]"ttE֛@9mQ]R >##eTz~N +y_Yk3jq,l 0OU,=0RzIo~,^?A/2Wx+ӫMCF ˼bZ F4(&nT12+ޔigRM䓷5KVX@?UEaO+B Gz9NeɯtCY?GG&7-g(>/Zak54@EC̺ӏ4ǚu=Gq-TXaP`w΄x%)"kPϊqM b Y}FIe6嘃W V>XɋE͙<ݷVTbt-TJmZ:xN_='5Q@< i 0RYu1$;ǣDa0ט= f9mdG6!>px+ƪ<[<qeh*cXV> %`tkh%$k'acيZ8v*W6ZyY%6ZSG[(#"#SAO}'7(~S\`aO Fk#%-ùtqg?avgJ_<Vs'<0JH"+ø4Ȭ0_ ^KTz~Qen:K.ޓubQn;c#@O: <٬n\1@ E!?pSݼԧX³{ʱsX`.i0?TGG;X!Z;ys%zX`}Gdec\f[.\`[*BX}4&"2c4"$TR3G l=cZ X3>V~&`kv=3Muަh3EJ@ ȿk#߿ۧ|_;?WJjJŷ`2{]|.ES?BFǫ[n;AB`  oab%Sc->Ζ'lg:ƙ*,^ (_{o&UY?D.XvʧL0+,yN-qVb#}Ev 93l ͫÄ=#!gIRpChftPdC#KRh_vtBϘWZY|̳B˷ zjϾ,D;nЫoi3@>PRPR&SXx}rq9B#㡻=!9&~ƶbtyOY S%3ax̏Y :1>! 叜H~ۺ8?ݺ_=?ںznS,l@aIE+ Y:[Bw1E_ʹUp[>׷Y89WΛ={EkU,sz EWH,hC'Xl?!mJskW[ +iyUbUHc!lI={2N=oldj[_SQG[aYuW_>bzʾ3kg_<'_"RY8IJ{F56b^xu*aF#t&P\ h) ,L0lS tSylݷK4 R;;oBR>ܘpS;#N(RzvPm/17 _bUۆi);xT3p.JP֪Ysţ# N5=0z(UصTlrucz=i~ =&K'BAg><J^9/VCcdk!|{/Ʒoxע;/Ը2<3;Rj䠒]Cۿ;x?NϚ'ac*r3>7$YW^=0 X@K]5BwKOU̖hϻT5ݰԬW=PVI[㚏_#5u>>"S0 nuz=#]\^ir=s ?~[);|>Ox?NjAmW0:VzE$Ga2!n'7x5h &`N~'CMZiTֲכ5ZvB۞)E{! ܨI:f;SDoH G5r~fV\wu|}}vT~25*!\3?JίA* l9`:>!%@wxY'{ɛ[aqW\`Y(~ ~ZSmƞp~*-0OU#<]sjU!"hFBZu٪:KS1UA8zic3Vs/>f\ˊ_o kiщWwjS^m}E")?=ﳁ.FW8:Z>6/Mړ@a棜=(YP:dY]6uzh(sm7vYHߍ5J{u75*O2^*R-(ڀNs=aF„DjKC ?$ˁ`[!mޭ(r>ҿAWݏ<-B'4K0nQEiso5R\$ɐsVR$`*#8Ke1K%4& _v@_a AU-}5@[/"$x4Ϫc[xyJ!P[ NL:4Vf+TSw 6tz1nIlZ36+uVş_n#W $,MzUe[+1b~c{E[}(kX0 'KSC9wHjkK5؁̿K S"/>)GȆQãsQ?^B[gQ$:yZkܞH!"f zg.%ABH>uWWM+W,PRFzvFx$ Z5[%~dn3\!^\yz|CĐ+5gNumd~AI;@ ;:_ݿݿ|}˷CVL!Tx3(?za5>=qϓϩ4l=L-dP)O/zWόX;0W*s Aʰ@rCۻ=yb_<|BSg,}8G樕&DC5+U|Uɮh%_=? ^( <lRU֯gڹtP^JelVfhMi̷4ZUX/*( wgdL tMrSH[!FiZ>x >˜*2.gH-HLAc ";b,+젫dS[_pM󃻹OUz~x>ja_:wxA|tAf7F7G!}E/4Cg){h<8ZmHK!ٵ$|ݟ W6>oԝwGڶn=L "̂}w7s:ӺlJ;,E^Cź]%Plpf}7$RT^V{l]>UK 6S@Kr2>Alϗu={ 8߼ϕ'z~a=[Ylk !]ov<|\Y Ē'^+p, Wjq DX%M_=tYkuu )p;;I}Qxu7kpf '-XJgXm&)3 /USJ̀Ж'N6$Vm"?md,~61ZRo33 R|t5ٻo"p.Bڟ{z~_j E4-1|=OܽOssdT ܀lMZF9^0aműެAQ \sد_=?AKoꀃQ/U1(n;+>fTf{%H$'ww&ـ '־:Wu-OB|hӖ:(,Xo9']댢-XnVlY$yBdgBu6e|Jt's@0jb߷;g3JNKefU| m5hdŮp~aG'0'g@]޾0 *FbX䨫`h}a9ͯbxz +?пY²H3lOzOUn ^[<ˆl~7_'w#^y+mwkd`Df[0Rjɋ~4O$*S+kq+}WD%%*YάRa@x (2BSb~0~Moܮs fx: o֎YJ!ڋ 3=C}O&7FJo;@ -l R`X k/s=#{w "z]`|DpeyyY崮\a[EȕLn#DV֫YWݏꊟR m3ս@0`,#JGNe 3!YM 94#Nt7CȐ鄳Z@IxIr[cc|)u.QƋS|%vYO>0<6}&ȷvb;{W1#__lhuV>6*ſzoGI,`iiNa҆#W$[Vw] C-餫u?[WgzὊ~/aE<\ ZMQuIl 5{PD@}u/sc*sE6O}ɄL㱳-'뻧?)v<WOsO׿?V9+ba[<5"dg+ ê?ʸ^H%G:"tE݌6 7R^+JPmj<}՝)-=[ ׮6t@FF@fζu mŻҋq;zD)RKGDz]3 eDeI:@ۣm^$w9mhqhA,N,M9*fjd`iU"0˯?~ܾz~^Uߟت)ȃIߛ]ǹÞ~`㹘;^<=G湟2CpV ߔ&J"ÂwK[/H ۇl'auR uO g2m[=!uO1C6-֖Ukwqڶf Kꍦ^{Yş3Ij!5:*U{Th{n 2s`0_ spJJx1ew}E5q?N:s{7'y)=f(>XCʁL TՙIC@,ٮt% 3ju m%Tq_Yw~־z$?Iv}vm>,r6Xc_d3 cz8n[yS1hpn9{`cl}%ʒlWY 6C~Vcy}*]7RƘT;G^LLVNj6KiKn`N#uI"x4Uz{'Rݖ c"ϼĝ>dqo?,&Uj-c;O k̄=Ӹ D9#_.~śu==k5Ms n OWZ=1ȥ]_w_٥,(5{VevoWDv'S6t~*6VČr},Eɯ?e2}Uir Rn=w= jFVh^ =3O\YLOp}oElzsŨh bU?V%igo>Xҫ42Yo泂/!$G`!EA6>$Gyd@(XV3ˢ-^J1`.1U$rƆhn*>@a]SgO'MW׼k4e ˔őO5~"E Ǫl]P&?\ݯ>>]uVaPXŇLM܄eA-̮٪55 @F ͊ڇ_dDӠʍvvN3okľ)|Gk`^πq t5CҚ%;Cta2x~ tpL4AdmwlKd_`3_;X裰OztMY+ݕI?[ ]b^%ha*DM@W;O]}zu*6@ճH?E+h!?:tvT[`6hwx߷7\=VK4s M(Hl%{χU~H鯵݇u{B1B/7n4nzA\ט6Y,H*Jեy L--gM`UO r;B~QRUPu ob%LD*1ktvゆžVϚm؂%f[uH:` 6jFNt?ɻiP+HaVMXާ1#\h=VNgJ`׆"jOJdgb|[Y.;_ҙW_Ξ؋ 7U! gIץK#5BEn/dKd ɜ[o/qqijkV6iT BBP$2GVBqNTObm(N2YDŽE͸T>i6R1 , AfD@F 3(`ӟW' X "ީrԱAO^eBOW0lg.ItCx/,D{xTGGH_mV+{kX Lp`|:6ݎT*ZT`WsMg?WR[V{dgNl ȥ,u9In۔.k_l+3'%2%!^S/鈶JD;鹳5HU^7_$W=%+HwReZcx߁/ea}}qj*+z4XHT,YDZ\.Ң%P H`xEq֯^Ӫ֡4ya%tޤÔShoAd: }rRQbQ2"‡܃mIOѻ힁J6*K HRBx?9̄Q٥{h t{So}[] R/  .W:`a~W#+$gZ`C+9'XwP' V1./ 6cWbD:tF%5.ԫ_^<&{QWiDa+OׄgG`5OkC6y5@K{ RNQq J-7Ϋ@l\R&v@zٯE@b/*J6p OӰTi ڂfoUY!*eh~۸4'w ivyQLG<`G%A^Nοޛ)GxvzVnGN Tr?Z?}B٤u]Zzʩ I)9UU l)N \$neCg787oVjɥIRv _.~1ŋր:5h=3"wzUweCq]:32IO}3x;Լ[?[ږN>6myZE^ q^6ZdmG\˻% TcG9^;.Ż&TGpVzԮv_V5gX7ID*lJDk 8fSWnmxڤ!LOf 8tÄhE}md4[Y5/Tw{Nmv{bXZ1H+Z.E i<c Iqeh#xi6gUs Da zܐ-X ݢ'B:!& Ct :4ԛ$o'usQw ^0hg4H8#qKe껊0 w d^A1ye^1ob !|.OWJt_B&f2tJ7k+ޗa%d{y7}vXCN Q q&9hTg3w8&/y#x'4_+[:jtV=D(ƕ d@~lhyįZO& \(2i;&'L@}Ps"gx'ODPp= hknWU6\Z%ϛBREqvWKk9xt. \Z6Gvӣ[Ў󭬩`*W0<"y3K,g6V {(nSABQT.hzAːFH|O!kWmJL4.1:$ / `" 'nq~uZYz0 T24-qsV5idk{[ ؄CʡhsǛe][`OPn)~dsS5EN a<pLS;G0PIi&@MT<& Gf-$[kNͷ(_2-^ |1<`"|n}Dcv/>XIg8%y!DƴI'.4/T5Y@zz{#riIx`lx< BCk /I)D|iCU f9(0yx2囁 ^$ip;bij)iz`ᓉ*RM…Ρ9WJmlIvVL-_|t,%}>N XoF^fOo Ȉo[j,DdvJ$H*Q 1HVY{ʷz寮x3Q)[ɡfvC.c4Wi|y%Mr߾‚^3d`rڋw4C {ڗގSRW-Ӹ sК9T2Dͩs]=_[j`>Bޫ:(veQr3i:;6 p$+HX⍢4G>Iy(Nv5lWE$;)M=7-4;vm'(@Jp:ڮv%GAs bfkÓ>Id5VܧpshYʒS^k+p(̈́N+qC5OIa BqòJFҮK}4\xk@G,DoUØg]8=1v1xG62Wޠ+'DftNr ; /% xgxگ kxެLa Hr)ͼ(!l:Cܢ^qجȹ/mO"ȿUZP3@?C>*78o1V5HG;<ٳHJGJ bqsWw"8/tm<񔋐 ҭ7 %Y N?8eetu;Ӭ$$Vu!= /ֲamoYG6Uuj'>OOM^(2z!鏷Id3w/kU]FU9ɦ%=e%rwCb_25BS>zOPp\g϶I,; }e=A̪YzkaQURs24ɎVR{L=o20I#he62V+v4>$ 0c-콑mG<3 i2V?-OR@Y;xzDŷcrnQ7TmSan mHb L}p{{O'jSw!'KˋYbn~4]tEgwKRD< $) 7tCn6Ǯ Jaz&Y4 8{e 0m68_Cg['0]\ qP#D3#)ġ9xx6,N`uu,e aae58&ilfѺL2|Eɦ y@ QkY/o_$2X ĂZK+o5,T$O;*~E= ^sX3!=c|i-џ\NidZ oZRʤ2UD{^ E6RwuHA}fLw@q-(sKgtj]Ҭ UlABջ|)p^ R{]=!g•\i3W[>"כm2"PE&>/ gGd%' \^;8T>kF) L|v%e,){|/È]o&,[kp;7|m&r[u.;𮦄}ɮdL9Pj/뎰mgQ{Jx!šDlߪ=m/,*O:SjWՁdnZ66冼Vb: ?#/0ݲpgsENy=VP,ꮳ(zp $jP?>ES7ER^]jm޺%WyX[=Ilz#pˬCl @'Q؊1<$Uc%s~tjhAoSO%֝"D;@VQ cR($)@R=G/wpw9,Re37"{2Sy#r7|1p{ ѭntU; k McB{x˄h "T-:ISmٶ`{ooLX0m9D%w,; CzlيAȋP󺽮Tiz\,Z2_^tꯕ[L5Ôtf z.4V?}8lE.rHXɝ飻3 =kvDdP?w=͉o|{ͭт,mZ~/=Ylmth 3g㣦Y][3JWƒIn6?** ( % PEELB8-WRJaWt ˊE˫b xΈP+|%7i|XOS>&ϕ>ƫ\{^sb,McZU]<śɮ ]ֽ=e߻B,J>qx<U38q5/RzV03H\+o-H!fRyF,5}ʻ MLLl[[(5 -vAR|o.:VM*28|PyK-lmZ jm#,z4$s Hڍw"W)xy iVc7*VdGf=IqW{G!SCyr٬3ޞV`Etc`6ən/6sv:[juX,{k;pݬoX0v6 %c`%C~5oY,CO-Z`an|L*iZ?7dZѪʬuKH sh<"`vkwnLz([xw9ns3^n?m"YK&뮋3릓Nǝ-WA,pre'ק#@ppB6/Hf]hTUX *7' OA%3v {0?`vB͞6}9j=)4crдlVE=v'RHfՅx9y@#=Ⅰ0)/4?vo;DoeI'o-Z(/WG"o% yӿFs٣ tJe`!Io 1-txߥ\'wAύ| AX- /$]B~)*vyn?ְnP¶o~$ Ps\I6KaDkY ˆU;O}8jv2"uXs&u2=ċ:::Um IP Z{_[;C ON$qYQ f-tI=:敏}'04]MGkfv)/MZpi 6}J!񶋌K{rE{{6 7}|Luj06ޟ4K#xj5}% xIw,(\ _o7עTښI`w'"ڶBy, X'X[`ฦV`iSlu*2+Y6 5= OT%ӑ%&9!D1P1I=0p@'Xy!o\ uyE]FqgcIKNy: s2P%x. m"6VW8vܴD?ܛ`/^ /EX^a,^%h$:/(yb'c[oG^ɩ:;g;ڧw+=ͲuBiw#LnʜDQ"m ,LC lxlX ˏR\"U@T4+gMDb\]i)Q,RH R Ȳ }nD7ya7|:!-xEY;Da/xd=HQ!f Wr2=Y:%e 6jJ1/h4xO%҆%Uj(<Ȅexr( ͎Wq< [YƤOWTPf1z@CDXg+\ה ž\ϯd~D䂂GK_)qy$[zXJ^2-4@.x9"b^]wVYNӁHouC-ޣݛ-L6D#y`e%=[Q$jiЮ+Էs#[zyB#}Tdb"V/8mUkwbτ̵x_E 7PRY7 u*EsmliH֮]$P1T͓`&8 :({sMGSчm2f{:21  {VYDaZumտ kAB d.~ ~@fQL"*1M}U^(+,| kYo8"J$K0'!`ȅut.jQ; Yb&qe%yU|~XGVUXaż̾"1v8,\%YG,XeHؔdCfW' xy^GT9Pb|f5YRdG* 5-zdBThӪ`֦&eU j9"X h?;dk.ZmfRױ ŁSF#;~*zCZ|}0& TSF4[*,JW,۷ny-ZdOND1/v/<Λ'wN[nm-a$q Aүv*lX@nAV,Q}xnjVm6 @~;>q#1d&^+Y"eW9XMl8E!É֩jo{:({iںr-}#T'x8 L< 2^=콼bZ Jz=YϨd AzESU(1aJ~jZjQAN0p!^p8y^waбk( uG|Y  6=Qmoq\b2yIV@̌vx^M!'߄M[~3k89m؈2L4u d-б8ZhGgO 勀Vf)\`~[{F`uBY\flºt&x~]_?#: Z ^"ճlB7@նv ){߇zVwj*)Gڗ}4Ǚ/m(iM{;3])@D3+5X(+Rx EB4URKO b A]`u@J;z]V`Ԛwu#075{Y0?OmAoQ;U){\v*^?;޳gb9Nt`K*; sy qqlWJsv);^0:bsjbN'I`=XVķLJXe@:+| J\nvC? h~rdnwOUn莅>)x> jSsAtIn|]axV@yJ%#.X,5YsΕ[ ;z1M {qXxܧ1OwVbP |ZLw:)'E(ώ3~V%rﮜJ JRl|{x\@3LPRɄcQoN 9@hnl-FvoxTC&GcZ^%\]\GdMx3h٫iQ5Nx]GG{"[w\ۅ%q[;|)&zO>p ꁭ&xIm=B}[rL{j0YnOis8ɎZΛ:ݶeފڋD87] ժmQxTR*1SUm+'zIdMdtts=Pf! N森@]N6nb zG:N+T,Nծ~彞zvBK#zML],&Fc |PJnCˌOQ q_7}L;૖ 0`,^>Mk9AWAVjMnsJ᤬O!V-V:\UȘY sIjߎFq+qg#iZwG}{iMg%uD\t:'wIl)eVus1LVi?j9HH JsIت7.%?ђ&NPj}*a'@qrQ]b_qb? V@PNJi?+['MPnq;MgSJ\A%Nl>QSnL}>U:r¢ Qp8+"vhפ̃ڒք!I6: N.PwgZ8 YBRbO> $Py._dї?a>+uvT˛hq C[K]徆2C;o1#w Dq#b@% `AܽR7Qb|@U ¸V| 'I_^{IXG N|@륖αgN&U H=U8JkB{fmS7!qVUӵymR2GAk2%:կ_XiJ/|)2i L$!b\VoZaF!^҃'Dd7'P jV8"y@۪rI.tޣ9r2h xyC2L;b9SNCEіo7 1*a]nEy@v6DCrc[Te Y)(j2 ` `9rwAQϜ'Zʨ= RDWVepxJ]w}7L5Ե./}Gd'HphI"I }(ZїNlP͆#G|pmkVWb' r'3\W@vV@ +s u1R:9U'R[VU#T'3Iu{( GuhEʱ>ʺ[`@A)X ;\#'^?z Βd\cQ4f15lJM$QU *5i-%LhT)n[g`g1-J롾xd\C>Re|%2ݓ4$1u[w.?_ƁEb=&W ϑT[u!9T Jzt8@+E>r n=N,~ +"VuQ/A=T#D/U&g~hUUXGвCx8$'vKҚ'E sEzj5m?)ԛ)TnJPT#qxQɜ`Rn~"qBA*)$:v3].*[5#'7E[*U 4 T2kVifdՒUEƃ^& AHMΰ(իDVˠ 2j_GVL~3a;>)}`KFR _U8(:mwz)%LH*% IX5qɅD;Uma1 p$cy6eϱjd}Ȗ|j0tJg,GvwNW񔸫C 5k0 {^]~*mP\K>b>ez$lZ%喊 %G?TUIW2D,3$k!/jSO¼a8szŝQ8Gv$ɕj3`RRR[|X(\y`NNqڸJ sZ$$ T (D(aIH1ӧTʞإveǗ5cYQv,€eRhKv%˞>),5M~H MYzrςd™IUV;ļڮuPӐkOu{LޛvyxI;C\c0jﻉK7$:`ŝ6|$J(P;^f{n/.B"H,ze߷"T8XGmE%+EgIXz*K'Vw]ȀpG ]vl(A!|˩얤_9. OYRc ×T)Jaı5y mKlT7Eʸ(NGDہ'J\C\VJ|(MCI w\)٘)9N%$+éާ?BT).Z{wwPo7)eP075]=i_<|SQRc`ά)`47x0^91::AKTzQΜHeHb~݄Z*1)OlyFXwT9ݶh꒞dP_vJ;xsEOiyirfdR$)g@Kq.>hEW.bs9:OQJԳSY+nd) ~*!JTtcoYd!֫9b Vo=kŕ9dW⒛\3] w ި)59eԶr!9LJ+OԷ*HpؓĩM:ˣVާ-]v>|U'Uڻ3Yd\<_.#/OlLj9F˽(a͟ewk|Oun<]Bs I{lg\]5ʧXp$L9Mrr%'P}F $Օ;swR-*S`]3vu2)jn P?i'}92:*~ 8yx)p[Q=S?ds+O(ucRKDi8ꬊCV%k:W?0VVAUorn?.Aw-R/JȶNB\ &7ۯwP`9WL>qk:MvN;gޥE!O KbKɏʤ5'+:g}`唽 WDb5v^'ȵHүn!H)!C 7Ɋ}G=tkꄖuVu,* ʣLwx ?O_iN |xmq*DU&WI5x[E]*ƭ ͮ !p4=AkQs3Do7?E40Jªj蒉~$.uIJ,|ʓ%JB"%X#Z쀭͌:ڹBk1pyI 9`W|D CM[M}k4}롺??=vahÏ ii͡I>@C.`~mۅi\MV$0S4v K; 0vަwcs=y9il_TByĪT ityo][S#5*~eRQ+bp3̮4.ŒO1@;gb<}==>8" JlUi=yϷ=C8V`7m JGR(K$_0^$40:Tpur}oE5R0]FaBj"=ۅ'_!hvJ`;17|6y5KNoQ1u pCQ"UĽk P]\yj\-R8)~prJ$^ȷjd*KE\Fk aZb2IL/H`ӫ3 4ETŢsVIڋYRĻ*gFDʽ9*/.us*j0!*('<ǽ@\*)&#KsU"#꒮ @Tp%h]2$\]2lT#w{viQ3^#d{[CJNzqѝKc JA2MK֖eevB\A骅3 {S@}䶮e:jos>Y7Pe&on)C<&8>SȯV6;CP!'c@JuPnc3RѦOwCb˭|%\pmSuy.%"g"ej|wM6CoU hIvcRᅰtq^bC.Ja%$y͛4'V&kvxdS쵿u*A}]!5R*:W&,UFYKH'~'ix)q@M7502EꭂWtsK3Ӟu0_b7ʏ~OsG.?o#E'zDrhJ `lq>@=KW/hO$TKksOiyŞ`GQܖ3Z^SpIy9HW{.⾆,TWy*fq;Cؽ0Zzb7]n%jW "L{j2?rc᝸XݡH.0Edž%&(xio~m! }Ե .ƝӬ EJl4#9V}-2' b?mS>|{PPYaobQxSgG !sP\_[޿Yp! x݄ nKخD$@!oWE)8x׷IKvgW^CYɺYѵ+Y+Z`cZ\մo 55[Utc9I-=k=Iڬ?\"GQm Iavҗ@_UBA-Pك+)ʂ~Z>H,l NR9ڜ5eW}S>npd^^7#@. *~jwy[o%BAh|OJGx}*4G* #g;5(-B| (Xl֓Ey{0xSG3 MϱV뼐)EXz(&%[A[|jeOmW\E$2>ٟe K8xᕢ:p^=t-v:[*۸Y o))DHVW$I"݅Yk}>ļЁkyM>6-f[:2O,!q2O= > j6_|*oryس"=(%O}s5?  Mw={tj+1t6Rjgmp"Ji3 ״<N`A^"]"WjM]cvŕ7d7dceS(HtaH2YlTAK'b AC۪fQ\|$~ /b*4֫Q Jk yri*Vuq#lPd'xTWL/0ړgw]?|&2PY~.Z.p8N E;rBV1hs/.0ZgNE'rV)ch} wh'J ut>K5{:*3C|UђlX/0oOuF(2!8"4*hn!IJ;=>sB{c5/IM%(|Qɀƽjw"u%%vzU+55j*97kR R^>?o&J]/N3p($4/aR_ῼ9Qp: ǡkU/I \6:Et0TL拕SӾA]~?+_L$>};CBW纇{5kBYǹkm$z8Suy0zV, ɩЗdIp@>i?16x3( +)lӣhQ=1P֗K4*`*hc*9K&Zho+r}UDI *Kǥ >^0fkq *)U1x:8AP-hln6}-qbHى9!SRm*YWZj_|B:OXb*˜LМigqs+ɕ'أo%4rk)evٕ\}igrҦoI3R10ے \X-# M F߾(xVA ` nTR$gv,9̢hݾ>TRC1b9IH ˢϊV;m6@^n,g|348 e`jEf(`F6YZ7BmRM#Sp=lSi*|m$[9,BFT( :Zj(s^.'P$IaV-84l6V(pťIA= kwڹrD݋#'yG՞:Qās^hmO b.}]K1MĢS* O)A`ЯTz0'/\}d|Hť}@^`U%WY$8m`S,AV: C27u+«}y#&Z Y 9./65z@`+ľ$;]\BH(w)IjFeqK([*I?xgj dmO2Ӹq6REAEٕY^ILwDG>`?Xhsq\hVz/rWÒ +%ZVpJ/Uz]nn:*r;vW֕qK !rԤmOkb5p5+XN  GV ^ n奔4ڿ%_^5.g0j'ͷܩ:$"WrJK*}NզSd ¶}Nu"IS]*c_ҁVk-1_WzUua8Bܦ|Z$B_/D:Mse_t5z˥L Qw.Vu(^^Mi'yMi~1a#(;wK Ym6 ⻙z|RN?W  Hjݏ`smVoeyc UFhDh[V V_^*ބPQWZyN KAuwyvtZ-CmOP*kBA#C8\ڷG_#@$F,14 D81RW}ܕ:U^t{ h]RȟvIQnMRpHhr̥S((Nį)44*Yғ?QG,2S^m6Ղa/ԭ=|7Mx0`𩅳tO7JUnŮIuu/{6Ώjj* /Msa)wA;BCSi^v4O51͑LW2U۪0n_m: 嗵ۍW]A-Om\,8vP𹾨 Q6r$vTz֫ -/sK q?'HEͦDz0f^M@Sc ɵojH921PpRݹ#F1j+hѺ؄n 88 ޲%K@ f7uki<4yqULA(e袏l@@^ TE57x`Ë&2:5_5Vqܣ5Ii|z Xn}D("$7EPNqv9$(:LoZeR(r)GW2R س $n+Ք=ٷ|d3?z6ց8?N!wN\9x&Q[9Vϑu:.EY%7J).6=oq2L7LF_|\:MI[%|@[Rs;Yc )DIwkXm"rSiW w66ۙ<|ćR>}}Zz$ϔEGgLGze.#9 pxJs{ȼ2 讷@(\$jdϱ35P嵶H>L{|).]מB .-TUnmbZM. ,f4'80njDIxk|\|25T϶dC' BezQUmtpM9V'2Sf p T&4.jRG*%-ҿfeҀ+knϕRklەLr| '?EUOj;](5˗YgxogD'F{+3$-&*#8w`G-z|3`z8E q e "3k)~0%ń* ){_(CvO¤3ڣ8@G-ݞhHL$5hB>%r)[?̻[ (z絙ݟ0^rt2%&{ -g~\u"I"z{U/5TX|Tj0V:[8V\hR8 sM&Uٓ w~tNiNj-|][Oq.ݿQK0w=#Mbr7 RbҢJ±%gc8?'xMez乚ؾ匘29*Pj{$"]Ncj Gr۽. E)|dUgߍTrΧ>Vj؇88rRK)h%}οZͺCJф5喐@_yvC0t@~c j7Z2d2pO(6OQB鴕o +`YYN>{ﷂxuCv5*4?M ,2O ~GzjR0⛜*%}'xu>dpoߨTT"4x͇Ƀ G^k_9,f"J]O*RըiCM;VEToNN~}v>m)0Tyj9=8rUz=~UncB˜wEh(4Wd0]݋PP;ㆽ) OgSu)i]Q7|sܕOxD*,[] |cUmKǦM)Jjg*l]z( (]jQu>0zI[u 9kJE&gC,ijJ!t1~-(@iL[{ }/)K;_:p4y?eBI7!kC lJ^Rj^]{ي^D(HumuGLk^%?3UaQ/C!]2>`\s*Tw^.sX[ZNSfn¿)HzQꪤ V!!9y4g9% EЕBxdIrLD%4·V8iDұXI ^)؃ ;z_u:ʬ [m@JQ1ED ֥; Y@*U hS-uZ29^N_:'U~ lKtZ&EoU5I*Ni/@e3]kqhWm"dWgB+odM9Q.r A>}n?/~2_IC%o):[]M8EQw/ԂjqҧnRHo:)kMVJ$l)MpR;~,zdu*6=uiHl& cF[KGmfm]p5QK -MU݂SIJu=hdWjljts 9$)|bȍnt_Se-yZvbNq A=nUhfP,yӣS K{2ϥL ND<痲(u96xj:r)g7>P6q-.%L˧|[Vk5z&q5)Vq#  e~k>A}\ɨR^J(}) ]#*&X,+楚C 1T׿W -D 9gcSmj*Nzkʄbbd-9J"quji踩:Hu J7 j5] ?tx`)o.қ_. /!˩Eg\\%bCy@ީ¼4y 7]J2J}H4(ꨦ4aƣNC_881c>?ۇiJٚ#ڽ`k/dܓm79L/'M~.] g TEk Y oPPr^r0>?/wRcHw݄E#H_*1(1E-J !ȹԫ{Y ,hr(% 9T-ҥI>&1 V8jN9TV i<%"C&ܠ^#.YS3]#^[W/]yHp$$&._{S:Țâxąd9\1~^Ů?mqAYm7%v(Z&*vUpC#7>S!D)T'v;nTfHDN\)p+F%EQ?&#+Pvq'(p^EϞ>#4"#+DN؋>ʂk3ۍtC vnnS %&qoIA<GC5SQ!v"M)mVعu9+*+@ 0: y4Sw\]x-I=6z˖*-?) 1ͪع"v;"$\&@[orCҎ"<k:Qa#;UyJEqV֔:%^^Fn-M}7]Xy * QR.ꖌ%h:bd 7O=kwbXQ _:melLq~xe 2l0WNz>SD $p>݀QAJd;$gj,qf AJCr;Q0n'4 J@* ^lmC)3!&OQlg+j \šv{>wq5[RZ֨L@ǤGlR@A ƈKC;-u-KiݤRwVLɩMqp(RBF1R.ijG{W/ڱk@,`g[?In9oύI%Mcm%CxtQE>~̯.@NůJ!NM`G*{L^LxF M78=|>ZIMr92y]J* t}}ߚn]@<yl|' 관eđa9INjc%e 7` H*8Ǚ7)q}<%L.g8ܜ*SeH-P 6L]xDKM {l:H5~mKDp8f@CJ.1'@dJF KtY4XS=刻D83vTE_ Z;OMѤڋTdf&SK;-DQEW]617s,b{la}dSdvMoIK˩.Ҏ눛UTMt_@tN| ƺzJ42[zu튍g t7gAlbd+a8QX߂Kv{[&*b"xkŃP->¢aցU۝RQ|ݕ!`a_ 7JBT-@Ck9E'bјsm=٤=&@tRz FePw_ʒaG$^Yuh$}LT? Pu$wBd̚W}L~~Y  Pם~i C]+v˜9 v(D)|өB,11?j4<M*A0$YwmzwfUTh!$k&u/(ܴK"RU=t" *2%*&%r2ҢPnCmiNRr9OӖ;B+ wV*fb5"mg O9KH@??{9zУG곻:K!loxHcV[ZtS{[}ߺP8EJ"6ݛe*oМB\qͬZ5}\>SF Zp>:sRl(zl'3#g+etz&چʳ=Yl p'^l섨L'pH\s}^d)0"$i/jZ&S&û~ gUi:; HW3VVb ȿQܽH2uveJ$tvf(Ua.$y溟]%KvCVr 4dotŴW`M. E(JE dgyGbRiaBLhMVl Xprd*I.2E(oA+YcQ?3ܹ\=9Q\Jm _7& z[sP9G3-[zϭK3|m,oZ'E)C[S[M/QG0 tS. /* q iOඑU]3¦BytJB>6}Em%G$nYJDLKj~&) +z9[ N3j*꒝\jo= :'6ZVS[K4?9$Rfnо]Amu"_5|Fg5+Ĝ+KIl_f7O^|iQ"49'\޴ڔOH-rC 5֫Da+@hGnD;xgF0P\=Q &$; twnes_d[5.m5zЊ4I5WP|¯;dţ1T㜧=*H}@M7 ܞh֬ut >HS5@jAr'Wvc)JGcm!v޺߅aOuB*p8WCB짃e'eCn+PػJBCCkmR%ErVQ.WV;CE?~U gXGu!ԣ5k5jS61!DfH7#M Q=CXZNY;֕.S[/gTlLݢrT5c$ɹ Yx/U \>6.?WĒU7IjiH[ ]GSkOO(\,`(BD9% )L>"&D&9Ak57 v/s}JiHDPX!4y]k+Lh55sci8,$sIN@т$d¬]K!{h4f_һڜVn9uCLGW ) r/uަrqu,GB a@'oL Fj;}\O;:%<|c U![~Tsx3-Ωmɯ9UMrlf' )fۣ.[0lɎU|Gȍr@/5ڝW5ڡ"^$R*%ڗeػ&P;pt&Ihښص0l|m du+l]~@mYO cSZ[Ymy 9:`m}X\?H75Tྦ_wxxn}NMEgGRIߊDcڴ(50sLNNY/+aj~brᖋu=$5rƋ.*,]tB#if&eR *O׎*DE"5)HY, I@[s7 k`]nbKYYT䮔(VǥHfd+,2QoS9JU@2)G 'w"rD8O:&ȹ1GK{Q8{t_9Zu [ה+ )V;E #$?;qjow)Ury6I\*`vjZ\oV#&$GAygp3^yC0QTK)$ RW2,\,]ԕinc,h@Lr ,μsR]tqݦwiՍm⡮~'-i; 4Tkڡؘw9*(]UӑRb3 C`8%$Zl#*V74eޖ[9W'I(oQk8_PtUdhД 1ͥVdm :FP%ן.Ggp|~H%bd^|/x{˺R;F;ym3NEcw;)BCYQqtl!.KX7\8:=r'r8 >Gdtdt,Nٖ(V)S#o^wpob4m$1C`~MS#bߞ~gXxʂNү_V2,zB)ф AEzd Ԛ\ ֏ŦḲo#?U? wjBK:t;B 2ʰ}=fqkx UU]:5va/71f2>ap6Ζ:ӷ<GZrJ_x̪Jߪ/ensHoc{hi$|hY$]7;U=u-+Di.~ƻByd/uR?.ڞbfA/V5P{lj^++-*jN0US pk.[N Ntn?Ԙ7;L y^Y^]UW.}8IɎ2疟-[}DI#'V v9.wkdj;fa3K}ׅQB9TyW@lO; |Q1]?.۩DgR~R3s[NrՕ9S( ݥ'*r j0cFR"/ߢ%vV`W&-iU7WIHԒIwv~NܢTh`_+淊IDrv[M;WGrtKrR{kr8Z:Bܷ8h5~ cn. ZJb })泷c1Z#+2"ˎdUa֪fa2OA):\$yƢ'4c M }\'@E 0$۬IVur6_J2WC–H "K9R~Y-T''IYsH9@ E\BA/U#5dp+n|k)r0qg%x|:oqG%R.>9PVIP]v.ToIG`(M(r`sp;^;.(u~M]W?zDVw8!%!F;#D m8#;Q $?4YW[*9'>*QSJEF9t}J`a~nd0{"dPdy5$5=N_3ɼH2l'ŕBS vPWBw~+10t_@cpy?2(uXPMӡ@*'~YʂFI*Pwُfr SbTR3ľwiƯTf6U]S2xhKB9钱/\2Q`SNJr}(/C*!i6ґ5$S&hvWL< 6$^$?nI\:ƑtXOqh &[С3WQ#' 6T2oQNI-/g'.Zm[匵umH9YlbT $p=O2d~[nђj7^rCmQR;;a键*)ۛn5%3m=jlrDѐm:]3}IOv$v;wXLY@#{ DU2=:(~Zԣ \Zn;wOdwGI{T晇ϲ쎲|Wi0Q1JӬȝ;sbZ HI0psTB\$] V)ǀD |d¡Ӂx\EwmJbnMq4, <=/^/ f6dbŮϖYCب{γE°DsL._p _ =^rc;3U%ӗ-4DRN{~!Xb~(`ۿҮ+>mTJ^ZVZަ(|)OެǯLJn"1)fBi- 4U鯄jő Kwucz!ؽ*~f6wi`rpjyrr\t~' 8 eY<cY@H.u75&Q{)qN: vwM0)-eSoӎ`z;敠O0ԔcU'+mPz@.=3'3PL3vceK2{slɥo7DOBzt@tstU}6qX8 CK d'OVm6&$pzbn.kRP#.[:܉&?Q āA'LfؖР[j=8X> 弽ʍ/,*veI|UuE 4忭%GqH**ޞMdJwB{ sjM 5BN]7Rʰj"irbU<*EG9%T>Px2rr<8Ӕd[uTN;6b\Um$]xL,]$>Wlݢ;oQ3#!o01qܦ݇;\ 8.ºђ疸>7x\]0{*ESWB]9n rmٹM!yB*I9ԑ3pHWW!Y9 ?:織 u='u@[G\ϹEeN9B%LZ4S Uzi.srN|-JBOwsOsZjF1NTT~]y,ثiST2RAt:|*> `b"wB]!y(a<5Bbo 6 u^&709=^-Ob%0xCZNe!S]Y E_A]^+4GnR|rnYҜ;\.S*KNgkKд+ JFyP$25W ư"8 t%&vS;; oW~ϭNՇ ?2N7njW|IWcIpXQsl[*wiVpW]?K@K"q[:K<Ҥ(JskUՎR K[\vLQE[sK:U#8 _CҝZDCGYƧz=c3m{KIʆ+,<*hU[Y_ODjS"7ߟPqU1R|Pr7>gZsYzmJZH/Rz蛧GT^KsSc$O.a^>:Tq XL[b@SxjMM%`2U)Y~p$:coJ.Gqe)Z-~}Jlq45{vW 2{F 聣射x#_|3c%nEN=߫pu6"F'9 zBRCwG5e3Fl-.jsQo38jgs9{]!Or, jr7Lnuϓlc'B,Ч0=.$h\6ѮA"}v6X|8C6HWe) 6Ɲ(-242V=f^.ͽ哝Yn[+[Wna^ ,CJT hvثj)K\]t[w7i%χ|펜%LV<}"M*!˛楽JyEMmuۆWX<$`; +<%6'2p$ElKG&tg%79􋂟J}0.TWξQt$Βw?#}x]EP G-0mϔ BHM-?EJZ\1:p5֖(׫Ci0wt7inte\TPݝ8a3˾-j٣r*7Ջ*9i-,p7Kk%M@n^SiD"I1X~:yޔF %@R0ah9YTsJNz?~0ܴG䢃K=ޤS*G @Sdx! c~eRÛl;|ze.F׾y^+Ǣ7odWMi9Hې8u @Ot|jq$TO|~pU۩u7t@Ú5tJ\ƿw_%Pj(K 7"E[L␻|Uy|Y1Ǟ[j{vJl}~oM}'[Oʌ* Wa*i8 8YF ׺9k O u_%o%]H2݋2rYeH>|@I*UͨctHm \ۅ®,+Aԟ }K^ā[8$o]U*i%PhC{q,A/D);>4yåTЃ5hI ܁%ER\@ θfeujBh!*A% X mBf+z"sqt-p;rW$\PeB^(Jpb\"v'O;f[h {ℵ.:&gMKjXǿ򝒇U}n]R0X;͛{>\);-c(n-W+smk72-ܴi hus_ie!_@u:TԊ4J`;<(RRv_Gik4[5ވjvEJR6Ω |{{]PS3KJJ=aE2 <t#XS7jΏ,K qC>@Wk-#t2ustKh0O΂8| zMSpF9GuR04)ꤨ:elkg7I!1rmyMJZZԆP#/;8Jnz,`_P6AV-Տowy }fRc/3ӥǖL&sD&A$$:b7r6?5ȌʘUwY2t9՜hI|qaPJ䫄6q"i&4@R\ &MC +'S'`eyHS|0| KZi'zQ22V ^sǪ.2E6xG-  )Фtmw#Soߧ֖BipίUAK\tdŎPH0$-<,tyk=Qei@ҫ K M$^Y I4JvVpIYC^ <5_2jE=9=#tmj{CS$P^J:* Q7oBdb2= c0VRR ̩α`vhJNQ`65CY \}bț;rekt/艥"KnmF`d~e{pfL0~"(Zd^ɞ)ל+Y`\j^TkGO7iWL,}9S0EA|U%F&nM.Rd2XA![2Հ u+8l`Z 2w/SŽYSFd;-){5jG!JK_΅H2#_؄V|^i'|mKhؒT UB&Iʶ Z w886~r(YU6|`ӷt*jI5;r}zUtLB]LR/Flx5`TGmhj@K?<1u<=Y/]Zli9P" AL7=4\VMJIw X% []OQ4s=v;P,vLe(ɺ:7 uM ]_y7h<~5[Sq|(ByxiW>pUmM3խ `x80Y.ove(VpȚ.J_2H$yAтS*Q}*F pX8@يI]QrϚ,61ڌT(vWۍ]k>6Gnƀs/P d"ZK&eAfY Gs:gŦIkڲ-[)s_LZJe)Q9pYf>zs+W+UK 7JXปy$Y0Ħǧ5ҹ%rwޔc91/zG01au+}v0x|V.hpH)8-5CRG6Gd5e=$7Ijn8_΄M˄dswL9eey afN6,.tʩrh#2Vsx׭W`H omkmW><䘩-#9IfyU:)l⎴=M:`l'\wGɋ˂mbنgL"SPQ9󧵢sǹV,  -v׭3PKg%V$*%h8{ToR?ٟz<-[\֎_du},wCt._$k mK:7W;WOF'CS) irMw ¨o򊎘nh?|zU5"U;jeH\ߠҠC*0y/>R16 E~9=\meDF^o8RS+hsҪY9۱D$Io!M>0qU_Ե;N<(Z@"o8|,;';בO}E &\>:幒ZZ9y)AUfW P9)E`"}p갠G\ʢRߩ|j[楘Z՝Uď`t,47^Os,0tE]ޖ;] QfR}p5xd*t<\dOѽ/^; κB,R%<7/ǀSj_B$uFS ۖmM|yև֩"cꈡ;B\:~QU j#a: U~lD%BQtLǷpTӬ-*lD&XZnIpi[8EW:+:g}ۖ$# eҾDc&_f^OR<ח#AlPUY/۸ Ы;NqeKA2o*`~F+^xr\-[7M;H+ɒ{-9|/YIq-ľ>$JVG^Խwe(d%t;5P RIXN q [2 霐pKQI ?}SٕcHZp hZAQQW#@:k"Ps@ؤh.PLRʒyScB"/[+ArY;n^ﭦ0{N<57fgqS&&40zs|m[G(ŸĒ,N*eC%)[SsBUܠ/X;($E(-M@?R؝t=G6 oI,bX;K d>u,v5feIӍ$Wj_4q7A]-ýy]1 ܄}Im7_7oW_)UQĽS"E]t˲=} Sr'V48Fuak?.=GnJL2'WzKㇸC,צJQ8{ZL]4{ ܴ3І4M$y״JsߘG(d]Sô))v,xE~l>fwPl)(v$JX7ZvƴVBϕA#6ϣfnFֶHc  *۠BCq(+C$q{F\f40)VjZ_%jjx2uS\{lԹKDuUuTȭ TaipaZi/^$!O Ba$[+嚓6~ zQ$`R ACҾ~d-ߓ1 ⎑1nscc$r{ ]y I.EN_mpRĝrS,7CK+whQ(\u"˧vqfZL![ك*ND|!r9XFwԺ㜡k|L_ |/(U7 !ukpew2/dy dNʂ锹)J\x`6R<**S;SUʂS=j?yTL BQ`X0zԾ2Bϲ`>/[.re L%U5H/W̡/1Yҷ 2*m7&۵r;PfzԦ+5e7 j.nc_V k}AgrJ*h$ RqjրrTR'Z$&M@k;Y5Bq'dD]G8RwkIJ8OdB )iȉ73Ir$wJԩ 'VѭI=j,kÓ_`>k\HҴwSh׸Ȗ.cXj^-cÐyJycy< rwv"Fg+!ç޼ŭ#/+6o܉.(*m L?U|װν\ 7gxܻeh t3&:s+s̬GZXx/Xo?+Qs=ՆT@7LME<Yj))F_(Ā8T$ vnN N`5NjG|zB$5ȵJMGM,]s*lT{׽+F%TҢݣ դPlPVpQZ%t艵FYtxaCN4c3PG^D+29Dm#PW=g'+<G"n&͂jY"e!ـ) d<:wi|KԣKS'ec&w<+OFoZh^G4?6oj2_(FruK֬D?Y,,m$LVa} tv[_SVR8rj)5 Ta6T_$DԔippe|$)r:>$y Õ^ bOd͑>h_cKT3jY"ԭV9;< nvVũd>7UVca) Bo!P͟qJG;L4TB  K洊W.(KqOweX.VCƎm8 #8UWD#\)%= -T YcɠDLj^x]HW})J /ys&cF<)"nT7G&ӰYdNy!}47Uw7Bԍ @щ*3 $"^Y͸~j~P9%ӡ[Ӷ}b?gԙaCϫ9lXڒ*,BVz0_(v#2a,NOb%LTJԬcPU !2as~ $e<,S(d'STxC›/CVaeW[ @n\vZeWV#56:ʮt/հX{G//K]PrEls' uIu o T?gOҪ9J+ݔ<|rs."y9=( ꓚ wۀ!{e.b[AuhǰJyvKί2T0PIܤP@@mF؟=rC.\NvkkR8tᝒRZ9oNus鮽hܩz\%EBV aɮ-lmO%b rBZ0bG[طL|rJ>4&De54ԺqGE2ECՃc|C("^^1s*sP([ C&I&'cFR@K>3Y15A9 ]U1*/i,\yrUs<2ms9n7!«z,ފVn T#ՔQL ݰ :э{'[|)Y^D wKe%[W%q:b%]K\;t}ҬtD"Ǐb%@9*=WBQG{Λ۰Tn$jѵ)J(!ib7˞knJћH|Kđ0F_O3bH$|>5nS1AvQ:POUTY5kArn>vcm>fM \n7觤{P~]uUqx ̻ԚѴ`R{Ru`Ão/ B֦qJO^#gN $Y]QӭSʬEQIomLFtUC]]<$q.ђ/k eJM;#T}G{}Sj"{ ^UA 溒c55@xtxOųͳ /lP):0+C}+Fz.˫*f^wG,1]|'/Uu^r G2n-4j.:iC}n;20*t՗y},yc[Ñ)g*}l#:gDzUf<b;;(q@{/7eHZ j'=@ЂLwm6);>5 e[R4YmŽr^a-bhkhܯƋm~s*BŨU"S〓Stk4ά]Sh0ԠYʋ UkuU$)鮥t6X]@?MNJl^Jo}zRC&*0_ߨk2& Mo/!ŨSՊ:Dfˮ~[Qh T1tU+V[w)I}xh D)xs.;ըKϭ.-l*.-\mks\(mJU}@jO3Gxf}Qa Xܜx)P=SAwW5U+ |#HюVx[.u Ў#麨Dlt݂Bu@_ o^Kwo^̷" 'Ae)Z%$?#ѱLi+Da'ojzo}P*F;nڗX% Mnv.Ր_섲m(.T2.׮C")['n=EUd븼#Q&ܸJPI$}7brAjm%ک*>6|<R5xPɋWߪh:"3G?|7t9M[]Ч+<eh.s'i&aS\\t`[Z=Pz3Y p} K#d @i_TǕddž^y&:@;|)XIa)NJ*딱` 5kϬm0^*o'G2եˀh2##Q#*,P b""OMC x7gɯ]48|U~*||S}Y'Kd:0^b࡫q:ω03Bo t<,Ag.U5(It.'Q(50s}]9׫j4K.sVe<7˗#fʋ,G#벯.u=KExr(7U>֯eWt͘`%/!av4y awNnѪOq5.D E+ {]l;d뺓o%WfD8%8hHa]枵FNOAkۻHT#2 (\MMu3pȭ bS*~5 4?%.%]Cvs ! >b srb-[A#W+vt]6>x(i'<'wJTPR+q^^{ ,^ղCr&u$@'E5|ҵBp}_O%Ws Sk>$wx#F h$z݃}K'BKed>miTeTl&l^r+I#4ܤ)܏ACQx /Y_OSЁhN ݫT&C`MY*Zș2ZԼz/s 3"W>vEMl]H^(W)k{STj~OP,P{qm#O aN#,3L-zὸY9ڠꥴIR7!N tS*z x<:I0w=!le㏾$ cmGnu %3 'DjԅJVd.[ndcK:/cuy+kK׺[t;^9jzܩ /rͦƏ#EqyLޣӎ3Xb  &TzpROT]gؔiSUR%y/]X{En{.$ܹ\"Ja @ڭ-H+;uZoLKUհuWϾi\ (aoAG% uScm uu#򈥊:@s9x.RJYO-<
1UεZ `<˼eeT-nQWK=wvY#g"sܟ>JnBFD~/xیO57ި4ZE)e+[V$X6"o>@]bO şiq  ݣh6nf"p,-_ ؓ}n_pNs>v\ *uI{<*3N np*cS5ֱU&n(Ldɛ:.\q-m(541t;:as:8qy!qu?{"BIa:p6diL{%Z/fч(niʊpTw~73!ȍK#Uɕ['2aV|=J@r i˅;&Bӈ#,S~erC<ʒW4mGGK+OɈᔔa{OrlKHN>Ubs_BHQ"K@sګa(e Z?}/dRQK'i5X+ȥlVS;YѮ/^Jm_!\T%9<*KR mg`+E,NW(:]6U4lY.SҐf7?1ϺKZUq\(JҖ fXCo;vϹTͰqbTD{ɫRUT `ࣤU,%-ʾu {NP;#j=VWW(cπ.s5OMI!*ZA{$pʮ_Qb+}v]i8;4cPlq|scծ}mGGEʷ<* %+6h;+ @?!kV^CP>])DW7ϭʠ{(쵺7?yW^뚕Ϣ/v!y0u|ta(9E(2v$&v-Z 5i˝RϽiI9GxCQqJ%>&ϹwtRD);K9Oo/>h1[K?4_@%#׏F$:D5yCdgK.[6#wU"|ɟdеC))"WjE_윭sՒd%:󻆓CuG7ёf[;wS(E%$q(H<0@ttn=<8(5WiJt%{seG}K&ᗴa+ZW̨]7@tL5ϔ:x1^˔[ʡXox8{TѸPf2$Pu]m}TB.Q=3V%<{cSq) o RG+ѫSuWbњ.v0D%uũU,V**\dNPLJiknP(D?Z(jq[܊&<; 滓‡:s'åZ4AT: &ZzrmG ৯F3^88}9T dt{FlNLz.y5.'% pM(z,UP)Y &W*0$]_ʀ0yr#e 8Sg|w,Yȇ $nʪUQ '$}l )6­ʍ*/B|%ŠqDZ&JZyR0) j>$!%YSVgQ"Ka)m$#Z<):WRZ: 3zT;+k#*"Z,D斟0cm*P,}3~RSE$5|W*@Fb;Txiز7&D2?'Bp  iޯO y: <5l[&LϨ!|"ƌ=G;(Mx8R_6 x)KEOuRXQ,mMP@Mӳ$mݢt3)T#h졍+хܲonJ#ʆmG$ qdGX^Е ʷݘDKNݴWP j<ni$NB٪YU)e_ξ}Z-%vHd6o놅'-nhPō\"q‰crISڪ)r}57F!+3UЌ"*u՞,5nk'@荒ApvHIɹAZdIҏl@-A$76z&";Gip2*[j[yi.#QTJEush׿zp{K!vy6GJ8u4w]Y-bʨ#./SvgqNbȺmtrcs$֘BmۥPSSߥ 2OH1=y$AWC'w :-7F0JW@ H&*!T_rv.j"đ"+9r uy(3-\D80fISy$ 1w.QOe(-S bh]YANVu&Z5D>mbSi2R- +;ԑ mE#؅*%BD Gע7o|E^exvHidk`$1,]~K٘oʺk7!Dz/7`ܹ(dl%](uPZv;V($5Nv3~|b!B-(+)_0MmIZNڕ`Ixl|x˒+Y;a1,<(i*<ԸcJ.t![W~\OM.9> ԣoJ^ Hp0zPʖG:2h?$q:Sq x7y6`T+9zҸ.=T,aV~ezޗfd$L2L9yCP.ˡhn 8D/SćzR9oB<VP=-$U}BG+BjrmJ ia%9=#~wx~lTܧWt賅~sK7(Ew)|MX]PÙJjXD)1aYjˎPA'# _icnw2rBu:ةl ZU검Qg.r99n͜aq5$QJ}L:rx勾P 70W @Uʼned)B Ndl~ns7(A|ݮ y"5. .ɲli\D+ xY2 dGgJrEu;;%]#|2Ť6GoU$X]ݺX)n 6d9MG_J8MI!s0~K,o ULnn Tx(=oϝ}U^ܷ')hbpuWB^g׺gUݞ` )-臢yR2W[t >ML8ֺԟaTU3BcW?GFDEk kNZ>Y.;Dp3`noHmKYA@v:wo6m3h^}V#` 9=@9DžOg2~m9.j^؊vV췫OF^@BN}4]R\!C=ɍ7esK _S_J#:e x^[O׽cTd2URXej3_[dCi ё N^Đ"*7Ypk7{|"hۃ:O&Ar! 5h=% d Bl*OG^88Ưi[O(WPrUH7?ՆsM&-Yu@t^[rR]P: Bcid9}sV>kGʬC"pjG6RVnʒލ!)$h(M| Jprv ,yʙaSk"ټsm:LjcNl'IΗ~Zr;G޴]ay+jtI8$U3 z%^ƴSJ0Vvd-u\XUDb\];5$*;'Qu! %4 Q"_1vy#<|yn^gv~ H^F+#Aw34k3WT%{Ʌ8.geE4?:&l BVbYg~[g]Vˏu4QǖI\8IR 8*Quȝ@h\nzz @s!¦J/1q<!@'sd8+G͞|gqp"",zu\)d{}ߢ4$.='s>D/姾hq^uU`r:^8FJ>]Y Ntjueh0oO,f*4ɹaB>+] _q}IMNCD~!>X)E'p&sIgp.zi θ8.^#lу^ ZARdx@]yO][NLu4vkÜʽ^MYAbqQͺ Syr w ;{jh|q8VzbM&![QepDTF,/{dbG P*a;Cuab++\TO^r4̫e oO5gg2lن%Mv=8㸆zii>C1"Ƀ6>{x۽3ޖJ`#ɰs>g#E8K<;5V!!ɕ].*TJE>Q?O!YvV ̋< ǦprIK`|+|d{r!_~C:)č9'U82IM+Aj@CiTSIu]|G) ld>)DyQE U*8kc$@Ԕy婤[KSdRl3ܺYBnyZB&kv$t%(p$ x89S@l,Q!ńf;$?D}ԯ)(҉_CﭕJoO,x (9mz݂u]~9|tɚ_ txOjQG,8Pdr\! 3kvDu|| [\͟\b{~*ʁMI8OUﶄ \|0[]cA6"Z󖠰n62 as2Z7vT^c}^7exb;% vr.8Jۀ]SeM)=)첬QtiZvM@c'CÒP?ۤ両R2KosfB.vTRMcT)<#G֧'sMhU,R< cź(xZ|]Ķљ1M1l@ߩQo!]=$FyHfK0)?{"Y(w{ i4pmݛ&x%{\7%ĩ P}0]!jҨ[ =fnr/g"{x#+ [G. h>ؤ8oUV,WXܪ ~0-CpZS=Q=6jL~1 $D /;h3I=Ф $bHgI8q6sJAgO3ˆ|6ߚ ĆdsFU - W8Z1-WPg*7LZpםu>vVjWN?4kۭ?irR AK<=QKaf#~R-a{/|7>Wk_rkm}{ XU唼MB#6GN'. u |EWcHW7ݲ1@|#ްYƆJ&]!;Vn36OVv@Z^7)ӈz󎏰&"SD]N<ɅM}3swvOW=?6'騡.i?Oh}Gdu,we^w7S"|Jy| Q3x!YБԽ.Q8i'RƤ]\d=FBU{r洆'Zo{kN%8jV.;ŕ#) eUySm)La͔/X+htC5^ߐ)ӃyEjV$$}*q/r6+N&[}1.^ Ü!v Z:.2RJ\<)uUPCv]z=P^[ 1{wF ]1}<%[}54Hy•n :B؅`$#;M'ܗڦb!i_ 6- VA՗]|uW3\ AFI\-h_Zq \mڹiEp?G;kEdG3MMj?y {^ʯIl hx0ce f1o1l>ŽTHduqps9s6lW::lQU?;$(,hیn(^I["puiw4%0+@BD1u$d|'aXw(܄VG U0Ia_T j#{ɢ\_Zآ6߲pX[&5B&@ƧLct!RZy<$ Z%JݛC}~ KY/x-bq!ȀxDyѹihZ0#G U1pv bb=J2y0ҠLd%p|@2p@*BcL$4&$l9V`-T@zjZw OBF"7-`iOGpV&ag@`I33hn-עHan#نp0:me{*Ё:2pdYa!3-CkD'S :k{OסV*U'{ZN*UM #HXBS@XqT2eh",q_;ogm9E41~t\oP%- 1Mirc&@`ÑG6k4C74.;'us󄑺@2~;B)vFah9 - >( b̜d> 1{ P8:aؑwڵvJgCwp`NH'*d~GޑFSC`qECnJ@9 T:M;z+ȅ"D/n(!!|P혂Q.WuT%<6SEf$ ͶCp&(Bo2 mF?1xLŀ`!Jp+f݅DJFL=ZԀz,@44HP3_>-<(oƜ`er姼`S G<, blh5uc9$6xy ezИS3-Գ[{W$xy݀d4P++٥0eu)T<:L,k1)&:xR(EF$k)Mw*a.R  j״H3¯Eay)+MThBqUQ$Ee;BhA"HjDrVA?8fN-F2s&QRD`䅐|ՑmrdGS^2B U+t1gOT!9gT派No`Z^hYk,g{l=8y߁+E ?=yAА?9hN:ݳ@gf!ʅ.qJxma{3-x:I1mL)&_O;@ %Ut];SŎdeB}*XeJ`:i/XC8#m7BGG֎/L~]S׎> Tx^ q`&~z/:H)|ԩ=TU!% g!NMGBj0#a;MEL@:5npCa 9=D6G؞DG2>4 3B)F?Jm%]A9|#RE)Ó(CܿVgUCs̮('@кiP RHN# OD5 IaPU(cr[O H2B(t&qq'Ed[Hc Ԕ0e`i MIEGنAg h ϫMw&wCdXC|-f06O@é0tA~^V urD eH4:^Ϫ}puv3ږPxGA}^hlCi*r61 A4v)(b췥P%SN}7Oj8J\B%uSFGT6yBͦŜ;WTR'IngvrPL=QR{%*=@3 t\; #Jk.5 I#y-'i}V(h A w8LΙC@ ׀:STQ]Vq$Q0`+ J/9pLC #wAIGFE>GDW 0i΂NF ,A.G;x@;-=(llސ\I+Raô@;e]b`A8zne :JzT8tfe׸yDF!i7P[;y>gǙwWZ_.5du``2YS$~@zi`!&J-8)[,7.ـQU)v=S# ՖA̢j:wzhƽaԅcH|tPE?*(6J2fD9U 51 Vc(b͑ *B*qQeHVl4x eaU;w 5EqiU& #2<ɣ4+0jZ M8#, źʰe&+H?"B=ߍ^3j?S]!~n(LS6V}q^uj5a B*keڡȃ#X.k@MHaJC@B(B&0 PfTI57A֦sȂ)L6 ɌcP/EfdL.P&@8Xt}0&ZpsQSZ(׈*tbqi`iflAezˣ>ȸ(zE;Ưqh`)鏂nbOBiLsʊӟmeD"S!܆ 36.i 4BKIw:.ViK<怒S 9Aܜ,jꩧ‘Ka '210=|2:Yt* yXU1M_oltox'MOhЦӝǫ2Vc+>G^?̆uzvB q▅ +̙itYO$wl+6zH`dhd(kO )5g첊d:na%fՄqdz"H:A02-z{!C}#C,x 0Mr"AtYGSPK=;,AUbA.C[6"\`dItJ 3:鎹R'^nRn܉; ֞9E?:"Bp-nYDjm8'oeX%#qC2KATugOeƖmm1)Оp"HrAL9ƴN˴5>ni6C4Ʀ.N\1u9d#B噆 ?Us;pm2CeJwm"[dC,h3UR0py"xpA`$0 UfIj?) rq͓zZYr 'MQ} $dMJvt(+)P~z 'T/匙(io:Y;r0Ea2TZ`%Er%Uy[EF$$ \9i ݃ "hfu'R;cr (XB 7^:tȰh+h*N$` y 3#пI`TR|Iqu-"FYV_X̍RDZ: ѤP⃀.y(*0ɂ ̖-Fn^V{ù .ÙS㔧qڑT0]E[Rane!{>jz9n@wPgZt્κ>._H%C~XuUa5h|Қɴ:Nߎ,CCL -4CNL K##yG^Z`# ]HG "wф!XzNTwLB S*$ehD[1Bg6)b,_!BT BM# Ҋ/&0wthswz(1@H95h3KTr 2̢Ҁ%RvٟZ<"6ZcE: aF`)J8h"82RN[&0(︀pFseHQaB8#Eȉ֔Lf gR;>  oNd=>[hD8C"+l &P*m)Btl w# ej=JrYuxaeB|驈x&Ɔ`+j(ۤ|Wd 1ލ8bɕ)ɓJAQa:Rtvia!]%5Cg>}'u2[ -z .3@utu+N#!){2F.ǍLRUfR|?2uP498njba sz!hb2 ᤦ)4٠FwTX@X(gЁz ],Bzy*. RE)92S#٨!Bߐ(w5{!F`*ɾU\]rPwt2IG0~Gzc!пʑʼ->˜}X\;pQvބwT@\EtΌsZݩPnjuc/,VVL!#+bc!ҟ5|'@PgA\iLdFp0btBdQEF@9O- 5 n_lWc( Pl!~LSm*@E;]2*`29#a=mBg~P&N u.fCP}ʉqe3ʬhz#${CCLlaOm\o# k"c]yY|W?!"«h'K2څ :cR_`pA=~La|JwQK>S~MCnO&u_HQhakuKq 65KJ(]9; E&P+^g gHi7, Z瞧?Tp48ڈgՎx A-ꉎW%an,cjBHȁ΁- X4LXִ@dUx\k\GL6f᜺8=YӡȄx ZEሕe &tEE"A EiRAAH۰GrM(͘n9zFPA A1 civa _]| AG'5X:vP=TX-l.hNQDhty[(4/^# 1/ZNaDQX8u}QD2ޥ>=Iz:Fj#10J,X"Z%bA֖A~q>$N[BA h?h~z2.eRiIj1dß9k,R>+φԩcaԪͭdpeX-*( ֒@J>`Ng`.ȋê'v96#u)8dZe QMt5D-Ԏljh# pO 6sǾE7!5%97 1lmSn4 Gw$PJ' .^C]vz-iA+K&,2LCF*B< }.$MQyDRv Dծ*ijeXi1 )Tʰ#qNV'Щՠ{J|@&h;Ob6LF^Rq3ݺt# PFOG'z!Eyo׆ =nm-RјDSW#&yFƞ8V`vVA YhJв(?Bj-f4PBH!]Q9s^(X@\\b;bUۀ.E8H'~_4O=!PNJr e9]'BELB>dSAT & 7Y3yPYA½B}KKFwܝAWM-+ahG_6-Xd'ZEUv\ "C` ;@)GaK#4&#~3)dAFAt  &v(,*#mZ |VB]fd;I)OK)D쥌ZmZ}iRG(#;g&RX8ƅ|xQPTu h{87 CFHȟ vtC=h # .CJPLAPJJ`6[0P9Eb} dl<4Ҷp,0k!s'Æ< 됝!L~#ں獞%3Ds\ybҎ| \1K8gx,rܐ(^Mi:2B:V V! m JlY Et_I!tA$g)Ml0,CTUo 'DDJ$'Dj0uGLːҟVs!hi$w_C: %9+&QFjsFuCu 3tE\5\> RZ-)CH~.0adhGiR/MLM1, QN.}Yr"H|J4D샮Q}u4()OMZ@>3 MF~th񧎒yoPB{.,tсvj|E1f9Dq\xKNzO;mt69PHL6z}I VR]RZ/+$9؊[ 9)CQhpiڙtur76XQH2 蹖ҝpitbn~jD{o`).hMPMEEZOMS,l)jYF;:UFv2l6PebjI Y#$K caƊ YUa="codwm%Nwbueؓ?ar}C5J@":-PQu@|OHf P#+"x)+ 3 LHlkX `O_g/Vh%AfѝT`==z='O Mw)RN RmE@мEerx~!i9^|\O_u w8fdk3>9#_Ta(`Xt 7m>SM8 E8SCXڣ:8)=xx|=_w_~hzO>yR'Fj~[/ワX{XOOًo|.ჯ~{x 1='GY|~[O}郯=y[]}/Ϟǯ/{{{X}/uHjr1H9w˱@ jîr)o\5 9snJF "6i'"iĖEZS(T0:ϡ^ h B팎Im[LA0FZ[e{v cˀFW-x",/9|>RJ\i$ECgJ9pu:e&gFpH A!)u:,-/Oh4e$EH7* "s?$[EoQgJ#2mHӤd(``ZIڸv8Uf@mݷd=xɫ_}gW|ϟ|Gkoԣ/=ߒ||eұ.ԟ,S& }Q)T;BP$M,E]'nɡEU?-jKNӕum]kwۋ~cum^n|5/_Ǽuy?qEщ  "qT!)QC7,WF!.}P({O1YH&Tf]"R ܣ*8V/رS4I7*ٮ"We?BGz&o^ zk 3g< j欌 *bNEEB,OBԄ2"o|yZ1%TJY fODP-7LLj%qmK?Db\}>_{s{<>}㗯~LԺRFNEF{VzP+thЖvZi$(Ru+TdvKv^Y[;Ot?n݃I<g`o|uY s!j] B!S޳%hsoٽ*RZ(2zmLf3]!({gR3FW44_>WgC>^?7^/_> [@1t?r9]u,K%▬ 0EVLu :AyB^Pd4S譱ħ& ӄ'N譗gw~wk;-)dyx@#s2tlk@Y"Fskr `;R-3@@%k\d$ZD L^ɯgܴ/߭40>_?%D+MtMB,HA$dݘB߱[gSkӖcE1AQp2gt4_[COw5g?{]6uEfl[2 } ZX3ykE w4A$"FOQ1A6%s,F-j:^Ni e[#_g{Ox (4(ZUP0*j#JG}w JM7.y02dGF`!Wk<[ YxڟoſN@8L'm Bv$ـf97ԢB|&%zEB [l9tnW^}z݅,ݟ zE u ʼn1/07.w="t.=< ]:WTش7# |4)Sm_/7~>}[~ރ??~w'3ʹCŤ~[HQ+/F{.pqZM90D$wt2C!( M'_֠7+?yɇoދnnoLΛ^K4ܝ5`dqClP_B)'lT)ޠqOzįHAߜ”DGGA}vൔ1/D( J u.9/fSpgݬ[TpC*³a~JsjYVӮlWj;3KzYY:L0 YTl;ט|u 7Կoj@ o'{qb> E93( Fˀo49jvӕ"X}G7ZKڌ- p{z,즟SuxƟuazpj ]{0^JoPDZň豗v-[A@s+SHxC^w'}DLffv0d!In3g46K[EWhB/ AO``+D.j 9քjLhY,ʘ>h Ζ㣯̑j"|ɍTjڎ3%_ZBaՐgg Nghn VB;9;Nj/R]H]FAܹGO1;SGW3'1CV')v!/"h3I qMV‘UN'XQ%KfL-0=rP[j]#"ΆAc$w`M5B_Q Ԋ@6CNR+FSDO@k27mײp(8UC1ocLoJpx adl;{A]#9 #aŊLzɲ撇P쯣;VːKK__$V`\SA6 v4.Csѡb ctqN 4!{5mOKr/Ex q7 t'ߙ?#B-=Cl&rB:-, n PDX D0(u?8ܞ0QιLI:#vLaviCѫ*`3p5"0e!P"æ0?Yh\wo)z;ym )G׬ дODSb8:Pp}׷\2u}6>=\?UPttC( w u8Clw![ϡ1h6ZkDK.G|+߯uK{2{ IE]X-h 5۞sJP* TH&BWqԤ[-So~.#xɊI˜#/q;Z4oưN:̡5VȌ@(@ a{Hl#2o!o122+r6ep.s26&"@L6KeZ. 짜^؇A"/Qvv ?Tz"\ˈYQ0,C:=F9ta |\ UF=!2fሬ~\k^y{5G?TNONx^=z:6M}_p]\=Ïxg]8 N#) 5p~P[8W;AID)_Xac w4֟eeu:k W[E]n`%KuYPCjrI!d)pi:!%("|2 ȶd{NpP tx{ E7ПfF䓏?}WܳS^74[cw 耭A0}bM|: ̸ЃBN,ӿ騻˙%N !""fTc.Ц0>y)5`Ϟw5{sWt]q|#:trm5*. "pa[q{*#"Ƈ#BǾ@=ա\NA-*ajn3]?w_Z2ًvhxŇ>,is{y? ZrXw=W'O=/=7|zW~{{xPۍj C}XA+2Mِ0o7h(c] "V7^1WvVׇsu?''Ҩ@OVD9 }`'/Qޗّ!q 7匶Q,8@s7,+MCϣ^_'3-c@@*DAQZҹђ"z]П0E" ."?|v+*ґ jWakdīQL}v趙_& $U( 8Pu6_p0ٓpGމi84QFFG:u"I!P(&WW |sA0x4r$ ];EoPU}?v X wϽtvMih"BKo6XڲQ2!v+'&2C0FdK.?;ǟM?}[MP] BfRЉ; 4uءŐuحː^_RLq/y{dog!$J# tۡЇ<#b4 ."^=[}Ga>2] S4Xo#wΦI,7b %Yd`@E#t:<*tFhpbҗ)GP\D jȆYEjݻ mO _~^}^;^^|r3wƘ>"[a::`flR(z`z3O}o7Y:9 `7(B_#|Pb2 NASGDu|9K 4et44L 9ňNi7n!W/В|e{(<لM x ?}b0pu姼l0c|d-&&ļ 4bk+QwmgGߑ(D4N,H2B)#aurhVTx 41Y}M2%: j"//+T@ zeK6oTEi ny.#ZpE&ܐ3p4{y Stg%?Ti@H-")%&z9BϠmݖ'G5Pk] 7N^O|xXWndTBxL5: /)% je$;PȲ;ž%6.hm5T=G.GZ8]hoF]['ϭ_q{ao[\xDSm!'1N|OrrhS~.H&!4Ad]H%G;d"Ib+s :kq5A^F{$G/X' 7^{(`>4 e,p rE\@ך)1S']!aqFrGSmrMXA׽I7.[]O=+\e,ũduS(eжܻ"Ngn SoT)&r7Q@NkiD]WjYy{::YGO !z\3m$ٽA%(8PB蟠]Gv}W6=ru%n]x&|8 /V|_ѽLvFSg7\CQH{ (f àuEgKIHdPogX9HNYYu\U|N!^3WPoFF|!Q rv-Xe=*QGy> tR`GU&0ޥ;)X/|7\"`,nhYO05 ɉژÅYb&Y "qSdO{P؇q67uoZ1?g naIucurF_sʾfmB0ZQtkjek-.$5CMS#F J^p1A\q]ӗ)-<ɗư%jc9BOBtZ9/+Bs@Ȝ[𻦾]K^O Wi\AF-O6;-C-L؊Q##GT*iUnz^TgJۙm_ y.ы}bJPٝ"kepnU#:!bn"v^ׇlc{쪰͕_9}T o,R}E5Q. XdkLhN6CVP6 7c NHgXF~gkNmZRY^!p +gaNֱ1'_b}YO vƍzÏȊvb n;oվە%uQgcOzUD뒻,g _;|&J3]ۋ' Y1oY-dbACE8\q#!9p-epl,2I+k:fnucuyۋInlo?zS(ERC;p^DF_!dXf&!9JS򣭸iM#h-4BzIikow& CE7\ئtF2q2@!afgl豆Wrm F(6ᎀ詙^?֑ Ә^rO>X'{p{cn/4vdlMj1eVJK?dBh"+ّi qZ?z94Hh5" /ШmN X۪ͭ 1 ]7ݙϚ௼kNo0-&Nޡhnl']xND߱u5{n ]qU$%ԛ}UdV(e 9(㝲o/".St ^a![(fvf¢G5})x$77WT&[ҧ @w]H k|ؓg!$#__-`jPRd-Su),$~<̚ G@^E$1SadJR# x7N\WpU..*R5qѰ&(ÀW[hRD*vB6&#LpĢXW:} C }p,S})Y[!qr(,; a]x6E4̖Kѭ;?,;,XVѭ]>);# hn쀨S{0tROdP+C AE4 te(\W`N NaEŒ=C]7z:|}V([ <34PI s766-BV*隩NU3zoho, giuX-ƪ[NZTmeW 9xrCT]jgAQtl5#2['1¹ױխG(xRoy-L.94lC9s hdm`e:og 0h'3w7yS4kyuniVRK mJkxVk㧏?~t쭗 }?02kmXE V4o>ԫTIZd=]Z lLEeF=tzZ?vx6|m^rmΊ]u5c <,ϾrxCW \_+Zήp4ʽ+T`{k#ZakP,ĪNzz2 T|7mU&2qEbm׌@W| s)w'Lo*(-]Ч{AQ^utuA-4*Vea3˨uTfI*PC3 2^[W[HY/)Oݭm"Vmgp?3Zp,Y~bΦ%eٜrW0F8G?1,6vT!bFK+9E:#6 TJ8^&!qr` ]sm3ÕN䩧ݣ1b3lGrqn_@d-ZYpGȌ+FI~_#/9lr)NhE|.,UU'k _IyB m|?;1:vI"h }5CReљQ:ޙaWsOYB=*оGaCXch-uE<^?fG(5):t23 tKer%-ݤHSzsIGG֝ioV))/qOa/PnaT{o=h'Пue0P/t1긖_?N_ D<3\Ђb)mtx*T \rNЃa+(IEhYYAL C"Q\6tkki?ĥֆ#Q_܌YA^d0B޴~tӴPwu'>u.~pX|G{/G:`Un#MЌSn2Q2vNA&5C \Tp&Qlۨ lFJY"!)?6xz?~jxquu{c_e}Op"5X YβChإ@k μ@C`B2u XQ@1 *%8݂F]&5 k+W{[H &Zdzs˞. Og(1LJp{ebg3JJ!eE>sUYAnN%ՠҲ!VFOO%1^Nq\lg55)\IG-&p pj\R %"gmڂM:ci)2*!q \wqٍ۞m!M-V+)i7M[A` `ð׹%O$["N,o2yc2.V`GR3|eRU`INBSO9\{T`.BIޜDү)jۏǺǷw|Cmp2Gf#gaaA5rH =n>-A] n/&׳WmRmȵntH)eqWL†]wle;1I9[6h/mm#) 1P󡠺P7fpq 1^t!vSBy~*}K:NaS4 1m.}F֤ ?mq]!*k7"{[P .6(*'"K:h60g:ϗN8$EQ/XDUE2(bfW1I&~y΋w$ 0^}TX1,|f> +Zz_9KB X')6 m1`VBm:%e."j{fp.;30L5ōZ/YM_uL檞oM㬛;/cP{` yt)[y(ng4ݸO"qk)mxW4[A.c$oR.؜O`K]>3 |d9aE N0!S]{B6aؠ[n ݲ# CJ9b5-`pnPp|s&Es6 0)Udڱ.Ywݹ[0z/'/LhG\I~Z[e.Rz#e8=3Ғ$s"+9Ɗƨj5< l¶q~}ݽ4­ c= >=^r{G~A_;}__λ?>yxK'O?û}9}V 97#Q+r3d[S(ʎƅTNEOJP& 6&U&'G1mdR(#-ėTt#݀Zާ -RX[n#i-RO]6( lQX]D􍊒3(q e9q1{QQdr iu{p[nhEr3$Y"SԢf$#Ǧƺ[Q7+л"j(X%r, p(22Vr*8gї7]eZTAk9B,Vwm4S j0 4M=8Ȭ&)yK#{323o(ְn$F_&$Ls{}^]X%w yʩeͣO@ƪXpi^ã\OH1wljSTRGW[jDc3izq[z'VmSX$b?ST8EmU1PNMWZ|CS@eVpR*<ĥW ZA]U=n \LXܩu1?>*ZrpHl_R]2bJJaUxMx$,?K|eff+7I^Ztk4L(j^3콮5˨LQj0!^,R8n'F[%o9qͷ6UP.額7ip5h@X^"lcFca8D"=,Ygj:[s)AS ٖ gZ=bgǎ-11 [ c$Va_J܀9޵RvP(`A PgkZ LuIR6H;HLўU&vP[un`2Tf&D `, HlQЊTt]0^i?gzCݤ5݈jHY;@"B3ʁ[$VT.>e}zM<%t>oݽxTnlTfsWx/QG_ N-9RhcޒypbФr#$9A͇r8IRrQXvV{1b7^G)(r(+iuCVio'4|6z;Lgǥk%x s;_4UK2櫑IucY81`2i:*^ J4MeH jv!E@LԼiW/sݫ_y<^ūi$TVnl |YMiNYVȒWԈ$Mw;+I`$FeX. l+H+ʶmKΤ=[9k?^ow,w[//dA#%K2 WijWܴjy fT r),ڬ5/F# ꋔ؃ZTn2>Yehc>Onr7~ Sl:X'xRZ"k1#ݹ@l+SW{%ە/F''_-;HasAŭ%:WmkvmU`ۡb Kn 饪S6G%ht$k(GBZW/o(ొ"Sp"&|M91GRrs ލJ}~|_#VozW\oA[F/7jlSJ7|$H-h ְC7L$Ík|nԨKv0IBLR~27;Y_pXa#(\6}ㅼ-P2 N-^8)3\}ց.E8iIY~Mbb*TdkV, 8RkZ Э%N~e_/֛7?1o&M%{lwH[Kj\?he"#8#|1Ց?[/՜u8{Op%׸%^|Rɮ. Toʻi9GGz DNXR H*cƘghapSPb#gkRMviJJ6X\FiDsVzNJvQ[awsUW&F:YECXֳFn=zOp= Ʒ^G#?c%"һAuH@er#԰uNS:ikqK4 /4Cm/o{^i4o7GmǜV@[M+>ӡy썚yFhFS7a( G`kh5+iQ麫Ipi^5bqj;aPlQ떰(Z LXRs4"(m>Uɝ'AJSctkr]d~.4v,YCB[A{iw{}{xQE4XfKb %jNN],!&ާɱ)W@죪u@$Xrii]ڡ tn-vxmD|e2l?@нDҸ27:iVGx %i+R1Ӗi# d:u#%n4x~绱};[/UN8=fc_1`|6?ןaO2Mr{ -4"'j ={q;I 9,V_TUZU0 1qobއγ?=XJF}1]w^VMd_qxmdt//EwAgM Z4x:o{@UeIlF}ͯW9 0z g8PUL*?p8.Vc:1y9u-gdyx1ըn'qNT%7C'v\ۜjo8?A}ۚ+@Qwy2ne =WӃsa-..˪[CsmK-qB?>-lxBVnjݓ*JpObu)VMOƪ=]CFMDj1M+bxVZ !b4Ox`Y֝?VCˣ⬝O{)w}pw=<Lk2lc),^(ɹW+x:d%E5)'+^:@^D=Ǩi~Y' ~:!O~yKb{Ww/|kV)aWZ Xk8ga8O{)#Ih:t;T LN QնqYPٵIV}֠9 2A;Swxx(q 1'໊KUTL{4bvФ֪҅mM3iqUjV|vy}q_޽yq8027 d|PF;(|uY1y`!=-#`a%+/'! d-QZƇnPT>ڲ暪 8^8ɜC3f.vCE%J] {{:}ȉƚHjӌ?ַ -ʊfM'c͘C.f^11r <"0fԄ;hhj? [`MV$?6D8%){ʐc>:Iq U*)ζuxtnp~¤VS$Ў?KzQ*%@>ůf 7~~)}Ꞻ0ϪJ֬\4Xz,5]Ye;&9hP fKovUrJ3S#_K ۆx];hO'~+d|ɾc~w{O/;_o#_}O)~TX~h"$\3]c|z=0cЃd[c ]<q1¶I}5檣Aq=5 jHzXHR;bvIgɩE]$Xu ތjG #ClUm{II@1U *Qfa.ض}V}5=ģ^$.bM̛ Ú:5KK{L׵%5bVeV}IDKL RkLa'U ; .~mZdL&bK99OF=&YX'JVvl]. Vn:pS)( = m9M'X5ME+w$L}y _LE&eVG OA |GfO\pJ8/n4{C9g~k?w~w/^=h$MpWe ':=; \g1c/O ٫L:l%D#b54-owL.#JPŰ|:.luLT#Z{=lovW{ `Ubn:T\+W*bB[p-Z%B)15)$#l5Z%xs՝d,Uy0rIDždJ\CWM@urHd9!-f3-3;R]S+tuzO=Ҙ;w(\wUzyoFJbU`C_ Ý]󔚕)w@rk,U Q.O+!/g^G)6?ϧUB].TQO%gil7%eW ϏU=~,6Ä^%;|嶤8_%>YͤuUNs7(Fۃ?iGo5hv34$wȿ\ơԚvZ@~|;VثDrmCC4of1J-I$@Q2(xKSКu }y l^Ѭ7W9Łl[.]RkX=U4xHr,?%U7R$3_-k&Hű1J8L6DPp(11 D?zZkZ.ZKT?iB `>wr9B|ύWZa;fAR?zH?&ŠVc5x|@xoSm4!dYi mvPx:X @& Yɷ V{NYU&_5j:+F'8TI^5fͼ>kYƏ'k*)QACv@{~&``+KɪI>-(W Uզ&\Z^#VUޖ Wv7LTvt]n#h,t4iˆWHkv+ U9F:nԺmK.#(PS]3NR8y0֏^,bpiZAPˏK;B!DZJ}I{/R&h8FÖj\Cx: n)a ";%lsuW/OY vҊwjn͋)PjG,-Hmf:{%,в  O=ȨD-٪2ʆGLw'X!8~*dT$Lz^|_c{Q۪ھmj;]^/^|yevFO:O:O:έUFDOEӏdqDyX+0; X:P)ߐl$! U6 9xߖ̪/:R$.5CG9j'Uono8]̷ǫ>kzxS \EqIU]M1BR^>U= %%2jJ/u`یcjjbǭ{|Og|t m=8 ޏcGm575P%eC20ZDݧU`Δ7V{Տ4d  3_vnO~F۳Kֻƥ)0Ti+"jYM'^XAR ?^%Ş0z 4m@oLopW7r{~ނsU:±3nx+#;ZXˎ2=C035nLNtgJHJL)*̋O[MA4 CSUo.* %{FQi\[ 5:O3qaf Uk%g?S^Xڅc4p8U`jybrõ馠 wp1]zZP hĔdxfa5B?.3XIHE|fFVHLj;dPGFwzv /~.!lQ 1V J.675z  = ^S{K6{* i+hU]T5"ǫ }/{?]qLݸG5VlK"nRjE G'yv=[ʾK s&s SmTBp^`M]갃l5xqnXn#%i˥yr 碰[?U_[m\6pNxJsIcC/Փ8 EVkbvU"Umms!)nT ͉[ʢIqҹ㜊޺Q $Bˤ r%&͆4 /vՂCv⃵7Vl:p ֶ9!$ N5gS5&묁Z9-c||>1l~+!MOYx.u~۴4"J7jI j{S.8|tڮ~ek` a&ybԶMQ ̹Q@R 04Xo<)4x֭o4'{Hj8K31dJCA yH`( =P%f1I+2uF93v+Z_=;e&6k]_ @, *{̯3o0TvW$*"_e^iy`^]\3cAMAMdαJ$yEM*RƋ{s_EV%`'>!UFw\4t{}(h׆hxP4l&I8YfpPy˝aBϢuP˃5>Άva*v'NG1HdGp]a  t~-jL!$$9:0q);gX>Avaka{xP򖰤zz3g4㣈Y\I=E$cUR.V*݉%*uQu y|Y|7{Ͽz-^oV~_~/YaA}K*Nqڶl"4-5wpl9Wb=P'$5hh {uq5#LRvA*[Zjfpz5Hlݒϯ*;YGINpwkK:SGb VpKAQ^RY*[FJL<&[`Xc7Hl .)T\oUapߓ"\`%8r5LN4# a 1寻H `vz,ߨj4UqH,=D\e8lK:a00pjfsD sHIOᇔxXd= 5[  *u|| 疘BCߝ#+n#&6 T&%&!Ic7'( i-߬X!䌭͔l{}HCh1Gc?-&x{ZZH0PBS[>ed-SĎv>JvŀgCXiC]oĐttjט4Կ)uTVU0J<8lS^9J3KԠo S9 "qe@$aMs$m..q_gxp1MP}%x'9%ugO!vb_Iwİ!5xb_84Uy8&)_ u*PsڻJf8kBdl&Nd٪fZ&)`8FQ{ Csw\ڡtPTZ`rōX|t#ܓ}Ku-̋"k\B5J W<\ FHFPǕ^ieb#xBwNu)JcQʍjM%JAѧt4 Dl(kүW&i4t|\Vcvh2X2*UbUXIw G)5 'ܽ hK%ȀcOrJ "OpRBPc9qɿׁ/_կ,zoRQnkW4z €ybZf[  < _8m^ qzrVwܯ{ X #a'rj9e$yN#;<+H/\\=d$ &ޥp1IxsYԴ3}?rcC3)51kSy?I n59v(+bK=T"nf iϙXx*[Ź*gQTFi(OݰF)73Y:UdoRq>Q.vB޲,'Ev9[?7'ַA "w$T(B:YE҄ե?jdW!gRP`BiԖU*A(m|swp0D/A6jZ6-Z`DtIxJjӂͻ4(+jJFqǔ]-)~zqkaʼge;L1E*LT%kņo`_ :c9_rqoFJ{V%QP?~Gh; f&ݹi4tf7D;E|vy+Fho#se W*$&+tD~t $“;$Uy"naDlf=s A =?R'j}JN`vװR더4s8% ̤{ JʳI)(jl!, mo=\Cs-; ڮwD\<C<~LXJw`x3=ƣC3dq%371ogthK v'#LSdd 5?W_7RF a݇Nrua/?{̑r p\|F&Mpj򰺔%h{A8lcgtѺ Zq~`Yj&R?=gqrh?[_^ovͅhc;"ɂ⏦R!ф|TvYM g}L :"#1#l컙EӲ@Eۢ>,JnjeSy󴞏H ^UКܧHHWZ 4vWT5X:G)ʾ5ڪ2D+W;URJxRJxRJEPJP:>v UB^]!)JpTVl(d|jWn^`ڼր_4nXuU戞b7~8￘]oXuSl QP*,I 7| f@i[/b uUux!QH^<& Sx0Ux*c[u lb*W50."RprR3U{6$ik&T M֋Zui/;ǨxK c-:0κ4X$gcXDrJGw'nxV s3:s7m}P~6nf+7g~_Jϔ70HT5mR*u|qZ'jw±䘲;y ܏J/&C=~RHV_20Y%6t= ט٦}dwv82nU[ՉZIk.Q,lUhY&b[\eS) sKiYf癪sWĦYu){X[қOͧϘl6hPC  =?ku*{{)aTҤ,4an/]0 U _Q7U_g`eX+m`GYͳL\lFSڇ[Vr#!?|UBj}0ɤol6U!*f[c6VG<Eo?r&qo8ًCAĠ~Nnbio:[/m{~zҽ]vjjZ\_$xbQކHv ;GZ|;M gVuYG92sԡ8HϑMʑX`Fb2qv8":K-cn4[r<~ esTjGx;́n9_8O\py/nfW?©#k槞'ϜYi0[̻9xN`W7dŏԯV,.NYii%|'+wlh,V#G/*fmmJt JsM8\4lr@(85n'M|*[Wz, {$[ZPA΂0%bu9/Q㣖DæwQ ]2+rE 5eNftk<=KD(tuAPT|+ΧƏs:5Tc^W/WP4.o<_(_w³ o M N< V:IWL,bKD9(r;th]WXo"|Վ (9M)衆嚝W]ؒt82V HV1k}٪r(,'Uu4{?v ݺT!q('J~[v} zM]GBOV r<]S,AѥgK5Nޫ+7'(i)IW<Fbu•g1`ܮT8T+YhQk Dj ScGU!9-أ~;ݳyw ^3% d*}1^d ` CX@M<[m5Hm3H[ク{e{Ovh+crvYX J;NAl\YuMc@ZjYs4V m0QH>{+u;Swt7z8y~WR$k@eqQaSց=$_Ա5]x6@pnl;s"@JnOՇ][z6#^_,AY}y|rV=p W5n.ˉۑ岺?=U!*>*zNZ_ z+NtȃǨu5[1]z֜KcT&ѐ*^& }qu]ܼ}_*U&i{NMN{wKsO}3/ya%VռU?FpEٌ4]K4RJo!:KZAE@sV52,ҝW_ӜXT·G 7^+y@#zCl'J%65bjzڄJ>9HjH% :壾]SK Ū) qFwϯ^g#ty]U=u9-Bdxib|Q \3<&4b {TACWRiֶ o]fUݛ|`Wu_/pgwOU(vD+C<̶xoz%z F,E0`2{^!9N?jVtPx*-<./<{ݗ}hKZ$^gajs#rlrk*:#x%G4XkkDž٘Cw w:5@}wD+,xgq.p0Pzv|QѤ áHVSM(3ЊQ&InC/%f/Z͒k e,+zW}1ӓpqM@ <1|sh6 Ga%9(0EdZtiќ(IKC.bj }ӄ|ԁi㔰lbiL@aasS[?`Iqxe`/3xFn36Ô&{Q=o~{]|y%[S<8Ąe&\W*8ey59Uד|ZΥ}`4~M5^mk۶ Pn~Olo׍ٓ?4EWԛ>cTlguQz B#}v2}Խ%||طJdkf0M39p1əH{g'>Z[u&պDV6o ISE$DLwYU1ۦ.lǎiu_ !axjXU5 yqx~MJ!vJ`1sEܭ-g/?ZWAeU.[j(BLfݼh0f)HaJQH@B@7С$>E[a˞v^(۶o؎f;Try/ޱ@tX-Ps~.zI[0u\3H)N" JP?t6ZS` a[kLC9mB &JjC0sAwcM~ E)[\S pp&˚.J|:3ahmWaVu|8q}MjQ,U8E8 kD-㈹D ï֤mQ$*a%2 ʶhJ;*0Wۇ/ò =ԛQӪ6[ 5rbL;h*sXof7NjHr ĬiYE^_R]ǩۙtuD%Z!ˁc/*0-*# wj3*RN`*uW>W#KxbhgҤ>}"GĤgJ FM<* Sr!OxꥢrVVE.y-JMKFj`rw _.LzoH S/^ ~SEKS8_xbTB,B-pO% 7:w.r DV?'QCΎ֤۠'u"2Cv3EB|i()"Z)!Čh9DXO. ᳐sUG7Hq(8[yC of@i!`Erb< %kӭV̇|TBu e{>1WNҁn$+Z]lJ(zkS7Eָ,9wlzV \\r`rUNa֙5W9ƮFXuuK)C[& >cCP<ǃM6heKH I@ɑAFkRo(gpM*v8[:_WL+'ē|2gn@]- Y%o@ lR>3M\ɑr?1 H'zCfA?ø7(IF x)?ЅleNj`PQFiP(xΛykeY@[\/TIJL g(H&*\Sp4V9N/_Mzyuq ',[?Am85X3}֣Z;"Ө$UB#LbF\ ƩUyTXGaz|#!Rsʒ3q +~/V'uJmyإ=Ec-Խ;#d0 F m{|PrE{Dy۟ѐej;"&(M "~Ǻ u7?*.g.զz:@{kioRڻ7PNPx`0/t%Y\kWMf8=PjP+jT:NNa9xe{?w4!sIš,-%3nTn; 5 MХyrj0SAy`5  \c~gB >dl mGknԖp+^Ʊ&#8KlVQҌꮜ0їw/ò/9 xwϡ́ҀqkB4l=\́01x%2G,랡(:?Oإ_w3FY^WiXq3vV]Y0%ƣu^ڼQq/nHje[ A*܂iIwQU5PI< 5xȍ/)yѧ:_:[@W՜}*JD5+$ `sc>ycZHB Dbdt WHuوXWDz[ D[K7Uj&3XԮI S[[h L2FZ,PƸfDp> sl9ZFpSDžmUbyjt_o`U'^Q 1+w0LBLXI3rvKvKe0HOr|Zz ch~@L֏sݴ~U#דWvɦ!8@/XtUB׿ yoB&Ȼo} /3ӌʾ$A1{ukӨ)Ÿ p ʠbj"tnɵ,L6JR^4S3., AGz'VÏ`>7(WՔyiwiY]#],@-›@8M'ˇI/GR݇R;5'9>y2eጓ$dN-@nVkssswC'4IWIUg}&6쉝h3 \kMk"P~h5[8-ӛTB˛&9uĜ Tߪo$_t_鳥U[i@U}Ɯ+:š !']"DX>gLr2  T7?z͋Ə֋w(f;_>hwfOvgHġ&n%qӫ擴lA r#GW _T ؝4#euOs0yJNxr>?Cz)G_a-%!ڭHU#(bO桃̼]^ζ [-'9IA2h`8%O6]6t8Wo޽x^DvUz_9Q PJ7?#1 . \z1O &MOi1&H  nOnW _HFIPbw^+F? WV``î>iMk,mwE!4m2 wT) go m ~@x^{ǪS[>_;V 0哕 #3T.ӱ= C <FUU?TҐAR9{&.`.50`;$M&DVuUTCΪ%c]b&T[$Hǃt3Nnx&5YI}$dHU8y>}w^{!|wGu8s76LbD!-d RҪ!gXqҥ;6`$:l,v`],{0X6*m>(ҨW5if2QnGUB_Rl6ՀLncه1Y@/v T``p*}zw{̚믾B,^PiZP\8-$c\t`K ApeCD3^V@_Bj.cO2g 4|ӗ}IgޅDj8õs >Pɐ+:^ُ)m=ŌĘyW {\g.!U#G|SvZ|M#g'kݾfnIgG1,쵒 qcgS+ROY;Դ;`*:fՕG6T3[I"lidK*.m hUhsWmW\>DY&#͎Nq6Uړuܡ$HajG ZѦY 'I]}:et{dImoy^{~YVnj.$:ffk / lJ Rw{̭#{"T$UCN-W`JrXI~@cXPNA,tΔt{I;T=u=\m%?mǢ|'vs!SYДdİƊy0k^+f~be S Jˍ@~Rv71#~Lۉt*:Q:&\qz=vX99CpbRҙÐ٫{Iˌ*X*BR{K*u \ī0[hnP,d9 ܳ=MG$%'D! lngiNN D /a,n-S'J(0$~Bxӳ5ͳj«7o//+\{,R8'-tf'@ \@~l `6BJ`"Yu*&1 H <0aV)`p|Z1~W+!Y)H,Ω=Zs"&xIe㐕lH'ke%7t<KJ5jDfsIT1@grQH%ӃE| 1y>P bvNmͮ麘ZHjN FhaYs-qs'O㼕n9P5бH.YE~+tdifS4&tPϟ7T F\1ﶽĞȶD|SՖG+k3dWuM~n2x ,M'1{)2y+8e5c-<,١7Y*R o*c.2 FN^Tn=ƖT%&QC^.W6+J5 rOiƻwoo _y Wo<㔏#'~u `I0i6ܨcf&yD:ԩ5t;+=Ϭ[i$iCLG'>GUvB׉Z'&%ݝWIKq-7^,*ڢI=|`r_L ^L5 Aly6u%NwbAdX<3C=t-*Fudv1lEXCtau/0Q%ztM}U4WLbc ~ڃDe𪂾Ў9T)!i_de)/Y04:ḻ[lKjI a!x]5)>ht@ T&b6T|tF|X&z%"}0iScvli*Sr zR]--w<6fҹϏۗo_͛۷\y fw_-~?zٯ߅ !el2A!p3֒Ť> 9XONvOڠԟ' MwIެP;w,9u?(vJfLeN?< PVMf?+VTYvx*Kx/MQ/[<6`/v]>{뛡<+܃ўbǯ=ЧSpIJHv/Y5Nw dNu9v$ upE{-UaKkz߭[kKUB!Ϙʊ kyzh$Ii*ik-k$ܥ!H3Rihfsfz^fu=7q0 ךhEU(z2dC{z챫NofY拖 @e.3jU[b.7>o7?@D4ˤ\æƪԯ2oOw%Fק6(w@׭uBkf ).]{mBPg'5^5,[H2lEYYy/̳ jb[ <rԥ hVjʰf_/ԕ ADu*B=h)JlȳRJTYe,XrG$ |4H_2v̴AIK <V۷7) yU-9)ůlg#KQ 3!ʅG"yn] ڮ:Y#~n@z` 9sl*7r:;/ P^u WNA2+Amg `l>(׉Q6$g{{f'B^s&pwh|j9jm@Vӕ{~X vkaH(Ir s/z^Zo?_/˗g=oБ?pYcno~,rqIU 0NǤUgR]}8x">U9 &ݬ,5B~,̒_!H8k-ȧn?W0Wi,)L,hⷖ=]Xf^ S [S]cgTGod2IU=(w>׵CO?r IpƓ7{P'#S-w9h   Ҳ ÈMC ګҰMNHܪbqa{~S'KIOpb˝"zNM|X̹W$th93d3*oziֆXfrSgW}!ٕGAO/Qd,Lǵl+sPژ@$ÑC܆*XeR10j.u~$a rrlX ,mbJGs%񬰨W9HȈ\}k*5;Sd`\b$L"LŲ3hС!L>Oޮ勛_w:?K0(%|͢,⣱PHWNz?.S ~MjQnR Riԑ q6]HNafAڻQuVlf `2F#c@k)T׆`SQnS)yX:X@vK"綻;X;o` A jJV \F݋7l:6KW)4x`*$z;XH pNks@k)_8~" ? &[k߃pО?ٲd2 `!`)'Rf:%#/h5AT2L fTHvxur:c.ߴ=EyV-kFhq#iU<3WFj}tBxUX9bD@~*tzvdcDe\?~LD4iI A4R`Dl2o}:O?.]wR{.3wf"x?$Za:T[h?`M5Z}A뇮sM5j 'kiưTuF6`xzi:|ԝZI")+. sDk)~$8rC` PN_Dgu/-aF=ؾYxdĴv9)!c[6IE-ûDk0r3OxYvf7@lCLSSqu<߉X ؜Ӵ-G.6)E1⑵h:u`|2[\y~Ix`=ZJ~Qr%2< y2mt3Cl]E:U4Ɍ$sg-)/P s5p j:? K):Y|$$^XE@r0ɍsŷ1R02*㛖zN .) >Oz{y͛{=T{/BI4)'E P@t|$;FN˖ NѲ8?^7;=vOmZ %inrpu֯NS[ZqݪJCפ4nd,yBCX5 %,'VD}YO xuC`§T%u;$mDU@ElIoTVqV@i(E7[e^vNUR{+ɬ.96*+7vo\[OVmP $w&vA&{@Gzٮ# i-ד˚@Ua6/BޠfZtj .05βscX)]`G"Gn47|yP36.%HmJIW3mdV ۹ Fv@[gtILo x ׷BbDuY'~ dA `^0V cZvɪ5ևewܾ|Ɲ,Tʚ;U@-8G) _)R^HúlVو&4k\AtTjJ5ٌ忷qǫȯ\Mn5m3Neǁ7efsN{kWޟ̐ uh(N+^R %E: `99IaS':KZ=rO$3N'6ɑxs'I:K"IV)S"HfYy2'>4uq6oJ_ 3hkXߎ~tqX8x Q5פ*g!MTb;!\!lȺtlb/ PY~l'p:A$l{ ]s,"QuXDPGEiT}#VjT_M0'6f ףG9L(+Ux>s?{#v_T)*s_O?G9Zg&W(Q,}AFΦ?8bEsl#Z%ԍ$7]#WaXacNhTAI=JhEwi7ָ]IX졨>)vUS28>")WSuUS#D,L<ӿO=0 aN (NI mbO͜a6g FQa0 AfDVu uV[瓇+&+lsˡLV~rj ZHQM:0Apݝ0Tz]1% oj,7m&A.N?A^t7]8uC]&A 9TҪgО!(!CګȡDOHT~9rH]oVBnRNW<:=p;K:C#M}:YrrX|LV59OS$h5nX#O5t O- tKݖSa 21q3XƭļLngg 80u=tɣ-{Q/xN˒C‘cD@.jн6:8CQ!644.) .{ LeݸBɒ6A? $9Wy…%XlMtI"333t|t&iȉqd%w. C1d"$X`_[pUkFUALe8ڎ >ঊɢjZjk>_{`awY&!;ԯ;ԵCFl TnMuZXb#)F,;k+ԶnC$q\ܪK46KFT!v*[ LRy埭~TbfX!^]TyL)7,6Z%z:uEX$l2UׅG`Ԉ&*yR!MSũAQg k?cL޼iW(HA@>TRfu: ުlg@&Z`Ҍqe#|y^:Öu>:y(@@£=vAz6ez6ez6ek0eSN6"^tNAFEmpW2P|Vc_wiK .l$2~ϙY%He f0;ΚwP?_y> cȟF O)mJO6$`t&rna\_3PW"f,cY= r%P-4]]MjUsfl}3:S'JK @K-cE9@: !Qܷ U `+>2gBed0#-|G 'OplGvVx,i87$|l&Od& I^ǚH" ftrH* p_Ҽ5,!1bJhw9WRPjl^tVwdt14UYCu,DoEx/m ne(Li(Tm:ȁ#VO-졲ILR!M-AģŨIOe:.hk.&ëNGJ) yoj#ʩYAfOtUl$ƞFKqf--^O>̡93>i䤪Z_!^S<0$(+F Ut٪ #3j$!.7tvQ.8X:ni?S͉! xf85ڮec df -*߿@( V?,GĹ޴7?WOvWONdCד'd9(qj S@IZ@KUU9F.dBRsN - #1 8\13oϩTp m˿r(%PFHmH7*PPi$S"3`Yy$6[M|̖LUQ6YGK)mVDIJcQ#y fBVBZ|ˬAs BPӾR7 XԫՂ V#,<7XEI*8#2(& Qf{^|cdfK{J+):rl w1QB#l2gD(W$pBg w㏿Uw/SOspr׏snOvj(SZ 4XiG b:"Ti52@uXUeKr5|O>)9v7~ [ˤNJib°l1ưH#P;APNMwlՠ &fRCmdE," ;v*:Գ#[bː1#!E7ZU蜜<+3Mav$(.xHb0H~P$so]gg󅩌`{D^)+ L(I^m*l˿4]n=nx7NzmK313cq媤(ȾlrP659fP&'1NHZY]-ŇF/jL`)ؖѭngYMUhUA~RwpbҳoMMw2e :,e c%YTؗX)s)H:G l$:KA~O o޽}Y>fBJ-kE([8J@\"zT|)&9#a2R:I6u6ZԲ8r즪-x.*FT*Sފ`%H}!=Ċ -U{W9LgDuxTviʣ8lWݻ#-YDmĦ.6j&XWl:@lW&XP-{}LQo"E ֙ffvoc},B&1FwD3ے0s1Tq2%P5#[I\jSi%RTu/ogsmݧUs)ڏ̾u{f)C%Wޖy]J,\0 ̗o;d.~B7Ed١2BH}U @.jkrv,ʈ8@-x*UqҴ{f3˿}84I<2d}ߠ+Fy)MIcQ{UÀ%!% X͇)V%W[YSyw.XgTFVލVB0ZH&"$:{$ڕzRݘa>r$%]!'~e^vB sĆ=\qNMy S{@wݔ#yLuއS]ZĆ11G^bl="Eղ7 $H`T&)Gt\9hx%nE"%l]V69غQHjAj7#iEe]oN*]@ӆHk#ȡMGg(+2D̄޵qx-݀?:$ i%f W\f\ccS)Vj !#ȏ&My~+:)jH4&y)bB~E?m0X9o ec8Y!'VM5uf>HRl }GHyU杼>tG%ڳNҊё݋0 tICơfֹGX,TS37M|3DKCafToД:]yYl,5T ffc Q\s@^) egmΤ^B?ib+O'ԩ rNORiF9 #" )CU/ɱGv 3f3abLC~Z mq[=*\[B,O&Q>"CQ#bQ&u1*T#nB'adE>učA8 /Euj=$ .q&dRrQ@HRt3lIXv?!-͂.B鄳ټK+I`fɾ<HFU cku K~TIF6aޖh!+̓j|>QЖpIPk)aYё̿D|U"!V|Ռòije~l3!؎SGUM^ҙЎ=5e+SqqS%*C{ޅ3?@N`6  sW%]IszդU{JPPAvfF_B4UF6m=Mde* ̈́y޾XYr1APV BG*TRn>؈ WGg)V5ԒR&uWw!2U4Il7N /S$UDK8B\{ 60!y0b{Q:oT @h5 cj|2ZeyKK*-{5ct]:61$oemOk6;cWO^* P fjľhZ5{{ _&FR/aKD;,|o?9D FN i)MNRR);2(<C^`il.6O>xvlOLP棅-I0 Љ +0oUwM+I`l'LPHY%o#۩*.] (e{1Z~`|&Lr<[-1 2n Y _rHv, GlA24ʃw:mC?(Lutt r>!>O/^), SKF\qV!E %K"KOQ?d̸U M+O:G69VN,. nP0ɼ,uaiˍVw`u@H2-!wO1]$-1cr_ץakGd(qɤd2 E|*l@+ D݋h 𜻰sGbsn n^߼i޽ѽz+>S F}O'C ɸ2U ăOS*)Kލ̞ݢf,Xl0~͕Q[NMt!7ŖwOa3gSgUm e[bn/?/^y矯?#/ T'#5  l]*V[Pz%@,d*-raZwKw{잪/E1CABH۵O+^|@V=P꾑$ɯQ1I:OEΒkIjd;N>^{RRb/hVug2.K]AM\H Wh^)Fy8.+ hPBH2C jߒY0M*3)Z#t_"ҡjX8^G8U'_r#JA ]نAU,_>mKXTT66x:Wiuk/fIiɩ9/WtUs}=(__k;U:0|+}2| W3 Q0H86h2<9|vҐO'%?z6€xN^ڗY !M+-7/@ ER<؏ȪxuSD].ec \IC(#ʻJ@ IoV"奔]CBZB$- ٢qҩIJ0㼂 $Kl^ /ӸHu^X:īT:q?4 8Q0c_! hdn{ΩqYQ{귷|'ja@uQ݌CD6Wr1.hxpzgڡZ(AtiC \:gC,^qZ7'vЬFB^zy3)" , 杤0״%D8uȸOoO'T-e^%v]AVx89&dL:JdԦ6ݑ9B%E~@|:D!ǓfWƵ] T!]'oU2ZjdP=}mT}thR˹,l-ks:X`iqԎ^`)O dB7dA."ת) }R.r:j*=G]mIV'N!_.꣚R5iC^qj^+IBk/Se-ݹU2VWcab!AAP_G=HZ B|W)N 3%9d JR50A";7qraR yd3}̇MJEM@Vvk?ηшo߾juɨh 2 K2qų:?ͮ7&Mo]5+f6]P/4 zڬ5%#8` i Nl 7hױ혀*yvy̦3 y*ֲmjĆuɂ[ NaWn0Vugk?ηnJTU1Ym Hv/m#])RaؓժKb'KcQQcFEP^Rs jC%q} T&iQp&d$ Y;KK@@L}+Q^XJ,<Ѥ>}i\{Kһ{E\ 8qW7a7ݽYdd;&)ϋUG^?$ 2ڴLS:22UUfʾ[ͦ$.$)$l$ PdTǶ$+5 )H?tW*#< vU @@mHhS8EE,5@ F%-9F`ְC14[b6xp 4}V%*2K1$Anvvetx-*'tYs)Tu A\8NEu?PvgÎY˸ͪ~[VVc=0( C:YL9v *%`eս@j҈&B =L u{ۺ2vISnYPb, U)\WkKqM$C`:TrCV J"0Y !ƣC4_>_af%!0U!EC j Ims]*;tf5Q'['dXu3:/D R'%˵* m)s[{;}LB1IAYA{"J:"|>"l=@գelb!Iyr!t$B ֩ ɰV_EuT|][`YYY{j!;O$9@T씳$UhZH7V8GfLj{MV]^^CTr<:o_=6]lbԌ责ڨ-7xʺ9+Jx%".ޝy2YItypA㞲 yO-A <`#nmT)ah!80 "u[D^s^y: a:7SW!-QVܤÆ﹬D|<=kN=z Fw]ꣅUE7/E2bYrT)I*b@Nc?茅]PھDS/Bt^q{o} t-D?J~l'tba?i#D8g}/T?hzWo0NխeV‹3&FH%˩Baeh QZٹCP eS<;^qٴ?yPwv SE셨-x7vL k B9Ԭ9|rZKy+(^wB2s~$5[v*%}N:~f,Rnj2j8]FPڻ>!On C:Ϭ*3%:aՕ>SӱdєSwy[4P=d@FG:1rAO[j]v+W gWPR Ɛٖ$x $!>Y̿x{6 !G-&n lIY@"lOJS%$ɮ p)#,@MݠK'f"s:bDDdVݖFB?re' -{қtH?4d͆mb| ''k0e2r!u|%*Ɛ([G`$?lkyXIЍ(u|,hå $Vfi,2Y ~^ޫUts> |ם(t8J C/wM$ǖodjtAnU悊:tn"v "yaw­+:ƭTɏV,^G|xT;/܃@BjVA:UfșKpUepǩ_ e VUh mY%Yur%MtM2Wn:+?ϘW7o><$IH4f!9*\620]dkF=Y>r 6( *،I$ Tity/.\-.eK f# 0؎LaPU`^t"gu~REPŗpHXj/>f޺޺޺?ko]gݺS9`\T 4mUM^ S%pFs%}MHחNJkY9벭FN%R|LAw#Pc_buXHg˳tg|B)2D0Dwvdɻ+ݤw dK֥Ka׽V1$^0 '6 UIjvsssџOId:NsB%C$ ̸MZUMJ$DP{X6ۆ'b2yWpUn>չA vJˡQ$8̞̀¿I+MٍݻJTd9[V!evNKW7 ($/$<=荠qQgȭ& ·^svĽ:}[\۷,[?钾rfVREEM*{$9!:^*Iëd> 9EAe`LrJr`8ϛwon߉=tQ"֩|8T7tPUefN0Fs dD YYܤ !r[ ˶|h^KW [dOLf ]6"L0y)M5K+?{Z KWWލޖ ɩIWN&6EG0yܒ=_qi^xs~#@DnNgDQ'B%P9{9_SYYt(Rx-Hu.%yM}jzl^u빓:ɞۍ~)ۍc5pJ?H[' RTU\I vMp(u!M+{I' .f󃏠6=} F=AE!FGtL‚]S <.|XaϬޏVN17?LlhpG*]*Q0$7A6Ğ.~IN]bV]qc@Rz:=j[ԥ&o_ǃ\Sm̟9w/z\q{ޜR/O@9y`@BH`,p䔞a>sf&[Zw_ -@2]pOq-r&2Owq@xZPԥ,S&I])>{gE,b,gMUsZ^2 tZ2Pت'X,̢Hm'6ڻ[{iڻ`u# YmU@=d-ߘ*N 2Y H$UFSu~LjX|t kRe#>[FJ+~ q_TZdY eEOl DDwPbU}.ڨl2.$9lu֬ \2#u$H/%͵!K7/7vko=sٽƩQR L66x*^@:p!5$`g%Tu2}+㱒R2{f;+ofHnϘ=vu{9U$jG @]9sd=Eʀ Jyk<{g.^К*HեosLƫD{4!_ApAEz=N{aeLc$q ?êa#&sصm?&kGij4f+nnrNW qflQ OL*w!4l\o@5&&߱*oO}Bد%O7q~◇O{_3+ÀVסLc ԱE-PO&+j^-:a4j *M8+dW^ċNGŬUD[+v˭Vs+8׮jB}XLX$@.#jq8H=ȢVKdlVcCoh:-SH[ tr||]]MU0 ,GVqW^ 7j-N[ƭOFnF>vmoӹ ʏ޷6v+nillFrV"SSy  yt?DR̥O)#ifYMB2ͩ>l+ Pd`[ uOS/" 컅ɺYӆLvhUfu|緦$dsJUbtݗ~΍\qؿ~_y ?TUz7v#Y2l>mp"fYJ=7By6 -zt iXe(~}b}9u+)ݔngkЛoOq}LIr-s,y]^{]sO[*BɄ*uMJKz5o(}.B_B6_Ѳ9=aj'>o7u m wH^мkawR?uo Z{ @Ŗ}ux,͠j(tWgG>D:MJ1_ v;o`%M[z%H шc];" K5Uz-9 }yzT5!8Yv m,FѕV_+aWj|d+ͩrkOc֘bv\6Vrxͺ-Z0չ D f),YA眫%c! HK#~lɶ38 "ܥ|[*a J6{.H Z@BMzf4ͻ A,EsY*̓?W^/^x}W^{~KT&KC V[l9AHmxk* 5M2W3CDAmx~}J]F;J@JM[bv^jxEH%Kn(iheF)SFúv%bafD_ e؃Sl}>{_O$}£ xgyd^GNU=T^ t]A阭#ٿʊS"Є}uɪ8M ^wkQZ~},nXgMjq-o\,*/?VPBݕʙ!Ϻ[j HIUuʼh!IrĸĜl? :v PQqTWWi0=PCs~eM TV҄,p/O!]m H1X井VvzhB“lI"g%q犕pD*C1ʘBsɄAVP4[_ԬYܠx{UMjە84Q[_[T>W\v8KB^XWJZ1]rx0q:Qq,e{29#hJL#@ S|7Xߎy5o_<잯dC[!/[5sTn(-I:pjPq(I0Y`˶L3fʽJjWw[?07\o8'˿/|7ßO0'H$ Ģ2FXD ˂vF`ـ,!3d?,]Cc v,:7K6&#뒘g @lX( h6#W*vpH<:?^u(? jQ_ TiH Q(oʏsyW/'i3vA9MW¿ w Rj*Z -nm/UtKM v:w4 1V[] VQ4bImu?U3.!ó0E SM}hJOI9`Ԍ(f7a&C{=ab}jW CIKVhP:|LiEEhs`pWMM7UayvybWYJH,xp 'v#/>KTЧ@evaL[ oDM*aYZww?z~ ZVqDi$`Y K8ԳkXDN G7s׎P @<5 axj7q}C&>WT`rݵpQ͊-&K6$'ݠ<yҎv[\_>x13qe;,(Lަ`6p[U~A7ݨU]q.3^<6E%l!J%4_v=a(.Žkaڢ  J('[V?Ԉ1'1jRHkLCC=6#.hXi~d#DXil;Hjd``Vk /Ф@!FR#|j5mT'`،4 k .yb! [Ғ$J5-V9`-4{g1rw4kקw;pfE$*Э͏bvY7н ?3@Y3[s|4EYѡp+-ye ȍrA{ ݲԜ@܆GVA0h-3G+&#ՂihUBF^ 8O8zs)«[JλB1x `[o'T8@!&|L:XxAv;<$:%ZnmPdo\5g`3 #yp х 0\"ԘjŨ7)n?r~'!gpqE&>;IDb: O\t}¨*AQAgx9P KbXB .|r[ 3`!|Cuį|\DEw]wԇJC ގZC4a+1 1 QU ˉJl[Z<^q8o_2 B 4hsI9Մxk盐><~ eVĊ<n~-dYUD*健Rh HSˮK{vrgTtT"N&N+{jCuu?+>zXoঙC#۲q:4OY9U`#pg_>S]=YCӸw IVж!v&10Nk:.n1T5+d#bsc>ycN48{ n[l钖2N!o#ݷ˜nO2a8&Ϭ!f{R(4/~T^暺Ӵ*Mڀ?S߀ F-oM)hf)QYf񤏔ů8O1ə.86o W'PhR9@a6D^hw&ZgtuVy|׬N1Vv<[J뵓j߭-ykM^:qI1? jkڴ0J'.gf@Ttc[J`vz3t@{)\uX#y@w|trOCε[%n΍[e2w59VM dYk=gU # QVB^e ]CR!|#1 FV&ಙGi$іUiwK~E@;2`],Dd|nSK)B|̇%FiV L ^xFWnFg&P \@ޯ;^oNO,gْ fdHʌvIUE~D,\͇%H{g_~^Jrx{{bO;kUf))y9ߙo"&]\ƶrH)2{LRU*>~W>XaxFykڅhlo}'P܄lJs wYXsgpfk V4.D*K.3LH!:)*w4"",>ɆITl_kSt,Sr2k/G?h;xZMutؚ.8n<3,tPll(VְKiEۆrV6ɵLQ~ x_D܋&[8T!;3+ XXׇx ^2?H=BvP-SR$({%?a'GzHّ~o$tS\Vw~fo[|'= ٣Pkmz/*uCW|DhnCwρI ^J(l}"w4VvU ~G&t-x"~:S=桘e2!{ic 1ܲW t\ ?4NG,ޫ +/ۥ sXFXְAviÃqci6^eܧ!- wƗ 齃˜BОߪh §9' ǩ+*ډE8hTWԝSӇ ?umwU +؂VWr)=6.Vը|߾3B XJ:0H''*8۫['W1V,F* * Ɓ'|\:iJm|S~go5gڋw!!m}{'Ahd$կE!\5R wP5$W=qfQͮc:0f}T4I.+a¨r~OVs' \zx^q~ksҋj =E9/ P}Y Ql(Q5y1;5\:^Y]T{@PH.zvLtc t߳( |:8 3n~E؁@KϙNkk ՅrW=Bpfg͹1U-[\|đVR;u\섍xvr YChrNqYZ5%L `աrgS%nA|,4H?søx_$st8hfV%m6M"Vmrlˁp?k048!+AM[կkG6i| TRd{&C?Q5_s$h_ :OU:Fv!^߿xQp>n4oW/|8~n/uU+ν4w0LѮA/h\W˺-V698YN,%0SH>( /0,}H =Ycj13Ag5vlJu Uʭi?+@Y4 @4w5ƾ%ًhϵWy;lyfYDE q7j RU.#jRUiGlF32{T/45|%~'$6~Zo TQU)koRL" x@b+UPUС;3؎cjy 01͈T<Ipt),8h*[wJ[%VՂ{uo쭺 [ᲽOV?(h<)}v# hdV&%@8Xp Ke_g*~9&%a`z[U?;+H x| *ʣgZNua7}}l1%tjxT焽q}hjR|T$Gf /^ѩwJaE8ˁ FjRa|cuN+|AԈڢ&%bPםu .UzR'1;R;HpPHժ`'Kwv7>S>}n\ٵ.ԨojQ-˷[\Ổ+=MC83=kҴwk׆O[2h8@C#U+֩\\mσH 5Wͦu;[|oqӽ_y,|Ny-Zmi2|Y^mcXI[0 m6͊5S mfLզ0ցoHz.64Vk+ylհBә^y~9OߦaߦannӰoӰoӰoӰoӰoӰoӰoӰ8iطjM_{mp~mѽJ}U[Oc಺@m{$ Ώc9\Ǩa|Q fs9( A^hry8%"CMȊM>`5'뵻?a S0,zTYjnJvAdV4 G: "Ŕb0f\;$MTOTڻ&.%'O'߄ޏ@OWsGKréVW-qq5Yl*0~/W• `Z8gpn`Gu,~W%r+`Tm0[4K=\TQ@'͕W!vj#ikսT]03iړT;}a>*P-C9KH)wY6/0y׆]lU:4EhX. (V#^j>%=V(c:9.J̪ ?[ZU9:LpU~<@wQApOA(`b2K`uIA*6AI`hj(XfGJwn!V3aWXL-ƪP*V}ՔOT\Z$H, Uu gH>í]/[ [C7ƞkaaƺ( _~嫯ټhߵWB=͂~D"> ߉cJV!fOBNȔ-pj"K MR,5bڰm(ƲrhC؄5ڏsf~<^ݯESn:&޴,& hG T'[p|ZRNwKD%FZmjXU;0Iƫg0&S(CNU'+.EHxWTyxTKZx@?{NJX a Lw'(jj `uػ]jK˶Mgt9!v 6Ћ>|'Օ 1-XBȤ4Ì&C 4tnƱ;%9J%d #v6cgN.tt9vGU$D)]2v8 rtSX)As% wW+l~6 Ya9AX3G\_ 9P0]#9M!d[ QI[ Kf$;PI);M_>nEn+V؆9J~rX~u?ep{a5dut*w4^޶G"ϑG'E$F4:NN[Z#3gC+6%~?*\pc1Ub{Tm5ՠ`kqm,ddW4%`չh>hѻ7Uz:WjiYzΦ;j猹U-#n/J%eUgv4A}Ըߔ*^$lI:i.Ɉ!TUΪ a|VpϞv?~G9+/U9WDVccnh8~A&p,״y$l3\TlՀdzޕQ.5\iˏ@ԌU7M/QHM՟Z*~Iqz%mmJ-u%*9ԘBm`31ҪYm^d&0~Qw n5+FI*gdB2j)Re-XU:/Y\e 矼:8!?fKcKCMW۫c4־؝,Z 5 ]ʺR8$ ,U\!"Us먕wY>e]2*F!*ɶfPyiK , e$\3Xc7P#qvkow&-`8ߙ]s 5%[5˱68PQ ҭ@4M#(.}h`6#\E:'ub[/-scj+νsə7Xo.b~)cYκ "Ȗ,YUЂIiJ}4X2/1^NQ^4HG!g=V%gX49GhԷÐ| )6˰yDpN] 1=n yCݟG(W^n{ttW `4AXc`FܛUz.間bnIػU)E#>ٓj9a9+m]w-g[9$n1룈Yk8$C$J!o43t?Q }mMDIѵv+}j-%ꆮ|[õ⥠;] ~yߴCR8!rѶ#u6wj=)Ik$掱$C#(ZqXfx4#Y=mh< 4 Ŗ$5ҬN%WNpOź@T!X=^M aeo.oN7HvgKn?%ߏu,K\s> :6~{tBJ*K!Pa]IvUnPaz0 3M%ڤBRV<ºlfdP6(~b|\vP3!hHM/00DM3`uSUYje"08*oaӳfMKxͩ:cPq%j|k^'a6lƆ@ XhJJ{ ⩣pm@mRuk_. jR>sߙ5U԰P/át| kBMxX.K}!:K1vɽBot[pgOמyE{٫zzP6ko5ksKSM# J34췮&t.xD [0:S:G]8D>9=Vf,ytN%4]iVu;:wZ /fk07P^cGU7@xJ =04<{CVFjE^UiBu;o#](1'r 8UJR@/0}5$j+[ RCcAY} Հf{I@6 Ӛ8$zC LXG&hw'Y-o]L'wilV[r+%T`}Xm5$,* )JR9veY{sߘ ݯ˹MCwӡ:tHI6'Ɇ7q8w M(I 1.l+q!iō#S,r` iSj?3N%&yv 7V$/>W'6o4U?;F עkclZFsL!,]k\[DN$RO+mr9}ϓ ~Y{Qyǵ?ͧ[oTԢ0qMJ{ U7:Kc)IrX;8pBp^~H.W 痼3a*؊b+9Α?U؆}$'Ǜd%o"@\w㶝Jt r%X~^򂚅H]k7||#oëUMl[~Gdo_)Ex!0H0 X@Y"';4h0C&p(Q:}?5{qsBUqFC*pS-`0]1F-/`rJ'4~pmƫ!1 Ns$JV9;ť;B~;قq>r.Bu7S3EON+|Knqɋ׋GvW^ oW|P3'q;8^͹߬"(` Υ7!m>騠^j/jOi.5C T.61Θ%U{!T||ÇP{?~'u[2\g5fUUeCI_Wh> `)"փ.A@ c]y~pXUZMP0b_uNKsmiG 7[v?UG9wDߙ<Ʃe.  vrvyMpR"|;Hy&pV'KMޤ)2OL}URZv~/Pt'ޝ4ļt=8%jJ8&NJMM3U]րv": Qg8`s+[WR)]1_=J_{.T]wJ KRRzʈ5 (mٽn0mKҭ9^r2y*aNZьiǍEJcgW9 e$P]]5"j3 @U  R{4e$LB{yt"@qhb(NvW5kQ'ɵWg/[)OqVUc&KDR#D;I Ҩ6R^G Efx*Xۢ z6So8C[тTUXZV=$zM ̩Feqe*3T$TvV%nX>'& SQ]8PPA2(,b#{2<U Bj7 h7{Exp`a2QM0I,tBGfA8˳WcytY~9xs;.Oloe@zpWxU\nSvlŋ/= u2 8^rKn@x*ȋ`΢*ͮǢqj3"` f S[%fV@BU0N\<]Z';Bhph xb[ 8sHhTCq( j@v|=$51GM^ukz$hͼpk$ilji[ϊËSPFx-8"dRdE#7W~s뭽tY7Y[ta1V.9nJvk# /b~7u=pRUvVBN1 j9v L"!exnkNxZ_f^)U%(5fS >ꜚ )K1LL ixIj6h1-vcz~}/@ ޙTn.W }Q!]EyV4BX00y ە>n^qNv7o_jdDf5GWRfY~2eѕSͷPV`CfJG1dh m%p@TEKulWĥĪAplA%|cTԔgbbKٿ$gÀyuYS[So[vƀx7Z p Ǽ\zez.wUZdw`[*!<W1PT *"6j⒌?>sf\RI>qjRJ 3~Pҫۊ-  :ru-3tǂ@'թ Y<} 9 j6j4` b/_u}]{_{ /ǻS{o Q1]STF\t#hIڬb |UmBj6#a&`qh``5@y@ӂ,s^'3ggψlFQuiQ{j=ۆa+.nLmմo沬:jjk="%D_=(5^k`Ai Wdoqo>T=TZF(⥜[1tz皾N{AT(YuRL7nW R487nd^m`JQVCIC$!;z:ɸnZ-V}Hhko]58+1\ kgj:arŒ#&{KD7[f,Uե :4>VnIM|n y7~3_b4\dI> rU4H|"iN9yW fu&@PEĂ|,9LV%U.d S`huZJ.UTild-@zrw7H]UZuPP-SA62W#I]JDIc#!1ޡFZ'%8D|4-;*#ҍZŌ#tJ1Zλ!#9 Zh1 tӦՕR*"0X:$6;h# &IKUK('0ظ;uhƛ^|ͻZHh9]TH_#NpÆx`8BKݐƕQ d 2] Ty;<3G/_ Vw}4,F y!5ztUܪtMӡ5-G 6 )'z÷kmA35,uA[օL[G%8!Bhd$Jdٸͩiz&uLTxY4bu|OUW R'XjC/U'TuͺJƫ~2*xgu:]D5xEMU#怽B@54nsN=O^Tcv;2`*9BO}Z\ `ʺ|T.A1  w󒬄WJ!].: cz%@}YfUbTf}%8'?c^`eWE"m H;:aIz_aNRPzCZdgxuN`U1uiN9EF?ί)0\AMP])UW%59.Juݩ mdqN [k]~TkJfj2=~UFD*(F~Oy~ǸuYJ)<2l $SS/Q-`&Ȑ@W1yDþvSD/3L}b,y,mV[l?_?_?_ /%j)Tl A&94_%ոDn Ӑd .Qɑn {OvPYEzAN(sحK7^~DӔo-G5;3 K[DGRWPy 5Z  \t7kdXn^׃[,>t>N"X]%:W#&Y-#;$>|EƘƄ[KT/f":EX0$wBݙ EB`V;z_@avI_`҇Io?t IP x6xd(v̐4Ə" 5PUӭ#+AIPH`8=(ߦa'"U5K z gUY%$JCg͟>O4v`qQej ÐU D*⨒ oE蹴*tش(d6p^%Io}A.57IS7E Bg$-})ԝJ~1+DvYTSQMTi ճo@:꩹h+t$z H҉z䮔S {}[[E=;W=sU2:-y.=Y++V~JC:@2'eN$lzZ` *[fG |$ IWci"wlGlmxS?K ΫJT_Ji,2eg]j0}CCCxLl?$.KBF %M"Vyu66F$I쬨2M.Λ >[E6Cq.*zʠWW*Xj%"g8b֏sմhWo8Z^ ,,OT" Hq8$ @YΠ.R- 8I\>o&wgQTI!5e2.eխ=a-jۢIC]>v!gX%򠗝T"Ϙq &;]UaUD`yL^M^Ssv&XbU%1ZRj|>wA\c`f IB_fo(7{Mʲ*RmV73b#jKٲAt5G_ O+*J,o=rWֽ Jݿ2:/Z5@溜y䪺.* :SyW6&Hp\} #a-Xꄗt\&)ar&c'tD'VD‚'Y甤L6ȠIl!@?ME]9_?rαL\[zN!^vHVB6m(Ej@P FHl3֊|LkE{(vH\W<@Gp:kTR$fKyl(EXo9պ$x@{L燼sBY%>IBSMgIC_ݿwf~PF&%GFY21 [`mUk[kA_E jU[w7/| ^SiӦ֚WU!Dd1\%km`U1vͪSnK۪˕f}WOXyB휀W!G 5n;o,ɫBvK ̪mxv{o=r;A7׏o}|$'6U?qNg?}^q]DTI~f2 L3IW]oY^[ULfD,f$#[u -A) uL;c筙`S/GO[E!bXJ%A4N^9_n'܁9wWƪVh$C1:**p{|nS/w/w-NCR')3ʽO2q3F$&DUIiLΜ.+OAc-2iSU|'y끻ļqu/o}|V3tCfWõ @.ˌfDb ̲VhʜyU[R$5R-dYd]~mk|MtBVI•Nڬ.)[5raBV.\.Qq an+}|Cn$oatOr^Z&Bݿ]+;+qbtYP]Z"9EAC-pRR=P5 ~.6 *Q385=YmTDA%+:.dOPa_ B@edy.L"OiHR*'jY0J*kIAxӼH̍Z#aS#( R#Ku&]S:V4Ъzl7VGr[B'd67L89Md",')?oreAͧewTtƣwт^o?xzƗ_LIΤG+M+|שׂ'ْj{2uO|ʡY2ir :v4c:펇ɒ s<ʄȮ輜WXJp|^ 6 gpQ]aT/`+*8m;4ĿBz ]M SNQ n[qyK2Lbfν I%fat-$`, BeL?%7 U8/fY$.lũűJ~|9/{n3l$4u VWw7 וIp fB0M&T+&YMj_Vto8"z[ϽqhַߟKYƏs/Ud3-Oہ$JDUqAzL0,vMbS\}jUh[\!Θl?g0,L?;PHPHb[FfCiBFee+U!mҊckq5J(7Y?B07A:}Ik7#8F:bu}If ?#H!kGy-q',OŊ Ҧ,[2jP$CO]InZ`N//To=`Q㫸!yiP~SAr^V:ABmג|̈v%Rp· cY܂Q|8_)]/!RI~}6㖵lV+sG_}Y{롻k]FE؃hMsZT%v}b-fyMM6Pd Ãcۑ0GtY 9vjUYARХ@6HxV XG+s!e۶IJ8.l֊윑Z L|w~^/|uZ+=EVϷ~̛'YP M,r#B4tu@s r%'3kI c<2f# &5%1 !Mv5Ȥ33 7[b6,mi ϴiIuWagj%l5*/f}V7#彔Ԥ$Ku\/5tQ^]՛iVb(| /RpӴn;KYDT^\Pl=|E~5Ոnf q i%2 yȺ-$P@|{)C9K]evAjUT.kt? ތ*փw]M۝մګ;}kg']>AX' QOIUΕGja7lY4cA.,NNVХ^ _Ixv7]ﭦÀ0DNW9aZQAM*#z+ݦ_UE*Q=r;"֏s}N"V?6eXf#g鄱 W˚ l@-`ǛB%BE`3K`:<TWm YI\*i FXL|$ r,Qd-:oS9]Yi Lj9%#g8qž+-]g~V{}?H[/kqi\!9axRqT|M4;L᣹[V)Av, QE>hRqkIgggB~` yÓPU- ,# (> D&HtܐBeTesɓH\˫9e~~LEP}~;w/ʆnxX!l*j;*T)y)6ݿ}T1u:MOKNb8$hfmRq-N{)LPfiEJKFK+;|.Ko8WiFZݪm3E1jU\ lf|kN.(d],US*ꐜ8.̫ Ցmu" X{$xE C5TS9G&eF£^WX Iffk4(fÀEiXy)Hʭ՗1SAb=(sIoiIڭK+r)|\ srV(,Q rKӣienVn*0j`+ H5wOB`7 Nċ/>luUӬd)˚ ONjxaq饅D$c3ln"aAUȓ_~髗.=n=pEzq[z ՊDg"(`nfjB*ϻI0Uu]:$[:̗ dLlVY/fg`F^0mָed w')l$IXl^qeb(1춊5kQSJaݟ&‘D@/6sfN*P Ɩj,rhQD4.K> ~臆-1gZ1aduY)씐͈_YzܦrtqeAMCcNEx}r-3R7?+7 W^!?Ey myKf)yg*f HF>HNס-0?@ {"H$h23OJ6{paa+ndh ]Uk1'Uљ &d`bt cC0 +Ti#s ,qzm /g7$=F||>`PnzUQv`MiJd/3=1\$\cQP\ I˾ձ5+u| "xy6nݲD4LtğÛ=K|Z)>/ҤZFG@RQŦ޳{]C[<%_~WֻWI7_7+Ud5E1b*=`u;8&J59)S^K*ӧʆF"$7O%ɂ1,[Pu&t"31$1L 5LnY_QAZ!@0R+m'W6:* :j]Ԛ!eFLe$(_LaQOE\`p=Yʳ3M,q5;zՎkK hj6m3lT:lĺ sLzfG/ sA]= ݅JJm2!&J_7KS͏;y H.v6UBKRAu1r$%Va@\{v  Yef5{EN#~MJ?7|7sp{w/?y}QdQY!D|&!F#FжNm_"Ut5ެ2RF&0_mf泻#S^*f Ȭ74\Ɋ$bs%H2AǒY7͒:>٩8?n_@^@*e2=_u%!R07, u&ϖySoP$iYSjی: րNI چ{.**)X}Lma,e  2_-9Y؁= X"\4,R7#'~쯃yv3C 4* SEpctxkY&(4:zo+ẗrFRuY p>r RQ[AWC3;T2ZWG7,2j&쫈mE'E]iD\,ʾ$#'!xG*2Jj q'"˱e,f]Zy2:Fr|[`$:mEUєXi$` CU˩C]> ,l 6|^7Gz?3)w'|yKŮuԇoU-a,:SXNUE5hk*ْN]#!b" Z`z:Yd{2@r9G~JԻQ{> @uTn]Ba 8evG9jw>£ Jm%(ToͺVkڪ)-Tc#~e#7~M6Y֏swk}e]UyoaTuX* I" ,}% bo)ҫc oDl0V &! t4RRSmE}#V7j݁Jzzzp5jI7U|M*}GFO>'Ts0a$țKat悈)B552DYuT5ա`DٕXARd/8y-=q>?߰X5nu6VQRFu|oKw,vN6TdbRKaSHM4SPWX:ޡmULOl,rt߽_fao6$tWTYvITu;\"1U%~]m|]DUJd/ՏU#LM Sϕysя_g?{joF?k-orY*د \7He,rME@I6},7- ttvʇ6>qݥ!`#swSTruqKO5pDFa8 (䥆t׋U!PX$"®8+4ðh +渦U _#]Ǽ:~AN5&N6ZYInY,:U[0#`nΗYRmZMk ȀD<2;*(jSy =T'@Mƭ׍nXr 39zP$!5<SMVǤnTT2j; usHUpX!٪ma97Czkj:!+A-1fOg`2T-HL(ozDhĂ)fʽjA P7iƳγγYDG(y]TOxCʼnV c,Tq<?~{޹],o,Y v_F4EM ~hpg539ITYYyu<3l6j$=/x@ $ S=tt43&U J"7@8\JDxXVA`,)9-ĮteIR&j0?Ch< ,@Lm{pnn> nAF=S}Ա15^,ozݞMA*Ö,mNʩ d7T?;bJ0,mH}Iҹs%G`H Gbc|eɧ %2VNHY%NHɄ5ZϯbwjO>D&%AL.Դ`tp0{ +@0IqCǖ"!ڐ>UIe^=('VYA6!>IȀ"$sBYLb~En`85JΩw'L.ԄŒpR١C}" PP8]N4s>_z1ǩ[۷~d$Ū,|WI-1uph!P$J ĥ gô*0!⋯kFkVT,ƦO'2Z%7~V_2kKi1XU}]7ހc st8X1OC{n]vծ(>MDʏ ;j H(&_ɕ`z͛+04{TI)C%k O#=?BDj"!|Я{0$W VΏAXPmR'EY2K} +1z 6n?7$]MnX(֚zs|a ^o)CU,KW(H3C$IK&(J{z+֫6j_ 2:&ldM:T}H=JIҪp^Kn8s|(bVK%~KO<9.込F $^];CoDm)gzYr+1Xd61IUtuhXy75[U 0uvpNZyH쬧6 wհۭv_ MqbV=3%).` UvD9HkHH^'VdB{)B <:,t^W~Ӻ!JrU83H(TRΫoYx; -dRc$oM˛C* uxY }{Etr/.xA"=_;omU9S0qFQe,xNBY 먔D؄U;uE,py187SØ3CWP7[q>z&n8IcRAmzkon֑Wو]R5%_ Ϋ`u#aG!A:z,-`QRw& a i%f.];tpz/9ɇDtN/T.-;[|[ee@.$ bՔDt͈͔+Q5{IiH_F&KҬ si$<7harL&% (3#T0DqLeߥÅKBp}T3[݇/Uݼ$QaO#=N>PRZ @#A-K>v/ZO<3~EV k3rTDUdRWsts(_IH7m|ZO͇)F%}G* Ng+_[n~ڀ9)MAޞ*Ҷd•%YV 廌ND#w 6}'mOr'LPh'}>$Bި=@~%}}ni%VQu< chuSXZ]gM$wiwko>EjKa1jm sfe5é(NlC+%h"D}1V8D>g#v/n=jO~M4{`K7S#H VB;K1:@90|PU2lA-v2$!eSUPT GԠ hEǁBtG?Ee/ZߒQ8QNL [!\DSSeE2dfux]/߳N;c͝S̞~a^|Q_w&` J %0DS%ˀ%Q5ܡ`v-< CCHr%  <8b CВ?đcFCݳ:e8RO$lڒPaw72*r[㸳q|75oܼg$:_ep8yz.ڽ ky3ï,"?p\=po޽nך6ӪE=>޵z<ų{<Ԗ7e*Q)Y'3xgpLZCzPh> 8~&5A5SVY;VVd. az;d<$!B6VVNg7b(IʬfWGk]չ֏s?/Wr +*'{㔮SᕉZiVﰎ6.C3"lQThީ2OI}1K`D=~࿚yJ·d%!ч/lc1UUUa+#r9)'*Jh*/'!YRZOCDz$*sϮaɚ;\aCy^HL;GlؚmY>ԾV'=9AYl8wǹ~I3w5"\ N5e!Yo!٨Le]Irtw-;GΒw+Wĩ0٫F蓲Qa7Bg#Y > ʲ@"jP%ްIĽY$~[iJ\',SwkWV,$.j)K^UBkf_\} sj_~qY}둻ҷ񭃑?|Sc4˛Uv8@ژd\Gؼe/8@Dk,=T=L릜oúvǯ" /Ø؇)K=9%$g x i] {d[j&H*L L-9h3%Ńc$N@!kY|X[?KdRbkHCt$"7 BlrːH!(hZcKT@e/ Xr_< "e{{q^~뱻jnO{:4M -rE}ũKS=j͍\,[jXզ$`tWn#<&6vYBQs!L:Wr)Sα 쪟zI qF*SY%:y^U*8SR *)>2ӒE^*\m{N?yn֯8a t/܋xw~!T'I|dGފUeI%x /Vgթ&6ϫ#6 W}jڅR*7 ~o.uoB Po9'k&`K>5kO恖Xݡ&c=,@`kQW+h]q+pyE ]G!u;swuULSU E`.b]~i -õ.9%P6]HM!V7DE82X r9Msj?^kRV|`ՀA.8g,0זbƖΚ ^c? dmktCOXXB PJs db_ԭMWN,huRP/ 3Ef(Y3} @\nM1 LR߶U9Xy]pad-u6vˆOrRd=.Q}5`phb 0JB'11N"`9!3u4t#Q5"P\*ASZ MeK:Jd;EB*ɝZ6%"}3DiHGe莣:z:,+tІ.K 58&JPZ$֔梞 (zN-ªªª6Fyiy[k>K>g?yV@bT_%Mϴ^:S&Y]rυ&JC\\j^@b(S R A|0a0Ȟ|da~Uo~TRj ٤7Ȯ5Z6'ydk<:sz䑭T{ԥ+/S_̰}/]7s M)$6i~ufYJ4P`ʆ|"$*NkiNAˌ|"U)vfjr"oM7:j, ;c@ k.77mս?^tvn4w7%0.YIL჌ ]bRkwhkA&KfBjώ'#@Es %js=ՠ-Y.mLOV{UᔥkJ:\0)/m600 {H-m z]HC$.K1Cj,vL8҃ȷtDKcF4 /V lq_-Mؗ*Bh "֐hfM.0zIl?H1lpb&9IeOg&<w. xmeשׂ1!ѕIԌl{DDYY&*A7f(N].kHNGY٫$! Al_@s\IƱƺ+PT~]>WVSHL:Q ]2T 8(*5E <cἼ?}or둻YI CdNWP`թ)9'l?P[Æl]FWef嵆w,q>4 X=2y/ਁ JGKיq]s_/ˠROB5f MTcQ8,N]^, y3s)&[ϡjl2Y 'ՍɲƦZ๦dUa #=m o^Z2zJAz&|67.HJ+>=Zs0$u]=N5ȵFǠnNrݦ(Q& =}B2ޟq.7-bSz; ܐNp%vKX|A)8ȇ7M929dw_UJ;Rt9Im9`O[Sk(調N%~^nk} IE&(A{U'/ *œtV÷no/to$G4| ʏ'-\^xw|: Vj"Z%,rѨt7cÐ6A]ɔj wQ_Bڀ(Ӓ.?r}_Zo=zW9!?{PYN .BT)|]]S ~ǰM$v;y%ڶS{^\$RDYHyHzfOOhYNl噒v,.]K7pbkI#HnGVK2/5^1A>w$`%z>Mi V2j+,UF;U%9L$+#N:u|d`-H%YdZ}y&F}F]kû3bڶwo߼jmխ`O[o??N`-e]D$غvKUQ:طĴ7CO &uQ֘ J!Y-+|K{`)c$Rżh`/^ rg $IxC$65M&~D)`-֌dAݕ\ zDy^bM=pa{t4< mMF>"EiA 9l]0’H*tMoDeU űK9cɡ9ӬAr?УYѠFZjv Լ3Y%TU .#9,YXq"k3eL1yfkQ\Xz&{"Lzkлi2M/zT:ExI$Sѧz46{n]/s1%'}$"i՛IN&+5^T$ыӧ:e~YX G2\8U,JJ[`JKj] FK$钵f&v ?Ѫt7v"wt:z%MPS*RU[Զc Hb*9H0KAK3hb4I o"G{ ܑq}#RP9IBYHU1# %z&PdǬSW $hu$((+2J%%@Ϧ^Ve7~B?f̗_|~=7ԭ5n$)EuEtenDG2Z>dfd"MIxL=hI+&l]"9ZцR't/B)%`ճ(J#NB5hy9c_3I¯l%nMpF*\pgi+Y?]g?e&G.glj᝹o_=Iw{y^?Xq? gGw@S$ׯi-%|[[<"[Ć ļmXɾL I8كT0zQalNXc/R]#n$ qk1)qs νŧo߽u}6; %}Y]uRCR$-~C'HaD9#|Bf݋LQzpݟt+ +ss`D{f1֚soGOW%DA?㋗맟WѷO-?o_ }jo>? 0yv,"6F .ڣ` 9ڬ§zX]3.)V Bu[,5_u^Lv<]yy/ƌK%8GZEn2.5\xLy7/ "yaVѹC%"C7#V}WH>o/GAӥr:H\)JpA¢;D rD5mOGѻdRj\fwu "=̋*=zO]$F]c)(Cj+R uȱDu aA פpw8>-?6Yb?+CwE~xi٪/H ll)v$I|-%ӓ~(fI301t'U&;:` BΈ-Jvv_Z EwR fr+v37Yy|:u؎!b6@ c޵mIG9{Fl{^ݿ]~觏kq= :Hɿk%UK"_찤? ~$^y تQI0]ǒdj}TUaV 9 VGv]|1̅JA-4)6R! mUtY*Y QIjNHҰڰ`!,d%NNMH?_mLo x/ypixほZkN5Z̦u&4s$mGiOi;NSPh:W؋Ar!٘u e JŜgDRUzN[C![c붜% eL|o q",]J$*3(d"es?>>0&b z>Pos/ōIPG%> 'Bi+3#3!x-heo.BXV=<[upywmIJds8r ͪØ;n Wyk X[j![NE"\NKA6 nh%e2$rK[}~չ^Hn.G*8'pޕ'uT+ZZ-F}i+v0CK28 1+O> ArKUu;F+$8hG*n B\pǹf|~?m4j-zUߜ#Jjsa{0c${uUXgT{3\^Q:30%˲1' +h &wHoegnIVbiBD+ㅈ/EXɖl4m8haU7~'fv?G2F2*V`FGŪσ#NՒ{Ir6p랥Vv>eUAr)B$UGg E>A+yL% 3B:jfՆ@udy%ƪc#Gi HhWs*r &QťatI4:c?|c/5x~ٖ9 %&'&=:OdLkt[?SAYpqHWsxY"Pbm!unCU/$NrpJ(nvM ]:R(MOlVݒ*A:o֏T =M(e*p\@VE``W8X{Tl,Ӓ[.??I+8yۋnTz9Ԧ“R\LhܡG"W#@2_-)[ =H`p<pO[t&p5.QN-&OKo8OL[a^\yԐ)!p25'oZ"TM`T-oDN7ZuI3xhTԧta]dw;VMT=*k#,[&{uBd*gIN?1\.Q v+ɜKJ5Y9 L. Ə~l=>뇈QHG_ױ#ݎ25s `n>l%&)qEGlcTM33+gK6֧ftTY,:EيmR+ÙC3;pJmIq"ˑJ"{P"B4Iˍ,dROVvG__Hd q&TVBN]uߣ\j}%TtN@JZÀd ra‹N m=-1}-_|e_5q܏/>IW{,_8^>r歵~2S/ R-K?&Zw#(':wxi;ԫ*ΐDoɩV:maر ƏA"$%eEeCWD<75P,$Q,?B"[xfUgpR3tE9%>7}xzC=C=2v`fݱdZ(azT9 u1IR!G~ 9 3"1uQ.޿VZ>S?ӓ gq 4C9.lQp8V$݁t0pM;c,պcnRO0γ'F?~< FoM?Ɓ"wY*SUC#1mԌX1@PIqH27mb4̜--P "4dK:єl;wql߿|7,^I?JnmK:/ 5с%ypEjd1ơF p0zfšP_|bVē8e<x)wEL÷jɵ;( ;Lͽ:V3BRQ`/}ߨS(%Jl0Z?ibvҥZ.A`wOg%5y%b!,LE7[)VOA6VD%4*~h)l6!I:%&X,f+1%U/]us.Hw?9ر Lb x;gBőсL'\|)9D@U,(gicI2LM6{ѯwƧr)Aڋ8Hr Bnwe g2MW];Xq3$"=y/QSm$VŻAO5Q@xXIdޣ~%Y蜗 ~dЍّI0:"m\?"-}VcJOG3m1%=Lbԡ[/` .ASB  .v{ZeBv 5h`Rˬ'?/6C%^ֲ^`Tc;DN!/@䧃 CT)toJbѽcC3OAƖtmI:w-:v6{HMXؼn9ֲ*,*i%+O8CZ䥋 jg Mʡ\]Hnn;}}Q'Z'ugمƏsE)復q9VNp㥄I/DuН*_TY_n(HcU2L0oͻ*5Iχ7~+3z4]Q#ct> YH:6r 2;SlaˎM1w!jHuuZ)Va&ZG%gԾ7=8Cq}oC t ]d۷-*U'֣]ݦ7I>jYU>]JDT%2HLrG_[l\b3n٨pzѼ`(D@uD)`M;_ yѝ?Y ֘ddIP!sfw0JT @rQ|9yZK/ l^Kdn)WgMYlU%Wf4ipTk{V,p1eSyl{奥2`-!LA5[I8)A>ƴ[KR$SZ:OVi2ЗIT(r? >&JH9}oհTyBB8L˰b0 ._"Ŗ:`00},d]4fB`  |,Ѯ^ u H|N%Q?[g t-M@JJќ?XmH0pv'Ϋkz"vb$z&`^i0o~8f7@53loU=OU'9'=h}@2uҤL8O9U/n8烠s^_sIꦭ0ҏ2Z $px%%_HxYQ<@āLĝA~ҕ/EN,}ȗJOGSFC8kDmD|1L8{0tI_N ?-id[l%Hfu,$o$M1>tJX|>\ۜI>*fB+3ٷv.:: ڂ2!Xo9ݙ8q/B^1'0HШ8;VBP]DbM:|+oA+ݒTJ\˩ (P=O˻Mz#uF|^I IA$Bۻ00>akB{9wsUur3Ԉ/SUQ'q3B֏s>&V1JP;]GUJ2wt0i#n,̺SeEg]0"J@Pɒ=X2҅'εcv*C?l q1+e5yvjW Hk2@[X ;Ҍ.J.HzK[?)U=׵BCs@>!C !2r@^¬qStAH-Q:R* bF]l# 07e=0[:1sy;2gZilUN.#@5' (3N9Bz8ɗ~rʀD21Տaɒ BF1 .kh^.Hr"x^EU_{m1mƠV.a6YIe<1rx4~,k h9X" WtT#HZνLmJ<ʀ'g\Dol 3<KlD c3VU% t]4" JQbǪ!8]Lj9'cb֭ssY}[weP! 4,3;℉ⓃⓤrΔaY)u-[p%Y2cAdu0޳a*{5\X*FFSH9bKd{c #KzrlkJX$,9c۰ېڀh,Tⶬʩ<|Ⓦԭ O0Ku(Ӿ%Z|sQ=Cj^kUaZ,H~7(|܌`7 oJ/kփvO[+Ɵn8qgv?k%җȿG .u #͸c` 0-Ѐ+%7AIr$@|ՌDǔ|l\1&C&-vLvU˳bu/T r IKʼʺCk+k,Eanw eoU2s_6U!073 ;JǮF>PP"9n @z=VTt+#`|3*`&N×2(jen 0trsKgwHח^MW o}'o|w?ڗgwz䍩kB*`t,rOI7Jq<l Xdʯ:jzokΒC;Z7IDnb꒵XDIw9z|n澵W sa@I䷮ڪn?V.9tdqxZ%tUܣi ]"9ZB-(#M/rj/Zᑬ#̹K|AѹC >YI(fTTsU؟h#(+tY1ԛOrP* xbWgjijE[3x wWu0{8Pf/pQ"4V6N.mJ "ck*YtI#֣uLe:ܑ`XvElfjCKǴ][޴4B]gG3…|GڒETc֨-h4]YWM!/xr}3"8hlrͮ`Ssc[X)8\]GyLrR#oȂ1CD"M~~xyv]>q1ei`RAxږm*d3h.Y*LPœ%$u%XUy1RvZ%U#~ka2 $"J<™d`v!xš"/&2/Ls.9š}s}6yvUv)/xSNfc ߠd^+75|; v9^6yBjrrHAy#wcVTY%-~0EBM{6Ҷrn6@nBW۵* `K1(T5W s)dbηóy[rJ=/_'~p㑻Fk|'~Ým/OOl|ͿZq7d^}-_zy~w_skv)8S*DGb'֏˺g й}d!X,gy'{<e2Zԛde4"$}?Al3l3p6l/U;dQQaz75ʋ_~m)5U_Dg7yҠPm:mH[:7`Cr*$}؃[a݊V FC\%,V(Sr ~+31{~(m9Z(lg0|ǹ>7^=@o!J)hٽiBR U"'0-U|'>Xi¡4 2^!HvVQT,6i@@zjNY[$)27ZB-pGcxV/aw D 7ֺ4&H#]~I214sέ!!u{uUkA햏+XhC+Ѐj:cUܭZÒT GW L{ǒc$wf`1 ޭ N~h/vC$ i58UWT :82Ȉv0W0^f[>k|Y2Pao kǒ݆w@< J 8[?}UZwߥc*) ֠d8]%LXhқLHR/-C ͩLÓoY&`HRIOMJB+8!Di<ΕS[g=\sƜ.Il + )WРxX$eI9 )W)oϻo8O ϮףKs#G]NHFK*VŬVE9 $C+W3ښf=Z5dGJ=2;}jR|]^1ҭ[ta2Қƨ'OAPrlYHɛ[UwE Eo9v&z_a$Vru7/uuc:dAvha֌q@=G<–F&Jul׭w'{.;)ٕgo@T1hpbǹ_7R-.Z]]] P" D A3{L^:<'{VW)a'zP)@&-Oh$hS HaCά/t~8+q3]fœgy|ߞCӭg<_v-V eˈ1ÎM<x@H N-lb$CgI`#S6#ÜennsV VP"=tt=(x@9B7+D "è㸕bA!|÷29gI wvždV@ AdYI". (裨Z ,03#70G8 &!,0O׋>|nvnbbеP:SL#kIL%uWkE5 ތ&yh'X 2aPIJHW,! +`t!mĪ@l3(vr:ci"pG:RdO1n 'e .CM硠ʞZ[ D{(jۇԬTbV00IGx}gb5tޟ b!Z#""JPS3wt$}'H%XCt#銂^$8|p.d@eXߪ`!M(nOe0*Cv$`ġa1+R_DҮ.G,'1=z7"9 %zŧVϢO"Z/YP !׸E~Qvw'?3~w^'?xLJgQG䙠V(:39NF!{hHKU':; .E ,&6֒vRg#mAX/;D Tx taH$Z6IYyy6Wq:VtwH] ve1p#زGxh%NRl)@=]3i{9z>qG߲b}$ Z$ s HN|ׅ*,$*jzTY9@:!rLBҀVK,#7|fyz<=x}U|_R"~殳ŜdfXXPPQkDX~–ShVIen!Vs(LF>O;I,q8]NxK4Qd4FNG0j±rnն/cR! 4uo2\>Aņ| ֏Z2sv-rSɢiڇҞaTI\^v>|07*1j<82lJ̪h\7@GWY@3Yu:Ǡȸ볛]Btdo}60jIdN'jS ٱ`Q3l-[I*uֆ_T?o|:Nv_ ]݉~_c:8z(zVBv,''9U &*Z2BTϧ&EZncEV9|ɂv%ۤ+4ڽM.1svP"-B#M=bש IMW pChSEڣ0LF 0/]ktc%AdOt7~_y×/ƺye{k2fm@?DlڮB9TTH[}Pi$TX"ʙRR .JRSx6@6 *mBdzFG1A*ywrDFTyvhtX[!ןt9NQ i@̰DzL?L! NT G[$ZVfzm@8UebNuR~ݿ~E*Sj+@)iyJ&n& $9yjC!Yv&O!J 1 |gewI̶u#6e5&W{A1[1_;NJck_] kx79a#GpQtM/}%#-qw&.Gن,/U*d j A~Br|*2bNNju&)EQO7ݣeuqax5{u'wm>;dYs]{Zd*lddT ^I;AзNU k6në]EJK 6:/hc`Djgdt)mՐ[m:VZ{m pMWQAqAzrDزT=U#@ S`PY ֏k{>nz ONQnJseJMZso&\iUjDRI6'T4E9~jT!C֏Y?~mj%ąɠbrkq^x͈cIV{h˺O=D5>XR$W:v{yb~'X%]>1K_`aP!9f˒ȒX w, (IZKNIn•EČY߲еTx̚R\>x|χMg,уO1zi ^S;Y%Uj̖OـY*Ȅaڼ=vV]hzns!rǹ>|]U n0 b;:=JS%TuɰeWwN^%uWd\;Ud JםN:Szk飯YY{AVޭ.&![ٱ_K[hx%ӉOaUNE-hY;N;Gr/&7)`ń KhGn/Gvm50qWģq7D yJ8 dD2fVE~+ѡR}̤~nC=tA%.R#}R}ٵ‡;y#u[tՄq^^_ }̧kMo?_lST,LK0dpGQٴ [(\Jfe+q#3Ⲱ<ްaAرTnUY/wez."`>(c#+w#peEW >@EMKp:zo.".9 .vMX}%2KL'0mI g#ACnTw.ǻVb('k:mc=Ϛԯ,^͐6b[@ ګ*2_-.ViV`K>9[ƺVBq^Dh|Zw'm| ,>% fܙ-)S;5HW崚3D_aO@^)AXq zdLXH7K5xG&Eo(wb@@7hD]c,k^UE "W3qXR>bQCw\ğE~9t'Θ^6dwbO( -A*hr\Y3y@V6NKl>dj>,O2*j͊:0?Q[:JmENv5+nRaFx!'kc*eP-/7=čHPT|ƣvuB1`9:(qq4U/YvAN^ʃsvQp5r tvV="JA54hZq @ [B>7?K ~%XŴ7BхI٨+mOB'TåfTw2&E{5)Wz/ 7ErP*;X^xbgE~JT+WLxFR̦Žr %jn@2*iF/-WYn>NJŪ %YTRu2X~?&ig !4YF)nZ;ĥNo,P_Ngd(ylwF?zl{=_}y"둻"lq$o}, g0yh)`qJgCRn_oBRCsTÚjv[tuxd#ئM2uدW;Zϙ^&QKÄL"HZ!2Qq/_Ć$$u uLl юC$-3TIiVܞ?Xl=<\sz܌od7'FYSj%/qocC'ct:fӑėy~9`*KQJEl)I2m&o yddЪ C§#Q]/PΠrYɲY(OĽUD| b8 רQ1x58%61O> Igw\vRߤ#)jeZ= 8`ɽbv&ie5kGIkY=a0?@M2 A}:f͹ڽ6ڎTW@f <ѽ=$k3%2[*CA>QMlHb ՟8Xv_/;pQSەPI|"ŏ;؈=8[&H]i Dg:~BqR'Bҿڪ.+d8|S3m)~Ƀ=Ks >T!i~Vqa#˷y#1\m'3-mi, =MYuجm3Vo4Y1ʏi/OݛV ;fA:52Ue$3'^%m-F KEN#$רM@"%3?խ4{3 ܣ\JIRTir8c. _;brf:mb>6 =g2\d`ҝtC,h3t&=`ft<}G AklV”Y~dNn %Ԛ"F =9W{Dr~rfv6fD*m:(c%Գ,Jx9nfpAl"E毫W-S.Luu9WyM(//rz@iV3^!XsUrwKZ1}n2뫺s]SS=kS$ jX]]$ uJOӱKwM]d9`W 94u@pm! J "mNr{0UfH )v*\.kriIc3{im/%`S#CF|]tjh|8C~_תaHK7ųbؑֆmd>c"'odd3%K0 kjxq2T<[B{x)4n% ܬ|&ac(G(ddX]aV,ıGJ0 5uռCkcH+&WE$d^㼛ᅪ &5ǵYUʭ*f0a q,R6_1ba4XkNMWg XץUGӓ,)=(OЧG3kg4ɔ}yꐦla3[EFcCxC}2EHtnH!TS񳒎:$q~F﫾>kP"sTNPrq ^r6EJ-d<`2`֫[hV]'z-uCH6=)#wkY͏*V3*XmQ˘>áXϰnN%u8"Ie  3ToMs7~_xݐd?|~(Q; ىCAli%HP#!UuWt"ڞ"Fsue^&;ړGDH b$z R^"(qOC{>?VSrs(Zhϋ N$$*f.H4X]*,BvАfxrcS9%dtM*eO*Z.zG֏[?v;zYQרB(%U/B*%2:HA`&"'l}FƈOH3PlCJkwL>#S%*uf^ MqBzm{3Yb=e ʯ(T.Y2$niIM~St*~y2USn H_2b1 ƼyE]ŭ c}ݏH(>.?o=xW7ʱ|~n@uMgkO $/d:` \ӌ2;UJ4$n [)=2u#( w79Z̪8kE>iQ3Б ]zEIf*Ke2T;U['$8JFeΙv]"c뾠UU8K+cn0-BWX|܇_L· >b_G{ܗR}Y=x,0ӒeR [ie~!Zs&H?`X>(2m3`iB11.:[?Yz^}bY-B>ӻTګP픰JK7ŰfޑՓ:|PFuS@BK/s91+S5cR 1x5ICuZsKW^#\%K'C7^UQ`wUQADSFFB}zVR5C3$1"eo#V MEm^ed5Na&`*p۷6| [ߕtjzK߁Ը$qr~.6{8xb_$:f/Nr$OhqM ?jy %6A0h%.osնZ"6ͭER"2Ja,w: #{ mn|s([\Kf+e{BC?<~+gxe]EX愰.f1&f:c#VWG.k%!ZYX@kbgcX$M=E6ͷt?[cxP?sx|w,KA%5 LU%ڄj݋W.}nHg[V`t– 9{!oAPCպ;uERPg$~Z, x62Wg<XzDžIKR^6epԷo"r,Zڳ.}K}=#w0_@}> 9钫Ē| ECT'9'iU "+ Eu4 u:h-xp¾m3" A ZO(8K.ļ#J, H-ĴՂim!mN/!`9זҀlarQ\'oK׶jG-ֿ=G1dz?زO9֝]=oKKk%tNDь eU$+%[RH̷̒t柭&CY-U~5DYy8ѵTUJӵ\:6ѸmՓt!tHܶʕ Dl#+3TC^ʓ{Tkȱg qL#~䘨nez`l) 7% W7'?WL'twLdu0I (jI|> 6!fCgeIf6^qd) XAt-njfD?&D3v`/` ]QĨ%]J[>2|ު/$65Z$XbͲqZ>t `@$7u,Ȼ\Y8_3_g^ޅ `2,ĺ %9ھ@fsQ~7y5ckYau"J!.+JC2M1Tcv/ .ؼC>hλI+I)Klʉ @T ͧխnU17ʛ*P ŔTaU3u^x+ q %Q9[Q?#{Ԣ{(-%˾Z,a6]MRv jg'17U`>DWαN "2(Vё AXmOݴo*ɷܘ sʚ{S[ yoaʒQ lJ .,&M*=t- cR4 &[]*(X#JP  $,te͟{'k`8{lwo&a 'U)KQl:gW7Iu)x8C {8w0[1"e>#UPM6T 9rv,ѸDPpaʧt6T˺)`2Q\-B}Ç @?-Ho.8pHZgioAˎ 勏?OϞϫN{^u ʂY-mDj]8^BS5Y8xG۸]C<@W5-:8W:9`为&xO^l`*ϮMݦt"`V! #Yu5*<=+TJ7%{2XyU$?Kܮ4C7(Yi.p YedH$y3<ɘtCGRȬk#[PsSݲaGC߄nb˶;e؝z`eg$@Wp*^-Fe-;V'aل=Y 8&5ȹ^͊n2>{kV!m>Uy~Ə_}ڏzJN@tߊ~yItuM 6d!+L XlB OY6\ZlOCL~8 ꘁ(J$cg Zٵ>: I+ (KguM+x-Ŕ._K;C&zXn?^G?~G~R̋Z?=ʻLщo˘>V~Fk)#uJ&* ]Y`e('h_Eպ=>`ya=9J &P/L}gJX#V1:8YSf,_H[ȟiqZFVNҥJ}---0~ .~˗?=w@]7.$XpPYx. Mhʬ=;kmvqAi.ݼu*M;'t-hQ[:` NK\ɩL5 ٩]|󻟵f͟޴=NiectNig3 8`7ʎmY˘N.V՗ƛgk. w@j!* n0%NHY:~yw}l@D*KJ\* Ws%nХMmS>?d@<˪ %cW#52SJP~fYW+GNb.7@sS !3?&]Kt]eȐXB=T/TAȩҶUT2AT4"u1 A|ɬm1EF|A(\G3:"0r:p,U)YOMSKL0rL:?')To=~z+E\O;;'E7` @{哢PuSEe=givyuߠ([VI'Rm..T+C)e d VETv$[r$)EK"#YI9`<*0syjҩ:6Ld?'P j_'B{ -uYK/#>L%:ՑhKh17Ȱ>ɡz"^%$sM0q01 rkl/&?]7ydžCW4c/>wǿ/_G Jz Kt1n /ZGd`EayZVFϚ`%UCPeXӦj)Qbt[{w/K`Dֹ gAT]ai4IpN"D;G!p$gYD<*C<< qAuD}{e^>/ƋkO){?/OfO{T>U'&UΩθRu"s,Zj%NcY|ʒpN6&a'UCc2nI[Oi7Ü3"Rq m1Tt휫Ժ*'ο'GibANKJ 8 𨩧d٬t+5?J!.VLH+rms՟OOJbSH^ћهRLj>K%l5ױ-PNW#/K& |*se2lBʰquQT΄<.Qg,%&z-ϤA pR'єA:J{fDl(v- -[Сȗ:ŵ@_JHQcGn؆$4m*A |jU_!yܲU)jN(]T |BnQ+^R Dml|.n7YE?eyُs>[?kb'hq+L+s5,;]veLJ'=KU͉!9V]- =ٷ{@TL"khY#[I-+/@J3$9Q|c 9T,bVgNv'V/T!7p,'O;KDtuJt;r|:ItV:lsPa>Zvcp,A*Ϣ~U)Q1 RTI{jɢ[ %]`vyNIUkfԂk :dCEN˄$?HFWF/*~IV}1 {(V]zzPeyUR%]5R U~Z7="G$GI6CZ#KϢV[1ld|-nE𳄭rew|I/?hw1Ppt*톤yi \bJ=喀&3WT ]~=Y _ B5C귵u!KvYYWv%ըPaAM ,ab^*YnfU6QV_S=ł]76?_wmTz&sL.[ϻFx״XUeaU8j-3dn7@KvبL$w_ҵqQMf"$8B.ljoS# 塚p6NKL=(2 !{K*.=u௥cB8 Wy^w8_y_>"ݺSbhK `AJ2n v:4ڣ,]yDl)ݲ;Ck=I'*Jk/Ħ''+M`TY1C 8*)A]-y pt׶JӚjSCř\'a!V5Q/ Kb6q-(AHrb ZM1.[_7u+#wTx6X̴|vD|FJvr/*#%:")X@у:`!3|k]ÝT?eF 264\:w7h',+StP2aV/T5c\߳8wog>zJC*üW{`.N$RuQw{wdTcSFgo-lڈB+,`ʶob9AݫNa˶g#AHƇ)0IY:,U&꽊 餄J S'z!-QcՕuRxUP>q/{勻ܽJXWo}euxa*eH`U[\% pN'j5Hx.]~!E i;0jp-WvleG 1U%@WJ:F2HjG1 9Yj2lD PZX-*&gy1Er*]NYHuڭonduu ;%z[$a y}kL y7l8 \rR"A&2vu:,] Cg; m'N?V0@'3$Vī<ܒSPH_ry}}8A7!iLҙRCk[$(% ht=IDH1xVЏyhXbjf)I,'fz{)3; 雼GbĀ/?m-2GAwEal6 ! ء7@g0w ΦT|R*'6Ӈ06pHGTzqVRv^"P"ʭڧ^"ܥ~C:1Pu%7_fdf!HpEB;PbUMSw^J?m/_+y펮,n?ٜ@;d\W:ށ*$i'Y0#~"Jx1@RoOFRt+L \yV~KEg^/?uð.BEFE t|sU:j,/0葚eIYM/V[yB"FCd)c[#uJ ZUS$ Nulc A4YGNl*EPBj.V xecMuulYumXª1h☇ dѝHI-#W=;D&KLU¿Xˏ6޿18{ܮJU8EORKU:mH! fK%յ,!*! ۢnˠVIxFC8Y-0g70;p= i*Rl/{84O2{mǚ5&AE 7"e8El *iLUEq!իCK$EŒAwwK.d /uEagdz'e׀(ZdkNV3rTH/`I9˩4 ӄ5LrJ2OxT\kr:\ ]T\tf[ըaHGL՝:X{f||MBjwދ?KulN*K nJØa||5hO+^I逵HֈbH:qߧ-qH͵ Z'Z鬤GH<U+iTU%2pvyGt?4n/Iua)#B(^2L.kɳTr$(OUؠ&\fģ>]I2قˏ }a;T H%2*̃oԹde2% J٭p?u R!N  II,zAg?={/^>{wEd `d5`|/٢}n@* +4䢞6i ;ʟN+5dh8L`S=[JQ^Ut$o:HsT5-/A3U׺B|0yfбr~6a; me;H:b]F  yُs.3a'CZQ[n0cx0Vz{N$pCZ;aYÆav=[HQQQOmT K ١a$'n]T3Ru)ușugRon)I7Ġj%{Jj#g'?=x~7taOLtP7mF3xd̖>Y,(+H߰7t>\ ?UuNC!@/^L}:c@,f[t?Ju4!E4%x:խXA eDSs-ld6ȖXf^v8᳗?nQw}ܫqF}̓ND~TA><-)Ų):N6:e- FD_խ!x^>^sHwߪH򀙮a1v0gI9?j”  Ic{Pxknf/+P~_;t:X{m>;-*e%ȵbB1_]c)`5`$:Q5uVNIZJn+!~hVBB9!ELV`p֡/TmXŹ6, 5J<6i%I!LcO*ݎ4Gl:"TզuIp)3RE6T5k#0k}‹]HmmX;`wV`}WRDP r!"gZ>xgW*'_(%aŔ}Q-7׊ ҡ!)6D i:iwT2e`JV8 f'6[m/iC`oIݻ^4iEe]:KV2\'5u/}:FDSVTջ cSCNʬ@$bs*sbپڡo־K$$duNۋڏZh; `Iʼnb%%U$H{!ž* ۂ W^[bW?)9cMe&'k1V% 2Xe2*hMU?R=?>{b˹Z-?~߮ RcÖjp_Us n1 82ou4jHͪfaeR%U OdG5,vIRΖb|LڇڀѻS\h1YEP@%4QI$B/jU:PhI̧(Ȋ9걷iG%Rc]̸3 T B<#oQzI=*sFeE75@.G7TfgSU,=bu3Xq*4޴`'XAxr_9c<׵sIC:=Np4IPc*1&yme-T B0^`故[:,.r5s3#m'+K3l_ Cĝû Ve`XXvDɪelIe@ YLy'cf$Uw @ \ "HӫrCTz̉ fSuyfM5S]=ͧ8QYUkGy4᝕C ]qa[@p2.Vx\Wlf', ;+!UՍԃcQ4O=! uZgօV_t6I +vuJd3vsas"y̳jb8?l#4 i@pv*.P7*PLKhW")+>)Nr}  '7qEsZ.0|Nmp PUaT{$U&38{U2ۚ'|*T3X"Su@?Y[$~"l+کevdƟug»*;gP|[d1ՏCrJ0eUG2"-Cy@QΛxoͲ["_@caTT׉NA*59!/)Tvh;D< ˢ 58Up>y {~ᵄVVyzyP7@@@*@xx@ [_;qW ^t-E#UGɋGz{I=LgYc9X9˃Z*1odYB0jpx¸|"u5GQwd0mS)6*1½C.*NS[r%`N*UgS)Z)W YYTGbIWH|tU%tB'˧Zr"m;`r:ȤM~Y /1'i)uѥ((FJK^% y+NJ\DQC$fW!@2579\2;[8P}ev-.U9؏żK7;mbKk.ҋSYNAN%]$K~dMC2W('?=(٫^](,qIFA8qa(tCQcT-@*w ͼS؀VUߕ,VPsdߑ {|lEk#1.'|6$[O~(~HFvAUVs7CΆ qH2<h{I,@Wzݒ@]vPRٓdW~"pUEe+n\ḕUI}UqΫx IҊQU^m.F$,n0#۸{߉ON ]n,RďJHzpSaigU Ş1@uΖ$K꓁f@K@EXUʫ̍ɻA UU)IhX)rpTvLJ`q:d؆j²*l%ג3>u])dp-dzYStr㥷֧UɕacwGkL1}JgEOPD^`zD^— ardNzAqNZ4 :A "22ZP!| b rNO_.j kʹ{$MEr a!*, I]Lhtq%muDEFVƛ[n(yEQx:/:M k9ʡ: PD$[eYHJSu&͏.CJ6|$* u\巡S}6tA΁|A^L| e~3_}S2Kݤ9u;`kYZ9ڦ>h-Yv_=$2o3Ypd+hH:>&ïå~7dWT2IG"Eےb^[yFA-N- J"ƶ?'*FW3KN:t.ty6pv*O^;MX>_VWT Ƴ!s`RS ]Jsҏ1u=ԈQb4u/%G4V[gAv 9c1|?+M_,j& AnYE10 <-돵(zOH26B:>F + Y7C[4O:rh}CN{mu"uHLԆ>,(#dy7% 9j\,}l$u jӂƺi.MG.yγuou%^ѳί~ǭUɃxwvv_ӎJ[REBIj!VInT̄'Pe+jqCсKG4X*hT{u;{o],8q߿gFO}_vmxl %5xLnUC5K,3K -J^q@TWOC꧃1M5gڿS>=F-OtFx܁IeP'xJ:r'8bHҗ3]U:+gY`J@B8C, Q`;k_;R]m?IP*v! 8mTvGu;(2Ev^FU2g$t7& ˌ{ZmgmZ F ~1J*0(rkȰxAS*Bq Ga36%u^bKhJ(5|\R]ts}G\=rW >KnW,Ng#M6-dk ɸCxy]ܗ$B(B hWo]:af mƕ 'j삍xz쑻 _5.|+ip2E&tt\!;J1r lq06Ԩ"{5O%//ըUfT"n3ڸRD9[~JG]ijGwQzh'?W]NX}@:\}"scj@y_Kն y/5 4We~l~HmBY^cd/M^P29맑YUh!,VOFbȼd&Meq.Dl #˧.zޚM҅*51@5u`m:jYrU퉧WYt@gfv@Xt>[6U#a'Ͽ-/]$"}OU!${IepJ֖/Df}R;=..bTbNPo(r26+Fq_wr*Li1,`ڪ 2}fNuҚ]Sr :$kMH.@,3. _:`΃g ~e{u}t>FLǝ,$rhʮd c*؍9GCrS- *1$}R̬ȑ9w+mP_y(ltAVQdžD=ĐTZn%qqPlQqgv5[ 2cBJAv1cK&{WEb9yvstHvc4֩hˮMڽ4Re~{TUVt S e!øDTovxbATN_ Pit nb^ZБoaTc?lWAqkS)GugrD d/Ζ.zvՏyqpvo]7*դkLi(Y6͎Ҳ)*8_ٳ,7({ܽД 䁛+!2Kg=J&6ThI&)2OKfnC NڐVH`>u7u a `KL飱G`،kЛbfBg昐?۽n>{/ѫwqO%5(5`Jf^BemXSD7#[.R!Q`lmp2پI;{` ݷvۛ+#S6@dҷj _`kCO>,ғlvba`avbJ;벫/ û7-{U&@VӚM'u-ˮ~Vk;(ŗaV(+UGx[>lQ!OM?1g'),~Lodsě@'/z @|۠ Il8frf'kmF6-ĈmeҐLdJ%jYSeM LO@k4Cb hsТ 2aMTٯ>“NBi}SM2HmY4KzIǯ_||^ח\ć~{1o 0I*ӕ*] PXn,):"YadǴ~k.Ux7iaTw8[ٜ1 WY=y N/ %߽['a*W#d=2Z^e*]>0[e&%k/:!(MZ)Ϫ:ܹ?"cx9%ţjQY$zRCq+L `V Xk>E.) ׮SfmQ3y[!@3ҘY=;?|;[5Et6NbuGѫ); 6H/\|&? `ٷQd"~פ߾Vm/bo:!z0&|uO?׮My=Oӂ*z5GY0LKHDY]0%R%0ئV&V1 P.ת]:L"#fc䏆"5 cV^*L<>q>pWl_\e 9TfVd9 [k:df gd>$\etg7\fı {]tSGLIAa炭eBeY7 4M~Ř sEeNV}Ѭ^^; fz5]rWYR4.KMN~;w>?$ؙZ_d)uWU] *V~ lo{U])QiElh55 BR`d{jt7/Uq,>)-4{"]ϲ:@/tbUjR7?Vfefj\hLV+ZQ-to~;DޛbYC漵!؁Z`X2p%eB.D"?y uxPeIYE1M'VόH4ΟP7͋|G:Mm?;^} |wuIlu5 {a5i Z-b𷍡BKC=X#$=1p$jܡJLhU .^ҶFW+ԧXbA=fD=%έt##D|2=5¼)Budɻ m&gW%+/R9{T  9-Df|sPjkwhv+Ą5U@VFi䄺_C =w=s;#{8;aڊ>I6~$1ۗ26EwXdvI]@s C((sI?.hH;Ǚ^JXb1&YFߖ6xWdeӃ[.W]d Ra"V!̅\az~!,&PΨ-QNLĜ4o(1Lv]ڹUyM&ddK @lz=/6P% T_WIZEM_dRw Q km}F+޳Gڼ#-\`exwz+[Kd0sNՉFRiSd{y'o'B㱎Z@s$$-TҳɪqdfͲEH  69LƐ*M$9-hOYҝF!D ݐ)eSܪF11]Y, WaN6H2y@r_^W'I}{TZJoZM[ƩT8 hy2% |&Qɘl"Pc:˛)[IY5CYW a4kEB򎵠_AN X:=q!GmFkgW????1 ?}detR(eu2<9JJU^KRP?|ֵu}9݊*$P \bb5NbLH E@B ;[oGOkjmYr{z\ַU )&`H[ JHτC`&k84N o; 9$Lv>Ja;'^ Y2+32+32HFa %⪺1Val(vz a{ @ט!3S(N!C.]cҗXkG]>vXcέ$gU_{ra@-m+QLv#>iq oKQ@xvA-Oi4)UZ0#~~8W^{n, yD=O7F& ܐN OI<9LuPch.]6Cu6dp0x:Is-SkBy3Qe5~{!)hH3HWOm+YXN,\F3On1A2Cif#KHOdQEtDe 0jlwWW@9V⏑:gQg>v9(փuGa!S' zW`(4AИV )4! N'eBXkXRfacIy\ LY97D~ tv61jӐ/n `ë:E\ ȫ.`M\9|a_gjztr_xn-f˧z"3{9ql&qD].V K;!ltP!Qׅln,rz-r F!5ST  /-0V|;}\J'Q~,A~<1(gV)v Js+2jHZ V,ǞR7l~N,ڔ x:L}ӱA;zM3S1^}qWEĮ6qMSc.ΚZ5D!:w836rgɣ_˗w' g+ᓨ\֢)TI{D4 .xAl@ ls1JvWm [W:q $u9HQ,>ݖۀ&D#M Wbt#\uqGV=8۱A !U\[b$bKXQJDE{Z2h9EoN~G`=,jXinTWHjve`unXAmDat~M&84_% w=.Znwt+8:ATQ[[\DϨ'j8Qɇi`O/8÷gz6eHlU͙chk7T@c= 7{1@4N/U Do0uܰ$?(3~iRp\ F~t"7z\Ʃ-.5ˬC֊BQp.|:Dܥ玝doޛt v7.v'"(c4 uVZNuZݛ53O S\jN NVC pu9~QF3m&󝵯W4up@_ɏcͨ\ -wڠ1O5lW2D ~]i_lyq4ҏs~i>|REh`>fz^X\kz /IC |KN4cTgЂ/hyY3Է57 xWFB|pjz-MkkuGP.hqkk1c.PVP4j[%[N?L/X,z刌]ƥ}k=}|CmIY2* ()  -5+WM\ܱ$$Zv;<t64%Q.8H >#C)c}Hj"Kaϑ"ràWA eUjahrN. x]6N{ǹiy7<{x+Gv8Zfu|Kv Kș3 ]P?^R޺JXb)vË;=ѻ,ouXwm!-!# Zٖg9T AURZoMClqu6%q#a fԡlrn=OSQ}}k J璋"*W¡D@4[e5 |#lhH$4 f>듏E$bv6uO=ѝVR!Cۡ04bntʥ_CӚ5|Mu"/(f|Ijt<[2<,ݛ[oxƔK-iCϿ~ɷ4] ߮o·7>ITI/SnRfF[ꀅ>=LWH}XЀZYt -4Aá ;}DW}-ZT+Q Z\gR iQiYFg\kI_&3B"yt^1+;J tZ2fdATu,.phMs. XqXqXFPTm4z֫jad"͌3NlH5@xQV1YN;YvEi@YK>R}Ϙ{Vb@o@_pF6XGm[m@P6gQu酻Ɗ?5V\cŏPmKxKzP}rF3E_{o* >28j6"#4hjg{0N[٨CmM UAFY@C%r[:+_~E~9K>I!.?FLIQ#}vxWj BXGzp8c&Ǽ^zlX\q,v $[+Ztuk ,eCd:lۮx(i|$%ONG AQrMIg[Gh9nyؐ?էϱ>*{VE `؈hҀl ǃQC@bLT5ݼWe?W!lДyZ4'r΢RDztjU"Ozv,b^w`ڈo߂6 .jnYVN/`?_j^ F\B5*QX^&ۂM0gְJ”A諣Nvw}t|'-דID MlDf&&r;X2T;eON.=v|7/nW|sŷ+%z{K0תt ˌ`j]>i=\]S_l ų0jziLo:Oe Ss%X'^j}鼏j$_{ԥj§V^x om|[w4mS`z1{Va]0CҜ`W?丐79FqAEPQ]5-,pm,ctKw-*uNکc!3VQjBo.k:1X|fbaQ7sՅVj0a[Xc%+W-VFzҽ"YYu X%x }ܺ:z#Q4-0PAӀrJ҈P?/퇏VO׍ ^OlGH]zŹʺ`};y 蠡#ZQ|U;fZzcDo%2 XIU6Яc6oh(pG5CShM Df5G5 &!ȡ >r ш J:[ Mc qWT'r@Fvt}KhQP W^9 CtsU@bV3TD AJ:"O* Lzg(Jʒ15vIoTfZ"^t~/wǹ}k8uvIA K(4tYc>=D^iE(ƶ\CPPSyy'+OqJݜj:'[A; \.#:,`pCޖB lbR3 j1Ry+W!s$.8w;4$(9^!p~.:et.CD]Xk>JBK@ޡSYbsYhxu&ΛYOc/=:Q(11) `LM847@1i=7r?@:젗̇Y-pX zƮS@i:ju N8fA{ٻ$60G 获eS'+8ʦ}x([re"ݨ ;i0{ջP2_rťJ]\}Z\]q> {}99W0`=P  96aw],ih~jW[ FRV >T/lXP5g}\D$ԥ@2@+utR3?/7ҝ?Fk쵸ξ pt]G7s u:bsU o n6p$ B)UUÙrinMReM :<~!-!N_䐼Fl:maez㨻A<۫vC# qšH]+|oR[}lD`%T*CMܢNC=iUj{۶A'euyz=W`dDAPUuEWmŠ{躕aS;r^EċqDM=2֒FBo8v-q?!Z,6&[=zx!pnw;"89uo 25]cf{3󴰏A,H,fF F!w&Zܲxm䰎x|!*Q%ߘm)?ƨ|tFI[ =&ctgt&<52/kN{pyto_U9On{Fx 5鯾govXa}!ܛ.a Y Pyq 6U֣Yǰ&"B CMoaJucI<u7(Bu(DOe# Za/Vښ#n& Xmmf% uյ6HQ,ddh%6cr1فg}{Y_n^‹oD^#vBXw"BTA6CsBK̩6 YGv+RX'O Ww%Kd%"޵WN?Wb),򓀢Le?T2$=huZi+)*bXM 0r1^MLO>3OFOc~g]u У^Paw@:뭣[J뚎Z_Q3S'8e|ӯ)ѓ:X)`)o=r<܄P``h>ܔGi *qF ށ3X]cYc'}/~,ReDǧ??Zyl׿^o|/{?G[a^~v%e,UҪuqEZVsLeˆ41)ZdV |[a:<b-}LQP{{Hu!⫚[jވbHM0Y!P]cԈgT~LlQEO= gfmi?3hN7IUFCQ++.%u׌OU(Uuo lcP2MM@\C,kߔd@: 9r]M2S<9iw>|m<~o7bڥQUTKvÆTplc@ >m:aXF

G/ݟo=B%XulIBw`){'xQZͨNPаxw< еǴc:q`䱠OSǞ.Q%o)FЁS;^&k(h&|I56U׵B98EAI;q"^a.BpM9;A}pjOރpb?'}8<ebvgꪠkh&U@ªjVBfvآg`aJHF>mQU}KF!Kլa-oqb<tkGi'0hRs<'@(OJL/MP `&API%j_q V'#S+ngW˯Dc2ĔzDyUWS2+A$Q:=B fcv[8zDuuqDBZUCA9W)A?*=;:ixc"[]UvVp쭰z@rHm4%3n 6k?uK<"(E{_yT'q-ܢBln,:2fHa&f[j;hvhZ{r€%AqZ~/퐷v~N jnfuyY;u=3/~'~B1l"Ǧ-K"<4 ? jou@ЂOqZFt\n4$Cc;OX "DňDg-&a 2!.쌮A%Q**. :{BʮV@ȞjƩKn?}DzvXgx*Pej;("&F9ˀ]꩚!UtR՞&LquJS"k59݇"꼪1.,_SLlub^sgY'bf@:,7'V ՐP#W)56A@/G`L-_hʭ+]N`.+B7y\I~g7n{ ]RhkmP`EB4, :ኮ9mcIx8UDby3Byۥ}}Izox/۸?~O>̪V[jd8Qg"[GA~!*:Kꀘh }KAoUMu&eo Y6Kbc^SPzu=E^l'E7^ Bq0h*)->/}kx基֟_G^y)VUOnf!ERg+75LrFSYu$,cu m%{FŃPg. )=hGC Y:KWqj#-׊kE˵ZrhV_Y6u5^ֽnr[W3,Cm шK]#Uwv4˺JԚduK*SA^[A/C㠚vgm}zےX!ሥLkt=8}ttQ%lX&̓-ժ5@Cd؁oY}J#bXZ3Z-o"xzWt-t6:jcͰzulce˖{t:^G]zn1Tctqzvt އJ/StB3`6Th^\p\CY#15^S4>8V֙$Gpo Ӡ MlbZiǬt ?J}0K[ZrՄ!Ka={rXé4 gxXN<4 ='x"بY1AMFYZ|Rڥp--zEqjEcUcjmj5Hd)1l8햦1 Pӓ޹zgx{c>Zn^zjK[j=2P bQ$% q_׎ϱ\pr'66qyکAvlյْh׊?e׊UÑV[k6DB +vD kT֏>P q\EgL&498؀ɸe㻩p?qdJ-ƍWX0eD&{asjPڳgf\!̹3+pyCS bTBo@Aԫ+(.zcy疗ԕ]`1¢]9cx76t0H3TLlKA?o/n,^_}ئNO1 z 礶F߬#M[?Oq6ט} 0i業ʺ:EĠl;^#dt1nM-,QZWP!5c\>fd-t)yՄ|-ˉυa!Av,l)C/3U4G  #YL:=EH8>P.efB{QN%laj8y)ȅ3=BrȾ!1L Vb+KcaT8: odN~斟?}!q_=\>o\aW[5)7BGfBn.vQw~v%2*f3KBW`#l]TsuA򉂻AX08P@ͥFhȮ+"/8 ™^xb H|v 17Or^IKC]Xlq]ǜk@d `}sw߼1>kv;jʲPWY鎀\ ND\ jQ@ F G-Q֩7 5 #V@=wef[debnL5~ACJ_*>phXHEp5B⏕)YpqߑJ<n6gvܑŅSN4$aH LV5+wu6QU13ഁBYԪjMhvCa1Rw&awpD8zܻH?b  拕|֎I==Ns,=gyCJMX| ;8K(:nn% +۽Ie 3tR p_!ϼ~ǟygk<:>9lg~3yǩ?h?t$3 ۊRtX*aix!`, &mj8v96L W ɈĥaDKHFXॹ'2R`M}v< YU%"3`{`QG<ƪl:Q]O qE U@:zz~=ӆt"ݿ|/_yHG?&mHXi t~CRPy< ~5Hۣ (x #2  ˑrlH`Cs|d8z86h~!&v"W'(-h!q h??h h|5A-{ C)z=,U\J9:\RFvcUH _S׳sݑ1ArOG5_w^zE9B:p [j)7`=Q-UMqʸjzdN u!}dr|7^YW9"JJ]˫z JgmkIoO;IEǯ#|u߄YJ/,o}W߼4VR%V6a]WCȿVkNN8U.ko/.7R28`LiOL:–!ѕ2TKf,:O$#JG myì#, A:XF[2T/Ԡ_o=K?w ~!{nV. [lNwP VNb?&Bpe2+p#V X \FTu#};s$!`cbE<-uR Ȫt"v|B y=S#įxyUjVŲ ڽei^G#jW}V[ M7M 1.@pr#׏!p"-Nc[&a28%d|ji*[c 8͊F{)ً>@r׾|Q)ȩ[KU"~nPW[A0f! 1硶EzJJ#:[؝\@x؍fu0~]`cu D"T2y45**Y UgwCEݲ@1x`NͰaO<ϔJ:cGV _,V6~&W=3/=yQR hT7[BQ=kvXH8'6s=E[XrL*yٺ>ylv6L0!;wR ާ3 Ѡ7^8+ AA4,&LDd"&iYOŗYNg]B뀙l;y)(nM 6Oډ% IkS$26 *lY'd$̪?d~?쉯~_x{g_~|7=]{w<ŷ{/x׿˰_'>Zķudڀ-`D ~M3X1+"Yϩ@4Td qS/ΝC)\ QWN_j<m}hSJE6ipywidgets-8.1.5/ui-tests/.yarnrc000066400000000000000000000001641466162644600170110ustar00rootroot00000000000000disable-self-update-check true ignore-optional true network-timeout "300000" registry "https://registry.npmjs.org/" ipywidgets-8.1.5/ui-tests/jupyter_server_config.py000066400000000000000000000002521466162644600224770ustar00rootroot00000000000000from jupyterlab.galata import configure_jupyter_server configure_jupyter_server(c) # Uncomment to set server log level to debug level # c.ServerApp.log_level = "DEBUG" ipywidgets-8.1.5/ui-tests/package.json000066400000000000000000000013131466162644600177750ustar00rootroot00000000000000{ "name": "@jupyter-widgets/ui-tests", "private": true, "version": "0.1.0", "description": "ipywidgets UI Tests", "scripts": { "start": "jupyter lab --config ./jupyter_server_config.py", "start:detached": "jlpm start&", "test": "npx playwright test", "test:debug": "PWDEBUG=1 npx playwright test", "test:report": "http-server ./playwright-report -a localhost -o", "test:update": "npx playwright test --update-snapshots", "deduplicate": "jlpm && yarn-deduplicate -s fewer --fail" }, "author": "Project Jupyter", "license": "BSD-3-Clause", "devDependencies": { "@jupyterlab/galata": "^5.0.1", "@playwright/test": "^1.32.0", "yarn-deduplicate": "^6.0.1" } } ipywidgets-8.1.5/ui-tests/playwright.config.js000066400000000000000000000004511466162644600215050ustar00rootroot00000000000000const baseConfig = require('@jupyterlab/galata/lib/playwright-config'); module.exports = { ...baseConfig, timeout: 240000, webServer: { command: 'jlpm start', url: 'http://localhost:8888/lab', timeout: 120 * 1000, reuseExistingServer: !process.env.CI, }, retries: 1, }; ipywidgets-8.1.5/ui-tests/tests/000077500000000000000000000000001466162644600166535ustar00rootroot00000000000000ipywidgets-8.1.5/ui-tests/tests/notebooks/000077500000000000000000000000001466162644600206565ustar00rootroot00000000000000ipywidgets-8.1.5/ui-tests/tests/notebooks/WidgetArch.png000066400000000000000000000550221466162644600234110ustar00rootroot00000000000000PNG  IHDR2: AiCCPICC ProfileH wTSϽ7" %z ;HQIP&vDF)VdTG"cE b PQDE݌k 5ޚYg}׺PtX4X\XffGD=HƳ.d,P&s"7C$ E6<~&S2)212 "įl+ɘ&Y4Pޚ%ᣌ\%g|eTI(L0_&l2E9r9hxgIbטifSb1+MxL 0oE%YmhYh~S=zU&ϞAYl/$ZUm@O ޜl^ ' lsk.+7oʿ9V;?#I3eE妧KD d9i,UQ h A1vjpԁzN6p\W p G@ K0ށiABZyCAP8C@&*CP=#t] 4}a ٰ;GDxJ>,_“@FXDBX$!k"EHqaYbVabJ0՘cVL6f3bձX'?v 6-V``[a;p~\2n5׌ &x*sb|! ߏƿ' Zk! $l$T4QOt"y\b)AI&NI$R$)TIj"]&=&!:dGrY@^O$ _%?P(&OJEBN9J@y@yCR nXZOD}J}/G3ɭk{%Oחw_.'_!JQ@SVF=IEbbbb5Q%O@%!BӥyҸM:e0G7ӓ e%e[(R0`3R46i^)*n*|"fLUo՝mO0j&jajj.ϧwϝ_4갺zj=U45nɚ4ǴhZ ZZ^0Tf%9->ݫ=cXgN].[7A\SwBOK/X/_Q>QG[ `Aaac#*Z;8cq>[&IIMST`ϴ kh&45ǢYYF֠9<|y+ =X_,,S-,Y)YXmĚk]c}džjcΦ浭-v};]N"&1=xtv(}'{'IߝY) Σ -rqr.d._xpUەZM׍vm=+KGǔ ^WWbj>:>>>v}/avO8 FV> 2 u/_$\BCv< 5 ]s.,4&yUx~xw-bEDCĻHGKwFGEGME{EEKX,YFZ ={$vrK .3\rϮ_Yq*©L_wד+]eD]cIIIOAu_䩔)3ѩiB%a+]3='/40CiU@ёL(sYfLH$%Y jgGeQn~5f5wugv5k֮\۹Nw]m mHFˍenQQ`hBBQ-[lllfjۗ"^bO%ܒY}WwvwXbY^Ю]WVa[q`id2JjGէ{׿m>PkAma꺿g_DHGGu;776ƱqoC{P38!9 ҝˁ^r۽Ug9];}}_~imp㭎}]/}.{^=}^?z8hc' O*?f`ϳgC/Oϩ+FFGGόzˌㅿ)ѫ~wgbk?Jި9mdwi獵ޫ?cǑOO?w| x&mf2:Y~ pHYsgRiTXtXML:com.adobe.xmp 5 2 1 2@IDATx]E.sB̂"(sVzM]&P\âY ׄ+ kNqEEL`B9#;;eMt̽S?wowW8U?Ni  D ,㾳D"@r,7@"@r,7@"@r,7@"@r,7@"@r,7@"@r,7@"@r,7@"@r,7@"@r,7@"@r,7@"@r@w0b3tP3{MQ? u@vM۶mkSeHillf3π 9"3ge!C=zԖ 0p@3qD3wܚ98itbG"@3ڴi9 Z*&D +HdY!v,TL@VȲB" Y0h e4!D $`R1 Y!@" iC@0Hdb"@BDl`ȂAKDd,+   YVH"@!@" -"$f;DCD Z*&D +HdY!v,TL@VȲB" Y0h e4!D $`R1 Y!@" iC@0Hdb"@BDl`ȂAKDd,+   YVH"@!:f*n?YlŚT7"ӪUΙ3Ǡo̚5|'f50kfEX믿.BMO?d;=_~1oYb%jvX6Kӏ?h6|sop {_|ѼfV2cƌ1PAɻ{sO{;Dzk$dz{BW߀#FTU:LJ~[4cƌ'b,ҵGB4C,h}-c!m G믿~jY.M>]1\92Tփ_=ȩjgvj- ͏a9̜9ӼkzYp8_eUR=\se]^^bSNu1:3n/.2N)A?`婧2}-iiY!#gFI%\sM5+,.>^C٪jL޽̓>huy-ZfwbkpiVFix1` KUfϞm;a F 04*aHۺ^۶m.;k g^sWg}]ȗ{lGq4iyl]we6d; ??ĐZE?ӫW/+_~ٌ;A_|Gw1;T0Kڡe{gȶ)`MB5`(yFH"pi򩉄`"xz|rB:Ep7rh/Iv Td?Q22w^E/B6Nn)RLX"!'be2/qUpO#Y(H+ujY}B֥V!C:^Q/~3R; _4-2MG~Z9"ԩSC6hX[K,-*/GȢ.jN;[B,#u@vmgN>\(fix5E/Yml8]A/.T`0Fd<_Gѷ^u'Na-MDd.r[ PmV1=zF@C=^bX`'UMUN=MU 1!^ 7jKFd/h.}A; NJ|Na(-}׳:뮶s1XS $R"+|IP|0+Kuť:8CEK@Zd \!+PY^Uc@phjƉ C# QK!xɮz48&O#%` pXϨ%] J*|l|Wxc wNj;s, ju| &iCKogRFg*ӗu}T]zҴJ~u؈ cd;&%^y v':&nx⋣yGwom`A[,"@YB4ju4YYmEQ'(DP G$)[M:a ŷb>yU㓂OtvL|xSiy.lBF>7bcpW>XT*> M.ytݺu'L`?x7$+Vx^+fixiYw (/ʰj  JF\Q8Gl< #HZXؘ gUϾE] a#m Ysg*IO7?bA.W]u`ZtQc7I42=;HdaڒnA!!&29d77$ $Z 4MRyxY[d@>XYDGb BPb "\I"BpNI3 +յ#-Z[]: rxC=:*!bcbimF/pNU}4M:  @"$!D aY  {G@*EoHd|;"@*@DVH,B@}#@""P$ @b"@Y}?  U"PwDTXFDVχ#DHd"D7$~>  @"$!D aY  {G@*EoHd|;"@*@DVH,B@}#@""P$ @b"@Y}? h]A4h2dHMtQ  C`ԩ::udƎkM& NDj7{l3n8#vڙΝ;DVS! D 'c!@"3c!@"K"@,ό=&D ,/$=3$ $D c"@bb!@"3c!@"K"@,ό=&D ,/㑍1 :a|`@@ÇmV7⑅F;1g9rd)'E6g˼sݣGڲ0"h&NhΝ[>'2q.]LCC^H|@6m1'AKDd,+   YVH"@!@" -"$f;DCD Z*&D +HdY!v,TL@VȲB" Y0h e4!D $`R1 Y!@" iC@0Hdb"@BDl`ȂAKDd,+   YVH"@!@" -"$f;DCD Z*&D +HdY!v,TL@VȲB" Y0h e4!D $`R1 Y!@" iC@0ZLu?`[l[NO3_O/b6xcKjz3FYƀWyg6`OWS͖oooo?3gv7[l6.2 f3ڵ3[m9YgeF]u?M^Zke_|q+=u]%]qfUV1K/iӦYveM۶mm_WXa[V2+9rH/0W^y۷e]fmf:ud냰X`袋Z];v4[o޽7xO2nڵ{W_mI"=zDrws;!o3ϴus=gˋ^z%꫻4u%:kl^}HHHSH믟Zǯs!4C,ںkOnL6-R5_ .`4x.7C $"Ol DW^yżkwsw[ —_~`\ZVkmV[m5s믿n;8kwe'_onY#F(X` ,?8Uվk,=X|3{6>F}Ǽ[ZZ}B`СC{auexR_pGAoڷoG/aA~|g6wE1ݺub|y͆nh@tZqCYf\{cY@rb-0?!mouavmg:t`/棏>2*cX?}-3J~8Ǐ <\of̙fFF6_(MA:!{G}r T#c޼AD6opwѕ4i;/um8:w9"}й Nu?`n`>.  ).pUB.6h##+vG7ttM^+#h3\rmǟwPRp>G\d?JIʁ`Ȧ SNJC$A݋/eÿ Rڄ 0r|.2+~7M{M [ƌq}]՞+rN:,wɶ [,x/B_J!@"gR#ֳg}444ؗ=o[rHlĔtuL/XDd A! , j*a۹JM8Q"âAŞM D+- ZǠZZdw?Pj0==*YB ķȒ\ ``Sʹ,={jQINl{}KVuOU+ pP>]Qm ,,5Ѿ;;=/ V18pV nXm/-3muk$ ,XVػ^s9GJA>g:ӽߜYE!.DL|Q` > s)6;D F2'|=JNc $03P$ [ }AXXuM*40I DH/A'~Z|}i>ۆR j1KgڼAsd[ĀF u(7=)n r=؉o% :z{94+|.rۍ D fs SrtmX?/6+8$%쐽ߤmP_7w_w'|FXt fĄ)u@[>V2FѦ(SL>BqĒ7#dQF nү/m>zb!E{o.!HH_Z %(YYg\d$ $2d6z\)y)qv&/i0{21 6!fPͿ/lA@BF(kaf'sb<X9R |`v=vXIxC'R?Zd-싩۹͞{iӧO7F*ʿ뮻O?ټ#_X_}'dh|A{ lv2~ljj%? .pzDI''䡿7t3G6[oP9.#@h39-M?jnTt27M2 ᅬڷo^tEbIEo_hޫՑWǝu]uͥ!%t'pmcsic0<֭[|[] a\@}1ε^uBhfȑfV*"$a:w\>|p3m4{SO= _YUp;lY\޽{m^c(xǚI&k3gyy]yZUK, Xf^veC_~e;y@'-Y}w 6̈SP&*g}14 a!:9tϜCMW\Ѻv a0=BiӦ8f 6psO?h=&GjmvҽRT0υ1V[mebĪ}52䳖#XQ*}UI뮱.@tBXdXLeC} /`.R8üPNylZ-_]w畜<#XϞ=y Ad'|Ȝ+s #>h2wUrGѵ^p ZuhآвE= n [oI &7|c.!rB +C#Ҳ WqeN~mWk׮<?v$JH2P^E kXH('t|#@">yV% tۑ*Y#*ep q]JԚBV5:PG ~vֲ x7O.z]:"&ZYk ZLw DVNoi}kZ_}wq7JN6l3[wNR=\.k/4j-2A[tZ_"@"k϶:vh]8vXUP b %e瀹m>,ݻw$D[ToTNGi1e @"kϱ@x``Uy8G [N:N B t*v> KY9kGDgXH8 }nFqȇ'-D TQ$v$8? UTrm2? +Bꨣ(Gq o}x [ ('19ذVHڪjKVrbB`Cm ׫&'۶mR?VNӤTkZs.0w&bX}[?~+=K-m~b؈LE}pFirQWHiTG.]ʒeQF 0"@2GD9lZ#@"5G@2 "PkHdFY搳A"@jֈR #@"r6H@ Q#D sHdC5$Z#J}Dd,s  FDVkD e9$Dj("9$!gDY>"@2GD9lZ#@"5G@2 "PkHdFY搳A"@jֈR #@"r6H@ Q#D sZgA̐!Cj"PgL:5XYNرcʹiӂ" VHfϞmƍgp"0#Ю];ӹs皃jc*$Dd ^"?Hd{f1 1Hd1@xI@ D % CDg"CDDY{L@ Y ^"?Hd{f1 1Hd1@xI@ D % CDg"C x`#FC2Y x^#>|i۶mmoCJcc#73π 9"3ge^ѣGmYڈ 4'N4sέyK.A/y$D`>CM6b"@BDl`ȂAKDd,+   YVH"@!@" -"$f;DCD Z*&D +HdY!v,TL@VȲB" Y0h e4!D $`R1 Y!Yk5\M{뭷b-fڷo_΋_hڧ-l[n#/n7|׿l+¬*f饗/.k/rfV0+Yi+lZk-#a{wY{m}צ.ǹѣ+oX,_~y2˘^z>D+I9S싿袋;Ϙ1U7nٳ'}c=̨Q\n6tS-DU|-7߸cƌ1'|ݻw7믿{V -iݺYjlZ׮]N;dGt9( ھ<) .k{䅲we[W^OIsy ڼ 6  _|qb]m„ ~+2ZdE YDjAC= yU G)3gj~q5zّ~k/WF~&Q?^wu FuUCsuJ7_ETY.TBv>h_a鷿mUMX@.M_ ۢ /еK/EZ*r7h믿vgA],o_,'*7 /ҕOh,(nV[ol-WΏ;8 ㏻tՙvk6m:d]W%gp߹%hu4_/m_2?+!DV#裏 U"')SM6=m,}?H~!?~|OD?o9ɐ4:u좋.ru^x:"ʏ9X7F~ b뭷v=uexЪ.Th\駟nۓ!et!N8.n&?DE^#XcAzW?pgY[}Yk)D駟 4B/GSLdDu/)(h*q=zV z:0M?8t*_g@ H7W_}U*W 2(%묳-Leɮjf_R)K__#dvuAe|m>9w21-A~| _ Ŀ%V}2WI8x`kw,"wy4nS/Ţ4$/kwwN*D~N k^OS<ǏnVL@c¿ ?cܹ+\!aͲz!֚/:t0byiӦ:eTp=\pM4bkk!4pi:w쒵oS!&C(fم J](8ԩL,zZtĤJ5jQmlBg:,HK`zz|ꩧ\j(y/+XDu§~jdbحQQ꣏>22xaaMI}/ wMyv<\h^n[lTԺs sҤIF \-] Tdj:v\PdeDE믿nS{&i_3|ڔy@}9$c#Էd.$qRQ9s|'Pt`ȉ/&+*I@|?F\:Ҁos{)@du466Yq~X  V{u޽]L;"A{WɉOaN) n֚.O< *($M7#p&_"$Dh~-K6H(}7޸“>#`E^~v"OoOr]C9%r5_z1c3HEc +w=tʊg;,"j-Nc,[J~r5t}? lqYbE/ȥnX>.'ppd8c7|di,Sz,DĽ{̙Y/z!6[GlIg讅}'|y]K.$UTw-H]Y:~iW~y)pF/gwc<$"Oi%^yW+ʚZ2+Nlj5`'dy.l5ͯ yXi*$\ 4M`-rA9C^3fZ7~PW&cOcA0尟fW85"ӹJ׃Cw3*y1$bLJ`U /=D >S?M*!^8bشmݶ`Jd@|"BA]OREG4)j;})s{\?$ Op-/K|/.?< !*{}vĽ#<6k?0%$ǬhkaNF7ˤ$ڔUW{/]w`都˙K?".R;oKɂӧ'9h -ެe]ںJ^Tj~s-UBrA5mA_`aǷn*#, v4ՒB-Ea7 h. СCwU0?N΁AVv-4>BdY( VW CMXL%@06WXXXUWlb*o!?.zdM[e, vH3p_wu,̘%X"ބ1Xn* {Dm{~8':< !Y8tKXYE VFB~Ѻj_.BXa8pV<\ i.V"?8dBz B kBj\>"quuQV"6zD.'s_.M t"A+'["b X2d//ME3 1 ,:`矀@iaj7Tn y.]DxO `>OVd-Bbc#B!KDd,3  Bz YfP!"@B!@" ,"$̠fCDBD YME@#b&Y@S1l֖vS46j#tN&|ģ݆֟rO!54:(*c*~AGn /^$BZ#{;t\8b7M‘qI Kq|PIl%nR"BnKzԏ-K.#"충JklW,;JIR} ڎ'.Lگ 9EHQv[UklEJڮV+qP.k@H.E&< B.B&𾇕IGx:T`A$bY7D/EhlXfA` !O),o!ܑUfH^E%/4v 6_&xU0EM!d-!Y8Ֆ bG2$-B~u;eG>OBLtX&I1?Ё( Y#tQ?X0 e0#!x1Q[GA<uDԐ᝭+C₺7!<[~;3a/Տ+bCdԍ#sH bBr_T꿠/FT@4 I,nDl] XĄhh#ᄔdd͆IPFǻ,#q"FbiXw6^_ptD˵' 5W.~Z!@"k~EmψŋS_$Q5"Z $OHex"H˩PB:?PA6B"%$0%G9_+OLCo>BjJmId#"@{@B\? %C$h֬Y6[ α! KПT"B,. ;qDby7 tWJKMXk% 3 hZg2>xO!n>~ p]H $a ߺN/ hp%He7 : $9|pGm=O?ݯtn_Kۤ2O>KŽo"b%PbCC?~4`J`@>eXkdIra1IX[V! l+}̘1"?X_|Sa[d*% ȳk׮#Ci7't:N8獋?P䄡TE|\` \GI  CAoD²%Rį iPB@?Z.>&*=P^֘|"P7. rWQB-2ZCDVϤlfΜila#w;%2?sS3\r1b\\1[L<9]pLC`5._PVsXqغ E~׽+wnQJ[GD6A=C & )U0`Z<ME.XԹ7D(?T!ׯMɩ\}LG)%˾k'7Xf4~o @"ϳ=oatvew\J~e+xPןBXeVZ5B<^DKR_1TMDk8`Jp'ybE""N` .  &Fdz766dn10 Af=AsJNhP *hP9"_~Jx?O&KQEnBB`OUGu+y\=nTB 3!d+'CH,-C,&mBԥ"tHGyZYEt_]Q>"rtN"۳y~PSN)Ä! 0TBv>hPX]D/]!2^M60` &$&u%YuFb-@2,H/u1c Jdx_/\ԿW$G!DV甉& @{EDDGS_3j('XfPFkٳg$Q^"i!.j.D@y1+'Gv1® AWwq`AbDAY\HĨ{.+ݰWorld\",\n", " placeholder='Some HTML',\n", " description='Some HTML',\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "widgets.HTMLMath(\n", " value=r\"SomeHTML\",\n", " placeholder='Some HTML',\n", " description='Some HTML',\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "file = open(\"WidgetArch.png\", \"rb\")\n", "image = file.read()\n", "widgets.Image(\n", " value=image,\n", " format='png',\n", " width=300,\n", " height=400,\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "button = widgets.Button(\n", " description='Click me',\n", " disabled=False,\n", " button_style='', # 'success', 'info', 'warning', 'danger' or ''\n", " tooltip='Click me',\n", " icon='check' # (FontAwesome names without the `fa-` prefix)\n", ")\n", "button" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "play = widgets.Play(\n", " value=50,\n", " min=0,\n", " max=100,\n", " step=1,\n", " interval=500,\n", " description=\"Press play\",\n", " disabled=False\n", ")\n", "slider = widgets.IntSlider()\n", "widgets.jslink((play, 'value'), (slider, 'value'))\n", "widgets.HBox([play, slider])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "widgets.DatePicker(\n", " description='Pick a Date',\n", " disabled=False\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "widgets.ColorPicker(\n", " concise=False,\n", " description='Pick a color',\n", " value='blue',\n", " disabled=False\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "widgets.FileUpload(\n", " accept='', # Accepted file extension e.g. '.txt', '.pdf', 'image/*', 'image/*,.pdf'\n", " multiple=False # True to accept multiple files upload else False\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "widgets.Controller(\n", " index=0,\n", ")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "items = [widgets.Label(str(i)) for i in range(4)]\n", "widgets.Box(items)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "items = [widgets.Label(str(i)) for i in range(4)]\n", "widgets.HBox(items)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "items = [widgets.Label(str(i)) for i in range(4)]\n", "left_box = widgets.VBox([items[0], items[1]])\n", "right_box = widgets.VBox([items[2], items[3]])\n", "widgets.HBox([left_box, right_box])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "items = [widgets.Label(str(i)) for i in range(8)]\n", "widgets.GridBox(items, layout=widgets.Layout(grid_template_columns=\"repeat(3, 100px)\"))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "accordion = widgets.Accordion(children=[widgets.IntSlider(), widgets.Text()], titles=('Slider', 'Text'))\n", "accordion" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tab_contents = ['P0', 'P1', 'P2', 'P3', 'P4']\n", "children = [widgets.Text(description=name) for name in tab_contents]\n", "tab = widgets.Tab()\n", "tab.children = children\n", "tab.titles = [str(i) for i in range(len(children))]\n", "tab" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tab_nest = widgets.Tab()\n", "tab_nest.children = [accordion, accordion]\n", "tab_nest.titles = ('An accordion', 'Copy of the accordion')\n", "tab_nest" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.2" } }, "nbformat": 4, "nbformat_minor": 4 } ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts000066400000000000000000000024071466162644600216520ustar00rootroot00000000000000// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { test } from '@jupyterlab/galata'; import { expect } from '@playwright/test'; import * as path from 'path'; test.describe('Widget Visual Regression', () => { test.beforeEach(async ({ page, tmpPath }) => { await page.contents.uploadDirectory( path.resolve(__dirname, './notebooks'), tmpPath ); await page.filebrowser.openDirectory(tmpPath); }); test('Run notebook widgets.ipynb and capture cell outputs', async ({ page, tmpPath, }) => { const notebook = 'widgets.ipynb'; await page.notebook.openByPath(`${tmpPath}/${notebook}`); await page.notebook.activate(notebook); const captures = new Array(); const cellCount = await page.notebook.getCellCount(); await page.notebook.runCellByCell({ onAfterCellRun: async (cellIndex: number) => { const cell = await page.notebook.getCellOutput(cellIndex); if (cell) { captures.push(await cell.screenshot()); } }, }); await page.notebook.save(); for (let i = 0; i < cellCount; i++) { const image = `widgets-cell-${i}.png`; expect.soft(captures[i]).toMatchSnapshot(image); } }); }); ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/000077500000000000000000000000001466162644600237445ustar00rootroot00000000000000ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-0-linux.png000066400000000000000000000034511466162644600303320ustar00rootroot00000000000000PNG  IHDR!nsRGBIDATxoh%i.WIXPaϺՁ>b7*l((3g u0 G^T#DD*{gsObZI6t6k ڴϻwދ7NPUU,@DDDDK $iIDDDD@&,DDDD $iIDDDD@&&QnLNN"#NCQ AHDDBI4_|v$%nT51(-`R*$IB<(E"NCeH׋bQmRt{_i 5܏m_cͷ'? .VTf166EQPYY9cffB,H"" ۶ o|O.J(K,on4B8۷rLUU$I(ҷk4vF*l6"\Q__? tuu鐈(]\s@0=ڳKEὟXK(z}v>}x \@"@EEŬ7LxƳ`gj*撳zjoܧ$ hjjBgg|SYYϟO]I*&''!2VqtLfʹbŊ/]f(ߩK.a0 kyW ~={u"B@>@ٷfE*$ܹΝC[[݋@ h4'ObhhfhiiTWW@Lϟ֭[q_~^`0p````Zl6 Ifrގ`0ǣw"ˣ h^/$.;^ZFQ8>-Q nl6cxx<Q.qhfH&ʕ+a6!"TU,ːe$<QN@l6x= Y7nŋӃ#Gn#''999sw ۥ 8N  Ng.B1s=c׮]qV`YJLDBkH_7:ϟ_ _嚫FFFPXX;v^GMM ***pyڵkXhvl2TUU7nxns!-- W~\V]]]Eqo/&&ǩT*tuue3 D36m֜͸z*z=6oތbDDDRJ" H-;7#p @СCp/ǃV|> / qP;+"2Ly1gϞI۶m`XPRRK.ó(4 ֋WD#G?vƣG088ܯ%IR0t:q tuu!33X|yS͞F dggO_VV{bdd . tL"RHZK`\gc>2,G~T3KXt)._}PTTۍ*17III_ISF#k(H$%%d I, T;1I#" E!U@>n¨kޯk=,JI<.xqӧQ[[}AѠ߇l۷+V@@,Yۍ('O֭[jժWe2`2+N>Ov966Ʉ+W(Yuz{{'lijjݻׯŋގcǎ!;;{uRqqz(aF@rH.x{ұ=o@@X"(7װEZAnn.^/L&v ٌfAR!==tl߾f㨫CVVΜ9i4󢣣N'kx 둛 k7oD__lnnƩSF(r+C" ,3g VU4""&jߦp2,H.@<l6 T*j5/fp8 '%"$@'H XR VmT{Y~_g_sm҉sׯ,{ϓQ1Zs-MzҜj@?ε^ozS _"žřVE#L%'D)> =Z؄IN97%ٟQgz3Y5'yl&~raygۄ?jܬQ/á{:OHDn_Aŋ:}fϞ-sW ɚ5k9P||֯_h>!Y K(Ӗ@ NSC%%%jll͛7mܸQ***R__$iΝڷoߨyZrLx,~!*%%Ųc߅d]jjjRnn6lؠ~?~|~gϞU}}Z[[5o<8p@TXX(%;o}}eTSS.KVG a---qㆲee}vKVZIfIx#ITvv%>\EEEY2LܤHshH^2wY_tb枊=*0d%Iyyy:uzzzF9>""Bnݒ$l6竡Aݳahܹzr\˳8`b,{.wdq^XEKξW?:%Iu/>SR=˄wO1joo׌364M9NUTTkNNN< .rҪ#Dˏ|gI ߷]%濥ԌJ(Ϧ[ٗjך>klaOr%O,zp:UCCl6Zi׮]cە2EDD(#ϲRk׮բEh…~ ǒԒeJ++F+nfŭlPzԤREGGZ+..VuuZ[[>yڲev[G{rbbb:4M3!zzzd4 p2 ɀKwaUUUիWO<27`x<*((P\\ $j:w\c %l P  $|M44n; qK >a,7IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-11-linux.png000066400000000000000000000033641466162644600304170ustar00rootroot00000000000000PNG  IHDR"(sRGBIDATxmLT !(Bt fiQk0 )e7Dn̾JLJfXpH[!H%[WW'`>~ڏdRqq[߫Wh4Nn:3H$i۾7f_z%,r>I3ﻰo~ OQ*wj!McuG~#WKƬifi媩`pTUU3q´a)88Xfvm޼YVv]+Wt;~e*99YO֩St EDDFJJJ,W Ȁ =.+]'<):bSl{O=YmuJ}UCdx<á:ڵK2577kڵ/''G***R@IrL9/ ޽( Srr 400m۶illLFQz=tzzzdXڪEe/~D211cǎiƍ]</y nWvvVX2P@bFWֵk| HxG( vac޴:a G`L n^9IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-12-linux.png000066400000000000000000000037471466162644600304250ustar00rootroot00000000000000PNG  IHDR!nsRGBIDATxL]PStfl,ZCIjQS8 PLX,H4%V] fiX@l@bAᝇ{rɽ2\."""""/DDDD͢)"""".v;Nߥh4lw)""">'N've --NRDDDD<)""""Q(@G| ^O㹲y|չ>|Ϋss GD1{}^S_*Bs~[0]ȏ?5C~4gԂU;7?UojذaÆ w9"""y͡D/IaČ_θOL_Bl+u/uqiLvv6őȞ={hii)SCYYWΝ;  L=@FNE_0h^m#94%ÆDwGG*9լ*4<666ӫOgg')))444pa.]DAA---LD:Z7À||Έ44ģ]-MΝ;JFDDDy1bFm۶alڴ-[x c̙aXhjj VZh$((Eqܹ~."""3 W ݌F\u j.??ʝ;wviiiչEl J}}ykk+퀀۹twwy@mA{{;kZVAHg3r8p9N\N'. F#wpK̡ 1L>N^BpQV+oŋ0}tN3 KRDDDD<)""""Q(@G EDDD# """"'F}-NtO_^h$00eD#""""ђxkjjcIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-13-linux.png000066400000000000000000000036301466162644600304150ustar00rootroot00000000000000PNG  IHDR H sRGBRIDATxLgwKw:9]uFἀ`̓se!㌂ј0A]ziYccX!2EHSeYrBfc m ~sD~|izi%  """"rt """w $IDDDD0@( DDDD$ $"[^nGGGǔ5 w _Xt)RRRf5a$""_9y=-]x|ϣs?Y?½-p t{l^VxvMDDD.=\n?Np-E1;/Ly7&\ݮLDx=DtQ[[Ѐ9~}obv/[`5#Cm<`;v oDnn.yf?~KyU|9 : fO7!cu5{Vt\"^ b`ǎ8xk /_Fyy9, r .\SNjoWSS#GҥKضm۔}L&b 88:ͨ͛7QWW;wx}(==hjj۷сY}fDDD*@Wm;[B+f˙rdff^|@*"!!6l@CCk|T*E@@\s RTUUڵk&PB8z(j*^ґd8p|}}9;DDDD ϫ~HmW~4]r]kWV*]fdTN\/^ E@@qYTTTjv;!z{{z)իWq T~3.Z ~~~l6@WW^xx׸ JlBDDD?=@ ^AptBp:|9T r⾽eAZOZ}F;k֬Zƍ7ָ cOF"@Tؾ}5JϞ=æM& ӧ LݻwػT*j5=6'yyh$&`A'GQ( fjf3 Ōu'OdBII p8\{oݺz9998s tuu233q9XV!H ~2L5l |x];6d2 :/"}vL<&""r)@[/=Kc_ʿJ'ѢG>wL"55SLT3-- jqlw@Zpezzr_/n%K `[!""m1uÇh]}%w[p ~< * :?=x PThiiAff&r9␟۷_>.akZ( r]CCCν#G`p"KJ,qx tưcZ ֭ ÇL&̙3gqF4.aF!>>sž}\xDDD$j}C`T'*+|.=RΝ;g;~8NDbhlld¶mU%%%عs'^ B'O: iK4Kx Μ,;ٳg:TTT@@C,#33:z`@CCrrr޻w/.]Z455n""כgM!vd ~DqVkjXx1D"fϞ \D@jNâE///ddd@.ۜ___nB6o+.bck$0c \~&ܽ{piHRC]]]+W"44شixu]x%FG'RT*ݍtttXݼyv7`4a6188WżylƦOn= wNv۸m ~~~0 3g"::'Neˠs ?f}}}6`' yd0<:jy1p&ÿ W!0AH.o^=JTTu3Mee%RRRgj5Q__/%%$$]~|_[y4-{<]NOΟ䠺zmmm̴wE"R)c& wM9Tt5Ãm84- }v\x×=y9Nv AѴo+&5s,1>?l95Pu^cעgC|O{: <sٹo$R,U+ɓ'm] Ȇ~B3t'>'}'%ZLDD6mڄqӆN "!!j%z&bㅾ/?Ee+?o_|;fW];(w9;;ܹs.cI-2rrrvTTT̙3tYV:::`07 '"fW7}{gKq3O/J7̞g0 [¥;x jjjCARڒhPՐJAyy9FFFHݻ9&''Q\\X$&&R2wO&ʕ+s}IIIPT-i"##yWD+RSS!_" r9d2߿o fWrfb#[X ?gXstWf#\pls<|jZFNNrss둔#G#11z* N͛7]]]P(χNÅ PQQ@}}=jjj/_^pvZ޽[tJ˶I$BBWQH$8;iDd*@:I\F0ֽ'gJ @˷4\t 6N۷Œj8z(֬YÇc?h\xgϞEII L&BCCQXXsjlذQQQK088lQ޽{QZZ,kooohZ 1<ъ`2o2$#d2 ZDD&""""IDDDDfa$""""0@Y , DDDDdH""""2 $¦ח .DCDDDDf6?&q~}XIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-16-linux.png000066400000000000000000000043111466162644600304150ustar00rootroot00000000000000PNG  IHDR!nsRGBIDATx}L7V40r搌UP)Ŧ5XHۤӕi"6vcMyPJAA+@i& imC=G㹛R=~^ ߗ>\B}wp8&_o; l6{;]d2y;|ϩ@蟞L@[T EDDD-*""""HqˤH˱x4?k.6N>7y\O-""""6ioC avosO;871$̘ œhz4su^|Ex饗EDDDܻ~c`wQTEEE޽yKaa󸸸Rl6?<<+WdӦMx$Zdee}id2兄""6e 9Af3}.y9RR? /66\JJJƼƹsX,444PYYIEE=7ot}Y9NYY;w?>#??Bx7سguuugϞ%$$ZxG--%%kl6]]]8ZZZHMMetwwS[[{G\\EEEߵGlD^+f i"25M(SL-[‘#G4?00[L||< $&&DPP6leh4/~"fV\lܸ8O>|חtvvwp׊+8q###`4Yh]]]XVΟ?ϲe˨#//iӦ#pQ+f3˖-s)[#""hjjbގ+"rSS UUUԸfppܥK}{}}}.ǽ̟?(bbbxF3 㕒Bkk+ÛoIDD>ؘ;w.V9^,2ٳgsaRRR8tʣ1kVTTp}?|#11u,\ .@aa!/_fv/^/|"cJCC*"rq\UdfL&c$"S [DDDD.Hq ERDDDDܢ)""""nQ@[T EDDD-,l2ގ """@D#""""nОO2ZIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-17-linux.png000066400000000000000000000157201466162644600304240ustar00rootroot00000000000000PNG  IHDR[sRGBIDATx{TUuP`)DʻX$yM˖^_LmI*5gdD{~4Nmi 3&&nݺѭ[7yٶm=z`ԩ7d{1t͖Vi]n.}W/HP]pPZ(ȷݟ}}l#cOFxcbb3g]ɓ'm6uѣoZ*??_̵i 8wQR %*?:w) xV-Ktڴwq pss#>>?9rfϞ޽{l4x Шz@YYk׮e̘1={PUU=Fj2DKXbs+VD݋` < _|gΜ`0<@]] ,`֭iӆgy72m4… yٳ'^P޸̂7~kUeEv%'&?W]W7oj@ii-;w.#F QK/ħ~JXXaaa̚5 wwwvĉ $88_xrssyU'MDΦ)S0m4RSSm}233ӓ&L; ;; 6Jqq1#Fߟ6y/_'7ndԩ޽d8֭[1$%%h5k R)""3rKD`]<)l]욧=ׯwބpBϟO``U8pYf8wy,VZEv;v,8880x` _~~>}/"۷h42gvIYYߘ1c`}v[{߾} d2ug-ǎk/"""/e6mw>>>8;;GGF=JTTTSDDDn}?yZa-I÷uNyg /d#F`ʔ)mۖo} ^lIKKv>55ٳgqpp=z4;b]^kxyyQRR9xU5]]]8<5Ņ;6DDDu*EY(x= A`lHAuv۶m䱪g}c^I^^ӧOgٲe}ݶ󙙙ZKgv̀ZW]`04:6L\xb۹&vӍƝ>}__k|s X,s|:)"""?_TY1܃B] 돋g>ioy{2eJ6Bll,3g$<LNN5ɓ.]лwo,XsYp!>` ˣ5kPZZ#Ɋ+(--ŋS__ߨŋ9tu/"""| Z_kCֆщ9e^MM)uG>:wk^ټ\X 7cǎcbbhӦ ,_˗ږ-[O<={>|8t֍_s8fϞͺuٳ'k׮e 2A1wF㢣ILLرct҅T3pꜜpssk2mɓ's9"##qrrⷿ-~~~8;;у{[z}T^w Z'F:ȽS_k'S)pvGGih Y÷u|yϴ5șOwyc/IllU_ZILLEݔ/\@XX6m H"""Һݔ C6_Gx: WH@w1W;xVno>دǏӻwo^yN뮖MDDDn@zחolSܔ>uuu$$$>N~}opK=Z+"""7M/DDDD.J EDDD.J EDDD.J EDDD.J EDDD.J EDDD.J EDDD.J EDDD.J EDDD.7 [#ep^ޱ5  ~# :  olZ#GSOSOt("""r(ηJ ^>dƂ6> =zt("""r(N0!gߏBF"Óڇ#91 88(CS ã`Wvl/|n&?I9vΝ`޼yXV֭[ǚ5k(--k׮̙3>}bɉ"jkk7ndff+cKUU}eΜ98;;ς 8p 63gҶm[ e޼yf*++Ƞ pQ3f 'N6ff0L,^___@["""?w*5CX'8hi:yKuoG?wff&K.l63}t&LٳgXz5$''s&MD\\6>;;ǓoMrr2999|F#_ټy3ǏgٲeM`` ~!>'N ))Q1޽'''yIIIa6gFvv6&%K4H~pANYQ3f 8o\J yppp`СՋL} d"**t[+1118;;333qrrbʔ)b46mfQevv6۷gĉ8;;s]wGZZZ1qqqi!CpiqmsntEII VB^}U^u[{MM !!!p'kFі])((̙3DDDڭV+TWWX,t`;ץKa4m6ODDD~ޔ@ri[@iv K^?ӧ82d???f͚o2lTWWsmڽpttSNql۶ɹ%~~~5.4ZSDDD~ٴ DçEpߥe2. r /o 6G}}eGy,Y¡CZ\pSPP`GFF b69Z,\oŠ+5jCdΟ?jbcǎAee%ouuu?~~_7EDDgMH /<'i_ϯBF䜄Mbb"ǎK.ڞŅ3fPTT !!!̛76>22pssc̙/WŋyǘM(//JF#>>>tر%j%777iӦVRRSL,v&~GDDD~QTN}}=)))1rHAo>V\Ill,7&%"""SQz!lׯZf^n<""""?%% jxYPP>>}輑ߟcǎq9͛\...^Pϟl ŋW_},ի/:uweݺuо}{qON6mObb"'''eܸqDGG7y}VuֱfJKKڵ+siֽK@ϯY};uđ#G=wff&K.l63}t&Lٳg>#--lL&K,M>|6m8q" xyyj* ֬YCVV]dgg3~x222xINN&''XW^Mjj*8pI&biG $`X@QTTnj'ߟ۷_\\b8d<@qq1۷o'!!;ԩS9u_~%p`{7{O߾} d2Ezzz^ :t(z"33GDDDZmadލ())jhՕj 1 <3mۖ2ٹs'oеkW$V+꫼555\DDDSɥmiw}-8}C l﫨 >>+W2x`xwزe]4n2X`0ǬY>|#"""` շfϽa򨯯l#Ceٶg uV.^HMM J'// l67İd:j… ߿V'U >}rJL&sUqIbcc=wtt4;v.]d9,Yo~CEEӇG}Ν;3c CDDD\ INN 1sLÛ'&&f̘AQQ...0o޼>i VA HII!$$_[ٳgGaxdd$DEEpˏœHuu5-#D8880qDf3oڵ# ǏsL&]G+%?ٳg)))޽{닇GK&"""rKEoa]@]@]@]@]&SZZJee%F:vaȠmҭ[7+.\7O>dKgs5&))b^{2^@~9rAطo+W$66?eؚEDDPSSa-H wRRRx衇 l_~j*~~zzjDDD/5 jxYPPݻw磏>jּ.CgϞ 0 ###Yx1O?4>(ÇO>744vZ FϞ=4hׯ_x^x{h-[0|pBBBx̴ӧYYYO>3gLbk'>>޽{ӯ_?ϟOmm-uuu̝;޽{Jxx87on=G $paշSN9rY}Xj_|k֬!++$/++Km6&LԩSmm.+WdѢE3Nɓqrr'$==6Wuu5۶mcW\GMM s ظq#$;;?7r=4HX,N (**jVH1 tޝqƱwF}Ǝ'pâ"Xz5'O&,, <==ٳml>}x'pqq!<>>><W\Gff&NNNL2WWWF#ӦMl6̹s8ruuuxyyЬ{$"""v[oEAAp׵kF}FoWWWΟ?';6:n׮3`F;v 1͌?&9s9ՊDEEQQQ 8uc̙tGDDDZ'U -mXbЩSWQQA||<ڵݻw3i$$mK^&ɖ^d=7r)8puԉ;lۿ|vm8::ǖ-[h4ڞ%@pp0[XX9ī $--ͮ~i-[ZTTT׬Fb˖-ݻzvAvvv*~+N:EBByСC&99cZX,رѣGn GGGUDDDZmasY•+Wb2G^^'O$66Gܹ33f :::t@DD@^˳>#ӧOȤI=y5W^ᥗ^;KfưaƊ+:֭#))jkkeԨQ<Ô/RRR3,\)"""~; Bh߳gGa\0X,ڵkG@@Ǐ… L&Fቈ8%M8{,%%%TTT鉯/--A E󉈈]@]@]@].HsOFIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-18-linux.png000066400000000000000000000300751466162644600304250ustar00rootroot00000000000000PNG  IHDRYsRGB IDATxy| OU+"H&9qIDBbK-Thl(-uVhѪ p[UKTZ*j4d# ]CsR~se3sf|=3όRJ!B!Lk:!BhR!BEH!Ba@%^W!! ZYкqMG%BD&pLu5|snCX;{4 2#F0bĈE!I)D5U=N0kS3妒 }嗴iӆmt(B?MH!Z `>\O5A?8x <_OhGII &&&J, $y0'ѿ_O;j?`]&1Jyu?͛7xWܹ3J)mƖ-[HKKUV̟?wwwHNNܜ$=z4F &&%KпΦk׮̟? Yx1'Ň>}0g֭Kvv6:W^y(ؽ{7iii,^sѰaCɓ133,Z(!<c6nܨd߿/_nFBPTKߎ\O>aC~ڕڷd¹;w:5 {XYYE˖-n'ӧOSSSԩ111Z]aDFFju!(( ƍ`nnΌ3SDEE8i$mr4i'$55W\aŊZy^^zdRKԿv%%%\|k׮qԔ\;kkk lmm;w.39==\ׯ?䓘ѬY37oW_}Ufzɢ-IIC/_[BGCIXvüce>NyX6ֲб\KsF-Gk{eB _~!663m4~7lmm+kN0l#.'˔O;h$]]P;w$>>mL޽ۿ˗siR˗޽R∊bȐ?Hbҥ̚5k:t(j*rrrPJ_]n~~~dee~zp'OYwwwۧY3gp;ںu+{E^pWϯ,l /yBPgzÎѰ;] }QF+;v`ƍ=AAA?t:>>>lذ}@@SN̘19s㣕e޽;K.L6  m6~Wt; .%[la1n8 k!U ?Qa V'CﻴwU%¶Ձ1=ԕHz%EQ*/_Tݻw+{{{u9uQf/B_E\R~P%%%C4p@sNy5i$u ^|E5n8G+PJ)ڴiN8R*99YuE}wJ)uߺ_kEFF*///|ٲej*55U0նm[_N111G)TNNrvvVݺuSRJѣG7*z?郎ѿN< ʕ+WRRVP^Z2/]TksrrRJmڴIC={V׾Dkzp>_z߿ڳg ̙SnyttѣGB/5٤k/+qd골RE&0w憳3K.eѢEtС'N`ܹ۴iFlӦM۷ 6P^=FIF055{x{{kp|;v ciiozЅgkȑZ~~~$%%={2e XXX0{lʿgk׮3:t"~<== &p{4Ņڵk߽lmmݻ7‚^zrGφ Ɓ/ښ.]x)|3Φ VkkozB!ģOLAch9h E3Hڷv'pڠA1cu*N\/_̤IX`%_ȒUV}vٲ7n$**LLMM2l)))ckk}ײeKβʛ{;^ΌʊWSvm7n\n_ 4ɉÇsE<==i֬}[}/˝Mڤ2!<<Ç)yyy3զMbDFFj2f<߿~<  3 BFFBQzJJP%RTi)015v(Yg~]{ 375ki2.~8,dt|uֽ/*Kvv6ƍcȑM8g֬Y^Z/aÆ lݺ֭[*xݳXhaqq1)))DfVT^ٰ&&&4i҄d(,,,wOOO- ֖ `ggWۣ*|Mرct:]aذalݺ^zq VZcȌ;Z5z0 /X޽{krB{=fvX?|NppgV-)96:Vt|i(IU#l[n~ZqGrr2'NoBN:x m̙3zo(K&MtExbn޼Yt)=zuh.T>>,k֬!--"&kӓr5iԨ͛7磏>0w{Tō7h޼<~cg3` KoB!j4U<EhD??ܶ ]Wa߉}Hʷc>P 믿rQ7nw:((Zj[o[o^raGF{.+88ym6x뭷(z{{j?fϴhBo.1744 jڴiܼyy@RWWWJKKڵ6EDD}T=ٳ0`חf*~c ӧ| k֬+ vڄ$oNB_DɐFnn.Z,WWWS$!B+++v̙3ؼy37owޡ}?!88/[[[yWqtt$77.\Ȼkpx`"##ˌxB,u|IRSS˭oiiN:`eeŕ+WXboV'//ggg.\os(**B)ENNEEE+++'/^4!5KH!QfHNN}MNNw|011֖sү_2L>={oPNΞ=3<ݏ,mllB%F\rŠW\wI||<%%%d޽{W)Π /_ӧQJQPP@ll,/_ ;;mRNٸqdz{nJKK#**JF#fݝuaccCǎ˭ϥK8q}50~gZhƍ{Dڵ !))ڵk+o,Y͛U C A̙3*#fɫ fDDD\V>ٳg?~`ĉ >>t:XxAH!DRjtlmm ۬Y3Ξ=kP'| 6p)l¾}غu^}rJ+&L̙3ukO?VLBB111|'@ Q N mmmF*@˖-111u֌=#G9r$VVVHOO`L6 WWWLMMIkkaaܹsiР-[Ϗ~ ;w2p@|||077Ϗ^zsN Ɓ/ښ.]ܷ)))DGGJƍ`̙$$$/`n~.3gpMիAH!D{ x}7_˗/GVXZZjS999XYY]7nXKׯOJJ p;ԫ߲eK~gڴi#QQQ?rG\ cƌnݺ\zVZ|i߾=SNYB!*' ըYf$''Ӿ}J&''ӬYJedd0i$֭[G155eӦMݻנLLL%!!Qhh ֭[ի'N`ժUeug}o߮ޫwݛ""##N\\=ѱ !x0ё+WTʕ+z!'//R055%++۷W`` W槟~B)EFF:t({ȑ#_~Q@hh(^^^4mڴ̾lmmg޼y$''p >st 011̨B`ݝuaccCǎ˭ϥK8qb}>S0j(5jO<}@Vdܸq1k,RRRdԩzA[n,Y_мysV\VAӇO>5kTy뭷xȠaÆӷo_ y7011y;ԭ[uB(TM!R"""pvv[n>|g2~ !xI)CErr2գM6\plll4hPM'BLH!LRSSʊMҨQK!0$B!(rÕB!0$B!(@ !BH)B!" B!0$B!(@ /4~vv6< b1wܚCZXX= Dӱ~&LkT ϟt:^{5֯_OPPPV+F  **pqqW1Zy'Oj111{憳3ddd0qDӧN(غu+{ŅAqر2Oٱcھ(** 쌇qWXh?#F |w?~cwNc̙0~-[/SLRSS3f ;vO>j?pwwg\~]+7ꫯҹsg<<L%$$Ru{=_+T^^^Z+T߾}URR*((P ,Pm۶U_|E^)nܸT``JJJR*((HZɓ'ǫk׮Bl23Ϩ2Ϫ?X)TffruuU*,,TϟW^^^jݺuz˟>}***RJ)5{l>\|^xegg222\~hhС:uRJ~M988K.)JJJR*77WիW+wwwR*::ZkN*''Gǫ:Acǎd3hܴiѣ:{*))Q111Y%%%ŋլYʌO>QoUm۶58bbbRJ쬺u~7RGV7nTJ)uᡵ{(;;;-{edd(;;;uUǫkRJG}爈/j+;F/m~[VO?:~*))QQQQm۶j…Ν;߿R'OTjʕjݗ?4iqT/7nuٲej*55U =~P%%%CzǎԵkT߾}UϞ=֭[U~~V:tb>sرQ[nꫯ*3Ɯegg._|_+;vڥm۞={ӧ+:~t㮢c,Oj(вeKLLLhݺ5Gȑ#zuFGRRڵ)S`kkKڵ;w.fffUeƌҠA{9~'Ltt44n fΜIBBK߿ɓ'caaAvF`jժ@^'$$ǼyS5bڴi.'''hժOn_ݻ7‚^z|.\_~<8;;ӹsgܨ]6#FܹsH͛>}:ON4ֻ3p@j׮F]]Bbb"=x{{s!#CqEHLΝ155eРAt*רQpqqv[bb"ǎc…||LMMӻ$޸qc֭R177ʕ+X~[s+ӠA8|0/^ӓf͚gѺuk{1ڷooT5cb6跕JϞ=>Fqo~j9ŘB&MիW׮]۠sOy9ƍ"33SSSQ񒓓>w?^ۢ"ZhQi*+ɜ9sq ۗ+Wr99I)D5`ҤI[ݻcjjʦMػwAMLLF2YYY1֝dmUgkk{/_Ơru-4˲$$$c5jNC)ULLLeܹϠ6UM,nCю/- ,>VXe_oiӦ\vMk׮UD-^w8LLL Y~&MHNNFb EƊaÆ lݺ֭[0iҤ*pպukT*Ǥ!qCׯ_g˖-tsssɓFV|KxQZZ]2ىC &`|[I&dffr akk?#997nS\\\i{???X~=EEE\p{9ߪU+:uҥK)(( 33իWYnܸA͵?$;;O9}4J) F%դI~wm2уv4jԈ͛G=*Ū0vСCٳg6ԩS^lҤ .]2x`zݭExbn޼Yt)=zȳ>˚5kHKKp~'3gpС*'ٳhnݺEqq1ϟ,~ݺuiР0˗cgg /< |AZd˖-߿777ƍǰaôXz5W^k׮ >}U1m4.\1b]HPPǏ'$$N6l(/AajjJΝt?L܆_WWWJKKڵyC{tU2v߆'ӧO'((^x-[=6,Ġ [ozwXZZ|r+++lmm|L8Lj#غu+ݻwR_w899MpwwK.-!!!̙3NǪU*]!qCcNٵkW[,3BQ 9”)S8qDM" puueϞ=-7kURSSYbA!×Nll6lѮ]ME$!DKOOgʔ)dggS~}zEHHHM%;/1HNN֮]=jFT-B!"B!FR!BEH!BaI B!Q$B!FFVVX[[ӸqK!0@ ޽HPJǮ]سg}0~xt:Æ #>>jݻ}&,,s> '!!" C3d~-[ƌ3m> OOOt:g„ Ư+C Ѿѣ['H033###yUK5eɒ%dee^ӡOɉҼy޿'NM6Uj[dh .K^u@ Q"""-4lؐ 6lP/_u֘`eeŘ1cXBSvAttEEE`Su[noル+?^+7dn۶ t:3f`֬Ye./;;{{{l!C#00Tᅬ?NNNxzztRnݺfFڵ ooo\\\Xp!wt,11I&憇-"??G ȑ#eZYjj*cƌcǎӇǏkeGgEѹsgW;233iӦ iiiZDFFΜ:u пmʎ'Cb=CjK؆#!jl4IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-19-linux.png000066400000000000000000000103571466162644600304270ustar00rootroot00000000000000PNG  IHDR__sRGBIDATx{T׽0EnJ0FR`;p5Z1G%1mm&ͥUj11*ZVkz2S1 ъQ"#Ej2#5{~ex{}]l6Mqwvu92L0a] ΅-l8ByyƎ g[ :ybbb] -l8j%< V0 C0 C$@^x3Yߟw؟7*|z]W@zW̋XWs>y}>z_W{DF{_X]yIgXE,yB>jփ9;*y(J?-fy ]?Z 4<6U<$I mwQ\4H}IٺYM^+WTttÕuvv_Ңl)""BZdΞ={]j?~ٖ>sh;|FcFrqsW㒤w1xF=G>=g/jCsrgzeddE>{N{Ւ%Ka}ժUV^^>#;_TT)Sǩ_Oթÿx~NUƫrqs_SCv6]j(77W7XmٲEڷo$ȑ#JOOWxx  ѣ׽ƌ UUU̙3Ԯ]{CHUQQazjeggj*55U{$uvv*55U׽V"ozV{DKL;?yE޻ᆱYfͭPM'_QՓ=٬={?G7NRUUESNURR;R[yj_f233o>8<nZ k>j}~pJMWCi*y(M$y)uz*}d.rLw.^.yyQgb Р{L'NЕ+WTQQ%KhҤI_*--Ucc?IE&Mn:}ΚnVJTZZjo'N駟֊+b uuu9Tn*}6Q|N6KMU%o^Gl> 뵃ewȯ_MmĈz7/j޼yjnnVppcٿ\׫N[}{o~_ŋ?(Iwyv/_b[o)((HӧOWOOL7o~ٳG/VXjbsą0Y,8 w ׁ@C!HB!HB!HBeddhӦMegg6555;v2U\\^w$*--U[[JJJ4n8HSLqtp$>|XW\$>}ZmmmJKK,KJJ쫇$fmݺU<̙sܹs/jѢEJHHٳ{ݫ]JMMӵh">}ZOVTT^wܡǏnjPkk 7 뮻rI_Řj{ァ/СCBiǎ 6CڱcG@۷Oo"""rJ9RÇѣG%I8q***$Iĉ榧~ZyyyX,ھ}~muttFCù(11<ũRƌrss$^TVVtd2iΜ9~5|yyyI,X*577+>>^K.աC$I24hsN} ͛w' NիP||4j(>|XTRR\\\Uݒ& :o|…^ft%YVرclPbbTPP͟?_ڹsu=/H8l֙3g[o)$$DÆ $ǫ\_Ӿjnn??atE= RLLUVVS]*--UKK"##%IZf_BW։'9"@)I&W_U||x||,gxhG*,,s=Ϸf1//OqqqdX2~%7V ` ` ?%HB!lai8BfiȑJOO̙3ihhk#GK^^^ֲe-ŢW^yE[l°[YYY?~.]pbNQPPw}WAA233m6mڴg}VC UTT7>ƍ%I)))}ݭ :|^ @Z[[uV=w!ChʕPppjkk)$I seeeiٲeHڵKpX=zT===JLLRۄ _u鷿>hС1LzgyfZJ>n6H8\ssz_,I~ ŢիŋhP/QllC@ $nСjllTww5/^hBҴj*޽[999jnn֓O>٫OQQ5}t }>2$.**JzwV]]FM8Q.\b>f-X@'OTGG$V[nSO=G}TuuuڿC@Dhz嗵~]tI*++իaÆf^PAAV$IwVTT<==ޮ5kh…5jL&~+77WN)7'fsvY,:V\\Jnv͞=[s5555?X]]]ԴiӴ`(''GgϞڵk{_Jڰa~455)%%epkH !HB!Hh0&Lpv @Fg` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` jhhpv@ 2@.6"pZ:r䈬VK-ooo7 0-lB!]O5IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-2-linux.png000066400000000000000000000061061466162644600303340ustar00rootroot00000000000000PNG  IHDR:@PsRGB IDATxme~ߙ93g2cӚM *4&D%Aо>KXCI bkkT}VJUvYkt4j3gN_rΜ| p0o\g*V8Jo @ @ @ @ @ @ @ǿy.fe^_}~7Cp8vǵ?_ڧo6og8I+Kuӗ8f4?[=1 Jr*=C'ё]Ok^YGJ[daoQ|;vdÆ yh9= OJ“<b|}kqG}S>Koy&34ѫjW*tttxmxx86m/\zY~}z{{h4q>u/wߝ\wuٺuk6lؐGy$J~ f駟͛7gÆ yg:>e˖ H`ɯB4drOZoLOOO,Xn)>h;z=ZFrg;wڵkgc|7'@ёV}NfY˝V+ٷo_֮]={dӦMy|_>K.=Yfǜ }v=Ypa.#bŊ-Z\s5O__L pۤjeꪫQcJJٜO@?{/W^y!=cپ}۷oϻロz_~97nE] [mm۶^:CCCf׮]꫓|;Xr%믟D@!(" (" (" (" (" (" (" (" (EMIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-20-linux.png000066400000000000000000000061421466162644600304140ustar00rootroot00000000000000PNG  IHDR.sRGB IDATxP.T0p Š3,6nHaaB'FATT*h4xyyNC9;\KHH-LMMF%/Mn.?ZwK>Vf%_lK999lܸѪaaa viW8WWW݌;WjZ$7qv(BP{R}>SNWqd=}:<'&R]o_l#83 =9 >s iZ233Ҷŋ d*[\RdҥC!nDM?w#jfKOXKVK&t jNa_$1TTTJtt4=z֒ݻ#**_˗/l2"##={6'NGydP---qܹahmme7q'n_W|//_v@TommmKll,iiiZ-[ *@mm-Kٶm<k9$$r222HNN&;; .7׏ìY!..M6CF#6l`ڴidzcǎ!u1|bbbHLLfoB]@|vvk<dP|h+Wukd2K/HUUٳ{}vOϧV;l=tttgĂ /Xv-eeelݺuq!͛+‰'̜9!uxb222(--Eϳyfzf È P({ \7779~"sj~Z-;wŅ3gpw[^KK sz{1<8hJAA%%%܏x裏 a*++j|||شi|a>y$O?4o&466˘1c={/#ͩhۚ0 k+F5MSO騨{rJ"""5j)))L22r2777V^F'**SJb…:u Ʉ'>(?E [wmm-...Z ZW))UֶPTۯ~`nnn\p3gj]we:vwwg̙C|\]]HJJ]t:<<<|>VERQXXR///gܹT*vJB[8퓰Wϩ0o Hvƾ+t:$%f6lBYYlOOec8>`=00^Օ,Yn_~%$%% [ٳgtɿ===̙37Vru˨j-۶@JKKٷok׮%<<{A>g;a>Aq[[>i4?~U-r p,sFvHDDYYYݻ ZBvTTǏ?[FYqOijjr}}} f@sluy///)..+Vc֬YFk[eK?HMM%553<ñcP(󣣣òoP/zF<5pOԋ#ݼV Zm*zzz,Ǘ,Yŋ1c( fʔ)vF!}ߠ5} ~>&#_Ft`rr5233ٰayyyՑC^^0k,vetΞ= ~7.B1j"gd21ggr[l6I$w>GBa=@3uTJ%U:: .닛* ׂDGGcǎeNT8#!$B[gg'zB@RVwBkH)B!l_B!I B!M$B!6R!BDH!BaI B!MAYA6GIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-21-linux.png000066400000000000000000000067371466162644600304270ustar00rootroot00000000000000PNG  IHDR.sRGB IDATx{Po $QĞuVUZnŮnWm[[ұ=vPتG쪫VF؞ⵝjkk I?R "= }y0sy5nۍB!]B!B!+@ !BH)B!"B!; ~X,v;Nۍ^`0OwOÁ`0`0 EpBl#j OШhp:8N %((??IvP]]MXX:@UUꈌh4pOB* RRR6WZVeɒ%>kVXVV+72VWWc00Dbl6nXʕ+F ";u]Y)|-Aiە{-_SW_Is%>>;w;ϰa|r2zhי+WPXX!++;v,7n>@[&jb2n:D@QZ[[o<DGG؈(u͹s璝}[mLRR'NdŊtunms v\ u- ٦7f qӟ"l(3߹p<$1fOCfrx^O;x`v3< 2d/_鵺۶mHMMdw, aaaMYYK,!88ӧwKρAڟYDDJqTWW3dȐ.ùszErݺu;ٳg'--]va6oހBE4.k#tU[ߛ5G}5?qzRV!tcDz{n;PU"222x7~.k׮>@Q +BBBTWW9{,MMM}PYYInn.ǏGUU(((BC6?sBCE)?@??LLTDGv/fᨫi:ﯣV),,O?%!!LJ~͛9z(Ç'l7wΝG}{GNN 0"""())#Gmg>LQQwԩS߿'O{np80t:9}4^p8y~}CX ۛL:t8#<<N>͖-[طo[nmW~Xftc$ݬ 6pE-3Q_~>,**jkɓ' k]z~pEjkkIMynƥK02W#Z^1.;۫/q29B;ڷYfvZN!h4DFFrϫ[[[|rV^o[,X{rBBB괮` >>sε;p8x駱X,lڴ] TU]N'ZrM.6PḥegYp!СCvopʔ)?sQUU>xmAPll,8pcǎHll,Àwߥ[NɢOd#C's'_;=Əϖ-[xg:-6mTVV*.n۳(f^,g+ Μ9CKK .N?~gne#͛ryꔖ~zZrrry)--Rz}Ju5EE{-NU}塇bŊFm۶j*RSSDFF2m4ƌ)D noBI4ue=>SG9zi30t >ޡ#h+[]*rlODlg=VJbnxfCQ;KMM z^FK)(DGGw/F3uTƍǢEn !r άAhd̅F nꡏp)?1"{==CQl64S8?iߥyٟ>,;]YRR#<°a0`Gfmҷ^z\O 9g+fTo Kw ~>i\8R%O?w1=~*&t\̜9ÇOXXV6_DDD۴[l,<9La=(._,_K} 'othvr$k>#V]tN8U 66Xwgy'OҥKʨbn~)))l63sL,Kzj3f F@-[BRRR|""""-ա@vƩKא0'܇ %tAH kH&s/l?`=۪l]'fmxx8gѢE;|Ͷ{yeڵKEEE̚5ٳg駟fV^MAAA۷ŋs!z-{:+*"""WN868&rqt U*-jk0!!!^{q1rH6n.!!!CIrr2۷o`Æ L8?ѿOή]Z~$''3l0F#&MroYtiСSsRGoXwث|oa?Њddd/B^^ .$::;={zN^8r}ǎc_˴lӧE3fG111)K=Gf}Z!RDDDJ>ϳ33/hpP[um̙3,^GRSSCuu57oC=z\N'd׮]L<Ν;)((nc8tPs=ܹr>s17|ݻw """RzQ_YN@(b`G'{ '86]kWoߪlYɏGr_]mnݨ###'OҵkW /@BB݄ (,,dѢE`FAxWyyq\׏shȑ#IOO'-- LTTǏ={h\DDDuh:9UǎPu{8aLr8fԟAڎ(kQ@}˶3L%!!߼>55@Z~e("""%@vQ3o#vLܹ铋^$"G_9-|;t `kMkoki5޺|ߠO4$MkEDDD .ك+ah7&\M:9WBFcp@\&@ CK˭(@^ 06l0]"ED[(@`t:~nl#r h|a;orp8Zw֭[7C=AvzNg'NuF=l6T_rE.V_"1^ws8444(oɡݎd[o# W^yLJJJgo1`޽tB7nsxz[?~ Bii)UUU^`0pM71rHsw/_I&1~x2339{,p&lƍǽ˞={9~8O:vV+g&))e˖O>?OJJ Rq, $%%ECCXVΝKAAA'K҇%$$kgV+Nfĉ,Y,yWիaaa?~/Xꫯ% CM:墸>֯_g}͛ٽ{7={g> ''[rN'U]d qqqew|ᇬX̶a&\>/_Δ)Sصk;v젺oKfh;s"W5eiii~ FJJ aaamz|@~8p -pϦȥ)@0Ȉ#1bpnJ{۶mdeedUUUn UUU 4?ѣGc:t(7orQTTܹs;nL6}ٮ]xי|SN5O?no`|rmT}l6, _5f\.F????pD)Ma(… %??ݎ?vMO8Z?rݻǣ~_WűcƎa$+>>1cưtRVZEZZ555f3`„ >|)SУGxrss1 裏cE\\n8hRSSX,1j(Ylzecƌ,\1$&&C1gO{"ru2!u-TVVFuu5'O졈"88@L&,p+**HLLd߾}c.ɭF"iE>|Dرcr£5BSB{i{הꫩxRRR1c(~ʨ"^wdқxMi [ړ%|~ [gDD[|DDě|4 :Kk+՗x#HDDě|47???w]5I_WJsZJi #Wh4"L&KhlY/b/Kϕ5IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-23-linux.png000066400000000000000000000110201466162644600304060ustar00rootroot00000000000000PNG  IHDR__sRGBIDATx}PT+@Q4+VEHڨjjf|JQc5wx+"j4&(&\QtbIAaq;! y0;gsL6͆=rrt""""ҺX] 7oޤ7n8VՕpyG""mIKxGرKi.^ٳg8pK6NK,V£ԱcGuEEPC EDDDH1DRDDDD y ?8(^|t/8SbI:.d0XmU%{)_[ zWwPJvg72n*xPei`РA.CDDDZf]®VKɚ|_ Qz~5/q>\:7gyΉ'ڵ'NwμyǍǶmܻۚZjaaa7ٜC СCM64֬- ]qҝv>lS;jBO}l9(UԩS;y0aƒ(jjjعs'/v^a#%4>V{icD}[SY~GWa쌋d21zhV\ɤI9r$~!y7Ş={KK.̙3Z(̙Ç3f aaaۗ{Ϟ=ӇD|}[VVSLaL28yѳgO6mĴiӈW^sȈ#1b999mDGG3|pʺkiK,j+ZNSp@+#{^BϦ(۽{7YYYK,رcL:QWr޼y2a{ ##ٳgLll,۷ogƌfHII={X"##X,TWWSSSoj%..Ǝk̜9W_}8Ν;رcyG bѢE|_~\\\DDDt o^#Oʹu#~(6l_~<${xl*QZZba5Oqq1.\`?wo t֍=j~;غ2d9J\\1>ggg|||̤@EDDAw o^5 3Rm=->ET~vީ+V#++ wwwV߿qF|M&))dlݺ2cׯ_'??'xOOFǸSUUe;k W\ŋ 2>V]]MLL flҘ2e I&YdM+>W@OKCݭvfLNfn܁F9fXOŧbsޒL&S۷Xeewzul?~3fгgF!TWWcrss o޼L{,//V///r:u@EEލ 44)$$e˖dz>K޽=_H[ԬKWN•'88c$Gspz4?h_\ZvI|ݛCC֭[uϏb{=0Lb61͆!((QxcϞ=|WI||<ر裏Xt)kQRr D~~~SYYILL 111 --e˖Dll,zd21p@ƍf]v̝;WG{`l6G!{2|{۶mdggۻTRRСC9s n$ F/<> """"bE0aw>Vs5sE"""r:""""b:l~cEDDPRDDDD QC-o>}]l1vػd\DDDZHqlә3gf Xn%%%<.QDDD4k׮yfϟOTT}<22OOORSSIHH`<3deeqFYf 'Onݺ1||||壏>[nQZZJBB޽teH%liV+?K.>Z–6Օ~zV^-rxWTDD5R6c z(˖-cǎ˴i8x WbڵDEEqNJTT:tٙcǎo>\\\0a'O橧ŋsz+iԁ4bcc[Ǒ#Gڟ9Ob69z(...>|aÆbDLL ...Kaa!_]QDDPRfΜ9X,l6ތ57TUUqa[Vؾ};;wDmm- }lڴ RZZJbb"ٹTDD)~z"##- +ܱm_;vЩS'yc2=<.%%0ӟ2qDG\CdS+F޽{>|iIDZ-a! """"b)""""(@! """"b)""""(@! """"b)""""(@! """"b)""""(@! """"b)""""(@! """"b)""""(@! """"b)""""(@! """"b)""""(@! """"b)""""(@Jpssŋ.CUx".CDf9yYV Z.ErssO> "p """"bEDDDH1_^ZIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-24-linux.png000066400000000000000000000054501466162644600304210ustar00rootroot00000000000000PNG  IHDR!nsRGB IDATxPu9 ?L~ X[4 @W uq+f,pQZb,L`zgGǩ Q} s|>'gG' "G 1c G "8b71h [DDDDlRDDDDlRDDDDlRDDDDlRDDDDl2(Lq~Ϗ hrb|-z~7EDDD1>~LmWf?M  !o~c̈'x8esKSq|J]DDDDnîρlֈo[qv1tN#uT8>55wyڲe K,іOhh(555ֶ.)(()}xgoP.\`SL{s7|Y:yƮN:; G))nU gkΝck̛7HUU}g۵1Ad2Kkk+f|}}1<>}FbccC8hm̟y?1tx g}#*˟97߷i&W_ϯ+q;:}4nnn$''[&L ؼy3_}[n%++Gy,6oŋqrr믿&66ӧXNHH ..SNqe 6m"::6cȐ!$''~^yٺD"""z^ٶm[ogcZZZزe %%%Fٸq#=M8>sOt .0l0jjjذagϞh42yd֭[;x{{SRRBll,cǎt fpDDDC߷#aB~bmwo4G5&G~|_si:\TTׯ_'--b,Kׯg̘1qQ INN&??_ پ};bҥ=wɓ'ˣ:nNNx{QQQ'|l& uv̻KUUyyy2vX^}^.WWWIRReeetttd\\W&,,#G駟7ߐ {8tF?ŅM61e̙É'8vԩL8}`̙X / 8h̙3̛7']^z%bbbz\tɺ},XaÆd>L[[[1 Xhnnn,^r{5LfP6m_ɓ'1LQ^^ҥܺđ#G0 DGGk?L&XpO9]"""vg%쎖fNeDo_z;'' F'T~} 1k ToTMޓŕW8 7LRRR(..p>>>7 k׮˥Kz=ðƍ2eJ9sX_744o}vkСC{b0|pnXz-}űfjkk)))ӦMl6cX9r$TUU#y衇o!""r7kPuJ*h1z"Z,wh>FLd?_R͝;x{{b v͹s`0ܲo_a0z}ckkm ߣha<00UV1{~ϏJKK)//'##. ._[݈uk;1z~# Ji2ԅ}qAKЯ6Bq<|F/&2K|IFիWӓ1cٳO?MVVQQQa 7n܀v'͍GRZZ絞gfϞ=̚5 WWWvIll,o2!$$:38i$VZECCKbbbHKK{4ixyyΆ J9|dbd0B3:qUd׮]X,<<<`׮]gٲe]>rssd/"MMM$$$ŋ gΝ۽\|9MMMzo+1^ЦG\yw.%a.q9Uh6;#oKȏGύU/FAppWeee JZԟc۶m=77ӧOʈh0-l( cxD`hkť^p<;w , 0aj|Bܹsqĉ;v,֭[ן>*ƍB[vv6^G~~>쏊B~~~I)Jtjwꫯ>Y;X9NYBun Zn\= [G[gAu&<7>Jŏz>***7x̓-]*q[zr .JIPtTUUAPX"""c7\uF-?\ůADQ(a iDϫAX|C*"** ...2dJ%Ν ضm_]va鈍cccfcΝj5ٳg#<<EEEBNæMRT!;;[8fǎ(++۷ J߿&O6 ؽ{7N RjPj!@^z-¤I0sLdddQVV#;;f”)S|^  ĴiPRR&""bҠmÕ1w4r g4^,I|o08~Ft=&MAѠƍC\\Ξ=/''QQQvK7''{_|˗mqݻ%%%ʂFAcc#*+_tj \pǎCFF>>رcѣGQPP'''_Wc `0P^^+:ј:u*-[vj3gg :}pe8uꔸ'"""ҨmGYr9oVV^yxyyA*b(((@sssc n߾R555B@II rJ888 3gF#֭[GGGa/ L#F`oQ/ 6jQ_x㖚8yzo>'Vx7x뭷 F#xxx8aÄKR!P__\.;::q/C4xyyx&۷xڊYf t:'U__ov݅C>rB@uu5JKKTӧO(..`6mm3f _???>>><:l0%%%ꫯ0{lQQ0 tODKDD$Fla:8ފo6E1pUO{XWU\U!W(j5Y[.j#?~V.]¡CgggСCpvvX Çɹ׬Yj^\.D"9x Ǝi|RRرcBCCj퍵kך7n8,[ jzo6f̘!/\ϟJdBaa!:DDD J-___d2bѐd3xe8p2 ~L<쳢暅8"z`c2L.&""""Q뉓ceIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-26-linux.png000066400000000000000000000071431466162644600304240ustar00rootroot00000000000000PNG  IHDR!nsRGBIDATx{PSo\rS*,BVAn:]NuS^툿PQP *KAWKH!@<@ʭg}oΉ1cPc1\L:b c/8N ٠z_1x 1cHc1fN c1ƘQ8d1cF1ce@W/;!_Wk5I_C[w_f1c=XtDgv׮j@Ur<JСQC:f, ޅKʋϴep [:P3cn v{ vݸcLmAKM?wzl&M00Ñ6dc1ƺ2:aܢ¶Kx4nf]!B$<&fFs4Ti;W訫Áp #F@bb"LML&Ò%K@DvɓPP(89ECC̐ L8;;c˖-ԩS;;;DEEnnnضmDg_!""[ly7nĽ{X]vaܹqnkkCff&"""'!Ʉ9rw܁,X\vddd"7o!??D ̙3 ":u DDdd$ܠ둝~ zX`$3T*agg'''H$”)SÇNW_޽R &O[yUTHOOGmm-z=LYfA$u;ǎD"FJJ1n8@aa!Ο?HR,\F1_ \`sZߩ. tym$]m::$Z/dڴi1qqqJդh߾}O*vAޔEL>>>b }6T*XͰ0b蠤$ϾֿtPee%?~B|t^ٳg{<6mDmmmJ;wbʢQvv6%$$mdff e}vjhh "r={P{{;ѩS̙3ODDFIII]v}d*--%Fө\֭[iTYYIDD{oZ-}GJDDʹyfjll$"/`0NxqRRRO>""ʪi۶mT__ODDŴsN=a7K169]+n/HF>+`w`_ G׵GѱcRRRn:rcÆ s bٰ@TT4 LHwj7** bK.ѣwϾԟ>}:}]{رc{{{2av?@"̬c===Xr9%%% ژ>}:nݺVbĈ///X[[2 (**Bss3z*`aa f#6l ~?ǵk<^d!BRg,'M5&Lx611`477J(J~Z̅j5&MwyȀ=!ˡj^gnnZ-$OEXX@ӡD=SO: EPQQbSNEqq1ܹggN=Q&Ӟ|rBrơvLHa1b%l33[[Kjv`Fr3?OGrcFrso(ز:Z>m'~eVסVT*_cϞ=~DMM pBBBcPZZ ^G_~Yzg_ǣ O?%%%}:aΜ9ƥKԄVoMm( 磣pExxx hjjBB.'N`X,n___塽yyy9N>e?3= R Fee%n߾jZdž*9}D"rss~Ν;ǡ;q0##$%%AcO DpsH䄴48pk׮Ń???Yn:z,]TX=r3K۷HLLM~~~>:HR`xTÇ;ƅ -$s˖-{CBBj~?~{o>_<ǃf `I?^8&. h^*A̶*(b~/^AE@ח`Syk COL*dIcXh.ؤ6AP= 5f $G6: H1`10i8S=NaLVJJBhh(pСIh2LC4}`1 ̉z Ӝ]u40.~9>|ЦyM]WUɴj*|WOd`0Lzwl6Ou DDDtrdhMtp܅ĹplmU1o+b _yeK$8::YYYX,hllD}}=-[pDFF";;v܉xCbӦM[~= 伴4Xz5 aYY 477˹6l@NNxb0L(**BTTbbbPQQݼy3Ν;7qѣG}v\zpUTVVȑ#cfTUUa޽0Lfp(|{ic 3sŅ%VKT5IYXgusbMC3q7(\RPTI8qB9sFL&%233EVVB BBBDKs->,B F#bcc`B.*++B ^/ [nZVtww !(**jZo+F7 Ζsȃe aP7l7~N#l:N;?<;ҥKqףdgg#!!:dB@@mۆ* %%EnĂ PWW:t:t:ԩS@pp0|2:v9P(m!:::$1{l_H̘1$ ֭~afSO=ӧ#55rhtv{hn4gq,.ҞG`r:~ pE y7LŬZc~''̙x~~>z=JKKF$%%AHLLDbb"L&vZ oLӡزe |}}QXXR)>JsҥK bh\$IV W\cu}]؊+b h4?~*V\\;!""K9 #83x - #Zej&c\;h?v3 Ms5g^v!LnjbxxX[[F#oooHq@aΝpvvFhh($I?vލB)))(//GDD|||P^^!Ƭyرct:k.[lٲ/'. 䬰ha4qF7߄~JKKa0nnn@DD, ą 7@ll| ===== [oOO1kEqq1P(#@TZرj $=FG%.G%"LĉLJ $ل $ل $ل $ل $ل $dR!jjj"""|8ل&l &WIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-28-linux.png000066400000000000000000000050761466162644600304310ustar00rootroot00000000000000PNG  IHDR!nsRGB IDATx{Lw\v)KD T]iP%mT\mJ˕^CWA%5iӦx05p-XW9`XvxmQdEdf732f$ɝ=""""Y HH""""$a$""""I HH""""$qq觧E6 j #"""'MśhO›RET8۸!:d~Awl6 ^^^( "DQh s򚈈h hwpM{3[@mr?ù~6>߶yWE뱤\?UÞPzz:>^YYif3f3BBBhRBjDDD@EL&X;l:4lCeXƻ[~t~~ WCow`فZfEDD3o޼)ߙL&f3Zmba$}$''#&&?8Ο??ay-[ 66())GGGQZZDb "''7B:^jgApREˠ Uyt}7Mtl/ꋟTIKKÚ5k.\Lc0h2%~~~0 D3L]]^yCoo-c޽~|޽8~8=Z `:Nȩ ol\35d\GG&A.۷J\GGrss`~fȑ#HMMEBB222pIXb␔R ;immEff&j*F#%VquHDGAZZT* T*qĉ|2>3A`ؼy3zCth4(**_|ID݅=*i_ B0OCx5A ڎyA8z(vލh۷/N> BUUNSNaƍ8y$n۶/***yyy2zcO>>>wԿ({puuEGG"n aaa;0aߖ刍Ess- 8tuu`0@.QQQpwwGSS"""dȩ2i-h( su_oR2 ;pfYmp/.*g 󦲳A~zTUUa۶m\.NJ+O?T L&Cdd$rrrp2Xp! rrrpO>EQRL6~w"JVf3̙ &IRynZ1"7M U ݯ~7xhF.B3rC= aޒ3wfmmmعs୷•+Wu;l6GOD6J5.,!00PRy`,4xʨT? "5@Z ~_/udl}LL>x_h~*Kp+2 x嗱rJ 6mڄ\.ǡCG9kkkr !JE###g.f#www;{FCC}j⫯BJJ-ˋ/bFBnll<hii bbj!Lky\<:Nxr#BVZ%].9Fr?C=lk㞬 6(8wVgшjxxx8{w裏BӡW^Ejj/¸u&cddZ|; z 555Xt)*++!"{1c3vBnn.$Fum[HJJF;d$MIb2/f#M&Gj'oz|pQyg-h*oȆ   A Faa!ooo,_|Ȭ,l߾ Aee}&N;w.Z[[%]AAA D3ŋQRR۷:ܹs-ǩ@jj*믣IIIW֭[mnٲ}}}Xv-, -[]v9hLɫ ifdVԳ ;;;!("""=ߟ OOOtww;af]HDD4qq5x{{xQ144hZG""Y, g>AVs#1@4$a$""""I HH""""$a$""""I H`ߌW(}IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-29-linux.png000066400000000000000000000054601466162644600304270ustar00rootroot00000000000000PNG  IHDR!nsRGB IDATx{LW/aoDw;K/nG#j-M931pbJ멭tFt,ʹ#͡ZVTZbˌNxa+Ap?o썂>wg']r\@ """"^@[@[@[@[@[@[@[@[nKyRJLc_Q_][g./vΞBˏ'ni""""rsm<|1k?ȩFYGKV,boؕϾ%+qT %iq|IMԪͷ+lõb۩I& pTyk׭uVv;H-l/S,I>gGv'kh=[OOOb%::3LvIrr2cǎeر$&&q~F)..Q֕`rJvu?ׯ Δ)S|r^xv;7쳷XlUO?4k׮;Xnv{(;y1?6l0WZngƌȝ_Ho?3|[ M';W+w;d(Aӓ1 9ns/䫥s=瓔DYY{!++ qaѢE}U pE mF}}==|G,]*˜7oQXXHQQ۷oYfƮ]8z(+Wxxꩧؽ{1|RRR:.]?~<Px f\t ///&NH[[)))lܸ˗/OLNNiiiWmXn.k&555̝;Cr]w;3m"""j@H`+#_s|?L|4a{t"`g$-5` #++fΜiw}9st"""4xy{X{N@ʾƟh=wט1cx뭷ەWgӉd"00Шt:{1bqߟAaZ{555pq뉏7\.ijj" q.]X{[[5HMMe:t趭>&%%pe3~[[[=`„ L&>s233=nFpy<.] /^oܦ68gٕlv%MMMhH^/|ݘ?q{MRDDdRZ{_L I`{xx2oͧl ;.ZW=z,-Nz={ͥV~Zp}oͅ hhh`L:\ڵkillrQWWǗ_~8>>1}tl6V!Cra7n9r6=aq8n`ÍOLL-뿯uZY^=#//اe, seӦMx{o5zhrrr 2jCDD?yGFDDDD&)lRDDDDܢRDDDDܢRDDDDܢRDDDDܢRDDDDܢRDDDDܢRDDDDܢRDDDDܢRDDDDܢRDDDD IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-3-linux.png000066400000000000000000000053071466162644600303370ustar00rootroot00000000000000PNG  IHDR!nsRGB IDATxLg7_A[TTXVm@Fs ت8n]Dɝ9O$[eSӑmȏԎRó NU߯O}8N'&HtDDDDtoa$""""0@[ - DDDDH""""r $"tD:͆!H$d2T*bOGDD4'~Ʒ?`jQ،]HS3§RcX`0LLA`a`2R %li $W;NoSߚ k ;*{ZYYz=f!** MMMc/..o=]=, @,r* p:tDDD.^n2Ҡ.e¾;DEEl6O]zGLL RSSiӦQD" ((hZj;Goo/J%$pl6͛Tb`ڵtݻG1xWx?3t:`ҥW+v"";2x$W=N'^|E(J?~=݋Q"77SRW BT:Wv… m۶1?/oV+PQQQm.\-[yf\p:0LSuDDu#$1gaKG$Vu; aɒ%CF^1/)FbPՐJ={6G?%J?'ObݺuFӧ}v8pqqq8q֯_~n;Ell,"""&\ٳgQZZc8v6n܈+VuoʕxP^^ՊB ϟǑ#Gƽ {'hjj`WxG8H.444ܓ!R&!""aaa.!J1w\Wۼy`0`4G؈,ױ EccLD ^ lo wɸ HIIH$BZZ/^*OeggC@s;ΩRapQ[xGƽىEV ڜN'A@mƌ{&'n7ƌ&"yULY9\ܚjt[,,g Ekk밶چֆٳgOh~Te˖aϞ=hhh7@j am"gΜpԌ:dEFFڵk;\__ :)r9"##=]Ƹap̙3peh\tu<44,^xZj&" n ֮;N{!з Dbb"N: dggYYYCMM F~!233 Ӊ/mmmX`5@#??j/^ٳg]򩧞{grKx衇с+wKVCVOެ xMI:ݱp:p:@ HhZaǎ޽{ /WWWǵgxŊXz5$''O>fÒ%K+8&!!aqzz:}غu+:::]valذz{{1d2XVzC,#22;wDRRҸ5jZ?a_v8tʐ ZIBvr~]AAA @ӡrZ [nڵ jJu\ (--EII 0w\۷*jOhx i|˗/GFF<] M2 J5gAFBeo""Uwa?ȾKv8|駸x"~iOES@.&ivܸqᑈW Ě5kP__EEEx'<\M%\???H$BRHDD^f3100 X LJ=DD -IDDDDna$""""0@[ - DDDDH""""r $r(}O3IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-30-linux.png000066400000000000000000000060001466162644600304060ustar00rootroot00000000000000PNG  IHDR!nsRGB IDATx}LTw70 T`iEY tA Ԫ^WRK-UbCj7YK[$R-jk:Gy%P X@DA<,>,hMd8~dO~fB!6!B{H!B B!! B!C$@ !BHB!)B!"R!B8dD_s0-+v}'ùa-B!nM3RucRdjO7|:t>σWԼKG?A󟳫8Y~{-I !B]4$/"jc _26'\};ٵ!8@JJ DDDjUhh(gZ1h/// F# h4RPPpkޮ:Ӊ"44D5bccl6"""ɹ|3g`4ijjccB!ӈ@^VhSт O Ϊm\<-Qs|Bzz:̟?WWWjjj8w޺ej*VX@mm-O?4eee λFl69|0 _0,}l,]݋ j[ZZZhmm%44n}}=]]]L&f͚Evv6QZZuww';;0L(/ƍɡ !#殼Dsl_9nMQZy.778}Sa05j̛7Omʕ+&&&W^yxrr2Jrr2ٳxyrrrl9 M\\ׯqh4t::wwwZMmh"~z`Ϟ=̞=ooos={{???t:,YDmsnJBB>(>,5557j*0LL>REaܹF{{zέl6Fpp]+++ՐYUU&Itb6III… \x"z)&N kaR!ݕ9YDn,`M}Z?t٫$mV)SϚ5k8x ϟf_o>Xz]O>uQQQɓy9~8%%%SRR—_~ ˗yg\7ߨc裏XhѰ aÆ `Xg޽r1LBZZjR9qdeeuV(//jm6l6^Kee%Ch6^jkkbҤITWWkl2Z[[j]Bq/+R3ʀ?2~7ƏOqq1Z 6ܹs9z(0u1rrr0 vZhmmU뤦^'%%z1 L8{L~4 z|||Xz5~M/OԘ III޽r\\\qPTTDll,̙33fcݻ ((Vʕ+(++SOXp!ݤCQl6S__o7CB^gg'eH<}4aaaC=1cxzzb0uwwpYHJr͆+wWi׭[G||GbbScNMMe͚5TWW5dffjk?NKK &LPۻOssೇZV}ӓ.TQVX :gΜ!!OQ\\\o6 Aǩ7```VMM VUV BhT}f|UX(<_Q ]>\pquQ!vsA96,楗^?b0vXinnfر$n;ߟdzo>kZVFQ<IV󩬬d̙q9qbp%aX瘢hcd?HDRDDDDb)""""1Q(@HL EDDD$& """" |ΒoMeώ+泛&w\-""""_z.H_{a_; ޽ qe $o֭ @myVh$Bb n>5_y3/߾D5]DDDDޘ,Vθ<,'-;70ǝ;C-i%9lwOa/d6UDDDDpR@RFÑՓ3- BW#5A3_@/ۏ{EDDD$@v#4o]GKܠ|RFz\mؓӰ'tΦz:ja%@}hX +c:WR>LKL~O~\Z*""""e|\ ԭ+>vz›%x|4QDDDD@f}c7Ke""""қ [oh%B'RijGQ򮺕S;;!>V'-N2>?מ# o?@ڹ8d!ƃyK$8t67/""""`Fc;V k\l6fog |FD"DQ0h~Z>+96 rJD"ڵV Bjj1F TUUa6>磱xTRRRlaZZZhoo'  zvMEEE9yL?'9(@)k]vcqDhnn&..ypM6qw+f͚5LKK ^Ggg ]ii)?K.7ޠؽgB~iJKKf޽ttt`2X,\.)--e̙ 8"ռKd21bfΜɌ39jD"444tRΝ9pp`0aɒ%WDDN/ rJعs'vrw^^uJJJ(--%))XhׯgȑZիWSO~fMnn.l޼S[[[Yls+VIBBPߏg[|8X,8쳙>}:NyDgС\q? ""rSSBܴ4"1^_$%%qm%33nn χgs2n8x ƍwD; 8Az dggSTTd2dq\z |駼/a<<3Fobڵkl=l޼/jz-  7У9s0w\^/\tEL6C-[Xf $''xx'%Ϫk}˖-2w#  |=y1b'N:;;CCvFvvvnC$}"eȢ";c痘hÇ- \r ^x!`^{ O`ʹ-=8+g,Y•W^1UOzqm} g6o\\p(^1dee:WSDDlZCN ^vF0@jj*6O~㵮*a8*ZkVըB>\:rX__oTaw1Ll6&OL4RQQaƚ5kCE*ӧO ++oٳgټy37n4Ϋ磏>bڵnn᱋!11+C6e9)@)GZƎ㍞?=z,b1BSYV, aW/?"h4J{{;ׯ7P(---]Nnn.C5eR^^n\`֭|~FUW]cnn7 DDD)9%\=ds=lذGJF pb3@vCG `(ٶm .$''v0Æ cԨQqwcCCCڨ?7f1l0VVVk.9rdg`XseTTT lTWWSSSjeʔ)ݽ]J""vSC݇[ZZ:u*3gdΜ9ݻ_s|>ׯn 줣2c躶*233ijj<ҎKZl]s ED7 rJp8zF, \~444kc Za~ {YKY\\׾51L1~^Sj~SNcĈ1PaP8|yW~PKWz.]ƍECPÆCᨯWqUW]ŽKbbbgƌ\veZ7|&袋b|lٲXwf||륵H$BMM XVRRRx<s[{ \DDD(@)d2aZ B:;;q:5}k{QZZ  ݋qD"FqLWEuo@&%%Ǣ{ߌ39s&<ۜuY| 磬 &Lxd2B`YY۷o'55ߏp!Cx<=m^<8p _OCCd2v{ o.##Zr ?|>lK`2>|1 _UUżyO9ێKWUFRN ݷ F'ch7n]t.v{V`7aؿG 0#cIIIaذaqf#|6w׳zj?ݎjaOvv66z0k,ٻw/{a̘1DX~= .>{a~&>3b^"jkk1L=v~1Lp]w}vv܉d"99^HVVp¹TlnsaܸqFLII9bjeܸq<?`۶m1v@yw]kSQSSC]]---~dΜ93MoA~~>iiiz뭬Y| xFii)wohkkc}јѣ%--^KKK3q8xp\ƞCVVfذar袋zb0yd|A~ivAJJ 7tK/+Ր!C7nK.%%%y .III{lݺǁCkSs3}Vj_ve,Z"-""GPS\O>!3fAVV =7L$&&ruבt2qD|I 믿. ˅p6 Ejj*YYY$%%a6***4iRd2a7A\\K.eL:`0=pw+9r;k2>|8wqǏg444ى 55AQRRBNNQe]#//ϝwDDej [oCq#FwaD"-#|,t-sF ֈ'b+{o,p j Bsv{WyGy9묳I""Ǎz nzO]蚗9mcq:""""HDRDDDDb)""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"k7LJyy9""'XMM P!"rB(@f7lقn& Fcc#VUhӎI0p@.֭[G4IϠA=z4)))U9"(@A">>""r\)@HLT-""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$&n|l߾h4t2alF$غu+/k֬Q980`YYYF$8x w&99cǒMl۶m\* E䴢yDQ;6lX7GDNsuVѨFD䴣y9N!rHLLbw3DDNUaHL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"H rDQ(fH$B$!I$tb1L<) D0l6t:qǓ8F"X,$$$IFFFCcD"#B]M& 8"mmm444A0$  D"B~GSS@\JJJb @ ))tNJRNY/yGw{y^͛ /ixؽ{7O<K.宻dڵ⋬^6dggSXXرc5j zj-ZĒ%K(//Aaa!SLns5imm?9oL&#u}aX1bwW_}5{,[}B[[^o8t_o²ex뭷Xb2j(JKK 8쳱Z ""҃/^޽{u]G||WFbΜ9lܸ$8p[n2jkkYl.vX~=>)))L0.I&QXXn?磏>ge֭a@ _~ɗ_~ƍ7o>~?˗/嘞ǎ;ضm3gd?f3Vٌbv3h  fcs.˸yyhll 77v;---466ȪU3l6guiiiacH: v)))K/%΄ hkkl6cٰZl۶ݻwcX7nXVN'\xᅌ7?ϪUFwy5&6l@UUg| 0xHED4)B|' Yd >IOO7P믿!!!`0Ⱦ}/yYhsΥ'p85£EF7 IDATa„ ̜9<UUUڵ͛7cz̃ yꩧ1bP#Ɛ!C9sL."Z[[Zn\.?OygHLLg֬Y?;lذرcy)--% 1o<^y-[Fee% ""҃Yp!P/ihh`S\\j5JPo1G0118l6C aȐ!;l^}U>c 4h+W4nꫯG?EEE|R|Gcl6d"--St:}vnA||np8̰aø+cZ}u=z4| 555OAjjրRSdb„ FܲeQoiia@h4J0$`ۍJuu1v)//p饗'TWWdGssѣx>|8W]uh㡇d2_pL8c~fHh4j c.c455?UV 䐟gMaa¤ARNi_|1/p7y\$;v9@ @$17ؗm۶q(qqquYܹX7mďcK45o2!%%czCCϙ$''Fq\1>N46EEEw}l2ذah5j^x!wEGDDl rJ+--vصk`F(bl6rrr܌dȐ!dee= h, Vp8ls\}A/^LUU%%%g|! ++b^={P__Yr%%%%c3f wv),,$%%%յa׾}1\|vZ8@kk+ݻkײpB-[FZZZL;ORNiYYYf8plݺg},^v;{ ))#GCP(tLrӦM,Z:n7g&77,vQ3a„CÇGÁfcFLGGnɓ'sCpq0;ȑ#9rѦF*++YlJss3)4%\š5kBlٲɯ~+?뮣8T@3fȮ̮]^ ^13e.")**v… ={6.vqKFy׺hLII9. În'++,F͟g֮]ks.ZGNySNY%K;ӟĻ֭[p6|p׀ZA#`u]GGo6 ,n dbر 2_|o&zh@Fg=~IJeؾ}\p8*EDDRNy#G$;;:,XL[[|>vqAn7=B!cBٌb(`QE?>/wjo|I&eeeq5PVVFmm-/#z/^ʕ+C!20Yu a-@.^W_}8K.H$#HHH`ɼ]p8L||<8x /b[ ¡ E[[[innzYUUżyxؼy3P+o&+lڴ_[/Brrrhlld<3aX(--f, ~͛7acv# r="x& ;;;ٴi{øqp8B!>3|I0\tEPDDN; rʳlL>7xN, ~ݻEsNPobQQwl6@XDZ7̛7J֮]˾}D"L2GQNLn|>:;wW_e大L{{;۷o7W{ڊ㡪+V`Z$ v8ke„ >+Ӊᠳ"'2i$yVZ~3.<,_W\q'NDD䴤)<ʄ HJJM7Dnn.n[nP׵cx2220LǓ1cƎ1\qr-;k 淿-gժU[XX]wŔ)S5h nJ}}=~W>2gLOO'))>ׁ?&w}>۷chll4'OC=d,$""ERNy&\z~3enL&̞=+WrJ&O|Dq݌=R)**"33o|477sNB :?|&LA8aø{(--eٲe|'۷62224h\s5(].SN壏>2NLL$!!8bt>|8^xam)))a̘1TUU1fs=G} . ==#G2sL.RF""rfPSdpp}q9PRRbbXg߾}GCgy\}D$vDRR= *L6ѣG3c v@RR 6͵^K^^& ˅0֍jp8x<>1rH}Q:::=zQiaa!~B$$$PPPpܖӏCX,FaN;5jTe=d8[f233<-  b8Ǝ pL/11;^P$""Ha2}3LC'݇sDD̥""""HDRDDDDb)""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"k7LR[[ʕ+9p@7EDN[""'I`Z^2V=v]{{;vl6[7GDR9 ̴iX~=h#"'fnqe*ќpHf<)rq\M9 EDDD$&(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"Hp&?fݺuD"n$qqq|k_9n O-[wSD$ZD"0`@7GDQ< ZZZfL:n`k׮O?9 O|n>n`ӟXbh[#"r|)@Dvx)"rnf)IHL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"HDRDDDDb)""""1Q(@HL EDDD$& """"H9EQ p8>DDD$nHd޽:^/vFAff&Vk{x^vŮ]SRRBrr2fs~rٞP(D]]QPPlQ__"--(uuuTVVAp#"" zYz5_ٵk8ꪫ6lǹ,Z  СC馛q·~ȼy8q"]w G'i&z-VXAqq1<٬[a̚5Cq~(bǎ̟?%K0`Nƍw r9x ~!oYlYa@ ֭[)//rqwn^UU?Gjkkoݺ&~dӟM61|^/wq8k裏o>#"{eܸq\|ż/6lb0x`466RUUͼk̙3Z Fii)VuֱqF^~eF͵^f-[/K[x^}{9V\iSSSC}}=Wsv;0`mmm,[_|g|>&EDP3B$agÆ x<JKK9s&sN:vΝ;:u*a.\+Bmm-#G䮻kn׿ǔ/2}tٲe HhCmm-je˖/uVV+P8R^^n|~̙bᢋ.bΝ̙3?P(lVQ rF8x -bݺuv&N#<رcq]vQPp8سg:r}1{l+رcO>$+W/`ƌ߿߸immGyQFn:x<\po`III!P__d"==dvK/́tr+hll$>>he|Fټy3>~Çs-0nܸd2>SoN8fƌ\r%FxX,\ 27xN:::c|A Fmm-| q뭷FRRpNǏ`ҤI455|rIIIa֬Y<#\y$$$t:qݚ(""'z (++cӦM1eMfsXd 5553c 2338nРAưŋٿ%} W_MJJ s̡w9 gZbP(D07//D|>@_|DQJKK{TBw M&dTUtEDD^-#D΀ؽ{7-1btttvZRp477_c" V+Hyo~0fP-#=JQQ^x!~O?sxıHM6SYYɘ1c())!>>_͛712/MNNN^ǯ t@v@L>)""'~aȐ!L2/ /@YY ,Gono>-[㏳h"ہCs*_y^x2dq8==vٛp8l\+@B!{AMo4-""'3k_7nW_e<呝M}}=ׯgϞ=XVBq|,YJ ʢ;wRSSd{5x<>lTxw aw/q\G 6XGRDDN4H9#L&rss;hkkcܹS__͛q8=*KKK),,l6t:={6v_رr>H$b`FK^^q#F}vn:\.EVVdggowwIII"n.8"""Ǜ1B?$//aϞ==333ַѣy̚5L̙L}}=v"f͚7LvvqN~~>z+VbҤIGm[jj*7x#---L4 LNN7IHH`ĉGϴiغu+Ǐg驉IR(v#F0`nFjkkd2HZZhxbb"_|1cƌᡇDRRRHOO'!!б']n/cx0L$%%oYf]b0uTF>ꖋ"""/H9X,RRRHNNP(d|vrrry|T,dHI"ō\ԪZZZjAۺu{K ^ME@9U)xa2syx]>n۷⹫#Cn5VS<^DD仢)BU}.-""FK5EDDD$, """"H ERDDDD¢)""""aQ(@HX EDDD$, """"H ERDDDD¢)""""aQ(@HX EDDD$, """"H ERDDDD¢)""""aQ(@HX EDDD$,݀%?t7EDc6mt7CD;=p88N6nHqq1v?vZZZp:DFF戈|d}G?_5a$22qƑx""J4߹`0Hcc#uuu "BN'DEE| EDDD$,Z-""""aQ(@HX EDDD$, """"H ERDDDD¢)""""aQ(@HX EDDD$, """"nCxb֯_O0<f1 IDATԩ8o`˖-l߾0NwsD{bٰlӇo asZdddo0 MMM466`?::x<466܌pM\\'7K]]uuu|>n7ݺur4x<jjjhhhC||<` 466BJJ N\.`Z=z0|pƏOaa!IIIYklldӦMTWWSXXȭE]Dbbb!k2|VZEEEL43g2h ZZZ?>k׮[oeѝclݺg9&?2o<9++z?DzeXr%hԎ1p89s&O<@kj*Cjj*fܸq 6ݻyJߛCxb>f͚u9[pc\qƶmNwsRZZjp `L0Xn)[VVf?4l61|pcƌ3 i*,,4 0Q__o<F^:}bk\s5֭[@ Щ-Xjqyl6jdz֭[ f^0k^nxꩧ&#  yngZѣG4JJJIII=s̹_~2 a;v0S~vo󔎱0ni<#F 0gg?3?k f4&L`\hkk;w/ѳgOn@ @tt4ĘaZ+A||wMDD_ rB$''PQQAII ^Ñ>kRVV@~%&& 7_NDDmmm477B{{;111 0tp_~  Id? ..j.\wڵkY`s_͊+l :9s0qD>yWطov }O=v[n\wu̘1Xx {1˓O>Ib y饗x's+W^444uV6l؀f#;; p>YzjΝ˶m6lW]u/s&MD0sgJJ }%!!%\¨QfMtt4*f͢on阿aٳמ3g?Ox<;8pbZ[[}$$$2"".SZ  ٳgse理PXX͛7с墡;vPVVFnݘ6m\pVL~󟓝͒%K0`zyyfbcc5k]w)))\VVƼyXl6m"99HJJJ x=C\\ɓ'ihh %%]viB=MMM|<lذ:n &q:fd߾}1b}9?<^t٣Gرc%%%DFF3f+|^|El61s:iΝ|:tc2ydscQ$==d***СC' [l 83էOfkumhqtt4'N4 `֚E|>.f-vꫯfʔ)l67oڵl߾E]_nGƵ^ҥKꫯx뭷=z4{}8q"{/':b1륡%KSOyf ̙3K^\8 Cm;JS ٿ?p$$3SÆ cРAtttYr%9qqqL<:n(@Iѻwo***'=fpglмP@ `rl6:;&&KMM ?nĉу+t9`w*w8ѱ>ﮞkDDIkF޽+WRQQ 3f ^ rRgQUUEYY`CCQQ=ڜGx׳pB+:::̺ӦM#66u C!bxXbK.elܸK>}c!22R}]\.$$$)0 [ns9v;ڔ)SX`/F&MĠAN90 oٳ  :oS<3܎;Xp!6m@ @NNF"!!CLaa!QQQoӻwoRSSILL4TlUkk+Vbݺu$''sпSn| RRRݻ76V*++ikkr2nfoR{{;`@ C=d.8#=UC ^v0hkk~|fCJJ 8NV+qqq1Cki&ٳ'ݛ޽{KKKa:t(԰aÆNW^y)?6_NRRwSL2y^^/pd?lBwyOXĮV+ .`|ǔ5++^zMVVV|G2i$ƎeX rRn,.ݻǂ@f1!4vI{~?>SQQ!PSSÖ-[;2e \r #Fp0x`fΜn 6n:H@gĈ\xᅌ;J(wAAIII]'>>lCii)fS}ν!֯_СC< m6qqqĘݻw؅^@:bȝwI `ܹ-[`v F J!---|']TƍGaaaXmbW^ dgg(//7XVgȳ:D\RSS>}:.)999wh0 <cr Ǐ OII K.>'`ƍWs%>>S)++3;pEEElٲO?)anw"QQQXV::::>G/2}jkk9s&'N<'fL4^zaZq:ߟSnth79F?իٻw/S^^NQQ-b͚5sw0 n{Gmm-]vǏ׮3""gH9%'PYYinݺEſm/Jaaa1!Bn&zu$BMJJs5!Cxxw/Yp!Æ tv9r$#G0 ۩ xbvɦMhnnbvq' ~INN&;; EEE]&j.֭r W_O?&Nj)Cƍ[nZoqtlii9gv;ػw/+V3EEE|'L> ͬY/TƎK~~n~(@)IOO'//H*++^{_|All,W_}5s'Q dsE0 &СCywhlld:t,:GVVYYYDEE{nHHHEC;wL~~8?N5O$TO߿?&LvϲeΝK +4*svss)6OKK#--={R]]MQQTWWaĨQ3f)-""שi233|,]z*++yWy7ٳg)$@̈́#iZ,1tfo)--5&~4DFFү_?RSSinn؜M~W^y7n9dlZ_JQQ)2JZZ\s v999l߾s[o+g:ٰa7ov3=D___ʕ+/IKKSFRNY^(((zj^~eJKKflb 0P+`浶tBojjjb۶mgv;۶my/eÆ bX޽;s rm6dH0d,]v.rD߿OGGׯg˖-l6s-99iӦquבIqq1=}^@ `㎎3L=|> { 7<&85k0 v%KhkkcȐ!L0A""g a)ʢŋR;NMFkk+K,1#@^^1 >BC[5kAvttсn'..L: [v-,mmm|5j(NvKK .cXhiiaݺu8pt233իSNeݺu|?|lݺt|gx^ Ə~#6o[oE{{;ƍ /֤cRSf!//jbcc8qY{ܸqٳZHnݎJOO'22FVZuJx}7ߌa|,[7p8h&L5\CϞ=#{n_s5l6^z%sMSS>ʴiӘ>}zV+^{-<#x^/_G}Drr2Vj~?qqq5hsngBkeϞ=[| :-++3>UVѯ_?rss ^I~- N3gX`ׯg$&&R[[KMM ߟ뮻ÇSWWǚ5kضm=zK.o߾5 |Ζ-[9r$Ǐ7\~rJ~|͐!Cn7f͆rB==z4v1c0m4vEEElݺ8cرc 9r1QQQ=F裏(--󑐐@7n;dgg3c RRR_멭5K׌5ncv[op;m6^/}/?)䐛KBB}9YV1cKvv6444&&&˅fnp8pݤ͐!CwϠAذaC[Bm;f۶mÀ>|8'O#22ݻwW_˴iӘ4izED@#ܥE_!Cp}Alcȑ0㫯ÇӻwcBUuu5+VӉtjja'66$@y `׮]f|>~hlL޽%J8|F^^]jmmR***Gӳg^/͛7w^z\.̤/n3|p{ΖvI}}= 6ֆ40kDDőBll [~'ڵK/PG ܲe 8&fh>6Jnn)r:Ӽ+{L09s""g*?S#ëy ] f]!s fuy  g5ۉ8myf8pZZm|agվݡ.?BRDs\6#,ںC;ɶ5<5Q{s[p- 3@HX EDDD$, """"H ER{tt3is֭[ƍ~?hϴi_dժUփ"""?~<\s 444l2>3>jbHNNfРA?nw@ 믿ҥKٹs'\s5\r%|[ǠAǃftNy8;;tJKKٷoQFѫW/سgj^ӦM;&Dvttp7{ O_ qٲe5qN'^xyfx ΝKqq1^Zك1nnnf޼ygMRRlܸ8uxᇉb̘1TUU?{*W4 BGG_~e^xSKTTGfĉر߿??񏉉! vDDvp8p$&&h#--<.BnFŋݻ7,XW^yKVV ,_~DDDgر_ov:d^'".&MĮ]Xd n7\.3Zdggs% ٰa<-f̘<@޽ln3@~ 2e SN%##ݎbp1qD"""xר7HW f7 555ddd0}tbnA2****F<q?c̅)MMMʕ+ٺu+&L .nw:wZZ_=>֮]K   t:=z4>9Dzv233o~ã>J^^`ۍb`_|%%%dddpe)Ñ@̙3IOOg߾}lذ{ jkk?>;vt2j(zsb0NMM XVvx400 7`ॗ^2z뭝cHTT]t111ֲdLBDD=zp-Я_?}]wΥ^ʐ!Cp8x^:::pf9jjjx< :cB/޽{I r|رgy`0H~~1s@  Xx1p$PDDf;0-4xhoo'`xH߾}Yz5կػwo!pǎ]^;ܖ.]Jtt4g}vRCȮV`ÑrBCEzz:ntjÞ={X|93ggR<#G4WtERaP]]̓>Hcc#YYYu]'ܿ942 8$0Cؿۿ_nݺh"~R]]mr!zK}}=*uuu$''3eʔNR>]9:@ZNCÇ'77;wsNAtذauYDFFs7RRRBDDwI݈(@l2/^LTT'O0 @@ p6jkk8477@}}=uuu466f."lX,ZZZhkkt3f0c RSSyyG0~(--eΜ9֚&AjkkYp!O>$ncrܡ=] }ygSPPb_gf?!%KP__ϸqHKKH9)Mv3Bh/@dd$3GGGjpP[[LZZ6Fhhh@ @BBs9deeunllûVٳgSQQ… yGn ))Çs2o<{7||Knn.3gj U].#9:%%%1fKK~iwbb"7|3;w4w OLL첸(@aHnHZ[[; FGG3qD~_Itt4,_˗:G淿my"PO^MM K.'>>\.~_yf֮]kƢEg455aXHLL/7W:vw*M.\cۏYr5p!^x-Z޽{Kͥ7xbN'6?￟z={'RDD)g 0HKKpCi&>S&OLNN%%%aP q 9N'.@ @rr2ҽ{ JMMG?ロA1rHxw={6o&f-IEjj*?я3gyXH]]?xILL$55Nq ?>7o68 L4=zk`RRR0,""r< rFX,r=ŜS DGGaۗt֍ &P^^f#66㉊n&--\ @rr2\|зo.K2w\fϞͮ]سg&**'x#F`ۇb?ǝihGݻ3iҤ>\@CC={P||?h튒([3ۯ=Z[DDDD~X=7, 5ظUyK yqho*/'~/ u-0v?:g-v"' 6qғ- NR&O3f@p8صk>>>DEEEII 旖r (**vbbblL~֬YCNN#G4HRRΝʕ+ϑ#Gv'N$==Zv˗ikk#11+V`KDDě t=mMS4>ikA͉RBF#H1#.6?1cƐb 3gdƍ]'O fϟ@cc+eee8pB -[ؾ};ٮ9ׯ_'==m۶=|||t;w)Sݻihh >>Ef#**lܹÊ+g{EDD#7%GW _?:C7h(Qs9;;hשzYVZn23؜9s|dx0a>)))loo'++J}}k: @JJ lذb{Z\\(""zՕlm6PzwU=q ^gZ'&&ڼy+<$%%ʕ+9'+"""OGV wnS5&-'l+X?}~10n#kW VLF.<7gZٻw/iii 6u=Vx`瓖͛7 cʔ)deea6Y|9o&NN@ޗ… 9tsyn޼;v0}tL&/ݮ'"""aSCEbvuφ^zsW}^9Gە#cIo3W3ª@Ν;JBVV6oތF x0öD}Fl9X t&尵,D4f+lUD$~ ɈtSXP9&Nyd%xS($I8}4jjj`Z-0#dJKKQUUZ8z(JKKq~z2"Ǐ<bAkk+DҠdddcgϞŌ3(--Euu5DQҥKQ\\9 (yZqB7"2&3AS'H^"t!=nytСCAmmqF2TUUțaZrJXYYY~MF$IÇa2=b ÇQ__>}[yy9Ν;'Nʕ+zؼyiNbu?£܀ ?|qu|y=HL{Ðq<ē{;l6 Vضm,ܑFWb…0 8 h [U9~T6O/؍r.]իWQQQ*իWcŊaOꖖ455veLKLLDrrri4͛)#NdL0A(oo>cĉU}ikk7rʔ)g$KEdL,&>g#4~Sz&~[LitO`8 !~d [!BXD H!Ba) B!EB!R!BXE ț?%ϋƑO9???MV}~"##aر-j1 6s2zgϞ=|T!viii""Nך !o֪rJk@l\w+%۵6(TgwplfPTTľ}W^`0*bcc)**#-- '''ƌCvvv[&!""0 2k,)>|vuLY&t?"Q],ܺ%hx7oN8o]orf1B)SPZZJyy9 0خ$j1lׯgȐ!'$$0p@Z-aaa|O->>>,^1cưl2 [laСhZʕ+/{K/ꫯy4h~~~̘1+WX6%''0""">|8`cn&L̞=z o`)))̜9F8p ܹ^ GHHǏo4o^ݻw4;w>>>ܼyxooo._̎;Off&`00o<+N…oh*.ޒ%K0 ,YSB_M Ȟ3<]GQMwz/xqoq5NNP[kQs (醿RMM {EVVM ,;wrIM԰pB8g}F=̎շo_8q,^ӧO[sdd$׮]ܹsi&N<'|ٶm@^^6l7ŋdddPXX /Yx4 j5zGyy9r!úuغuپٳxnϞ=ΨQ())ATT hطowi*.B6) ^GYb9'G-HեsT]9iHHH 00޽{sQ֯_o\YZZJnn.+Vk׮( <==޽Mee%ӦMm۶-BL0ZR$$$AQXXhqnnnܾ}<<kkzsrr2dz}Y:Fa {a.\Mbf322^ǎ1bܸqÇ5nͥSNrHᓛhFݻe'mذI&`.dffe\P(>ʕ+ V&ΝK@@LhSq!% ];j7'5>~8xoiJ׹ mHdq{whs1?:֬Yի7nj*ɱcҡCOΆ ߿ѣ)((`ȑj<== ir-[elllpqqߟ?>}Э[74ijGGG9sLt:۷oG駟n:&NHyy9=AAA1^敜KO0`3gdĉ888зoz9stRFnjb:;h.tI<**kmq1|֬Ycmk׎730 ׬ a!^OhhhURRBxx8zFbcooT111k߿O`` 7o_~&cǎ1}t gT\k׮hBٳ-&[B&![YY+Vhⱶ///^~&?~cǎzj[fx%55HaSqv4|ߵK HcT*GEii)&;wF\K||zec2w!es<7Jγ՜_ɬfL5NȚw+l0z6]r[K[cuVO!"""]Dc0z8+n' Vu _Zo`FD~#c;2faXX,DFF2i$v Xp#?TVVbXuV111upT"""rM || 'AxwkWbYYhw]|\[cOKKѣݻ'2|***0$%%u{nt"""ҁ<ᗗx. sQ#V|Mp _^Ƨ͖ۢSn`0M=̤#G4)a[VVXAll,QQQL0/1ׯ_ϸq8qDoǏ'**1cưj*[Yv- 6T:|0?8?0qqq5&W^bqF&OL\\\|;v`ܸq9˗7IP˱X,N裏8ws%>>^z%HgU؃ZBu+.Gpu.s9>/Fn¿oD< nop8}<3g8FBCCiҿp C㱈&}[ jܻwo|իW6mZ1N^H'סO |%gJwg^/\9oz iتOq~_18<^C4Oyx2dj1y n7&|͉';;'x~/^$33 JJJ(--駟BB*+7*ۤln>}IO0ݩKݻShpzڵk^UPP@ii)ٳ?]b:x#xi|6*Y ?P}bȼ.Pw7εfYt)8?ΩS z|I/^Ljj*5_l4440x`muƻ=uT^{5N>a]svvv۾ ;7y.ȏGVaȽK D @܏,t""F ݹED~D D D@J)**t"Bt6&qJ""""%""""u;<IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-36-linux.png000066400000000000000000000047211466162644600304240ustar00rootroot00000000000000PNG  IHDR!nsRGB IDATxLx=ʜҩELǠԠFgLVkl32bE1iՒ*4W<-Ւ:mcPE޼֫%|}Ks\. {du""""ұ(@W}NSS[h4bX0LnEDDM nCDDM)@ޤ(E%y)@W EDDD+ """"p ?ɔ+ת>YW^%^}U l5b_""""6d@x?=Ɯ+|B.w h~5@^sUtd%\WDQwf6"Gy}- re@jjj<\N<\.N8o2Z\ڵ+Ə=ʰa<:F8}v{mxx8_7ҭ[7N'IIIXV.]1-? 8N*++֭ǎ'|i[ ~~T wq]w`~<>?]s .=Lߌ?q/b?{5ZqqUj"""عs'111͖SRRX`/۷z)..&$$H\.6l`0`4h'Oȑ#ƲsN.^ tRWWGhh(fTrssYh0c ZBCCk-"""ki >bAxhOwԣ?b0XO=<̙3ٰaC9/𖸸8VXڵkd2SOGDDnԨQ,Y , /nDfΜٳq:XVVXj%55]v1~x:w̋/Ș1c$//y1w\F##Gd-mZի"99[o1ff3Ǐgر9d⊈}3t=f˳4xn dժUdgg3i$~mHLL-ZDDDmUYSN.t^y~v{"""D#͍=g޵#$${2d۩ /0qD?NLL]km6H;S|-_-jeҥdeebiUV>FDDDڇoz<|r!q EDDD+ """"HM6{IDDvb_h㥇DDDxEDDDD+/IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-37-linux.png000066400000000000000000000110651466162644600304240ustar00rootroot00000000000000PNG  IHDR.sRGBIDATx{XT :"x~( AH A'SO5S'/#yX>AǼe&i!M@28q/{]koy]kQDDc1:H`1c-@2cN1cu 't} 2Ϭ͕+Wf!%%`1q;W^ży/ؼy3MD(B!CCa[:u c1=8|ʙ3g0uTXZZĞ={@D8w\Of{:cE@aժU êU0tPvvvAHH-Fe˖uyfL>ǏG`` ӅuaXt) pAX.^0HR;Y T www"##r2 III-f͂T*Ÿqp1 .`ҤIyܻwOw\.#o/7\\\zj< Q^yYJPSS!C 11ٳQZZ*|>?0zhlܸQ#w̙#̙3mؑta@*bɒ%xQma>}:BCC 6ϟ "00~!D@@\\\0qD\tI!!!JpssÔ)S4l̘1J[mɁ=***Dooo$''f~~>"""쌐Xx1nݪQ_&!-- Xb pĉfΆ\.T*/vލ@ZZd2v؁'˗/Zn5ncѯJt6M:*++7ߤYf &L *//'"ǏPvZrpp,""%GGG#"ׯӋ/HiiiV֭[I| eee}c/Qmm-Raaa}R*TQQA:REE]t\B*hܹG&RIK,!___j#777oHPǓRJ5kQuu5RTTі-[hB_}ݹsD޽j\mok\G u=PVیáHjEW H[oAWWÆ üypD"oѣq.1ƞ7:ua1*ƹW6 X8GSxӾ@}m5ă`7-ʭ'N)a_kdd(++Yu. ߿PZ[[4+oP(EEEu?J+++3 9sss:999/J"Bmm-T*tuuh&ݻ7$ƹ>}""hii u`ŸOFRR uuuи$o`` /ҚTZZcj&yO/?=D"lݺv]v!882e ͛KKKl߾+`oo @&W[ۤ:00k׮EFFwߵ| c޽ KKKD"᜕JJJsUUUcϛnK ["ցeT@[O߲}FͭQ{ ݆~ÜQrkdo+ۏİ^xHNNkr")j5JJJ`jj qVpg|AsNeZZO(< <b:;v,!q k氰7|byMM ƙĦ$ @TT---ݻ'N@P}3>m}411iM"7N8~:D033{ggoo;wYf@@@T*?~5io|;BOO= GGG888000Ǐ5ʟNΙ5{ +c]=M4Zz0r @<(nLBxٻ"'*(ufnX9SDXn; 6 ''JoƦMp XYY >|`ƍm6GEFF"99Zƭ[peipI8q* JRT}"77 7nģGPYY;vhԩСC!V'>CP`ݻ8uF]vJׯ+lmmQWW'O˸UUUKpwwGbb" D]ǰ0$'' 3fYYY͖|[r1\v ؿ?j3f`˖-ѣGQXXJ@$aֆ6p9<~066H$v6ߎ8y$ʕ+ceP*9s&cbԨQ066ٳqEa6..6l}ЫW/ٖ}?ǦMR i,aʔ)lkiiL6 FFFׯ4w؁+VW_E~0~Vg޸BJ^-gӥOwvTg૙jĤz?>Q  6)*ޖmֳ=-gӝh,/5皜>>kMR ^Ž1W] VG-K}UϤgR8,͛7O.K_zU7oVvvT]]=9N-ZHZv.\ RNN222ݻwq &jE8}̖DMJI͒O!s銍T,wwu?_fxGJ'Oŋ544$=l\\ tȑQͿ}***tyXB.Kgs6lؠSN:qjjjta-c {$ݩ>ӣ~M~EM1w[h@wޫB[lٳ%IϗQZZZDnnիW?U[[%iҥfL[nȌ~!o|wI)~$il57o[++dRpgh9wֽ{`p-==]jhh6}7nPooΝ;bߞ={tY(!!Aǎ.Tْ(%QAj~SYhfnf=ץ -+P,cS$j>QOLL .n9l۶MNS :wRRRh=E1oYk6j֚jR2|qH{>-ڴirsscǎZZJNNVGGJJJt0Z#뵺4྆ztܟXg2ڸh_6٫s*!e4UbCL:U6MӜ9F_MӮ]HBZZZQ2dҝxKGC4#Yו]GwmkRl%-\x%_G֯_rj:x/^݁ny>|ߟz-L7B$ ` #H!@Ff$@|'?ԝOڻI˪DS'I?µ\0pK /_ۚjxQ.[jqL )Rw><9oS=M Dl3jy5N<:9sFt9si&8qbZT\\,ϧ+Whݺux<^sN={V:}Z[[uq{Y;T+W&Vs e}eKHTR|itР 2v+//OWUU& x-RYY,Y2[lQyyrss%׫dMW^-өs*''G͛f@<%5okJMXZa%g=UE )vE? ۷|ZnnRRR!eqj2 tjhl6}G'$  U/I(!)egw$pS0{8wVGG._,ykVv qƟW;hް/pgKKݻw<<</@@Zj;~!á (RϟL5sJk8qU+V;$IYk5:>肢VXyWəjnwUoU?6&##Cjoo~a盾\ooTZZf]yL=U&,-|C6+kzGdKH03eP@;vPMM~B=+WNX,&˲422չ##,K>|.m߾]7oeY,KILэ7t9+ ի֚5k ^lX,&u}X}g.eL}4: ?(9kAzGQ;vLD"*..֡C*--Pƍ'> ={L~۷Oׯ_W$Qvv6l +57#Wx ` #H!@F0B$ ` #HךRUZIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-4-linux.png000066400000000000000000000047051466162644600303410ustar00rootroot00000000000000PNG  IHDR!nsRGB IDATx}lΝcNB/}QMA*ЈjBeRxQDkU%Ii(  A!** P cql_`JvWy~({NPEi2]M- DDDD $IDDDD0@* DDDD $IDDDD2]@Q~D"b1^$I˃F\<G @4,zF!1@ěh/ўڭ(SnsCOg$VJP(Q!B2|>8X,EA0D f$I$ "! td2M&c3R? \Ņ7߶h/۳=Yk6⟿~ u" !cΜ9wCݎ~P"BdYFYY]ffl6xDDDȾK؂O;MmZb*++VիWU{444ٳB8o(,**R"EdYZxÔ޿?z뭻oܸMMM)ODm/@)l_ Ks*$I•+W;vbIc=p(EEEljtt7n܀P: n~ir;?M6%b ]6-e JZ $`/_7ʝ FMRMς @$]v wŋjj*`0@e8udYj+G}~?VXhnnҥKԄ,\0#ǚ~?v.Yg ӌQmmb* GjlյAo$]Z-o;v f²e>Q6Ȫ)aFf _ÒA;Kٕ/{_}8>,݋H$m۶ 8r.]ӧOj" hhhg}v[1*++S }}}F4MٳUsH^R E3`5CѠ/^Tp\(..~`c~^,_(^S" /_"lU@_s K;w!~~7].m;y$t:v ^ݎ_~GP(˗/Ceb>\קTWOOϴ z^u;IPfC#8BFAiLlڭ8;FQ<14o<࣏>;׋Zᴎ׋ 6_"lU3w?Hdi^>( 4 0֯_χݻw˖-C}}=3X5QnnBKK {1?O=uRbhoom3ttt-%e { tr-¢W@ЩKG$U95\݋͛7d2_~%p9bܹ0LX,ɇ~? rss}ٳWƂ ~p](,,LG<WN>Y?E@x|IQbѢEʎ?r߇fÒ%K6F[[***'Q6H`,:_E ɓסu㶽Ow{ɇhfXڊfTWW#6l@UU<vڅׯCE̟??~QSS*>O<}v +ݎ.կ }mU^dEQwB$  /3\|jŋqXִq!lݺ5-eʐa0<8%H`hh>yyyE$AQb1b1A8NG""J H$  $c$ yyyiy^"H!rr %e( HIDDDD0@* DDDD $IDDDD0@* DDDDIIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-40-linux.png000066400000000000000000000032101466162644600304070ustar00rootroot00000000000000PNG  IHDRAfHsRGBBIDATxHwy,V-ŕx3ܡ"hmA1́%,7A±?F)k K7iJEu DAJ:4mI:/:L/|ߛ,˲Px/OFH! `FH! `1 .?O[ق,ڐkmzm ov #jW?k=~СCQyy e˖!_rE7nTmmdە^;D}Cm+pqK:.WQQ<%%%pHC*h͚5S|| ֦'&{LK˕ISG=!9ԢE5m4577sû<=fs mG͛3g>0>k֬cРC?x<*,,ԁGw _l$ݼtA~> #Ɲ999*--UzzݫKcǴm6hŊ Sfi`E7M1S/2?i.ZO[=kB!۷O}/_ݻw+::3338hr``ׅ`FH! `FH! `FH! `FH! `FH! `>Z~RRR`a8qBk׮Ujj.\,9s& +?6˲^Dxݭ;v}>~֪XOӪkx/`"Yr$ɓ#r}joo' E@>Wjݺu ZzRRR{Yc|BsUMMzzztQ9NEDj)'dt:t:uVk&FeYjmmev  t]AIR $EFF>t~yy^G˖- ۚϑ#GTTT4vK^̙3h~WW u5M>]n[eee# I # #$0B@ #$0B@ #$0/e|IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-41-linux.png000066400000000000000000000052351466162644600304210ustar00rootroot00000000000000PNG  IHDRaasRGB WIDATx}L)>Nwa:%'k>H+SLjM`50bAG&Mqr& %BSHEqʃpe}x?}sO8@@Mg{[H! `FH! `P{j<-=Uzo,QK ovN;\ɯk?vN5q&v$WSڿ!g hHbFgZQ#F^oϟ]s57`!@h}w\B~/nM?2Z;)Hm+//OӦMSRR/_qCi0am yz衇4~xy< |g,?ñ}MF>Ȅ|:_P짍wȑ#***ѣGե+WСCkڞI.\PNNʴm6;vLׯ= `A>(ƯmRxL‡nry3޶o>-]TcƌҺutq {G?Fa{ $(..N'NTff^Y ns NӟVX~]ۙ"Gncܯr4pWss4qcGVddv |kg,j@-;"90_5J|bMm/^$ 4~|MA SjE?5kےz3o܏/m_#zZ[[{?@ڵk^u;=`APrҵ/Φ޷i;[~Q-Q܌{uY/lp*IޮNLLUVVjʔ)Zk8ā-[護5j(s97P7u65zGw<:sI~FFo߮3griӦM1c[]]]NIRDDY!kƍ*--՞={N9۞2G pdFEҏ,SY|TwxΖQ?7Keѡ*66nށnݺ{^ 6¢u%}PUUEnK@_w #$0B@ #$0B@ #$0B@ #$0B@ #$0B@ #Unݪٳgkܸq:u/_:۳B^ PFFn>sBVvvnw]vٞ ori˖-zgTRRb{ZHۻwo{$eff*;;rX@(ȫL2En[C QBBT[[k{VHӎ;c{ $O=&>Ça|>uww瞳=)d=zgc{$wޑٳl2EFFڞ2>}Μ9b%%%ٞݫh͛7O焼sGU\\jjjmݺ4@p:r:WLLsX>}Z*..=Wx<9RNS/V[[,.y@@:wd'OTss$} =Zzy4`~SA|9P<ӧO륗^R}}}]^mdjiiԤyiݚ/grGKJKK+ŋӜ9sj*۳p$>0B@ #$0B@ #$0B@ #$0B@ #$0B@ #$0B@H6'N/ 9N͙3Ggɓ'|,,ɓ'dYF$u ˹:ueտC\FF~zSp%''kÆ zGl +zsjҤIJOO= JJJ|BySww>͛7룏>}ݧzJ 煼"+<<ByETT,X$9NXB:vy!RZp)@d/)P P~|l***ѨQlO" Xh8j]|Y۶m=-d|>(33pos,|>eeeҥK;vvܩxBVqqj{ FH! `FH! `FH! `俆Ү?hIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-42-linux.png000066400000000000000000000055121466162644600304200ustar00rootroot00000000000000PNG  IHDRS(V7csRGB IDATxkPT.4k0 HH//I\ԶL;&f2 δ3XTLڡqfc4P,Rd/[",99ya[d v `-.`L̔D'%%%%In;p6L!@$L!@$L^]r-w[Ǯ/ة[6hߦtZn'4v/^miP/6+f᷵goIOS;Vos$C̚~fݿ.[3V?Gt !8@}:I';=M?QT,V<o}UKHXR* Jl"g̒E]l u(,u|&L{FoֺokQSGJ}3_lS:]Ye*EFFn0rn뚛z?F:|]G1O>TZZ&]xQSNUFFyIRVV*++ѡW^yEQQ6LjH աW_g~%~~;[+ck|V$ۤ{d"fm߾]7oVhhmU__Jtj̙3u?\W? HLLTggT~~~ϟ\.zkkΜ9=9F$@F'/Q1C뾵뾵Ϗ#  WX!߯'OrϚ5K7nTDD-ݧF 60 m۶Ḿ6UUU6m֬Y#I2 Cڿ rժUZhw15}7PNNvm"##QgΜQeetA-[z%IM-GyMkkaٳgpOQp-<:C$TTTz566z8w-0^FM50nf"xeeerNѲQkk$)!!&VCCn tyGT]]VpWMMM3u?0 GXnn-MMMUhhZZZ ͦӧk7|8zHϟRuu`9r$&66Vڷot phܹ/cqT))).`Lr̔$4L!@$L!@$L!@$L!@$L!@$L!@[ KnwK,a.w`  ` h4%i1j)HB)HB)HB)HB)HB)Hb vw)<<|vwVmmmx ǣm۶I^{5EFF{,0~ GXyyꔝ=dU||$[ Zya 9 <vءAC+%%%*//WxxrssO>2If̘+W*66V^Wz{{Ok:pݫ)S(==]$Ik֬ŋG]WZY۷oׅ ѣڹs<.\yĉWWWObPN'|"ͦ7jJJJ %KpܮGo GwKU__-[LsҥKUQQ]v0 ^Z{$GՑ#G$I| 9J"""#>]]]*UUU8NKKӡCteEFF*55uE 9 Ę^%''+99ߵqaa._ &*..֪U$_cưk@x(5558O>DV{{ɓۃp%8p@_NҴl29[C{:::jw4ܦ-X@-RTTn&N(OeiҤIxI߭566… Zt0|Ag%]|d^S^^T^^[GYRRSS A|n͛7O]]]O5nȾ 7sHwBR \.tئkrug_7%7Ztö^r刊o4؃t:o>^PRR|M?Pݣ$^~eIRAA#L8qBmmm7[NӦB%&&F*//Wee$)99Y˗/9CeqW,Ks̱;29Lkz}][` #H@F(0B$࿼^kaN#(X<,k` #H@F(0B $P ` #H@F(0B $8,@Ȱ;0ED0t0,aF(0B $P ` #H]NNRRR3fhժU*++onnO<3f(==][lQOO $B"''G:zV\~Z_|$gյkTUUbiΝ6'EDH89N=ZUMMK9rD?<N< !~MF+W@"$TPPXn[W\VIX%lDllGIJKKU[[۷)11 $Urr.\m۶Ezוmw40HH ;vri…Zv233O @"sqǣ]v Sl $P ` #H@F(0ƒv,˲;kH #6P ` #H@F(0B $P ` #H@F(0BF˲09@,aF h`}Ϙ$IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-44-linux.png000066400000000000000000000151331466162644600304220ustar00rootroot00000000000000PNG  IHDR*[ysRGBIDATx{XUel (y4Q< gR34kOS֘~38>eUL8׃3azJMJRJ#""ACP? 4_Zw-60vkdnк ` ])K@+肖.TDDDK f%JNNn  uep˰ `ܔY/^;gJ/NQoV⋏in־nM4.ޝ4tISrbIRyNY r|utuy =5jJ_D]{6g2+_1}t 3nZj6oެ.Y,X@Zf~* @oFKuGIKKw}|fuQÆ S߾}[4IRFF>3o^+//שSkҥZp\\\ZڛwUXXv˗kѢE2YR 6ȭKwdRuq0ﺡO|tƚ裏>[oUV1r+V[h۶m=zeX-[xc~ѾL?~\-P٭׮];˄G-Ugt:fFY TVzݫϖcԜ+T噓TmڴIwfΜ^{M$[N| C)33S /ШͦSMMﯵkǧkp´zj(;;[<8 OOO꫚9s$iʕZrv[o)""B۷-ZK*%%E5kէO:j{#6MkfuM+WTn YMMk=Ztl ,o .(&&F2LԸqԾ}{mܸQ...*++fӅ K4k,I _~YVA-يQMMfC*>>^2L***r$)++K_~jkkKSL$+>>^ݻ&N(ɤ2}ץKLF&##C۷oWuuL&aDdZHK.s?~URRhd2{ѣ>LVU'NP5f%''kΝX,ѣ#WnRСCIf?;Y\Kb-=PU?et1E7ޠ(͞=[...zǴn:ǾK|&OJ^ylF,[LJOOWvv.\7|S~[ :}5o͛'___l6+--M'NO?jӦMZ jM>FᱲR_RӴiӴsNeffW߾}5`Qu+00PO?c{~~Νy)==]YYY>Lm۶?{NYYYڷo_sx>EFF꥗^҄ 矫B駟* @דO>hJHHЬY?Q/$I7ny=*((P\\9rDSN՘1cTVV[jʔ)7ou림Fu^I;- gvFK&|7}]=ȣw?UTEn֭,;vL9995\fϞwUɤnݺ$G5555|m۶MβX,5j222$I6lĉ ٬ZfΜ9D=s2L RvvqFM2FƌN:iΝ2L:uL&򔖖iӦI cǎm7nܨs: /]vl6YV9;;_ѣG5dG08yPPiJMMŋ%Iߨ,wޒi~]&$777uA*++Ӊ'4|pL&u]8pRSyŢ?ի${lVIIt)1:v쨗^zI;vTZZԮ];L&=CzGTQQ 6At1Iuߟ]vX///uq}۶mkL&纮!&t a;ONkV0nփM-KVgHTTΜ9;+..α]v}/51W_}UǏb? IRaaafVUVU999ޒF~KCoԶHSԱcG53??_;vlgv#sJUWW_r6x$Lj#mڴ$UUUGrvvVzz:tJG(\EEEQRRr]U_T7W[[k׮u쫭m4Z/%%E;vsssT˒,ggg{]7fkp?_Z۝v34jH$Yn](/Չd [@7C9JӐ_*_^wؾb ^4SNUdd>9997T||$SN:{myyԩS'Iٳg////5xT~]$ZRRE|̙x߂˧Mqe;wjՁcUTTÇm۶tݽnA~jdR*ooo4y󇻻{pTsgi2].##C;wԜ9sZ-^\sX^^ܹsjӦZuyayy㊊&G\]]` Zª|}ה0w,$B^y[&է~X7HI|w d;WffO!2..N|󍜜 ٬sСC0ainFM+n_V$77Wׯ׌3"333%I#Gȑ#Ϟ=+''+)섄ٳG6M}iuӧUSS;jȑիc;#I?~TTT^zI.hq 2yyyZnKh8p@dc{qM/d+Rѣ󓇇z^z)''GNfyxxT%%%m6ԩS'=>ިO[?1x5{QffrKzy8pNv=Cܹ$iذaJMM$EDDd+3f^_RR"Iڻw`_QQ#Fhݺx4x/QH}x<<>>?~>cm޼Y~~~ԨQw)##Cv]iuкAJbcc,6CE7.992N}?La$ !@$ !@$ !@$ !@$ !@$ tw.!@6.b  ` ` ` ` ` ` ` ` ƶt =nth=!#oIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-5-linux.png000066400000000000000000000054271466162644600303440ustar00rootroot00000000000000PNG  IHDR!nsRGB IDATxLww @-w<1fM[34z'zc.ȹs.s.LbF1W~Ux -a_I>y<I'""""Z HH""""Da$""""Q HH""""%x znl68 r9 o9 QQQH$~Mɸv@bvz.s[g?,zmxv NJOA@&AP@"tVzjaN"::37jڧѣmҎ@ʵ?Vz 뵐aZz漾ٳ?~k} *̙r"8(*J(Jh4477OCdgg'0{Al6{&""ZFmFȵӐVv tfMvYSFOOոUUUXx}uvvnC׏ F# |qR~x4Agg'Ai탾Ǐ=:b>K,Arr2Q[[Z=:֭[퓓3}]]O!"Zv9澾 ˶(qL';݇|]b@vg{Æ Pxwk&b̙3Ǽh4d2ARkv*XS(dAAoWW_}m۶a߾}Xh:BTUU!22r\u^gb ++ /ۇ˗{e2ٸ "( P%[_ y3WLQޱOU6\y-H J=555/_FPP/_bv… ۋpl޼< ~ml6de;\QQ4#//O=Ԥ|@f٠hDAyx4vM*ޅ:ZZ-V+w2<='N ++؊PYYO>獠 yϞ=8/$$d }.Xɿ܆N38ɿ-XTݍ\@QQ***PRR?vttt`ƌ(++CII رcHNNW4hllG (ziB0?J@ radd2466 fΜ{y\pXt)֭[!cŊmTTVVb͚5-++ݻ_~+Wi-DDP2H@X 3] [ ܭ,*@`}qFCߴi QRRLAPWW @Ay˽u֭G.<N޿Y \UA+]^=)p:uOdnn.`2PZZ Ʉv})pA{{;VZ5b 6 11x"vÁCD Ì3EG۷ގ_v!JՅ|XV(..ƬY&jeddx^CP`FXXؠ*jPXDllWTT?~^x[lǏ#77wuyyy 08s $M  uiqohX LX-QN+_#|+2'>}:>a۬]k׮EGGP\\3g⛄ܼyosL~8NT*QN'nw`p[$JR^;P$$$eBBBv O<\@]].]:d-[l6'OW~DD!BgDʯwt ֗>}{GTԴl2ݻoRf#;;_~%"""0g(JjEz6 ǓO>u]aܟ/l6w`w`, ]. ͛ɓxڵ W^ŹsP\\ xWfTWW#==FOOrss}Zٳ:hO###MMM~:ϟLK.x7}V ?MJٍ)As>mbhS`?NUHlËhS8~8***UV!;;mmmرcZZZ ɐr@JJ 򐝝~8p8r U7oDDD#wlVlNov+a2шgXWd8<Ne˖᭷ohhC<r…(--Ν;ֆsȑ#㾅}}}}8}4֯_?SNp\8pnܸ˅8'ۤ<ʐq`!M6{A ,,'O  Z=IDD#DC(QTPThmm2> #*‘0<X<Igvh4dH$p:p\Z>}} Z2ss[,FhܹsrrQQQc~ܡl6NgnB1:CDDDH""""Da$""""Q HH""""Da$""""Q H*8IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-6-linux.png000066400000000000000000000032031466162644600303330ustar00rootroot00000000000000PNG  IHDR!nsRGB=IDATx]hT$3`뢐uXATL0Z"t,^tZzҲPh" ]2^(1i@؋*C1P&-&YpY(b&&grzQݵ=!ə̙~.\۷oKB<nvF6]vjK_ޤXTi+vGiǚ?lkrr͛NIҽ{ta0 O0 \.uuui3fPZZ[Yٳg2MSzs)))rrHs˛g^j?[jSMásѣWk922Kʴh"544ڵk:y4CG===hTc3gE"{ã+gJ67}T4M :b֯_'N2 Cǎiϗ$=yDJMMU4թSF]njjjd$s΢"UVVKaBXlg***K`e ;Rn7J}T؇Ϫ),ߓ#۟*TYz|ܹsGYYݻW@@XLВ%KTWW3gJ8`0Z\.* kl۶M`Pxߘsj``@r:ڼy^W555ҥK|08L4s( iŖpL@*LW}}vG/dK%l$]~]###iw4`܅ aH$"ө˗JII|`ķzt1@b: @vaf ` $,%4i"IENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-7-linux.png000066400000000000000000000033511466162644600303400ustar00rootroot00000000000000PNG  IHDR!nsRGBIDATxL V;ɹWȂnt,n!d&my*FfU?0)D~$Sи.)S 2܌ Ls* av vu;ϗ;a"""""_RD)""""@)*""""b )""""XC@ K#.&&&DdH1ERDDDDL Il)ի2]?x8Lmr{V HG2)C7>}U~KuCOJѧuZhUUUTWW`'gAXmaw^gw֯>[_C׽PG%%%dff lڴ)$gKX޶'g"}5s\AJ9:\./_""" 9i+DtO~n&1~˦:iϾ}HOO'99+Wrʕx;v`QRR2d[;wdݺul޼L2228rȐyyyyFqq-q={!"""a, m|U9ի?%رcx^n7v7pRSSxap}|>6;w0}q>kQQQHJnx^ɡYfQ^^΄ صkaʢ"0c瓕d޼yaܰadffbZYz5. Lii) *"""c0 #!$=|d***HLLˈg2:;;Ba=V@Jhoo ݻq̜93DDD$H bV+sΥ!""2i [maKhh [Ddq)""""h [DDDDLH1ERDDDDLQST EDDDH1ߣ892qIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-8-linux.png000066400000000000000000000027651466162644600303510ustar00rootroot00000000000000PNG  IHDR!nsRGBIDATxLu IK0RnWF;粨̀斦#gaj&?Rlv. Z]"zI?$#l|}>߻݇kFQ#d7;F1fm8N#Q qG0 X!HB!HB! XǪJه:V>,[3qJ12>I4-~ ۿ=_g}G5>klS\S~ByV5Z@߽s@y<ęs|FѡfG5*_#P3g>6Q?FStثmkҺV\ӧ|>8퍼^rss{̚5K'#g;nr'{f/RO(F*Jo>yfE˥S088(ۭ˗ W Boj-!AW/G }9-}8D%%%)))I lϯ\;vH ,ڵk-I 7o$IHD.K{Q(֭[uyX'N$ڵK`0n?O}}.\gAM-y\jԾE1͎6mٲEPHGǕuihhHZz6nܨH$۷pRڹsUPP Ijll.v9555:.g%i+*4mE$ibKrLN5*pHبӧO+''GUUU:yJKK۫V%$$ܿ.7޽{UZZ:X _Ԅl] /1ЌP7rt9sl6***>n8an\ׯWeeRRRLJ>æe7gw]M#H371x_pwҍNCi>y<A%%%Ζ$l7OmmmJMMՌ3nqȘR c/OjOɱpf1KO?ܘ&ӵl2(==] r\ڼy,YZhӦMjiiQrrRSS߯M8qxn]]JJJ4wϐ`08\^rͤy䕷8UZTפW[uW}qJxٽ{j*vf^pX 6hʔ)ڶm$iΜ9rr:?%I yֳg*---s@lآ\8#'iv `w X2>> $ @ $ @ $ @/gv\H C(07FXIENDB`ipywidgets-8.1.5/ui-tests/tests/widgets.test.ts-snapshots/widgets-cell-9-linux.png000066400000000000000000000035041466162644600303420ustar00rootroot00000000000000PNG  IHDR!nsRGBIDATx}Lq<qJ 2d| =Yp&:|`jAg,DCKI1QL8Y*HԢ1E3;lDqc٭iK_ ovyN@DDDD Ãf"/ "Ü 1 -""""^Q@WT EDDD+*""""Wƅ\ϡ>]Ss/M|קkȷc|B"ys^_OLRᾧ_A3#c_cBޯ ?]ŕ.""""ߠ߷#m̚kWZ̒SKno!ncH@1?J!0ld֏po- pH/x'qcQ\ݒC󉋋uﴮf#55i{"11W||;y"5ߧp?Iw`0|r233jJKK ,[7odL&Ӏ줢 9'--m۶C`` /l6sҥ~L*""2<O +32I; yw|r=Fƾ0|˝Žч, cLjx朶6Xt)dee`跬.\ ** ;w`4"((?" k~)AA<ʯ~e/[k܈DLNs &p( .Kw‰aRTTDLL V+lܸ3g}vL&ׯ#Fnp0zhϺw&++I&4o]]~q:pN>1L?~Nrr;"""~)$̒?cie2.;/kCqq1Ό33gŴp֮]Kmm-[la޽L8l222p\Bii)>/#::JHIIav͛GGG>ﰊ}pl6222:Ȑ% c|DDDDdS@WT EDDD+*""""H xP/6DDD q񊶰EDDD+*""""J9sIENDB`ipywidgets-8.1.5/ui-tests/yarn.lock000066400000000000000000004530011466162644600173370ustar00rootroot00000000000000# This file is generated by running "yarn install" inside your project. # Manual changes might be lost - proceed with caution! __metadata: version: 6 cacheKey: 8 "@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.5.1": version: 6.8.0 resolution: "@codemirror/autocomplete@npm:6.8.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.6.0 "@lezer/common": ^1.0.0 peerDependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 checksum: b251a21065a954be7a4a9cf6fd1dce6027bd79ac7006728c0fde364b50c75ee4079bd53acf9890fdfdca78453c863f0c010010c26010cd9acdede3480273ad23 languageName: node linkType: hard "@codemirror/commands@npm:^6.2.3": version: 6.2.4 resolution: "@codemirror/commands@npm:6.2.4" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 checksum: 468895fa19ff0554181b698c81f850820de5c0289cab92c44392fb127286f09ca72b921d6ea4353b70b616a4fd0c3667d86b6f917202a3ad2e196eb7b581f7b6 languageName: node linkType: hard "@codemirror/lang-cpp@npm:^6.0.2": version: 6.0.2 resolution: "@codemirror/lang-cpp@npm:6.0.2" dependencies: "@codemirror/language": ^6.0.0 "@lezer/cpp": ^1.0.0 checksum: bb9eba482cca80037ce30c7b193cf45eff19ccbb773764fddf2071756468ecc25aa53c777c943635054f89095b0247b9b50c339e107e41e68d34d12a7295f9a9 languageName: node linkType: hard "@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.1.1": version: 6.2.0 resolution: "@codemirror/lang-css@npm:6.2.0" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@lezer/common": ^1.0.2 "@lezer/css": ^1.0.0 checksum: d824f169083613b63f04992c24d3fecd45c718cd3deb9da3f332dd3a889a762d05ea812e31ddf7ee4b661722f8c8b49676515cb98609067c53e25ac8b469a5e4 languageName: node linkType: hard "@codemirror/lang-html@npm:^6.0.0, @codemirror/lang-html@npm:^6.4.3": version: 6.4.4 resolution: "@codemirror/lang-html@npm:6.4.4" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/lang-css": ^6.0.0 "@codemirror/lang-javascript": ^6.0.0 "@codemirror/language": ^6.4.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.2.2 "@lezer/common": ^1.0.0 "@lezer/css": ^1.1.0 "@lezer/html": ^1.3.0 checksum: 99693fee5392c85b0974c4cfd015aa9ba6e015baf8abbddfbb1f5f8c4801e78c3d053d8b19e1dafe3d913b2902e97ed6c95d8a237cd496e8fbcc1548cebe6485 languageName: node linkType: hard "@codemirror/lang-java@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-java@npm:6.0.1" dependencies: "@codemirror/language": ^6.0.0 "@lezer/java": ^1.0.0 checksum: 4679104683cbffcd224ac04c7e5d144b787494697b26470b07017259035b7bb3fa62609d9a61bfbc566f1756d9f972f9f26d96a3c1362dd48881c1172f9a914d languageName: node linkType: hard "@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.1.7": version: 6.1.9 resolution: "@codemirror/lang-javascript@npm:6.1.9" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.6.0 "@codemirror/lint": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 "@lezer/javascript": ^1.0.0 checksum: 6c79b51c61d37b3f4dde6312df02183045c31f055e5cf8550b497f39798b823b4e380a641a2cfc97f3f26fd4e89194258d8ef741c42acd72b3f2e18257b427a5 languageName: node linkType: hard "@codemirror/lang-json@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-json@npm:6.0.1" dependencies: "@codemirror/language": ^6.0.0 "@lezer/json": ^1.0.0 checksum: e9e87d50ff7b81bd56a6ab50740b1dd54e9a93f1be585e1d59d0642e2148842ea1528ac7b7221eb4ddc7fe84bbc28065144cc3ab86f6e06c6aeb2d4b4e62acf1 languageName: node linkType: hard "@codemirror/lang-markdown@npm:^6.1.1": version: 6.1.1 resolution: "@codemirror/lang-markdown@npm:6.1.1" dependencies: "@codemirror/lang-html": ^6.0.0 "@codemirror/language": ^6.3.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 "@lezer/markdown": ^1.0.0 checksum: db891dad10a8ea8db17d0a9222774389794cb0957b784e3f154bf27ab4a9be89a28ad4c2f6abf7d829115c3ce46694a2816b61723a5d5776c1d75d566ce016c8 languageName: node linkType: hard "@codemirror/lang-php@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-php@npm:6.0.1" dependencies: "@codemirror/lang-html": ^6.0.0 "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@lezer/common": ^1.0.0 "@lezer/php": ^1.0.0 checksum: c003a29a426486453fdfddbf7302982fa2aa7f059bf6f1ce4cbf08341b0162eee5e2f50e0d71c418dcd358491631780156d846fe352754d042576172c5d86721 languageName: node linkType: hard "@codemirror/lang-python@npm:^6.1.2": version: 6.1.3 resolution: "@codemirror/lang-python@npm:6.1.3" dependencies: "@codemirror/autocomplete": ^6.3.2 "@codemirror/language": ^6.8.0 "@lezer/python": ^1.1.4 checksum: 65a0276a4503e4e3b70dd28d1c93ef472632b6d2c4bf3ae92d305d14ee8cf60b0bbbf62d5ceb51294de9598d9e2d42eafcde26f317ee7b90d0a11dfa863c1d1a languageName: node linkType: hard "@codemirror/lang-rust@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-rust@npm:6.0.1" dependencies: "@codemirror/language": ^6.0.0 "@lezer/rust": ^1.0.0 checksum: 8a439944cb22159b0b3465ca4fa4294c69843219d5d30e278ae6df8e48f30a7a9256129723c025ec9b5e694d31a3560fb004300b125ffcd81c22d13825845170 languageName: node linkType: hard "@codemirror/lang-sql@npm:^6.4.1": version: 6.5.0 resolution: "@codemirror/lang-sql@npm:6.5.0" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 5bc73293d85f3892633703f277787336c00135011b14ca34a3590975a02c5ec1d6826d201d827e3dfc1d3427e28d23f36b1ef4fd69fc5d79c98290030c11dad5 languageName: node linkType: hard "@codemirror/lang-wast@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-wast@npm:6.0.1" dependencies: "@codemirror/language": ^6.0.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 600d98d3ea6a4e99292244ed707e39a2abd9f3abf62cfeff5c819a0cc0c7e86b8c5b91e91c1b7ea21233d9ea09c41abe61d8a40b2547bb5db74239c6df857934 languageName: node linkType: hard "@codemirror/lang-xml@npm:^6.0.2": version: 6.0.2 resolution: "@codemirror/lang-xml@npm:6.0.2" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.4.0 "@codemirror/state": ^6.0.0 "@lezer/common": ^1.0.0 "@lezer/xml": ^1.0.0 checksum: e156ecafaa87e9b6ef4ab6812ccd00d8f3c6cb81f232837636b36336d80513b61936dfee6f4f6800574f236208b61e95a2abcb997cdcd7366585a6b796e0e13b languageName: node linkType: hard "@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0": version: 6.8.0 resolution: "@codemirror/language@npm:6.8.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 style-mod: ^4.0.0 checksum: 64408d996641931fa4c6b892e17ee1fdaee0f63d3d84c019a6ea7b1e6d1c774f92357b95c2ebaed60545062b795b72d0a058c03578b2bf4023c87726e97b5d2f languageName: node linkType: hard "@codemirror/legacy-modes@npm:^6.3.2": version: 6.3.2 resolution: "@codemirror/legacy-modes@npm:6.3.2" dependencies: "@codemirror/language": ^6.0.0 checksum: fa5f5477fb9e19267251e2ecd3de8c1a4c2512813555bb60111dce3951f2c3f6080a2985a573b7542534ba1d2c34115f7e39ee23fdf8f6f81db6f8ce447c1efc languageName: node linkType: hard "@codemirror/lint@npm:^6.0.0": version: 6.2.2 resolution: "@codemirror/lint@npm:6.2.2" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 checksum: f37dea6f84b5ee74e4e77c0ad244a3e0c10beb26542c5e10b2d5655f1fab3a9e580da2d772f2a6e3b09eb944ef8a52ff4e1b61cb8a02ee78e97f2ae8ae13842a languageName: node linkType: hard "@codemirror/search@npm:^6.3.0": version: 6.5.0 resolution: "@codemirror/search@npm:6.5.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 checksum: 2e9f2344b7dbd4bad79058c105d8cbd02b2bf94c27495310f0e3b6e999010aa080dceea47ef46e35439cc9e131b47c46f7d2eda700ef491b5f2f34bbc8e145ab languageName: node linkType: hard "@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.4, @codemirror/state@npm:^6.2.0": version: 6.2.1 resolution: "@codemirror/state@npm:6.2.1" checksum: d12a321d0471b264b9d3259042bff913a8b939e8d28d408ff452004538a71ca9d5329df3f8a1d8a9183f5b42a7ef5b200737bcab1065714f5ae8e0a5ba9d59d3 languageName: node linkType: hard "@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.2.2, @codemirror/view@npm:^6.6.0, @codemirror/view@npm:^6.9.6": version: 6.13.2 resolution: "@codemirror/view@npm:6.13.2" dependencies: "@codemirror/state": ^6.1.4 style-mod: ^4.0.0 w3c-keyname: ^2.2.4 checksum: db0d638fbbe2f9a832674f06512ca55cdb7576a265c01ab8a7b6715d2a50ddf53200f597637b146adebe1df51255fe5bd2d2c74cf1fa539b0434764c0550d3a5 languageName: node linkType: hard "@fortawesome/fontawesome-free@npm:^5.12.0": version: 5.15.4 resolution: "@fortawesome/fontawesome-free@npm:5.15.4" checksum: 32281c3df4075290d9a96dfc22f72fadb3da7055d4117e48d34046b8c98032a55fa260ae351b0af5d6f6fb57a2f5d79a4abe52af456da35195f7cb7dda27b4a2 languageName: node linkType: hard "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" dependencies: string-width: ^5.1.2 string-width-cjs: "npm:string-width@^4.2.0" strip-ansi: ^7.0.1 strip-ansi-cjs: "npm:strip-ansi@^6.0.1" wrap-ansi: ^8.1.0 wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb languageName: node linkType: hard "@jupyter-widgets/ui-tests@workspace:.": version: 0.0.0-use.local resolution: "@jupyter-widgets/ui-tests@workspace:." dependencies: "@jupyterlab/galata": ^5.0.1 "@playwright/test": ^1.32.0 yarn-deduplicate: ^6.0.1 languageName: unknown linkType: soft "@jupyter/ydoc@npm:^1.0.2": version: 1.0.2 resolution: "@jupyter/ydoc@npm:1.0.2" dependencies: "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0 "@lumino/coreutils": ^1.11.0 || ^2.0.0 "@lumino/disposable": ^1.10.0 || ^2.0.0 "@lumino/signaling": ^1.10.0 || ^2.0.0 y-protocols: ^1.0.5 yjs: ^13.5.40 checksum: 739f9630940466b3cfcd7b742dd06479f81772ca13f863d057af0bbb5e318829506969066ab72977e7c721644982b5c8f88cf44e1ae81955ed1c27e87632d1f2 languageName: node linkType: hard "@jupyterlab/application@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/application@npm:4.0.2" dependencies: "@fortawesome/fontawesome-free": ^5.12.0 "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/docregistry": ^4.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/rendermime-interfaces": ^3.8.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/statedb": ^4.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/application": ^2.1.1 "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/polling": ^2.1.1 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 checksum: 5709b59c794e481d6e9b6c5575042c569f38058b6fc2a2c1d2831bdd0d1b0ff4df60c17132753ed8d9be1e2a28e4a0a18310d2b80e8ff5812fdaccbb1ee18bce languageName: node linkType: hard "@jupyterlab/apputils@npm:^4.1.2": version: 4.1.2 resolution: "@jupyterlab/apputils@npm:4.1.2" dependencies: "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime-interfaces": ^3.8.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/settingregistry": ^4.0.2 "@jupyterlab/statedb": ^4.0.2 "@jupyterlab/statusbar": ^4.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/domutils": ^2.0.0 "@lumino/messaging": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/virtualdom": ^2.0.0 "@lumino/widgets": ^2.1.1 "@types/react": ^18.0.26 react: ^18.2.0 sanitize-html: ~2.7.3 checksum: 89a445478b54d1132e753022a81393dd3e53f7f36de2d9e905ece3bae911382ddff6afc16c4b649646b1a125c774ccc83fa4d92e29a48a423d4410a4a5554bb4 languageName: node linkType: hard "@jupyterlab/attachments@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/attachments@npm:4.0.2" dependencies: "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/rendermime-interfaces": ^3.8.2 "@lumino/disposable": ^2.1.1 "@lumino/signaling": ^2.1.1 checksum: 178d6abf3ff0767d87f78a79470760cf0025c3171e65dfd9a07916f3f6322f1080a21985ccdfdfeeec6fb73fb9aac9179cc413c43e4e33a45bcbcefa6cb97714 languageName: node linkType: hard "@jupyterlab/cells@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/cells@npm:4.0.2" dependencies: "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.9.6 "@jupyter/ydoc": ^1.0.2 "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/attachments": ^4.0.2 "@jupyterlab/codeeditor": ^4.0.2 "@jupyterlab/codemirror": ^4.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/documentsearch": ^4.0.2 "@jupyterlab/filebrowser": ^4.0.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/outputarea": ^4.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/toc": ^6.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/domutils": ^2.0.0 "@lumino/dragdrop": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/polling": ^2.1.1 "@lumino/signaling": ^2.1.1 "@lumino/virtualdom": ^2.0.0 "@lumino/widgets": ^2.1.1 react: ^18.2.0 checksum: 92aa9ced743b41fbe5c0d3700762e3f825c9b01fb9b5684c909de330a62561a7b05af27390ca5993f905ec7141fa01072446b51232a8616181dd4eaed178b77f languageName: node linkType: hard "@jupyterlab/codeeditor@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/codeeditor@npm:4.0.2" dependencies: "@codemirror/state": ^6.2.0 "@jupyter/ydoc": ^1.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/statusbar": ^4.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/dragdrop": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 react: ^18.2.0 checksum: 61b638011acd21195fcd53b3b1f1df54abef0e0db85937f41f3a323cc6df75bcd63261739518bfd82b6bf45f638a090687cb43c2b66880546cff3e962d2e5994 languageName: node linkType: hard "@jupyterlab/codemirror@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/codemirror@npm:4.0.2" dependencies: "@codemirror/autocomplete": ^6.5.1 "@codemirror/commands": ^6.2.3 "@codemirror/lang-cpp": ^6.0.2 "@codemirror/lang-css": ^6.1.1 "@codemirror/lang-html": ^6.4.3 "@codemirror/lang-java": ^6.0.1 "@codemirror/lang-javascript": ^6.1.7 "@codemirror/lang-json": ^6.0.1 "@codemirror/lang-markdown": ^6.1.1 "@codemirror/lang-php": ^6.0.1 "@codemirror/lang-python": ^6.1.2 "@codemirror/lang-rust": ^6.0.1 "@codemirror/lang-sql": ^6.4.1 "@codemirror/lang-wast": ^6.0.1 "@codemirror/lang-xml": ^6.0.2 "@codemirror/language": ^6.6.0 "@codemirror/legacy-modes": ^6.3.2 "@codemirror/search": ^6.3.0 "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.9.6 "@jupyter/ydoc": ^1.0.2 "@jupyterlab/codeeditor": ^4.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/documentsearch": ^4.0.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/translation": ^4.0.2 "@lezer/common": ^1.0.2 "@lezer/generator": ^1.2.2 "@lezer/highlight": ^1.1.4 "@lezer/markdown": ^1.0.2 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/signaling": ^2.1.1 yjs: ^13.5.40 checksum: 1ddf08979874fc522eb88de6a743129640c5721410a8c6feb58d2e37b35ebcdeee5c217890e7f9561a595ca8b1c9b4a222b07da5e2e95c1e2dcd8c467378c50d languageName: node linkType: hard "@jupyterlab/console@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/console@npm:4.0.2" dependencies: "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.9.6 "@jupyter/ydoc": ^1.0.2 "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/cells": ^4.0.2 "@jupyterlab/codeeditor": ^4.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/dragdrop": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 checksum: 4a7a4a8a06663902840c4216b257e380105366c7808f5f4ba891d45fb60b4f7605c455d2d0290dcc576dcc4c833a00d140c71604ecbeab3f2054c460fd6bbc79 languageName: node linkType: hard "@jupyterlab/coreutils@npm:^6.0.2": version: 6.0.2 resolution: "@jupyterlab/coreutils@npm:6.0.2" dependencies: "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/signaling": ^2.1.1 minimist: ~1.2.0 path-browserify: ^1.0.0 url-parse: ~1.5.4 checksum: c2e9b9bf7227f68bb6b91044d2ac3808a872ac967e22f6aee10241d5dbc78a19deee65f91dd87c080f63170a760c96c99cb31e0e0b6f32c6341e432d781355ce languageName: node linkType: hard "@jupyterlab/debugger@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/debugger@npm:4.0.2" dependencies: "@codemirror/state": ^6.2.0 "@codemirror/view": ^6.9.6 "@jupyter/ydoc": ^1.0.2 "@jupyterlab/application": ^4.0.2 "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/cells": ^4.0.2 "@jupyterlab/codeeditor": ^4.0.2 "@jupyterlab/codemirror": ^4.0.2 "@jupyterlab/console": ^4.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/docregistry": ^4.0.2 "@jupyterlab/fileeditor": ^4.0.2 "@jupyterlab/notebook": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/datagrid": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/polling": ^2.1.1 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 "@vscode/debugprotocol": ^1.51.0 react: ^18.2.0 checksum: 5217fdca41a58397d97c6ca634f0e51f1f102e713c685748aaf04ab01b3e386d26d03881e27c5df66b422d7288a3b276008c59e056c1c068bf2629395887c251 languageName: node linkType: hard "@jupyterlab/docmanager@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/docmanager@npm:4.0.2" dependencies: "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/docregistry": ^4.0.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/statusbar": ^4.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 react: ^18.2.0 checksum: dca1f56209608a82eebb0a365657f955bc8c546d66e00ec7747e753e3c76c8c0a5ed24b51736d157d2ed9d8264dc69545221e8fc2aa6af3eb6ec7eb4fd537a69 languageName: node linkType: hard "@jupyterlab/docregistry@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/docregistry@npm:4.0.2" dependencies: "@jupyter/ydoc": ^1.0.2 "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/codeeditor": ^4.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/rendermime-interfaces": ^3.8.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 checksum: b88c6a6ab7825aff95541c8a9f4381ccee4533e8c5bda588538c8a110dd8c6cb413e73345bc8fbf74aebe9fed4f9d298de6efa08378212869510e81ccb9f10ca languageName: node linkType: hard "@jupyterlab/documentsearch@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/documentsearch@npm:4.0.2" dependencies: "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/polling": ^2.1.1 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 react: ^18.2.0 checksum: d621722648f8d0e9c17c4df093bf02de0b3c5c1e8cb4b4b46482114700c4ca47dbb35831d2f046b0a28c950c6cd7442cdd791357af87d6e4df5da3b347d463e0 languageName: node linkType: hard "@jupyterlab/filebrowser@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/filebrowser@npm:4.0.2" dependencies: "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/docmanager": ^4.0.2 "@jupyterlab/docregistry": ^4.0.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/statedb": ^4.0.2 "@jupyterlab/statusbar": ^4.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/domutils": ^2.0.0 "@lumino/dragdrop": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/polling": ^2.1.1 "@lumino/signaling": ^2.1.1 "@lumino/virtualdom": ^2.0.0 "@lumino/widgets": ^2.1.1 react: ^18.2.0 checksum: ae5426f6811488cb90538f8ec74fa87d4ead847a2727ba64d35b4b2d81e6058bc6340853affedb2e4e7362627453b8dd1e108142a425bc039745714058ce5d73 languageName: node linkType: hard "@jupyterlab/fileeditor@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/fileeditor@npm:4.0.2" dependencies: "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/codeeditor": ^4.0.2 "@jupyterlab/codemirror": ^4.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/docregistry": ^4.0.2 "@jupyterlab/documentsearch": ^4.0.2 "@jupyterlab/lsp": ^4.0.2 "@jupyterlab/statusbar": ^4.0.2 "@jupyterlab/toc": ^6.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/widgets": ^2.1.1 react: ^18.2.0 regexp-match-indices: ^1.0.2 checksum: a83615c1094a143eb58701ba1f90f180d0e373d36db6d4aabebb73b26da7efaa47fd1946541cc529672b9042c66df1b2f23894267fe4afb5712a97cad42e471e languageName: node linkType: hard "@jupyterlab/galata@npm:^5.0.1": version: 5.0.2 resolution: "@jupyterlab/galata@npm:5.0.2" dependencies: "@jupyterlab/application": ^4.0.2 "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/debugger": ^4.0.2 "@jupyterlab/docmanager": ^4.0.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/notebook": ^4.0.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/settingregistry": ^4.0.2 "@lumino/coreutils": ^2.1.1 "@playwright/test": ^1.32.2 "@stdlib/stats": ~0.0.13 fs-extra: ^10.1.0 json5: ^2.2.3 path: ~0.12.7 systeminformation: ^5.8.6 vega: ^5.20.0 vega-lite: ^5.6.1 vega-statistics: ^1.7.9 checksum: 175538962b02780fb3ce9ac0dc8ccb3f977f936ad18af1129272ddab0594eac0e8b1d911b3b902f18b0ab832dae689dea0eda51a202403507fef72df4d6fdaa8 languageName: node linkType: hard "@jupyterlab/lsp@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/lsp@npm:4.0.2" dependencies: "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/codeeditor": ^4.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/docregistry": ^4.0.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/translation": ^4.0.2 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/signaling": ^2.1.1 lodash.mergewith: ^4.6.1 vscode-jsonrpc: ^6.0.0 vscode-languageserver-protocol: ^3.17.0 vscode-ws-jsonrpc: ~1.0.2 checksum: 476517f4cd9ce7758638f96c1037f26d758ec8e102d87b9472cbaa6208d94bcfc1da0ec853202761f6542404a034932657b14f82e2355d312b3f0c5c140cfbfd languageName: node linkType: hard "@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/nbformat@npm:4.0.2" dependencies: "@lumino/coreutils": ^2.1.1 checksum: cccd1c7fd8717ccece1f7642f3f7218103c3baa479fce85666770719b3359116e5279cdd97e2b584122a793b437fc9ece7055d1da27ad35a090f90398a76d59f languageName: node linkType: hard "@jupyterlab/notebook@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/notebook@npm:4.0.2" dependencies: "@jupyter/ydoc": ^1.0.2 "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/cells": ^4.0.2 "@jupyterlab/codeeditor": ^4.0.2 "@jupyterlab/codemirror": ^4.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/docregistry": ^4.0.2 "@jupyterlab/documentsearch": ^4.0.2 "@jupyterlab/lsp": ^4.0.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/settingregistry": ^4.0.2 "@jupyterlab/statusbar": ^4.0.2 "@jupyterlab/toc": ^6.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/domutils": ^2.0.0 "@lumino/dragdrop": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/virtualdom": ^2.0.0 "@lumino/widgets": ^2.1.1 react: ^18.2.0 checksum: 053cde5377aceac7ff6fe30e734354df1839cbf84bfd19f7d3992a1aaddcd66f5c8470bb2537c94b28dfdb194dfdacfaa38207fd2d4989b0575b27c20396bbfe languageName: node linkType: hard "@jupyterlab/observables@npm:^5.0.2": version: 5.0.2 resolution: "@jupyterlab/observables@npm:5.0.2" dependencies: "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/signaling": ^2.1.1 checksum: 6d206873f3e2bfd95267fde6fae565eef5c1f7df93dc0a27091ea3eceea5cbded6c8b90eb5d4311e3b6158385455ed358602cb4b3daee717f6cc195b259cfb24 languageName: node linkType: hard "@jupyterlab/outputarea@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/outputarea@npm:4.0.2" dependencies: "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/rendermime-interfaces": ^3.8.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/translation": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 checksum: 8387b93e7b6bf1a63495eef8a7746870e4210818ff26af5c8ecdf4b9e78433ec47b58ddaa5ab11fbf5cf143802b23a186c90589974cd408cae95330fa3960f32 languageName: node linkType: hard "@jupyterlab/rendermime-interfaces@npm:^3.8.2": version: 3.8.2 resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.2" dependencies: "@lumino/coreutils": ^1.11.0 || ^2.1.1 "@lumino/widgets": ^1.37.2 || ^2.1.1 checksum: e1164a4ad7654e5e8af0c1c2f1c8938f01a4bd07e04ff788e8b3adfaa9cb7ef07118c44513648c69263929e1658f02dcbab7aac776c6071228b0b80c8ca4e65a languageName: node linkType: hard "@jupyterlab/rendermime@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/rendermime@npm:4.0.2" dependencies: "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime-interfaces": ^3.8.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/translation": ^4.0.2 "@lumino/coreutils": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 lodash.escape: ^4.0.1 checksum: 6118adf39cfe3c5918c9b677ff5d8dbe97ce469427f9969e1d16fba944b53d6e6c9d2c1e2deaaf928cdb94222a8941c7bb7cfc81693683fd07c08e92bc3d6cea languageName: node linkType: hard "@jupyterlab/services@npm:^7.0.2": version: 7.0.2 resolution: "@jupyterlab/services@npm:7.0.2" dependencies: "@jupyter/ydoc": ^1.0.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/settingregistry": ^4.0.2 "@jupyterlab/statedb": ^4.0.2 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/polling": ^2.1.1 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 ws: ^8.11.0 checksum: 4a4b5328f2f50ec1d501f67d63fbfb329f37a6c090227e0aecdbbb7316d9df0e5891af47cb948958e9307a0afc52f0ddf05c2be7acb9e2f44e54cf568dc3b90c languageName: node linkType: hard "@jupyterlab/settingregistry@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/settingregistry@npm:4.0.2" dependencies: "@jupyterlab/nbformat": ^4.0.2 "@jupyterlab/statedb": ^4.0.2 "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/signaling": ^2.1.1 "@rjsf/utils": ^5.1.0 ajv: ^8.12.0 json5: ^2.2.3 peerDependencies: react: ">=16" checksum: c2e019f70a4f19cf99bc2029c136197f2a750f319e16f8605a6f8d690b6930ac32e24678b090a09f9e949e540cf6b4214d3d3597ec119bd6896db3b456ac6299 languageName: node linkType: hard "@jupyterlab/statedb@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/statedb@npm:4.0.2" dependencies: "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 checksum: 88fc80914f4c128ae6b0630ffe97111cc95a8edc4f34e749615aa8396262d74efcc82e02d0c7c2dcd0268b7cc35a0bfbd7455a4b6cb9203bcad488e1cbad5c25 languageName: node linkType: hard "@jupyterlab/statusbar@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/statusbar@npm:4.0.2" dependencies: "@jupyterlab/ui-components": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 react: ^18.2.0 checksum: d792eb8fca00ac5ec7d5abcb3694db5c80706ec468aa4a9bef543f02a788d80ca2a9b81def0a846da14aed22dbd4ceffe0c95c0047c5025c2e5d69fc55f739b9 languageName: node linkType: hard "@jupyterlab/toc@npm:^6.0.2": version: 6.0.2 resolution: "@jupyterlab/toc@npm:6.0.2" dependencies: "@jupyterlab/apputils": ^4.1.2 "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/docregistry": ^4.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime": ^4.0.2 "@jupyterlab/translation": ^4.0.2 "@jupyterlab/ui-components": ^4.0.2 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 react: ^18.2.0 checksum: de36885b17d7fa067a89f84cbdeb48ecc7c90acd6b7596745c8c96b652f6853e5d744d04dab82746f94eeea65b090c32a6153191d182c2b4d969a4834c6ec8c3 languageName: node linkType: hard "@jupyterlab/translation@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/translation@npm:4.0.2" dependencies: "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/rendermime-interfaces": ^3.8.2 "@jupyterlab/services": ^7.0.2 "@jupyterlab/statedb": ^4.0.2 "@lumino/coreutils": ^2.1.1 checksum: 8f229be773607988509d059097c30bf8fbc8191d5b027221658436b2f539f6904ea48e7998276da7c52cdacd0821ea4cbdfd12ad0650ce0213525217d8735bf4 languageName: node linkType: hard "@jupyterlab/ui-components@npm:^4.0.2": version: 4.0.2 resolution: "@jupyterlab/ui-components@npm:4.0.2" dependencies: "@jupyterlab/coreutils": ^6.0.2 "@jupyterlab/observables": ^5.0.2 "@jupyterlab/rendermime-interfaces": ^3.8.2 "@jupyterlab/translation": ^4.0.2 "@lumino/algorithm": ^2.0.0 "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/messaging": ^2.0.0 "@lumino/polling": ^2.1.1 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/virtualdom": ^2.0.0 "@lumino/widgets": ^2.1.1 "@rjsf/core": ^5.1.0 "@rjsf/utils": ^5.1.0 react: ^18.2.0 react-dom: ^18.2.0 typestyle: ^2.0.4 peerDependencies: react: ^18.2.0 checksum: 5e941c557609e2cec3df3cb42de358c13f73f3cd0a3b0ce6c5d473dc8d7d09772d8dc35f843f9ef1b6619700fa4a403979a93aae047517efa5d9385a8f90eac7 languageName: node linkType: hard "@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2": version: 1.0.3 resolution: "@lezer/common@npm:1.0.3" checksum: cc90dc2f0aeaebeb3fe886cbd27f8b1e8bee817d8c2efff178604807debd68c5db820fd23afb830962780063d21891afbdf564420221faca2822e77bc6327184 languageName: node linkType: hard "@lezer/cpp@npm:^1.0.0": version: 1.1.0 resolution: "@lezer/cpp@npm:1.1.0" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 9b25c881fc9b64fd2b019a077a85b0ba7cfda0bbdd92dbb0ff43300c9ba1ec4360128fe912bfe0f06a1c1bb5a564c5ace375c8aad254d07a717768a8f268695d languageName: node linkType: hard "@lezer/css@npm:^1.0.0, @lezer/css@npm:^1.1.0": version: 1.1.2 resolution: "@lezer/css@npm:1.1.2" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 02218fe6901428e191a91a1f1a3728a051af982bafaf37144884c9261a7e24b2ad1dfdaa6e7feeb160e5bc34157ce92213cd92ae244cdf0b8485b8b8113850f8 languageName: node linkType: hard "@lezer/generator@npm:^1.2.2": version: 1.3.0 resolution: "@lezer/generator@npm:1.3.0" dependencies: "@lezer/common": ^1.0.2 "@lezer/lr": ^1.3.0 bin: lezer-generator: dist/lezer-generator.cjs checksum: 114df33679b44e86d0801473088bd1d52c208e3b3beb16cc923efac88280fc897bc2b79fd1a7bf2c04579a315898f4029127e5f15dc9557ff3c0ba0e710987eb languageName: node linkType: hard "@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.1.4": version: 1.1.6 resolution: "@lezer/highlight@npm:1.1.6" dependencies: "@lezer/common": ^1.0.0 checksum: 411a702394c4c996b7d7f145a38f3a85a8cc698b3918acc7121c629255bb76d4ab383753f69009e011dc415210c6acbbb5b27bde613259ab67e600b29397b03b languageName: node linkType: hard "@lezer/html@npm:^1.3.0": version: 1.3.4 resolution: "@lezer/html@npm:1.3.4" dependencies: "@lezer/common": ^1.0.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 81dd134ac094edf7c40bae4c3b7126d336ce4c3c87756344bf604eff64d89b06fcb55f91618a4622eb0dae6d6015722f5bab58e2252d86e81fca8c3ced1a0c4d languageName: node linkType: hard "@lezer/java@npm:^1.0.0": version: 1.0.3 resolution: "@lezer/java@npm:1.0.3" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 2fffea6627d130413ffad4e61040267974cca3167d98881b9e5b5e2455530de74a82c234d93603e92a4972fad314671453c49c0a76b0f4547c4617d671fd7b99 languageName: node linkType: hard "@lezer/javascript@npm:^1.0.0": version: 1.4.3 resolution: "@lezer/javascript@npm:1.4.3" dependencies: "@lezer/highlight": ^1.1.3 "@lezer/lr": ^1.3.0 checksum: 520dc2d84c84841ef554993c1c0dfe503487aa9be398ebcf617b51d06f99121841d4ca1cf25f3f53d00efa820ea778cc2271da425a606ac66e9f09a4c8cc6677 languageName: node linkType: hard "@lezer/json@npm:^1.0.0": version: 1.0.0 resolution: "@lezer/json@npm:1.0.0" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: c1ca0cdf681415b58a383a669944bed66da3aa830870d32d1e471d545cff0fe43d9ac8a0d2a318a96daa99cd5a645b1d58ba8fbdd2e8d7ca4d33a62c7582cbab languageName: node linkType: hard "@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0": version: 1.3.6 resolution: "@lezer/lr@npm:1.3.6" dependencies: "@lezer/common": ^1.0.0 checksum: b2bbcfecc01bd9c801f3ee636ceda333adbbea1f274017cec6f315a23346e7a035a984f325d4f1cd14b157d74d28badda6f794514c29a0b078f7fb3357cdfc32 languageName: node linkType: hard "@lezer/markdown@npm:^1.0.0, @lezer/markdown@npm:^1.0.2": version: 1.0.2 resolution: "@lezer/markdown@npm:1.0.2" dependencies: "@lezer/common": ^1.0.0 "@lezer/highlight": ^1.0.0 checksum: c4bbfcd8a5a9d924a7cf2b5e5e99c78e7705473cc59804070278b5cfcf478af9dd567025d0926cbf03e3ea6abb8f173425220d3107c05a2d7e0ca3fe3d5c92ef languageName: node linkType: hard "@lezer/php@npm:^1.0.0": version: 1.0.1 resolution: "@lezer/php@npm:1.0.1" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.1.0 checksum: a847c255c030b4d38913ddf1d5bd7324d83be7ef8d1d244542870be03b9bf7dc71283afeb2415c40dfd188cb99f0cc44bad760b5f3b7c35c3b8e5e00253848fc languageName: node linkType: hard "@lezer/python@npm:^1.1.4": version: 1.1.7 resolution: "@lezer/python@npm:1.1.7" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 7ae6b4ae770b3cd849eee3d8fb1d904745aee202a76e7db0a079725a97571c4778fa5bd74878206e44aa3349044bf056008e19e7a90650fad93d51890f685077 languageName: node linkType: hard "@lezer/rust@npm:^1.0.0": version: 1.0.0 resolution: "@lezer/rust@npm:1.0.0" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 0c42f415674f60ca2ef4274b446577621cdeec8f31168b1c3b90888a4377c513f02a89ee346421c264ec3a77fe2fa3e134996be6463ed506dbbc79b4b4505375 languageName: node linkType: hard "@lezer/xml@npm:^1.0.0": version: 1.0.1 resolution: "@lezer/xml@npm:1.0.1" dependencies: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 271319aa7802c123845b70ffa63d7065c0f92fc6a1ddb1f8ec9f3aa965bca3df3c9fad4d4de53187ddf230e833cd3ab3a84cb2aded76ab5f6831e9a2fc310923 languageName: node linkType: hard "@lumino/algorithm@npm:^2.0.0": version: 2.0.0 resolution: "@lumino/algorithm@npm:2.0.0" checksum: 663edf536e94397b449c6a2643a735e602fbb396dec86b56ad1193a768dce27c6e7da5ad0384aa90086ea44cbb64dde3f9d565e9fd81858f1eb0c6b4253f3b94 languageName: node linkType: hard "@lumino/application@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/application@npm:2.1.1" dependencies: "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/widgets": ^2.1.1 checksum: 442a047e43a85b48189d15a5a322f39cac01b9bee7b252aa76579c53e503f2cf2100f2e3aff61cd1d92fef07f04c0a3a6680c475890e0923456e296ceb79a692 languageName: node linkType: hard "@lumino/collections@npm:^2.0.0": version: 2.0.0 resolution: "@lumino/collections@npm:2.0.0" dependencies: "@lumino/algorithm": ^2.0.0 checksum: 4a7fc3571e92a1368a1ef01300ad7b6e0d4ff13cb78b89533d5962eea66d4a7550e15d8b80fa3ab1816b1a89382f35015f9dddf72ab04654c17e5b516b845d8f languageName: node linkType: hard "@lumino/commands@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/commands@npm:2.1.1" dependencies: "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/domutils": ^2.0.0 "@lumino/keyboard": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/virtualdom": ^2.0.0 checksum: a076244e9c4f7a3c6dab02642fdd38dbbaab6e5754acaeeb84a5195dc5c2fc19343ba754c3a0f89c9b60f16c61cb793301cdb6e8d69bdc30e18ed7e32f40d524 languageName: node linkType: hard "@lumino/coreutils@npm:^1.11.0 || ^2.0.0, @lumino/coreutils@npm:^1.11.0 || ^2.1.1, @lumino/coreutils@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/coreutils@npm:2.1.1" checksum: dfdeb2b0282caae17b6c3edfebadf4ce7c75fc879fa60cacfef9b154412f4b35e4ffd95b1833b99d8dacb99aaaa04513570129ae2024c3f33e2677a01f0576ce languageName: node linkType: hard "@lumino/datagrid@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/datagrid@npm:2.1.1" dependencies: "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/domutils": ^2.0.0 "@lumino/dragdrop": ^2.1.1 "@lumino/keyboard": ^2.0.0 "@lumino/messaging": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/widgets": ^2.1.1 checksum: 01ed80f36b31449d16302197549ae091d8ea07d124e5dbfda271c35462bce7f6f56d54978b6b3174d9332b9ee4219568ab3f7308b26ff1df88e9fce748bd5448 languageName: node linkType: hard "@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/disposable@npm:2.1.1" dependencies: "@lumino/signaling": ^2.1.1 checksum: ed6cdfe13f3346178a087690d4e7baeccaed7e73ca23cb239765202409f5c01b4729a4058b4717f963462ee9ef2e5cb14ad1974e3163741267290edc3715c85c languageName: node linkType: hard "@lumino/domutils@npm:^2.0.0": version: 2.0.0 resolution: "@lumino/domutils@npm:2.0.0" checksum: 4a146bfc1006d5fd00ccecc61d9803965d269c15c48c892fd87216336ce967f0db91f31203c5616c83d260224cddf25af4abb6704a6770757d19e44068f690bf languageName: node linkType: hard "@lumino/dragdrop@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/dragdrop@npm:2.1.1" dependencies: "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 checksum: 68c896afc44476b11a501e5b30ec55db06c2648a45f078713a111b2bf3b2e9171a7c5478ff6bdeb771a7c1e397fe3bba7bc5eadb4fe3e1294851d677f811b5b8 languageName: node linkType: hard "@lumino/keyboard@npm:^2.0.0": version: 2.0.0 resolution: "@lumino/keyboard@npm:2.0.0" checksum: 3852ba51f437b1c1d7e552a0f844592a05e04dd5012070dc6e4384c58965d1ebf536c6875c1b7bae03cde3c715ddc36cd290992fcefc1a8c39094194f4689fdd languageName: node linkType: hard "@lumino/messaging@npm:^2.0.0": version: 2.0.0 resolution: "@lumino/messaging@npm:2.0.0" dependencies: "@lumino/algorithm": ^2.0.0 "@lumino/collections": ^2.0.0 checksum: 1e82dcf9b110834d4342dc63dfeac0ee780880fb99051bd82d00a1f83afd91b276c1cea5af85a414d92c527adc365d54f20ec780123b562f89c5a2cd3e96bf81 languageName: node linkType: hard "@lumino/polling@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/polling@npm:2.1.1" dependencies: "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/signaling": ^2.1.1 checksum: 69177b26d5fc541e72533cbe7d7f7999eea541d392f1082d20dbd9e1797e7d46fba47bae9c65c06f9ccb2780cbae636e9354d9bf4423b5e1020754d4b07d4f6b languageName: node linkType: hard "@lumino/properties@npm:^2.0.0": version: 2.0.0 resolution: "@lumino/properties@npm:2.0.0" checksum: 81187a11a779eed4e20ff0035e77dee99bd271b0cf649096c4e8809dd6bdd06955b1a974bc1a115e536f8d2840b30183bb78a362b2c6991824477df6d17e6c59 languageName: node linkType: hard "@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/signaling@npm:2.1.1" dependencies: "@lumino/algorithm": ^2.0.0 "@lumino/coreutils": ^2.1.1 checksum: 283ad4239b8577f68aca3d0b2606f73cc1c775f84cab25cf49aa6cd195f0d87949ef43fdff03b38b5a49ebbf2468581c6786d5f8b6159a04b2051260be5eab86 languageName: node linkType: hard "@lumino/virtualdom@npm:^2.0.0": version: 2.0.0 resolution: "@lumino/virtualdom@npm:2.0.0" dependencies: "@lumino/algorithm": ^2.0.0 checksum: 6fc1d88e7d4a656be7664ccfc5745eb1d4e3d2034db0b11ad6abefcc642f22d265003eef0e1d02bca2e42b6da127123118c631369006f78e88a08885a6f36c25 languageName: node linkType: hard "@lumino/widgets@npm:^1.37.2 || ^2.1.1, @lumino/widgets@npm:^2.1.1": version: 2.1.1 resolution: "@lumino/widgets@npm:2.1.1" dependencies: "@lumino/algorithm": ^2.0.0 "@lumino/commands": ^2.1.1 "@lumino/coreutils": ^2.1.1 "@lumino/disposable": ^2.1.1 "@lumino/domutils": ^2.0.0 "@lumino/dragdrop": ^2.1.1 "@lumino/keyboard": ^2.0.0 "@lumino/messaging": ^2.0.0 "@lumino/properties": ^2.0.0 "@lumino/signaling": ^2.1.1 "@lumino/virtualdom": ^2.0.0 checksum: e2ad4a97d6ec43e5e1863c2a521b6b8cb7a708a470c1e78b0f34ff4ad8b9fca191597586c3033233a29ff0fa14b62aeef5ea2fe66af3058d39e711c6af129cf4 languageName: node linkType: hard "@npmcli/fs@npm:^3.1.0": version: 3.1.0 resolution: "@npmcli/fs@npm:3.1.0" dependencies: semver: ^7.3.5 checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e languageName: node linkType: hard "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f languageName: node linkType: hard "@playwright/test@npm:^1.32.0, @playwright/test@npm:^1.32.2": version: 1.35.0 resolution: "@playwright/test@npm:1.35.0" dependencies: "@types/node": "*" fsevents: 2.3.2 playwright-core: 1.35.0 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js checksum: c63a281d8711ec817906d7618563709842aaa013ac02919bb7bbef7f7162d4ace0fc1351c6aac94a8957df4d107b38440e55488e99455a07f55e1ace6bb07959 languageName: node linkType: hard "@rjsf/core@npm:^5.1.0": version: 5.8.1 resolution: "@rjsf/core@npm:5.8.1" dependencies: lodash: ^4.17.21 lodash-es: ^4.17.21 markdown-to-jsx: ^7.2.1 nanoid: ^3.3.6 prop-types: ^15.8.1 peerDependencies: "@rjsf/utils": ^5.8.x react: ^16.14.0 || >=17 checksum: 616691f66285c89d7fb378bbad787960adcf7e8941b3287dce543f022dce3106b80d41cf1f41de926cd8dbe1f5006c5fcc0a6597bbca7ee9a13d422b967bb986 languageName: node linkType: hard "@rjsf/utils@npm:^5.1.0": version: 5.8.1 resolution: "@rjsf/utils@npm:5.8.1" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 lodash: ^4.17.21 lodash-es: ^4.17.21 react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 checksum: 7a567ab45e62de01020a6bccd1da20e55a7a484bc5d367e3ded56ba3971d196646b690767c4f2d2840b2df1acdf5cd5611c892b1ce3c59defdd6201a107e6ff4 languageName: node linkType: hard "@stdlib/array@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/array@npm:0.0.12" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/blas": ^0.0.x "@stdlib/complex": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/symbol": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 0d95690461f0c4560eabef0796d1170274415cd03de80333c6d39814d0484a6873ef4be04a64941ebf3a600747e84c3a4f23b21c7020e53842c07985331b39f1 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/assert@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/assert@npm:0.0.12" dependencies: "@stdlib/array": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/complex": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/fs": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/ndarray": ^0.0.x "@stdlib/number": ^0.0.x "@stdlib/os": ^0.0.x "@stdlib/process": ^0.0.x "@stdlib/regexp": ^0.0.x "@stdlib/streams": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/symbol": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: d4dcbeabbfb86ba56cdd972ff785f43e7d25018b2b1800cab8b0deb9e5c54c795d6ead3d142f4dd13c351f636deba4dc1857c85147d6b059fdc78eb2c9510b99 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/bigint@npm:^0.0.x": version: 0.0.11 resolution: "@stdlib/bigint@npm:0.0.11" dependencies: "@stdlib/utils": ^0.0.x checksum: 7bf825d116e4b010e214209af239706ac1ef923eecb5c8b0af9229c9975450081355e441ecc7b4765d81a9e653141868e0492b8061d1e65724fa42fb8283aabd conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/blas@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/blas@npm:0.0.12" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/number": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 67ea00a968f7a9c710b37f718b7f756e2830e479a1a1ee44cbf6ec3cc27dd8863078928867707d9d1624007e81de89d040f2326d10f435e2cce913cab121975e conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/buffer@npm:^0.0.x": version: 0.0.11 resolution: "@stdlib/buffer@npm:0.0.11" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/process": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 93df02e3bf548e940ff9cef65121566e7bf93b554f0614d62336c9dbccfc07c9f1b1c4e9a7aebbe4819ef16a6d2a33a7010c2fdf908fface8298a3109c3c4ef0 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/cli@npm:^0.0.x": version: 0.0.10 resolution: "@stdlib/cli@npm:0.0.10" dependencies: "@stdlib/utils": ^0.0.x minimist: ^1.2.0 checksum: bbece8d3dbff2835518582a7726c6c4c22743dc408d2303d9e35a3b72151d5d0a8e78d61bc896663d4c3fb702e966abea7a1bd621ed943723a359f57053f121f conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/complex@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/complex@npm:0.0.12" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 8eda35027495417f1b0dd9bbbc2d4983f50ad3cf9e2276ffe0945ccdbe78f0fc66b9fc36ab71926d2a125c8fb7467c8970a222b230b42ff4bb8042c53314ca09 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/constants@npm:^0.0.x": version: 0.0.11 resolution: "@stdlib/constants@npm:0.0.11" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/number": ^0.0.x "@stdlib/utils": ^0.0.x checksum: fc19d055a4e71ae84b6c92e4a3a88371d50693da8f0a813df4063dc549374d19b9cf23f4fdae2fb7b2013e13929f713c3e1b9e4054767e741b75561ed43d15c3 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/fs@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/fs@npm:0.0.12" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/process": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/utils": ^0.0.x debug: ^2.6.9 checksum: 33ac5ee4844d4599fe3a8a8402f1a3e2cafee31a5c9cf5b85df530a61a2b54ef17dc30a67be98dacdc2958219413edd0e4cdc3c28266f4bc30277ee024f6a49e conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/math@npm:^0.0.x": version: 0.0.11 resolution: "@stdlib/math@npm:0.0.11" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/ndarray": ^0.0.x "@stdlib/number": ^0.0.x "@stdlib/strided": ^0.0.x "@stdlib/symbol": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x debug: ^2.6.9 checksum: 6c4c9dda36fbce50553e1437354c5286aa782c42399534dbed8e696ddeb1b91ef6cff5fe5962f1c9e1eb2ef63c63d9bd58f7ca4b87d59018aaac20099c3fb79a conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/ndarray@npm:^0.0.x": version: 0.0.13 resolution: "@stdlib/ndarray@npm:0.0.13" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/bigint": ^0.0.x "@stdlib/buffer": ^0.0.x "@stdlib/complex": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/number": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 842a94afce5fc74bf8a964b75a302ddb8713eadbc79616e6799f1310c8bce860ed9e9877adc4a39338d9136b8798947ee21cf03368d46408308a313c8075d49a conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/nlp@npm:^0.0.x": version: 0.0.11 resolution: "@stdlib/nlp@npm:0.0.11" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/random": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 398fe2853fb95404bb6598e3e199ca3e0435b94447d50e14e2e30582cadfb91f43464f23d80a0e1da4d64567a4a108a7299d7440509f1ab26b02aea7bb16e9a8 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/number@npm:^0.0.x": version: 0.0.10 resolution: "@stdlib/number@npm:0.0.10" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/os": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 326190956c787cbf9321c332beedab5ba4b3fa97d52a82aa708a0349b4678c0df7a351424f00a606f4eaca4fb4ba4cc191580c99d7c64ee0f08d37baa3de14f2 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/os@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/os@npm:0.0.12" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/fs": ^0.0.x "@stdlib/process": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 37156b0c723da70d7740d92d08fc592eae803461c1d546cff6ac044765d6e40722fdad342219277e747c39344b513096ac1d0aa1e733cf3079bd8a9a8578612a conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/process@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/process@npm:0.0.12" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/buffer": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/fs": ^0.0.x "@stdlib/streams": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 6d5c3d943f9914d1ae39bd36ad7436f783cf64baa2bff67a808035c99258676ae3f704c328a78d62754951cf85fe99d8e9af5f4fa7d5f8cba347bca72767e357 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/random@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/random@npm:0.0.12" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/blas": ^0.0.x "@stdlib/buffer": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/fs": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/process": ^0.0.x "@stdlib/stats": ^0.0.x "@stdlib/streams": ^0.0.x "@stdlib/symbol": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x debug: ^2.6.9 readable-stream: ^2.1.4 checksum: 67fcb5553274f8596ceae91153e96ae297bacfd55279821cb09f19f2844845aaf892802e4a5962965323dbfded0c7df8a89a6ce77d60d5c8a5899d483055a964 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/regexp@npm:^0.0.x": version: 0.0.13 resolution: "@stdlib/regexp@npm:0.0.13" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/utils": ^0.0.x checksum: dd52adb096ff9a02d1c4818be2889ae01bc04a0cdbc0d52473685e0a7a4eaa13e1be603b964f140f7488d11450b644dc5f8c97029d77db1ed4a563554245ff1c conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/stats@npm:^0.0.x, @stdlib/stats@npm:~0.0.13": version: 0.0.13 resolution: "@stdlib/stats@npm:0.0.13" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/blas": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/ndarray": ^0.0.x "@stdlib/random": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/symbol": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 5ca12b2e123543f56a59aca828e14afaf525ad4aa40467bee7037a9178e21e55d4ce8ba3de9387cc9a0efe3e0d035d6c58705b12f634f77a2b3f87d334dfb076 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/streams@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/streams@npm:0.0.12" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/buffer": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/fs": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x debug: ^2.6.9 readable-stream: ^2.1.4 checksum: 231b4607d082ea81d9dadbeab08002ec398a29c7eb5d611d8a4183f9db6964428e2f8a9e0f8edd085ca12b5d58258576987a575e9d8f6fcabcb5a62c6b8efe88 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/strided@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/strided@npm:0.0.12" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/ndarray": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 55ccc8543596894a2e3ad734b394700c69697b499a54b3bfbcf80cddd8d91509792c23931f5cebf7c89269676ac3f44352582e4f42e2c2c2898363cc3a76403d conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/string@npm:^0.0.x": version: 0.0.14 resolution: "@stdlib/string@npm:0.0.14" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/fs": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/nlp": ^0.0.x "@stdlib/process": ^0.0.x "@stdlib/regexp": ^0.0.x "@stdlib/streams": ^0.0.x "@stdlib/types": ^0.0.x "@stdlib/utils": ^0.0.x checksum: aaaaaddf381cccc67f15dbab76f43ce81cb71a4f5595bfa06ef915b6747458deca3c25c60ff3c002c0c36482687d92a150f364069559dfea915f63a040d5f603 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/symbol@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/symbol@npm:0.0.12" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 2263341ce0296de2063d26038902bd63bf1d7b820307402fdf38c3b248bd026f17d96bccdc3189fd9fcc9c83a778eaab797dc11805bd66203b8ac9c6934f6588 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/time@npm:^0.0.x": version: 0.0.14 resolution: "@stdlib/time@npm:0.0.14" dependencies: "@stdlib/assert": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/fs": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/utils": ^0.0.x checksum: 6e8a1b985a09936ab09c98d44bf1b2c79e08995c3c73401494bc1f6f708747ef136d769af4809a8af92a9ceb3d390db6c4c4e01608cd8d794a86c4b57e343eb1 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/types@npm:^0.0.x": version: 0.0.14 resolution: "@stdlib/types@npm:0.0.14" checksum: 5680a655ddb3ad730f5c7eb2363a43e089f3e6a1b85b12546cab49f7749bb3baf293bd50fbfe55486f233f4227f1020b65eb461b754b94fb4a4bc2799647ec22 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@stdlib/utils@npm:^0.0.x": version: 0.0.12 resolution: "@stdlib/utils@npm:0.0.12" dependencies: "@stdlib/array": ^0.0.x "@stdlib/assert": ^0.0.x "@stdlib/blas": ^0.0.x "@stdlib/buffer": ^0.0.x "@stdlib/cli": ^0.0.x "@stdlib/constants": ^0.0.x "@stdlib/fs": ^0.0.x "@stdlib/math": ^0.0.x "@stdlib/os": ^0.0.x "@stdlib/process": ^0.0.x "@stdlib/random": ^0.0.x "@stdlib/regexp": ^0.0.x "@stdlib/streams": ^0.0.x "@stdlib/string": ^0.0.x "@stdlib/symbol": ^0.0.x "@stdlib/time": ^0.0.x "@stdlib/types": ^0.0.x debug: ^2.6.9 checksum: e0c3671c5f62c11bb3abd721f2958c41641b00a75d449bd25fbb62bcb8689cfe9c1f600c0688e7b6819ae870d6e5974d0fc7b2ec86081c45d9194b316b2a2ec2 conditions: (os=aix | os=darwin | os=freebsd | os=linux | os=macos | os=openbsd | os=sunos | os=win32 | os=windows) languageName: node linkType: hard "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 languageName: node linkType: hard "@types/clone@npm:~2.1.1": version: 2.1.1 resolution: "@types/clone@npm:2.1.1" checksum: bda9668b9d6e0875d64bbe00763676f566e8647bc224333a03ac7fd66655dfed56a98a9f8304d0145c4411b964649c84c4d1a03adbdb6547eafb9ab8f303d254 languageName: node linkType: hard "@types/estree@npm:^1.0.0": version: 1.0.1 resolution: "@types/estree@npm:1.0.1" checksum: e9aa175eacb797216fafce4d41e8202c7a75555bc55232dee0f9903d7171f8f19f0ae7d5191bb1a88cb90e65468be508c0df850a9fb81b4433b293a5a749899d languageName: node linkType: hard "@types/geojson@npm:7946.0.4": version: 7946.0.4 resolution: "@types/geojson@npm:7946.0.4" checksum: 541aea46540c918b9fe21ab73f497fe17b1eaf4d0d3baeb5f5614029b7f488c37f63843b644c024a8178dc2fb66d3d6623c25d9cf61d7b553aa19c8dc7f99047 languageName: node linkType: hard "@types/node@npm:*": version: 20.3.1 resolution: "@types/node@npm:20.3.1" checksum: 63a393ab6d947be17320817b35d7277ef03728e231558166ed07ee30b09fd7c08861be4d746f10fdc63ca7912e8cd023939d4eab887ff6580ff704ff24ed810c languageName: node linkType: hard "@types/prop-types@npm:*": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 languageName: node linkType: hard "@types/react@npm:^18.0.26": version: 18.2.12 resolution: "@types/react@npm:18.2.12" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 checksum: ad85a7eadaf1b35cfeee9f715b39311420ff46d46e0650377d918b3f888c2e47416037da4a765e1dccd3d1916abd54c105a3bee803c971ba56c955a7768ce976 languageName: node linkType: hard "@types/scheduler@npm:*": version: 0.16.3 resolution: "@types/scheduler@npm:0.16.3" checksum: 2b0aec39c24268e3ce938c5db2f2e77f5c3dd280e05c262d9c2fe7d890929e4632a6b8e94334017b66b45e4f92a5aa42ba3356640c2a1175fa37bef2f5200767 languageName: node linkType: hard "@vscode/debugprotocol@npm:^1.51.0": version: 1.61.0 resolution: "@vscode/debugprotocol@npm:1.61.0" checksum: 14d4f6d2f385e15a39ba7aa506c25d3e2a2d6a22ebb6ee9d354062634f292b1ce3b0d9b5ac1c098052e3f6e572a1571bf0db647d13d85157b9a50645a0f1c69f languageName: node linkType: hard "@yarnpkg/lockfile@npm:^1.1.0": version: 1.1.0 resolution: "@yarnpkg/lockfile@npm:1.1.0" checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a languageName: node linkType: hard "abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 languageName: node linkType: hard "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: debug: 4 checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d languageName: node linkType: hard "agentkeepalive@npm:^4.2.1": version: 4.3.0 resolution: "agentkeepalive@npm:4.3.0" dependencies: debug: ^4.1.0 depd: ^2.0.0 humanize-ms: ^1.2.1 checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 languageName: node linkType: hard "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" dependencies: clean-stack: ^2.0.0 indent-string: ^4.0.0 checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 languageName: node linkType: hard "ajv@npm:^8.12.0": version: 8.12.0 resolution: "ajv@npm:8.12.0" dependencies: fast-deep-equal: ^3.1.1 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 uri-js: ^4.2.2 checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 languageName: node linkType: hard "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b languageName: node linkType: hard "ansi-regex@npm:^6.0.1": version: 6.0.1 resolution: "ansi-regex@npm:6.0.1" checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 languageName: node linkType: hard "ansi-styles@npm:^4.0.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: color-convert: ^2.0.1 checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 languageName: node linkType: hard "ansi-styles@npm:^6.1.0": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 languageName: node linkType: hard "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 languageName: node linkType: hard "are-we-there-yet@npm:^3.0.0": version: 3.0.1 resolution: "are-we-there-yet@npm:3.0.1" dependencies: delegates: ^1.0.0 readable-stream: ^3.6.0 checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 languageName: node linkType: hard "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 languageName: node linkType: hard "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" dependencies: balanced-match: ^1.0.0 concat-map: 0.0.1 checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 languageName: node linkType: hard "brace-expansion@npm:^2.0.1": version: 2.0.1 resolution: "brace-expansion@npm:2.0.1" dependencies: balanced-match: ^1.0.0 checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 languageName: node linkType: hard "cacache@npm:^17.0.0": version: 17.1.3 resolution: "cacache@npm:17.1.3" dependencies: "@npmcli/fs": ^3.1.0 fs-minipass: ^3.0.0 glob: ^10.2.2 lru-cache: ^7.7.1 minipass: ^5.0.0 minipass-collect: ^1.0.2 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 p-map: ^4.0.0 ssri: ^10.0.0 tar: ^6.1.11 unique-filename: ^3.0.0 checksum: 385756781e1e21af089160d89d7462b7ed9883c978e848c7075b90b73cb823680e66092d61513050164588387d2ca87dd6d910e28d64bc13a9ac82cd8580c796 languageName: node linkType: hard "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f languageName: node linkType: hard "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 languageName: node linkType: hard "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" dependencies: string-width: ^4.2.0 strip-ansi: ^6.0.1 wrap-ansi: ^7.0.0 checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard "clone@npm:~2.1.2": version: 2.1.2 resolution: "clone@npm:2.1.2" checksum: aaf106e9bc025b21333e2f4c12da539b568db4925c0501a1bf4070836c9e848c892fa22c35548ce0d1132b08bbbfa17a00144fe58fccdab6fa900fec4250f67d languageName: node linkType: hard "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" dependencies: color-name: ~1.1.4 checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 languageName: node linkType: hard "color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 languageName: node linkType: hard "color-support@npm:^1.1.3": version: 1.1.3 resolution: "color-support@npm:1.1.3" bin: color-support: bin.js checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b languageName: node linkType: hard "commander@npm:2": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e languageName: node linkType: hard "commander@npm:7": version: 7.2.0 resolution: "commander@npm:7.2.0" checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc languageName: node linkType: hard "commander@npm:^10.0.1": version: 10.0.1 resolution: "commander@npm:10.0.1" checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 languageName: node linkType: hard "compute-gcd@npm:^1.2.1": version: 1.2.1 resolution: "compute-gcd@npm:1.2.1" dependencies: validate.io-array: ^1.0.3 validate.io-function: ^1.0.2 validate.io-integer-array: ^1.0.0 checksum: 51cf33b75f7c8db5142fcb99a9d84a40260993fed8e02a7ab443834186c3ab99b3fd20b30ad9075a6a9d959d69df6da74dd3be8a59c78d9f2fe780ebda8242e1 languageName: node linkType: hard "compute-lcm@npm:^1.1.2": version: 1.1.2 resolution: "compute-lcm@npm:1.1.2" dependencies: compute-gcd: ^1.2.1 validate.io-array: ^1.0.3 validate.io-function: ^1.0.2 validate.io-integer-array: ^1.0.0 checksum: d499ab57dcb48e8d0fd233b99844a06d1cc56115602c920c586e998ebba60293731f5b6976e8a1e83ae6cbfe86716f62d9432e8d94913fed8bd8352f447dc917 languageName: node linkType: hard "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af languageName: node linkType: hard "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed languageName: node linkType: hard "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 languageName: node linkType: hard "crelt@npm:^1.0.5": version: 1.0.6 resolution: "crelt@npm:1.0.6" checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f languageName: node linkType: hard "cross-spawn@npm:^7.0.0": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 languageName: node linkType: hard "csstype@npm:3.0.10": version: 3.0.10 resolution: "csstype@npm:3.0.10" checksum: 20a8fa324f2b33ddf94aa7507d1b6ab3daa6f3cc308888dc50126585d7952f2471de69b2dbe0635d1fdc31223fef8e070842691877e725caf456e2378685a631 languageName: node linkType: hard "csstype@npm:^3.0.2": version: 3.1.2 resolution: "csstype@npm:3.1.2" checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 languageName: node linkType: hard "d3-array@npm:1 - 3, d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:2.5.0 - 3, d3-array@npm:^3.2.2": version: 3.2.4 resolution: "d3-array@npm:3.2.4" dependencies: internmap: 1 - 2 checksum: a5976a6d6205f69208478bb44920dd7ce3e788c9dceb86b304dbe401a4bfb42ecc8b04c20facde486e9adcb488b5d1800d49393a3f81a23902b68158e12cddd0 languageName: node linkType: hard "d3-array@npm:3.2.2": version: 3.2.2 resolution: "d3-array@npm:3.2.2" dependencies: internmap: 1 - 2 checksum: 98af3db792685ceca5d9c3721efba0c567520da5532b2c7a590fd83627a598ea225d11c2cecbad404dc154120feb5ea6df0ded38f82ddf342c714cfd0c6143d1 languageName: node linkType: hard "d3-color@npm:1 - 3, d3-color@npm:^3.1.0": version: 3.1.0 resolution: "d3-color@npm:3.1.0" checksum: 4931fbfda5d7c4b5cfa283a13c91a954f86e3b69d75ce588d06cde6c3628cebfc3af2069ccf225e982e8987c612aa7948b3932163ce15eb3c11cd7c003f3ee3b languageName: node linkType: hard "d3-delaunay@npm:^6.0.2": version: 6.0.4 resolution: "d3-delaunay@npm:6.0.4" dependencies: delaunator: 5 checksum: ce6d267d5ef21a8aeadfe4606329fc80a22ab6e7748d47bc220bcc396ee8be84b77a5473033954c5ac4aa522d265ddc45d4165d30fe4787dd60a15ea66b9bbb4 languageName: node linkType: hard "d3-dispatch@npm:1 - 3": version: 3.0.1 resolution: "d3-dispatch@npm:3.0.1" checksum: fdfd4a230f46463e28e5b22a45dd76d03be9345b605e1b5dc7d18bd7ebf504e6c00ae123fd6d03e23d9e2711e01f0e14ea89cd0632545b9f0c00b924ba4be223 languageName: node linkType: hard "d3-dsv@npm:^3.0.1": version: 3.0.1 resolution: "d3-dsv@npm:3.0.1" dependencies: commander: 7 iconv-lite: 0.6 rw: 1 bin: csv2json: bin/dsv2json.js csv2tsv: bin/dsv2dsv.js dsv2dsv: bin/dsv2dsv.js dsv2json: bin/dsv2json.js json2csv: bin/json2dsv.js json2dsv: bin/json2dsv.js json2tsv: bin/json2dsv.js tsv2csv: bin/dsv2dsv.js tsv2json: bin/dsv2json.js checksum: 5fc0723647269d5dccd181d74f2265920ab368a2868b0b4f55ffa2fecdfb7814390ea28622cd61ee5d9594ab262879509059544e9f815c54fe76fbfb4ffa4c8a languageName: node linkType: hard "d3-force@npm:^3.0.0": version: 3.0.0 resolution: "d3-force@npm:3.0.0" dependencies: d3-dispatch: 1 - 3 d3-quadtree: 1 - 3 d3-timer: 1 - 3 checksum: 6c7e96438cab62fa32aeadb0ade3297b62b51f81b1b38b0a60a5ec9fd627d74090c1189654d92df2250775f31b06812342f089f1d5947de9960a635ee3581def languageName: node linkType: hard "d3-format@npm:1 - 3, d3-format@npm:^3.1.0": version: 3.1.0 resolution: "d3-format@npm:3.1.0" checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 languageName: node linkType: hard "d3-geo-projection@npm:^4.0.0": version: 4.0.0 resolution: "d3-geo-projection@npm:4.0.0" dependencies: commander: 7 d3-array: 1 - 3 d3-geo: 1.12.0 - 3 bin: geo2svg: bin/geo2svg.js geograticule: bin/geograticule.js geoproject: bin/geoproject.js geoquantize: bin/geoquantize.js geostitch: bin/geostitch.js checksum: 631422b10dd78d1047ba5a3b073148bea27721060bd7087a5fa6c053ca80445d26432e505e0e3acbd6e0d76cf577c61bf9a5db70dabbc9310c493de1f7ff736d languageName: node linkType: hard "d3-geo@npm:1.12.0 - 3, d3-geo@npm:^3.1.0": version: 3.1.0 resolution: "d3-geo@npm:3.1.0" dependencies: d3-array: 2.5.0 - 3 checksum: adf82b0c105c0c5951ae0a833d4dfc479a563791ad7938579fa14e1cffd623b469d8aa7a37dc413a327fb6ac56880f3da3f6c43d4abe3c923972dd98f34f37d1 languageName: node linkType: hard "d3-hierarchy@npm:^3.1.2": version: 3.1.2 resolution: "d3-hierarchy@npm:3.1.2" checksum: 0fd946a8c5fd4686d43d3e11bbfc2037a145fda29d2261ccd0e36f70b66af6d7638e2c0c7112124d63fc3d3127197a00a6aecf676bd5bd392a94d7235a214263 languageName: node linkType: hard "d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": version: 3.0.1 resolution: "d3-interpolate@npm:3.0.1" dependencies: d3-color: 1 - 3 checksum: a42ba314e295e95e5365eff0f604834e67e4a3b3c7102458781c477bd67e9b24b6bb9d8e41ff5521050a3f2c7c0c4bbbb6e187fd586daa3980943095b267e78b languageName: node linkType: hard "d3-path@npm:^3.1.0": version: 3.1.0 resolution: "d3-path@npm:3.1.0" checksum: 2306f1bd9191e1eac895ec13e3064f732a85f243d6e627d242a313f9777756838a2215ea11562f0c7630c7c3b16a19ec1fe0948b1c82f3317fac55882f6ee5d8 languageName: node linkType: hard "d3-quadtree@npm:1 - 3": version: 3.0.1 resolution: "d3-quadtree@npm:3.0.1" checksum: 5469d462763811475f34a7294d984f3eb100515b0585ca5b249656f6b1a6e99b20056a2d2e463cc9944b888896d2b1d07859c50f9c0cf23438df9cd2e3146066 languageName: node linkType: hard "d3-scale@npm:^4.0.2": version: 4.0.2 resolution: "d3-scale@npm:4.0.2" dependencies: d3-array: 2.10.0 - 3 d3-format: 1 - 3 d3-interpolate: 1.2.0 - 3 d3-time: 2.1.1 - 3 d3-time-format: 2 - 4 checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e languageName: node linkType: hard "d3-shape@npm:^3.2.0": version: 3.2.0 resolution: "d3-shape@npm:3.2.0" dependencies: d3-path: ^3.1.0 checksum: de2af5fc9a93036a7b68581ca0bfc4aca2d5a328aa7ba7064c11aedd44d24f310c20c40157cb654359d4c15c3ef369f95ee53d71221017276e34172c7b719cfa languageName: node linkType: hard "d3-time-format@npm:2 - 4, d3-time-format@npm:^4.1.0": version: 4.1.0 resolution: "d3-time-format@npm:4.1.0" dependencies: d3-time: 1 - 3 checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 languageName: node linkType: hard "d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.1.0": version: 3.1.0 resolution: "d3-time@npm:3.1.0" dependencies: d3-array: 2 - 3 checksum: 613b435352a78d9f31b7f68540788186d8c331b63feca60ad21c88e9db1989fe888f97f242322ebd6365e45ec3fb206a4324cd4ca0dfffa1d9b5feb856ba00a7 languageName: node linkType: hard "d3-timer@npm:1 - 3, d3-timer@npm:^3.0.1": version: 3.0.1 resolution: "d3-timer@npm:3.0.1" checksum: 1cfddf86d7bca22f73f2c427f52dfa35c49f50d64e187eb788dcad6e927625c636aa18ae4edd44d084eb9d1f81d8ca4ec305dae7f733c15846a824575b789d73 languageName: node linkType: hard "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.3": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: ms: 2.1.2 peerDependenciesMeta: supports-color: optional: true checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 languageName: node linkType: hard "debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: ms: 2.0.0 checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 languageName: node linkType: hard "deepmerge@npm:^4.2.2": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 languageName: node linkType: hard "delaunator@npm:5": version: 5.0.0 resolution: "delaunator@npm:5.0.0" dependencies: robust-predicates: ^3.0.0 checksum: d6764188442b7f7c6bcacebd96edc00e35f542a96f1af3ef600e586bfb9849a3682c489c0ab423440c90bc4c7cac77f28761babff76fa29e193e1cf50a95b860 languageName: node linkType: hard "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd languageName: node linkType: hard "depd@npm:^2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a languageName: node linkType: hard "dom-serializer@npm:^1.0.1": version: 1.4.1 resolution: "dom-serializer@npm:1.4.1" dependencies: domelementtype: ^2.0.1 domhandler: ^4.2.0 entities: ^2.0.0 checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 languageName: node linkType: hard "domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 languageName: node linkType: hard "domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": version: 4.3.1 resolution: "domhandler@npm:4.3.1" dependencies: domelementtype: ^2.2.0 checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa languageName: node linkType: hard "domutils@npm:^2.5.2": version: 2.8.0 resolution: "domutils@npm:2.8.0" dependencies: dom-serializer: ^1.0.1 domelementtype: ^2.2.0 domhandler: ^4.2.0 checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 languageName: node linkType: hard "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed languageName: node linkType: hard "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 languageName: node linkType: hard "emoji-regex@npm:^9.2.2": version: 9.2.2 resolution: "emoji-regex@npm:9.2.2" checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 languageName: node linkType: hard "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: iconv-lite: ^0.6.2 checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f languageName: node linkType: hard "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 languageName: node linkType: hard "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e languageName: node linkType: hard "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 languageName: node linkType: hard "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 languageName: node linkType: hard "escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 languageName: node linkType: hard "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 languageName: node linkType: hard "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:~3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d languageName: node linkType: hard "fast-json-stable-stringify@npm:~2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb languageName: node linkType: hard "foreground-child@npm:^3.1.0": version: 3.1.1 resolution: "foreground-child@npm:3.1.1" dependencies: cross-spawn: ^7.0.0 signal-exit: ^4.0.1 checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 languageName: node linkType: hard "free-style@npm:3.1.0": version: 3.1.0 resolution: "free-style@npm:3.1.0" checksum: 949258ae315deda48cac93ecd5f9a80f36e8a027e19ce2103598dc8d5ab60e963bbad5444b2a4990ddb746798dd188896f430285cf484afbf2141f7d75a191d8 languageName: node linkType: hard "fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 languageName: node linkType: hard "fs-minipass@npm:^2.0.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" dependencies: minipass: ^3.0.0 checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 languageName: node linkType: hard "fs-minipass@npm:^3.0.0": version: 3.0.2 resolution: "fs-minipass@npm:3.0.2" dependencies: minipass: ^5.0.0 checksum: e9cc0e1f2d01c6f6f62f567aee59530aba65c6c7b2ae88c5027bc34c711ebcfcfaefd0caf254afa6adfe7d1fba16bc2537508a6235196bac7276747d078aef0a languageName: node linkType: hard "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 languageName: node linkType: hard "fsevents@npm:2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: node-gyp: latest checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f conditions: os=darwin languageName: node linkType: hard "fsevents@patch:fsevents@2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" dependencies: node-gyp: latest conditions: os=darwin languageName: node linkType: hard "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" dependencies: aproba: ^1.0.3 || ^2.0.0 color-support: ^1.1.3 console-control-strings: ^1.1.0 has-unicode: ^2.0.1 signal-exit: ^3.0.7 string-width: ^4.2.3 strip-ansi: ^6.0.1 wide-align: ^1.1.5 checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d languageName: node linkType: hard "get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 languageName: node linkType: hard "glob@npm:^10.2.2": version: 10.2.7 resolution: "glob@npm:10.2.7" dependencies: foreground-child: ^3.1.0 jackspeak: ^2.0.3 minimatch: ^9.0.1 minipass: ^5.0.0 || ^6.0.2 path-scurry: ^1.7.0 bin: glob: dist/cjs/src/bin.js checksum: 555205a74607d6f8d9874ba888924b305b5ea1abfaa2e9ccb11ac713d040aac7edbf7d8702a2f4a1cd81b2d7666412170ce7ef061d33cddde189dae8c1a1a054 languageName: node linkType: hard "glob@npm:^7.1.3, glob@npm:^7.1.4": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 minimatch: ^3.1.1 once: ^1.3.0 path-is-absolute: ^1.0.0 checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 languageName: node linkType: hard "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 languageName: node linkType: hard "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 languageName: node linkType: hard "htmlparser2@npm:^6.0.0": version: 6.1.0 resolution: "htmlparser2@npm:6.1.0" dependencies: domelementtype: ^2.0.1 domhandler: ^4.0.0 domutils: ^2.5.2 entities: ^2.0.0 checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e languageName: node linkType: hard "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 languageName: node linkType: hard "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" dependencies: "@tootallnate/once": 2 agent-base: 6 debug: 4 checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 languageName: node linkType: hard "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: agent-base: 6 debug: 4 checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 languageName: node linkType: hard "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" dependencies: ms: ^2.0.0 checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 languageName: node linkType: hard "iconv-lite@npm:0.6, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: safer-buffer: ">= 2.1.2 < 3.0.0" checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf languageName: node linkType: hard "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 languageName: node linkType: hard "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 languageName: node linkType: hard "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" dependencies: once: ^1.3.0 wrappy: 1 checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd languageName: node linkType: hard "inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 languageName: node linkType: hard "inherits@npm:2.0.3": version: 2.0.3 resolution: "inherits@npm:2.0.3" checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 languageName: node linkType: hard "internmap@npm:1 - 2": version: 2.0.3 resolution: "internmap@npm:2.0.3" checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241 languageName: node linkType: hard "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 languageName: node linkType: hard "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 languageName: node linkType: hard "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 languageName: node linkType: hard "is-plain-object@npm:^5.0.0": version: 5.0.0 resolution: "is-plain-object@npm:5.0.0" checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c languageName: node linkType: hard "isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab languageName: node linkType: hard "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 languageName: node linkType: hard "isomorphic.js@npm:^0.2.4": version: 0.2.5 resolution: "isomorphic.js@npm:0.2.5" checksum: d8d1b083f05f3c337a06628b982ac3ce6db953bbef14a9de8ad49131250c3592f864b73c12030fdc9ef138ce97b76ef55c7d96a849561ac215b1b4b9d301c8e9 languageName: node linkType: hard "jackspeak@npm:^2.0.3": version: 2.2.1 resolution: "jackspeak@npm:2.2.1" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df languageName: node linkType: hard "js-tokens@npm:^3.0.0 || ^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 languageName: node linkType: hard "json-schema-compare@npm:^0.2.2": version: 0.2.2 resolution: "json-schema-compare@npm:0.2.2" dependencies: lodash: ^4.17.4 checksum: dd6f2173857c8e3b77d6ebdfa05bd505bba5b08709ab46b532722f5d1c33b5fee1fc8f3c97d0c0d011db25f9f3b0baf7ab783bb5f55c32abd9f1201760e43c2c languageName: node linkType: hard "json-schema-merge-allof@npm:^0.8.1": version: 0.8.1 resolution: "json-schema-merge-allof@npm:0.8.1" dependencies: compute-lcm: ^1.1.2 json-schema-compare: ^0.2.2 lodash: ^4.17.20 checksum: 82700f6ac77351959138d6b153d77375a8c29cf48d907241b85c8292dd77aabd8cb816400f2b0d17062c4ccc8893832ec4f664ab9c814927ef502e7a595ea873 languageName: node linkType: hard "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad languageName: node linkType: hard "json-stringify-pretty-compact@npm:~3.0.0": version: 3.0.0 resolution: "json-stringify-pretty-compact@npm:3.0.0" checksum: 01ab5c5c8260299414868d96db97f53aef93c290fe469edd9a1363818e795006e01c952fa2fd7b47cbbab506d5768998eccc25e1da4fa2ccfebd1788c6098791 languageName: node linkType: hard "json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: json5: lib/cli.js checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 languageName: node linkType: hard "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" dependencies: graceful-fs: ^4.1.6 universalify: ^2.0.0 dependenciesMeta: graceful-fs: optional: true checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 languageName: node linkType: hard "jsonpointer@npm:^5.0.1": version: 5.0.1 resolution: "jsonpointer@npm:5.0.1" checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c languageName: node linkType: hard "lib0@npm:^0.2.42, lib0@npm:^0.2.74": version: 0.2.78 resolution: "lib0@npm:0.2.78" dependencies: isomorphic.js: ^0.2.4 bin: 0gentesthtml: bin/gentesthtml.js 0serve: bin/0serve.js checksum: a9c90a9228e10e581bf416f4ecade967687d67e6ea3e822ef69e2628a77a2a0254ef7e2eb7e555d412f9e9467049b7fb760c079878f9a934dd85d2646a53d172 languageName: node linkType: hard "lodash-es@npm:^4.17.21": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 languageName: node linkType: hard "lodash.escape@npm:^4.0.1": version: 4.0.1 resolution: "lodash.escape@npm:4.0.1" checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f languageName: node linkType: hard "lodash.mergewith@npm:^4.6.1": version: 4.6.2 resolution: "lodash.mergewith@npm:4.6.2" checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 languageName: node linkType: hard "lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard "loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: js-tokens: ^3.0.0 || ^4.0.0 bin: loose-envify: cli.js checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 languageName: node linkType: hard "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" dependencies: yallist: ^4.0.0 checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 languageName: node linkType: hard "lru-cache@npm:^7.7.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 languageName: node linkType: hard "lru-cache@npm:^9.1.1": version: 9.1.2 resolution: "lru-cache@npm:9.1.2" checksum: d3415634be3908909081fc4c56371a8d562d9081eba70543d86871b978702fffd0e9e362b83921b27a29ae2b37b90f55675aad770a54ac83bb3e4de5049d4b15 languageName: node linkType: hard "make-fetch-happen@npm:^11.0.3": version: 11.1.1 resolution: "make-fetch-happen@npm:11.1.1" dependencies: agentkeepalive: ^4.2.1 cacache: ^17.0.0 http-cache-semantics: ^4.1.1 http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 is-lambda: ^1.0.1 lru-cache: ^7.7.1 minipass: ^5.0.0 minipass-fetch: ^3.0.0 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 negotiator: ^0.6.3 promise-retry: ^2.0.1 socks-proxy-agent: ^7.0.0 ssri: ^10.0.0 checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 languageName: node linkType: hard "markdown-to-jsx@npm:^7.2.1": version: 7.2.1 resolution: "markdown-to-jsx@npm:7.2.1" peerDependencies: react: ">= 0.14.0" checksum: 0c8c715229044401ea48c2fc26c2554464100074959dafacdd9e4a0e849f0a190b02f39edb373bbdd95e38b8f910074b83b63d08752b8ae6be6ddcfb40ea50a0 languageName: node linkType: hard "minimatch@npm:^3.1.1": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: brace-expansion: ^1.1.7 checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a languageName: node linkType: hard "minimatch@npm:^9.0.1": version: 9.0.1 resolution: "minimatch@npm:9.0.1" dependencies: brace-expansion: ^2.0.1 checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3 languageName: node linkType: hard "minimist@npm:^1.2.0, minimist@npm:~1.2.0": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 languageName: node linkType: hard "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" dependencies: minipass: ^3.0.0 checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 languageName: node linkType: hard "minipass-fetch@npm:^3.0.0": version: 3.0.3 resolution: "minipass-fetch@npm:3.0.3" dependencies: encoding: ^0.1.13 minipass: ^5.0.0 minipass-sized: ^1.0.3 minizlib: ^2.1.2 dependenciesMeta: encoding: optional: true checksum: af5ab2552a16fcf505d35fd7ffb84b57f4a0eeb269e6e1d9a2a75824dda48b36e527083250b7cca4a4def21d9544e2ade441e4730e233c0bc2133f6abda31e18 languageName: node linkType: hard "minipass-flush@npm:^1.0.5": version: 1.0.5 resolution: "minipass-flush@npm:1.0.5" dependencies: minipass: ^3.0.0 checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf languageName: node linkType: hard "minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: minipass: ^3.0.0 checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b languageName: node linkType: hard "minipass-sized@npm:^1.0.3": version: 1.0.3 resolution: "minipass-sized@npm:1.0.3" dependencies: minipass: ^3.0.0 checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 languageName: node linkType: hard "minipass@npm:^3.0.0": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: yallist: ^4.0.0 checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 languageName: node linkType: hard "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea languageName: node linkType: hard "minipass@npm:^5.0.0 || ^6.0.2": version: 6.0.2 resolution: "minipass@npm:6.0.2" checksum: d140b91f4ab2e5ce5a9b6c468c0e82223504acc89114c1a120d4495188b81fedf8cade72a9f4793642b4e66672f990f1e0d902dd858485216a07cd3c8a62fac9 languageName: node linkType: hard "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: minipass: ^3.0.0 yallist: ^4.0.0 checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 languageName: node linkType: hard "mkdirp@npm:^1.0.3": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: mkdirp: bin/cmd.js checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f languageName: node linkType: hard "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 languageName: node linkType: hard "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f languageName: node linkType: hard "ms@npm:^2.0.0": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard "nanoid@npm:^3.3.6": version: 3.3.6 resolution: "nanoid@npm:3.3.6" bin: nanoid: bin/nanoid.cjs checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 languageName: node linkType: hard "negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 languageName: node linkType: hard "node-fetch@npm:^2.6.7": version: 2.6.11 resolution: "node-fetch@npm:2.6.11" dependencies: whatwg-url: ^5.0.0 peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: encoding: optional: true checksum: 249d0666a9497553384d46b5ab296ba223521ac88fed4d8a17d6ee6c2efb0fc890f3e8091cafe7f9fba8151a5b8d925db2671543b3409a56c3cd522b468b47b3 languageName: node linkType: hard "node-gyp@npm:latest": version: 9.4.0 resolution: "node-gyp@npm:9.4.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 glob: ^7.1.4 graceful-fs: ^4.2.6 make-fetch-happen: ^11.0.3 nopt: ^6.0.0 npmlog: ^6.0.0 rimraf: ^3.0.2 semver: ^7.3.5 tar: ^6.1.2 which: ^2.0.2 bin: node-gyp: bin/node-gyp.js checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 languageName: node linkType: hard "nopt@npm:^6.0.0": version: 6.0.0 resolution: "nopt@npm:6.0.0" dependencies: abbrev: ^1.0.0 bin: nopt: bin/nopt.js checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac languageName: node linkType: hard "npmlog@npm:^6.0.0": version: 6.0.2 resolution: "npmlog@npm:6.0.2" dependencies: are-we-there-yet: ^3.0.0 console-control-strings: ^1.1.0 gauge: ^4.0.3 set-blocking: ^2.0.0 checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a languageName: node linkType: hard "object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f languageName: node linkType: hard "once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: wrappy: 1 checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 languageName: node linkType: hard "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" dependencies: aggregate-error: ^3.0.0 checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c languageName: node linkType: hard "parse-srcset@npm:^1.0.2": version: 1.0.2 resolution: "parse-srcset@npm:1.0.2" checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf languageName: node linkType: hard "path-browserify@npm:^1.0.0": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 languageName: node linkType: hard "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 languageName: node linkType: hard "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 languageName: node linkType: hard "path-scurry@npm:^1.7.0": version: 1.9.2 resolution: "path-scurry@npm:1.9.2" dependencies: lru-cache: ^9.1.1 minipass: ^5.0.0 || ^6.0.2 checksum: 92888dfb68e285043c6d3291c8e971d5d2bc2f5082f4d7b5392896f34be47024c9d0a8b688dd7ae6d125acc424699195474927cb4f00049a9b1ec7c4256fa8e0 languageName: node linkType: hard "path@npm:~0.12.7": version: 0.12.7 resolution: "path@npm:0.12.7" dependencies: process: ^0.11.1 util: ^0.10.3 checksum: 5dedb71e78fc008fcba797defc0b4e1cf06c1f18e0a631e03ba5bb505136f587ff017afc14f9a3d481cbe77aeedff7dc0c1d2ce4d820c1ebf3c4281ca49423a1 languageName: node linkType: hard "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 languageName: node linkType: hard "playwright-core@npm:1.35.0": version: 1.35.0 resolution: "playwright-core@npm:1.35.0" bin: playwright-core: cli.js checksum: e23050c9de128e02b16ffbeb1adaca6dddd85a6fd581e71da38947f66b3c910504d628285340e3d6de8c099a488ab9dad14241aefe615f65c01a5a3e3b6e633d languageName: node linkType: hard "postcss@npm:^8.3.11": version: 8.4.24 resolution: "postcss@npm:8.4.24" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 checksum: 814e2126dacfea313588eda09cc99a9b4c26ec55c059188aa7a916d20d26d483483106dc5ff9e560731b59f45c5bb91b945dfadc670aed875cc90ddbbf4e787d languageName: node linkType: hard "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf languageName: node linkType: hard "process@npm:^0.11.1": version: 0.11.10 resolution: "process@npm:0.11.10" checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 languageName: node linkType: hard "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" dependencies: err-code: ^2.0.2 retry: ^0.12.0 checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 languageName: node linkType: hard "prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: loose-envify: ^1.4.0 object-assign: ^4.1.1 react-is: ^16.13.1 checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 languageName: node linkType: hard "punycode@npm:^2.1.0": version: 2.3.0 resolution: "punycode@npm:2.3.0" checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 languageName: node linkType: hard "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 languageName: node linkType: hard "react-dom@npm:^18.2.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" dependencies: loose-envify: ^1.1.0 scheduler: ^0.23.0 peerDependencies: react: ^18.2.0 checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc languageName: node linkType: hard "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f languageName: node linkType: hard "react-is@npm:^18.2.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e languageName: node linkType: hard "react@npm:^18.2.0": version: 18.2.0 resolution: "react@npm:18.2.0" dependencies: loose-envify: ^1.1.0 checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b languageName: node linkType: hard "readable-stream@npm:^2.1.4": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 isarray: ~1.0.0 process-nextick-args: ~2.0.0 safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 languageName: node linkType: hard "readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d languageName: node linkType: hard "regexp-match-indices@npm:^1.0.2": version: 1.0.2 resolution: "regexp-match-indices@npm:1.0.2" dependencies: regexp-tree: ^0.1.11 checksum: 8cc779f6cf8f404ead828d09970a7d4bd66bd78d43ab9eb2b5e65f2ef2ba1ed53536f5b5fa839fb90b350365fb44b6a851c7f16289afc3f37789c113ab2a7916 languageName: node linkType: hard "regexp-tree@npm:^0.1.11": version: 0.1.27 resolution: "regexp-tree@npm:0.1.27" bin: regexp-tree: bin/regexp-tree checksum: 129aebb34dae22d6694ab2ac328be3f99105143737528ab072ef624d599afecbcfae1f5c96a166fa9e5f64fa1ecf30b411c4691e7924c3e11bbaf1712c260c54 languageName: node linkType: hard "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 languageName: node linkType: hard "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b languageName: node linkType: hard "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff languageName: node linkType: hard "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c languageName: node linkType: hard "rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: glob: ^7.1.3 bin: rimraf: bin.js checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 languageName: node linkType: hard "robust-predicates@npm:^3.0.0": version: 3.0.2 resolution: "robust-predicates@npm:3.0.2" checksum: 36854c1321548ceca96d36ad9d6e0a5a512986029ec6929ad6ed3ec1612c22cc8b46cc72d2c5674af42e8074a119d793f6f0ea3a5b51373e3ab926c64b172d7a languageName: node linkType: hard "rw@npm:1": version: 1.3.3 resolution: "rw@npm:1.3.3" checksum: c20d82421f5a71c86a13f76121b751553a99cd4a70ea27db86f9b23f33db941f3f06019c30f60d50c356d0bd674c8e74764ac146ea55e217c091bde6fba82aa3 languageName: node linkType: hard "safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c languageName: node linkType: hard "safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 languageName: node linkType: hard "sanitize-html@npm:~2.7.3": version: 2.7.3 resolution: "sanitize-html@npm:2.7.3" dependencies: deepmerge: ^4.2.2 escape-string-regexp: ^4.0.0 htmlparser2: ^6.0.0 is-plain-object: ^5.0.0 parse-srcset: ^1.0.2 postcss: ^8.3.11 checksum: 2399d1fdbbc3a263fb413c1fe1971b3dc2b51abc6cc5cb49490624539d1c57a8fe31e2b21408c118e2a957f4e673e3169b1f9a5807654408f17b130a9d78aed7 languageName: node linkType: hard "scheduler@npm:^0.23.0": version: 0.23.0 resolution: "scheduler@npm:0.23.0" dependencies: loose-envify: ^1.1.0 checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a languageName: node linkType: hard "semver@npm:^7.3.5, semver@npm:^7.5.0": version: 7.5.1 resolution: "semver@npm:7.5.1" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js checksum: d16dbedad53c65b086f79524b9ef766bf38670b2395bdad5c957f824dcc566b624988013564f4812bcace3f9d405355c3635e2007396a39d1bffc71cfec4a2fc languageName: node linkType: hard "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 languageName: node linkType: hard "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" dependencies: shebang-regex: ^3.0.0 checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa languageName: node linkType: hard "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 languageName: node linkType: hard "signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 languageName: node linkType: hard "signal-exit@npm:^4.0.1": version: 4.0.2 resolution: "signal-exit@npm:4.0.2" checksum: 41f5928431cc6e91087bf0343db786a6313dd7c6fd7e551dbc141c95bb5fb26663444fd9df8ea47c5d7fc202f60aa7468c3162a9365cbb0615fc5e1b1328fe31 languageName: node linkType: hard "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b languageName: node linkType: hard "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" dependencies: agent-base: ^6.0.2 debug: ^4.3.3 socks: ^2.6.2 checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 languageName: node linkType: hard "socks@npm:^2.6.2": version: 2.7.1 resolution: "socks@npm:2.7.1" dependencies: ip: ^2.0.0 smart-buffer: ^4.2.0 checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 languageName: node linkType: hard "source-map-js@npm:^1.0.2": version: 1.0.2 resolution: "source-map-js@npm:1.0.2" checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c languageName: node linkType: hard "ssri@npm:^10.0.0": version: 10.0.4 resolution: "ssri@npm:10.0.4" dependencies: minipass: ^5.0.0 checksum: fb14da9f8a72b04eab163eb13a9dda11d5962cd2317f85457c4e0b575e9a6e0e3a6a87b5bf122c75cb36565830cd5f263fb457571bf6f1587eb5f95d095d6165 languageName: node linkType: hard "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: emoji-regex: ^8.0.0 is-fullwidth-code-point: ^3.0.0 strip-ansi: ^6.0.1 checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb languageName: node linkType: hard "string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" dependencies: eastasianwidth: ^0.2.0 emoji-regex: ^9.2.2 strip-ansi: ^7.0.1 checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 languageName: node linkType: hard "string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: safe-buffer: ~5.2.0 checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 languageName: node linkType: hard "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" dependencies: safe-buffer: ~5.1.0 checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b languageName: node linkType: hard "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: ansi-regex: ^5.0.1 checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c languageName: node linkType: hard "strip-ansi@npm:^7.0.1": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: ansi-regex: ^6.0.1 checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d languageName: node linkType: hard "style-mod@npm:^4.0.0": version: 4.0.3 resolution: "style-mod@npm:4.0.3" checksum: 934556e720bd29026ff8fef43a1a35b58957813025b91f996d886e9405acf934ddb1934def4400b174bd7784c9263eb9c71f07ae83925af9271b7d921d546854 languageName: node linkType: hard "systeminformation@npm:^5.8.6": version: 5.21.8 resolution: "systeminformation@npm:5.21.8" bin: systeminformation: lib/cli.js checksum: 302b8b430a5b0a7009be95c086b1bc43db3ecfd6ecab6cf654ae3312240f616823505f15a080a70f2335a9e5aab45d789aaba018843c9a9f8f18117aa32dce8a conditions: (os=darwin | os=linux | os=win32 | os=freebsd | os=openbsd | os=netbsd | os=sunos | os=android) languageName: node linkType: hard "tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.1.15 resolution: "tar@npm:6.1.15" dependencies: chownr: ^2.0.0 fs-minipass: ^2.0.0 minipass: ^5.0.0 minizlib: ^2.1.1 mkdirp: ^1.0.3 yallist: ^4.0.0 checksum: f23832fceeba7578bf31907aac744ae21e74a66f4a17a9e94507acf460e48f6db598c7023882db33bab75b80e027c21f276d405e4a0322d58f51c7088d428268 languageName: node linkType: hard "topojson-client@npm:^3.1.0": version: 3.1.0 resolution: "topojson-client@npm:3.1.0" dependencies: commander: 2 bin: topo2geo: bin/topo2geo topomerge: bin/topomerge topoquantize: bin/topoquantize checksum: 8c029a4f18324ace0b8b55dd90edbd40c9e3c6de18bafbb5da37ca20ebf20e26fbd4420891acb3c2c264e214185f7557871f5651a9eee517028663be98d836de languageName: node linkType: hard "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 languageName: node linkType: hard "tslib@npm:^2.5.0, tslib@npm:~2.5.0": version: 2.5.3 resolution: "tslib@npm:2.5.3" checksum: 88902b309afaf83259131c1e13da1dceb0ad1682a213143a1346a649143924d78cf3760c448b84d796938fd76127183894f8d85cbb3bf9c4fddbfcc140c0003c languageName: node linkType: hard "typestyle@npm:^2.0.4": version: 2.4.0 resolution: "typestyle@npm:2.4.0" dependencies: csstype: 3.0.10 free-style: 3.1.0 checksum: 8b4f02c24f67b594f98507b15a753dabd4db5eb0af007e1d310527c64030e11e9464b25b5a6bc65fb5eec9a4459a8336050121ecc29063ac87b8b47a6d698893 languageName: node linkType: hard "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" dependencies: unique-slug: ^4.0.0 checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df languageName: node linkType: hard "unique-slug@npm:^4.0.0": version: 4.0.0 resolution: "unique-slug@npm:4.0.0" dependencies: imurmurhash: ^0.1.4 checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 languageName: node linkType: hard "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44 languageName: node linkType: hard "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: punycode: ^2.1.0 checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 languageName: node linkType: hard "url-parse@npm:~1.5.4": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: querystringify: ^2.1.1 requires-port: ^1.0.0 checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf languageName: node linkType: hard "util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 languageName: node linkType: hard "util@npm:^0.10.3": version: 0.10.4 resolution: "util@npm:0.10.4" dependencies: inherits: 2.0.3 checksum: 913f9a90d05a60e91f91af01b8bd37e06bca4cc02d7b49e01089f9d5b78be2fffd61fb1a41b517de7238c5fc7337fa939c62d1fb4eb82e014894c7bee6637aaf languageName: node linkType: hard "validate.io-array@npm:^1.0.3": version: 1.0.6 resolution: "validate.io-array@npm:1.0.6" checksum: 54eca83ebc702e3e46499f9d9e77287a95ae25c4e727cd2fafee29c7333b3a36cca0c5d8f090b9406262786de80750fba85e7e7ef41e20bf8cc67d5570de449b languageName: node linkType: hard "validate.io-function@npm:^1.0.2": version: 1.0.2 resolution: "validate.io-function@npm:1.0.2" checksum: e4cce2479a20cb7c42e8630c777fb107059c27bc32925f769e3a73ca5fd62b4892d897b3c80227e14d5fcd1c5b7d05544e0579d63e59f14034c0052cda7f7c44 languageName: node linkType: hard "validate.io-integer-array@npm:^1.0.0": version: 1.0.0 resolution: "validate.io-integer-array@npm:1.0.0" dependencies: validate.io-array: ^1.0.3 validate.io-integer: ^1.0.4 checksum: 5f6d7fab8df7d2bf546a05e830201768464605539c75a2c2417b632b4411a00df84b462f81eac75e1be95303e7e0ac92f244c137424739f4e15cd21c2eb52c7f languageName: node linkType: hard "validate.io-integer@npm:^1.0.4": version: 1.0.5 resolution: "validate.io-integer@npm:1.0.5" dependencies: validate.io-number: ^1.0.3 checksum: 88b3f8bb5a5277a95305d64abbfc437079220ce4f57a148cc6113e7ccec03dd86b10a69d413982602aa90a62b8d516148a78716f550dcd3aff863ac1c2a7a5e6 languageName: node linkType: hard "validate.io-number@npm:^1.0.3": version: 1.0.3 resolution: "validate.io-number@npm:1.0.3" checksum: 42418aeb6c969efa745475154fe576809b02eccd0961aad0421b090d6e7a12d23a3e28b0d5dddd2c6347c1a6bdccb82bba5048c716131cd20207244d50e07282 languageName: node linkType: hard "vega-canvas@npm:^1.2.6, vega-canvas@npm:^1.2.7": version: 1.2.7 resolution: "vega-canvas@npm:1.2.7" checksum: 6ff92fcdf0c359f2f662909c859a7f4cb4a502436136ab2f4c02373c47a621996ec0eea23e2108f11d62a618be301de86cd8528b5058c2e207a53ddd7ff58d1b languageName: node linkType: hard "vega-crossfilter@npm:~4.1.1": version: 4.1.1 resolution: "vega-crossfilter@npm:4.1.1" dependencies: d3-array: ^3.2.2 vega-dataflow: ^5.7.5 vega-util: ^1.17.1 checksum: e399f7e92d7ba273ad5c1a9e29d362a9ec7feaeacb976eff3aa205b318382fb37a9fac3150ec1cb806364cd2b2cb54d5f23aea3285db684df2b4c27836422464 languageName: node linkType: hard "vega-dataflow@npm:^5.7.3, vega-dataflow@npm:^5.7.5, vega-dataflow@npm:~5.7.5": version: 5.7.5 resolution: "vega-dataflow@npm:5.7.5" dependencies: vega-format: ^1.1.1 vega-loader: ^4.5.1 vega-util: ^1.17.1 checksum: 917ed63e88b0871169a883f68da127a404d88e50c9ed6fa3f063a706016b064594fb804a2bf99f09bc4a899819cac320bdde12467edc861af1acc024552dd202 languageName: node linkType: hard "vega-encode@npm:~4.9.2": version: 4.9.2 resolution: "vega-encode@npm:4.9.2" dependencies: d3-array: ^3.2.2 d3-interpolate: ^3.0.1 vega-dataflow: ^5.7.5 vega-scale: ^7.3.0 vega-util: ^1.17.1 checksum: fcba123d2efb865b4f6cf8e9d64e0752ebae163dcfe61013f4874f7fe6fce3003ea9dd83b89db3ffab2a1530532a7c902dd24dfec226eb53d08dcf69189f308d languageName: node linkType: hard "vega-event-selector@npm:^3.0.1, vega-event-selector@npm:~3.0.1": version: 3.0.1 resolution: "vega-event-selector@npm:3.0.1" checksum: 66d09b5800a19a9b0c75f28811b140a1a2e70e84be6d6f87c568cdbce6e17c8e195f130f4e3de5d6dc737142d1f46f4fe7645177e154582cc8ba27c6845b54e8 languageName: node linkType: hard "vega-expression@npm:^5.0.1, vega-expression@npm:^5.1.0, vega-expression@npm:~5.1.0": version: 5.1.0 resolution: "vega-expression@npm:5.1.0" dependencies: "@types/estree": ^1.0.0 vega-util: ^1.17.1 checksum: 0355ebb6edd8f2ccc2dcf277a29b42b13f971725443212ce8a64cb8a02049f75f0add7ca9afcd3bc6744b93be791b526e7f983d9080d5052e9b0ca55bd488ae5 languageName: node linkType: hard "vega-force@npm:~4.2.0": version: 4.2.0 resolution: "vega-force@npm:4.2.0" dependencies: d3-force: ^3.0.0 vega-dataflow: ^5.7.5 vega-util: ^1.17.1 checksum: 8a371ca8d0892bc3e932cc279bbf54fe8b88e2b384c42f8df9877c801191953f3ee3e2f516f675a69ecb052ed081232dfb3438989620e8ad5c2a316ccee60277 languageName: node linkType: hard "vega-format@npm:^1.1.1, vega-format@npm:~1.1.1": version: 1.1.1 resolution: "vega-format@npm:1.1.1" dependencies: d3-array: ^3.2.2 d3-format: ^3.1.0 d3-time-format: ^4.1.0 vega-time: ^2.1.1 vega-util: ^1.17.1 checksum: d506acb8611a6340ff419ebf308a758a54aaf3cf141863553df83980dcf8dc7bf806bee257d11a52d43682d159d7be03ab8a92bdd4d018d8c9f39a70c45cb197 languageName: node linkType: hard "vega-functions@npm:^5.13.1, vega-functions@npm:~5.13.2": version: 5.13.2 resolution: "vega-functions@npm:5.13.2" dependencies: d3-array: ^3.2.2 d3-color: ^3.1.0 d3-geo: ^3.1.0 vega-dataflow: ^5.7.5 vega-expression: ^5.1.0 vega-scale: ^7.3.0 vega-scenegraph: ^4.10.2 vega-selections: ^5.4.1 vega-statistics: ^1.8.1 vega-time: ^2.1.1 vega-util: ^1.17.1 checksum: 178498cf93c3d9ef392fb57a5c7992dbb9118c546a6acb4cff9783f911fb30dbf50634cbfd6e3a9bc358c4aec9a571bd55f9cf3de551213cd386f152ac882986 languageName: node linkType: hard "vega-geo@npm:~4.4.1": version: 4.4.1 resolution: "vega-geo@npm:4.4.1" dependencies: d3-array: ^3.2.2 d3-color: ^3.1.0 d3-geo: ^3.1.0 vega-canvas: ^1.2.7 vega-dataflow: ^5.7.5 vega-projection: ^1.6.0 vega-statistics: ^1.8.1 vega-util: ^1.17.1 checksum: e9c62d9134c2449a1a80cd5cb71ed6dc455d893a36fdcb1a696bcae3897670c32687cf14a0f366b0ec76905e5be406131dc671e5d607ffcbef74e94b8c697007 languageName: node linkType: hard "vega-hierarchy@npm:~4.1.1": version: 4.1.1 resolution: "vega-hierarchy@npm:4.1.1" dependencies: d3-hierarchy: ^3.1.2 vega-dataflow: ^5.7.5 vega-util: ^1.17.1 checksum: beb23948922f1b52bf03b836d71d3a5a36db3a6bfe2af74b6a5fc45a2e2e877226313e2389772be62a459728467618175d8c02a07e88330844fdec45fd5f69ac languageName: node linkType: hard "vega-label@npm:~1.2.1": version: 1.2.1 resolution: "vega-label@npm:1.2.1" dependencies: vega-canvas: ^1.2.6 vega-dataflow: ^5.7.3 vega-scenegraph: ^4.9.2 vega-util: ^1.15.2 checksum: 2704c99328ead677441e746acd8f4529301437d08b2758933fc13353d2eab9af353e4ebcc4ff1f09f41d600401b097e2df3c9e8e56d4861e5216222dd9e29185 languageName: node linkType: hard "vega-lite@npm:^5.6.1": version: 5.9.3 resolution: "vega-lite@npm:5.9.3" dependencies: "@types/clone": ~2.1.1 clone: ~2.1.2 fast-deep-equal: ~3.1.3 fast-json-stable-stringify: ~2.1.0 json-stringify-pretty-compact: ~3.0.0 tslib: ~2.5.0 vega-event-selector: ~3.0.1 vega-expression: ~5.1.0 vega-util: ~1.17.2 yargs: ~17.7.2 peerDependencies: vega: ^5.24.0 bin: vl2pdf: bin/vl2pdf vl2png: bin/vl2png vl2svg: bin/vl2svg vl2vg: bin/vl2vg checksum: 0f020942c78e4acc8c4d9c13c80cebf76c769caad2de29f382ee308fbd1c7f7abe575b092b56351ba55ca3ad46e14ec969edaa39dc59c1f61c5bcd1c1e4e16c7 languageName: node linkType: hard "vega-loader@npm:^4.5.1, vega-loader@npm:~4.5.1": version: 4.5.1 resolution: "vega-loader@npm:4.5.1" dependencies: d3-dsv: ^3.0.1 node-fetch: ^2.6.7 topojson-client: ^3.1.0 vega-format: ^1.1.1 vega-util: ^1.17.1 checksum: 95f6eebc75a97665cf34faaea431934047e1b2e9d7532f48f62dab4884d606a7d9da53962e1631a5790a7a867f720581852a3db9be1a7f667882062f6c102ee0 languageName: node linkType: hard "vega-parser@npm:~6.2.0": version: 6.2.0 resolution: "vega-parser@npm:6.2.0" dependencies: vega-dataflow: ^5.7.5 vega-event-selector: ^3.0.1 vega-functions: ^5.13.1 vega-scale: ^7.3.0 vega-util: ^1.17.1 checksum: 19872153c16aab30c4df338e0df7bd331e0bf74c7c6afce5428df555b9bdb0c4acf76b54092cacd4726a1349912ea803c90e1b30d53f4a02044e0559873969a7 languageName: node linkType: hard "vega-projection@npm:^1.6.0, vega-projection@npm:~1.6.0": version: 1.6.0 resolution: "vega-projection@npm:1.6.0" dependencies: d3-geo: ^3.1.0 d3-geo-projection: ^4.0.0 vega-scale: ^7.3.0 checksum: 9c52848e294ff68051fe9f44fa536656c4e6be3d474bd3359e21aa154ab282755eaee624ac31b1ca01816227900e1d81a6d191e36f46e47525ed6648397f0fa0 languageName: node linkType: hard "vega-regression@npm:~1.2.0": version: 1.2.0 resolution: "vega-regression@npm:1.2.0" dependencies: d3-array: ^3.2.2 vega-dataflow: ^5.7.3 vega-statistics: ^1.9.0 vega-util: ^1.15.2 checksum: 5f79db18c7849b465550e00ca8fec9d896aa3cf6d6279daac8b862beb632d841dcb6a93136d6b827c37e3d1cbd2bb2f7dec58f96c572763870c2d38f2cc4e0b3 languageName: node linkType: hard "vega-runtime@npm:^6.1.4, vega-runtime@npm:~6.1.4": version: 6.1.4 resolution: "vega-runtime@npm:6.1.4" dependencies: vega-dataflow: ^5.7.5 vega-util: ^1.17.1 checksum: a1da40ddb3109f1ced8e61d2e7b52784fbb29936ee4c47cb5630dbbeb12ef6e0c3cd3cd189c34377f82402bf19c61dd148d90330fec743b8667635ac48e4ba29 languageName: node linkType: hard "vega-scale@npm:^7.3.0, vega-scale@npm:~7.3.0": version: 7.3.0 resolution: "vega-scale@npm:7.3.0" dependencies: d3-array: ^3.2.2 d3-interpolate: ^3.0.1 d3-scale: ^4.0.2 vega-time: ^2.1.1 vega-util: ^1.17.1 checksum: 8e434f27a51a913dd18374ec0d2bc33758eda7db1ee6342721644f977e705268b8df6b3e89813774d776d03a0cd24f91d4d59f9e80951f67dfbbf8637f5a69ad languageName: node linkType: hard "vega-scenegraph@npm:^4.10.2, vega-scenegraph@npm:^4.9.2, vega-scenegraph@npm:~4.10.2": version: 4.10.2 resolution: "vega-scenegraph@npm:4.10.2" dependencies: d3-path: ^3.1.0 d3-shape: ^3.2.0 vega-canvas: ^1.2.7 vega-loader: ^4.5.1 vega-scale: ^7.3.0 vega-util: ^1.17.1 checksum: 6caf3e298297b918c8b6a72f019e51e2bfbaecd316e4d1c37d855ac9366d177cdbf16e9c8857c5ccde128bcd9645af7ee7dc81111bcd743d192e1a3b9a9d7185 languageName: node linkType: hard "vega-selections@npm:^5.4.1": version: 5.4.1 resolution: "vega-selections@npm:5.4.1" dependencies: d3-array: 3.2.2 vega-expression: ^5.0.1 vega-util: ^1.17.1 checksum: c594d41ec3886af94976e4dc4e152bea9b3975a22d435aa38dac2aab105851cb83fd4aa0f1e81a47f8bc0bea1677af93816331e3ed084ab3ec2e51b3544c109f languageName: node linkType: hard "vega-statistics@npm:^1.7.9, vega-statistics@npm:^1.8.1, vega-statistics@npm:^1.9.0, vega-statistics@npm:~1.9.0": version: 1.9.0 resolution: "vega-statistics@npm:1.9.0" dependencies: d3-array: ^3.2.2 checksum: bbf2ea088c5a6a662c6aed1bf57996c06a82a98228730ada8a97e57824a6ed391999ea974f16dcde6e73bf88799976d91aff748842848d38ab45dbb9fafba3f9 languageName: node linkType: hard "vega-time@npm:^2.1.1, vega-time@npm:~2.1.1": version: 2.1.1 resolution: "vega-time@npm:2.1.1" dependencies: d3-array: ^3.2.2 d3-time: ^3.1.0 vega-util: ^1.17.1 checksum: 3d6a50f779be4b5e7f27bd2aae766035c29e59e03e62d2e96b94a2f759ed3104c1102c1006dd416e7b819ee501880ae7a722c2fa9aabf9efac86503c1aada14a languageName: node linkType: hard "vega-transforms@npm:~4.10.2": version: 4.10.2 resolution: "vega-transforms@npm:4.10.2" dependencies: d3-array: ^3.2.2 vega-dataflow: ^5.7.5 vega-statistics: ^1.8.1 vega-time: ^2.1.1 vega-util: ^1.17.1 checksum: 2dbe4c767542a5dc4dbb453fd1317b00912e47dbdb3de637259b2552497dd8039c20c795318ad57341eb0d30b69712c55a2da16dc9ad2329a68c35fb75b4fee6 languageName: node linkType: hard "vega-typings@npm:~0.24.0": version: 0.24.1 resolution: "vega-typings@npm:0.24.1" dependencies: "@types/geojson": 7946.0.4 vega-event-selector: ^3.0.1 vega-expression: ^5.0.1 vega-util: ^1.17.1 checksum: e6b7bf88d6e505ba472c8e5e734d1914515db0e4e23ca36c5b81f7bd2bf4df6ebf519ecc1f089dcef3caae48e196d29946dc5c9fa8ee454ea31d12f111f857ae languageName: node linkType: hard "vega-util@npm:^1.15.2, vega-util@npm:^1.17.1, vega-util@npm:~1.17.2": version: 1.17.2 resolution: "vega-util@npm:1.17.2" checksum: 5d681cb1a6ffda7af1b74df7c1c46a32f1d874daef54f9c9c65c7d7c7bfc4271dc6d9b1c1c7a853b14eb6e4cc8ec811b0132cd3ea25fa85259eac92e1b4f07fa languageName: node linkType: hard "vega-view-transforms@npm:~4.5.9": version: 4.5.9 resolution: "vega-view-transforms@npm:4.5.9" dependencies: vega-dataflow: ^5.7.5 vega-scenegraph: ^4.10.2 vega-util: ^1.17.1 checksum: aeeaf3c2f1a02b1303c16a586dbcb20f208c101d06d7e988e18ab71fb67d87be5d8ff228ebf25971535d6e41dc816168cfa68b8676e7250df07a40aefdea32a7 languageName: node linkType: hard "vega-view@npm:~5.11.1": version: 5.11.1 resolution: "vega-view@npm:5.11.1" dependencies: d3-array: ^3.2.2 d3-timer: ^3.0.1 vega-dataflow: ^5.7.5 vega-format: ^1.1.1 vega-functions: ^5.13.1 vega-runtime: ^6.1.4 vega-scenegraph: ^4.10.2 vega-util: ^1.17.1 checksum: 82ddc74593b3a359d0b3458bc06573673ff9bf13f84020cb36fb4676c5d7f547e9650eb6faaa76799fbcedd27bcd266603dbd08c420e2d2229cc6b9f48a4a66d languageName: node linkType: hard "vega-voronoi@npm:~4.2.1": version: 4.2.1 resolution: "vega-voronoi@npm:4.2.1" dependencies: d3-delaunay: ^6.0.2 vega-dataflow: ^5.7.5 vega-util: ^1.17.1 checksum: f618174ad5f451c507a80e373288bb2c0da7a8a908d62f885bc77b354c4334504ae2d1042742f68ad419ade7b548aeca9ca1042ae5541bebd7f5297afc23bb35 languageName: node linkType: hard "vega-wordcloud@npm:~4.1.4": version: 4.1.4 resolution: "vega-wordcloud@npm:4.1.4" dependencies: vega-canvas: ^1.2.7 vega-dataflow: ^5.7.5 vega-scale: ^7.3.0 vega-statistics: ^1.8.1 vega-util: ^1.17.1 checksum: 34d1882651d3a2f34ce40a6eaeed700de126f627cdf041ec2bcc7ada46d7b4b68a38a2974236eec87ee876d9abd095af7ab17e7698b0e2fbc831460767969d7a languageName: node linkType: hard "vega@npm:^5.20.0": version: 5.25.0 resolution: "vega@npm:5.25.0" dependencies: vega-crossfilter: ~4.1.1 vega-dataflow: ~5.7.5 vega-encode: ~4.9.2 vega-event-selector: ~3.0.1 vega-expression: ~5.1.0 vega-force: ~4.2.0 vega-format: ~1.1.1 vega-functions: ~5.13.2 vega-geo: ~4.4.1 vega-hierarchy: ~4.1.1 vega-label: ~1.2.1 vega-loader: ~4.5.1 vega-parser: ~6.2.0 vega-projection: ~1.6.0 vega-regression: ~1.2.0 vega-runtime: ~6.1.4 vega-scale: ~7.3.0 vega-scenegraph: ~4.10.2 vega-statistics: ~1.9.0 vega-time: ~2.1.1 vega-transforms: ~4.10.2 vega-typings: ~0.24.0 vega-util: ~1.17.2 vega-view: ~5.11.1 vega-view-transforms: ~4.5.9 vega-voronoi: ~4.2.1 vega-wordcloud: ~4.1.4 checksum: ddc7b1f2a70c72b842e111d32bdd8ff050992a50e385e8ddc6e35c02e7c481a652383c81c547b7ebfd31cda04ab9f9acf0a8cc47c6bd19b91765b254aac30d24 languageName: node linkType: hard "vscode-jsonrpc@npm:8.1.0, vscode-jsonrpc@npm:^8.0.2": version: 8.1.0 resolution: "vscode-jsonrpc@npm:8.1.0" checksum: 8980037cc0014802e6ac1e5dfcff9a65e8292727096dfd23c92d2039c0c45de74a00d6ee06938cf1a671286dd8258a5f418cf048c26ad0fcb0c44f96c9e0f278 languageName: node linkType: hard "vscode-jsonrpc@npm:^6.0.0": version: 6.0.0 resolution: "vscode-jsonrpc@npm:6.0.0" checksum: 3a67a56f287e8c449f2d9752eedf91e704dc7b9a326f47fb56ac07667631deb45ca52192e9bccb2ab108764e48409d70fa64b930d46fc3822f75270b111c5f53 languageName: node linkType: hard "vscode-languageserver-protocol@npm:^3.17.0": version: 3.17.3 resolution: "vscode-languageserver-protocol@npm:3.17.3" dependencies: vscode-jsonrpc: 8.1.0 vscode-languageserver-types: 3.17.3 checksum: ffea508b2efd7f4853f1cef5e5eac58672f0ae71a9ec275ad37a4a2a24cdc3ff023f941e759951aee01c79da3f3279f10e034f19d875f081eb387181241bd836 languageName: node linkType: hard "vscode-languageserver-types@npm:3.17.3": version: 3.17.3 resolution: "vscode-languageserver-types@npm:3.17.3" checksum: fbc8221297261f659a6482875ff2a419dc9d55965dc53745797da569ff9f819cd832e6f2699017baadd946548bbfe212e3f6971f3d960f12dc0ee9c629dacc07 languageName: node linkType: hard "vscode-ws-jsonrpc@npm:~1.0.2": version: 1.0.2 resolution: "vscode-ws-jsonrpc@npm:1.0.2" dependencies: vscode-jsonrpc: ^8.0.2 checksum: eb2fdb5c96f124326505f06564dfc6584318b748fd6e39b4c0ba16a0d383d13ba0e9433596abdb841428dfc2a5501994c3206723d1cb38c6af5fcac1faf4be26 languageName: node linkType: hard "w3c-keyname@npm:^2.2.4": version: 2.2.8 resolution: "w3c-keyname@npm:2.2.8" checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 languageName: node linkType: hard "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c languageName: node linkType: hard "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" dependencies: tr46: ~0.0.3 webidl-conversions: ^3.0.0 checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c languageName: node linkType: hard "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: isexe: ^2.0.0 bin: node-which: ./bin/node-which checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 languageName: node linkType: hard "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" dependencies: string-width: ^1.0.2 || 2 || 3 || 4 checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 languageName: node linkType: hard "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: ansi-styles: ^4.0.0 string-width: ^4.1.0 strip-ansi: ^6.0.0 checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b languageName: node linkType: hard "wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" dependencies: ansi-styles: ^6.1.0 string-width: ^5.0.1 strip-ansi: ^7.0.1 checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 languageName: node linkType: hard "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 languageName: node linkType: hard "ws@npm:^8.11.0": version: 8.13.0 resolution: "ws@npm:8.13.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c languageName: node linkType: hard "y-protocols@npm:^1.0.5": version: 1.0.5 resolution: "y-protocols@npm:1.0.5" dependencies: lib0: ^0.2.42 checksum: d19404a4ebafcf3761c28b881abe8c32ab6e457db0e5ffc7dbb749cbc2c3bb98e003a43f3e8eba7f245b2698c76f2c4cdd1c2db869f8ec0c6ef94736d9a88652 languageName: node linkType: hard "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 languageName: node linkType: hard "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 languageName: node linkType: hard "yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard "yargs@npm:~17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: cliui: ^8.0.1 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.1.1 checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a languageName: node linkType: hard "yarn-deduplicate@npm:^6.0.1": version: 6.0.2 resolution: "yarn-deduplicate@npm:6.0.2" dependencies: "@yarnpkg/lockfile": ^1.1.0 commander: ^10.0.1 semver: ^7.5.0 tslib: ^2.5.0 bin: yarn-deduplicate: dist/cli.js checksum: 2f6c38deaa1139f3a099069dc946a3800e5ba64410d1c45f516dc381e4b1619f0d4f7ad3b38a617e3a85d629ce42e5592105de7089a0da4d0198881ee5390947 languageName: node linkType: hard "yjs@npm:^13.5.40": version: 13.6.4 resolution: "yjs@npm:13.6.4" dependencies: lib0: ^0.2.74 checksum: 7ca6a6c0b4d15492e8f5a7d57d0264ccf652932b3358323f6316a58eb92f86e2cb5c57b1e8d7f9ebe6689d1aaea7ac7846ff5cfce99ce2ac6a586c0962a3bfe6 languageName: node linkType: hard ipywidgets-8.1.5/yarn.lock000066400000000000000000021722011466162644600155640ustar00rootroot00000000000000# This file is generated by running "yarn install" inside your project. # Manual changes might be lost - proceed with caution! __metadata: version: 6 cacheKey: 8 "@ampproject/remapping@npm:^2.2.0": version: 2.3.0 resolution: "@ampproject/remapping@npm:2.3.0" dependencies: "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.24 checksum: d3ad7b89d973df059c4e8e6d7c972cbeb1bb2f18f002a3bd04ae0707da214cb06cc06929b65aa2313b9347463df2914772298bae8b1d7973f246bb3f2ab3e8f0 languageName: node linkType: hard "@arcanis/slice-ansi@npm:^1.1.1": version: 1.1.1 resolution: "@arcanis/slice-ansi@npm:1.1.1" dependencies: grapheme-splitter: ^1.0.4 checksum: 14ed60cb45750d386c64229ac7bab20e10eedc193503fa4decff764162d329d6d3363ed2cd3debec833186ee54affe4f824f6e8eff531295117fd1ebda200270 languageName: node linkType: hard "@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.2": version: 7.24.2 resolution: "@babel/code-frame@npm:7.24.2" dependencies: "@babel/highlight": ^7.24.2 picocolors: ^1.0.0 checksum: 70e867340cfe09ca5488b2f36372c45cabf43c79a5b6426e6df5ef0611ff5dfa75a57dda841895693de6008f32c21a7c97027a8c7bcabd63a7d17416cbead6f8 languageName: node linkType: hard "@babel/compat-data@npm:^7.23.5": version: 7.24.4 resolution: "@babel/compat-data@npm:7.24.4" checksum: 52ce371658dc7796c9447c9cb3b9c0659370d141b76997f21c5e0028cca4d026ca546b84bc8d157ce7ca30bd353d89f9238504eb8b7aefa9b1f178b4c100c2d4 languageName: node linkType: hard "@babel/core@npm:^7.12.3": version: 7.24.5 resolution: "@babel/core@npm:7.24.5" dependencies: "@ampproject/remapping": ^2.2.0 "@babel/code-frame": ^7.24.2 "@babel/generator": ^7.24.5 "@babel/helper-compilation-targets": ^7.23.6 "@babel/helper-module-transforms": ^7.24.5 "@babel/helpers": ^7.24.5 "@babel/parser": ^7.24.5 "@babel/template": ^7.24.0 "@babel/traverse": ^7.24.5 "@babel/types": ^7.24.5 convert-source-map: ^2.0.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 checksum: f4f0eafde12b145f2cb9cc893085e5f1436e1ef265bb3b7d8aa6282515c9b4e740bbd5e2cbc32114adb9afed2dd62c2336758b9fabb7e46e8ba542f76d4f3f80 languageName: node linkType: hard "@babel/generator@npm:^7.24.5": version: 7.24.5 resolution: "@babel/generator@npm:7.24.5" dependencies: "@babel/types": ^7.24.5 "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 jsesc: ^2.5.1 checksum: a08c0ab900b36e1a17863e18e3216153322ea993246fd7a358ba38a31cfb15bab2af1dc178b2adafe4cb8a9f3ab0e0ceafd3fe6e8ca870dffb435b53b2b2a803 languageName: node linkType: hard "@babel/helper-compilation-targets@npm:^7.23.6": version: 7.23.6 resolution: "@babel/helper-compilation-targets@npm:7.23.6" dependencies: "@babel/compat-data": ^7.23.5 "@babel/helper-validator-option": ^7.23.5 browserslist: ^4.22.2 lru-cache: ^5.1.1 semver: ^6.3.1 checksum: c630b98d4527ac8fe2c58d9a06e785dfb2b73ec71b7c4f2ddf90f814b5f75b547f3c015f110a010fd31f76e3864daaf09f3adcd2f6acdbfb18a8de3a48717590 languageName: node linkType: hard "@babel/helper-environment-visitor@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-environment-visitor@npm:7.22.20" checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 languageName: node linkType: hard "@babel/helper-function-name@npm:^7.23.0": version: 7.23.0 resolution: "@babel/helper-function-name@npm:7.23.0" dependencies: "@babel/template": ^7.22.15 "@babel/types": ^7.23.0 checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 languageName: node linkType: hard "@babel/helper-hoist-variables@npm:^7.22.5": version: 7.22.5 resolution: "@babel/helper-hoist-variables@npm:7.22.5" dependencies: "@babel/types": ^7.22.5 checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc languageName: node linkType: hard "@babel/helper-module-imports@npm:^7.24.3": version: 7.24.3 resolution: "@babel/helper-module-imports@npm:7.24.3" dependencies: "@babel/types": ^7.24.0 checksum: c23492189ba97a1ec7d37012336a5661174e8b88194836b6bbf90d13c3b72c1db4626263c654454986f924c6da8be7ba7f9447876d709cd00bd6ffde6ec00796 languageName: node linkType: hard "@babel/helper-module-transforms@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-module-transforms@npm:7.24.5" dependencies: "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-module-imports": ^7.24.3 "@babel/helper-simple-access": ^7.24.5 "@babel/helper-split-export-declaration": ^7.24.5 "@babel/helper-validator-identifier": ^7.24.5 peerDependencies: "@babel/core": ^7.0.0 checksum: 208c2e3877536c367ae3f39345bb5c5954ad481fdb2204d4d1906063e53ae564e5b7b846951b1aa96ee716ec24ec3b6db01b41d128884c27315b415f62db9fd2 languageName: node linkType: hard "@babel/helper-simple-access@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-simple-access@npm:7.24.5" dependencies: "@babel/types": ^7.24.5 checksum: 5616044603c98434342f09b056c869394acdeba7cd9ec29e6a9abb0dae1922f779d364aaba74dc2ae4facf85945c6156295adbe0511a8aaecaa8a1559d14757a languageName: node linkType: hard "@babel/helper-split-export-declaration@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-split-export-declaration@npm:7.24.5" dependencies: "@babel/types": ^7.24.5 checksum: f23ab6942568084a57789462ce55dc9631aef1d2142ffa2ee28fc411ab55ed3ca65adf109e48655aa349bf8df7ca6dd81fd91c8c229fee1dc77e283189dc83c2 languageName: node linkType: hard "@babel/helper-string-parser@npm:^7.24.1": version: 7.24.1 resolution: "@babel/helper-string-parser@npm:7.24.1" checksum: 8404e865b06013979a12406aab4c0e8d2e377199deec09dfe9f57b833b0c9ce7b6e8c1c553f2da8d0bcd240c5005bd7a269f4fef0d628aeb7d5fe035c436fb67 languageName: node linkType: hard "@babel/helper-validator-identifier@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helper-validator-identifier@npm:7.24.5" checksum: 75d6f9f475c08f3be87bae4953e9b8d8c72983e16ed2860870b328d048cb20dccb4fcbf85eacbdd817ea1efbb38552a6db9046e2e37bfe13bdec44ac8939024c languageName: node linkType: hard "@babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e languageName: node linkType: hard "@babel/helpers@npm:^7.24.5": version: 7.24.5 resolution: "@babel/helpers@npm:7.24.5" dependencies: "@babel/template": ^7.24.0 "@babel/traverse": ^7.24.5 "@babel/types": ^7.24.5 checksum: 941937456ca50ef44dbc5cdcb9a74c6ce18ce38971663acd80b622e7ecf1cc4fa034597de3ccccc37939d324139f159709f493fd8e7c385adbc162cb0888cfee languageName: node linkType: hard "@babel/highlight@npm:^7.24.2": version: 7.24.5 resolution: "@babel/highlight@npm:7.24.5" dependencies: "@babel/helper-validator-identifier": ^7.24.5 chalk: ^2.4.2 js-tokens: ^4.0.0 picocolors: ^1.0.0 checksum: eece0e63e9210e902f1ee88f15cabfa31d2693bd2e56806eb849478b859d274c24477081c649cee6a241c4aed7da6f3e05c7afa5c3cd70094006ed095292b0d0 languageName: node linkType: hard "@babel/parser@npm:^7.14.7, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.5": version: 7.24.5 resolution: "@babel/parser@npm:7.24.5" bin: parser: ./bin/babel-parser.js checksum: a251ea41bf8b5f61048beb320d43017aff68af5a3506bd2ef392180f5fa32c1061513171d582bb3d46ea48e3659dece8b3ba52511a2566066e58abee300ce2a0 languageName: node linkType: hard "@babel/runtime@npm:^7.15.4": version: 7.24.5 resolution: "@babel/runtime@npm:7.24.5" dependencies: regenerator-runtime: ^0.14.0 checksum: 755383192f3ac32ba4c62bd4f1ae92aed5b82d2c6665f39eb28fa94546777cf5c63493ea92dd03f1c2e621b17e860f190c056684b7f234270fdc91e29beda063 languageName: node linkType: hard "@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0": version: 7.24.0 resolution: "@babel/template@npm:7.24.0" dependencies: "@babel/code-frame": ^7.23.5 "@babel/parser": ^7.24.0 "@babel/types": ^7.24.0 checksum: f257b003c071a0cecdbfceca74185f18fe62c055469ab5c1d481aab12abeebed328e67e0a19fd978a2a8de97b28953fa4bc3da6d038a7345fdf37923b9fcdec8 languageName: node linkType: hard "@babel/traverse@npm:^7.24.5": version: 7.24.5 resolution: "@babel/traverse@npm:7.24.5" dependencies: "@babel/code-frame": ^7.24.2 "@babel/generator": ^7.24.5 "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-function-name": ^7.23.0 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.24.5 "@babel/parser": ^7.24.5 "@babel/types": ^7.24.5 debug: ^4.3.1 globals: ^11.1.0 checksum: a313fbf4a06946cc4b74b06e9846d7393a9ca1e8b6df6da60c669cff0a9426d6198c21a478041c60807b62b48f980473d4afbd3768764b0d9741ac80f5dfa04f languageName: node linkType: hard "@babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.24.5, @babel/types@npm:^7.8.3": version: 7.24.5 resolution: "@babel/types@npm:7.24.5" dependencies: "@babel/helper-string-parser": ^7.24.1 "@babel/helper-validator-identifier": ^7.24.5 to-fast-properties: ^2.0.0 checksum: 8eeeacd996593b176e649ee49d8dc3f26f9bb6aa1e3b592030e61a0e58ea010fb018dccc51e5314c8139409ea6cbab02e29b33e674e1f6962d8e24c52da6375b languageName: node linkType: hard "@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.15.0, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.7.1": version: 6.16.0 resolution: "@codemirror/autocomplete@npm:6.16.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.17.0 "@lezer/common": ^1.0.0 peerDependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 checksum: e33d3d8c961c03dc4a70d1ac6f01aee5362d778da9d873a8335aed47f7de9430eab083589736e7922464b941d5da23c51ab6af05400413a8d1a07604ffcb99f7 languageName: node linkType: hard "@codemirror/commands@npm:^6.3.3": version: 6.5.0 resolution: "@codemirror/commands@npm:6.5.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.4.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.1.0 checksum: 27e49c5e0cb918b95d6a9f741bcc0e72cb76f963b0c829308edfb4491a37d8b12ae6fb96f9f1886b3189a22c82fec4434fbe65547dc3cd3e8dfb5222dfead2e7 languageName: node linkType: hard "@codemirror/lang-cpp@npm:^6.0.2": version: 6.0.2 resolution: "@codemirror/lang-cpp@npm:6.0.2" dependencies: "@codemirror/language": ^6.0.0 "@lezer/cpp": ^1.0.0 checksum: bb9eba482cca80037ce30c7b193cf45eff19ccbb773764fddf2071756468ecc25aa53c777c943635054f89095b0247b9b50c339e107e41e68d34d12a7295f9a9 languageName: node linkType: hard "@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.2.1": version: 6.2.1 resolution: "@codemirror/lang-css@npm:6.2.1" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@lezer/common": ^1.0.2 "@lezer/css": ^1.0.0 checksum: 5a8457ee8a4310030a969f2d3128429f549c4dc9b7907ee8888b42119c80b65af99093801432efdf659b8ec36a147d2a947bc1ecbbf69a759395214e3f4834a8 languageName: node linkType: hard "@codemirror/lang-html@npm:^6.0.0, @codemirror/lang-html@npm:^6.4.8": version: 6.4.9 resolution: "@codemirror/lang-html@npm:6.4.9" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/lang-css": ^6.0.0 "@codemirror/lang-javascript": ^6.0.0 "@codemirror/language": ^6.4.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.17.0 "@lezer/common": ^1.0.0 "@lezer/css": ^1.1.0 "@lezer/html": ^1.3.0 checksum: ac8c3ceb0396f2e032752c5079bd950124dca708bc64e96fc147dc5fe7133e5cee0814fe951abdb953ec1d11fa540e4b30a712b5149d9a36016a197a28de45d7 languageName: node linkType: hard "@codemirror/lang-java@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-java@npm:6.0.1" dependencies: "@codemirror/language": ^6.0.0 "@lezer/java": ^1.0.0 checksum: 4679104683cbffcd224ac04c7e5d144b787494697b26470b07017259035b7bb3fa62609d9a61bfbc566f1756d9f972f9f26d96a3c1362dd48881c1172f9a914d languageName: node linkType: hard "@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.2.2": version: 6.2.2 resolution: "@codemirror/lang-javascript@npm:6.2.2" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.6.0 "@codemirror/lint": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.17.0 "@lezer/common": ^1.0.0 "@lezer/javascript": ^1.0.0 checksum: 66379942a8347dff2bd76d10ed7cf313bca83872f8336fdd3e14accfef23e7b690cd913c9d11a3854fba2b32299da07fc3275995327642c9ee43c2a8e538c19d languageName: node linkType: hard "@codemirror/lang-json@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-json@npm:6.0.1" dependencies: "@codemirror/language": ^6.0.0 "@lezer/json": ^1.0.0 checksum: e9e87d50ff7b81bd56a6ab50740b1dd54e9a93f1be585e1d59d0642e2148842ea1528ac7b7221eb4ddc7fe84bbc28065144cc3ab86f6e06c6aeb2d4b4e62acf1 languageName: node linkType: hard "@codemirror/lang-markdown@npm:^6.2.4": version: 6.2.5 resolution: "@codemirror/lang-markdown@npm:6.2.5" dependencies: "@codemirror/autocomplete": ^6.7.1 "@codemirror/lang-html": ^6.0.0 "@codemirror/language": ^6.3.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.2.1 "@lezer/markdown": ^1.0.0 checksum: 3d9e0817f888eddcb6d05ec8f0d8dacbde7b9ef7650303bc4ab8b08a550a986c60c65b1565212e06af389c31590330f1f5ed65e619a9446dc2979ff3dac0e874 languageName: node linkType: hard "@codemirror/lang-php@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-php@npm:6.0.1" dependencies: "@codemirror/lang-html": ^6.0.0 "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@lezer/common": ^1.0.0 "@lezer/php": ^1.0.0 checksum: c003a29a426486453fdfddbf7302982fa2aa7f059bf6f1ce4cbf08341b0162eee5e2f50e0d71c418dcd358491631780156d846fe352754d042576172c5d86721 languageName: node linkType: hard "@codemirror/lang-python@npm:^6.1.4": version: 6.1.6 resolution: "@codemirror/lang-python@npm:6.1.6" dependencies: "@codemirror/autocomplete": ^6.3.2 "@codemirror/language": ^6.8.0 "@codemirror/state": ^6.0.0 "@lezer/common": ^1.2.1 "@lezer/python": ^1.1.4 checksum: eb1faabd332bb95d0f3e227eb19ac5a31140cf238905bbe73e061040999f5680a012f9145fb3688bc2fcbb1908c957511edc8eeb8a9aa88d27d4fa55ad451e95 languageName: node linkType: hard "@codemirror/lang-rust@npm:^6.0.1": version: 6.0.1 resolution: "@codemirror/lang-rust@npm:6.0.1" dependencies: "@codemirror/language": ^6.0.0 "@lezer/rust": ^1.0.0 checksum: 8a439944cb22159b0b3465ca4fa4294c69843219d5d30e278ae6df8e48f30a7a9256129723c025ec9b5e694d31a3560fb004300b125ffcd81c22d13825845170 languageName: node linkType: hard "@codemirror/lang-sql@npm:^6.6.1": version: 6.6.4 resolution: "@codemirror/lang-sql@npm:6.6.4" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: ae7c498d08c118d8f1751c28d12c54f45cacd589f6adb56216d44eb14abc0e436dcefe675d50bd02a242426327384cbcafa8c35098aa63384570a33c4cf27038 languageName: node linkType: hard "@codemirror/lang-wast@npm:^6.0.2": version: 6.0.2 resolution: "@codemirror/lang-wast@npm:6.0.2" dependencies: "@codemirror/language": ^6.0.0 "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 72119d4a7d726c54167aa227c982ae9fa785c8ad97a158d8350ae95eecfbd8028a803eef939f7e6c5c6e626fcecda1dc37e9dffc6d5d6ec105f686aeda6b2c24 languageName: node linkType: hard "@codemirror/lang-xml@npm:^6.1.0": version: 6.1.0 resolution: "@codemirror/lang-xml@npm:6.1.0" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/language": ^6.4.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 "@lezer/xml": ^1.0.0 checksum: 3a1b7af07b29ad7e53b77bf584245580b613bc92256059f175f2b1d7c28c4e39b75654fe169b9a8a330a60164b53ff5254bdb5b8ee8c6e6766427ee115c4e229 languageName: node linkType: hard "@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.10.1, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0": version: 6.10.1 resolution: "@codemirror/language@npm:6.10.1" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.23.0 "@lezer/common": ^1.1.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 style-mod: ^4.0.0 checksum: 453bbe122a84795752f29261412b69a8dcfdd7e4369eb7e112bffba36b9e527ad21adff1d3845e0dc44c9ab44eb0c6f823eb6ba790ddd00cc749847574eda779 languageName: node linkType: hard "@codemirror/legacy-modes@npm:^6.3.3": version: 6.4.0 resolution: "@codemirror/legacy-modes@npm:6.4.0" dependencies: "@codemirror/language": ^6.0.0 checksum: d382aa6f640a67418bd209e1e4b395340f96aac1b0cf185927fc2c7f98b62cfd0c59ef0f7048148ce8771622003ca844c78c2d18548235ecc57d0bcbfbbfe091 languageName: node linkType: hard "@codemirror/lint@npm:^6.0.0": version: 6.8.0 resolution: "@codemirror/lint@npm:6.8.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 checksum: 233adfc8a72906ec504ad35ebaff32dc2458b9f435219febbfc8504eee842032895fcdcb33ad6dd45cc36509456d5db06618602f14dfe1052aaa2b0e08765ee5 languageName: node linkType: hard "@codemirror/search@npm:^6.5.6": version: 6.5.6 resolution: "@codemirror/search@npm:6.5.6" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 checksum: 19dc88d09fc750563347001e83c6194bbb2a25c874bd919d2d81809e1f98d6330222ddbd284aa9758a09eeb41fd153ec7c2cf810b2ee51452c25963d7f5833d5 languageName: node linkType: hard "@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.4.0, @codemirror/state@npm:^6.4.1": version: 6.4.1 resolution: "@codemirror/state@npm:6.4.1" checksum: b81b55574091349eed4d32fc0eadb0c9688f1f7c98b681318f59138ee0f527cb4c4a97831b70547c0640f02f3127647838ae6730782de4a3dd2cc58836125d01 languageName: node linkType: hard "@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.26.0": version: 6.26.3 resolution: "@codemirror/view@npm:6.26.3" dependencies: "@codemirror/state": ^6.4.0 style-mod: ^4.1.0 w3c-keyname: ^2.2.4 checksum: fdee35fb5e0bbba7b6f1a9b43a865880911bbfafd30360da5dda21b35f81ba2d080ff66b6c3d94dbe946b6b7ec98a76208786360b8f030ef10bcb054b816de05 languageName: node linkType: hard "@colors/colors@npm:1.5.0": version: 1.5.0 resolution: "@colors/colors@npm:1.5.0" checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425 languageName: node linkType: hard "@cypress/request@npm:3.0.1": version: 3.0.1 resolution: "@cypress/request@npm:3.0.1" dependencies: aws-sign2: ~0.7.0 aws4: ^1.8.0 caseless: ~0.12.0 combined-stream: ~1.0.6 extend: ~3.0.2 forever-agent: ~0.6.1 form-data: ~2.3.2 http-signature: ~1.3.6 is-typedarray: ~1.0.0 isstream: ~0.1.2 json-stringify-safe: ~5.0.1 mime-types: ~2.1.19 performance-now: ^2.1.0 qs: 6.10.4 safe-buffer: ^5.1.2 tough-cookie: ^4.1.3 tunnel-agent: ^0.6.0 uuid: ^8.3.2 checksum: 7175522ebdbe30e3c37973e204c437c23ce659e58d5939466615bddcd58d778f3a8ea40f087b965ae8b8138ea8d102b729c6eb18c6324f121f3778f4a2e8e727 languageName: node linkType: hard "@discoveryjs/json-ext@npm:^0.5.0": version: 0.5.7 resolution: "@discoveryjs/json-ext@npm:0.5.7" checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 languageName: node linkType: hard "@eslint-community/eslint-utils@npm:^4.2.0": version: 4.4.0 resolution: "@eslint-community/eslint-utils@npm:4.4.0" dependencies: eslint-visitor-keys: ^3.3.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 languageName: node linkType: hard "@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": version: 4.10.0 resolution: "@eslint-community/regexpp@npm:4.10.0" checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b languageName: node linkType: hard "@eslint/eslintrc@npm:^2.1.4": version: 2.1.4 resolution: "@eslint/eslintrc@npm:2.1.4" dependencies: ajv: ^6.12.4 debug: ^4.3.2 espree: ^9.6.0 globals: ^13.19.0 ignore: ^5.2.0 import-fresh: ^3.2.1 js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 languageName: node linkType: hard "@eslint/js@npm:8.57.0": version: 8.57.0 resolution: "@eslint/js@npm:8.57.0" checksum: 315dc65b0e9893e2bff139bddace7ea601ad77ed47b4550e73da8c9c2d2766c7a575c3cddf17ef85b8fd6a36ff34f91729d0dcca56e73ca887c10df91a41b0bb languageName: node linkType: hard "@fortawesome/fontawesome-free@npm:^5.12.0": version: 5.15.4 resolution: "@fortawesome/fontawesome-free@npm:5.15.4" checksum: 32281c3df4075290d9a96dfc22f72fadb3da7055d4117e48d34046b8c98032a55fa260ae351b0af5d6f6fb57a2f5d79a4abe52af456da35195f7cb7dda27b4a2 languageName: node linkType: hard "@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 languageName: node linkType: hard "@humanwhocodes/config-array@npm:^0.11.14": version: 0.11.14 resolution: "@humanwhocodes/config-array@npm:0.11.14" dependencies: "@humanwhocodes/object-schema": ^2.0.2 debug: ^4.3.1 minimatch: ^3.0.5 checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 languageName: node linkType: hard "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 languageName: node linkType: hard "@humanwhocodes/object-schema@npm:^2.0.2": version: 2.0.3 resolution: "@humanwhocodes/object-schema@npm:2.0.3" checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 languageName: node linkType: hard "@hutson/parse-repository-url@npm:^3.0.0": version: 3.0.2 resolution: "@hutson/parse-repository-url@npm:3.0.2" checksum: 39992c5f183c5ca3d761d6ed9dfabcb79b5f3750bf1b7f3532e1dc439ca370138bbd426ee250fdaba460bc948e6761fbefd484b8f4f36885d71ded96138340d1 languageName: node linkType: hard "@inquirer/figures@npm:^1.0.2": version: 1.0.2 resolution: "@inquirer/figures@npm:1.0.2" checksum: 66a2bb9931adf622d2497d1c0c4703ce31a9ee95f1d0da89c724dc0daea4b4b398ac0536fc41f04a5d3f9d7c9c2f4422a368399388e998147a72487c997e3fb3 languageName: node linkType: hard "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" dependencies: string-width: ^5.1.2 string-width-cjs: "npm:string-width@^4.2.0" strip-ansi: ^7.0.1 strip-ansi-cjs: "npm:strip-ansi@^6.0.1" wrap-ansi: ^8.1.0 wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb languageName: node linkType: hard "@isaacs/string-locale-compare@npm:^1.1.0": version: 1.1.0 resolution: "@isaacs/string-locale-compare@npm:1.1.0" checksum: 7287da5d11497b82c542d3c2abe534808015be4f4883e71c26853277b5456f6bbe4108535db847a29f385ad6dc9318ffb0f55ee79bb5f39993233d7dccf8751d languageName: node linkType: hard "@istanbuljs/schema@npm:^0.1.2": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 languageName: node linkType: hard "@jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.5 resolution: "@jridgewell/gen-mapping@npm:0.3.5" dependencies: "@jridgewell/set-array": ^1.2.1 "@jridgewell/sourcemap-codec": ^1.4.10 "@jridgewell/trace-mapping": ^0.3.24 checksum: ff7a1764ebd76a5e129c8890aa3e2f46045109dabde62b0b6c6a250152227647178ff2069ea234753a690d8f3c4ac8b5e7b267bbee272bffb7f3b0a370ab6e52 languageName: node linkType: hard "@jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" checksum: 83b85f72c59d1c080b4cbec0fef84528963a1b5db34e4370fa4bd1e3ff64a0d80e0cee7369d11d73c704e0286fb2865b530acac7a871088fbe92b5edf1000870 languageName: node linkType: hard "@jridgewell/set-array@npm:^1.2.1": version: 1.2.1 resolution: "@jridgewell/set-array@npm:1.2.1" checksum: 832e513a85a588f8ed4f27d1279420d8547743cc37fcad5a5a76fc74bb895b013dfe614d0eed9cb860048e6546b798f8f2652020b4b2ba0561b05caa8c654b10 languageName: node linkType: hard "@jridgewell/source-map@npm:^0.3.3": version: 0.3.6 resolution: "@jridgewell/source-map@npm:0.3.6" dependencies: "@jridgewell/gen-mapping": ^0.3.5 "@jridgewell/trace-mapping": ^0.3.25 checksum: c9dc7d899397df95e3c9ec287b93c0b56f8e4453cd20743e2b9c8e779b1949bc3cccf6c01bb302779e46560eb45f62ea38d19fedd25370d814734268450a9f30 languageName: node linkType: hard "@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": version: 1.4.15 resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 languageName: node linkType: hard "@jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: "@jridgewell/resolve-uri": ^3.1.0 "@jridgewell/sourcemap-codec": ^1.4.14 checksum: 9d3c40d225e139987b50c48988f8717a54a8c994d8a948ee42e1412e08988761d0754d7d10b803061cc3aebf35f92a5dbbab493bd0e1a9ef9e89a2130e83ba34 languageName: node linkType: hard "@jupyter-widgets/base-manager@^1.0.10, @jupyter-widgets/base-manager@workspace:packages/base-manager": version: 0.0.0-use.local resolution: "@jupyter-widgets/base-manager@workspace:packages/base-manager" dependencies: "@jupyter-widgets/base": ^6.0.9 "@jupyterlab/services": ^6.0.0 || ^7.0.0 "@lumino/coreutils": ^1.11.1 || ^2 "@types/base64-js": ^1.2.5 "@types/chai": ^4.1.7 "@types/chai-as-promised": ^7.1.0 "@types/expect.js": ^0.3.29 "@types/mocha": ^9.0.0 "@types/sanitize-html": ^2.6.0 "@types/sinon": ^10.0.2 "@types/sinon-chai": ^3.2.2 base64-js: ^1.2.1 chai: ^4.0.0 chai-as-promised: ^7.0.0 expect.js: ^0.3.1 istanbul-instrumenter-loader: ^3.0.1 karma: ^6.3.3 karma-chrome-launcher: ^3.1.0 karma-coverage: ^2.0.3 karma-firefox-launcher: ^2.1.1 karma-ie-launcher: ^1.0.0 karma-mocha: ^2.0.1 karma-mocha-reporter: ^2.2.5 karma-webpack: ^5.0.0 mocha: ^9.0.0 npm-run-all: ^4.1.5 rimraf: ^3.0.2 sanitize-html: ^2.3 sinon: ^12.0.1 sinon-chai: ^3.3.0 typescript: ~4.9.4 webpack: ^5.65.0 languageName: unknown linkType: soft "@jupyter-widgets/base7@npm:@jupyter-widgets/base@4.1.6, @jupyter-widgets/base@npm:^4.1.6": version: 4.1.6 resolution: "@jupyter-widgets/base@npm:4.1.6" dependencies: "@jupyterlab/services": ^6.0.0 "@lumino/coreutils": ^1.2.0 "@lumino/messaging": ^1.2.1 "@lumino/widgets": ^1.3.0 "@types/backbone": ^1.4.1 "@types/lodash": ^4.14.134 backbone: 1.2.3 base64-js: ^1.2.1 jquery: ^3.1.1 lodash: ^4.17.4 checksum: cdd11e8fd480a44b9e9f5a37529361c407456d9e2d2a09f35b8f067b65e915c132aaaaab8d8523f3c8c624e3403215d6eb56a21337f57213b75ebb377a26c208 languageName: node linkType: hard "@jupyter-widgets/base@^6.0.9, @jupyter-widgets/base@workspace:packages/base": version: 0.0.0-use.local resolution: "@jupyter-widgets/base@workspace:packages/base" dependencies: "@jupyterlab/services": ^6.0.0 || ^7.0.0 "@lumino/coreutils": ^1.11.1 || ^2.1 "@lumino/messaging": ^1.10.1 || ^2.1 "@lumino/widgets": ^1.30.0 || ^2.1 "@types/backbone": 1.4.14 "@types/base64-js": ^1.2.5 "@types/chai": ^4.1.7 "@types/chai-as-promised": ^7.1.0 "@types/expect.js": ^0.3.29 "@types/jquery": ^3.5.16 "@types/lodash": ^4.14.134 "@types/mocha": ^9.0.0 "@types/sinon": ^10.0.2 "@types/sinon-chai": ^3.2.2 backbone: 1.4.0 chai: ^4.0.0 chai-as-promised: ^7.0.0 expect.js: ^0.3.1 istanbul-instrumenter-loader: ^3.0.1 jquery: ^3.1.1 karma: ^6.3.3 karma-chrome-launcher: ^3.1.0 karma-coverage: ^2.0.3 karma-firefox-launcher: ^2.1.1 karma-ie-launcher: ^1.0.0 karma-mocha: ^2.0.1 karma-mocha-reporter: ^2.2.5 karma-webpack: ^5.0.0 lodash: ^4.17.4 mocha: ^9.0.0 npm-run-all: ^4.1.5 rimraf: ^3.0.2 sinon: ^12.0.1 sinon-chai: ^3.3.0 typescript: ~4.9.4 webpack: ^5.65.0 languageName: unknown linkType: soft "@jupyter-widgets/controls7@npm:@jupyter-widgets/controls@3.1.6": version: 3.1.6 resolution: "@jupyter-widgets/controls@npm:3.1.6" dependencies: "@jupyter-widgets/base": ^4.1.6 "@lumino/algorithm": ^1.1.0 "@lumino/domutils": ^1.1.0 "@lumino/messaging": ^1.2.1 "@lumino/signaling": ^1.2.0 "@lumino/widgets": ^1.3.0 d3-format: ^1.3.0 jquery: ^3.1.1 jquery-ui: ^1.12.1 underscore: ^1.8.3 checksum: 9c69ebe9ce22d7e7cf3cd66dc849505c1433da4424d8daa7411d85f41027d5600c20c2350d703fe582fd44a4b5d11ad8b404fe058b686f17cd47bafd41547646 languageName: node linkType: hard "@jupyter-widgets/controls@^5.0.10, @jupyter-widgets/controls@workspace:packages/controls": version: 0.0.0-use.local resolution: "@jupyter-widgets/controls@workspace:packages/controls" dependencies: "@jupyter-widgets/base": ^6.0.9 "@jupyterlab/services": ^6.0.0 || ^7.0.0 "@lumino/algorithm": ^1.9.1 || ^2.1 "@lumino/domutils": ^1.8.1 || ^2.1 "@lumino/messaging": ^1.10.1 || ^2.1 "@lumino/signaling": ^1.10.1 || ^2.1 "@lumino/widgets": ^1.30.0 || ^2.1 "@types/d3-color": ^3.0.2 "@types/d3-format": ^3.0.1 "@types/expect.js": ^0.3.29 "@types/jquery": ^3.5.16 "@types/mathjax": ^0.0.37 "@types/mocha": ^9.0.0 "@types/node": ^17.0.2 chai: ^4.0.0 css-loader: ^6.5.1 d3-color: ^3.0.1 d3-format: ^3.0.1 expect.js: ^0.3.1 istanbul-instrumenter-loader: ^3.0.1 jquery: ^3.1.1 karma: ^6.3.3 karma-chrome-launcher: ^3.1.0 karma-coverage: ^2.0.3 karma-firefox-launcher: ^2.1.1 karma-ie-launcher: ^1.0.0 karma-mocha: ^2.0.1 karma-mocha-reporter: ^2.2.5 karma-webpack: ^5.0.0 less: ^4.1.2 mocha: ^9.0.0 nouislider: 15.4.0 npm-run-all: ^4.1.5 postcss: ^8.3.2 postcss-cli: ^9.1.0 postcss-cssnext: ^3.1.0 postcss-import: ^14.0.2 postcss-loader: ^6.1.0 rimraf: ^3.0.2 sinon: ^12.0.1 sinon-chai: ^3.3.0 style-loader: ^3.3.1 typescript: ~4.9.4 webpack: ^5.65.0 languageName: unknown linkType: soft "@jupyter-widgets/example-web1@workspace:examples/web1": version: 0.0.0-use.local resolution: "@jupyter-widgets/example-web1@workspace:examples/web1" dependencies: "@jupyter-widgets/base": ^6.0.9 "@jupyter-widgets/base-manager": ^1.0.10 "@jupyter-widgets/controls": ^5.0.10 chai: ^4.0.0 css-loader: ^6.5.1 karma: ^6.3.3 karma-chai: ^0.1.0 karma-chrome-launcher: ^3.1.0 karma-firefox-launcher: ^2.1.1 karma-mocha: ^2.0.1 karma-mocha-reporter: ^2.2.5 mocha: ^9.0.0 style-loader: ^3.3.1 webpack: ^5.65.0 languageName: unknown linkType: soft "@jupyter-widgets/example-web2@workspace:examples/web2": version: 0.0.0-use.local resolution: "@jupyter-widgets/example-web2@workspace:examples/web2" dependencies: "@jupyter-widgets/base": ^6.0.9 "@jupyter-widgets/base-manager": ^1.0.10 "@jupyter-widgets/controls": ^5.0.10 codemirror: ^5.48.0 css-loader: ^6.5.1 font-awesome: ^4.7.0 style-loader: ^3.3.1 webpack: ^5.65.0 languageName: unknown linkType: soft "@jupyter-widgets/example-web3@workspace:examples/web3": version: 0.0.0-use.local resolution: "@jupyter-widgets/example-web3@workspace:examples/web3" dependencies: "@jupyter-widgets/base": ^6.0.9 "@jupyter-widgets/controls": ^5.0.10 "@jupyter-widgets/html-manager": ^1.0.12 "@jupyterlab/services": ^6.0.0 || ^7.0.0 "@types/codemirror": ^5.60.0 "@types/node": ^17.0.2 codemirror: ^5.48.0 css-loader: ^6.5.1 font-awesome: ^4.7.0 fs-extra: ^10.0.0 http-server: ^14.0.0 rimraf: ^3.0.2 style-loader: ^3.3.1 typescript: ~4.9.4 webpack: ^5.65.0 languageName: unknown linkType: soft "@jupyter-widgets/example-web4@workspace:examples/web4": version: 0.0.0-use.local resolution: "@jupyter-widgets/example-web4@workspace:examples/web4" dependencies: "@jupyter-widgets/html-manager": ^1.0.12 css-loader: ^6.5.1 font-awesome: ^4.7.0 style-loader: ^3.3.1 webpack: ^5.65.0 languageName: unknown linkType: soft "@jupyter-widgets/html-manager@^1.0.12, @jupyter-widgets/html-manager@workspace:packages/html-manager": version: 0.0.0-use.local resolution: "@jupyter-widgets/html-manager@workspace:packages/html-manager" dependencies: "@fortawesome/fontawesome-free": ^5.12.0 "@jupyter-widgets/base": ^6.0.9 "@jupyter-widgets/base-manager": ^1.0.10 "@jupyter-widgets/base7": "npm:@jupyter-widgets/base@4.1.6" "@jupyter-widgets/controls": ^5.0.10 "@jupyter-widgets/controls7": "npm:@jupyter-widgets/controls@3.1.6" "@jupyter-widgets/output": ^6.0.9 "@jupyter-widgets/schema": ^0.5.6 "@jupyterlab/outputarea": ^3.0.0 || ^4.0.0 "@jupyterlab/rendermime": ^3.0.0 || ^4.0.0 "@jupyterlab/rendermime-interfaces": ^3.0.0 || ^4.0.0 "@lumino/messaging": ^1.10.1 || ^2.1 "@lumino/widgets": ^1.30.0 || ^2.1 "@types/jquery": ^3.5.16 "@types/mocha": ^9.0.0 "@types/node": ^17.0.2 "@types/sanitize-html": ^2.6.0 ajv: ^8.6.0 chai: ^4.0.0 css-loader: ^6.5.1 jquery: ^3.1.1 karma: ^6.3.3 karma-chrome-launcher: ^3.1.0 karma-firefox-launcher: ^2.1.1 karma-ie-launcher: ^1.0.0 karma-mocha: ^2.0.1 karma-mocha-reporter: ^2.2.5 mocha: ^9.0.0 postcss: ^8.3.2 postcss-cssnext: ^3.1.0 postcss-import: ^14.0.2 postcss-loader: ^6.1.0 rimraf: ^3.0.2 semver: ^7.3.5 style-loader: ^3.3.1 typescript: ~4.9.4 webpack: ^5.65.0 webpack-cli: ^4.7.2 languageName: unknown linkType: soft "@jupyter-widgets/jupyterlab-manager@workspace:python/jupyterlab_widgets": version: 0.0.0-use.local resolution: "@jupyter-widgets/jupyterlab-manager@workspace:python/jupyterlab_widgets" dependencies: "@jupyter-widgets/base": ^6.0.9 "@jupyter-widgets/base-manager": ^1.0.10 "@jupyter-widgets/controls": ^5.0.10 "@jupyter-widgets/output": ^6.0.9 "@jupyterlab/application": ^3.0.0 || ^4.0.0 "@jupyterlab/apputils": ^3.0.0 || ^4.0.0 "@jupyterlab/builder": ^3.0.0 || ^4.0.0 "@jupyterlab/cells": ^3.0.0 || ^4.0.0 "@jupyterlab/console": ^3.0.0 || ^4.0.0 "@jupyterlab/docregistry": ^3.0.0 || ^4.0.0 "@jupyterlab/logconsole": ^3.0.0 || ^4.0.0 "@jupyterlab/mainmenu": ^3.0.0 || ^4.0.0 "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0 "@jupyterlab/notebook": ^3.0.0 || ^4.0.0 "@jupyterlab/outputarea": ^3.0.0 || ^4.0.0 "@jupyterlab/rendermime": ^3.0.0 || ^4.0.0 "@jupyterlab/rendermime-interfaces": ^3.0.0 || ^4.0.0 "@jupyterlab/services": ^6.0.0 || ^7.0.0 "@jupyterlab/settingregistry": ^3.0.0 || ^4.0.0 "@jupyterlab/translation": ^3.0.0 || ^4.0.0 "@lumino/algorithm": ^1.11.1 || ^2.0.0 "@lumino/coreutils": ^1.11.1 || ^2.1 "@lumino/disposable": ^1.10.1 || ^2.1 "@lumino/signaling": ^1.10.1 || ^2.1 "@lumino/widgets": ^1.30.0 || ^2.1 "@types/backbone": 1.4.14 "@types/jquery": ^3.5.16 "@types/semver": ^7.3.6 "@typescript-eslint/eslint-plugin": ^5.8.0 "@typescript-eslint/parser": ^5.8.0 eslint: ^8.5.0 eslint-config-prettier: ^8.3.0 eslint-plugin-prettier: ^4.0.0 jquery: ^3.1.1 npm-run-all: ^4.1.5 prettier: ^2.3.2 rimraf: ^3.0.2 semver: ^7.3.5 source-map-loader: ^4.0.1 typescript: ~4.9.4 languageName: unknown linkType: soft "@jupyter-widgets/notebook-manager@workspace:python/widgetsnbextension": version: 0.0.0-use.local resolution: "@jupyter-widgets/notebook-manager@workspace:python/widgetsnbextension" dependencies: "@jupyter-widgets/base": ^6.0.9 "@jupyter-widgets/base-manager": ^1.0.10 "@jupyter-widgets/controls": ^5.0.10 "@jupyter-widgets/html-manager": ^1.0.12 "@jupyter-widgets/output": ^6.0.9 "@jupyterlab/services": ^6.0.0 || ^7.0.0 "@lumino/messaging": ^1.10.1 || ^2.1 "@lumino/widgets": ^1.30.0 || ^2.1 backbone: 1.4.0 css-loader: ^6.5.1 requirejs: ^2.3.6 rimraf: ^3.0.2 style-loader: ^3.3.1 webpack: ^5.65.0 webpack-cli: ^4.7.2 languageName: unknown linkType: soft "@jupyter-widgets/output@^6.0.9, @jupyter-widgets/output@workspace:packages/output": version: 0.0.0-use.local resolution: "@jupyter-widgets/output@workspace:packages/output" dependencies: "@jupyter-widgets/base": ^6.0.9 rimraf: ^3.0.2 typescript: ~4.9.4 languageName: unknown linkType: soft "@jupyter-widgets/schema@^0.5.6, @jupyter-widgets/schema@workspace:packages/schema": version: 0.0.0-use.local resolution: "@jupyter-widgets/schema@workspace:packages/schema" languageName: unknown linkType: soft "@jupyter/react-components@npm:^0.15.3": version: 0.15.3 resolution: "@jupyter/react-components@npm:0.15.3" dependencies: "@jupyter/web-components": ^0.15.3 "@microsoft/fast-react-wrapper": ^0.3.22 react: ">=17.0.0 <19.0.0" checksum: 1a6b256314259c6465c4b6d958575710536b82234a7bf0fba3e889a07e1f19ff8ab321450be354359876f92c45dbcc9d21a840237ff4a619806d9de696f55496 languageName: node linkType: hard "@jupyter/web-components@npm:^0.15.3": version: 0.15.3 resolution: "@jupyter/web-components@npm:0.15.3" dependencies: "@microsoft/fast-colors": ^5.3.1 "@microsoft/fast-element": ^1.12.0 "@microsoft/fast-foundation": ^2.49.4 "@microsoft/fast-web-utilities": ^5.4.1 checksum: a0980af934157bfdbdb6cc169c0816c1b2e57602d524c56bdcef746a4c25dfeb8f505150d83207c8695ed89b5486cf53d35a3382584d25ef64db666e4e16e45b languageName: node linkType: hard "@jupyter/ydoc@npm:^2.0.1": version: 2.0.1 resolution: "@jupyter/ydoc@npm:2.0.1" dependencies: "@jupyterlab/nbformat": ^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0 "@lumino/coreutils": ^1.11.0 || ^2.0.0 "@lumino/disposable": ^1.10.0 || ^2.0.0 "@lumino/signaling": ^1.10.0 || ^2.0.0 y-protocols: ^1.0.5 yjs: ^13.5.40 checksum: f5f29e1ff3327ebc1cf326f53634e03c4c7bf7733d235087fe26975c16eebd404f23c2f3ba88b6e04b1927846be7162b09b8b8719a4b29e51d0299c745018cbb languageName: node linkType: hard "@jupyterlab/application@npm:^3.0.0 || ^4.0.0": version: 4.2.1 resolution: "@jupyterlab/application@npm:4.2.1" dependencies: "@fortawesome/fontawesome-free": ^5.12.0 "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/docregistry": ^4.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/statedb": ^4.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/application": ^2.3.1 "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/polling": ^2.1.2 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 checksum: cc4b97fcfe81f31ffe437cd53370352e38ada94c39c9d60b595b0c0c4f195411653fd02af65717982d83084b18b2039dfc63d2d43f7ccda3fa0041294beeca44 languageName: node linkType: hard "@jupyterlab/apputils@npm:^3.0.0 || ^4.0.0, @jupyterlab/apputils@npm:^4.3.1": version: 4.3.1 resolution: "@jupyterlab/apputils@npm:4.3.1" dependencies: "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/settingregistry": ^4.2.1 "@jupyterlab/statedb": ^4.2.1 "@jupyterlab/statusbar": ^4.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/domutils": ^2.0.1 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.2 "@types/react": ^18.0.26 react: ^18.2.0 sanitize-html: ~2.12.1 checksum: 380d9059dd14ee47bb50a821515e0b4a92a2b60b6fed2bf15fb73b9192a2e95d1e6c97337f11d0c26870dba2dc89ee19604f068483df505e78d798510a61bf01 languageName: node linkType: hard "@jupyterlab/attachments@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/attachments@npm:4.2.1" dependencies: "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 checksum: 4fcf71a9c7846b2adcfd541a564043cda3169a0b47feb22b1fc3e0b22f0db55d81f2016f9fecbb97c2333292439ce3fd19b9f56fe3a4d3feb220884bb09c1e32 languageName: node linkType: hard "@jupyterlab/builder@npm:^3.0.0 || ^4.0.0": version: 4.2.1 resolution: "@jupyterlab/builder@npm:4.2.1" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/application": ^2.3.1 "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/domutils": ^2.0.1 "@lumino/dragdrop": ^2.1.4 "@lumino/messaging": ^2.0.1 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.2 ajv: ^8.12.0 commander: ^9.4.1 css-loader: ^6.7.1 duplicate-package-checker-webpack-plugin: ^3.0.0 fs-extra: ^10.1.0 glob: ~7.1.6 license-webpack-plugin: ^2.3.14 mini-css-extract-plugin: ^2.7.0 mini-svg-data-uri: ^1.4.4 path-browserify: ^1.0.0 process: ^0.11.10 source-map-loader: ~1.0.2 style-loader: ~3.3.1 supports-color: ^7.2.0 terser-webpack-plugin: ^5.3.7 webpack: ^5.76.1 webpack-cli: ^5.0.1 webpack-merge: ^5.8.0 worker-loader: ^3.0.2 bin: build-labextension: lib/build-labextension.js checksum: d8ea62deab2866be6fd0147470bd2ebd4970d1f628428e3354f86e8b8121a83ce3074eeead65427f09042eec8d88b4d1f1c2830972fc529ba5a084ada6be63b0 languageName: node linkType: hard "@jupyterlab/buildutils@npm:^3.5.2 || ^4.0.0": version: 4.2.1 resolution: "@jupyterlab/buildutils@npm:4.2.1" dependencies: "@yarnpkg/core": ^4.0.3 "@yarnpkg/parsers": ^3.0.0 commander: ^9.4.1 crypto: ~1.0.1 dependency-graph: ^0.11.0 fs-extra: ^10.1.0 glob: ~7.1.6 inquirer: ^9.1.4 micromatch: ^4.0.2 minimatch: ~3.0.4 os: ~0.1.1 package-json: ^7.0.0 prettier: ~2.6.0 process: ^0.11.10 semver: ^7.3.2 sort-package-json: ~1.53.1 typescript: ~5.1.6 verdaccio: ^5.25.0 bin: get-dependency: lib/get-dependency.js local-repository: lib/local-repository.js remove-dependency: lib/remove-dependency.js update-dependency: lib/update-dependency.js update-dist-tag: lib/update-dist-tag.js update-staging-lock: lib/update-staging-lock.js checksum: 3d211b5dcf05df561fc960bf1a347c0faacac8cdb5d8c8b24febdd02c252f8d65d43354e68e3f7f9fb41a31bb59f54e87836c87ff8db25af54d3cd0cd7b6fdd0 languageName: node linkType: hard "@jupyterlab/cells@npm:^3.0.0 || ^4.0.0, @jupyterlab/cells@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/cells@npm:4.2.1" dependencies: "@codemirror/state": ^6.4.1 "@codemirror/view": ^6.26.0 "@jupyter/ydoc": ^2.0.1 "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/attachments": ^4.2.1 "@jupyterlab/codeeditor": ^4.2.1 "@jupyterlab/codemirror": ^4.2.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/documentsearch": ^4.2.1 "@jupyterlab/filebrowser": ^4.2.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/outputarea": ^4.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/toc": ^6.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/domutils": ^2.0.1 "@lumino/dragdrop": ^2.1.4 "@lumino/messaging": ^2.0.1 "@lumino/polling": ^2.1.2 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: b7aa834255ffdc3dcf2fa5a4f7deaa92f71d337088eda9b8b648f6d68df9a27e341e3b1f55e497ccd0328adee00378aa303698d0530395bf2a6f1ba2b4184cbd languageName: node linkType: hard "@jupyterlab/codeeditor@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/codeeditor@npm:4.2.1" dependencies: "@codemirror/state": ^6.4.1 "@jupyter/ydoc": ^2.0.1 "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/statusbar": ^4.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/dragdrop": ^2.1.4 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: c5c78558d950ff7b07902c68e550f44570503179c4e3e23f04b39fb87cf522b61202b8331e465388545e14bda2f15542c55da95bc86d4a4b26e0f74d8bd49aa8 languageName: node linkType: hard "@jupyterlab/codemirror@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/codemirror@npm:4.2.1" dependencies: "@codemirror/autocomplete": ^6.15.0 "@codemirror/commands": ^6.3.3 "@codemirror/lang-cpp": ^6.0.2 "@codemirror/lang-css": ^6.2.1 "@codemirror/lang-html": ^6.4.8 "@codemirror/lang-java": ^6.0.1 "@codemirror/lang-javascript": ^6.2.2 "@codemirror/lang-json": ^6.0.1 "@codemirror/lang-markdown": ^6.2.4 "@codemirror/lang-php": ^6.0.1 "@codemirror/lang-python": ^6.1.4 "@codemirror/lang-rust": ^6.0.1 "@codemirror/lang-sql": ^6.6.1 "@codemirror/lang-wast": ^6.0.2 "@codemirror/lang-xml": ^6.1.0 "@codemirror/language": ^6.10.1 "@codemirror/legacy-modes": ^6.3.3 "@codemirror/search": ^6.5.6 "@codemirror/state": ^6.4.1 "@codemirror/view": ^6.26.0 "@jupyter/ydoc": ^2.0.1 "@jupyterlab/codeeditor": ^4.2.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/documentsearch": ^4.2.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/translation": ^4.2.1 "@lezer/common": ^1.2.1 "@lezer/generator": ^1.7.0 "@lezer/highlight": ^1.2.0 "@lezer/markdown": ^1.2.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 yjs: ^13.5.40 checksum: b037409146ec5225664d29f17d3cd5abf1868ba83f17e61c3f9a87dfaa8112045819de5ede97e820867d7dcc19ffc3f09dddd9cd7ec5cf434ac48adef0ad6e5e languageName: node linkType: hard "@jupyterlab/console@npm:^3.0.0 || ^4.0.0": version: 4.2.1 resolution: "@jupyterlab/console@npm:4.2.1" dependencies: "@jupyter/ydoc": ^2.0.1 "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/cells": ^4.2.1 "@jupyterlab/codeeditor": ^4.2.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/dragdrop": ^2.1.4 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 checksum: d92083d5d9a5672e1b0017949023c88cc9fe49b9e8cf268eea7a5becd48f8e07faf28b9ceebdfb5db145dd9cc5802936de602f99f8e60022a90823d3681fa62e languageName: node linkType: hard "@jupyterlab/coreutils@npm:^5.6.7": version: 5.6.7 resolution: "@jupyterlab/coreutils@npm:5.6.7" dependencies: "@lumino/coreutils": ^1.11.0 "@lumino/disposable": ^1.10.0 "@lumino/signaling": ^1.10.0 minimist: ~1.2.0 moment: ^2.24.0 path-browserify: ^1.0.0 url-parse: ~1.5.1 checksum: 94530cd2559ce8b5fe6b86a3125868be10d15bcdf91ae71abaf3f96653b76a618158b707f60d30aaf0bcc372993ed3dca874814e500bd43351a724930e6af81d languageName: node linkType: hard "@jupyterlab/coreutils@npm:^6.2.1": version: 6.2.1 resolution: "@jupyterlab/coreutils@npm:6.2.1" dependencies: "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 minimist: ~1.2.0 path-browserify: ^1.0.0 url-parse: ~1.5.4 checksum: c8167bd8d4472471297e5669d6b3ee7c9d5c1246e8413680713b15f8a81926d2c97bc6a3c0b26c16603b197b412e01b443cc74b02a3676adea5690aac41964be languageName: node linkType: hard "@jupyterlab/docmanager@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/docmanager@npm:4.2.1" dependencies: "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/docregistry": ^4.2.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/statedb": ^4.2.1 "@jupyterlab/statusbar": ^4.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/polling": ^2.1.2 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: 4ab2cc30f7537e338514d33705d76785ca0dae519a5772a2ff51291de6482b11cfca4154f6d92f604094fa12c132bcdbede8c167c2ce4e251517c87662e1c034 languageName: node linkType: hard "@jupyterlab/docregistry@npm:^3.0.0 || ^4.0.0, @jupyterlab/docregistry@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/docregistry@npm:4.2.1" dependencies: "@jupyter/ydoc": ^2.0.1 "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/codeeditor": ^4.2.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: 9564d072ec62e40366f3b56bdec9e5d15fe56713f26c84d47e24aa64ce86994b424fb462ea44df1a3906bbd77c26ae6b791651ca152b0905ee323388814bdd37 languageName: node linkType: hard "@jupyterlab/documentsearch@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/documentsearch@npm:4.2.1" dependencies: "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/polling": ^2.1.2 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: e29db3b9c04ff1e2dccf11499a0b7d6752aca17ecd2be4383b25864cac4e6e3b027bcb35dd7e81a1906484555ac0f882b96a89695ca226fb861e64105d7e71ba languageName: node linkType: hard "@jupyterlab/filebrowser@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/filebrowser@npm:4.2.1" dependencies: "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/docmanager": ^4.2.1 "@jupyterlab/docregistry": ^4.2.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/statedb": ^4.2.1 "@jupyterlab/statusbar": ^4.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/domutils": ^2.0.1 "@lumino/dragdrop": ^2.1.4 "@lumino/messaging": ^2.0.1 "@lumino/polling": ^2.1.2 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: 9ca327638b3ed10343439ae0f160b3af486f3db5e6f97f971497d9f75e8e0e0328fcba649e2a4078ab3255bc4246cade85228374a1bd2c88b76ad5bb87d4b567 languageName: node linkType: hard "@jupyterlab/logconsole@npm:^3.0.0 || ^4.0.0": version: 4.2.1 resolution: "@jupyterlab/logconsole@npm:4.2.1" dependencies: "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/outputarea": ^4.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/translation": ^4.2.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 checksum: 5663d2ecfd8bef95bfb46e89a71c5a6ed43c4ca26076d1d8a8782613a1307b5d4c826836ffbfc000d3d66bff20c70a20989f00239d97769420fe51053cfaf6f3 languageName: node linkType: hard "@jupyterlab/lsp@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/lsp@npm:4.2.1" dependencies: "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/codeeditor": ^4.2.1 "@jupyterlab/codemirror": ^4.2.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/docregistry": ^4.2.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/translation": ^4.2.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 lodash.mergewith: ^4.6.1 vscode-jsonrpc: ^6.0.0 vscode-languageserver-protocol: ^3.17.0 vscode-ws-jsonrpc: ~1.0.2 checksum: d522c157acf5dd314626096a3e9fc802f83d9b232a269862e3c0fba7424e0595992bee9a9e74e997a61c101ba2a6e50ee9657cf9f4e5a17ba19cfa06a73098a3 languageName: node linkType: hard "@jupyterlab/mainmenu@npm:^3.0.0 || ^4.0.0": version: 4.2.1 resolution: "@jupyterlab/mainmenu@npm:4.2.1" dependencies: "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/widgets": ^2.3.2 checksum: 299b5595ff394f06f7687c6e4499c88bb560f9737675b8bc79a6bf9aaa338022f901255ce701c686eed8c520fbab82d08a4671d4c5618cc3a7ea6f6a812b6064 languageName: node linkType: hard "@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0, @jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/nbformat@npm:4.2.1" dependencies: "@lumino/coreutils": ^2.1.2 checksum: 192167e2a9019bf91e1e7088c9eaaae7b1037f5e7b5db15b97687b052323e6e75913b301ca7a9783d0e59aa36f18ddff90fc71a90a8153e0c89e32fd92b2519c languageName: node linkType: hard "@jupyterlab/nbformat@npm:^3.6.7": version: 3.6.7 resolution: "@jupyterlab/nbformat@npm:3.6.7" dependencies: "@lumino/coreutils": ^1.11.0 checksum: 41def9da46c8cc2baddc61e5d43f9fd567ba9729d7f78f0cc9c34cb894e765d2b713643b8457c1d97272c52a1f10cc62febcbf97450fdfa1b26a7c205bd9581c languageName: node linkType: hard "@jupyterlab/notebook@npm:^3.0.0 || ^4.0.0": version: 4.2.1 resolution: "@jupyterlab/notebook@npm:4.2.1" dependencies: "@jupyter/ydoc": ^2.0.1 "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/cells": ^4.2.1 "@jupyterlab/codeeditor": ^4.2.1 "@jupyterlab/codemirror": ^4.2.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/docregistry": ^4.2.1 "@jupyterlab/documentsearch": ^4.2.1 "@jupyterlab/lsp": ^4.2.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/settingregistry": ^4.2.1 "@jupyterlab/statusbar": ^4.2.1 "@jupyterlab/toc": ^6.2.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/domutils": ^2.0.1 "@lumino/dragdrop": ^2.1.4 "@lumino/messaging": ^2.0.1 "@lumino/polling": ^2.1.2 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: bfdc7b45886444ef09d25a1ec98b9eb5fe0fe050b495844cac8c5f85f59cc891204fad59263e71256d0c8c0af9d52ddc0e7ed475f6414843c373e61067e055a2 languageName: node linkType: hard "@jupyterlab/observables@npm:^4.6.7": version: 4.6.7 resolution: "@jupyterlab/observables@npm:4.6.7" dependencies: "@lumino/algorithm": ^1.9.0 "@lumino/coreutils": ^1.11.0 "@lumino/disposable": ^1.10.0 "@lumino/messaging": ^1.10.0 "@lumino/signaling": ^1.10.0 checksum: af9ccc6db2c63bb38a041ae1c2c6ec3b29f8b9ab3fce03e8b18e79095ccd1690fc00c79d606fcfc388d9595ef38d4f98e5df36f6fc12c58f10aa152177fb1c6b languageName: node linkType: hard "@jupyterlab/observables@npm:^5.2.1": version: 5.2.1 resolution: "@jupyterlab/observables@npm:5.2.1" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 checksum: 3833d3ad0640a6160fdc5254ec08a600e628e235103e311ca8ee90ade11b73e045ab78b82282153da700f9ae796a99ef36da223baad6c21ad7af0ea84b9514b6 languageName: node linkType: hard "@jupyterlab/outputarea@npm:^3.0.0 || ^4.0.0, @jupyterlab/outputarea@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/outputarea@npm:4.2.1" dependencies: "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/translation": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 checksum: 62de3a2bdd54bcb9fab6930b161ff0829c66c5a73783f9901e38b1aae566a2f903414292d035c2a72ea35f25772d7c8256367df3d24adb8b4e480702248efc9e languageName: node linkType: hard "@jupyterlab/rendermime-interfaces@npm:^3.0.0 || ^4.0.0, @jupyterlab/rendermime-interfaces@npm:^3.10.1": version: 3.10.1 resolution: "@jupyterlab/rendermime-interfaces@npm:3.10.1" dependencies: "@lumino/coreutils": ^1.11.0 || ^2.1.2 "@lumino/widgets": ^1.37.2 || ^2.3.2 checksum: 537fe7d96f8e157d89de0035149bf98bfaf1b9fde92d4f58c1e879ce87cab586311aa18dfb02a218bd24aa3cd1f24122e256a70cb2a0a437cc4fea1c9a3f2fa1 languageName: node linkType: hard "@jupyterlab/rendermime@npm:^3.0.0 || ^4.0.0, @jupyterlab/rendermime@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/rendermime@npm:4.2.1" dependencies: "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/translation": ^4.2.1 "@lumino/coreutils": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 lodash.escape: ^4.0.1 checksum: 780534260b40ee3a60248cf58d92014e3eb717cabe9380b929f311a8cabffafe6d56f82aa35be62d06d38b3b2fbf1f23285c0abaac8e5a08c5c4be73dc114f07 languageName: node linkType: hard "@jupyterlab/services@npm:^6.0.0": version: 6.6.7 resolution: "@jupyterlab/services@npm:6.6.7" dependencies: "@jupyterlab/coreutils": ^5.6.7 "@jupyterlab/nbformat": ^3.6.7 "@jupyterlab/observables": ^4.6.7 "@jupyterlab/settingregistry": ^3.6.7 "@jupyterlab/statedb": ^3.6.7 "@lumino/algorithm": ^1.9.0 "@lumino/coreutils": ^1.11.0 "@lumino/disposable": ^1.10.0 "@lumino/polling": ^1.9.0 "@lumino/signaling": ^1.10.0 node-fetch: ^2.6.0 ws: ^7.4.6 checksum: ad3e8f5c9edb6b09ddad50be2285c80bafa22c604fd4f99cc46f7bdb9c9592079f5ccea7a497bf791e9b388b114fd2952814db806a9dd25df8eaed17bb5ec9e6 languageName: node linkType: hard "@jupyterlab/services@npm:^6.0.0 || ^7.0.0, @jupyterlab/services@npm:^7.2.1": version: 7.2.1 resolution: "@jupyterlab/services@npm:7.2.1" dependencies: "@jupyter/ydoc": ^2.0.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/settingregistry": ^4.2.1 "@jupyterlab/statedb": ^4.2.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/polling": ^2.1.2 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 ws: ^8.11.0 checksum: f07be2f3a174466c17ab5c22f8ef622fc623e8c61f2220b8bfb465a263971313cb9129e84bba32606e6ab7d1e0be3a9754b97f98e173e9c95eaf0b1c6cd8110a languageName: node linkType: hard "@jupyterlab/settingregistry@npm:^3.0.0 || ^4.0.0, @jupyterlab/settingregistry@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/settingregistry@npm:4.2.1" dependencies: "@jupyterlab/nbformat": ^4.2.1 "@jupyterlab/statedb": ^4.2.1 "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 "@rjsf/utils": ^5.13.4 ajv: ^8.12.0 json5: ^2.2.3 peerDependencies: react: ">=16" checksum: 794e5ecde19a40e1b95c0d636eed7b56bbdc46857c8f3b4ef446c1bc90e8ea660c2ccf8f36a238bc312002f106a5a8522bb057742d9c0d674b2974ef21a786d7 languageName: node linkType: hard "@jupyterlab/settingregistry@npm:^3.6.7": version: 3.6.7 resolution: "@jupyterlab/settingregistry@npm:3.6.7" dependencies: "@jupyterlab/statedb": ^3.6.7 "@lumino/commands": ^1.19.0 "@lumino/coreutils": ^1.11.0 "@lumino/disposable": ^1.10.0 "@lumino/signaling": ^1.10.0 ajv: ^6.12.3 json5: ^2.1.1 checksum: 01e2066d1fc08af7465ad458e06096e3d893776567e1818841fb204c763ba9c067fde49fcc57941a4f8399a5006d36e63832042b77cd5c3447c48ccaaafee864 languageName: node linkType: hard "@jupyterlab/statedb@npm:^3.6.7": version: 3.6.7 resolution: "@jupyterlab/statedb@npm:3.6.7" dependencies: "@lumino/commands": ^1.19.0 "@lumino/coreutils": ^1.11.0 "@lumino/disposable": ^1.10.0 "@lumino/properties": ^1.8.0 "@lumino/signaling": ^1.10.0 checksum: 4c92b467e6c616becd8fc958ffe699a648215516e33d0b3987d23469f81e0ad81404b3b2c6413b250620ce8a2940489bea6cf3ed31a82f9063f7291b7f8f655f languageName: node linkType: hard "@jupyterlab/statedb@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/statedb@npm:4.2.1" dependencies: "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 checksum: 51e07db85269883bcd58fc5ba890db122e260e8d1ce4046f0b188453726694c2d909f27ca069ee3cd6944a93d70fcb8360074f87cdb13d611af2e24f6b14af30 languageName: node linkType: hard "@jupyterlab/statusbar@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/statusbar@npm:4.2.1" dependencies: "@jupyterlab/ui-components": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: 65a0e4e0fa29ddd088d8dd2ee007a5166f783aa2852acd4217f2ed52fa04f492119c6e5b6e4f83884766fe7cfed3135ddd8c89b564ac3cc34ed6559457994885 languageName: node linkType: hard "@jupyterlab/toc@npm:^6.2.1": version: 6.2.1 resolution: "@jupyterlab/toc@npm:6.2.1" dependencies: "@jupyterlab/apputils": ^4.3.1 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/docregistry": ^4.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime": ^4.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@jupyterlab/translation": ^4.2.1 "@jupyterlab/ui-components": ^4.2.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/widgets": ^2.3.2 react: ^18.2.0 checksum: 6592dac4abf8a809b93d0ba6335d2011c85fb1c515a8f9a207858477c7269d2041a02fb86ae6dff23b36eefce832f0a099a201e1d715c4c1f8b92f08ac939a35 languageName: node linkType: hard "@jupyterlab/translation@npm:^3.0.0 || ^4.0.0, @jupyterlab/translation@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/translation@npm:4.2.1" dependencies: "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@jupyterlab/services": ^7.2.1 "@jupyterlab/statedb": ^4.2.1 "@lumino/coreutils": ^2.1.2 checksum: 509c9fd8790f852faaa7f956c2ac660247a8d1610cb9f08fd5a357f784a7f32f838ac388a47626da66ee207769253d16ea72235d608112d560dbc10417d9b8e4 languageName: node linkType: hard "@jupyterlab/ui-components@npm:^4.2.1": version: 4.2.1 resolution: "@jupyterlab/ui-components@npm:4.2.1" dependencies: "@jupyter/react-components": ^0.15.3 "@jupyter/web-components": ^0.15.3 "@jupyterlab/coreutils": ^6.2.1 "@jupyterlab/observables": ^5.2.1 "@jupyterlab/rendermime-interfaces": ^3.10.1 "@jupyterlab/translation": ^4.2.1 "@lumino/algorithm": ^2.0.1 "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/messaging": ^2.0.1 "@lumino/polling": ^2.1.2 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 "@lumino/widgets": ^2.3.2 "@rjsf/core": ^5.13.4 "@rjsf/utils": ^5.13.4 react: ^18.2.0 react-dom: ^18.2.0 typestyle: ^2.0.4 peerDependencies: react: ^18.2.0 checksum: 7032d7755a7b69e98acc6378d9dedcc56d016cd0d4d6091bda3593baf89876a5e00f84116ab2a5ab5cc68439e07c2194eb7d211b6b3cff0a03cdfd11b03951bd languageName: node linkType: hard "@lerna/add@npm:5.6.2": version: 5.6.2 resolution: "@lerna/add@npm:5.6.2" dependencies: "@lerna/bootstrap": 5.6.2 "@lerna/command": 5.6.2 "@lerna/filter-options": 5.6.2 "@lerna/npm-conf": 5.6.2 "@lerna/validation-error": 5.6.2 dedent: ^0.7.0 npm-package-arg: 8.1.1 p-map: ^4.0.0 pacote: ^13.6.1 semver: ^7.3.4 checksum: a6e9a6270f3145cb24da1b90a312cbbe0f3a0c556943c7e7b8cf4bfbb0912db4de7e7dc248321dd26955b3b8dbf8ede8c9481e2a0f3107c8a5cd917bfe187976 languageName: node linkType: hard "@lerna/bootstrap@npm:5.6.2": version: 5.6.2 resolution: "@lerna/bootstrap@npm:5.6.2" dependencies: "@lerna/command": 5.6.2 "@lerna/filter-options": 5.6.2 "@lerna/has-npm-version": 5.6.2 "@lerna/npm-install": 5.6.2 "@lerna/package-graph": 5.6.2 "@lerna/pulse-till-done": 5.6.2 "@lerna/rimraf-dir": 5.6.2 "@lerna/run-lifecycle": 5.6.2 "@lerna/run-topologically": 5.6.2 "@lerna/symlink-binary": 5.6.2 "@lerna/symlink-dependencies": 5.6.2 "@lerna/validation-error": 5.6.2 "@npmcli/arborist": 5.3.0 dedent: ^0.7.0 get-port: ^5.1.1 multimatch: ^5.0.0 npm-package-arg: 8.1.1 npmlog: ^6.0.2 p-map: ^4.0.0 p-map-series: ^2.1.0 p-waterfall: ^2.1.1 semver: ^7.3.4 checksum: 5b416f2276077348a72c4079d96b35729502a8bc3f91144cf3109b1ea5966245c809769304414a9b038de0980e783ed2a8da898fd05802879e8186e35a8a14cf languageName: node linkType: hard "@lerna/changed@npm:5.6.2": version: 5.6.2 resolution: "@lerna/changed@npm:5.6.2" dependencies: "@lerna/collect-updates": 5.6.2 "@lerna/command": 5.6.2 "@lerna/listable": 5.6.2 "@lerna/output": 5.6.2 checksum: 69a86cf3b3124553dee5de03988e7e7ecbf3f9084685ff13da1a1c9dfd4dcc3991145db4937cc0a72dde029da6cd37b3614bd21b7b461f8d5724a2f38b6c56d7 languageName: node linkType: hard "@lerna/check-working-tree@npm:5.6.2": version: 5.6.2 resolution: "@lerna/check-working-tree@npm:5.6.2" dependencies: "@lerna/collect-uncommitted": 5.6.2 "@lerna/describe-ref": 5.6.2 "@lerna/validation-error": 5.6.2 checksum: 46a30143ab3f73f8e70c76bdffa66d521b787251c986800f60335188a62375186a380c0d772439b0fa9cf057da2f028780674744d684636e84e6974b9a4193e5 languageName: node linkType: hard "@lerna/child-process@npm:5.6.2": version: 5.6.2 resolution: "@lerna/child-process@npm:5.6.2" dependencies: chalk: ^4.1.0 execa: ^5.0.0 strong-log-transformer: ^2.1.0 checksum: 94e9c03119b3177cb41e210ac8a4bf04386857192e3a99c8bdd3d2ae913eda1538f813138de03693681ee360644cab9a0584658df9e2acbd04eb52a2e3a761cf languageName: node linkType: hard "@lerna/clean@npm:5.6.2": version: 5.6.2 resolution: "@lerna/clean@npm:5.6.2" dependencies: "@lerna/command": 5.6.2 "@lerna/filter-options": 5.6.2 "@lerna/prompt": 5.6.2 "@lerna/pulse-till-done": 5.6.2 "@lerna/rimraf-dir": 5.6.2 p-map: ^4.0.0 p-map-series: ^2.1.0 p-waterfall: ^2.1.1 checksum: b20aa2d5c0ace554dcb2ce37915b6a172627e1d26f54a6be33ae8b59d2b31ac1c4c70fa99ca5bffefc9a725ef798059b3b83f751728f6471e9edee1cb901d8b9 languageName: node linkType: hard "@lerna/cli@npm:5.6.2": version: 5.6.2 resolution: "@lerna/cli@npm:5.6.2" dependencies: "@lerna/global-options": 5.6.2 dedent: ^0.7.0 npmlog: ^6.0.2 yargs: ^16.2.0 checksum: e0b853feafe6d572056ea61a18fed4acb0ad62bcd99c3b5d753a8b8e8b69e5275f5eb7e102e7d09340d8f8e0e73a038b203acb4c77437d7edcf835470917b296 languageName: node linkType: hard "@lerna/collect-uncommitted@npm:5.6.2": version: 5.6.2 resolution: "@lerna/collect-uncommitted@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 chalk: ^4.1.0 npmlog: ^6.0.2 checksum: 9c9298bc447629819634dc5fa697caa6a4b33c4e9fd61ae7ad4108a42d916ef9193ea4cb72d6cf766fc6863e350211ab9b1fcde6a8fb75b75f43aa5e4a1afeb4 languageName: node linkType: hard "@lerna/collect-updates@npm:5.6.2": version: 5.6.2 resolution: "@lerna/collect-updates@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/describe-ref": 5.6.2 minimatch: ^3.0.4 npmlog: ^6.0.2 slash: ^3.0.0 checksum: 44149466c60e63f495bb09a3a8fd6c1d91f55de9dfcaac3adcefaf27c690adb6ac2c2a9b6bf5c9f8e430cb41db7c6994c9506b28945f5bb46a47e78f2829425d languageName: node linkType: hard "@lerna/command@npm:5.6.2": version: 5.6.2 resolution: "@lerna/command@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/package-graph": 5.6.2 "@lerna/project": 5.6.2 "@lerna/validation-error": 5.6.2 "@lerna/write-log-file": 5.6.2 clone-deep: ^4.0.1 dedent: ^0.7.0 execa: ^5.0.0 is-ci: ^2.0.0 npmlog: ^6.0.2 checksum: 6a3bdef20658b474476a3750862e2d4753284d0023faf755b39d403a7dc71f6c5c46bc68f79ba27af1a12eb8add391f3afb82aee08b93e02141aa44f939cd668 languageName: node linkType: hard "@lerna/conventional-commits@npm:5.6.2": version: 5.6.2 resolution: "@lerna/conventional-commits@npm:5.6.2" dependencies: "@lerna/validation-error": 5.6.2 conventional-changelog-angular: ^5.0.12 conventional-changelog-core: ^4.2.4 conventional-recommended-bump: ^6.1.0 fs-extra: ^9.1.0 get-stream: ^6.0.0 npm-package-arg: 8.1.1 npmlog: ^6.0.2 pify: ^5.0.0 semver: ^7.3.4 checksum: a8dbcd4bbb697aebb6c1b045f8597f019b754cf42b5abaf6a77da7379e212107bb46e8c9747a7bc1b41de640109036f71bc97df0b1066ca6c719172dd5d8b563 languageName: node linkType: hard "@lerna/create-symlink@npm:5.6.2": version: 5.6.2 resolution: "@lerna/create-symlink@npm:5.6.2" dependencies: cmd-shim: ^5.0.0 fs-extra: ^9.1.0 npmlog: ^6.0.2 checksum: 1848bd60d5f3227cf66103571779d8c12c363c54ade93aaddcb10b7bba00adaf263faccee15fd05ac87ee5514feecd0e20e42b79b798a457609af1e77e734762 languageName: node linkType: hard "@lerna/create@npm:5.6.2": version: 5.6.2 resolution: "@lerna/create@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/command": 5.6.2 "@lerna/npm-conf": 5.6.2 "@lerna/validation-error": 5.6.2 dedent: ^0.7.0 fs-extra: ^9.1.0 init-package-json: ^3.0.2 npm-package-arg: 8.1.1 p-reduce: ^2.1.0 pacote: ^13.6.1 pify: ^5.0.0 semver: ^7.3.4 slash: ^3.0.0 validate-npm-package-license: ^3.0.4 validate-npm-package-name: ^4.0.0 yargs-parser: 20.2.4 checksum: 94706188839a8cd0b8c20fb593a0cb4375bd350e2b6587a29933786bdd8c83417a1d651e5f53fb69e0939bad4f97dd013f5a4c901557e3c20fc360bbd0590806 languageName: node linkType: hard "@lerna/describe-ref@npm:5.6.2": version: 5.6.2 resolution: "@lerna/describe-ref@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 npmlog: ^6.0.2 checksum: 510814bd0004859475cf62917a3145b010b33b519be3b80f30170b98500e176285d8f4b0aa9e5928b80798be90bc65f1591d6c72e26fee70d46e0f006996d69e languageName: node linkType: hard "@lerna/diff@npm:5.6.2": version: 5.6.2 resolution: "@lerna/diff@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/command": 5.6.2 "@lerna/validation-error": 5.6.2 npmlog: ^6.0.2 checksum: 0731f5819da8c7bb2a210a9514541e7f7cdde8ddf1802e3ec5e40bd689f3c546d6fba12b9c72cd48aa97d179ff767c658bdfe26bf9590056307ee738b5b44052 languageName: node linkType: hard "@lerna/exec@npm:5.6.2": version: 5.6.2 resolution: "@lerna/exec@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/command": 5.6.2 "@lerna/filter-options": 5.6.2 "@lerna/profiler": 5.6.2 "@lerna/run-topologically": 5.6.2 "@lerna/validation-error": 5.6.2 p-map: ^4.0.0 checksum: 30255cffbb67bc6a89290c1755e0e832fe9be1de0a98a2a6553a0baf0e1f509e0268318eeb3da4441bad2aa5517268b522f57dc3aefc49d122b301dd06ff6086 languageName: node linkType: hard "@lerna/filter-options@npm:5.6.2": version: 5.6.2 resolution: "@lerna/filter-options@npm:5.6.2" dependencies: "@lerna/collect-updates": 5.6.2 "@lerna/filter-packages": 5.6.2 dedent: ^0.7.0 npmlog: ^6.0.2 checksum: c1b4ce4973bd8fff66a1632891f69ce4c20858d304cc02502df1576235b879cb4d3dd04b4be4b1835058f445c44d572554b206cf35ec4c1a3b76de396949bff1 languageName: node linkType: hard "@lerna/filter-packages@npm:5.6.2": version: 5.6.2 resolution: "@lerna/filter-packages@npm:5.6.2" dependencies: "@lerna/validation-error": 5.6.2 multimatch: ^5.0.0 npmlog: ^6.0.2 checksum: b5b4c3b1d1ae6d889802ead0e682aecb8a12c1cbb3738a95e68013e9c7fd04cc0e495e249ef69eb52e65c69bca760d357d265642b1e066857c898ff1415978bd languageName: node linkType: hard "@lerna/get-npm-exec-opts@npm:5.6.2": version: 5.6.2 resolution: "@lerna/get-npm-exec-opts@npm:5.6.2" dependencies: npmlog: ^6.0.2 checksum: 3430e602db853e075490e6b080d46340940acf354fb5513da19af2a8ad60c8fa397de7cbcbe0bda8a4266e9d995bc7cba1698d092933c5feaef134585eef9f08 languageName: node linkType: hard "@lerna/get-packed@npm:5.6.2": version: 5.6.2 resolution: "@lerna/get-packed@npm:5.6.2" dependencies: fs-extra: ^9.1.0 ssri: ^9.0.1 tar: ^6.1.0 checksum: 12637d74cf654214fb6adfe444370d90d66f5aa2fdbcfc6bedd4168e24a8e91346ad22f1386630b635452b3a0089c91cd3ea141f6cddfd8d111ba7b94dbbaac8 languageName: node linkType: hard "@lerna/github-client@npm:5.6.2": version: 5.6.2 resolution: "@lerna/github-client@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@octokit/plugin-enterprise-rest": ^6.0.1 "@octokit/rest": ^19.0.3 git-url-parse: ^13.1.0 npmlog: ^6.0.2 checksum: 08a7386af70bacec5b1c2ec7ba09a0cae407e54c65d33c89444b4460df48dc325772fe77b38ce7c5355295e24ba64d0d64e53ae3ca76ddd4b930af1f5b38507c languageName: node linkType: hard "@lerna/gitlab-client@npm:5.6.2": version: 5.6.2 resolution: "@lerna/gitlab-client@npm:5.6.2" dependencies: node-fetch: ^2.6.1 npmlog: ^6.0.2 checksum: ad9e45621b727858f4ea87a5d624da41cd6784e616d247b86275fb08fbfb4c9974c5f698f59ac0272ec1d0a848bba5f04ef2fbc32c62ca3a77ecd3b0415bd298 languageName: node linkType: hard "@lerna/global-options@npm:5.6.2": version: 5.6.2 resolution: "@lerna/global-options@npm:5.6.2" checksum: 7cb542edef4f06c98dc5a1f797a442e4a1f8bde444046bc5258b0908ecd888ac7fe75902c90c20898feb90e685dee2e3518dc5c85a8155504373ec3f4634f3db languageName: node linkType: hard "@lerna/has-npm-version@npm:5.6.2": version: 5.6.2 resolution: "@lerna/has-npm-version@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 semver: ^7.3.4 checksum: 98ca1161618a84e0509b9c988f3dd2e147225564d31820ea7b94332388afb7650b510ad902919c5ec9a0ec95b27aab81b4c3067769d106c801426620018a7aa4 languageName: node linkType: hard "@lerna/import@npm:5.6.2": version: 5.6.2 resolution: "@lerna/import@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/command": 5.6.2 "@lerna/prompt": 5.6.2 "@lerna/pulse-till-done": 5.6.2 "@lerna/validation-error": 5.6.2 dedent: ^0.7.0 fs-extra: ^9.1.0 p-map-series: ^2.1.0 checksum: fdcecfd29de36488f78d51776d0edaf4e789bcedad57fe72818ab2e8416578396cfdf142f57095490eefcdd0d3d63a55b23a5e03cf42e5b97878a997025b6b86 languageName: node linkType: hard "@lerna/info@npm:5.6.2": version: 5.6.2 resolution: "@lerna/info@npm:5.6.2" dependencies: "@lerna/command": 5.6.2 "@lerna/output": 5.6.2 envinfo: ^7.7.4 checksum: 0124b7b1fe75e9bee4f4d4e13216a61869ad918ac9dfbad79aa49e3dd4657a67945aceae6632452b08580d1370823af0ce15ac6fd7134b9042f69624c531be57 languageName: node linkType: hard "@lerna/init@npm:5.6.2": version: 5.6.2 resolution: "@lerna/init@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/command": 5.6.2 "@lerna/project": 5.6.2 fs-extra: ^9.1.0 p-map: ^4.0.0 write-json-file: ^4.3.0 checksum: 15e9cfee4ec7c0a09ed0426a38c4cdd2d85b1b005bc5c499f69464e7fe4f5dc4ec1dab0e0fae260508f100f68a84ae54d1b8ab556bdd17938f3db8862290eec9 languageName: node linkType: hard "@lerna/link@npm:5.6.2": version: 5.6.2 resolution: "@lerna/link@npm:5.6.2" dependencies: "@lerna/command": 5.6.2 "@lerna/package-graph": 5.6.2 "@lerna/symlink-dependencies": 5.6.2 "@lerna/validation-error": 5.6.2 p-map: ^4.0.0 slash: ^3.0.0 checksum: 5d4d3cf7cd90e30797cd0961d835984f5f4f01de508c89cd4870462bd64b65f6a2cf01a2f0df738ce612f45154d3ba4fbfbe73d24f21c0b0015d8c3263b93a80 languageName: node linkType: hard "@lerna/list@npm:5.6.2": version: 5.6.2 resolution: "@lerna/list@npm:5.6.2" dependencies: "@lerna/command": 5.6.2 "@lerna/filter-options": 5.6.2 "@lerna/listable": 5.6.2 "@lerna/output": 5.6.2 checksum: 969b4a458e26bb12533549577fc3c95b62f7a982e04c77bf0755b99a1280d51a0b6288d9a42f1cb05d2f84e852c0fac6a388a5ab735daf1eaa478d9a5e4244f3 languageName: node linkType: hard "@lerna/listable@npm:5.6.2": version: 5.6.2 resolution: "@lerna/listable@npm:5.6.2" dependencies: "@lerna/query-graph": 5.6.2 chalk: ^4.1.0 columnify: ^1.6.0 checksum: 3c94647582cd976117c636799e10cea486d171b9c7c20554ffc68c0dd5e33f0d847667264c19a40fbf44a697902dc11e55ca01e74d12f536fb67e338c124381e languageName: node linkType: hard "@lerna/log-packed@npm:5.6.2": version: 5.6.2 resolution: "@lerna/log-packed@npm:5.6.2" dependencies: byte-size: ^7.0.0 columnify: ^1.6.0 has-unicode: ^2.0.1 npmlog: ^6.0.2 checksum: bbb43bd521bd431298048556a0ca1b83819d6352a06c4792a121403ab5cc2a467c7e89848cec72c7e348af12d3eac1e65e95d1372bedad2ef4a68aaa5d624e5a languageName: node linkType: hard "@lerna/npm-conf@npm:5.6.2": version: 5.6.2 resolution: "@lerna/npm-conf@npm:5.6.2" dependencies: config-chain: ^1.1.12 pify: ^5.0.0 checksum: ee79c50b57859c918e597b48f44483c00c47fc84e61440c21d756981e8ff0d2721ff068e9539fabc50c073710d5c8fee469aa9e6620c0ecbf4dfce9db4979f94 languageName: node linkType: hard "@lerna/npm-dist-tag@npm:5.6.2": version: 5.6.2 resolution: "@lerna/npm-dist-tag@npm:5.6.2" dependencies: "@lerna/otplease": 5.6.2 npm-package-arg: 8.1.1 npm-registry-fetch: ^13.3.0 npmlog: ^6.0.2 checksum: f50f8b090d197b773b467853d54f2993dd99721cfd8dc17f4af587bc0f53a6c1d879175673f34471d2778b114bc97fcb86bfade1d1aafa349ade92f78878dbf5 languageName: node linkType: hard "@lerna/npm-install@npm:5.6.2": version: 5.6.2 resolution: "@lerna/npm-install@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/get-npm-exec-opts": 5.6.2 fs-extra: ^9.1.0 npm-package-arg: 8.1.1 npmlog: ^6.0.2 signal-exit: ^3.0.3 write-pkg: ^4.0.0 checksum: 6878ee7420edb0353ae8b755b10ae33100980b108cbeaa5848f4b5d2c19c836dbe2d93b401365fe05baf080808c8ad259a05bb78d52b177fc21d6c24bdf41b27 languageName: node linkType: hard "@lerna/npm-publish@npm:5.6.2": version: 5.6.2 resolution: "@lerna/npm-publish@npm:5.6.2" dependencies: "@lerna/otplease": 5.6.2 "@lerna/run-lifecycle": 5.6.2 fs-extra: ^9.1.0 libnpmpublish: ^6.0.4 npm-package-arg: 8.1.1 npmlog: ^6.0.2 pify: ^5.0.0 read-package-json: ^5.0.1 checksum: 87ec165e2c5976fd04e41bbed0cf796317813d4ef50cc42a1c96c25d96f761333d34fa575702f2979b3c828ea7df87d21064521fc4137da9d16f67803192c902 languageName: node linkType: hard "@lerna/npm-run-script@npm:5.6.2": version: 5.6.2 resolution: "@lerna/npm-run-script@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 "@lerna/get-npm-exec-opts": 5.6.2 npmlog: ^6.0.2 checksum: b8319fe926484afd28f7fa68d92cca438a6429841bec06c843ca673bff044da15380c0077530bc7dd11b10c413a7404c6f7597f0ec15a33137ff5dbb1b9f98f2 languageName: node linkType: hard "@lerna/otplease@npm:5.6.2": version: 5.6.2 resolution: "@lerna/otplease@npm:5.6.2" dependencies: "@lerna/prompt": 5.6.2 checksum: a8eaf9a3104d2d869dac773001e7b82b5825ae1753e1ed5ec953f11930bfc61ec7131a3e802a735cf88e6d61c945ac7bf52a5ae3a3937c40be11ef34b0f85a06 languageName: node linkType: hard "@lerna/output@npm:5.6.2": version: 5.6.2 resolution: "@lerna/output@npm:5.6.2" dependencies: npmlog: ^6.0.2 checksum: 34494135cf13cf024bb325c85f91e33f1d295df941afa659bdab3896862a9b69165ad6afdefc30945576577960f83c8e2374d2d5feb79e9a34b757ccffce2d9f languageName: node linkType: hard "@lerna/pack-directory@npm:5.6.2": version: 5.6.2 resolution: "@lerna/pack-directory@npm:5.6.2" dependencies: "@lerna/get-packed": 5.6.2 "@lerna/package": 5.6.2 "@lerna/run-lifecycle": 5.6.2 "@lerna/temp-write": 5.6.2 npm-packlist: ^5.1.1 npmlog: ^6.0.2 tar: ^6.1.0 checksum: 1231c9d0d1573267616364a50ef736be6edfdcf82600aee0d89ba8ddae891a32ad8d6d041af92ea685dee95ab7d4662098d62c61201d071a8ec9b4e19dd28e80 languageName: node linkType: hard "@lerna/package-graph@npm:5.6.2": version: 5.6.2 resolution: "@lerna/package-graph@npm:5.6.2" dependencies: "@lerna/prerelease-id-from-version": 5.6.2 "@lerna/validation-error": 5.6.2 npm-package-arg: 8.1.1 npmlog: ^6.0.2 semver: ^7.3.4 checksum: 1627c2de7bad648f6579ebf5cfdeedf3d4eb1931d8dfde10f9ee60663f38b9286b29292b135337f9c4976c4c444b27d341b4ced408f8a067ba97d66ac1efe203 languageName: node linkType: hard "@lerna/package@npm:5.6.2": version: 5.6.2 resolution: "@lerna/package@npm:5.6.2" dependencies: load-json-file: ^6.2.0 npm-package-arg: 8.1.1 write-pkg: ^4.0.0 checksum: 7f0d32cf4a74c76d932633a06ace58eca7ea46a2624ef304101b6b882ebe4ec1c683c6836784b790132d29e68e396f6490703db3070af3cff02ef32260f0fb52 languageName: node linkType: hard "@lerna/prerelease-id-from-version@npm:5.6.2": version: 5.6.2 resolution: "@lerna/prerelease-id-from-version@npm:5.6.2" dependencies: semver: ^7.3.4 checksum: 0b48944fc17941061036d7ed93829ca9555897b5073177cb6435cda852da433095df4a76c0b37842788ea5a4536a5300adec2bc23d55daeb8a0b0ca53de16268 languageName: node linkType: hard "@lerna/profiler@npm:5.6.2": version: 5.6.2 resolution: "@lerna/profiler@npm:5.6.2" dependencies: fs-extra: ^9.1.0 npmlog: ^6.0.2 upath: ^2.0.1 checksum: a66e0c763b1b0477cdfb0d8c06da0693bf142aaa4cd694022e35a9f7b016126780b685494c862cc3f3a175b14f31f1fc9902f924aa48d1243ad3e41088a661f1 languageName: node linkType: hard "@lerna/project@npm:5.6.2": version: 5.6.2 resolution: "@lerna/project@npm:5.6.2" dependencies: "@lerna/package": 5.6.2 "@lerna/validation-error": 5.6.2 cosmiconfig: ^7.0.0 dedent: ^0.7.0 dot-prop: ^6.0.1 glob-parent: ^5.1.1 globby: ^11.0.2 js-yaml: ^4.1.0 load-json-file: ^6.2.0 npmlog: ^6.0.2 p-map: ^4.0.0 resolve-from: ^5.0.0 write-json-file: ^4.3.0 checksum: 26ba2daa219bc033fe06770f3f539ca801c96993a7e2e95d0a2ad72646f43746d5efe67e8a407306b2de6ebfa8220c6682b8a6fd72ec4402ce3af21cdec54f20 languageName: node linkType: hard "@lerna/prompt@npm:5.6.2": version: 5.6.2 resolution: "@lerna/prompt@npm:5.6.2" dependencies: inquirer: ^8.2.4 npmlog: ^6.0.2 checksum: a6f9352f223493d2eeb975f0eeb8981184a6981e2166a49bed792cebd811bf896234bf818b6e8260a6cf2cb2e5e0e26bf3c25475a159dc9b044f3708252b52b8 languageName: node linkType: hard "@lerna/publish@npm:5.6.2": version: 5.6.2 resolution: "@lerna/publish@npm:5.6.2" dependencies: "@lerna/check-working-tree": 5.6.2 "@lerna/child-process": 5.6.2 "@lerna/collect-updates": 5.6.2 "@lerna/command": 5.6.2 "@lerna/describe-ref": 5.6.2 "@lerna/log-packed": 5.6.2 "@lerna/npm-conf": 5.6.2 "@lerna/npm-dist-tag": 5.6.2 "@lerna/npm-publish": 5.6.2 "@lerna/otplease": 5.6.2 "@lerna/output": 5.6.2 "@lerna/pack-directory": 5.6.2 "@lerna/prerelease-id-from-version": 5.6.2 "@lerna/prompt": 5.6.2 "@lerna/pulse-till-done": 5.6.2 "@lerna/run-lifecycle": 5.6.2 "@lerna/run-topologically": 5.6.2 "@lerna/validation-error": 5.6.2 "@lerna/version": 5.6.2 fs-extra: ^9.1.0 libnpmaccess: ^6.0.3 npm-package-arg: 8.1.1 npm-registry-fetch: ^13.3.0 npmlog: ^6.0.2 p-map: ^4.0.0 p-pipe: ^3.1.0 pacote: ^13.6.1 semver: ^7.3.4 checksum: dce481b6e6ec168e75bc9c08bd075169b299fdf345abebf14029fa717029ddf2fc1464c65653234830807fb881ef0999a0af0f094a143c38865dd9d0dfb74ffd languageName: node linkType: hard "@lerna/pulse-till-done@npm:5.6.2": version: 5.6.2 resolution: "@lerna/pulse-till-done@npm:5.6.2" dependencies: npmlog: ^6.0.2 checksum: 923995424e6399947fa752d0eb7b33852e6f77d0c17280c2fef43e757f47f28e07227708bc2ce1d8dc81c8afee2e1509cee1d7c3d08ab8f615498770974f8f0d languageName: node linkType: hard "@lerna/query-graph@npm:5.6.2": version: 5.6.2 resolution: "@lerna/query-graph@npm:5.6.2" dependencies: "@lerna/package-graph": 5.6.2 checksum: a582795283760828417e3554ec015c68c815690bb7b29d7cf368a3a9d82f5150b8e6dbf02356cf4e4539b581d9879609876577ec87f3e4cc7a4caf605b2a042d languageName: node linkType: hard "@lerna/resolve-symlink@npm:5.6.2": version: 5.6.2 resolution: "@lerna/resolve-symlink@npm:5.6.2" dependencies: fs-extra: ^9.1.0 npmlog: ^6.0.2 read-cmd-shim: ^3.0.0 checksum: 19a95bb295ff9154f3661d36b54abfd5e415c0fb85a669a2fc7b600a180de13877b310d230c7782d8d5441324c5527c311f7a4afef57d6b8be04cbce5cd94927 languageName: node linkType: hard "@lerna/rimraf-dir@npm:5.6.2": version: 5.6.2 resolution: "@lerna/rimraf-dir@npm:5.6.2" dependencies: "@lerna/child-process": 5.6.2 npmlog: ^6.0.2 path-exists: ^4.0.0 rimraf: ^3.0.2 checksum: b0ec7dc69e3caa4c4eae88b8feedf248feff603e50d082a5f363fc0a1f604fc7b76d2067d69c79fdaa20675e3d5a87b59baaab6225c73dc1322b8705ce58030b languageName: node linkType: hard "@lerna/run-lifecycle@npm:5.6.2": version: 5.6.2 resolution: "@lerna/run-lifecycle@npm:5.6.2" dependencies: "@lerna/npm-conf": 5.6.2 "@npmcli/run-script": ^4.1.7 npmlog: ^6.0.2 p-queue: ^6.6.2 checksum: 3c05af8ddd442a2fba007a41daeac3157dbfe845c3123f106b738843e2615e2a7350c8381622a6b4a793e675340c5671baabef95e6c63398c39b2fcedcafe6fb languageName: node linkType: hard "@lerna/run-topologically@npm:5.6.2": version: 5.6.2 resolution: "@lerna/run-topologically@npm:5.6.2" dependencies: "@lerna/query-graph": 5.6.2 p-queue: ^6.6.2 checksum: d10b59ddff43c0f8387bcd7f9618d135ae6f33ba23d74d9d2fa16cece4209759f8ada46e1050cff07ad82388eda4774a7f0a1690bac4b36ce8f3a23c2718d0d3 languageName: node linkType: hard "@lerna/run@npm:5.6.2": version: 5.6.2 resolution: "@lerna/run@npm:5.6.2" dependencies: "@lerna/command": 5.6.2 "@lerna/filter-options": 5.6.2 "@lerna/npm-run-script": 5.6.2 "@lerna/output": 5.6.2 "@lerna/profiler": 5.6.2 "@lerna/run-topologically": 5.6.2 "@lerna/timer": 5.6.2 "@lerna/validation-error": 5.6.2 fs-extra: ^9.1.0 p-map: ^4.0.0 checksum: a3ed53fea86b2b80d0c95aa2a9f007e524cde35422ebad312e21adaeae8564475f3d2a5ab40612ab8be1bfe8e935b61115808833e3e281ab93240f1b38b7d69a languageName: node linkType: hard "@lerna/symlink-binary@npm:5.6.2": version: 5.6.2 resolution: "@lerna/symlink-binary@npm:5.6.2" dependencies: "@lerna/create-symlink": 5.6.2 "@lerna/package": 5.6.2 fs-extra: ^9.1.0 p-map: ^4.0.0 checksum: f4d633677cde5b27e580c064ffca60b46be6808afcab5bd327e3c4e4d0cb7a924d79d5022f87f1e2209014687c75cb7c59d8514cab3911f4e14a5b5bbbf96fec languageName: node linkType: hard "@lerna/symlink-dependencies@npm:5.6.2": version: 5.6.2 resolution: "@lerna/symlink-dependencies@npm:5.6.2" dependencies: "@lerna/create-symlink": 5.6.2 "@lerna/resolve-symlink": 5.6.2 "@lerna/symlink-binary": 5.6.2 fs-extra: ^9.1.0 p-map: ^4.0.0 p-map-series: ^2.1.0 checksum: f1de8b38288f42647a0c663b8d6c701bf80acadaaf566830f736d3aae4b9f6dc0bac2fb3a771a266c62bcc72dd3b02b9ab5c2b4ccba40ad9e91894c08a168df8 languageName: node linkType: hard "@lerna/temp-write@npm:5.6.2": version: 5.6.2 resolution: "@lerna/temp-write@npm:5.6.2" dependencies: graceful-fs: ^4.1.15 is-stream: ^2.0.0 make-dir: ^3.0.0 temp-dir: ^1.0.0 uuid: ^8.3.2 checksum: 9a3ef13e08230a88de046aaaba0efdc2b5e27f16abd97af03b395bc2cf40ec52d8b6850d25a913b955046f52013c4a99b3e75a48397356d0a9a86b0f97afa905 languageName: node linkType: hard "@lerna/timer@npm:5.6.2": version: 5.6.2 resolution: "@lerna/timer@npm:5.6.2" checksum: 3eb43f371f5e357a42ec0a69722b13feff3967c88057334562366ffae40ce5ee7750718a498037e1f0ab9d438274357c4033561f068a76b1a6f98861a5eeae0c languageName: node linkType: hard "@lerna/validation-error@npm:5.6.2": version: 5.6.2 resolution: "@lerna/validation-error@npm:5.6.2" dependencies: npmlog: ^6.0.2 checksum: 3871cbacc7668ab2b0498f3d394ea65fa721257402cffa89efb97f6bed89d11504f554d25007d079e679181bcbbf773432745733654f8415e901c7d08a6ae06b languageName: node linkType: hard "@lerna/version@npm:5.6.2": version: 5.6.2 resolution: "@lerna/version@npm:5.6.2" dependencies: "@lerna/check-working-tree": 5.6.2 "@lerna/child-process": 5.6.2 "@lerna/collect-updates": 5.6.2 "@lerna/command": 5.6.2 "@lerna/conventional-commits": 5.6.2 "@lerna/github-client": 5.6.2 "@lerna/gitlab-client": 5.6.2 "@lerna/output": 5.6.2 "@lerna/prerelease-id-from-version": 5.6.2 "@lerna/prompt": 5.6.2 "@lerna/run-lifecycle": 5.6.2 "@lerna/run-topologically": 5.6.2 "@lerna/temp-write": 5.6.2 "@lerna/validation-error": 5.6.2 "@nrwl/devkit": ">=14.8.1 < 16" chalk: ^4.1.0 dedent: ^0.7.0 load-json-file: ^6.2.0 minimatch: ^3.0.4 npmlog: ^6.0.2 p-map: ^4.0.0 p-pipe: ^3.1.0 p-reduce: ^2.1.0 p-waterfall: ^2.1.1 semver: ^7.3.4 slash: ^3.0.0 write-json-file: ^4.3.0 checksum: da0e0b822af685b0553dac95aa1355b5bfb9abde208d1afcc1a0e38134c49e7d3dc1430d0c951ffad236032bba5c242025754494dd6ceb5ad913f3cc8b9113b3 languageName: node linkType: hard "@lerna/write-log-file@npm:5.6.2": version: 5.6.2 resolution: "@lerna/write-log-file@npm:5.6.2" dependencies: npmlog: ^6.0.2 write-file-atomic: ^4.0.1 checksum: 814e9cf20ac28be49b22720be7bef8f708b28c344d54a0664cb8c44bbcb11387c4f89abf1050cfc81b41fa770099c748ac97fdb99d8a016c9e2c3ca801f27a30 languageName: node linkType: hard "@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2, @lezer/common@npm:^1.1.0, @lezer/common@npm:^1.2.0, @lezer/common@npm:^1.2.1": version: 1.2.1 resolution: "@lezer/common@npm:1.2.1" checksum: 0bd092e293a509ce334f4aaf9a4d4a25528f743cd9d7e7948c697e34ac703b805b288b62ad01563488fb206fc34ff05084f7fc5d864be775924b3d0d53ea5dd2 languageName: node linkType: hard "@lezer/cpp@npm:^1.0.0": version: 1.1.2 resolution: "@lezer/cpp@npm:1.1.2" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: a319cd46fd32affc07c9432e9b2b9954becf7766be0361176c525d03474bb794cc051aad9932f48c9df33833eee1d6bfdccab12e571f2b137b4ca765c60c75de languageName: node linkType: hard "@lezer/css@npm:^1.0.0, @lezer/css@npm:^1.1.0": version: 1.1.8 resolution: "@lezer/css@npm:1.1.8" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 1f5968360dbac7ba27f0c2a194143769f7b01824715274dd8507dacf13cc790bb8c48ce95de355e9c58be93bb3e271bf98b9fc51213f79e4ce918e7c7ebbef04 languageName: node linkType: hard "@lezer/generator@npm:^1.7.0": version: 1.7.0 resolution: "@lezer/generator@npm:1.7.0" dependencies: "@lezer/common": ^1.1.0 "@lezer/lr": ^1.3.0 bin: lezer-generator: src/lezer-generator.cjs checksum: 69f4c6625446cb65adaa509480ec67502f27651707a8e45e99373e682d7f66f8842205669f174bcb138eade72c64ded0b54d6de6aa5af995ac1f1e805ef021fd languageName: node linkType: hard "@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.2.0": version: 1.2.0 resolution: "@lezer/highlight@npm:1.2.0" dependencies: "@lezer/common": ^1.0.0 checksum: 5b9dfe741f95db13f6124cb9556a43011cb8041ecf490be98d44a86b04d926a66e912bcd3a766f6a3d79e064410f1a2f60ab240b50b645a12c56987bf4870086 languageName: node linkType: hard "@lezer/html@npm:^1.3.0": version: 1.3.9 resolution: "@lezer/html@npm:1.3.9" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 40d89b0af4379768ce7d3e7162988e9ec73b42984e333e877c7451f7e2c10131e39e4b50150bc334093cbd84a3b34f9fc1a6ac62cbba51f503a495ad243e880b languageName: node linkType: hard "@lezer/java@npm:^1.0.0": version: 1.1.2 resolution: "@lezer/java@npm:1.1.2" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 752e8c9b99cccf022669a702016e0c3a793d8326e043b1d053159f5de4d222cd188e8e31e1427cbe6a8ed8e53de3977ab551c64cbd5a76a12eb3a1da5e18b6a5 languageName: node linkType: hard "@lezer/javascript@npm:^1.0.0": version: 1.4.16 resolution: "@lezer/javascript@npm:1.4.16" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.1.3 "@lezer/lr": ^1.3.0 checksum: 20fcf5ad95d3cf0155af8a060045d1c14609e1178669e087f246854d1ef7e7326e512cc05f90db1bcbd58ce229fcc7aa8600c7f757580c5f980c420835a2cd3c languageName: node linkType: hard "@lezer/json@npm:^1.0.0": version: 1.0.2 resolution: "@lezer/json@npm:1.0.2" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: f899d13765d95599c9199fc3404cb57969031dc40ce07de30f4e648979153966581f0bee02e2f8f70463b0a5322206a97c2fe8d5d14f218888c72a6dcedf90ef languageName: node linkType: hard "@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0": version: 1.4.0 resolution: "@lezer/lr@npm:1.4.0" dependencies: "@lezer/common": ^1.0.0 checksum: 4c8517017e9803415c6c5cb8230d8764107eafd7d0b847676cd1023abb863a4b268d0d01c7ce3cf1702c4749527c68f0a26b07c329cb7b68c36ed88362d7b193 languageName: node linkType: hard "@lezer/markdown@npm:^1.0.0, @lezer/markdown@npm:^1.2.0": version: 1.3.0 resolution: "@lezer/markdown@npm:1.3.0" dependencies: "@lezer/common": ^1.0.0 "@lezer/highlight": ^1.0.0 checksum: 13eb2720e4cb84278349bad8af116f748813094f99fad02680010c3a8c5985e0358c344487990f87a31ef0d6c1a2be582301f914c0e4a6e9cfa22647b6cd6545 languageName: node linkType: hard "@lezer/php@npm:^1.0.0": version: 1.0.2 resolution: "@lezer/php@npm:1.0.2" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.1.0 checksum: c85ef18571d37826b687dd141a0fe110f5814adaf9d1a391e7e482020d7f81df189ca89ec0dd141c1433d48eff4c6e53648b46f008dea8ad2dc574f35f1d4d79 languageName: node linkType: hard "@lezer/python@npm:^1.1.4": version: 1.1.13 resolution: "@lezer/python@npm:1.1.13" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: 43465f3289063e16caac9a109f61b8f810dd6a0e1043874df1b4d0f1cee5fba39cfd8c78fa2e507c0aa8f50cee8c48fe36df549ac1f959dae8d51c06e8ec0d0b languageName: node linkType: hard "@lezer/rust@npm:^1.0.0": version: 1.0.2 resolution: "@lezer/rust@npm:1.0.2" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: fc5e97852b42beeb44a0ebe316dc64e3cc49ff481c22e3e67d6003fc4a5c257fcd94959cfcc76cd154fa172db9b3b4b28de5c09f10550d6e5f14869ddc274e5b languageName: node linkType: hard "@lezer/xml@npm:^1.0.0": version: 1.0.5 resolution: "@lezer/xml@npm:1.0.5" dependencies: "@lezer/common": ^1.2.0 "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 checksum: a0a077b9e455b03593b93a7fdff2a4eab2cb7b230c8e1b878a8bebe80184632b9cc75ca018f1f9e2acb3a26e1386f4777385ab6e87aea70ccf479cde5ca268ee languageName: node linkType: hard "@ljharb/through@npm:^2.3.13": version: 2.3.13 resolution: "@ljharb/through@npm:2.3.13" dependencies: call-bind: ^1.0.7 checksum: 0255464a0ec7901b08cff3e99370b87e66663f46249505959c0cb4f6121095d533bbb7c7cda338063d3e134cbdd721e2705bc18eac7611b4f9ead6e7935d13ba languageName: node linkType: hard "@lumino/algorithm@npm:^1.1.0, @lumino/algorithm@npm:^1.9.0, @lumino/algorithm@npm:^1.9.1 || ^2.1, @lumino/algorithm@npm:^1.9.2": version: 1.9.2 resolution: "@lumino/algorithm@npm:1.9.2" checksum: a89e7c63504236119634858e271db1cc649684d30ced5a6ebe2788af7c0837f1e05a6fd3047d8525eb756c42ce137f76b3688f75fd3ef915b71cd4f213dfbb96 languageName: node linkType: hard "@lumino/algorithm@npm:^1.11.1 || ^2.0.0, @lumino/algorithm@npm:^2.0.1": version: 2.0.1 resolution: "@lumino/algorithm@npm:2.0.1" checksum: cbf7fcf6ee6b785ea502cdfddc53d61f9d353dcb9659343511d5cd4b4030be2ff2ca4c08daec42f84417ab0318a3d9972a17319fa5231693e109ab112dcf8000 languageName: node linkType: hard "@lumino/application@npm:^2.3.1": version: 2.3.1 resolution: "@lumino/application@npm:2.3.1" dependencies: "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/widgets": ^2.3.2 checksum: c112789d99baf62e5c2cee98834bc3efb5027bbca1aac81f10ea8855c0cd2538ec0a7c56c3f5dd42dce244e6892ef5bf8ef356f97e1cd4c161b99eb2068c195c languageName: node linkType: hard "@lumino/collections@npm:^1.9.3": version: 1.9.3 resolution: "@lumino/collections@npm:1.9.3" dependencies: "@lumino/algorithm": ^1.9.2 checksum: 1c87a12743eddd6f6b593e47945a5645e2f99ad61c5192499b0745e48ee9aff263c7145541e77dfeea4c9f50bdd017fddfa47bfc60e718de4f28533ce45bf8c3 languageName: node linkType: hard "@lumino/collections@npm:^2.0.1": version: 2.0.1 resolution: "@lumino/collections@npm:2.0.1" dependencies: "@lumino/algorithm": ^2.0.1 checksum: 8a29b7973a388a33c5beda0819dcd2dc2aad51a8406dcfd4581b055a9f77a39dc5800f7a8b4ae3c0bb97ae7b56a7a869e2560ffb7a920a28e93b477ba05907d6 languageName: node linkType: hard "@lumino/commands@npm:^1.19.0, @lumino/commands@npm:^1.21.1": version: 1.21.1 resolution: "@lumino/commands@npm:1.21.1" dependencies: "@lumino/algorithm": ^1.9.2 "@lumino/coreutils": ^1.12.1 "@lumino/disposable": ^1.10.4 "@lumino/domutils": ^1.8.2 "@lumino/keyboard": ^1.8.2 "@lumino/signaling": ^1.11.1 "@lumino/virtualdom": ^1.14.3 checksum: 1e2ee7ce14b7241aee829df76f2bee6c046a82c2c137c6bb58049142c52a67f8ae74168fdcc4027b0d5a1c9f2ffa8b8f5231ef89f6f0ea8dcc4cab8d475e1ad4 languageName: node linkType: hard "@lumino/commands@npm:^2.3.0": version: 2.3.0 resolution: "@lumino/commands@npm:2.3.0" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/domutils": ^2.0.1 "@lumino/keyboard": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 checksum: a9b83bbfcc0421ff501e818dd234c65db438a8abb450628db0dea9ee05e8077d10b2275e7e2289f6df9c20dc26d2af458b1db88ccf43ec69f185eb207dbad419 languageName: node linkType: hard "@lumino/coreutils@npm:^1.11.0 || ^2.0.0, @lumino/coreutils@npm:^1.11.0 || ^2.1.2, @lumino/coreutils@npm:^1.11.1 || ^2, @lumino/coreutils@npm:^1.11.1 || ^2.1, @lumino/coreutils@npm:^2.1.2": version: 2.1.2 resolution: "@lumino/coreutils@npm:2.1.2" checksum: 7865317ac0676b448d108eb57ab5d8b2a17c101995c0f7a7106662d9fe6c859570104525f83ee3cda12ae2e326803372206d6f4c1f415a5b59e4158a7b81066f languageName: node linkType: hard "@lumino/coreutils@npm:^1.11.0, @lumino/coreutils@npm:^1.12.1, @lumino/coreutils@npm:^1.2.0": version: 1.12.1 resolution: "@lumino/coreutils@npm:1.12.1" peerDependencies: crypto: 1.0.1 checksum: 55f1b87997f8dd0af28ff23c2d4b3aa252e515b9d3bc91b350a5c6c8526ceae61b14b55dc0d8d01691c69d42974b3d559f2b49bc7ced0f474b8f5dc52b3e83ed languageName: node linkType: hard "@lumino/disposable@npm:^1.10.0 || ^2.0.0, @lumino/disposable@npm:^1.10.1 || ^2.1, @lumino/disposable@npm:^2.1.2": version: 2.1.2 resolution: "@lumino/disposable@npm:2.1.2" dependencies: "@lumino/signaling": ^2.1.2 checksum: ac2fb2bf18d0b2939fda454f3db248a0ff6e8a77b401e586d1caa9293b3318f808b93a117c9c3ac27cd17aab545aea83b49108d099b9b2f5503ae2a012fbc6e2 languageName: node linkType: hard "@lumino/disposable@npm:^1.10.0, @lumino/disposable@npm:^1.10.4": version: 1.10.4 resolution: "@lumino/disposable@npm:1.10.4" dependencies: "@lumino/algorithm": ^1.9.2 "@lumino/signaling": ^1.11.1 checksum: b53e259830f1d3231455548e6b95c9ae0f4b91e1b501980a1d0bb9708322bf5469b5cbb4e5005653d6f33b549d4bb7e58ce02226477876f51c124ea755152a33 languageName: node linkType: hard "@lumino/domutils@npm:^1.1.0, @lumino/domutils@npm:^1.8.1 || ^2.1, @lumino/domutils@npm:^1.8.2": version: 1.8.2 resolution: "@lumino/domutils@npm:1.8.2" checksum: 196f25316a17cd8df8f11dbe17f10cbd96e5ce166ea97aab6402307dc554382423d860859bb5d05226f05909748b781fb281bb9220690fe1f3ddc716072c2ed5 languageName: node linkType: hard "@lumino/domutils@npm:^2.0.1": version: 2.0.1 resolution: "@lumino/domutils@npm:2.0.1" checksum: 61fa0ab226869dfbb763fc426790cf5a43b7d6f4cea1364c6dd56d61c44bff05eea188d33ff847449608ef58ed343161bee15c19b96f35410e4ee35815dc611a languageName: node linkType: hard "@lumino/dragdrop@npm:^1.14.5": version: 1.14.5 resolution: "@lumino/dragdrop@npm:1.14.5" dependencies: "@lumino/coreutils": ^1.12.1 "@lumino/disposable": ^1.10.4 checksum: c10031e9aa9ef7f3ab71a1b73f761b84291dda85a449e5f4d2d7c462277759a947513eb7ee3e3d984f7cfc2730b1c96d0706124802492f9adbd7be00d13137ee languageName: node linkType: hard "@lumino/dragdrop@npm:^2.1.4": version: 2.1.4 resolution: "@lumino/dragdrop@npm:2.1.4" dependencies: "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 checksum: 43d82484b13b38b612e7dfb424a840ed6a38d0db778af10655c4ba235c67b5b12db1683929b35a36ab2845f77466066dfd1ee25c1c273e8e175677eba9dc560d languageName: node linkType: hard "@lumino/keyboard@npm:^1.8.2": version: 1.8.2 resolution: "@lumino/keyboard@npm:1.8.2" checksum: 30f8ced53ca0aa466dba33be3c9379a2a6abcf1c52485073d9f9d9bc119eb3327a7343fad764c2d63a8a30ae05c0047098c40ec605e60af215356f3edb9ab4a9 languageName: node linkType: hard "@lumino/keyboard@npm:^2.0.1": version: 2.0.1 resolution: "@lumino/keyboard@npm:2.0.1" checksum: cf33f13427a418efd7cc91061233321e860d5404f3d86397781028309bef86c8ad2d88276ffe335c1db0fe619bd9d1e60641c81f881696957a58703ee4652c3e languageName: node linkType: hard "@lumino/messaging@npm:^1.10.0, @lumino/messaging@npm:^1.10.1 || ^2.1, @lumino/messaging@npm:^1.10.3, @lumino/messaging@npm:^1.2.1": version: 1.10.3 resolution: "@lumino/messaging@npm:1.10.3" dependencies: "@lumino/algorithm": ^1.9.2 "@lumino/collections": ^1.9.3 checksum: 1131e80379fa9b8a9b5d3418c90e25d4be48e2c92ec711518190772f9e8845a695bef45daddd06a129168cf6f158c8ad80ae86cb245f566e9195bbd9a0843b7a languageName: node linkType: hard "@lumino/messaging@npm:^2.0.1": version: 2.0.1 resolution: "@lumino/messaging@npm:2.0.1" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/collections": ^2.0.1 checksum: 964c4651c374b17452b4252b7d71500b32d2ecd87c192fc5bcf5d3bd1070661d78d07edcac8eca7d1d6fd50aa25992505485e1296d6dd995691b8e349b652045 languageName: node linkType: hard "@lumino/polling@npm:^1.9.0": version: 1.11.4 resolution: "@lumino/polling@npm:1.11.4" dependencies: "@lumino/coreutils": ^1.12.1 "@lumino/disposable": ^1.10.4 "@lumino/signaling": ^1.11.1 checksum: d4625da7bf5399f6bffed29251daaeb4bf14a0733ad77ad1573c9893973480961be445d8700a5d004102d14ab5a2cf4b79244b1fe74680d060167e55db211c04 languageName: node linkType: hard "@lumino/polling@npm:^2.1.2": version: 2.1.2 resolution: "@lumino/polling@npm:2.1.2" dependencies: "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/signaling": ^2.1.2 checksum: fa9b401e6dbeb8f31d7e3ba485e8ef1e0c92b3f2da086239c0ed49931026f5d3528709193c93e031e35ac624fb4bbbfcdcbaa0e25eb797f36e2952e5cd91e9e3 languageName: node linkType: hard "@lumino/properties@npm:^1.8.0, @lumino/properties@npm:^1.8.2": version: 1.8.2 resolution: "@lumino/properties@npm:1.8.2" checksum: 9a53709fe58d3abbc99062f0c0fda4d5f64a4c7dca509251f0f89cdcaf881fdf6172ee852dbfe70594ee34bb97255acca771a722d62e7e2150ba8cf6f7e7d15c languageName: node linkType: hard "@lumino/properties@npm:^2.0.1": version: 2.0.1 resolution: "@lumino/properties@npm:2.0.1" checksum: c50173a935148cc4148fdaea119df1d323ee004ae16ab666800388d27e9730345629662d85f25591683329b39f0cdae60ee8c94e8943b4d0ef7d7370a38128d6 languageName: node linkType: hard "@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^1.10.1 || ^2.1, @lumino/signaling@npm:^2.1.2": version: 2.1.2 resolution: "@lumino/signaling@npm:2.1.2" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/coreutils": ^2.1.2 checksum: ad7d7153db57980da899c43e412e6130316ef30b231a70250e7af49058db16cadb018c1417a2ea8083d83c48623cfe6b705fa82bf10216b1a8949aed9f4aca4e languageName: node linkType: hard "@lumino/signaling@npm:^1.10.0, @lumino/signaling@npm:^1.11.1, @lumino/signaling@npm:^1.2.0": version: 1.11.1 resolution: "@lumino/signaling@npm:1.11.1" dependencies: "@lumino/algorithm": ^1.9.2 "@lumino/properties": ^1.8.2 checksum: 3d822be705d9ba8adc46ec405a4422cd4f76ed774f94da5386a511f01df4325c3c8bfa288c9c812184c94cfd0c3ef7b1121dcc9c9489750ad6cfaa7ffb2a3a67 languageName: node linkType: hard "@lumino/virtualdom@npm:^1.14.3": version: 1.14.3 resolution: "@lumino/virtualdom@npm:1.14.3" dependencies: "@lumino/algorithm": ^1.9.2 checksum: dd6acc5402eb7961ab05f5ce9afaebce4258eb92111f4d97b58ac87a6453686376d2b7d0a2041a54eef6e78091e36a430c74834c97b862fba31fa82ef43c72cb languageName: node linkType: hard "@lumino/virtualdom@npm:^2.0.1": version: 2.0.1 resolution: "@lumino/virtualdom@npm:2.0.1" dependencies: "@lumino/algorithm": ^2.0.1 checksum: cf59b6f15b430e13e9e657b7a0619b9056cd9ea7b2a87f407391d071c501b77403c302b6a66dca510382045e75b2e3fe551630bb391f1c6b33678057d4bec164 languageName: node linkType: hard "@lumino/widgets@npm:^1.3.0": version: 1.37.2 resolution: "@lumino/widgets@npm:1.37.2" dependencies: "@lumino/algorithm": ^1.9.2 "@lumino/commands": ^1.21.1 "@lumino/coreutils": ^1.12.1 "@lumino/disposable": ^1.10.4 "@lumino/domutils": ^1.8.2 "@lumino/dragdrop": ^1.14.5 "@lumino/keyboard": ^1.8.2 "@lumino/messaging": ^1.10.3 "@lumino/properties": ^1.8.2 "@lumino/signaling": ^1.11.1 "@lumino/virtualdom": ^1.14.3 checksum: 3193f8cca4bad2c9d59031515b7b81b8a3655088f2b8c4f69f575116140d45c5caed935da0ed3fab9dc5ce96fde037bfa5fef0c129921955b3fb73cf725d1b06 languageName: node linkType: hard "@lumino/widgets@npm:^1.30.0 || ^2.1, @lumino/widgets@npm:^1.37.2 || ^2.3.2, @lumino/widgets@npm:^2.3.2": version: 2.3.2 resolution: "@lumino/widgets@npm:2.3.2" dependencies: "@lumino/algorithm": ^2.0.1 "@lumino/commands": ^2.3.0 "@lumino/coreutils": ^2.1.2 "@lumino/disposable": ^2.1.2 "@lumino/domutils": ^2.0.1 "@lumino/dragdrop": ^2.1.4 "@lumino/keyboard": ^2.0.1 "@lumino/messaging": ^2.0.1 "@lumino/properties": ^2.0.1 "@lumino/signaling": ^2.1.2 "@lumino/virtualdom": ^2.0.1 checksum: 954fe066b0826cf00c019731bb3f70e635c63be4a0ce27f7573dbe6bd59e2154f511594b50e8f58f44877cf514084128c1e894ecbbbfd6e20d937e5cfb69ca8b languageName: node linkType: hard "@microsoft/fast-colors@npm:^5.3.1": version: 5.3.1 resolution: "@microsoft/fast-colors@npm:5.3.1" checksum: ff87f402faadb4b5aeee3d27762566c11807f927cd4012b8bbc7f073ca68de0e2197f95330ff5dfd7038f4b4f0e2f51b11feb64c5d570f5c598d37850a5daf60 languageName: node linkType: hard "@microsoft/fast-element@npm:^1.12.0, @microsoft/fast-element@npm:^1.13.0": version: 1.13.0 resolution: "@microsoft/fast-element@npm:1.13.0" checksum: 1cb7b4cfb7531116a3542d3f59bf1dd35106194f5764205403590250aaff744de79e35a5a1f36b4941c4eda9edc088148d4d629fb80be15fdf25f6be01770f3a languageName: node linkType: hard "@microsoft/fast-foundation@npm:^2.49.4, @microsoft/fast-foundation@npm:^2.49.6": version: 2.49.6 resolution: "@microsoft/fast-foundation@npm:2.49.6" dependencies: "@microsoft/fast-element": ^1.13.0 "@microsoft/fast-web-utilities": ^5.4.1 tabbable: ^5.2.0 tslib: ^1.13.0 checksum: 15fdf9dd0b910a72a9cff140f765d522304df11f8a78d5a97a815e2bbae25027c2b336e94f89ca31e650d6aabe17b590b7453acc0d2cb7340c219eb76350a942 languageName: node linkType: hard "@microsoft/fast-react-wrapper@npm:^0.3.22": version: 0.3.24 resolution: "@microsoft/fast-react-wrapper@npm:0.3.24" dependencies: "@microsoft/fast-element": ^1.13.0 "@microsoft/fast-foundation": ^2.49.6 peerDependencies: react: ">=16.9.0" checksum: 1d7a87509c22872bafc9b5c64f66659e52ba0cfdff484d7204125e503dafdea143f5e1bd2a643e2f3fbba6cc7567d916393369433f19dab9f0adcbe7a88b7d98 languageName: node linkType: hard "@microsoft/fast-web-utilities@npm:^5.4.1": version: 5.4.1 resolution: "@microsoft/fast-web-utilities@npm:5.4.1" dependencies: exenv-es6: ^1.1.1 checksum: 303e87847f962944f474e3716c3eb305668243916ca9e0719e26bb9a32346144bc958d915c103776b3e552cea0f0f6233f839fad66adfdf96a8436b947288ca7 languageName: node linkType: hard "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" dependencies: "@nodelib/fs.stat": 2.0.5 run-parallel: ^1.1.9 checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 languageName: node linkType: hard "@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": version: 2.0.5 resolution: "@nodelib/fs.stat@npm:2.0.5" checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 languageName: node linkType: hard "@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: "@nodelib/fs.scandir": 2.1.5 fastq: ^1.6.0 checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 languageName: node linkType: hard "@npmcli/agent@npm:^2.0.0": version: 2.2.2 resolution: "@npmcli/agent@npm:2.2.2" dependencies: agent-base: ^7.1.0 http-proxy-agent: ^7.0.0 https-proxy-agent: ^7.0.1 lru-cache: ^10.0.1 socks-proxy-agent: ^8.0.3 checksum: 67de7b88cc627a79743c88bab35e023e23daf13831a8aa4e15f998b92f5507b644d8ffc3788afc8e64423c612e0785a6a92b74782ce368f49a6746084b50d874 languageName: node linkType: hard "@npmcli/arborist@npm:5.3.0": version: 5.3.0 resolution: "@npmcli/arborist@npm:5.3.0" dependencies: "@isaacs/string-locale-compare": ^1.1.0 "@npmcli/installed-package-contents": ^1.0.7 "@npmcli/map-workspaces": ^2.0.3 "@npmcli/metavuln-calculator": ^3.0.1 "@npmcli/move-file": ^2.0.0 "@npmcli/name-from-folder": ^1.0.1 "@npmcli/node-gyp": ^2.0.0 "@npmcli/package-json": ^2.0.0 "@npmcli/run-script": ^4.1.3 bin-links: ^3.0.0 cacache: ^16.0.6 common-ancestor-path: ^1.0.1 json-parse-even-better-errors: ^2.3.1 json-stringify-nice: ^1.1.4 mkdirp: ^1.0.4 mkdirp-infer-owner: ^2.0.0 nopt: ^5.0.0 npm-install-checks: ^5.0.0 npm-package-arg: ^9.0.0 npm-pick-manifest: ^7.0.0 npm-registry-fetch: ^13.0.0 npmlog: ^6.0.2 pacote: ^13.6.1 parse-conflict-json: ^2.0.1 proc-log: ^2.0.0 promise-all-reject-late: ^1.0.0 promise-call-limit: ^1.0.1 read-package-json-fast: ^2.0.2 readdir-scoped-modules: ^1.1.0 rimraf: ^3.0.2 semver: ^7.3.7 ssri: ^9.0.0 treeverse: ^2.0.0 walk-up-path: ^1.0.0 bin: arborist: bin/index.js checksum: 7f99f451ba625dd3532e7a69b27cc399cab1e7ef2a069bbc04cf22ef9d16a0076f8f5fb92c4cd146c256cd8a41963b2e417684f063a108e96939c440bad0e95e languageName: node linkType: hard "@npmcli/fs@npm:^2.1.0": version: 2.1.2 resolution: "@npmcli/fs@npm:2.1.2" dependencies: "@gar/promisify": ^1.1.3 semver: ^7.3.5 checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 languageName: node linkType: hard "@npmcli/fs@npm:^3.1.0": version: 3.1.1 resolution: "@npmcli/fs@npm:3.1.1" dependencies: semver: ^7.3.5 checksum: d960cab4b93adcb31ce223bfb75c5714edbd55747342efb67dcc2f25e023d930a7af6ece3e75f2f459b6f38fc14d031c766f116cd124fdc937fd33112579e820 languageName: node linkType: hard "@npmcli/git@npm:^3.0.0": version: 3.0.2 resolution: "@npmcli/git@npm:3.0.2" dependencies: "@npmcli/promise-spawn": ^3.0.0 lru-cache: ^7.4.4 mkdirp: ^1.0.4 npm-pick-manifest: ^7.0.0 proc-log: ^2.0.0 promise-inflight: ^1.0.1 promise-retry: ^2.0.1 semver: ^7.3.5 which: ^2.0.2 checksum: bdfd1229bb1113ad4883ef89b74b5dc442a2c96225d830491dd0dec4fa83d083b93cde92b6978d4956a8365521e61bc8dc1891fb905c7c693d5d6aa178f2ab44 languageName: node linkType: hard "@npmcli/installed-package-contents@npm:^1.0.7": version: 1.0.7 resolution: "@npmcli/installed-package-contents@npm:1.0.7" dependencies: npm-bundled: ^1.1.1 npm-normalize-package-bin: ^1.0.1 bin: installed-package-contents: index.js checksum: a4a29b99d439827ce2e7817c1f61b56be160e640696e31dc513a2c8a37c792f75cdb6258ec15a1e22904f20df0a8a3019dd3766de5e6619f259834cf64233538 languageName: node linkType: hard "@npmcli/map-workspaces@npm:^2.0.3": version: 2.0.4 resolution: "@npmcli/map-workspaces@npm:2.0.4" dependencies: "@npmcli/name-from-folder": ^1.0.1 glob: ^8.0.1 minimatch: ^5.0.1 read-package-json-fast: ^2.0.3 checksum: cc8d662ac5115ad9822742a11e11d2d32eda74214bd0f4efec30c9cd833975b5b4c8409fe54ddbb451b040b17a943f770976506cba0f26cfccd58d99b5880d6f languageName: node linkType: hard "@npmcli/metavuln-calculator@npm:^3.0.1": version: 3.1.1 resolution: "@npmcli/metavuln-calculator@npm:3.1.1" dependencies: cacache: ^16.0.0 json-parse-even-better-errors: ^2.3.1 pacote: ^13.0.3 semver: ^7.3.5 checksum: dc9846fdb82a1f4274ff8943f81452c75615bd9bca523c862956ea2c32e18c5a4be5572e169104d3a0eb262b7ede72c8dbbc202a4ab3b3f4946fa55f226dcc64 languageName: node linkType: hard "@npmcli/move-file@npm:^2.0.0": version: 2.0.1 resolution: "@npmcli/move-file@npm:2.0.1" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 languageName: node linkType: hard "@npmcli/name-from-folder@npm:^1.0.1": version: 1.0.1 resolution: "@npmcli/name-from-folder@npm:1.0.1" checksum: 67339f4096e32b712d2df0250cc95c087569f09e657d7f81a1760fa2cc5123e29c3c3e1524388832310ba2d96ec4679985b643b44627f6a51f4a00c3b0075de9 languageName: node linkType: hard "@npmcli/node-gyp@npm:^2.0.0": version: 2.0.0 resolution: "@npmcli/node-gyp@npm:2.0.0" checksum: b6bbf0015000f9b64d31aefdc30f244b0348c57adb64017667e0304e96c38644d83da46a4581252652f5d606268df49118f9c9993b41d8020f62b7b15dd2c8d8 languageName: node linkType: hard "@npmcli/package-json@npm:^2.0.0": version: 2.0.0 resolution: "@npmcli/package-json@npm:2.0.0" dependencies: json-parse-even-better-errors: ^2.3.1 checksum: 7a598e42d2778654ec87438ebfafbcbafbe5a5f5e89ed2ca1db6ca3f94ef14655e304aa41f77632a2a3f5c66b6bd5960bd9370e0ceb4902ea09346720364f9e4 languageName: node linkType: hard "@npmcli/promise-spawn@npm:^3.0.0": version: 3.0.0 resolution: "@npmcli/promise-spawn@npm:3.0.0" dependencies: infer-owner: ^1.0.4 checksum: 3454465a2731cea5875ba51f80873e2205e5bd878c31517286b0ede4ea931c7bf3de895382287e906d03710fff6f9e44186bd0eee068ce578901c5d3b58e7692 languageName: node linkType: hard "@npmcli/run-script@npm:^4.1.0, @npmcli/run-script@npm:^4.1.3, @npmcli/run-script@npm:^4.1.7": version: 4.2.1 resolution: "@npmcli/run-script@npm:4.2.1" dependencies: "@npmcli/node-gyp": ^2.0.0 "@npmcli/promise-spawn": ^3.0.0 node-gyp: ^9.0.0 read-package-json-fast: ^2.0.3 which: ^2.0.2 checksum: 7b8d6676353f157e68b26baf848e01e5d887bcf90ce81a52f23fc9a5d93e6ffb60057532d664cfd7aeeb76d464d0c8b0d314ee6cccb56943acb3b6c570b756c8 languageName: node linkType: hard "@nrwl/cli@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/cli@npm:15.9.7" dependencies: nx: 15.9.7 checksum: 55bcd3ec4319bdcbd51184a01f5dc3c03ab2a79caa1240249f6ca11c3e33555954bfab19d9156b210bf46fea9b6d543312cd199cd1421cd9b21a84224a76dc73 languageName: node linkType: hard "@nrwl/devkit@npm:>=14.8.1 < 16": version: 15.9.7 resolution: "@nrwl/devkit@npm:15.9.7" dependencies: ejs: ^3.1.7 ignore: ^5.0.4 semver: 7.5.4 tmp: ~0.2.1 tslib: ^2.3.0 peerDependencies: nx: ">= 14.1 <= 16" checksum: ecfcd69042d691aa212d679f496a4bff5db3f2c756caa08f407dc70e4d581bcb3c71963d71f7db2b02832784df9e37b418a06d7b67a7dac73334e688bab2a5d4 languageName: node linkType: hard "@nrwl/nx-darwin-arm64@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-darwin-arm64@npm:15.9.7" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard "@nrwl/nx-darwin-x64@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-darwin-x64@npm:15.9.7" conditions: os=darwin & cpu=x64 languageName: node linkType: hard "@nrwl/nx-linux-arm-gnueabihf@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-linux-arm-gnueabihf@npm:15.9.7" conditions: os=linux & cpu=arm languageName: node linkType: hard "@nrwl/nx-linux-arm64-gnu@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-linux-arm64-gnu@npm:15.9.7" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard "@nrwl/nx-linux-arm64-musl@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-linux-arm64-musl@npm:15.9.7" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard "@nrwl/nx-linux-x64-gnu@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-linux-x64-gnu@npm:15.9.7" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard "@nrwl/nx-linux-x64-musl@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-linux-x64-musl@npm:15.9.7" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard "@nrwl/nx-win32-arm64-msvc@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-win32-arm64-msvc@npm:15.9.7" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard "@nrwl/nx-win32-x64-msvc@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/nx-win32-x64-msvc@npm:15.9.7" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@nrwl/tao@npm:15.9.7": version: 15.9.7 resolution: "@nrwl/tao@npm:15.9.7" dependencies: nx: 15.9.7 bin: tao: index.js checksum: 8c848c72f02de776086d2ad82928e15b102b2fb943eed5943a54375f16a75f2a3d2444385ead26bf3f465139d69fd5011ca429961be3970ed8addc7187880cd1 languageName: node linkType: hard "@octokit/auth-token@npm:^3.0.0": version: 3.0.4 resolution: "@octokit/auth-token@npm:3.0.4" checksum: 42f533a873d4192e6df406b3176141c1f95287423ebdc4cf23a38bb77ee00ccbc0e60e3fbd5874234fc2ed2e67bbc6035e3b0561dacc1d078adb5c4ced3579e3 languageName: node linkType: hard "@octokit/core@npm:^4.2.1": version: 4.2.4 resolution: "@octokit/core@npm:4.2.4" dependencies: "@octokit/auth-token": ^3.0.0 "@octokit/graphql": ^5.0.0 "@octokit/request": ^6.0.0 "@octokit/request-error": ^3.0.0 "@octokit/types": ^9.0.0 before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 checksum: ac8ab47440a31b0228a034aacac6994b64d6b073ad5b688b4c5157fc5ee0d1af1c926e6087bf17fd7244ee9c5998839da89065a90819bde4a97cb77d4edf58a6 languageName: node linkType: hard "@octokit/endpoint@npm:^7.0.0": version: 7.0.6 resolution: "@octokit/endpoint@npm:7.0.6" dependencies: "@octokit/types": ^9.0.0 is-plain-object: ^5.0.0 universal-user-agent: ^6.0.0 checksum: 7caebf30ceec50eb7f253341ed419df355232f03d4638a95c178ee96620400db7e4a5e15d89773fe14db19b8653d4ab4cc81b2e93ca0c760b4e0f7eb7ad80301 languageName: node linkType: hard "@octokit/graphql@npm:^5.0.0": version: 5.0.6 resolution: "@octokit/graphql@npm:5.0.6" dependencies: "@octokit/request": ^6.0.0 "@octokit/types": ^9.0.0 universal-user-agent: ^6.0.0 checksum: 7be545d348ef31dcab0a2478dd64d5746419a2f82f61459c774602bcf8a9b577989c18001f50b03f5f61a3d9e34203bdc021a4e4d75ff2d981e8c9c09cf8a65c languageName: node linkType: hard "@octokit/openapi-types@npm:^18.0.0": version: 18.1.1 resolution: "@octokit/openapi-types@npm:18.1.1" checksum: 94f42977fd2fcb9983c781fd199bc11218885a1226d492680bfb1268524a1b2af48a768eef90c63b80a2874437de641d59b3b7f640a5afa93e7c21fe1a79069a languageName: node linkType: hard "@octokit/plugin-enterprise-rest@npm:^6.0.1": version: 6.0.1 resolution: "@octokit/plugin-enterprise-rest@npm:6.0.1" checksum: 1c9720002f31daf62f4f48e73557dcdd7fcde6e0f6d43256e3f2ec827b5548417297186c361fb1af497fdcc93075a7b681e6ff06e2f20e4a8a3e74cc09d1f7e3 languageName: node linkType: hard "@octokit/plugin-paginate-rest@npm:^6.1.2": version: 6.1.2 resolution: "@octokit/plugin-paginate-rest@npm:6.1.2" dependencies: "@octokit/tsconfig": ^1.0.2 "@octokit/types": ^9.2.3 peerDependencies: "@octokit/core": ">=4" checksum: a7b3e686c7cbd27ec07871cde6e0b1dc96337afbcef426bbe3067152a17b535abd480db1861ca28c88d93db5f7bfdbcadd0919ead19818c28a69d0e194038065 languageName: node linkType: hard "@octokit/plugin-request-log@npm:^1.0.4": version: 1.0.4 resolution: "@octokit/plugin-request-log@npm:1.0.4" peerDependencies: "@octokit/core": ">=3" checksum: 2086db00056aee0f8ebd79797b5b57149ae1014e757ea08985b71eec8c3d85dbb54533f4fd34b6b9ecaa760904ae6a7536be27d71e50a3782ab47809094bfc0c languageName: node linkType: hard "@octokit/plugin-rest-endpoint-methods@npm:^7.1.2": version: 7.2.3 resolution: "@octokit/plugin-rest-endpoint-methods@npm:7.2.3" dependencies: "@octokit/types": ^10.0.0 peerDependencies: "@octokit/core": ">=3" checksum: 21dfb98514dbe900c29cddb13b335bbce43d613800c6b17eba3c1fd31d17e69c1960f3067f7bf864bb38fdd5043391f4a23edee42729d8c7fbabd00569a80336 languageName: node linkType: hard "@octokit/request-error@npm:^3.0.0": version: 3.0.3 resolution: "@octokit/request-error@npm:3.0.3" dependencies: "@octokit/types": ^9.0.0 deprecation: ^2.0.0 once: ^1.4.0 checksum: 5db0b514732686b627e6ed9ef1ccdbc10501f1b271a9b31f784783f01beee70083d7edcfeb35fbd7e569fa31fdd6762b1ff6b46101700d2d97e7e48e749520d0 languageName: node linkType: hard "@octokit/request@npm:^6.0.0": version: 6.2.8 resolution: "@octokit/request@npm:6.2.8" dependencies: "@octokit/endpoint": ^7.0.0 "@octokit/request-error": ^3.0.0 "@octokit/types": ^9.0.0 is-plain-object: ^5.0.0 node-fetch: ^2.6.7 universal-user-agent: ^6.0.0 checksum: 3747106f50d7c462131ff995b13defdd78024b7becc40283f4ac9ea0af2391ff33a0bb476a05aa710346fe766d20254979079a1d6f626112015ba271fe38f3e2 languageName: node linkType: hard "@octokit/rest@npm:^19.0.3": version: 19.0.13 resolution: "@octokit/rest@npm:19.0.13" dependencies: "@octokit/core": ^4.2.1 "@octokit/plugin-paginate-rest": ^6.1.2 "@octokit/plugin-request-log": ^1.0.4 "@octokit/plugin-rest-endpoint-methods": ^7.1.2 checksum: ca1553e3fe46efabffef60e68e4a228d4cc0f0d545daf7f019560f666d3e934c6f3a6402a42bbd786af4f3c0a6e69380776312f01b7d52998fe1bbdd1b068f69 languageName: node linkType: hard "@octokit/tsconfig@npm:^1.0.2": version: 1.0.2 resolution: "@octokit/tsconfig@npm:1.0.2" checksum: 74d56f3e9f326a8dd63700e9a51a7c75487180629c7a68bbafee97c612fbf57af8347369bfa6610b9268a3e8b833c19c1e4beb03f26db9a9dce31f6f7a19b5b1 languageName: node linkType: hard "@octokit/types@npm:^10.0.0": version: 10.0.0 resolution: "@octokit/types@npm:10.0.0" dependencies: "@octokit/openapi-types": ^18.0.0 checksum: 8aafba2ff0cd2435fb70c291bf75ed071c0fa8a865cf6169648732068a35dec7b85a345851f18920ec5f3e94ee0e954988485caac0da09ec3f6781cc44fe153a languageName: node linkType: hard "@octokit/types@npm:^9.0.0, @octokit/types@npm:^9.2.3": version: 9.3.2 resolution: "@octokit/types@npm:9.3.2" dependencies: "@octokit/openapi-types": ^18.0.0 checksum: f55d096aaed3e04b8308d4422104fb888f355988056ba7b7ef0a4c397b8a3e54290d7827b06774dbe0c9ce55280b00db486286954f9c265aa6b03091026d9da8 languageName: node linkType: hard "@parcel/watcher@npm:2.0.4": version: 2.0.4 resolution: "@parcel/watcher@npm:2.0.4" dependencies: node-addon-api: ^3.2.1 node-gyp: latest node-gyp-build: ^4.3.0 checksum: 890bdc69a52942791b276caa2cd65ef816576d6b5ada91aa28cf302b35d567c801dafe167f2525dcb313f5b420986ea11bd56228dd7ddde1116944d8f924a0a1 languageName: node linkType: hard "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f languageName: node linkType: hard "@rjsf/core@npm:^5.13.4": version: 5.18.4 resolution: "@rjsf/core@npm:5.18.4" dependencies: lodash: ^4.17.21 lodash-es: ^4.17.21 markdown-to-jsx: ^7.4.1 nanoid: ^3.3.7 prop-types: ^15.8.1 peerDependencies: "@rjsf/utils": ^5.18.x react: ^16.14.0 || >=17 checksum: 8c3f49914be396595ce67dc4c36ac25c5cb6673917ec82c47f79321f5bb78d02741e8dca39287d0435270e7c9ccb06f7d40e396bdf71a3e9eb1371ef16954817 languageName: node linkType: hard "@rjsf/utils@npm:^5.13.4": version: 5.18.4 resolution: "@rjsf/utils@npm:5.18.4" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 lodash: ^4.17.21 lodash-es: ^4.17.21 react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 checksum: d7cf514527ec50a94751c5ec1f9e5eafd89d0c56441a22ae28a4e667aaa7c60447e1e1ccf8355c5be5b97e9a1163853c116816b13307e3463433d50f6b89bb3e languageName: node linkType: hard "@sindresorhus/is@npm:^4.0.0": version: 4.6.0 resolution: "@sindresorhus/is@npm:4.6.0" checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 languageName: node linkType: hard "@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.3": version: 1.8.6 resolution: "@sinonjs/commons@npm:1.8.6" dependencies: type-detect: 4.0.8 checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d languageName: node linkType: hard "@sinonjs/commons@npm:^3.0.0": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" dependencies: type-detect: 4.0.8 checksum: a7c3e7cc612352f4004873747d9d8b2d4d90b13a6d483f685598c945a70e734e255f1ca5dc49702515533c403b32725defff148177453b3f3915bcb60e9d4601 languageName: node linkType: hard "@sinonjs/fake-timers@npm:^11.2.2": version: 11.2.2 resolution: "@sinonjs/fake-timers@npm:11.2.2" dependencies: "@sinonjs/commons": ^3.0.0 checksum: 68c29b0e1856fdc280df03ddbf57c726420b78e9f943a241b471edc018fb14ff36fdc1daafd6026cba08c3c7f50c976fb7ae11b88ff44cd7f609692ca7d25158 languageName: node linkType: hard "@sinonjs/fake-timers@npm:^8.1.0": version: 8.1.0 resolution: "@sinonjs/fake-timers@npm:8.1.0" dependencies: "@sinonjs/commons": ^1.7.0 checksum: 09b5a158ce013a6c37613258bad79ca4efeb99b1f59c41c73cca36cac00b258aefcf46eeea970fccf06b989414d86fe9f54c1102272c0c3bdd51a313cea80949 languageName: node linkType: hard "@sinonjs/samsam@npm:^6.0.2": version: 6.1.3 resolution: "@sinonjs/samsam@npm:6.1.3" dependencies: "@sinonjs/commons": ^1.6.0 lodash.get: ^4.4.2 type-detect: ^4.0.8 checksum: d533e8792af00879d78dd181822e8b00bb8a81671f2fbcf1c5257a59649b21d881ba7ddc42aaf09690d7325c8a6dcc7a1a341591a379742b54e4eb25b273417a languageName: node linkType: hard "@sinonjs/text-encoding@npm:^0.7.2": version: 0.7.2 resolution: "@sinonjs/text-encoding@npm:0.7.2" checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab languageName: node linkType: hard "@socket.io/component-emitter@npm:~3.1.0": version: 3.1.2 resolution: "@socket.io/component-emitter@npm:3.1.2" checksum: 89888f00699eb34e3070624eb7b8161fa29f064aeb1389a48f02195d55dd7c52a504e52160016859f6d6dffddd54324623cdd47fd34b3d46f9ed96c18c456edc languageName: node linkType: hard "@szmarczak/http-timer@npm:^4.0.5": version: 4.0.6 resolution: "@szmarczak/http-timer@npm:4.0.6" dependencies: defer-to-connect: ^2.0.0 checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 languageName: node linkType: hard "@tootallnate/once@npm:2": version: 2.0.0 resolution: "@tootallnate/once@npm:2.0.0" checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 languageName: node linkType: hard "@types/backbone@npm:1.4.14": version: 1.4.14 resolution: "@types/backbone@npm:1.4.14" dependencies: "@types/jquery": "*" "@types/underscore": "*" checksum: 4f44bfb71d75332b5de610be7687f4ae523ad4ef02da844a828403b534b6a94a6288b32cab64371d0ad526e35cfed511652ac53af22d0b9caaac3f4cfb4375dd languageName: node linkType: hard "@types/backbone@npm:^1.4.1": version: 1.4.19 resolution: "@types/backbone@npm:1.4.19" dependencies: "@types/jquery": "*" "@types/underscore": "*" checksum: fdd3452c9ccba44e54eeeeeab408421ae95e0303a971a45b908f33f6b1d33721fe559e38103a40103d3767c3334b10ce6f3a85659cd19cd30f0f4f30e5f5794f languageName: node linkType: hard "@types/base64-js@npm:^1.2.5": version: 1.3.2 resolution: "@types/base64-js@npm:1.3.2" checksum: 2081c32bb357cee5b39238aa96bd008722d7d88f0175cd13d06e1aa76ebc64aaa916bf463f7f0da90bae4f0aaa8cd2ba1bbcd9da9bea2112490372217175d79d languageName: node linkType: hard "@types/cacheable-request@npm:^6.0.1": version: 6.0.3 resolution: "@types/cacheable-request@npm:6.0.3" dependencies: "@types/http-cache-semantics": "*" "@types/keyv": ^3.1.4 "@types/node": "*" "@types/responselike": ^1.0.0 checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9 languageName: node linkType: hard "@types/chai-as-promised@npm:^7.1.0": version: 7.1.8 resolution: "@types/chai-as-promised@npm:7.1.8" dependencies: "@types/chai": "*" checksum: f0e5eab451b91bc1e289ed89519faf6591932e8a28d2ec9bbe95826eb73d28fe43713633e0c18706f3baa560a7d97e7c7c20dc53ce639e5d75bac46b2a50bf21 languageName: node linkType: hard "@types/chai@npm:*, @types/chai@npm:^4.1.7": version: 4.3.16 resolution: "@types/chai@npm:4.3.16" checksum: bb5f52d1b70534ed8b4bf74bd248add003ffe1156303802ea367331607c06b494da885ffbc2b674a66b4f90c9ee88759790a5f243879f6759f124f22328f5e95 languageName: node linkType: hard "@types/codemirror@npm:^5.60.0": version: 5.60.15 resolution: "@types/codemirror@npm:5.60.15" dependencies: "@types/tern": "*" checksum: cfad3f569de48fba3efa44fdfeba77933e231486a52cc80cff7ce6eeeed5b447a5bc2b11e2226bc00ccee332c661e53e35a15cf14eb835f434a6a402d9462f5f languageName: node linkType: hard "@types/cookie@npm:^0.4.1": version: 0.4.1 resolution: "@types/cookie@npm:0.4.1" checksum: 3275534ed69a76c68eb1a77d547d75f99fedc80befb75a3d1d03662fb08d697e6f8b1274e12af1a74c6896071b11510631ba891f64d30c78528d0ec45a9c1a18 languageName: node linkType: hard "@types/cors@npm:^2.8.12": version: 2.8.17 resolution: "@types/cors@npm:2.8.17" dependencies: "@types/node": "*" checksum: 469bd85e29a35977099a3745c78e489916011169a664e97c4c3d6538143b0a16e4cc72b05b407dc008df3892ed7bf595f9b7c0f1f4680e169565ee9d64966bde languageName: node linkType: hard "@types/d3-color@npm:^3.0.2": version: 3.1.3 resolution: "@types/d3-color@npm:3.1.3" checksum: 8a0e79a709929502ec4effcee2c786465b9aec51b653ba0b5d05dbfec3e84f418270dd603002d94021885061ff592f614979193bd7a02ad76317f5608560e357 languageName: node linkType: hard "@types/d3-format@npm:^3.0.1": version: 3.0.4 resolution: "@types/d3-format@npm:3.0.4" checksum: e69421cd93861a0c080084b0b23d4a5d6a427497559e46898189002fb756dae2c7c858b465308f6bcede7272b90e39ce8adab810bded2309035a5d9556c59134 languageName: node linkType: hard "@types/emscripten@npm:^1.39.6": version: 1.39.12 resolution: "@types/emscripten@npm:1.39.12" checksum: 31fe4c20c0fa543f6f1d0a8218008eeeb167f9f817237a0e6c458a3e7ea4e12d7af128c3075e51ba231fe897fcd28fabec5773ac29597011de42767d69ecf757 languageName: node linkType: hard "@types/eslint-scope@npm:^3.7.3": version: 3.7.7 resolution: "@types/eslint-scope@npm:3.7.7" dependencies: "@types/eslint": "*" "@types/estree": "*" checksum: e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e languageName: node linkType: hard "@types/eslint@npm:*": version: 8.56.10 resolution: "@types/eslint@npm:8.56.10" dependencies: "@types/estree": "*" "@types/json-schema": "*" checksum: fb7137dd263ce1130b42d14452bdd0266ef81f52cb55ba1a5e9750e65da1f0596dc598c88bffc7e415458b6cb611a876dcc132bcf40ea48701c6d05b40c57be5 languageName: node linkType: hard "@types/estree@npm:*, @types/estree@npm:^1.0.5": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: dd8b5bed28e6213b7acd0fb665a84e693554d850b0df423ac8076cc3ad5823a6bc26b0251d080bdc545af83179ede51dd3f6fa78cad2c46ed1f29624ddf3e41a languageName: node linkType: hard "@types/expect.js@npm:^0.3.29": version: 0.3.32 resolution: "@types/expect.js@npm:0.3.32" checksum: 3e7714cda0941388846adeae9c1a75ea956f8d90477cebf500d3500f943e0ab476395f3b4770724656fe927b3e4d8d705f20b8b4e61f6fd1f871b0ffec4e0df2 languageName: node linkType: hard "@types/glob@npm:^7.1.1": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" dependencies: "@types/minimatch": "*" "@types/node": "*" checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 languageName: node linkType: hard "@types/http-cache-semantics@npm:*": version: 4.0.4 resolution: "@types/http-cache-semantics@npm:4.0.4" checksum: 7f4dd832e618bc1e271be49717d7b4066d77c2d4eed5b81198eb987e532bb3e1c7e02f45d77918185bad936f884b700c10cebe06305f50400f382ab75055f9e8 languageName: node linkType: hard "@types/jquery@npm:*, @types/jquery@npm:^3.5.16": version: 3.5.30 resolution: "@types/jquery@npm:3.5.30" dependencies: "@types/sizzle": "*" checksum: 4594d10fa9b347062883d254a23c9259ae814ef5989ce1985f093dcc7ad4475e324ac3343aef10599c478ea4951726f0e7f79d8ed471ab04de394b7e724d6d13 languageName: node linkType: hard "@types/json-schema@npm:*, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 languageName: node linkType: hard "@types/keyv@npm:^3.1.4": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" dependencies: "@types/node": "*" checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d languageName: node linkType: hard "@types/lodash@npm:^4.14.134, @types/lodash@npm:^4.14.175": version: 4.17.4 resolution: "@types/lodash@npm:4.17.4" checksum: 268e652fd52d49189f155bc89b49bd4535aa44f0b6b0ed9ce7e50318307bda58147c49539d2047f39ca37cf5b5ea38dfb801d0dbcdbc8b019c95c1afc346b05a languageName: node linkType: hard "@types/mathjax@npm:^0.0.37": version: 0.0.37 resolution: "@types/mathjax@npm:0.0.37" checksum: 8fe8f0dac3271a848dc0070c49ec8604c53abdc0a442308e357f215ed4d68102ed5e57e2f989cde447ebcf929efd2bc64b5a986b159c5cb50963546aa20d1a81 languageName: node linkType: hard "@types/minimatch@npm:*": version: 5.1.2 resolution: "@types/minimatch@npm:5.1.2" checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 languageName: node linkType: hard "@types/minimatch@npm:^3.0.3": version: 3.0.5 resolution: "@types/minimatch@npm:3.0.5" checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 languageName: node linkType: hard "@types/minimist@npm:^1.2.0": version: 1.2.5 resolution: "@types/minimist@npm:1.2.5" checksum: 477047b606005058ab0263c4f58097136268007f320003c348794f74adedc3166ffc47c80ec3e94687787f2ab7f4e72c468223946e79892cf0fd9e25e9970a90 languageName: node linkType: hard "@types/mocha@npm:^9.0.0": version: 9.1.1 resolution: "@types/mocha@npm:9.1.1" checksum: 516077c0acd9806dc78317f88aaac0df5aaf0bdc2f63dfdadeabdf0b0137953b6ca65472e6ff7c30bc93ce4e0ae76eae70e8d46764b9a8eae4877a928b6ef49a languageName: node linkType: hard "@types/node@npm:*, @types/node@npm:>=10.0.0": version: 20.12.12 resolution: "@types/node@npm:20.12.12" dependencies: undici-types: ~5.26.4 checksum: 5373983874b9af7c216e7ca5d26b32a8d9829c703a69f1e66f2113598b5be8582c0e009ca97369f1ec9a6282b3f92812208d06eb1e9fc3bd9b939b022303d042 languageName: node linkType: hard "@types/node@npm:^17.0.2": version: 17.0.45 resolution: "@types/node@npm:17.0.45" checksum: aa04366b9103b7d6cfd6b2ef64182e0eaa7d4462c3f817618486ea0422984c51fc69fd0d436eae6c9e696ddfdbec9ccaa27a917f7c2e8c75c5d57827fe3d95e8 languageName: node linkType: hard "@types/normalize-package-data@npm:^2.4.0": version: 2.4.4 resolution: "@types/normalize-package-data@npm:2.4.4" checksum: 65dff72b543997b7be8b0265eca7ace0e34b75c3e5fee31de11179d08fa7124a7a5587265d53d0409532ecb7f7fba662c2012807963e1f9b059653ec2c83ee05 languageName: node linkType: hard "@types/parse-json@npm:^4.0.0": version: 4.0.2 resolution: "@types/parse-json@npm:4.0.2" checksum: 5bf62eec37c332ad10059252fc0dab7e7da730764869c980b0714777ad3d065e490627be9f40fc52f238ffa3ac4199b19de4127196910576c2fe34dd47c7a470 languageName: node linkType: hard "@types/prop-types@npm:*": version: 15.7.12 resolution: "@types/prop-types@npm:15.7.12" checksum: ac16cc3d0a84431ffa5cfdf89579ad1e2269549f32ce0c769321fdd078f84db4fbe1b461ed5a1a496caf09e637c0e367d600c541435716a55b1d9713f5035dfe languageName: node linkType: hard "@types/react@npm:^18.0.26": version: 18.3.2 resolution: "@types/react@npm:18.3.2" dependencies: "@types/prop-types": "*" csstype: ^3.0.2 checksum: d0b8b9d0ede6cd28dbbe34106d914b5e3652d9d7aa9d0f32fe6171506b6fc7c826d9d6571642976a5422bd29c5022fd893a710ed59a1177a0c1df8e02cf17ffe languageName: node linkType: hard "@types/responselike@npm:^1.0.0": version: 1.0.3 resolution: "@types/responselike@npm:1.0.3" dependencies: "@types/node": "*" checksum: 6ac4b35723429b11b117e813c7acc42c3af8b5554caaf1fc750404c1ae59f9b7376bc69b9e9e194a5a97357a597c2228b7173d317320f0360d617b6425212f58 languageName: node linkType: hard "@types/sanitize-html@npm:^2.6.0": version: 2.11.0 resolution: "@types/sanitize-html@npm:2.11.0" dependencies: htmlparser2: ^8.0.0 checksum: a901d55d31cd946a7fce0130cc7cf6bcf56602af9c87291be77d8149c60e7afc47c83ca74c67c2d84e6ba029fe9bbd6f14f89a8cb30fbd185766eebc5722c251 languageName: node linkType: hard "@types/semver@npm:^7.1.0, @types/semver@npm:^7.3.12, @types/semver@npm:^7.3.6": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 languageName: node linkType: hard "@types/sinon-chai@npm:^3.2.2": version: 3.2.12 resolution: "@types/sinon-chai@npm:3.2.12" dependencies: "@types/chai": "*" "@types/sinon": "*" checksum: d906f2f766613534c5e9fe1437ec740fb6a9a550f02d1a0abe180c5f18fe73a99f0c12935195404d42f079f5f72a371e16b81e2aef963a6ef0ee0ed9d5d7f391 languageName: node linkType: hard "@types/sinon@npm:*": version: 17.0.3 resolution: "@types/sinon@npm:17.0.3" dependencies: "@types/sinonjs__fake-timers": "*" checksum: c8e9956d9c90fe1ec1cc43085ae48897f93f9ea86e909ab47f255ea71f5229651faa070393950fb6923aef426c84e92b375503f9f8886ef44668b82a8ee49e9a languageName: node linkType: hard "@types/sinon@npm:^10.0.2": version: 10.0.20 resolution: "@types/sinon@npm:10.0.20" dependencies: "@types/sinonjs__fake-timers": "*" checksum: 7322771345c202b90057f8112e0d34b7339e5ae1827fb1bfe385fc9e38ed6a2f18b4c66e88d27d98c775f7f74fb1167c0c14f61ca64155786534541e6c6eb05f languageName: node linkType: hard "@types/sinonjs__fake-timers@npm:*": version: 8.1.5 resolution: "@types/sinonjs__fake-timers@npm:8.1.5" checksum: 7e3c08f6c13df44f3ea7d9a5155ddf77e3f7314c156fa1c5a829a4f3763bafe2f75b1283b887f06e6b4296996a2f299b70f64ff82625f9af5885436e2524d10c languageName: node linkType: hard "@types/sizzle@npm:*": version: 2.3.8 resolution: "@types/sizzle@npm:2.3.8" checksum: 2ac62443dc917f5f903cbd9afc51c7d6cc1c6569b4e1a15faf04aea5b13b486e7f208650014c3dc4fed34653eded3e00fe5abffe0e6300cbf0e8a01beebf11a6 languageName: node linkType: hard "@types/source-list-map@npm:*": version: 0.1.6 resolution: "@types/source-list-map@npm:0.1.6" checksum: 9cd294c121f1562062de5d241fe4d10780b1131b01c57434845fe50968e9dcf67ede444591c2b1ad6d3f9b6bc646ac02cc8f51a3577c795f9c64cf4573dcc6b1 languageName: node linkType: hard "@types/tern@npm:*": version: 0.23.9 resolution: "@types/tern@npm:0.23.9" dependencies: "@types/estree": "*" checksum: 53f229c79edf9454011f5b37c8539e0e760a130beac953d4e2126823de1ac6b0e2a45612596679fb232ec861826584fcaa272e2254a890b410575683423d56a8 languageName: node linkType: hard "@types/treeify@npm:^1.0.0": version: 1.0.3 resolution: "@types/treeify@npm:1.0.3" checksum: 777e579b30a916a781e7cbad2b7a76bc5473ff7bfe7167dd6de47f80f4386df5bf3d0dc34170afb75d52e75f6ed61cc109abf2324e093c1f9ecd4e79fec58d0c languageName: node linkType: hard "@types/underscore@npm:*": version: 1.11.15 resolution: "@types/underscore@npm:1.11.15" checksum: 25fdf6da96e0d11ca39a4740aab6fa3bd717e57301be4cb9e7893dc0ad6ce330992d0c8e0b02cac5c5ea86df6f8949c5a8f1fb95f3666b85418d399d3b1112e9 languageName: node linkType: hard "@types/webpack-sources@npm:^0.1.5": version: 0.1.12 resolution: "@types/webpack-sources@npm:0.1.12" dependencies: "@types/node": "*" "@types/source-list-map": "*" source-map: ^0.6.1 checksum: 75342659a9889478969f7bb7360b998aa084ba11ab523c172ded6a807dac43ab2a9e1212078ef8bbf0f33e4fadd2c8a91b75d38184d8030d96a32fe819c9bb57 languageName: node linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.48.2, @typescript-eslint/eslint-plugin@npm:^5.8.0": version: 5.62.0 resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" dependencies: "@eslint-community/regexpp": ^4.4.0 "@typescript-eslint/scope-manager": 5.62.0 "@typescript-eslint/type-utils": 5.62.0 "@typescript-eslint/utils": 5.62.0 debug: ^4.3.4 graphemer: ^1.4.0 ignore: ^5.2.0 natural-compare-lite: ^1.4.0 semver: ^7.3.7 tsutils: ^3.21.0 peerDependencies: "@typescript-eslint/parser": ^5.0.0 eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.48.2, @typescript-eslint/parser@npm:^5.8.0": version: 5.62.0 resolution: "@typescript-eslint/parser@npm:5.62.0" dependencies: "@typescript-eslint/scope-manager": 5.62.0 "@typescript-eslint/types": 5.62.0 "@typescript-eslint/typescript-estree": 5.62.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 languageName: node linkType: hard "@typescript-eslint/scope-manager@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/scope-manager@npm:5.62.0" dependencies: "@typescript-eslint/types": 5.62.0 "@typescript-eslint/visitor-keys": 5.62.0 checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 languageName: node linkType: hard "@typescript-eslint/type-utils@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/type-utils@npm:5.62.0" dependencies: "@typescript-eslint/typescript-estree": 5.62.0 "@typescript-eslint/utils": 5.62.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: eslint: "*" peerDependenciesMeta: typescript: optional: true checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739 languageName: node linkType: hard "@typescript-eslint/types@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/types@npm:5.62.0" checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 languageName: node linkType: hard "@typescript-eslint/typescript-estree@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" dependencies: "@typescript-eslint/types": 5.62.0 "@typescript-eslint/visitor-keys": 5.62.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 semver: ^7.3.7 tsutils: ^3.21.0 peerDependenciesMeta: typescript: optional: true checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 languageName: node linkType: hard "@typescript-eslint/utils@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/utils@npm:5.62.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@types/json-schema": ^7.0.9 "@types/semver": ^7.3.12 "@typescript-eslint/scope-manager": 5.62.0 "@typescript-eslint/types": 5.62.0 "@typescript-eslint/typescript-estree": 5.62.0 eslint-scope: ^5.1.1 semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931 languageName: node linkType: hard "@typescript-eslint/visitor-keys@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" dependencies: "@typescript-eslint/types": 5.62.0 eslint-visitor-keys: ^3.3.0 checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 languageName: node linkType: hard "@ungap/promise-all-settled@npm:1.1.2": version: 1.1.2 resolution: "@ungap/promise-all-settled@npm:1.1.2" checksum: 08d37fdfa23a6fe8139f1305313562ebad973f3fac01bcce2773b2bda5bcb0146dfdcf3cb6a722cf0a5f2ca0bc56a827eac8f1e7b3beddc548f654addf1fc34c languageName: node linkType: hard "@ungap/structured-clone@npm:^1.2.0": version: 1.2.0 resolution: "@ungap/structured-clone@npm:1.2.0" checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 languageName: node linkType: hard "@verdaccio/auth@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/auth@npm:7.0.0-next-7.15" dependencies: "@verdaccio/config": 7.0.0-next-7.15 "@verdaccio/core": 7.0.0-next-7.15 "@verdaccio/loaders": 7.0.0-next-7.15 "@verdaccio/logger": 7.0.0-next-7.15 "@verdaccio/signature": 7.0.0-next-7.5 "@verdaccio/utils": 7.0.0-next-7.15 debug: 4.3.4 lodash: 4.17.21 verdaccio-htpasswd: 12.0.0-next-7.15 checksum: 99f5325a84aba11e51cc300592ba0aa97fa213a1d045ef42070ec620609d89ced62e92141f0b4d2a560243e62b1712ad6c3244e032d08889512c16461d365622 languageName: node linkType: hard "@verdaccio/commons-api@npm:10.2.0": version: 10.2.0 resolution: "@verdaccio/commons-api@npm:10.2.0" dependencies: http-errors: 2.0.0 http-status-codes: 2.2.0 checksum: b3c946f7e15140b4e15274fa9988a8759681e9ad4316ec882096551588f554c093fb1ffbbb88ed05db162e1b0e40e9859759e1339f0ae4a074706afb7e732be2 languageName: node linkType: hard "@verdaccio/config@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/config@npm:7.0.0-next-7.15" dependencies: "@verdaccio/core": 7.0.0-next-7.15 "@verdaccio/utils": 7.0.0-next-7.15 debug: 4.3.4 js-yaml: 4.1.0 lodash: 4.17.21 minimatch: 7.4.6 yup: 0.32.11 checksum: cf5e770ed18a7709d9a44786d88ffce9e166aabc8f96cb7d7dae093ff34031a5263b82b9adb79df9c8f2f587bcea6155383cd5add2fc1221a5aa4e4a143f50ae languageName: node linkType: hard "@verdaccio/core@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/core@npm:7.0.0-next-7.15" dependencies: ajv: 8.12.0 core-js: 3.35.0 http-errors: 2.0.0 http-status-codes: 2.3.0 process-warning: 1.0.0 semver: 7.6.0 checksum: d30f1a3a7697807b6ad73b50dc5b0aea2afd9e9fcce526fa647d69912f8662c683c32692320fce648474462012d830ac49de1b84c074217f5370553c53a20a44 languageName: node linkType: hard "@verdaccio/file-locking@npm:10.3.1": version: 10.3.1 resolution: "@verdaccio/file-locking@npm:10.3.1" dependencies: lockfile: 1.0.4 checksum: 114948ed4ce9c0f98008eaf32355f902c4dfc91c0ce2e539a3d0c9397781e9ef8d1a2f6ce900d39dac0e054a9d7e616edbc472eedf758096fcd3cc8294d6add5 languageName: node linkType: hard "@verdaccio/file-locking@npm:12.0.0-next.1": version: 12.0.0-next.1 resolution: "@verdaccio/file-locking@npm:12.0.0-next.1" dependencies: lockfile: 1.0.4 checksum: 0936c1fe92b72150fb4c8ac8f8fdefd7c8c62efe60a2ace7248e6415b174b1ec53b1c93eb34127d89dcc2e7f7dc8fd6e1aad3be26c81429e4edcf8921e70a125 languageName: node linkType: hard "@verdaccio/loaders@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/loaders@npm:7.0.0-next-7.15" dependencies: "@verdaccio/logger": 7.0.0-next-7.15 debug: 4.3.4 lodash: 4.17.21 checksum: 4ceb1d5f19c45c61e27112ec1e27d85fc1cbca0737c7b9bf0a97a06fbbd8199bb6f074e90447802ba6e59b87256c1a4699eba373b42753a361a958b78e85588f languageName: node linkType: hard "@verdaccio/local-storage-legacy@npm:11.0.2": version: 11.0.2 resolution: "@verdaccio/local-storage-legacy@npm:11.0.2" dependencies: "@verdaccio/commons-api": 10.2.0 "@verdaccio/file-locking": 10.3.1 "@verdaccio/streams": 10.2.1 async: 3.2.4 debug: 4.3.4 lodash: 4.17.21 lowdb: 1.0.0 mkdirp: 1.0.4 checksum: e5c09028a9d67459297e6760acb1d5301a87bb3fe67a9ae7d8fb3e2deb6d907ebd113d7e883e89174eefb08afdaa9043257a5e04b8cb6702d3718ad0d8b5f731 languageName: node linkType: hard "@verdaccio/logger-7@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/logger-7@npm:7.0.0-next-7.15" dependencies: "@verdaccio/logger-commons": 7.0.0-next-7.15 pino: 7.11.0 checksum: 388e7fc4bc2701dbada9560d28a27a6734c4cf79005d37fa860f7f074e5f634332c26b76b837ce0ad659a5f8909d49f70ca45210ac74ad9788a24a2a34fdfeaf languageName: node linkType: hard "@verdaccio/logger-commons@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/logger-commons@npm:7.0.0-next-7.15" dependencies: "@verdaccio/core": 7.0.0-next-7.15 "@verdaccio/logger-prettify": 7.0.0-next-7.2 colorette: 2.0.20 debug: 4.3.4 checksum: c5c6dfe7022425402314792eefecd05249064be1ab34718c12b85872cf25abcbacc6591cde0b798344bb1c9909e0cf01610373c2530ffc919200d6783eae8837 languageName: node linkType: hard "@verdaccio/logger-prettify@npm:7.0.0-next-7.2": version: 7.0.0-next-7.2 resolution: "@verdaccio/logger-prettify@npm:7.0.0-next-7.2" dependencies: colorette: 2.0.20 dayjs: 1.11.10 lodash: 4.17.21 pino-abstract-transport: 1.1.0 sonic-boom: 3.8.0 checksum: 0d1841b2733c1961cc447a05e0fe091df8d2b8792f1d900575e5613e74a6ce920560356efeaa162530f724a047ce85a03bebb57a5ac9e151793a2b5839e02672 languageName: node linkType: hard "@verdaccio/logger@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/logger@npm:7.0.0-next-7.15" dependencies: "@verdaccio/logger-commons": 7.0.0-next-7.15 pino: 8.17.2 checksum: f090d18e9e4d9d32f1fc452bc031f33549ef928d7fc8f09692de82e064eb03f35b9c7497b985047ff92887eba10d4d3403a7065d8565490459d2e1024de512a5 languageName: node linkType: hard "@verdaccio/middleware@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/middleware@npm:7.0.0-next-7.15" dependencies: "@verdaccio/config": 7.0.0-next-7.15 "@verdaccio/core": 7.0.0-next-7.15 "@verdaccio/url": 12.0.0-next-7.15 "@verdaccio/utils": 7.0.0-next-7.15 debug: 4.3.4 express: 4.18.3 express-rate-limit: 5.5.1 lodash: 4.17.21 lru-cache: 7.18.3 mime: 2.6.0 checksum: 89852e3bd3f184fd0734985531891fca06d14ad18e99f2a8c80dcad03554aaa39f22b123d87c51e32b4b62d1ba1c269afbfa782db5aec83dfeb80496e1c4b4e5 languageName: node linkType: hard "@verdaccio/search-indexer@npm:7.0.0-next-7.2": version: 7.0.0-next-7.2 resolution: "@verdaccio/search-indexer@npm:7.0.0-next-7.2" checksum: b9f88992c927df5b6385cb0e2f2a1a51e2044d8d31d444d00041ce25c38a1ba7edb9f4d4b9ac3310539fd5760e0e56fbaef91764e3134035292741ff2d160875 languageName: node linkType: hard "@verdaccio/signature@npm:7.0.0-next-7.5": version: 7.0.0-next-7.5 resolution: "@verdaccio/signature@npm:7.0.0-next-7.5" dependencies: debug: 4.3.4 jsonwebtoken: 9.0.2 checksum: 1a22060bd0154cdf7b472e11b6dd33fc90be305413040d9bce65b976d8929675d6d567025d3208960189bab90a25e8673744d17948676671857e785c39694734 languageName: node linkType: hard "@verdaccio/streams@npm:10.2.1": version: 10.2.1 resolution: "@verdaccio/streams@npm:10.2.1" checksum: eadc671c2b40ea06da8c56bd2e5b394edbfdc2895f4e622491d4edd4312468d8172534ddaf364e107d118c7c7585f2f9114336ee93a16f0ec747c4ea15c6737b languageName: node linkType: hard "@verdaccio/tarball@npm:12.0.0-next-7.15": version: 12.0.0-next-7.15 resolution: "@verdaccio/tarball@npm:12.0.0-next-7.15" dependencies: "@verdaccio/core": 7.0.0-next-7.15 "@verdaccio/url": 12.0.0-next-7.15 "@verdaccio/utils": 7.0.0-next-7.15 debug: 4.3.4 lodash: 4.17.21 checksum: c1fffb377f443cbafce8b68fc28357509f3d030134b1a386138ec2dfe9215fdc249afc48c1f80b08c3feb3baeab728b5dbb7d707c0a60f377e8ab60a386634d0 languageName: node linkType: hard "@verdaccio/ui-theme@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/ui-theme@npm:7.0.0-next-7.15" checksum: 54899e3d0bd7df1b7df128e60324eb278b8c378d6e3ac27f40168adc0c68edb8073ab1673e473e1b3ea99ba89fd54a3543cc8b26b51635812e2fe864c190cc51 languageName: node linkType: hard "@verdaccio/url@npm:12.0.0-next-7.15": version: 12.0.0-next-7.15 resolution: "@verdaccio/url@npm:12.0.0-next-7.15" dependencies: "@verdaccio/core": 7.0.0-next-7.15 debug: 4.3.4 lodash: 4.17.21 validator: 13.11.0 checksum: 57b8cdd649136bd2325b6d2230262510f53f78a1f723440d0c9d54fe79993d65b881aaa5dfe8ac6412e7c0e206f17e0486f84fe28e04920a08b78f2b55dbb146 languageName: node linkType: hard "@verdaccio/utils@npm:7.0.0-next-7.15": version: 7.0.0-next-7.15 resolution: "@verdaccio/utils@npm:7.0.0-next-7.15" dependencies: "@verdaccio/core": 7.0.0-next-7.15 lodash: 4.17.21 minimatch: 7.4.6 semver: 7.6.0 checksum: 016e2ab5a5279bc61480ef06ac35d71c1f59aaad75f88e43242696d346c4520064b768e11bdf614ec8fb0edb6dd661655668dfd736521f3820766f8b5591eb43 languageName: node linkType: hard "@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1": version: 1.12.1 resolution: "@webassemblyjs/ast@npm:1.12.1" dependencies: "@webassemblyjs/helper-numbers": 1.11.6 "@webassemblyjs/helper-wasm-bytecode": 1.11.6 checksum: 31bcc64147236bd7b1b6d29d1f419c1f5845c785e1e42dc9e3f8ca2e05a029e9393a271b84f3a5bff2a32d35f51ff59e2181a6e5f953fe88576acd6750506202 languageName: node linkType: hard "@webassemblyjs/floating-point-hex-parser@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" checksum: 29b08758841fd8b299c7152eda36b9eb4921e9c584eb4594437b5cd90ed6b920523606eae7316175f89c20628da14326801090167cc7fbffc77af448ac84b7e2 languageName: node linkType: hard "@webassemblyjs/helper-api-error@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" checksum: e8563df85161096343008f9161adb138a6e8f3c2cc338d6a36011aa55eabb32f2fd138ffe63bc278d009ada001cc41d263dadd1c0be01be6c2ed99076103689f languageName: node linkType: hard "@webassemblyjs/helper-buffer@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/helper-buffer@npm:1.12.1" checksum: c3ffb723024130308db608e86e2bdccd4868bbb62dffb0a9a1530606496f79c87f8565bd8e02805ce64912b71f1a70ee5fb00307258b0c082c3abf961d097eca languageName: node linkType: hard "@webassemblyjs/helper-numbers@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" dependencies: "@webassemblyjs/floating-point-hex-parser": 1.11.6 "@webassemblyjs/helper-api-error": 1.11.6 "@xtuc/long": 4.2.2 checksum: f4b562fa219f84368528339e0f8d273ad44e047a07641ffcaaec6f93e5b76fd86490a009aa91a294584e1436d74b0a01fa9fde45e333a4c657b58168b04da424 languageName: node linkType: hard "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" checksum: 3535ef4f1fba38de3475e383b3980f4bbf3de72bbb631c2b6584c7df45be4eccd62c6ff48b5edd3f1bcff275cfd605a37679ec199fc91fd0a7705d7f1e3972dc languageName: node linkType: hard "@webassemblyjs/helper-wasm-section@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1" dependencies: "@webassemblyjs/ast": 1.12.1 "@webassemblyjs/helper-buffer": 1.12.1 "@webassemblyjs/helper-wasm-bytecode": 1.11.6 "@webassemblyjs/wasm-gen": 1.12.1 checksum: c19810cdd2c90ff574139b6d8c0dda254d42d168a9e5b3d353d1bc085f1d7164ccd1b3c05592a45a939c47f7e403dc8d03572bb686642f06a3d02932f6f0bc8f languageName: node linkType: hard "@webassemblyjs/ieee754@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/ieee754@npm:1.11.6" dependencies: "@xtuc/ieee754": ^1.2.0 checksum: 13574b8e41f6ca39b700e292d7edf102577db5650fe8add7066a320aa4b7a7c09a5056feccac7a74eb68c10dea9546d4461412af351f13f6b24b5f32379b49de languageName: node linkType: hard "@webassemblyjs/leb128@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/leb128@npm:1.11.6" dependencies: "@xtuc/long": 4.2.2 checksum: 7ea942dc9777d4b18a5ebfa3a937b30ae9e1d2ce1fee637583ed7f376334dd1d4274f813d2e250056cca803e0952def4b954913f1a3c9068bcd4ab4ee5143bf0 languageName: node linkType: hard "@webassemblyjs/utf8@npm:1.11.6": version: 1.11.6 resolution: "@webassemblyjs/utf8@npm:1.11.6" checksum: 807fe5b5ce10c390cfdd93e0fb92abda8aebabb5199980681e7c3743ee3306a75729bcd1e56a3903980e96c885ee53ef901fcbaac8efdfa480f9c0dae1d08713 languageName: node linkType: hard "@webassemblyjs/wasm-edit@npm:^1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-edit@npm:1.12.1" dependencies: "@webassemblyjs/ast": 1.12.1 "@webassemblyjs/helper-buffer": 1.12.1 "@webassemblyjs/helper-wasm-bytecode": 1.11.6 "@webassemblyjs/helper-wasm-section": 1.12.1 "@webassemblyjs/wasm-gen": 1.12.1 "@webassemblyjs/wasm-opt": 1.12.1 "@webassemblyjs/wasm-parser": 1.12.1 "@webassemblyjs/wast-printer": 1.12.1 checksum: ae23642303f030af888d30c4ef37b08dfec7eab6851a9575a616e65d1219f880d9223913a39056dd654e49049d76e97555b285d1f7e56935047abf578cce0692 languageName: node linkType: hard "@webassemblyjs/wasm-gen@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-gen@npm:1.12.1" dependencies: "@webassemblyjs/ast": 1.12.1 "@webassemblyjs/helper-wasm-bytecode": 1.11.6 "@webassemblyjs/ieee754": 1.11.6 "@webassemblyjs/leb128": 1.11.6 "@webassemblyjs/utf8": 1.11.6 checksum: 5787626bb7f0b033044471ddd00ce0c9fe1ee4584e8b73e232051e3a4c99ba1a102700d75337151c8b6055bae77eefa4548960c610a5e4a504e356bd872138ff languageName: node linkType: hard "@webassemblyjs/wasm-opt@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-opt@npm:1.12.1" dependencies: "@webassemblyjs/ast": 1.12.1 "@webassemblyjs/helper-buffer": 1.12.1 "@webassemblyjs/wasm-gen": 1.12.1 "@webassemblyjs/wasm-parser": 1.12.1 checksum: 0e8fa8a0645304a1e18ff40d3db5a2e9233ebaa169b19fcc651d6fc9fe2cac0ce092ddee927318015ae735d9cd9c5d97c0cafb6a51dcd2932ac73587b62df991 languageName: node linkType: hard "@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wasm-parser@npm:1.12.1" dependencies: "@webassemblyjs/ast": 1.12.1 "@webassemblyjs/helper-api-error": 1.11.6 "@webassemblyjs/helper-wasm-bytecode": 1.11.6 "@webassemblyjs/ieee754": 1.11.6 "@webassemblyjs/leb128": 1.11.6 "@webassemblyjs/utf8": 1.11.6 checksum: 176015de3551ac068cd4505d837414f258d9ade7442bd71efb1232fa26c9f6d7d4e11a5c816caeed389943f409af7ebff6899289a992d7a70343cb47009d21a8 languageName: node linkType: hard "@webassemblyjs/wast-printer@npm:1.12.1": version: 1.12.1 resolution: "@webassemblyjs/wast-printer@npm:1.12.1" dependencies: "@webassemblyjs/ast": 1.12.1 "@xtuc/long": 4.2.2 checksum: 2974b5dda8d769145ba0efd886ea94a601e61fb37114c14f9a9a7606afc23456799af652ac3052f284909bd42edc3665a76bc9b50f95f0794c053a8a1757b713 languageName: node linkType: hard "@webpack-cli/configtest@npm:^1.2.0": version: 1.2.0 resolution: "@webpack-cli/configtest@npm:1.2.0" peerDependencies: webpack: 4.x.x || 5.x.x webpack-cli: 4.x.x checksum: a2726cd9ec601d2b57e5fc15e0ebf5200a8892065e735911269ac2038e62be4bfc176ea1f88c2c46ff09b4d05d4c10ae045e87b3679372483d47da625a327e28 languageName: node linkType: hard "@webpack-cli/configtest@npm:^2.1.1": version: 2.1.1 resolution: "@webpack-cli/configtest@npm:2.1.1" peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x checksum: 9f9f9145c2d05471fc83d426db1df85cf49f329836b0c4b9f46b6948bed4b013464c00622b136d2a0a26993ce2306976682592245b08ee717500b1db45009a72 languageName: node linkType: hard "@webpack-cli/info@npm:^1.5.0": version: 1.5.0 resolution: "@webpack-cli/info@npm:1.5.0" dependencies: envinfo: ^7.7.3 peerDependencies: webpack-cli: 4.x.x checksum: 7f56fe037cd7d1fd5c7428588519fbf04a0cad33925ee4202ffbafd00f8ec1f2f67d991245e687d50e0f3e23f7b7814273d56cb9f7da4b05eed47c8d815c6296 languageName: node linkType: hard "@webpack-cli/info@npm:^2.0.2": version: 2.0.2 resolution: "@webpack-cli/info@npm:2.0.2" peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x checksum: 8f9a178afca5c82e113aed1efa552d64ee5ae4fdff63fe747c096a981ec74f18a5d07bd6e89bbe6715c3e57d96eea024a410e58977169489fe1df044c10dd94e languageName: node linkType: hard "@webpack-cli/serve@npm:^1.7.0": version: 1.7.0 resolution: "@webpack-cli/serve@npm:1.7.0" peerDependencies: webpack-cli: 4.x.x peerDependenciesMeta: webpack-dev-server: optional: true checksum: d475e8effa23eb7ff9a48b14d4de425989fd82f906ce71c210921cc3852327c22873be00c35e181a25a6bd03d424ae2b83e7f3b3f410ac7ee31b128ab4ac7713 languageName: node linkType: hard "@webpack-cli/serve@npm:^2.0.5": version: 2.0.5 resolution: "@webpack-cli/serve@npm:2.0.5" peerDependencies: webpack: 5.x.x webpack-cli: 5.x.x peerDependenciesMeta: webpack-dev-server: optional: true checksum: 75f0e54681796d567a71ac3e2781d2901a8d8cf1cdfc82f261034dddac59a8343e8c3bc5e32b4bb9d6766759ba49fb29a5cd86ef1701d79c506fe886bb63ac75 languageName: node linkType: hard "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a languageName: node linkType: hard "@xtuc/long@npm:4.2.2": version: 4.2.2 resolution: "@xtuc/long@npm:4.2.2" checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec languageName: node linkType: hard "@yarnpkg/core@npm:^4.0.3": version: 4.0.5 resolution: "@yarnpkg/core@npm:4.0.5" dependencies: "@arcanis/slice-ansi": ^1.1.1 "@types/semver": ^7.1.0 "@types/treeify": ^1.0.0 "@yarnpkg/fslib": ^3.0.2 "@yarnpkg/libzip": ^3.0.1 "@yarnpkg/parsers": ^3.0.2 "@yarnpkg/shell": ^4.0.2 camelcase: ^5.3.1 chalk: ^3.0.0 ci-info: ^3.2.0 clipanion: ^4.0.0-rc.2 cross-spawn: 7.0.3 diff: ^5.1.0 dotenv: ^16.3.1 fast-glob: ^3.2.2 got: ^11.7.0 lodash: ^4.17.15 micromatch: ^4.0.2 p-limit: ^2.2.0 semver: ^7.1.2 strip-ansi: ^6.0.0 tar: ^6.0.5 tinylogic: ^2.0.0 treeify: ^1.1.0 tslib: ^2.4.0 tunnel: ^0.0.6 checksum: 84c20d70033a513225130456d530d93f9217b6ec7fcc04a4d3666ff20be9063c1b7a4300b1219fa0281b5eecb2e152c3e5e2957179df1d819880569991ef720c languageName: node linkType: hard "@yarnpkg/fslib@npm:^3.0.2, @yarnpkg/fslib@npm:^3.1.0": version: 3.1.0 resolution: "@yarnpkg/fslib@npm:3.1.0" dependencies: tslib: ^2.4.0 checksum: 5274c63731cb30283a93e1446d6796b890fc56c55ed046156b2963a527465bc3add091a1e7f471b7533c8b1aa67b8532960e64589787014dee2cf3d97a9304f6 languageName: node linkType: hard "@yarnpkg/libzip@npm:^3.0.1": version: 3.1.0 resolution: "@yarnpkg/libzip@npm:3.1.0" dependencies: "@types/emscripten": ^1.39.6 "@yarnpkg/fslib": ^3.1.0 tslib: ^2.4.0 peerDependencies: "@yarnpkg/fslib": ^3.1.0 checksum: 2bb7c10b41184a079906ec4ebdadda69e4cd3b101d11aae965c08934254dbd303e51e9869fd8d799c5f58d59214cd13d67d454ad96e1c76ce9384816d58da08c languageName: node linkType: hard "@yarnpkg/lockfile@npm:^1.1.0": version: 1.1.0 resolution: "@yarnpkg/lockfile@npm:1.1.0" checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a languageName: node linkType: hard "@yarnpkg/parsers@npm:3.0.0-rc.46": version: 3.0.0-rc.46 resolution: "@yarnpkg/parsers@npm:3.0.0-rc.46" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 checksum: 35dfd1b1ac7ed9babf231721eb90b58156e840e575f6792a8e5ab559beaed6e2d60833b857310e67d6282c9406357648df2f510e670ec37ef4bd41657f329a51 languageName: node linkType: hard "@yarnpkg/parsers@npm:^3.0.0, @yarnpkg/parsers@npm:^3.0.2": version: 3.0.2 resolution: "@yarnpkg/parsers@npm:3.0.2" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 checksum: fb40a87ae7c9f3fc0b2a6b7d84375d1c69ae8304daf598c089b52966bfb4ac94fbd2dcd87ed041970416e03d34359cb5ff16be5f5601f48d1f936213a8edaf4d languageName: node linkType: hard "@yarnpkg/shell@npm:^4.0.2": version: 4.0.2 resolution: "@yarnpkg/shell@npm:4.0.2" dependencies: "@yarnpkg/fslib": ^3.0.2 "@yarnpkg/parsers": ^3.0.2 chalk: ^3.0.0 clipanion: ^4.0.0-rc.2 cross-spawn: 7.0.3 fast-glob: ^3.2.2 micromatch: ^4.0.2 tslib: ^2.4.0 bin: shell: ./lib/cli.js checksum: 01d1b6db891df60ad9458a110657189d4ee19d9df33dd73103ad7d0a8dfebfcd523126d24f745e9465a292863faac570690571535849a2668535688416bba960 languageName: node linkType: hard "@zkochan/js-yaml@npm:0.0.6": version: 0.0.6 resolution: "@zkochan/js-yaml@npm:0.0.6" dependencies: argparse: ^2.0.1 bin: js-yaml: bin/js-yaml.js checksum: 51b81597a1d1d79c778b8fae48317eaad78d75223d0b7477ad2b35f47cf63b19504da430bb7a03b326e668b282874242cc123e323e57293be038684cb5e755f8 languageName: node linkType: hard "JSONStream@npm:1.3.5, JSONStream@npm:^1.0.4": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" dependencies: jsonparse: ^1.2.0 through: ">=2.2.7 <3" bin: JSONStream: ./bin.js checksum: 2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46 languageName: node linkType: hard "abab@npm:^2.0.3": version: 2.0.6 resolution: "abab@npm:2.0.6" checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e languageName: node linkType: hard "abbrev@npm:1, abbrev@npm:^1.0.0": version: 1.1.1 resolution: "abbrev@npm:1.1.1" checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 languageName: node linkType: hard "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 languageName: node linkType: hard "abort-controller@npm:^3.0.0": version: 3.0.0 resolution: "abort-controller@npm:3.0.0" dependencies: event-target-shim: ^5.0.0 checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 languageName: node linkType: hard "accepts@npm:~1.3.4, accepts@npm:~1.3.5, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: mime-types: ~2.1.34 negotiator: 0.6.3 checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4 languageName: node linkType: hard "acorn-import-assertions@npm:^1.9.0": version: 1.9.0 resolution: "acorn-import-assertions@npm:1.9.0" peerDependencies: acorn: ^8 checksum: 944fb2659d0845c467066bdcda2e20c05abe3aaf11972116df457ce2627628a81764d800dd55031ba19de513ee0d43bb771bc679cc0eda66dc8b4fade143bc0c languageName: node linkType: hard "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 languageName: node linkType: hard "acorn@npm:^8.7.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.11.3 resolution: "acorn@npm:8.11.3" bin: acorn: bin/acorn checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c languageName: node linkType: hard "add-stream@npm:^1.0.0": version: 1.0.0 resolution: "add-stream@npm:1.0.0" checksum: 3e9e8b0b8f0170406d7c3a9a39bfbdf419ccccb0fd2a396338c0fda0a339af73bf738ad414fc520741de74517acf0dd92b4a36fd3298a47fd5371eee8f2c5a06 languageName: node linkType: hard "agent-base@npm:6, agent-base@npm:^6.0.2": version: 6.0.2 resolution: "agent-base@npm:6.0.2" dependencies: debug: 4 checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d languageName: node linkType: hard "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": version: 7.1.1 resolution: "agent-base@npm:7.1.1" dependencies: debug: ^4.3.4 checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 languageName: node linkType: hard "agentkeepalive@npm:^4.2.1": version: 4.5.0 resolution: "agentkeepalive@npm:4.5.0" dependencies: humanize-ms: ^1.2.1 checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 languageName: node linkType: hard "aggregate-error@npm:^3.0.0": version: 3.1.0 resolution: "aggregate-error@npm:3.1.0" dependencies: clean-stack: ^2.0.0 indent-string: ^4.0.0 checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 languageName: node linkType: hard "ajv-formats@npm:^2.1.1": version: 2.1.1 resolution: "ajv-formats@npm:2.1.1" dependencies: ajv: ^8.0.0 peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: ajv: optional: true checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 languageName: node linkType: hard "ajv-keywords@npm:^3.5.2": version: 3.5.2 resolution: "ajv-keywords@npm:3.5.2" peerDependencies: ajv: ^6.9.1 checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 languageName: node linkType: hard "ajv-keywords@npm:^5.1.0": version: 5.1.0 resolution: "ajv-keywords@npm:5.1.0" dependencies: fast-deep-equal: ^3.1.3 peerDependencies: ajv: ^8.8.2 checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 languageName: node linkType: hard "ajv@npm:8.12.0": version: 8.12.0 resolution: "ajv@npm:8.12.0" dependencies: fast-deep-equal: ^3.1.1 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 uri-js: ^4.2.2 checksum: 4dc13714e316e67537c8b31bc063f99a1d9d9a497eb4bbd55191ac0dcd5e4985bbb71570352ad6f1e76684fb6d790928f96ba3b2d4fd6e10024be9612fe3f001 languageName: node linkType: hard "ajv@npm:^5.0.0": version: 5.5.2 resolution: "ajv@npm:5.5.2" dependencies: co: ^4.6.0 fast-deep-equal: ^1.0.0 fast-json-stable-stringify: ^2.0.0 json-schema-traverse: ^0.3.0 checksum: a69645c843e1676b0ae1c5192786e546427f808f386d26127c6585479378066c64341ceec0b127b6789d79628e71d2a732d402f575b98f9262db230d7b715a94 languageName: node linkType: hard "ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: fast-deep-equal: ^3.1.1 fast-json-stable-stringify: ^2.0.0 json-schema-traverse: ^0.4.1 uri-js: ^4.2.2 checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 languageName: node linkType: hard "ajv@npm:^8.0.0, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.9.0": version: 8.13.0 resolution: "ajv@npm:8.13.0" dependencies: fast-deep-equal: ^3.1.3 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 uri-js: ^4.4.1 checksum: 6de82d0b2073e645ca3300561356ddda0234f39b35d2125a8700b650509b296f41c00ab69f53178bbe25ad688bd6ac3747ab44101f2f4bd245952e8fd6ccc3c1 languageName: node linkType: hard "ansi-colors@npm:4.1.1": version: 4.1.1 resolution: "ansi-colors@npm:4.1.1" checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 languageName: node linkType: hard "ansi-colors@npm:^4.1.1": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e languageName: node linkType: hard "ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: type-fest: ^0.21.3 checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 languageName: node linkType: hard "ansi-regex@npm:^2.0.0": version: 2.1.1 resolution: "ansi-regex@npm:2.1.1" checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 languageName: node linkType: hard "ansi-regex@npm:^3.0.0": version: 3.0.1 resolution: "ansi-regex@npm:3.0.1" checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc languageName: node linkType: hard "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b languageName: node linkType: hard "ansi-regex@npm:^6.0.1": version: 6.0.1 resolution: "ansi-regex@npm:6.0.1" checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 languageName: node linkType: hard "ansi-sequence-parser@npm:^1.1.0": version: 1.1.1 resolution: "ansi-sequence-parser@npm:1.1.1" checksum: ead5b15c596e8e85ca02951a844366c6776769dcc9fd1bd3a0db11bb21364554822c6a439877fb599e7e1ffa0b5f039f1e5501423950457f3dcb2f480c30b188 languageName: node linkType: hard "ansi-styles@npm:^2.2.1": version: 2.2.1 resolution: "ansi-styles@npm:2.2.1" checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c languageName: node linkType: hard "ansi-styles@npm:^3.2.1": version: 3.2.1 resolution: "ansi-styles@npm:3.2.1" dependencies: color-convert: ^1.9.0 checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 languageName: node linkType: hard "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: color-convert: ^2.0.1 checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 languageName: node linkType: hard "ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 languageName: node linkType: hard "anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: normalize-path: ^3.0.0 picomatch: ^2.0.4 checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 languageName: node linkType: hard "apache-md5@npm:1.1.8": version: 1.1.8 resolution: "apache-md5@npm:1.1.8" checksum: 5f93fe00a4c75c947a8ba88054cfa9c141ea13d1581515a59637d580747581345f8cee41204af354f7280439ab19120f4bec4a1ee5cf1ac7033a7a89dbb05ada languageName: node linkType: hard "aproba@npm:^1.0.3 || ^2.0.0, aproba@npm:^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 languageName: node linkType: hard "are-we-there-yet@npm:^3.0.0": version: 3.0.1 resolution: "are-we-there-yet@npm:3.0.1" dependencies: delegates: ^1.0.0 readable-stream: ^3.6.0 checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 languageName: node linkType: hard "argparse@npm:^1.0.7": version: 1.0.10 resolution: "argparse@npm:1.0.10" dependencies: sprintf-js: ~1.0.2 checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 languageName: node linkType: hard "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced languageName: node linkType: hard "array-buffer-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "array-buffer-byte-length@npm:1.0.1" dependencies: call-bind: ^1.0.5 is-array-buffer: ^3.0.4 checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e languageName: node linkType: hard "array-differ@npm:^3.0.0": version: 3.0.0 resolution: "array-differ@npm:3.0.0" checksum: 117edd9df5c1530bd116c6e8eea891d4bd02850fd89b1b36e532b6540e47ca620a373b81feca1c62d1395d9ae601516ba538abe5e8172d41091da2c546b05fb7 languageName: node linkType: hard "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b languageName: node linkType: hard "array-ify@npm:^1.0.0": version: 1.0.0 resolution: "array-ify@npm:1.0.0" checksum: c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4 languageName: node linkType: hard "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d languageName: node linkType: hard "array-union@npm:^3.0.1": version: 3.0.1 resolution: "array-union@npm:3.0.1" checksum: 47b29f88258e8f37ffb93ddaa327d4308edd950b52943c172b73558afdd3fa74cfd68816ba5aa4b894242cf281fa3c6d0362ae057e4a18bddbaedbe46ebe7112 languageName: node linkType: hard "arraybuffer.prototype.slice@npm:^1.0.3": version: 1.0.3 resolution: "arraybuffer.prototype.slice@npm:1.0.3" dependencies: array-buffer-byte-length: ^1.0.1 call-bind: ^1.0.5 define-properties: ^1.2.1 es-abstract: ^1.22.3 es-errors: ^1.2.1 get-intrinsic: ^1.2.3 is-array-buffer: ^3.0.4 is-shared-array-buffer: ^1.0.2 checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e languageName: node linkType: hard "arrify@npm:^1.0.1": version: 1.0.1 resolution: "arrify@npm:1.0.1" checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 languageName: node linkType: hard "arrify@npm:^2.0.1": version: 2.0.1 resolution: "arrify@npm:2.0.1" checksum: 067c4c1afd182806a82e4c1cb8acee16ab8b5284fbca1ce29408e6e91281c36bb5b612f6ddfbd40a0f7a7e0c75bf2696eb94c027f6e328d6e9c52465c98e4209 languageName: node linkType: hard "asap@npm:^2.0.0": version: 2.0.6 resolution: "asap@npm:2.0.6" checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d languageName: node linkType: hard "asn1@npm:~0.2.3": version: 0.2.6 resolution: "asn1@npm:0.2.6" dependencies: safer-buffer: ~2.1.0 checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d languageName: node linkType: hard "assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": version: 1.0.0 resolution: "assert-plus@npm:1.0.0" checksum: 19b4340cb8f0e6a981c07225eacac0e9d52c2644c080198765d63398f0075f83bbc0c8e95474d54224e297555ad0d631c1dcd058adb1ddc2437b41a6b424ac64 languageName: node linkType: hard "assertion-error@npm:^1.1.0": version: 1.1.0 resolution: "assertion-error@npm:1.1.0" checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf languageName: node linkType: hard "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 languageName: node linkType: hard "async@npm:3.2.4": version: 3.2.4 resolution: "async@npm:3.2.4" checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 languageName: node linkType: hard "async@npm:3.2.5, async@npm:^3.2.3": version: 3.2.5 resolution: "async@npm:3.2.5" checksum: 5ec77f1312301dee02d62140a6b1f7ee0edd2a0f983b6fd2b0849b969f245225b990b47b8243e7b9ad16451a53e7f68e753700385b706198ced888beedba3af4 languageName: node linkType: hard "async@npm:^2.6.4": version: 2.6.4 resolution: "async@npm:2.6.4" dependencies: lodash: ^4.17.14 checksum: a52083fb32e1ebe1d63e5c5624038bb30be68ff07a6c8d7dfe35e47c93fc144bd8652cbec869e0ac07d57dde387aa5f1386be3559cdee799cb1f789678d88e19 languageName: node linkType: hard "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be languageName: node linkType: hard "at-least-node@npm:^1.0.0": version: 1.0.0 resolution: "at-least-node@npm:1.0.0" checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e languageName: node linkType: hard "atomic-sleep@npm:^1.0.0": version: 1.0.0 resolution: "atomic-sleep@npm:1.0.0" checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 languageName: node linkType: hard "autoprefixer@npm:^7.1.1": version: 7.2.6 resolution: "autoprefixer@npm:7.2.6" dependencies: browserslist: ^2.11.3 caniuse-lite: ^1.0.30000805 normalize-range: ^0.1.2 num2fraction: ^1.2.2 postcss: ^6.0.17 postcss-value-parser: ^3.2.3 bin: autoprefixer-info: ./bin/autoprefixer-info checksum: 7ad12a58ca128d3e6b6dc5e4b3d83f2a12151216d30bcea1f1f2f8a91d2a019c58dd62fd039a6c1cf218f2ab557b03224703a4396c1b4f01b5c0818bc6ba4dd9 languageName: node linkType: hard "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" dependencies: possible-typed-array-names: ^1.0.0 checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 languageName: node linkType: hard "aws-sign2@npm:~0.7.0": version: 0.7.0 resolution: "aws-sign2@npm:0.7.0" checksum: b148b0bb0778098ad8cf7e5fc619768bcb51236707ca1d3e5b49e41b171166d8be9fdc2ea2ae43d7decf02989d0aaa3a9c4caa6f320af95d684de9b548a71525 languageName: node linkType: hard "aws4@npm:^1.8.0": version: 1.13.0 resolution: "aws4@npm:1.13.0" checksum: 71594a17a5f7b1a9151ef515500c18f1029caa51e2cb65c1b5b324d9bd8dac89896a9e296825d4e6befdcd612d7fc3b0d8042c667555a56df3ee1ab15d4d9b35 languageName: node linkType: hard "axios@npm:^1.0.0": version: 1.7.2 resolution: "axios@npm:1.7.2" dependencies: follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 checksum: e457e2b0ab748504621f6fa6609074ac08c824bf0881592209dfa15098ece7e88495300e02cd22ba50b3468fd712fe687e629dcb03d6a3f6a51989727405aedf languageName: node linkType: hard "babel-code-frame@npm:^6.26.0": version: 6.26.0 resolution: "babel-code-frame@npm:6.26.0" dependencies: chalk: ^1.1.3 esutils: ^2.0.2 js-tokens: ^3.0.2 checksum: 9410c3d5a921eb02fa409675d1a758e493323a49e7b9dddb7a2a24d47e61d39ab1129dd29f9175836eac9ce8b1d4c0a0718fcdc57ce0b865b529fd250dbab313 languageName: node linkType: hard "babel-generator@npm:^6.18.0": version: 6.26.1 resolution: "babel-generator@npm:6.26.1" dependencies: babel-messages: ^6.23.0 babel-runtime: ^6.26.0 babel-types: ^6.26.0 detect-indent: ^4.0.0 jsesc: ^1.3.0 lodash: ^4.17.4 source-map: ^0.5.7 trim-right: ^1.0.1 checksum: 5397f4d4d1243e7157e3336be96c10fcb1f29f73bf2d9842229c71764d9a6431397d249483a38c4d8b1581459e67be4df6f32d26b1666f02d0f5bfc2c2f25193 languageName: node linkType: hard "babel-messages@npm:^6.23.0": version: 6.23.0 resolution: "babel-messages@npm:6.23.0" dependencies: babel-runtime: ^6.22.0 checksum: c8075c17587a33869e1a5bd0a5b73bbe395b68188362dacd5418debbc7c8fd784bcd3295e81ee7e410dc2c2655755add6af03698c522209f6a68334c15e6d6ca languageName: node linkType: hard "babel-runtime@npm:^6.22.0, babel-runtime@npm:^6.23.0, babel-runtime@npm:^6.26.0": version: 6.26.0 resolution: "babel-runtime@npm:6.26.0" dependencies: core-js: ^2.4.0 regenerator-runtime: ^0.11.0 checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 languageName: node linkType: hard "babel-template@npm:^6.16.0": version: 6.26.0 resolution: "babel-template@npm:6.26.0" dependencies: babel-runtime: ^6.26.0 babel-traverse: ^6.26.0 babel-types: ^6.26.0 babylon: ^6.18.0 lodash: ^4.17.4 checksum: 028dd57380f09b5641b74874a19073c53c4fb3f1696e849575aae18f8c80eaf21db75209057db862f3b893ce2cd9b795d539efa591b58f4a0fb011df0a56fbed languageName: node linkType: hard "babel-traverse@npm:^6.18.0, babel-traverse@npm:^6.26.0": version: 6.26.0 resolution: "babel-traverse@npm:6.26.0" dependencies: babel-code-frame: ^6.26.0 babel-messages: ^6.23.0 babel-runtime: ^6.26.0 babel-types: ^6.26.0 babylon: ^6.18.0 debug: ^2.6.8 globals: ^9.18.0 invariant: ^2.2.2 lodash: ^4.17.4 checksum: fca037588d2791ae0409f1b7aa56075b798699cccc53ea04d82dd1c0f97b9e7ab17065f7dd3ecd69101d7874c9c8fd5e0f88fa53abbae1fe94e37e6b81ebcb8d languageName: node linkType: hard "babel-types@npm:^6.18.0, babel-types@npm:^6.26.0": version: 6.26.0 resolution: "babel-types@npm:6.26.0" dependencies: babel-runtime: ^6.26.0 esutils: ^2.0.2 lodash: ^4.17.4 to-fast-properties: ^1.0.3 checksum: d16b0fa86e9b0e4c2623be81d0a35679faff24dd2e43cde4ca58baf49f3e39415a011a889e6c2259ff09e1228e4c3a3db6449a62de59e80152fe1ce7398fde76 languageName: node linkType: hard "babylon@npm:^6.18.0": version: 6.18.0 resolution: "babylon@npm:6.18.0" bin: babylon: ./bin/babylon.js checksum: 0777ae0c735ce1cbfc856d627589ed9aae212b84fb0c03c368b55e6c5d3507841780052808d0ad46e18a2ba516e93d55eeed8cd967f3b2938822dfeccfb2a16d languageName: node linkType: hard "backbone@npm:1.2.3": version: 1.2.3 resolution: "backbone@npm:1.2.3" dependencies: underscore: ">=1.7.0" checksum: 7e460e9e951bcba0907334d41ccc4bd84b5d17658e72fc61f4c7e1057c238e82f97d3545582cfa0501cb824ee2d44f78a45cd18f735d869e6b71430a0c183073 languageName: node linkType: hard "backbone@npm:1.4.0": version: 1.4.0 resolution: "backbone@npm:1.4.0" dependencies: underscore: ">=1.8.3" checksum: 09abdf184c485a4cd2c68218298cf772fbefeaa166ef8eb795cdb0159b4ad1d2f6823dde089352eaf0be929e5bbef67c57555722f4d1886f969d954f77814870 languageName: node linkType: hard "balanced-match@npm:0.1.0": version: 0.1.0 resolution: "balanced-match@npm:0.1.0" checksum: 97e1cac3724a55a8ef249db54b8efb3c1b690735ea119a02c7ba885da86e8767453758ab7e14492ae58c7b07726fa409396f04bc2cb1a3fd36083f29ab54ddf5 languageName: node linkType: hard "balanced-match@npm:^0.4.2": version: 0.4.2 resolution: "balanced-match@npm:0.4.2" checksum: 205ebb42ce8529fa8e043a808b41bfb9818d5f98a8eb76a1cd5483f8a98dd0baefc8a9d940f36b591b1316a04f56b35c32b60ac9b1f848e41e4698672cec6c1e languageName: node linkType: hard "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 languageName: node linkType: hard "base64-js@npm:^1.2.1, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 languageName: node linkType: hard "base64id@npm:2.0.0, base64id@npm:~2.0.0": version: 2.0.0 resolution: "base64id@npm:2.0.0" checksum: 581b1d37e6cf3738b7ccdd4d14fe2bfc5c238e696e2720ee6c44c183b838655842e22034e53ffd783f872a539915c51b0d4728a49c7cc678ac5a758e00d62168 languageName: node linkType: hard "basic-auth@npm:^2.0.1": version: 2.0.1 resolution: "basic-auth@npm:2.0.1" dependencies: safe-buffer: 5.1.2 checksum: 3419b805d5dfc518f3a05dcf42aa53aa9ce820e50b6df5097f9e186322e1bc733c36722b624802cd37e791035aa73b828ed814d8362333d42d7f5cd04d7a5e48 languageName: node linkType: hard "bcrypt-pbkdf@npm:^1.0.0": version: 1.0.2 resolution: "bcrypt-pbkdf@npm:1.0.2" dependencies: tweetnacl: ^0.14.3 checksum: 4edfc9fe7d07019609ccf797a2af28351736e9d012c8402a07120c4453a3b789a15f2ee1530dc49eee8f7eb9379331a8dd4b3766042b9e502f74a68e7f662291 languageName: node linkType: hard "bcryptjs@npm:2.4.3": version: 2.4.3 resolution: "bcryptjs@npm:2.4.3" checksum: 0e80ed852a41f5dfb1853f53ee14a7390b0ef263ce05dba6e2ef3cd919dfad025a7c21ebcfe5bc7fa04b100990edf90c7a877ff7fe623d3e479753253131b629 languageName: node linkType: hard "before-after-hook@npm:^2.2.0": version: 2.2.3 resolution: "before-after-hook@npm:2.2.3" checksum: a1a2430976d9bdab4cd89cb50d27fa86b19e2b41812bf1315923b0cba03371ebca99449809226425dd3bcef20e010db61abdaff549278e111d6480034bebae87 languageName: node linkType: hard "big.js@npm:^5.2.2": version: 5.2.2 resolution: "big.js@npm:5.2.2" checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e languageName: node linkType: hard "bin-links@npm:^3.0.0": version: 3.0.3 resolution: "bin-links@npm:3.0.3" dependencies: cmd-shim: ^5.0.0 mkdirp-infer-owner: ^2.0.0 npm-normalize-package-bin: ^2.0.0 read-cmd-shim: ^3.0.0 rimraf: ^3.0.0 write-file-atomic: ^4.0.0 checksum: ea2dc6f91a6ef8b3840ceb48530bbeb8d6d1c6f7985fe1409b16d7e7db39432f0cb5ce15cc2788bb86d989abad6e2c7fba3500996a210a682eec18fb26a66e72 languageName: node linkType: hard "binary-extensions@npm:^2.0.0": version: 2.3.0 resolution: "binary-extensions@npm:2.3.0" checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 languageName: node linkType: hard "bl@npm:^4.0.3, bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" dependencies: buffer: ^5.5.0 inherits: ^2.0.4 readable-stream: ^3.4.0 checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 languageName: node linkType: hard "body-parser@npm:1.20.2, body-parser@npm:^1.19.0": version: 1.20.2 resolution: "body-parser@npm:1.20.2" dependencies: bytes: 3.1.2 content-type: ~1.0.5 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 qs: 6.11.0 raw-body: 2.5.2 type-is: ~1.6.18 unpipe: 1.0.0 checksum: 14d37ec638ab5c93f6099ecaed7f28f890d222c650c69306872e00b9efa081ff6c596cd9afb9930656aae4d6c4e1c17537bea12bb73c87a217cb3cfea8896737 languageName: node linkType: hard "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" dependencies: balanced-match: ^1.0.0 concat-map: 0.0.1 checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 languageName: node linkType: hard "brace-expansion@npm:^2.0.1": version: 2.0.1 resolution: "brace-expansion@npm:2.0.1" dependencies: balanced-match: ^1.0.0 checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 languageName: node linkType: hard "braces@npm:^3.0.2, braces@npm:^3.0.3, braces@npm:~3.0.2": version: 3.0.3 resolution: "braces@npm:3.0.3" dependencies: fill-range: ^7.1.1 checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 languageName: node linkType: hard "browser-stdout@npm:1.3.1": version: 1.3.1 resolution: "browser-stdout@npm:1.3.1" checksum: b717b19b25952dd6af483e368f9bcd6b14b87740c3d226c2977a65e84666ffd67000bddea7d911f111a9b6ddc822b234de42d52ab6507bce4119a4cc003ef7b3 languageName: node linkType: hard "browserslist@npm:^2.0.0, browserslist@npm:^2.11.3": version: 2.11.3 resolution: "browserslist@npm:2.11.3" dependencies: caniuse-lite: ^1.0.30000792 electron-to-chromium: ^1.3.30 bin: browserslist: ./cli.js checksum: 2ff908162669461e881bad516885b703fd594a0b7a139bf150c1952a74fe4ed8668ac46367a0d136d39a717de65e51c867316951e9fe0f92664c65b205eb9d93 languageName: node linkType: hard "browserslist@npm:^4.21.10, browserslist@npm:^4.22.2": version: 4.23.0 resolution: "browserslist@npm:4.23.0" dependencies: caniuse-lite: ^1.0.30001587 electron-to-chromium: ^1.4.668 node-releases: ^2.0.14 update-browserslist-db: ^1.0.13 bin: browserslist: cli.js checksum: 436f49e796782ca751ebab7edc010cfc9c29f68536f387666cd70ea22f7105563f04dd62c6ff89cb24cc3254d17cba385f979eeeb3484d43e012412ff7e75def languageName: node linkType: hard "buffer-equal-constant-time@npm:1.0.1": version: 1.0.1 resolution: "buffer-equal-constant-time@npm:1.0.1" checksum: 80bb945f5d782a56f374b292770901065bad21420e34936ecbe949e57724b4a13874f735850dd1cc61f078773c4fb5493a41391e7bda40d1fa388d6bd80daaab languageName: node linkType: hard "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb languageName: node linkType: hard "buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: base64-js: ^1.3.1 ieee754: ^1.1.13 checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 languageName: node linkType: hard "buffer@npm:^6.0.3": version: 6.0.3 resolution: "buffer@npm:6.0.3" dependencies: base64-js: ^1.3.1 ieee754: ^1.2.1 checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 languageName: node linkType: hard "builtins@npm:^1.0.3": version: 1.0.3 resolution: "builtins@npm:1.0.3" checksum: 47ce94f7eee0e644969da1f1a28e5f29bd2e48b25b2bbb61164c345881086e29464ccb1fb88dbc155ea26e8b1f5fc8a923b26c8c1ed0935b67b644d410674513 languageName: node linkType: hard "builtins@npm:^5.0.0": version: 5.1.0 resolution: "builtins@npm:5.1.0" dependencies: semver: ^7.0.0 checksum: 76327fa85b8e253b26e52f79988148013ea742691b4ab15f7228ebee47dd757832da308c9d4e4fc89763a1773e3f25a9836fff6315df85c7c6c72190436bf11d languageName: node linkType: hard "byte-size@npm:^7.0.0": version: 7.0.1 resolution: "byte-size@npm:7.0.1" checksum: 6791663a6d53bf950e896f119d3648fe8d7e8ae677e2ccdae84d0e5b78f21126e25f9d73aa19be2a297cb27abd36b6f5c361c0de36ebb2f3eb8a853f2ac99a4a languageName: node linkType: hard "bytes@npm:3.0.0": version: 3.0.0 resolution: "bytes@npm:3.0.0" checksum: a2b386dd8188849a5325f58eef69c3b73c51801c08ffc6963eddc9be244089ba32d19347caf6d145c86f315ae1b1fc7061a32b0c1aa6379e6a719090287ed101 languageName: node linkType: hard "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e languageName: node linkType: hard "cacache@npm:^16.0.0, cacache@npm:^16.0.6, cacache@npm:^16.1.0": version: 16.1.3 resolution: "cacache@npm:16.1.3" dependencies: "@npmcli/fs": ^2.1.0 "@npmcli/move-file": ^2.0.0 chownr: ^2.0.0 fs-minipass: ^2.1.0 glob: ^8.0.1 infer-owner: ^1.0.4 lru-cache: ^7.7.1 minipass: ^3.1.6 minipass-collect: ^1.0.2 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 mkdirp: ^1.0.4 p-map: ^4.0.0 promise-inflight: ^1.0.1 rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 unique-filename: ^2.0.0 checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 languageName: node linkType: hard "cacache@npm:^18.0.0": version: 18.0.3 resolution: "cacache@npm:18.0.3" dependencies: "@npmcli/fs": ^3.1.0 fs-minipass: ^3.0.0 glob: ^10.2.2 lru-cache: ^10.0.1 minipass: ^7.0.3 minipass-collect: ^2.0.1 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 p-map: ^4.0.0 ssri: ^10.0.0 tar: ^6.1.11 unique-filename: ^3.0.0 checksum: b717fd9b36e9c3279bfde4545c3a8f6d5a539b084ee26a9504d48f83694beb724057d26e090b97540f9cc62bea18b9f6cf671c50e18fb7dac60eda9db691714f languageName: node linkType: hard "cacheable-lookup@npm:^5.0.3": version: 5.0.4 resolution: "cacheable-lookup@npm:5.0.4" checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d languageName: node linkType: hard "cacheable-request@npm:^7.0.2": version: 7.0.4 resolution: "cacheable-request@npm:7.0.4" dependencies: clone-response: ^1.0.2 get-stream: ^5.1.0 http-cache-semantics: ^4.0.0 keyv: ^4.0.0 lowercase-keys: ^2.0.0 normalize-url: ^6.0.1 responselike: ^2.0.0 checksum: 0de9df773fd4e7dd9bd118959878f8f2163867e2e1ab3575ffbecbe6e75e80513dd0c68ba30005e5e5a7b377cc6162bbc00ab1db019bb4e9cb3c2f3f7a6f1ee4 languageName: node linkType: hard "call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" dependencies: es-define-property: ^1.0.0 es-errors: ^1.3.0 function-bind: ^1.1.2 get-intrinsic: ^1.2.4 set-function-length: ^1.2.1 checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 languageName: node linkType: hard "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 languageName: node linkType: hard "camelcase-keys@npm:^6.2.2": version: 6.2.2 resolution: "camelcase-keys@npm:6.2.2" dependencies: camelcase: ^5.3.1 map-obj: ^4.0.0 quick-lru: ^4.0.1 checksum: 43c9af1adf840471e54c68ab3e5fe8a62719a6b7dbf4e2e86886b7b0ff96112c945736342b837bd2529ec9d1c7d1934e5653318478d98e0cf22c475c04658e2a languageName: node linkType: hard "camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b languageName: node linkType: hard "camelcase@npm:^6.0.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d languageName: node linkType: hard "caniuse-api@npm:^2.0.0": version: 2.0.0 resolution: "caniuse-api@npm:2.0.0" dependencies: browserslist: ^2.0.0 caniuse-lite: ^1.0.0 lodash.memoize: ^4.1.2 lodash.uniq: ^4.5.0 checksum: 22f4dc65b7aa646de70c778709d77e57eacc843e80a6e2f0ba5b53a9012748f35c2f430df6d234b09415446b006cd663b1a12a8cbbff933f1c58f3b91a0fe3a8 languageName: node linkType: hard "caniuse-lite@npm:^1, caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30000792, caniuse-lite@npm:^1.0.30000805, caniuse-lite@npm:^1.0.30001587": version: 1.0.30001621 resolution: "caniuse-lite@npm:1.0.30001621" checksum: 0afb65bbf558faea769c16e831fbbd5600c684c0f6bb4ffbc0d38528671fb5cb5d88714804241a88c61872ce289f7c6333aef6cfdfb09277bda0dbdf0aab3459 languageName: node linkType: hard "caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" checksum: b43bd4c440aa1e8ee6baefee8063b4850fd0d7b378f6aabc796c9ec8cb26d27fb30b46885350777d9bd079c5256c0e1329ad0dc7c2817e0bb466810ebb353751 languageName: node linkType: hard "chai-as-promised@npm:^7.0.0": version: 7.1.2 resolution: "chai-as-promised@npm:7.1.2" dependencies: check-error: ^1.0.2 peerDependencies: chai: ">= 2.1.2 < 6" checksum: 671ee980054eb23a523875c1d22929a2ac05d89b5428e1fd12800f54fc69baf41014667b87e2368e2355ee2a3140d3e3d7d5a1f8638b07cfefd7fe38a149e3f6 languageName: node linkType: hard "chai@npm:^4.0.0": version: 4.4.1 resolution: "chai@npm:4.4.1" dependencies: assertion-error: ^1.1.0 check-error: ^1.0.3 deep-eql: ^4.1.3 get-func-name: ^2.0.2 loupe: ^2.3.6 pathval: ^1.1.1 type-detect: ^4.0.8 checksum: 9ab84f36eb8e0b280c56c6c21ca4da5933132cd8a0c89c384f1497f77953640db0bc151edd47f81748240a9fab57b78f7d925edfeedc8e8fc98016d71f40c36e languageName: node linkType: hard "chalk@npm:^1.1.3": version: 1.1.3 resolution: "chalk@npm:1.1.3" dependencies: ansi-styles: ^2.2.1 escape-string-regexp: ^1.0.2 has-ansi: ^2.0.0 strip-ansi: ^3.0.0 supports-color: ^2.0.0 checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd languageName: node linkType: hard "chalk@npm:^2.0.1, chalk@npm:^2.1.0, chalk@npm:^2.3.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: ansi-styles: ^3.2.1 escape-string-regexp: ^1.0.5 supports-color: ^5.3.0 checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 languageName: node linkType: hard "chalk@npm:^3.0.0": version: 3.0.0 resolution: "chalk@npm:3.0.0" dependencies: ansi-styles: ^4.1.0 supports-color: ^7.1.0 checksum: 8e3ddf3981c4da405ddbd7d9c8d91944ddf6e33d6837756979f7840a29272a69a5189ecae0ff84006750d6d1e92368d413335eab4db5476db6e6703a1d1e0505 languageName: node linkType: hard "chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: ansi-styles: ^4.1.0 supports-color: ^7.1.0 checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc languageName: node linkType: hard "chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 languageName: node linkType: hard "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d languageName: node linkType: hard "check-error@npm:^1.0.2, check-error@npm:^1.0.3": version: 1.0.3 resolution: "check-error@npm:1.0.3" dependencies: get-func-name: ^2.0.2 checksum: e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399 languageName: node linkType: hard "chokidar@npm:3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" dependencies: anymatch: ~3.1.2 braces: ~3.0.2 fsevents: ~2.3.2 glob-parent: ~5.1.2 is-binary-path: ~2.1.0 is-glob: ~4.0.1 normalize-path: ~3.0.0 readdirp: ~3.6.0 dependenciesMeta: fsevents: optional: true checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c languageName: node linkType: hard "chokidar@npm:^3.3.0, chokidar@npm:^3.5.1": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: anymatch: ~3.1.2 braces: ~3.0.2 fsevents: ~2.3.2 glob-parent: ~5.1.2 is-binary-path: ~2.1.0 is-glob: ~4.0.1 normalize-path: ~3.0.0 readdirp: ~3.6.0 dependenciesMeta: fsevents: optional: true checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d languageName: node linkType: hard "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f languageName: node linkType: hard "chrome-trace-event@npm:^1.0.2": version: 1.0.3 resolution: "chrome-trace-event@npm:1.0.3" checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 languageName: node linkType: hard "ci-info@npm:^2.0.0": version: 2.0.0 resolution: "ci-info@npm:2.0.0" checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 languageName: node linkType: hard "ci-info@npm:^3.2.0": version: 3.9.0 resolution: "ci-info@npm:3.9.0" checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 languageName: node linkType: hard "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 languageName: node linkType: hard "cli-cursor@npm:3.1.0, cli-cursor@npm:^3.1.0": version: 3.1.0 resolution: "cli-cursor@npm:3.1.0" dependencies: restore-cursor: ^3.1.0 checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 languageName: node linkType: hard "cli-spinners@npm:2.6.1": version: 2.6.1 resolution: "cli-spinners@npm:2.6.1" checksum: 423409baaa7a58e5104b46ca1745fbfc5888bbd0b0c5a626e052ae1387060839c8efd512fb127e25769b3dc9562db1dc1b5add6e0b93b7ef64f477feb6416a45 languageName: node linkType: hard "cli-spinners@npm:^2.5.0": version: 2.9.2 resolution: "cli-spinners@npm:2.9.2" checksum: 1bd588289b28432e4676cb5d40505cfe3e53f2e4e10fbe05c8a710a154d6fe0ce7836844b00d6858f740f2ffe67cdc36e0fce9c7b6a8430e80e6388d5aa4956c languageName: node linkType: hard "cli-truncate@npm:^2.1.0": version: 2.1.0 resolution: "cli-truncate@npm:2.1.0" dependencies: slice-ansi: ^3.0.0 string-width: ^4.2.0 checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d languageName: node linkType: hard "cli-truncate@npm:^3.1.0": version: 3.1.0 resolution: "cli-truncate@npm:3.1.0" dependencies: slice-ansi: ^5.0.0 string-width: ^5.0.0 checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a languageName: node linkType: hard "cli-width@npm:^3.0.0": version: 3.0.0 resolution: "cli-width@npm:3.0.0" checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 languageName: node linkType: hard "cli-width@npm:^4.1.0": version: 4.1.0 resolution: "cli-width@npm:4.1.0" checksum: 0a79cff2dbf89ef530bcd54c713703ba94461457b11e5634bd024c78796ed21401e32349c004995954e06f442d82609287e7aabf6a5f02c919a1cf3b9b6854ff languageName: node linkType: hard "clipanion@npm:3.2.1": version: 3.2.1 resolution: "clipanion@npm:3.2.1" dependencies: typanion: ^3.8.0 peerDependencies: typanion: "*" checksum: 448efd122ead3c802e61ba7a2002e2080c8cce01ce8a0a789d9b9e4f8fe70fd887dcf163ef8c778f5364a9e6f4b498b9f1853f709d7ed4291713e78bcfb88ee8 languageName: node linkType: hard "clipanion@npm:^4.0.0-rc.2": version: 4.0.0-rc.3 resolution: "clipanion@npm:4.0.0-rc.3" dependencies: typanion: ^3.8.0 peerDependencies: typanion: "*" checksum: a5e6201e5a7fdb93dbe5f61d158d3e3d23e3164c38a7c679c7dcc599e10ee339d249c33fd8729ba8ffd0a376206ed14aac2e5472624ecaf79041fac3baa73b9b languageName: node linkType: hard "cliui@npm:^7.0.2": version: 7.0.4 resolution: "cliui@npm:7.0.4" dependencies: string-width: ^4.2.0 strip-ansi: ^6.0.0 wrap-ansi: ^7.0.0 checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f languageName: node linkType: hard "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" dependencies: string-width: ^4.2.0 strip-ansi: ^6.0.1 wrap-ansi: ^7.0.0 checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 languageName: node linkType: hard "clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" dependencies: is-plain-object: ^2.0.4 kind-of: ^6.0.2 shallow-clone: ^3.0.0 checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 languageName: node linkType: hard "clone-response@npm:^1.0.2": version: 1.0.3 resolution: "clone-response@npm:1.0.3" dependencies: mimic-response: ^1.0.0 checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e languageName: node linkType: hard "clone@npm:^1.0.2": version: 1.0.4 resolution: "clone@npm:1.0.4" checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd languageName: node linkType: hard "cmd-shim@npm:^5.0.0": version: 5.0.0 resolution: "cmd-shim@npm:5.0.0" dependencies: mkdirp-infer-owner: ^2.0.0 checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb languageName: node linkType: hard "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 languageName: node linkType: hard "codemirror@npm:^5.48.0": version: 5.65.16 resolution: "codemirror@npm:5.65.16" checksum: 1c5036bfffcce19b1ff91d8b158dcb45faba27047c4093f55ea7ad1165975179eb47c9ef604baa9c4f4ea6bf9817886c767f33e72fa9c62710404029be3c4744 languageName: node linkType: hard "color-convert@npm:^1.3.0, color-convert@npm:^1.8.2, color-convert@npm:^1.9.0, color-convert@npm:^1.9.1": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: color-name: 1.1.3 checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 languageName: node linkType: hard "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" dependencies: color-name: ~1.1.4 checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 languageName: node linkType: hard "color-name@npm:1.1.3": version: 1.1.3 resolution: "color-name@npm:1.1.3" checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d languageName: node linkType: hard "color-name@npm:^1.0.0, color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 languageName: node linkType: hard "color-string@npm:^0.3.0": version: 0.3.0 resolution: "color-string@npm:0.3.0" dependencies: color-name: ^1.0.0 checksum: cc65013a94d399ddcb81b3b4b6e0d2166cbaa77311260ff6271f215a286d3db58ab3a217bdb175f8b9dd95f9ea7ac94f71a595af6bcd3b6a02fea6e75ddaf5fb languageName: node linkType: hard "color-string@npm:^1.4.0, color-string@npm:^1.5.2": version: 1.9.1 resolution: "color-string@npm:1.9.1" dependencies: color-name: ^1.0.0 simple-swizzle: ^0.2.2 checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 languageName: node linkType: hard "color-support@npm:^1.1.3": version: 1.1.3 resolution: "color-support@npm:1.1.3" bin: color-support: bin.js checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b languageName: node linkType: hard "color@npm:^0.11.0": version: 0.11.4 resolution: "color@npm:0.11.4" dependencies: clone: ^1.0.2 color-convert: ^1.3.0 color-string: ^0.3.0 checksum: a6f624fd159e9311a6c1c86ac05b5b550c98e2d1e5646e032b8481e5e113127c06a84678b91c89c96b11b58c1c723dd9766b1b02cb2d441c6212a0f7cb3dad73 languageName: node linkType: hard "color@npm:^1.0.3": version: 1.0.3 resolution: "color@npm:1.0.3" dependencies: color-convert: ^1.8.2 color-string: ^1.4.0 checksum: 4b8264535dc518a92d7996f5e046b16bb4e4947824b955806c00101182aa1cd3e68a0718c36cfe13cce59e60ebe91087ca665bbf0883e6e9534ee4e622dbb41c languageName: node linkType: hard "color@npm:^2.0.1": version: 2.0.1 resolution: "color@npm:2.0.1" dependencies: color-convert: ^1.9.1 color-string: ^1.5.2 checksum: ee9217daf7316482d06237c0ec0cb7d94eee7fbcb71869c58631d8467cdcd3ffc64c69fd143c027ee7c5d793eb416dcad50a6391357c690e94e9dd969719ee28 languageName: node linkType: hard "colorette@npm:2.0.20, colorette@npm:^2.0.14, colorette@npm:^2.0.16": version: 2.0.20 resolution: "colorette@npm:2.0.20" checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d languageName: node linkType: hard "columnify@npm:^1.6.0": version: 1.6.0 resolution: "columnify@npm:1.6.0" dependencies: strip-ansi: ^6.0.1 wcwidth: ^1.0.0 checksum: 0d590023616a27bcd2135c0f6ddd6fac94543263f9995538bbe391068976e30545e5534d369737ec7c3e9db4e53e70a277462de46aeb5a36e6997b4c7559c335 languageName: node linkType: hard "combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" dependencies: delayed-stream: ~1.0.0 checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c languageName: node linkType: hard "commander@npm:^10.0.1": version: 10.0.1 resolution: "commander@npm:10.0.1" checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 languageName: node linkType: hard "commander@npm:^2.20.0": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e languageName: node linkType: hard "commander@npm:^7.0.0": version: 7.2.0 resolution: "commander@npm:7.2.0" checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc languageName: node linkType: hard "commander@npm:^9.3.0, commander@npm:^9.4.1": version: 9.5.0 resolution: "commander@npm:9.5.0" checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade languageName: node linkType: hard "common-ancestor-path@npm:^1.0.1": version: 1.0.1 resolution: "common-ancestor-path@npm:1.0.1" checksum: 1d2e4186067083d8cc413f00fc2908225f04ae4e19417ded67faa6494fb313c4fcd5b28a52326d1a62b466e2b3a4325e92c31133c5fee628cdf8856b3a57c3d7 languageName: node linkType: hard "compare-func@npm:^2.0.0": version: 2.0.0 resolution: "compare-func@npm:2.0.0" dependencies: array-ify: ^1.0.0 dot-prop: ^5.1.0 checksum: fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d languageName: node linkType: hard "compressible@npm:~2.0.16": version: 2.0.18 resolution: "compressible@npm:2.0.18" dependencies: mime-db: ">= 1.43.0 < 2" checksum: 58321a85b375d39230405654721353f709d0c1442129e9a17081771b816302a012471a9b8f4864c7dbe02eef7f2aaac3c614795197092262e94b409c9be108f0 languageName: node linkType: hard "compression@npm:1.7.4": version: 1.7.4 resolution: "compression@npm:1.7.4" dependencies: accepts: ~1.3.5 bytes: 3.0.0 compressible: ~2.0.16 debug: 2.6.9 on-headers: ~1.0.2 safe-buffer: 5.1.2 vary: ~1.1.2 checksum: 35c0f2eb1f28418978615dc1bc02075b34b1568f7f56c62d60f4214d4b7cc00d0f6d282b5f8a954f59872396bd770b6b15ffd8aa94c67d4bce9b8887b906999b languageName: node linkType: hard "compute-gcd@npm:^1.2.1": version: 1.2.1 resolution: "compute-gcd@npm:1.2.1" dependencies: validate.io-array: ^1.0.3 validate.io-function: ^1.0.2 validate.io-integer-array: ^1.0.0 checksum: 51cf33b75f7c8db5142fcb99a9d84a40260993fed8e02a7ab443834186c3ab99b3fd20b30ad9075a6a9d959d69df6da74dd3be8a59c78d9f2fe780ebda8242e1 languageName: node linkType: hard "compute-lcm@npm:^1.1.2": version: 1.1.2 resolution: "compute-lcm@npm:1.1.2" dependencies: compute-gcd: ^1.2.1 validate.io-array: ^1.0.3 validate.io-function: ^1.0.2 validate.io-integer-array: ^1.0.0 checksum: d499ab57dcb48e8d0fd233b99844a06d1cc56115602c920c586e998ebba60293731f5b6976e8a1e83ae6cbfe86716f62d9432e8d94913fed8bd8352f447dc917 languageName: node linkType: hard "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af languageName: node linkType: hard "concat-stream@npm:^2.0.0": version: 2.0.0 resolution: "concat-stream@npm:2.0.0" dependencies: buffer-from: ^1.0.0 inherits: ^2.0.3 readable-stream: ^3.0.2 typedarray: ^0.0.6 checksum: d7f75d48f0ecd356c1545d87e22f57b488172811b1181d96021c7c4b14ab8855f5313280263dca44bb06e5222f274d047da3e290a38841ef87b59719bde967c7 languageName: node linkType: hard "config-chain@npm:^1.1.12": version: 1.1.13 resolution: "config-chain@npm:1.1.13" dependencies: ini: ^1.3.4 proto-list: ~1.2.1 checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab languageName: node linkType: hard "connect@npm:^3.7.0": version: 3.7.0 resolution: "connect@npm:3.7.0" dependencies: debug: 2.6.9 finalhandler: 1.1.2 parseurl: ~1.3.3 utils-merge: 1.0.1 checksum: 96e1c4effcf219b065c7823e57351c94366d2e2a6952fa95e8212bffb35c86f1d5a3f9f6c5796d4cd3a5fdda628368b1c3cc44bf19c66cfd68fe9f9cab9177e2 languageName: node linkType: hard "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed languageName: node linkType: hard "content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" dependencies: safe-buffer: 5.2.1 checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 languageName: node linkType: hard "content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 languageName: node linkType: hard "conventional-changelog-angular@npm:^5.0.12": version: 5.0.13 resolution: "conventional-changelog-angular@npm:5.0.13" dependencies: compare-func: ^2.0.0 q: ^1.5.1 checksum: 6ed4972fce25a50f9f038c749cc9db501363131b0fb2efc1fccecba14e4b1c80651d0d758d4c350a609f32010c66fa343eefd49c02e79e911884be28f53f3f90 languageName: node linkType: hard "conventional-changelog-core@npm:^4.2.4": version: 4.2.4 resolution: "conventional-changelog-core@npm:4.2.4" dependencies: add-stream: ^1.0.0 conventional-changelog-writer: ^5.0.0 conventional-commits-parser: ^3.2.0 dateformat: ^3.0.0 get-pkg-repo: ^4.0.0 git-raw-commits: ^2.0.8 git-remote-origin-url: ^2.0.0 git-semver-tags: ^4.1.1 lodash: ^4.17.15 normalize-package-data: ^3.0.0 q: ^1.5.1 read-pkg: ^3.0.0 read-pkg-up: ^3.0.0 through2: ^4.0.0 checksum: 56d5194040495ea316e53fd64cb3614462c318f0fe54b1bf25aba6fba9b3d51cb9fdf7ac5b766f17e5529a3f90e317257394e00b0a9a5ce42caf3a59f82afb3a languageName: node linkType: hard "conventional-changelog-preset-loader@npm:^2.3.4": version: 2.3.4 resolution: "conventional-changelog-preset-loader@npm:2.3.4" checksum: 23a889b7fcf6fe7653e61f32a048877b2f954dcc1e0daa2848c5422eb908e6f24c78372f8d0d2130b5ed941c02e7010c599dccf44b8552602c6c8db9cb227453 languageName: node linkType: hard "conventional-changelog-writer@npm:^5.0.0": version: 5.0.1 resolution: "conventional-changelog-writer@npm:5.0.1" dependencies: conventional-commits-filter: ^2.0.7 dateformat: ^3.0.0 handlebars: ^4.7.7 json-stringify-safe: ^5.0.1 lodash: ^4.17.15 meow: ^8.0.0 semver: ^6.0.0 split: ^1.0.0 through2: ^4.0.0 bin: conventional-changelog-writer: cli.js checksum: 5c0129db44577f14b1f8de225b62a392a9927ba7fe3422cb21ad71a771b8472bd03badb7c87cb47419913abc3f2ce3759b69f59550cdc6f7a7b0459015b3b44c languageName: node linkType: hard "conventional-commits-filter@npm:^2.0.7": version: 2.0.7 resolution: "conventional-commits-filter@npm:2.0.7" dependencies: lodash.ismatch: ^4.4.0 modify-values: ^1.0.0 checksum: feb567f680a6da1baaa1ef3cff393b3c56a5828f77ab9df5e70626475425d109a6fee0289b4979223c62bbd63bf9c98ef532baa6fcb1b66ee8b5f49077f5d46c languageName: node linkType: hard "conventional-commits-parser@npm:^3.2.0": version: 3.2.4 resolution: "conventional-commits-parser@npm:3.2.4" dependencies: JSONStream: ^1.0.4 is-text-path: ^1.0.1 lodash: ^4.17.15 meow: ^8.0.0 split2: ^3.0.0 through2: ^4.0.0 bin: conventional-commits-parser: cli.js checksum: 1627ff203bc9586d89e47a7fe63acecf339aba74903b9114e23d28094f79d4e2d6389bf146ae561461dcba8fc42e7bc228165d2b173f15756c43f1d32bc50bfd languageName: node linkType: hard "conventional-recommended-bump@npm:^6.1.0": version: 6.1.0 resolution: "conventional-recommended-bump@npm:6.1.0" dependencies: concat-stream: ^2.0.0 conventional-changelog-preset-loader: ^2.3.4 conventional-commits-filter: ^2.0.7 conventional-commits-parser: ^3.2.0 git-raw-commits: ^2.0.8 git-semver-tags: ^4.1.1 meow: ^8.0.0 q: ^1.5.1 bin: conventional-recommended-bump: cli.js checksum: da1d7a5f3b9f7706bede685cdcb3db67997fdaa43c310fd5bf340955c84a4b85dbb9427031522ee06dad290b730a54be987b08629d79c73720dbad3a2531146b languageName: node linkType: hard "convert-source-map@npm:^1.5.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 languageName: node linkType: hard "convert-source-map@npm:^2.0.0": version: 2.0.0 resolution: "convert-source-map@npm:2.0.0" checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 languageName: node linkType: hard "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a languageName: node linkType: hard "cookie@npm:0.5.0": version: 0.5.0 resolution: "cookie@npm:0.5.0" checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180 languageName: node linkType: hard "cookie@npm:0.6.0": version: 0.6.0 resolution: "cookie@npm:0.6.0" checksum: f56a7d32a07db5458e79c726b77e3c2eff655c36792f2b6c58d351fb5f61531e5b1ab7f46987150136e366c65213cbe31729e02a3eaed630c3bf7334635fb410 languageName: node linkType: hard "cookie@npm:~0.4.1": version: 0.4.2 resolution: "cookie@npm:0.4.2" checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b languageName: node linkType: hard "copy-anything@npm:^2.0.1": version: 2.0.6 resolution: "copy-anything@npm:2.0.6" dependencies: is-what: ^3.14.1 checksum: 7318dc00ca14f846d14fc886845cff63bf20a3c5f4fcdd31f68c40a213648c78a1093426947ac0f8f8577845e9a7a11eeaaeefb05d9a6f1b78ca5ec60c2aaf6e languageName: node linkType: hard "core-js@npm:3.35.0": version: 3.35.0 resolution: "core-js@npm:3.35.0" checksum: 25c224aca3df012b98f08f13ccbd8171ef5852acd33fd5e58e106d27f5f0c97de2fdbc520f0b4364d26253caf2deb3e5d265310f57d2a66ae6cc922850e649f0 languageName: node linkType: hard "core-js@npm:^2.4.0": version: 2.6.12 resolution: "core-js@npm:2.6.12" checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 languageName: node linkType: hard "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab languageName: node linkType: hard "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 languageName: node linkType: hard "cors@npm:2.8.5, cors@npm:~2.8.5": version: 2.8.5 resolution: "cors@npm:2.8.5" dependencies: object-assign: ^4 vary: ^1 checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006 languageName: node linkType: hard "corser@npm:^2.0.1": version: 2.0.1 resolution: "corser@npm:2.0.1" checksum: 9ff6944eda760c8c3118747a636afc3ede53b41e7b9960513a15b88032209a728e630ae4b41e20a941e34da129fe9094d1f5d95123ef64ac2e16cdad8dce9c87 languageName: node linkType: hard "cosmiconfig@npm:^7.0.0": version: 7.1.0 resolution: "cosmiconfig@npm:7.1.0" dependencies: "@types/parse-json": ^4.0.0 import-fresh: ^3.2.1 parse-json: ^5.0.0 path-type: ^4.0.0 yaml: ^1.10.0 checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f languageName: node linkType: hard "crelt@npm:^1.0.5": version: 1.0.6 resolution: "crelt@npm:1.0.6" checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f languageName: node linkType: hard "cross-spawn@npm:7.0.3, cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" dependencies: path-key: ^3.1.0 shebang-command: ^2.0.0 which: ^2.0.1 checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 languageName: node linkType: hard "cross-spawn@npm:^6.0.5": version: 6.0.5 resolution: "cross-spawn@npm:6.0.5" dependencies: nice-try: ^1.0.4 path-key: ^2.0.1 semver: ^5.5.0 shebang-command: ^1.2.0 which: ^1.2.9 checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9 languageName: node linkType: hard "crypto@npm:~1.0.1": version: 1.0.1 resolution: "crypto@npm:1.0.1" checksum: 087fe3165bd94c333a49e6ed66a0193911f63eac38a24f379b3001a5fe260a59c413646e53a0f67875ba13902b2686d81dc703cb2c147a4ec727dcdc04e5645e languageName: node linkType: hard "css-color-function@npm:~1.3.3": version: 1.3.3 resolution: "css-color-function@npm:1.3.3" dependencies: balanced-match: 0.1.0 color: ^0.11.0 debug: ^3.1.0 rgb: ~0.1.0 checksum: 6859f7dd0064fbb53ed32db2db1878abe2e3750945148337703d143a133cb0cb2bc33c5a39cf8f5d29ed5ca8daf3b7a33e6a52a36bdcfd39f91d60f568465a09 languageName: node linkType: hard "css-loader@npm:^6.5.1, css-loader@npm:^6.7.1": version: 6.11.0 resolution: "css-loader@npm:6.11.0" dependencies: icss-utils: ^5.1.0 postcss: ^8.4.33 postcss-modules-extract-imports: ^3.1.0 postcss-modules-local-by-default: ^4.0.5 postcss-modules-scope: ^3.2.0 postcss-modules-values: ^4.0.0 postcss-value-parser: ^4.2.0 semver: ^7.5.4 peerDependencies: "@rspack/core": 0.x || 1.x webpack: ^5.0.0 peerDependenciesMeta: "@rspack/core": optional: true webpack: optional: true checksum: 5c8d35975a7121334905394e88e28f05df72f037dbed2fb8fec4be5f0b313ae73a13894ba791867d4a4190c35896da84a7fd0c54fb426db55d85ba5e714edbe3 languageName: node linkType: hard "css-unit-converter@npm:^1.1.1": version: 1.1.2 resolution: "css-unit-converter@npm:1.1.2" checksum: 07888033346a5128f34dbe2f72884c966d24e9f29db24416dcde92860242490617ef9a178ac193a92f730834bbeea026cdc7027701d92ba9bbbe59db7a37eb2a languageName: node linkType: hard "cssesc@npm:^3.0.0": version: 3.0.0 resolution: "cssesc@npm:3.0.0" bin: cssesc: bin/cssesc checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 languageName: node linkType: hard "csstype@npm:3.0.10": version: 3.0.10 resolution: "csstype@npm:3.0.10" checksum: 20a8fa324f2b33ddf94aa7507d1b6ab3daa6f3cc308888dc50126585d7952f2471de69b2dbe0635d1fdc31223fef8e070842691877e725caf456e2378685a631 languageName: node linkType: hard "csstype@npm:^3.0.2": version: 3.1.3 resolution: "csstype@npm:3.1.3" checksum: 8db785cc92d259102725b3c694ec0c823f5619a84741b5c7991b8ad135dfaa66093038a1cc63e03361a6cd28d122be48f2106ae72334e067dd619a51f49eddf7 languageName: node linkType: hard "custom-event@npm:~1.0.0": version: 1.0.1 resolution: "custom-event@npm:1.0.1" checksum: 334f48a6d5fb98df95c5f72cab2729417ffdcc74aebb1d51aa9220391bdee028ec36d9e19976a5a64f536e1e4aceb5bb4f0232d4761acc3e8fd74c54573959bd languageName: node linkType: hard "d3-color@npm:^3.0.1": version: 3.1.0 resolution: "d3-color@npm:3.1.0" checksum: 4931fbfda5d7c4b5cfa283a13c91a954f86e3b69d75ce588d06cde6c3628cebfc3af2069ccf225e982e8987c612aa7948b3932163ce15eb3c11cd7c003f3ee3b languageName: node linkType: hard "d3-format@npm:^1.3.0": version: 1.4.5 resolution: "d3-format@npm:1.4.5" checksum: 1b8b2c0bca182173bccd290a43e8b635a83fc8cfe52ec878c7bdabb997d47daac11f2b175cebbe73f807f782ad655f542bdfe18180ca5eb3498a3a82da1e06ab languageName: node linkType: hard "d3-format@npm:^3.0.1": version: 3.1.0 resolution: "d3-format@npm:3.1.0" checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 languageName: node linkType: hard "dargs@npm:^7.0.0": version: 7.0.0 resolution: "dargs@npm:7.0.0" checksum: b8f1e3cba59c42e1f13a114ad4848c3fc1cf7470f633ee9e9f1043762429bc97d91ae31b826fb135eefde203a3fdb20deb0c0a0222ac29d937b8046085d668d1 languageName: node linkType: hard "dashdash@npm:^1.12.0": version: 1.14.1 resolution: "dashdash@npm:1.14.1" dependencies: assert-plus: ^1.0.0 checksum: 3634c249570f7f34e3d34f866c93f866c5b417f0dd616275decae08147dcdf8fccfaa5947380ccfb0473998ea3a8057c0b4cd90c875740ee685d0624b2983598 languageName: node linkType: hard "data-urls@npm:^2.0.0": version: 2.0.0 resolution: "data-urls@npm:2.0.0" dependencies: abab: ^2.0.3 whatwg-mimetype: ^2.3.0 whatwg-url: ^8.0.0 checksum: 97caf828aac25e25e04ba6869db0f99c75e6859bb5b424ada28d3e7841941ebf08ddff3c1b1bb4585986bd507a5d54c2a716853ea6cb98af877400e637393e71 languageName: node linkType: hard "data-view-buffer@npm:^1.0.1": version: 1.0.1 resolution: "data-view-buffer@npm:1.0.1" dependencies: call-bind: ^1.0.6 es-errors: ^1.3.0 is-data-view: ^1.0.1 checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c languageName: node linkType: hard "data-view-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "data-view-byte-length@npm:1.0.1" dependencies: call-bind: ^1.0.7 es-errors: ^1.3.0 is-data-view: ^1.0.1 checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 languageName: node linkType: hard "data-view-byte-offset@npm:^1.0.0": version: 1.0.0 resolution: "data-view-byte-offset@npm:1.0.0" dependencies: call-bind: ^1.0.6 es-errors: ^1.3.0 is-data-view: ^1.0.1 checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 languageName: node linkType: hard "date-format@npm:^4.0.14": version: 4.0.14 resolution: "date-format@npm:4.0.14" checksum: dfe5139df6af5759b9dd3c007b899b3f60d45a9240ffeee6314ab74e6ab52e9b519a44ccf285888bdd6b626c66ee9b4c8a523075fa1140617b5beb1cbb9b18d1 languageName: node linkType: hard "dateformat@npm:^3.0.0": version: 3.0.3 resolution: "dateformat@npm:3.0.3" checksum: ca4911148abb09887bd9bdcd632c399b06f3ecad709a18eb594d289a1031982f441e08e281db77ffebcb2cbcbfa1ac578a7cbfbf8743f41009aa5adc1846ed34 languageName: node linkType: hard "dayjs@npm:1.11.10": version: 1.11.10 resolution: "dayjs@npm:1.11.10" checksum: a6b5a3813b8884f5cd557e2e6b7fa569f4c5d0c97aca9558e38534af4f2d60daafd3ff8c2000fed3435cfcec9e805bcebd99f90130c6d1c5ef524084ced588c4 languageName: node linkType: hard "debug@npm:2.6.9, debug@npm:^2.6.8": version: 2.6.9 resolution: "debug@npm:2.6.9" dependencies: ms: 2.0.0 checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6 languageName: node linkType: hard "debug@npm:4, debug@npm:4.3.4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1, debug@npm:~4.3.2, debug@npm:~4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: ms: 2.1.2 peerDependenciesMeta: supports-color: optional: true checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 languageName: node linkType: hard "debug@npm:4.3.3": version: 4.3.3 resolution: "debug@npm:4.3.3" dependencies: ms: 2.1.2 peerDependenciesMeta: supports-color: optional: true checksum: 14472d56fe4a94dbcfaa6dbed2dd3849f1d72ba78104a1a328047bb564643ca49df0224c3a17fa63533fd11dd3d4c8636cd861191232a2c6735af00cc2d4de16 languageName: node linkType: hard "debug@npm:^3.1.0, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: ms: ^2.1.1 checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c languageName: node linkType: hard "debuglog@npm:^1.0.1": version: 1.0.1 resolution: "debuglog@npm:1.0.1" checksum: 970679f2eb7a73867e04d45b52583e7ec6dee1f33c058e9147702e72a665a9647f9c3d6e7c2f66f6bf18510b23eb5ded1b617e48ac1db23603809c5ddbbb9763 languageName: node linkType: hard "decamelize-keys@npm:^1.1.0": version: 1.1.1 resolution: "decamelize-keys@npm:1.1.1" dependencies: decamelize: ^1.1.0 map-obj: ^1.0.0 checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 languageName: node linkType: hard "decamelize@npm:^1.1.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa languageName: node linkType: hard "decamelize@npm:^4.0.0": version: 4.0.0 resolution: "decamelize@npm:4.0.0" checksum: b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 languageName: node linkType: hard "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" dependencies: mimic-response: ^3.1.0 checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 languageName: node linkType: hard "dedent@npm:^0.7.0": version: 0.7.0 resolution: "dedent@npm:0.7.0" checksum: 87de191050d9a40dd70cad01159a0bcf05ecb59750951242070b6abf9569088684880d00ba92a955b4058804f16eeaf91d604f283929b4f614d181cd7ae633d2 languageName: node linkType: hard "deep-eql@npm:^4.1.3": version: 4.1.3 resolution: "deep-eql@npm:4.1.3" dependencies: type-detect: ^4.0.0 checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f languageName: node linkType: hard "deep-extend@npm:^0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" checksum: 7be7e5a8d468d6b10e6a67c3de828f55001b6eb515d014f7aeb9066ce36bd5717161eb47d6a0f7bed8a9083935b465bc163ee2581c8b128d29bf61092fdf57a7 languageName: node linkType: hard "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 languageName: node linkType: hard "deepmerge@npm:^4.2.2": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 languageName: node linkType: hard "defaults@npm:^1.0.3": version: 1.0.4 resolution: "defaults@npm:1.0.4" dependencies: clone: ^1.0.2 checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a languageName: node linkType: hard "defer-to-connect@npm:^2.0.0": version: 2.0.1 resolution: "defer-to-connect@npm:2.0.1" checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b languageName: node linkType: hard "define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" dependencies: es-define-property: ^1.0.0 es-errors: ^1.3.0 gopd: ^1.0.1 checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b languageName: node linkType: hard "define-lazy-prop@npm:^2.0.0": version: 2.0.0 resolution: "define-lazy-prop@npm:2.0.0" checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 languageName: node linkType: hard "define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: define-data-property: ^1.0.1 has-property-descriptors: ^1.0.0 object-keys: ^1.1.1 checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 languageName: node linkType: hard "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 languageName: node linkType: hard "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd languageName: node linkType: hard "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a languageName: node linkType: hard "dependency-graph@npm:^0.11.0": version: 0.11.0 resolution: "dependency-graph@npm:0.11.0" checksum: 477204beaa9be69e642bc31ffe7a8c383d0cf48fa27acbc91c5df01431ab913e65c154213d2ef83d034c98d77280743ec85e5da018a97a18dd43d3c0b78b28cd languageName: node linkType: hard "deprecation@npm:^2.0.0": version: 2.3.1 resolution: "deprecation@npm:2.3.1" checksum: f56a05e182c2c195071385455956b0c4106fe14e36245b00c689ceef8e8ab639235176a96977ba7c74afb173317fac2e0ec6ec7a1c6d1e6eaa401c586c714132 languageName: node linkType: hard "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 languageName: node linkType: hard "detect-indent@npm:^4.0.0": version: 4.0.0 resolution: "detect-indent@npm:4.0.0" dependencies: repeating: ^2.0.0 checksum: 328f273915c1610899bc7d4784ce874413d0a698346364cd3ee5d79afba1c5cf4dbc97b85a801e20f4d903c0598bd5096af32b800dfb8696b81464ccb3dfda2c languageName: node linkType: hard "detect-indent@npm:^5.0.0": version: 5.0.0 resolution: "detect-indent@npm:5.0.0" checksum: 61763211daa498e00eec073aba95d544ae5baed19286a0a655697fa4fffc9f4539c8376e2c7df8fa11d6f8eaa16c1e6a689f403ac41ee78a060278cdadefe2ff languageName: node linkType: hard "detect-indent@npm:^6.0.0": version: 6.1.0 resolution: "detect-indent@npm:6.1.0" checksum: ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d languageName: node linkType: hard "detect-indent@npm:^7.0.1": version: 7.0.1 resolution: "detect-indent@npm:7.0.1" checksum: cbf3f0b1c3c881934ca94428e1179b26ab2a587e0d719031d37a67fb506d49d067de54ff057cb1e772e75975fed5155c01cd4518306fee60988b1486e3fc7768 languageName: node linkType: hard "detect-newline@npm:3.1.0": version: 3.1.0 resolution: "detect-newline@npm:3.1.0" checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 languageName: node linkType: hard "detect-newline@npm:^4.0.0": version: 4.0.1 resolution: "detect-newline@npm:4.0.1" checksum: 0409ecdfb93419591ccff24fccfe2ddddad29b66637d1ed898872125b25af05014fdeedc9306339577060f69f59fe6e9830cdd80948597f136dfbffefa60599c languageName: node linkType: hard "dezalgo@npm:^1.0.0": version: 1.0.4 resolution: "dezalgo@npm:1.0.4" dependencies: asap: ^2.0.0 wrappy: 1 checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 languageName: node linkType: hard "di@npm:^0.0.1": version: 0.0.1 resolution: "di@npm:0.0.1" checksum: 3f09a99534d33e49264585db7f863ea8bc76c25c4d5a60df387c946018ecf1e1516b2c05a2092e5ca51fcdc08cefe609a6adc5253fa831626cb78cad4746505e languageName: node linkType: hard "diff@npm:5.0.0": version: 5.0.0 resolution: "diff@npm:5.0.0" checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 languageName: node linkType: hard "diff@npm:^5.0.0, diff@npm:^5.1.0": version: 5.2.0 resolution: "diff@npm:5.2.0" checksum: 12b63ca9c36c72bafa3effa77121f0581b4015df18bc16bac1f8e263597735649f1a173c26f7eba17fb4162b073fee61788abe49610e6c70a2641fe1895443fd languageName: node linkType: hard "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" dependencies: path-type: ^4.0.0 checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 languageName: node linkType: hard "doctrine@npm:^3.0.0": version: 3.0.0 resolution: "doctrine@npm:3.0.0" dependencies: esutils: ^2.0.2 checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce languageName: node linkType: hard "dom-serialize@npm:^2.2.1": version: 2.2.1 resolution: "dom-serialize@npm:2.2.1" dependencies: custom-event: ~1.0.0 ent: ~2.2.0 extend: ^3.0.0 void-elements: ^2.0.0 checksum: 48262e299a694dbfa32905ecceb29b89f2ce59adfc00cb676284f85ee0c8db0225e07961cbf9b06bf309291deebf52c958f855a5b6709d556000acf46d5a46ef languageName: node linkType: hard "dom-serializer@npm:^2.0.0": version: 2.0.0 resolution: "dom-serializer@npm:2.0.0" dependencies: domelementtype: ^2.3.0 domhandler: ^5.0.2 entities: ^4.2.0 checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 languageName: node linkType: hard "domelementtype@npm:^2.3.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 languageName: node linkType: hard "domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": version: 5.0.3 resolution: "domhandler@npm:5.0.3" dependencies: domelementtype: ^2.3.0 checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c languageName: node linkType: hard "domutils@npm:^3.0.1": version: 3.1.0 resolution: "domutils@npm:3.1.0" dependencies: dom-serializer: ^2.0.0 domelementtype: ^2.3.0 domhandler: ^5.0.3 checksum: e5757456ddd173caa411cfc02c2bb64133c65546d2c4081381a3bafc8a57411a41eed70494551aa58030be9e58574fcc489828bebd673863d39924fb4878f416 languageName: node linkType: hard "dot-prop@npm:^5.1.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" dependencies: is-obj: ^2.0.0 checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea languageName: node linkType: hard "dot-prop@npm:^6.0.1": version: 6.0.1 resolution: "dot-prop@npm:6.0.1" dependencies: is-obj: ^2.0.0 checksum: 0f47600a4b93e1dc37261da4e6909652c008832a5d3684b5bf9a9a0d3f4c67ea949a86dceed9b72f5733ed8e8e6383cc5958df3bbd0799ee317fd181f2ece700 languageName: node linkType: hard "dotenv@npm:^16.3.1": version: 16.4.5 resolution: "dotenv@npm:16.4.5" checksum: 301a12c3d44fd49888b74eb9ccf9f07a1f5df43f489e7fcb89647a2edcd84c42d6bc349dc8df099cd18f07c35c7b04685c1a4f3e6a6a9e6b30f8d48c15b7f49c languageName: node linkType: hard "dotenv@npm:~10.0.0": version: 10.0.0 resolution: "dotenv@npm:10.0.0" checksum: f412c5fe8c24fbe313d302d2500e247ba8a1946492db405a4de4d30dd0eb186a88a43f13c958c5a7de303938949c4231c56994f97d05c4bc1f22478d631b4005 languageName: node linkType: hard "duplexer@npm:^0.1.1": version: 0.1.2 resolution: "duplexer@npm:0.1.2" checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 languageName: node linkType: hard "duplexify@npm:^4.1.2": version: 4.1.3 resolution: "duplexify@npm:4.1.3" dependencies: end-of-stream: ^1.4.1 inherits: ^2.0.3 readable-stream: ^3.1.1 stream-shift: ^1.0.2 checksum: 9636a027345de3dd3c801594d01a7c73d9ce260019538beb1ee650bba7544e72f40a4d4902b52e1ab283dc32a06f210d42748773af02ff15e3064a9659deab7f languageName: node linkType: hard "duplicate-package-checker-webpack-plugin@npm:^3.0.0": version: 3.0.0 resolution: "duplicate-package-checker-webpack-plugin@npm:3.0.0" dependencies: chalk: ^2.3.0 find-root: ^1.0.0 lodash: ^4.17.4 semver: ^5.4.1 checksum: d77be45cb72d79a429c64d8f8f7603fea681d182fb795459a3d4afa608faad9a923378a7e80c6855f465263e1983140b6fc3682bd0213228b8cd7906ab4b934d languageName: node linkType: hard "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed languageName: node linkType: hard "ecc-jsbn@npm:~0.1.1": version: 0.1.2 resolution: "ecc-jsbn@npm:0.1.2" dependencies: jsbn: ~0.1.0 safer-buffer: ^2.1.0 checksum: 22fef4b6203e5f31d425f5b711eb389e4c6c2723402e389af394f8411b76a488fa414d309d866e2b577ce3e8462d344205545c88a8143cc21752a5172818888a languageName: node linkType: hard "ecdsa-sig-formatter@npm:1.0.11": version: 1.0.11 resolution: "ecdsa-sig-formatter@npm:1.0.11" dependencies: safe-buffer: ^5.0.1 checksum: 207f9ab1c2669b8e65540bce29506134613dd5f122cccf1e6a560f4d63f2732d427d938f8481df175505aad94583bcb32c688737bb39a6df0625f903d6d93c03 languageName: node linkType: hard "ee-first@npm:1.1.1": version: 1.1.1 resolution: "ee-first@npm:1.1.1" checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f languageName: node linkType: hard "ejs@npm:^3.1.7": version: 3.1.10 resolution: "ejs@npm:3.1.10" dependencies: jake: ^10.8.5 bin: ejs: bin/cli.js checksum: ce90637e9c7538663ae023b8a7a380b2ef7cc4096de70be85abf5a3b9641912dde65353211d05e24d56b1f242d71185c6d00e02cb8860701d571786d92c71f05 languageName: node linkType: hard "electron-to-chromium@npm:^1.3.30, electron-to-chromium@npm:^1.4.668": version: 1.4.779 resolution: "electron-to-chromium@npm:1.4.779" checksum: e3036a9dc696dba35c9c66cf9e2aa3454aab73ac0c8c12d1f3d1aff6ef2846731f090199c62081c249c75b6095fe05f0f5e48d9834aa79f70224f400c9dc4c3f languageName: node linkType: hard "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 languageName: node linkType: hard "emoji-regex@npm:^9.2.2": version: 9.2.2 resolution: "emoji-regex@npm:9.2.2" checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 languageName: node linkType: hard "emojis-list@npm:^3.0.0": version: 3.0.0 resolution: "emojis-list@npm:3.0.0" checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 languageName: node linkType: hard "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c languageName: node linkType: hard "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" dependencies: iconv-lite: ^0.6.2 checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f languageName: node linkType: hard "end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": version: 1.4.4 resolution: "end-of-stream@npm:1.4.4" dependencies: once: ^1.4.0 checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b languageName: node linkType: hard "engine.io-parser@npm:~5.2.1": version: 5.2.2 resolution: "engine.io-parser@npm:5.2.2" checksum: 470231215f3136a9259efb1268bc9a71f789af4e8c74da8d3b49ceb149fe3cd5c315bf0cd13d2d8d9c8f0f051c6f93b68e8fa9c89a3b612b9217bf33765c943a languageName: node linkType: hard "engine.io@npm:~6.5.2": version: 6.5.4 resolution: "engine.io@npm:6.5.4" dependencies: "@types/cookie": ^0.4.1 "@types/cors": ^2.8.12 "@types/node": ">=10.0.0" accepts: ~1.3.4 base64id: 2.0.0 cookie: ~0.4.1 cors: ~2.8.5 debug: ~4.3.1 engine.io-parser: ~5.2.1 ws: ~8.11.0 checksum: d5b55cbac718c5b1c10800314379923f8c7ef9e3a8a60c6827ed86303d1154b81d354a89fdecf4cbb773515c82c84a98d3c791ff88279393b53625dd67299d30 languageName: node linkType: hard "enhanced-resolve@npm:^5.16.0": version: 5.16.1 resolution: "enhanced-resolve@npm:5.16.1" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 checksum: 6e4c166fef72ef231455f9119686d93ecccb11874f8256d73a42de5b293cb2536050849382468864b25973514ca4fa4cb13c37be2ff857a211e2aca3ff05bb6c languageName: node linkType: hard "enquirer@npm:~2.3.6": version: 2.3.6 resolution: "enquirer@npm:2.3.6" dependencies: ansi-colors: ^4.1.1 checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 languageName: node linkType: hard "ent@npm:~2.2.0": version: 2.2.0 resolution: "ent@npm:2.2.0" checksum: f588b5707d6fef36011ea10d530645912a69530a1eb0831f8708c498ac028363a7009f45cfadd28ceb4dafd9ac17ec15213f88d09ce239cd033cfe1328dd7d7d languageName: node linkType: hard "entities@npm:^4.2.0, entities@npm:^4.4.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 853f8ebd5b425d350bffa97dd6958143179a5938352ccae092c62d1267c4e392a039be1bae7d51b6e4ffad25f51f9617531fedf5237f15df302ccfb452cbf2d7 languageName: node linkType: hard "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e languageName: node linkType: hard "envinfo@npm:7.13.0, envinfo@npm:^7.7.3, envinfo@npm:^7.7.4": version: 7.13.0 resolution: "envinfo@npm:7.13.0" bin: envinfo: dist/cli.js checksum: 822fc30f53bd0be67f0e25be96eb6a2562b8062f3058846bbd7ec471bd4b7835fca6436ee72c4029c8ae4a3d8f8cddbe2ee725b22291f015232d20a682bee732 languageName: node linkType: hard "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 languageName: node linkType: hard "errno@npm:^0.1.1": version: 0.1.8 resolution: "errno@npm:0.1.8" dependencies: prr: ~1.0.1 bin: errno: cli.js checksum: 1271f7b9fbb3bcbec76ffde932485d1e3561856d21d847ec613a9722ee924cdd4e523a62dc71a44174d91e898fe21fdc8d5b50823f4b5e0ce8c35c8271e6ef4a languageName: node linkType: hard "error-ex@npm:^1.3.1": version: 1.3.2 resolution: "error-ex@npm:1.3.2" dependencies: is-arrayish: ^0.2.1 checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 languageName: node linkType: hard "es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": version: 1.23.3 resolution: "es-abstract@npm:1.23.3" dependencies: array-buffer-byte-length: ^1.0.1 arraybuffer.prototype.slice: ^1.0.3 available-typed-arrays: ^1.0.7 call-bind: ^1.0.7 data-view-buffer: ^1.0.1 data-view-byte-length: ^1.0.1 data-view-byte-offset: ^1.0.0 es-define-property: ^1.0.0 es-errors: ^1.3.0 es-object-atoms: ^1.0.0 es-set-tostringtag: ^2.0.3 es-to-primitive: ^1.2.1 function.prototype.name: ^1.1.6 get-intrinsic: ^1.2.4 get-symbol-description: ^1.0.2 globalthis: ^1.0.3 gopd: ^1.0.1 has-property-descriptors: ^1.0.2 has-proto: ^1.0.3 has-symbols: ^1.0.3 hasown: ^2.0.2 internal-slot: ^1.0.7 is-array-buffer: ^3.0.4 is-callable: ^1.2.7 is-data-view: ^1.0.1 is-negative-zero: ^2.0.3 is-regex: ^1.1.4 is-shared-array-buffer: ^1.0.3 is-string: ^1.0.7 is-typed-array: ^1.1.13 is-weakref: ^1.0.2 object-inspect: ^1.13.1 object-keys: ^1.1.1 object.assign: ^4.1.5 regexp.prototype.flags: ^1.5.2 safe-array-concat: ^1.1.2 safe-regex-test: ^1.0.3 string.prototype.trim: ^1.2.9 string.prototype.trimend: ^1.0.8 string.prototype.trimstart: ^1.0.8 typed-array-buffer: ^1.0.2 typed-array-byte-length: ^1.0.1 typed-array-byte-offset: ^1.0.2 typed-array-length: ^1.0.6 unbox-primitive: ^1.0.2 which-typed-array: ^1.1.15 checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae languageName: node linkType: hard "es-define-property@npm:^1.0.0": version: 1.0.0 resolution: "es-define-property@npm:1.0.0" dependencies: get-intrinsic: ^1.2.4 checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 languageName: node linkType: hard "es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 languageName: node linkType: hard "es-module-lexer@npm:^1.2.1": version: 1.5.3 resolution: "es-module-lexer@npm:1.5.3" checksum: 2e0a0936fb49ca072d438128f588d5b46974035f7a1362bdb26447868016243cfd1c5ec8f12e80d273749e8c603f5aba5a828d5c2d95c07f61fbe77ab4fce4af languageName: node linkType: hard "es-object-atoms@npm:^1.0.0": version: 1.0.0 resolution: "es-object-atoms@npm:1.0.0" dependencies: es-errors: ^1.3.0 checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c languageName: node linkType: hard "es-set-tostringtag@npm:^2.0.3": version: 2.0.3 resolution: "es-set-tostringtag@npm:2.0.3" dependencies: get-intrinsic: ^1.2.4 has-tostringtag: ^1.0.2 hasown: ^2.0.1 checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 languageName: node linkType: hard "es-to-primitive@npm:^1.2.1": version: 1.2.1 resolution: "es-to-primitive@npm:1.2.1" dependencies: is-callable: ^1.1.4 is-date-object: ^1.0.1 is-symbol: ^1.0.2 checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed languageName: node linkType: hard "escalade@npm:^3.1.1, escalade@npm:^3.1.2": version: 3.1.2 resolution: "escalade@npm:3.1.2" checksum: 1ec0977aa2772075493002bdbd549d595ff6e9393b1cb0d7d6fcaf78c750da0c158f180938365486f75cb69fba20294351caddfce1b46552a7b6c3cde52eaa02 languageName: node linkType: hard "escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24 languageName: node linkType: hard "escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": version: 4.0.0 resolution: "escape-string-regexp@npm:4.0.0" checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 languageName: node linkType: hard "escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 languageName: node linkType: hard "eslint-config-prettier@npm:^8.3.0, eslint-config-prettier@npm:^8.6.0": version: 8.10.0 resolution: "eslint-config-prettier@npm:8.10.0" peerDependencies: eslint: ">=7.0.0" bin: eslint-config-prettier: bin/cli.js checksum: 153266badd477e49b0759816246b2132f1dbdb6c7f313ca60a9af5822fd1071c2bc5684a3720d78b725452bbac04bb130878b2513aea5e72b1b792de5a69fec8 languageName: node linkType: hard "eslint-plugin-prettier@npm:^4.0.0, eslint-plugin-prettier@npm:^4.2.1": version: 4.2.1 resolution: "eslint-plugin-prettier@npm:4.2.1" dependencies: prettier-linter-helpers: ^1.0.0 peerDependencies: eslint: ">=7.28.0" prettier: ">=2.0.0" peerDependenciesMeta: eslint-config-prettier: optional: true checksum: b9e839d2334ad8ec7a5589c5cb0f219bded260839a857d7a486997f9870e95106aa59b8756ff3f37202085ebab658de382b0267cae44c3a7f0eb0bcc03a4f6d6 languageName: node linkType: hard "eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: esrecurse: ^4.3.0 estraverse: ^4.1.1 checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb languageName: node linkType: hard "eslint-scope@npm:^7.2.2": version: 7.2.2 resolution: "eslint-scope@npm:7.2.2" dependencies: esrecurse: ^4.3.0 estraverse: ^5.2.0 checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e languageName: node linkType: hard "eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 languageName: node linkType: hard "eslint@npm:^8.32.0, eslint@npm:^8.5.0": version: 8.57.0 resolution: "eslint@npm:8.57.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 "@eslint/eslintrc": ^2.1.4 "@eslint/js": 8.57.0 "@humanwhocodes/config-array": ^0.11.14 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 "@ungap/structured-clone": ^1.2.0 ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 debug: ^4.3.2 doctrine: ^3.0.0 escape-string-regexp: ^4.0.0 eslint-scope: ^7.2.2 eslint-visitor-keys: ^3.4.3 espree: ^9.6.1 esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 find-up: ^5.0.0 glob-parent: ^6.0.2 globals: ^13.19.0 graphemer: ^1.4.0 ignore: ^5.2.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 is-path-inside: ^3.0.3 js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 lodash.merge: ^4.6.2 minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.3 strip-ansi: ^6.0.1 text-table: ^0.2.0 bin: eslint: bin/eslint.js checksum: 3a48d7ff85ab420a8447e9810d8087aea5b1df9ef68c9151732b478de698389ee656fd895635b5f2871c89ee5a2652b3f343d11e9db6f8486880374ebc74a2d9 languageName: node linkType: hard "espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" dependencies: acorn: ^8.9.0 acorn-jsx: ^5.3.2 eslint-visitor-keys: ^3.4.1 checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 languageName: node linkType: hard "esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" bin: esparse: ./bin/esparse.js esvalidate: ./bin/esvalidate.js checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 languageName: node linkType: hard "esquery@npm:^1.4.2": version: 1.5.0 resolution: "esquery@npm:1.5.0" dependencies: estraverse: ^5.1.0 checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 languageName: node linkType: hard "esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" dependencies: estraverse: ^5.2.0 checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 languageName: node linkType: hard "estraverse@npm:^4.1.1": version: 4.3.0 resolution: "estraverse@npm:4.3.0" checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 languageName: node linkType: hard "estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b languageName: node linkType: hard "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 languageName: node linkType: hard "etag@npm:~1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff languageName: node linkType: hard "event-target-shim@npm:^5.0.0": version: 5.0.1 resolution: "event-target-shim@npm:5.0.1" checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 languageName: node linkType: hard "eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.4": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 languageName: node linkType: hard "events@npm:^3.2.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 languageName: node linkType: hard "execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: cross-spawn: ^7.0.3 get-stream: ^6.0.0 human-signals: ^2.1.0 is-stream: ^2.0.0 merge-stream: ^2.0.0 npm-run-path: ^4.0.1 onetime: ^5.1.2 signal-exit: ^3.0.3 strip-final-newline: ^2.0.0 checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 languageName: node linkType: hard "exenv-es6@npm:^1.1.1": version: 1.1.1 resolution: "exenv-es6@npm:1.1.1" checksum: 7f2aa12025e6f06c48dc286f380cf3183bb19c6017b36d91695034a3e5124a7235c4f8ff24ca2eb88ae801322f0f99605cedfcfd996a5fcbba7669320e2a448e languageName: node linkType: hard "expect.js@npm:^0.3.1": version: 0.3.1 resolution: "expect.js@npm:0.3.1" checksum: 3ab9df872129c75e9ae7157f44c9a6468e0e43d636df82585a695d6304ad53004f97e7108ec9d7df06c6193b0e7ea48454a17c8007bb666ff5dd5e7135e0cc54 languageName: node linkType: hard "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 languageName: node linkType: hard "express-rate-limit@npm:5.5.1": version: 5.5.1 resolution: "express-rate-limit@npm:5.5.1" checksum: 264820bd5fe350794f90497c5bdc7b323eec4394873cd4b9f9d3654b2c47b285e87270a5a11721fb7fb895d56218e9657ea7bb9a544dd43770c6e7beaad217e8 languageName: node linkType: hard "express@npm:4.18.3": version: 4.18.3 resolution: "express@npm:4.18.3" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 body-parser: 1.20.2 content-disposition: 0.5.4 content-type: ~1.0.4 cookie: 0.5.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 finalhandler: 1.2.0 fresh: 0.5.2 http-errors: 2.0.0 merge-descriptors: 1.0.1 methods: ~1.1.2 on-finished: 2.4.1 parseurl: ~1.3.3 path-to-regexp: 0.1.7 proxy-addr: ~2.0.7 qs: 6.11.0 range-parser: ~1.2.1 safe-buffer: 5.2.1 send: 0.18.0 serve-static: 1.15.0 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 checksum: 3d7fc8762a81dee0adf0b604f11627db2af082c5f2234e78a4aa8134f22c51f96c6282063f2f8b87f5dbc70679a3087caccb93b6107e324c6feb3a70960a5864 languageName: node linkType: hard "express@npm:4.19.2": version: 4.19.2 resolution: "express@npm:4.19.2" dependencies: accepts: ~1.3.8 array-flatten: 1.1.1 body-parser: 1.20.2 content-disposition: 0.5.4 content-type: ~1.0.4 cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 finalhandler: 1.2.0 fresh: 0.5.2 http-errors: 2.0.0 merge-descriptors: 1.0.1 methods: ~1.1.2 on-finished: 2.4.1 parseurl: ~1.3.3 path-to-regexp: 0.1.7 proxy-addr: ~2.0.7 qs: 6.11.0 range-parser: ~1.2.1 safe-buffer: 5.2.1 send: 0.18.0 serve-static: 1.15.0 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 checksum: 212dbd6c2c222a96a61bc927639c95970a53b06257080bb9e2838adb3bffdb966856551fdad1ab5dd654a217c35db94f987d0aa88d48fb04d306340f5f34dca5 languageName: node linkType: hard "extend@npm:^3.0.0, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 languageName: node linkType: hard "external-editor@npm:^3.0.3, external-editor@npm:^3.1.0": version: 3.1.0 resolution: "external-editor@npm:3.1.0" dependencies: chardet: ^0.7.0 iconv-lite: ^0.4.24 tmp: ^0.0.33 checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 languageName: node linkType: hard "extsprintf@npm:1.3.0": version: 1.3.0 resolution: "extsprintf@npm:1.3.0" checksum: cee7a4a1e34cffeeec18559109de92c27517e5641991ec6bab849aa64e3081022903dd53084f2080d0d2530803aa5ee84f1e9de642c365452f9e67be8f958ce2 languageName: node linkType: hard "extsprintf@npm:^1.2.0": version: 1.4.1 resolution: "extsprintf@npm:1.4.1" checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 languageName: node linkType: hard "fast-deep-equal@npm:^1.0.0": version: 1.1.0 resolution: "fast-deep-equal@npm:1.1.0" checksum: 69b4c9534d9805f13a341aa72f69641d0b9ae3cc8beb25c64e68a257241c7bb34370266db27ae4fc3c4da0518448c01a5f587a096a211471c86a38facd9a1486 languageName: node linkType: hard "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d languageName: node linkType: hard "fast-diff@npm:^1.1.2": version: 1.3.0 resolution: "fast-diff@npm:1.3.0" checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 languageName: node linkType: hard "fast-glob@npm:3.2.7": version: 3.2.7 resolution: "fast-glob@npm:3.2.7" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 micromatch: ^4.0.4 checksum: 2f4708ff112d2b451888129fdd9a0938db88b105b0ddfd043c064e3c4d3e20eed8d7c7615f7565fee660db34ddcf08a2db1bf0ab3c00b87608e4719694642d78 languageName: node linkType: hard "fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.2, fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 micromatch: ^4.0.4 checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 languageName: node linkType: hard "fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb languageName: node linkType: hard "fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c languageName: node linkType: hard "fast-redact@npm:^3.0.0, fast-redact@npm:^3.1.1": version: 3.5.0 resolution: "fast-redact@npm:3.5.0" checksum: ef03f0d1849da074a520a531ad299bf346417b790a643931ab4e01cb72275c8d55b60dc8512fb1f1818647b696790edefaa96704228db9f012da935faa1940af languageName: node linkType: hard "fast-safe-stringify@npm:2.1.1": version: 2.1.1 resolution: "fast-safe-stringify@npm:2.1.1" checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d languageName: node linkType: hard "fastest-levenshtein@npm:^1.0.12": version: 1.0.16 resolution: "fastest-levenshtein@npm:1.0.16" checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 languageName: node linkType: hard "fastq@npm:^1.6.0": version: 1.17.1 resolution: "fastq@npm:1.17.1" dependencies: reusify: ^1.0.4 checksum: a8c5b26788d5a1763f88bae56a8ddeee579f935a831c5fe7a8268cea5b0a91fbfe705f612209e02d639b881d7b48e461a50da4a10cfaa40da5ca7cc9da098d88 languageName: node linkType: hard "figures@npm:3.2.0, figures@npm:^3.0.0": version: 3.2.0 resolution: "figures@npm:3.2.0" dependencies: escape-string-regexp: ^1.0.5 checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b languageName: node linkType: hard "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" dependencies: flat-cache: ^3.0.4 checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 languageName: node linkType: hard "filelist@npm:^1.0.4": version: 1.0.4 resolution: "filelist@npm:1.0.4" dependencies: minimatch: ^5.0.1 checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 languageName: node linkType: hard "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" dependencies: to-regex-range: ^5.0.1 checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 languageName: node linkType: hard "finalhandler@npm:1.1.2": version: 1.1.2 resolution: "finalhandler@npm:1.1.2" dependencies: debug: 2.6.9 encodeurl: ~1.0.2 escape-html: ~1.0.3 on-finished: ~2.3.0 parseurl: ~1.3.3 statuses: ~1.5.0 unpipe: ~1.0.0 checksum: 617880460c5138dd7ccfd555cb5dde4d8f170f4b31b8bd51e4b646bb2946c30f7db716428a1f2882d730d2b72afb47d1f67cc487b874cb15426f95753a88965e languageName: node linkType: hard "finalhandler@npm:1.2.0": version: 1.2.0 resolution: "finalhandler@npm:1.2.0" dependencies: debug: 2.6.9 encodeurl: ~1.0.2 escape-html: ~1.0.3 on-finished: 2.4.1 parseurl: ~1.3.3 statuses: 2.0.1 unpipe: ~1.0.0 checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 languageName: node linkType: hard "find-root@npm:^1.0.0": version: 1.1.0 resolution: "find-root@npm:1.1.0" checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf languageName: node linkType: hard "find-up@npm:5.0.0, find-up@npm:^5.0.0": version: 5.0.0 resolution: "find-up@npm:5.0.0" dependencies: locate-path: ^6.0.0 path-exists: ^4.0.0 checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 languageName: node linkType: hard "find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" dependencies: locate-path: ^2.0.0 checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd languageName: node linkType: hard "find-up@npm:^4.0.0, find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" dependencies: locate-path: ^5.0.0 path-exists: ^4.0.0 checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 languageName: node linkType: hard "flat-cache@npm:^3.0.4": version: 3.2.0 resolution: "flat-cache@npm:3.2.0" dependencies: flatted: ^3.2.9 keyv: ^4.5.3 rimraf: ^3.0.2 checksum: e7e0f59801e288b54bee5cb9681e9ee21ee28ef309f886b312c9d08415b79fc0f24ac842f84356ce80f47d6a53de62197ce0e6e148dc42d5db005992e2a756ec languageName: node linkType: hard "flat@npm:^5.0.2": version: 5.0.2 resolution: "flat@npm:5.0.2" bin: flat: cli.js checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d languageName: node linkType: hard "flatted@npm:^3.2.7, flatted@npm:^3.2.9": version: 3.3.1 resolution: "flatted@npm:3.3.1" checksum: 85ae7181650bb728c221e7644cbc9f4bf28bc556f2fc89bb21266962bdf0ce1029cc7acc44bb646cd469d9baac7c317f64e841c4c4c00516afa97320cdac7f94 languageName: node linkType: hard "flatten@npm:^1.0.2": version: 1.0.3 resolution: "flatten@npm:1.0.3" checksum: 5c57379816f1692aaa79fbc6390e0a0644e5e8442c5783ed57c6d315468eddbc53a659eaa03c9bb1e771b0f4a9bd8dd8a2620286bf21fd6538a7857321fdfb20 languageName: node linkType: hard "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.6": version: 1.15.6 resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: debug: optional: true checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 languageName: node linkType: hard "font-awesome@npm:^4.7.0": version: 4.7.0 resolution: "font-awesome@npm:4.7.0" checksum: fa223f6e3b27e97d2d09cdbf0c1363e2ad18d2a685fc045f54e86394db59f7c113482a819de3b6489f42a630a8ec5911b8e65718e45f7cace1c0a1b05d7fce08 languageName: node linkType: hard "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" dependencies: is-callable: ^1.1.3 checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 languageName: node linkType: hard "foreground-child@npm:^3.1.0": version: 3.1.1 resolution: "foreground-child@npm:3.1.1" dependencies: cross-spawn: ^7.0.0 signal-exit: ^4.0.1 checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 languageName: node linkType: hard "forever-agent@npm:~0.6.1": version: 0.6.1 resolution: "forever-agent@npm:0.6.1" checksum: 766ae6e220f5fe23676bb4c6a99387cec5b7b62ceb99e10923376e27bfea72f3c3aeec2ba5f45f3f7ba65d6616965aa7c20b15002b6860833bb6e394dea546a8 languageName: node linkType: hard "form-data@npm:^4.0.0": version: 4.0.0 resolution: "form-data@npm:4.0.0" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c languageName: node linkType: hard "form-data@npm:~2.3.2": version: 2.3.3 resolution: "form-data@npm:2.3.3" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.6 mime-types: ^2.1.12 checksum: 10c1780fa13dbe1ff3100114c2ce1f9307f8be10b14bf16e103815356ff567b6be39d70fc4a40f8990b9660012dc24b0f5e1dde1b6426166eb23a445ba068ca3 languageName: node linkType: hard "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 languageName: node linkType: hard "free-style@npm:3.1.0": version: 3.1.0 resolution: "free-style@npm:3.1.0" checksum: 949258ae315deda48cac93ecd5f9a80f36e8a027e19ce2103598dc8d5ab60e963bbad5444b2a4990ddb746798dd188896f430285cf484afbf2141f7d75a191d8 languageName: node linkType: hard "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346 languageName: node linkType: hard "fs-constants@npm:^1.0.0": version: 1.0.0 resolution: "fs-constants@npm:1.0.0" checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d languageName: node linkType: hard "fs-extra@npm:^10.0.0, fs-extra@npm:^10.1.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 languageName: node linkType: hard "fs-extra@npm:^11.1.0": version: 11.2.0 resolution: "fs-extra@npm:11.2.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 checksum: b12e42fa40ba47104202f57b8480dd098aa931c2724565e5e70779ab87605665594e76ee5fb00545f772ab9ace167fe06d2ab009c416dc8c842c5ae6df7aa7e8 languageName: node linkType: hard "fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0" dependencies: graceful-fs: ^4.2.0 jsonfile: ^4.0.0 universalify: ^0.1.0 checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880 languageName: node linkType: hard "fs-extra@npm:^9.1.0": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" dependencies: at-least-node: ^1.0.0 graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 languageName: node linkType: hard "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": version: 2.1.0 resolution: "fs-minipass@npm:2.1.0" dependencies: minipass: ^3.0.0 checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 languageName: node linkType: hard "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" dependencies: minipass: ^7.0.3 checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 languageName: node linkType: hard "fs.realpath@npm:^1.0.0": version: 1.0.0 resolution: "fs.realpath@npm:1.0.0" checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 languageName: node linkType: hard "fsevents@npm:~2.3.2": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: node-gyp: latest checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 conditions: os=darwin languageName: node linkType: hard "fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" dependencies: node-gyp: latest conditions: os=darwin languageName: node linkType: hard "function-bind@npm:^1.1.2": version: 1.1.2 resolution: "function-bind@npm:1.1.2" checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 languageName: node linkType: hard "function.prototype.name@npm:^1.1.6": version: 1.1.6 resolution: "function.prototype.name@npm:1.1.6" dependencies: call-bind: ^1.0.2 define-properties: ^1.2.0 es-abstract: ^1.22.1 functions-have-names: ^1.2.3 checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 languageName: node linkType: hard "functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 languageName: node linkType: hard "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" dependencies: aproba: ^1.0.3 || ^2.0.0 color-support: ^1.1.3 console-control-strings: ^1.1.0 has-unicode: ^2.0.1 signal-exit: ^3.0.7 string-width: ^4.2.3 strip-ansi: ^6.0.1 wide-align: ^1.1.5 checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d languageName: node linkType: hard "gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec languageName: node linkType: hard "get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 languageName: node linkType: hard "get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2": version: 2.0.2 resolution: "get-func-name@npm:2.0.2" checksum: 3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b languageName: node linkType: hard "get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" dependencies: es-errors: ^1.3.0 function-bind: ^1.1.2 has-proto: ^1.0.1 has-symbols: ^1.0.3 hasown: ^2.0.0 checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 languageName: node linkType: hard "get-pkg-repo@npm:^4.0.0": version: 4.2.1 resolution: "get-pkg-repo@npm:4.2.1" dependencies: "@hutson/parse-repository-url": ^3.0.0 hosted-git-info: ^4.0.0 through2: ^2.0.0 yargs: ^16.2.0 bin: get-pkg-repo: src/cli.js checksum: 5abf169137665e45b09a857b33ad2fdcf2f4a09f0ecbd0ebdd789a7ce78c39186a21f58621127eb724d2d4a3a7ee8e6bd4ac7715efda01ad5200665afc218e0d languageName: node linkType: hard "get-port@npm:^5.1.1": version: 5.1.1 resolution: "get-port@npm:5.1.1" checksum: 0162663ffe5c09e748cd79d97b74cd70e5a5c84b760a475ce5767b357fb2a57cb821cee412d646aa8a156ed39b78aab88974eddaa9e5ee926173c036c0713787 languageName: node linkType: hard "get-stdin@npm:^9.0.0": version: 9.0.0 resolution: "get-stdin@npm:9.0.0" checksum: 5972bc34d05932b45512c8e2d67b040f1c1ca8afb95c56cbc480985f2d761b7e37fe90dc8abd22527f062cc5639a6930ff346e9952ae4c11a2d4275869459594 languageName: node linkType: hard "get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: pump: ^3.0.0 checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 languageName: node linkType: hard "get-stream@npm:^6.0.0": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad languageName: node linkType: hard "get-symbol-description@npm:^1.0.2": version: 1.0.2 resolution: "get-symbol-description@npm:1.0.2" dependencies: call-bind: ^1.0.5 es-errors: ^1.3.0 get-intrinsic: ^1.2.4 checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 languageName: node linkType: hard "getpass@npm:^0.1.1": version: 0.1.7 resolution: "getpass@npm:0.1.7" dependencies: assert-plus: ^1.0.0 checksum: ab18d55661db264e3eac6012c2d3daeafaab7a501c035ae0ccb193c3c23e9849c6e29b6ac762b9c2adae460266f925d55a3a2a3a3c8b94be2f222df94d70c046 languageName: node linkType: hard "git-hooks-list@npm:1.0.3": version: 1.0.3 resolution: "git-hooks-list@npm:1.0.3" checksum: a1dd03d39c1d727ba08a35dbdbdcc6e96de8c4170c942dc95bf787ca6e34998d39fb5295a00242b58a3d265de0b69a0686d0cf583baa6b7830f268542c4576b9 languageName: node linkType: hard "git-hooks-list@npm:^3.0.0": version: 3.1.0 resolution: "git-hooks-list@npm:3.1.0" checksum: 05cbdb29e1e14f3b6fde78c876a34383e4476b1be32e8486ad03293f01add884c1a8df8c2dce2ca5d99119c94951b2ff9fa9cbd51d834ae6477b6813cefb998f languageName: node linkType: hard "git-raw-commits@npm:^2.0.8": version: 2.0.11 resolution: "git-raw-commits@npm:2.0.11" dependencies: dargs: ^7.0.0 lodash: ^4.17.15 meow: ^8.0.0 split2: ^3.0.0 through2: ^4.0.0 bin: git-raw-commits: cli.js checksum: c178af43633684106179793b6e3473e1d2bb50bb41d04e2e285ea4eef342ca4090fee6bc8a737552fde879d22346c90de5c49f18c719a0f38d4c934f258a0f79 languageName: node linkType: hard "git-remote-origin-url@npm:^2.0.0": version: 2.0.0 resolution: "git-remote-origin-url@npm:2.0.0" dependencies: gitconfiglocal: ^1.0.0 pify: ^2.3.0 checksum: 85263a09c044b5f4fe2acc45cbb3c5331ab2bd4484bb53dfe7f3dd593a4bf90a9786a2e00b9884524331f50b3da18e8c924f01c2944087fc7f342282c4437b73 languageName: node linkType: hard "git-semver-tags@npm:^4.1.1": version: 4.1.1 resolution: "git-semver-tags@npm:4.1.1" dependencies: meow: ^8.0.0 semver: ^6.0.0 bin: git-semver-tags: cli.js checksum: e16d02a515c0f88289a28b5bf59bf42c0dc053765922d3b617ae4b50546bd4f74a25bf3ad53b91cb6c1159319a2e92533b160c573b856c2629125c8b26b3b0e3 languageName: node linkType: hard "git-up@npm:^7.0.0": version: 7.0.0 resolution: "git-up@npm:7.0.0" dependencies: is-ssh: ^1.4.0 parse-url: ^8.1.0 checksum: 2faadbab51e94d2ffb220e426e950087cc02c15d664e673bd5d1f734cfa8196fed8b19493f7bf28fe216d087d10e22a7fd9b63687e0ba7d24f0ddcfb0a266d6e languageName: node linkType: hard "git-url-parse@npm:^13.1.0": version: 13.1.1 resolution: "git-url-parse@npm:13.1.1" dependencies: git-up: ^7.0.0 checksum: 8a6111814f4dfff304149b22c8766dc0a90c10e4ea5b5d103f7c3f14b0a711c7b20fc5a9e03c0e2d29123486ac648f9e19f663d8132f69549bee2de49ee96989 languageName: node linkType: hard "gitconfiglocal@npm:^1.0.0": version: 1.0.0 resolution: "gitconfiglocal@npm:1.0.0" dependencies: ini: ^1.3.2 checksum: e6d2764c15bbab6d1d1000d1181bb907f6b3796bb04f63614dba571b18369e0ecb1beaf27ce8da5b24307ef607e3a5f262a67cb9575510b9446aac697d421beb languageName: node linkType: hard "glob-parent@npm:^5.1.1, glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: is-glob: ^4.0.1 checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e languageName: node linkType: hard "glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" dependencies: is-glob: ^4.0.3 checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 languageName: node linkType: hard "glob-to-regexp@npm:^0.4.1": version: 0.4.1 resolution: "glob-to-regexp@npm:0.4.1" checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 languageName: node linkType: hard "glob@npm:7.1.4": version: 7.1.4 resolution: "glob@npm:7.1.4" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 minimatch: ^3.0.4 once: ^1.3.0 path-is-absolute: ^1.0.0 checksum: f52480fc82b1e66e52990f0f2e7306447d12294c83fbbee0395e761ad1178172012a7cc0673dbf4810baac400fc09bf34484c08b5778c216403fd823db281716 languageName: node linkType: hard "glob@npm:7.2.0": version: 7.2.0 resolution: "glob@npm:7.2.0" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 minimatch: ^3.0.4 once: ^1.3.0 path-is-absolute: ^1.0.0 checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 languageName: node linkType: hard "glob@npm:^10.2.2, glob@npm:^10.2.4, glob@npm:^10.3.10, glob@npm:^10.3.7": version: 10.3.16 resolution: "glob@npm:10.3.16" dependencies: foreground-child: ^3.1.0 jackspeak: ^3.1.2 minimatch: ^9.0.1 minipass: ^7.0.4 path-scurry: ^1.11.0 bin: glob: dist/esm/bin.mjs checksum: 3cc49a0700fde72a1669ed587d167bb6921e23cd43fa3f03729794df6719a4188e0a5f3520a6d27b7762bd6b634a275fa6f400298b1559633d2e51bab8096c2e languageName: node linkType: hard "glob@npm:^6.0.1": version: 6.0.4 resolution: "glob@npm:6.0.4" dependencies: inflight: ^1.0.4 inherits: 2 minimatch: 2 || 3 once: ^1.3.0 path-is-absolute: ^1.0.0 checksum: c4946c3d015ac81f704d185f2b3a55eb670100693c2cf7bc833d0efd970ec727d860d4839a5178e46a7e594b34a34661bae2f4c3405727c9fd189f84954ca3c0 languageName: node linkType: hard "glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.7": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 minimatch: ^3.1.1 once: ^1.3.0 path-is-absolute: ^1.0.0 checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 languageName: node linkType: hard "glob@npm:^8.0.1": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 minimatch: ^5.0.1 once: ^1.3.0 checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 languageName: node linkType: hard "glob@npm:~7.1.6": version: 7.1.7 resolution: "glob@npm:7.1.7" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 minimatch: ^3.0.4 once: ^1.3.0 path-is-absolute: ^1.0.0 checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 languageName: node linkType: hard "globals@npm:^11.1.0": version: 11.12.0 resolution: "globals@npm:11.12.0" checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e languageName: node linkType: hard "globals@npm:^13.19.0": version: 13.24.0 resolution: "globals@npm:13.24.0" dependencies: type-fest: ^0.20.2 checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c languageName: node linkType: hard "globals@npm:^9.18.0": version: 9.18.0 resolution: "globals@npm:9.18.0" checksum: e9c066aecfdc5ea6f727344a4246ecc243aaf66ede3bffee10ddc0c73351794c25e727dd046090dcecd821199a63b9de6af299a6e3ba292c8b22f0a80ea32073 languageName: node linkType: hard "globalthis@npm:^1.0.3": version: 1.0.4 resolution: "globalthis@npm:1.0.4" dependencies: define-properties: ^1.2.1 gopd: ^1.0.1 checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a languageName: node linkType: hard "globby@npm:10.0.0": version: 10.0.0 resolution: "globby@npm:10.0.0" dependencies: "@types/glob": ^7.1.1 array-union: ^2.1.0 dir-glob: ^3.0.1 fast-glob: ^3.0.3 glob: ^7.1.3 ignore: ^5.1.1 merge2: ^1.2.3 slash: ^3.0.0 checksum: fbff58d2fcaedd9207901f6e3b5341ff885b6d499c3a095f7befde0fd03ec1ea634452a82f81e894e46f6a5d704da44b842ba93066f90dced52adf84d4b8d1cc languageName: node linkType: hard "globby@npm:^11.0.2, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: array-union: ^2.1.0 dir-glob: ^3.0.1 fast-glob: ^3.2.9 ignore: ^5.2.0 merge2: ^1.4.1 slash: ^3.0.0 checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 languageName: node linkType: hard "globby@npm:^12.0.0": version: 12.2.0 resolution: "globby@npm:12.2.0" dependencies: array-union: ^3.0.1 dir-glob: ^3.0.1 fast-glob: ^3.2.7 ignore: ^5.1.9 merge2: ^1.4.1 slash: ^4.0.0 checksum: 2539379a7fff3473d3e7c68b4540ba38f36970f43f760e36e301515d5cb98a0c5736554957d90390906bee632327beb2f9518d1acd6911f61e436db11b0da5b5 languageName: node linkType: hard "globby@npm:^13.1.2": version: 13.2.2 resolution: "globby@npm:13.2.2" dependencies: dir-glob: ^3.0.1 fast-glob: ^3.3.0 ignore: ^5.2.4 merge2: ^1.4.1 slash: ^4.0.0 checksum: f3d84ced58a901b4fcc29c846983108c426631fe47e94872868b65565495f7bee7b3defd68923bd480582771fd4bbe819217803a164a618ad76f1d22f666f41e languageName: node linkType: hard "gopd@npm:^1.0.1": version: 1.0.1 resolution: "gopd@npm:1.0.1" dependencies: get-intrinsic: ^1.1.3 checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 languageName: node linkType: hard "got@npm:^11.7.0, got@npm:^11.8.2": version: 11.8.6 resolution: "got@npm:11.8.6" dependencies: "@sindresorhus/is": ^4.0.0 "@szmarczak/http-timer": ^4.0.5 "@types/cacheable-request": ^6.0.1 "@types/responselike": ^1.0.0 cacheable-lookup: ^5.0.3 cacheable-request: ^7.0.2 decompress-response: ^6.0.0 http2-wrapper: ^1.0.0-beta.5.2 lowercase-keys: ^2.0.0 p-cancelable: ^2.0.0 responselike: ^2.0.0 checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d languageName: node linkType: hard "graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 languageName: node linkType: hard "grapheme-splitter@npm:^1.0.4": version: 1.0.4 resolution: "grapheme-splitter@npm:1.0.4" checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 languageName: node linkType: hard "graphemer@npm:^1.4.0": version: 1.4.0 resolution: "graphemer@npm:1.4.0" checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 languageName: node linkType: hard "growl@npm:1.10.5": version: 1.10.5 resolution: "growl@npm:1.10.5" checksum: 4b86685de6831cebcbb19f93870bea624afee61124b0a20c49017013987cd129e73a8c4baeca295728f41d21265e1f859d25ef36731b142ca59c655fea94bb1a languageName: node linkType: hard "handlebars@npm:4.7.8, handlebars@npm:^4.7.7": version: 4.7.8 resolution: "handlebars@npm:4.7.8" dependencies: minimist: ^1.2.5 neo-async: ^2.6.2 source-map: ^0.6.1 uglify-js: ^3.1.4 wordwrap: ^1.0.0 dependenciesMeta: uglify-js: optional: true bin: handlebars: bin/handlebars checksum: 00e68bb5c183fd7b8b63322e6234b5ac8fbb960d712cb3f25587d559c2951d9642df83c04a1172c918c41bcfc81bfbd7a7718bbce93b893e0135fc99edea93ff languageName: node linkType: hard "hard-rejection@npm:^2.1.0": version: 2.1.0 resolution: "hard-rejection@npm:2.1.0" checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc languageName: node linkType: hard "has-ansi@npm:^2.0.0": version: 2.0.0 resolution: "has-ansi@npm:2.0.0" dependencies: ansi-regex: ^2.0.0 checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec languageName: node linkType: hard "has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": version: 1.0.2 resolution: "has-bigints@npm:1.0.2" checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b languageName: node linkType: hard "has-flag@npm:^3.0.0": version: 3.0.0 resolution: "has-flag@npm:3.0.0" checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b languageName: node linkType: hard "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad languageName: node linkType: hard "has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": version: 1.0.2 resolution: "has-property-descriptors@npm:1.0.2" dependencies: es-define-property: ^1.0.0 checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 languageName: node linkType: hard "has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": version: 1.0.3 resolution: "has-proto@npm:1.0.3" checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 languageName: node linkType: hard "has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 languageName: node linkType: hard "has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" dependencies: has-symbols: ^1.0.3 checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d languageName: node linkType: hard "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 languageName: node linkType: hard "hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: function-bind: ^1.1.2 checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db languageName: node linkType: hard "he@npm:1.2.0, he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" bin: he: bin/he checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 languageName: node linkType: hard "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd languageName: node linkType: hard "hosted-git-info@npm:^3.0.6": version: 3.0.8 resolution: "hosted-git-info@npm:3.0.8" dependencies: lru-cache: ^6.0.0 checksum: 5af7a69581acb84206a7b8e009f4680c36396814e92c8a83973dfb3b87e44e44d1f7b8eaf3e4a953686482770ecb78406a4ce4666bfdfe447762434127871d8d languageName: node linkType: hard "hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": version: 4.1.0 resolution: "hosted-git-info@npm:4.1.0" dependencies: lru-cache: ^6.0.0 checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 languageName: node linkType: hard "hosted-git-info@npm:^5.0.0": version: 5.2.1 resolution: "hosted-git-info@npm:5.2.1" dependencies: lru-cache: ^7.5.1 checksum: fa35df185224adfd69141f3b2f8cc31f50e705a5ebb415ccfbfd055c5b94bd08d3e658edf1edad9e2ac7d81831ac7cf261f5d219b3adc8d744fb8cdacaaf2ead languageName: node linkType: hard "html-encoding-sniffer@npm:^3.0.0": version: 3.0.0 resolution: "html-encoding-sniffer@npm:3.0.0" dependencies: whatwg-encoding: ^2.0.0 checksum: 8d806aa00487e279e5ccb573366a951a9f68f65c90298eac9c3a2b440a7ffe46615aff2995a2f61c6746c639234e6179a97e18ca5ccbbf93d3725ef2099a4502 languageName: node linkType: hard "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 languageName: node linkType: hard "htmlparser2@npm:^8.0.0": version: 8.0.2 resolution: "htmlparser2@npm:8.0.2" dependencies: domelementtype: ^2.3.0 domhandler: ^5.0.3 domutils: ^3.0.1 entities: ^4.4.0 checksum: 29167a0f9282f181da8a6d0311b76820c8a59bc9e3c87009e21968264c2987d2723d6fde5a964d4b7b6cba663fca96ffb373c06d8223a85f52a6089ced942700 languageName: node linkType: hard "http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 languageName: node linkType: hard "http-errors@npm:2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 languageName: node linkType: hard "http-proxy-agent@npm:^5.0.0": version: 5.0.0 resolution: "http-proxy-agent@npm:5.0.0" dependencies: "@tootallnate/once": 2 agent-base: 6 debug: 4 checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 languageName: node linkType: hard "http-proxy-agent@npm:^7.0.0": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" dependencies: agent-base: ^7.1.0 debug: ^4.3.4 checksum: 670858c8f8f3146db5889e1fa117630910101db601fff7d5a8aa637da0abedf68c899f03d3451cac2f83bcc4c3d2dabf339b3aa00ff8080571cceb02c3ce02f3 languageName: node linkType: hard "http-proxy@npm:^1.18.1": version: 1.18.1 resolution: "http-proxy@npm:1.18.1" dependencies: eventemitter3: ^4.0.0 follow-redirects: ^1.0.0 requires-port: ^1.0.0 checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 languageName: node linkType: hard "http-server@npm:^14.0.0": version: 14.1.1 resolution: "http-server@npm:14.1.1" dependencies: basic-auth: ^2.0.1 chalk: ^4.1.2 corser: ^2.0.1 he: ^1.2.0 html-encoding-sniffer: ^3.0.0 http-proxy: ^1.18.1 mime: ^1.6.0 minimist: ^1.2.6 opener: ^1.5.1 portfinder: ^1.0.28 secure-compare: 3.0.1 union: ~0.5.0 url-join: ^4.0.1 bin: http-server: bin/http-server checksum: 4f9674289195eaf9f3e408e093d2080b0d4647559a32c9e7868639c327cab62efd0bb8bc9ded9a625d9ce982cbb03517d4472400af5ecf36eeb5b4fa62d113fe languageName: node linkType: hard "http-signature@npm:~1.3.6": version: 1.3.6 resolution: "http-signature@npm:1.3.6" dependencies: assert-plus: ^1.0.0 jsprim: ^2.0.2 sshpk: ^1.14.1 checksum: 10be2af4764e71fee0281392937050201ee576ac755c543f570d6d87134ce5e858663fe999a7adb3e4e368e1e356d0d7fec6b9542295b875726ff615188e7a0c languageName: node linkType: hard "http-status-codes@npm:2.2.0": version: 2.2.0 resolution: "http-status-codes@npm:2.2.0" checksum: 31e1d730856210445da0907d9b484629e69e4fe92ac032478a7aa4d89e5b215e2b4e75d7ebce40d0537b6850bd281b2f65c7cc36cc2677e5de056d6cea1045ce languageName: node linkType: hard "http-status-codes@npm:2.3.0": version: 2.3.0 resolution: "http-status-codes@npm:2.3.0" checksum: dae3b99e0155441b6df28e8265ff27c56a45f82c6092f736414233e9ccf063d5ea93c1e1279e8b499c4642e2538b37995c76b1640ed3f615d0e2883d3a1dcfd5 languageName: node linkType: hard "http2-wrapper@npm:^1.0.0-beta.5.2": version: 1.0.3 resolution: "http2-wrapper@npm:1.0.3" dependencies: quick-lru: ^5.1.1 resolve-alpn: ^1.0.0 checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e languageName: node linkType: hard "https-proxy-agent@npm:5.0.1, https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" dependencies: agent-base: 6 debug: 4 checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 languageName: node linkType: hard "https-proxy-agent@npm:^7.0.1": version: 7.0.4 resolution: "https-proxy-agent@npm:7.0.4" dependencies: agent-base: ^7.0.2 debug: 4 checksum: daaab857a967a2519ddc724f91edbbd388d766ff141b9025b629f92b9408fc83cee8a27e11a907aede392938e9c398e240d643e178408a59e4073539cde8cfe9 languageName: node linkType: hard "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 languageName: node linkType: hard "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" dependencies: ms: ^2.0.0 checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 languageName: node linkType: hard "husky@npm:^7.0.4": version: 7.0.4 resolution: "husky@npm:7.0.4" bin: husky: lib/bin.js checksum: c6ec4af63da2c9522da8674a20ad9b48362cc92704896cc8a58c6a2a39d797feb2b806f93fbd83a6d653fbdceb2c3b6e0b602c6b2e8565206ffc2882ef7db9e9 languageName: node linkType: hard "iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" dependencies: safer-buffer: ">= 2.1.2 < 3" checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 languageName: node linkType: hard "iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" dependencies: safer-buffer: ">= 2.1.2 < 3.0.0" checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf languageName: node linkType: hard "icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": version: 5.1.0 resolution: "icss-utils@npm:5.1.0" peerDependencies: postcss: ^8.1.0 checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 languageName: node linkType: hard "ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e languageName: node linkType: hard "ignore-walk@npm:^5.0.1": version: 5.0.1 resolution: "ignore-walk@npm:5.0.1" dependencies: minimatch: ^5.0.1 checksum: 1a4ef35174653a1aa6faab3d9f8781269166536aee36a04946f6e2b319b2475c1903a75ed42f04219274128242f49d0a10e20c4354ee60d9548e97031451150b languageName: node linkType: hard "ignore@npm:^5.0.4, ignore@npm:^5.1.1, ignore@npm:^5.1.9, ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.1 resolution: "ignore@npm:5.3.1" checksum: 71d7bb4c1dbe020f915fd881108cbe85a0db3d636a0ea3ba911393c53946711d13a9b1143c7e70db06d571a5822c0a324a6bcde5c9904e7ca5047f01f1bf8cd3 languageName: node linkType: hard "image-size@npm:~0.5.0": version: 0.5.5 resolution: "image-size@npm:0.5.5" bin: image-size: bin/image-size.js checksum: 6709d5cb73e96d5097ae5e9aa746dd36d6a9c8cf645e7eecac72ea07dbd6f312a65183752762fa92e2f3b698d4ed8d85dd55bf5207b6367245996bd16576d8fe languageName: node linkType: hard "import-fresh@npm:^3.2.1": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa languageName: node linkType: hard "import-local@npm:^3.0.2": version: 3.1.0 resolution: "import-local@npm:3.1.0" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd languageName: node linkType: hard "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 languageName: node linkType: hard "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 languageName: node linkType: hard "indexes-of@npm:^1.0.1": version: 1.0.1 resolution: "indexes-of@npm:1.0.1" checksum: 4f9799b1739a62f3e02d09f6f4162cf9673025282af7fa36e790146e7f4e216dad3e776a25b08536c093209c9fcb5ea7bd04b082d42686a45f58ff401d6da32e languageName: node linkType: hard "infer-owner@npm:^1.0.4": version: 1.0.4 resolution: "infer-owner@npm:1.0.4" checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 languageName: node linkType: hard "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" dependencies: once: ^1.3.0 wrappy: 1 checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd languageName: node linkType: hard "inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 languageName: node linkType: hard "ini@npm:^1.3.2, ini@npm:^1.3.4, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 languageName: node linkType: hard "init-package-json@npm:^3.0.2": version: 3.0.2 resolution: "init-package-json@npm:3.0.2" dependencies: npm-package-arg: ^9.0.1 promzard: ^0.3.0 read: ^1.0.7 read-package-json: ^5.0.0 semver: ^7.3.5 validate-npm-package-license: ^3.0.4 validate-npm-package-name: ^4.0.0 checksum: e027f60e4a1564809eee790d5a842341c784888fd7c7ace5f9a34ea76224c0adb6f3ab3bf205cf1c9c877a6e1a76c68b00847a984139f60813125d7b42a23a13 languageName: node linkType: hard "inquirer@npm:^8.2.4": version: 8.2.6 resolution: "inquirer@npm:8.2.6" dependencies: ansi-escapes: ^4.2.1 chalk: ^4.1.1 cli-cursor: ^3.1.0 cli-width: ^3.0.0 external-editor: ^3.0.3 figures: ^3.0.0 lodash: ^4.17.21 mute-stream: 0.0.8 ora: ^5.4.1 run-async: ^2.4.0 rxjs: ^7.5.5 string-width: ^4.1.0 strip-ansi: ^6.0.0 through: ^2.3.6 wrap-ansi: ^6.0.1 checksum: 387ffb0a513559cc7414eb42c57556a60e302f820d6960e89d376d092e257a919961cd485a1b4de693dbb5c0de8bc58320bfd6247dfd827a873aa82a4215a240 languageName: node linkType: hard "inquirer@npm:^9.1.4": version: 9.2.22 resolution: "inquirer@npm:9.2.22" dependencies: "@inquirer/figures": ^1.0.2 "@ljharb/through": ^2.3.13 ansi-escapes: ^4.3.2 chalk: ^5.3.0 cli-cursor: ^3.1.0 cli-width: ^4.1.0 external-editor: ^3.1.0 lodash: ^4.17.21 mute-stream: 1.0.0 ora: ^5.4.1 run-async: ^3.0.0 rxjs: ^7.8.1 string-width: ^4.2.3 strip-ansi: ^6.0.1 wrap-ansi: ^6.2.0 checksum: 4b6f80730876795fdc20a6724eb95b46cfb96966e99b85c48e6f69fa51b99da0f0a151ddf1e43de530125433c8c0756ef2e4bb777dfe7f11f9efed6c0012645c languageName: node linkType: hard "internal-slot@npm:^1.0.7": version: 1.0.7 resolution: "internal-slot@npm:1.0.7" dependencies: es-errors: ^1.3.0 hasown: ^2.0.0 side-channel: ^1.0.4 checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb languageName: node linkType: hard "interpret@npm:^2.2.0": version: 2.2.0 resolution: "interpret@npm:2.2.0" checksum: f51efef7cb8d02da16408ffa3504cd6053014c5aeb7bb8c223727e053e4235bf565e45d67028b0c8740d917c603807aa3c27d7bd2f21bf20b6417e2bb3e5fd6e languageName: node linkType: hard "interpret@npm:^3.1.1": version: 3.1.1 resolution: "interpret@npm:3.1.1" checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 languageName: node linkType: hard "invariant@npm:^2.2.2": version: 2.2.4 resolution: "invariant@npm:2.2.4" dependencies: loose-envify: ^1.0.0 checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 languageName: node linkType: hard "ip-address@npm:^9.0.5": version: 9.0.5 resolution: "ip-address@npm:9.0.5" dependencies: jsbn: 1.1.0 sprintf-js: ^1.1.3 checksum: aa15f12cfd0ef5e38349744e3654bae649a34c3b10c77a674a167e99925d1549486c5b14730eebce9fea26f6db9d5e42097b00aa4f9f612e68c79121c71652dc languageName: node linkType: hard "ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 languageName: node linkType: hard "is-array-buffer@npm:^3.0.4": version: 3.0.4 resolution: "is-array-buffer@npm:3.0.4" dependencies: call-bind: ^1.0.2 get-intrinsic: ^1.2.1 checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 languageName: node linkType: hard "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f languageName: node linkType: hard "is-arrayish@npm:^0.3.1": version: 0.3.2 resolution: "is-arrayish@npm:0.3.2" checksum: 977e64f54d91c8f169b59afcd80ff19227e9f5c791fa28fa2e5bce355cbaf6c2c356711b734656e80c9dd4a854dd7efcf7894402f1031dfc5de5d620775b4d5f languageName: node linkType: hard "is-bigint@npm:^1.0.1": version: 1.0.4 resolution: "is-bigint@npm:1.0.4" dependencies: has-bigints: ^1.0.1 checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 languageName: node linkType: hard "is-binary-path@npm:~2.1.0": version: 2.1.0 resolution: "is-binary-path@npm:2.1.0" dependencies: binary-extensions: ^2.0.0 checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c languageName: node linkType: hard "is-boolean-object@npm:^1.1.0": version: 1.1.2 resolution: "is-boolean-object@npm:1.1.2" dependencies: call-bind: ^1.0.2 has-tostringtag: ^1.0.0 checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 languageName: node linkType: hard "is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard "is-ci@npm:^2.0.0": version: 2.0.0 resolution: "is-ci@npm:2.0.0" dependencies: ci-info: ^2.0.0 bin: is-ci: bin.js checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 languageName: node linkType: hard "is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: hasown: ^2.0.0 checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c languageName: node linkType: hard "is-data-view@npm:^1.0.1": version: 1.0.1 resolution: "is-data-view@npm:1.0.1" dependencies: is-typed-array: ^1.1.13 checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 languageName: node linkType: hard "is-date-object@npm:^1.0.1": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: has-tostringtag: ^1.0.0 checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc languageName: node linkType: hard "is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": version: 2.2.1 resolution: "is-docker@npm:2.2.1" bin: is-docker: cli.js checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 languageName: node linkType: hard "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 languageName: node linkType: hard "is-finite@npm:^1.0.0": version: 1.1.0 resolution: "is-finite@npm:1.1.0" checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7 languageName: node linkType: hard "is-fullwidth-code-point@npm:^3.0.0": version: 3.0.0 resolution: "is-fullwidth-code-point@npm:3.0.0" checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 languageName: node linkType: hard "is-fullwidth-code-point@npm:^4.0.0": version: 4.0.0 resolution: "is-fullwidth-code-point@npm:4.0.0" checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d languageName: node linkType: hard "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: is-extglob: ^2.1.1 checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 languageName: node linkType: hard "is-interactive@npm:^1.0.0": version: 1.0.0 resolution: "is-interactive@npm:1.0.0" checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 languageName: node linkType: hard "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 languageName: node linkType: hard "is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd languageName: node linkType: hard "is-number-object@npm:^1.0.4": version: 1.0.7 resolution: "is-number-object@npm:1.0.7" dependencies: has-tostringtag: ^1.0.0 checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 languageName: node linkType: hard "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a languageName: node linkType: hard "is-obj@npm:^2.0.0": version: 2.0.0 resolution: "is-obj@npm:2.0.0" checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 languageName: node linkType: hard "is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 languageName: node linkType: hard "is-plain-obj@npm:2.1.0, is-plain-obj@npm:^2.0.0, is-plain-obj@npm:^2.1.0": version: 2.1.0 resolution: "is-plain-obj@npm:2.1.0" checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa languageName: node linkType: hard "is-plain-obj@npm:^1.0.0, is-plain-obj@npm:^1.1.0": version: 1.1.0 resolution: "is-plain-obj@npm:1.1.0" checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 languageName: node linkType: hard "is-plain-obj@npm:^4.1.0": version: 4.1.0 resolution: "is-plain-obj@npm:4.1.0" checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce languageName: node linkType: hard "is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" dependencies: isobject: ^3.0.1 checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca languageName: node linkType: hard "is-plain-object@npm:^5.0.0": version: 5.0.0 resolution: "is-plain-object@npm:5.0.0" checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c languageName: node linkType: hard "is-promise@npm:^2.1.0": version: 2.2.2 resolution: "is-promise@npm:2.2.2" checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78 languageName: node linkType: hard "is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" dependencies: call-bind: ^1.0.2 has-tostringtag: ^1.0.0 checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 languageName: node linkType: hard "is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: call-bind: ^1.0.7 checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 languageName: node linkType: hard "is-ssh@npm:^1.4.0": version: 1.4.0 resolution: "is-ssh@npm:1.4.0" dependencies: protocols: ^2.0.1 checksum: 75eaa17b538bee24b661fbeb0f140226ac77e904a6039f787bea418431e2162f1f9c4c4ccad3bd169e036cd701cc631406e8c505d9fa7e20164e74b47f86f40f languageName: node linkType: hard "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 languageName: node linkType: hard "is-string@npm:^1.0.5, is-string@npm:^1.0.7": version: 1.0.7 resolution: "is-string@npm:1.0.7" dependencies: has-tostringtag: ^1.0.0 checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 languageName: node linkType: hard "is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": version: 1.0.4 resolution: "is-symbol@npm:1.0.4" dependencies: has-symbols: ^1.0.2 checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 languageName: node linkType: hard "is-text-path@npm:^1.0.1": version: 1.0.1 resolution: "is-text-path@npm:1.0.1" dependencies: text-extensions: ^1.0.0 checksum: fb5d78752c22b3f73a7c9540768f765ffcfa38c9e421e2b9af869565307fa1ae5e3d3a2ba016a43549742856846566d327da406e94a5846ec838a288b1704fd2 languageName: node linkType: hard "is-typed-array@npm:^1.1.13": version: 1.1.13 resolution: "is-typed-array@npm:1.1.13" dependencies: which-typed-array: ^1.1.14 checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 languageName: node linkType: hard "is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 languageName: node linkType: hard "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 languageName: node linkType: hard "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" dependencies: call-bind: ^1.0.2 checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de languageName: node linkType: hard "is-what@npm:^3.14.1": version: 3.14.1 resolution: "is-what@npm:3.14.1" checksum: a9a6ce92d33799f1ae0916c7afb6f8128a23ce9d28bd69d9ec3ec88910e7a1f68432e6236c3c8a4d544cf0b864675e5d828437efde60ee0cf8102061d395c1df languageName: node linkType: hard "is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" dependencies: is-docker: ^2.0.0 checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 languageName: node linkType: hard "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a languageName: node linkType: hard "isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab languageName: node linkType: hard "isbinaryfile@npm:^4.0.8": version: 4.0.10 resolution: "isbinaryfile@npm:4.0.10" checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686 languageName: node linkType: hard "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 languageName: node linkType: hard "isexe@npm:^3.1.1": version: 3.1.1 resolution: "isexe@npm:3.1.1" checksum: 7fe1931ee4e88eb5aa524cd3ceb8c882537bc3a81b02e438b240e47012eef49c86904d0f0e593ea7c3a9996d18d0f1f3be8d3eaa92333977b0c3a9d353d5563e languageName: node linkType: hard "isnumeric@npm:^0.2.0": version: 0.2.0 resolution: "isnumeric@npm:0.2.0" checksum: bc9eb9c1377347926123e67568dc32b11950093856228cf9a29d1985aaae3775c82c437254de20a77a540f66281a4cb1337da73954eb1a6f5a0ee7d1eb6d3f64 languageName: node linkType: hard "isobject@npm:^3.0.1": version: 3.0.1 resolution: "isobject@npm:3.0.1" checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 languageName: node linkType: hard "isomorphic.js@npm:^0.2.4": version: 0.2.5 resolution: "isomorphic.js@npm:0.2.5" checksum: d8d1b083f05f3c337a06628b982ac3ce6db953bbef14a9de8ad49131250c3592f864b73c12030fdc9ef138ce97b76ef55c7d96a849561ac215b1b4b9d301c8e9 languageName: node linkType: hard "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" checksum: 1eb2fe63a729f7bdd8a559ab552c69055f4f48eb5c2f03724430587c6f450783c8f1cd936c1c952d0a927925180fcc892ebd5b174236cf1065d4bd5bdb37e963 languageName: node linkType: hard "istanbul-instrumenter-loader@npm:^3.0.1": version: 3.0.1 resolution: "istanbul-instrumenter-loader@npm:3.0.1" dependencies: convert-source-map: ^1.5.0 istanbul-lib-instrument: ^1.7.3 loader-utils: ^1.1.0 schema-utils: ^0.3.0 peerDependencies: webpack: ^2.0.0 || ^3.0.0 || ^4.0.0 checksum: 6b2eb9987f79dd451c43e0fcc6fa77bf0f7ac91f3237b7833a07ad6f35e15a6bff579e943edfc2dee203408b6c3a2b4b11f3028b8628cb7304df3decc7552831 languageName: node linkType: hard "istanbul-lib-coverage@npm:^1.2.1": version: 1.2.1 resolution: "istanbul-lib-coverage@npm:1.2.1" checksum: 72bfeaa9212f5a6abb243cbce4933712599ba9a6fbdee819f4f5a4cf87ed15cb92772fcab219e93c3712c578774d6d8e54084440423356b3da5d9f8ecaba9888 languageName: node linkType: hard "istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.2 resolution: "istanbul-lib-coverage@npm:3.2.2" checksum: 2367407a8d13982d8f7a859a35e7f8dd5d8f75aae4bb5484ede3a9ea1b426dc245aff28b976a2af48ee759fdd9be374ce2bd2669b644f31e76c5f46a2e29a831 languageName: node linkType: hard "istanbul-lib-instrument@npm:^1.7.3": version: 1.10.2 resolution: "istanbul-lib-instrument@npm:1.10.2" dependencies: babel-generator: ^6.18.0 babel-template: ^6.16.0 babel-traverse: ^6.18.0 babel-types: ^6.18.0 babylon: ^6.18.0 istanbul-lib-coverage: ^1.2.1 semver: ^5.3.0 checksum: c299d73820b0ac93d1c53f436181da09579083dc4a0febadbda93f598f9a5591fe4888c3071a913eede36148d6481fdf163fa0b6ec7156fffe2a95cff965fc51 languageName: node linkType: hard "istanbul-lib-instrument@npm:^5.1.0": version: 5.2.1 resolution: "istanbul-lib-instrument@npm:5.2.1" dependencies: "@babel/core": ^7.12.3 "@babel/parser": ^7.14.7 "@istanbuljs/schema": ^0.1.2 istanbul-lib-coverage: ^3.2.0 semver: ^6.3.0 checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 languageName: node linkType: hard "istanbul-lib-report@npm:^3.0.0": version: 3.0.1 resolution: "istanbul-lib-report@npm:3.0.1" dependencies: istanbul-lib-coverage: ^3.0.0 make-dir: ^4.0.0 supports-color: ^7.1.0 checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 languageName: node linkType: hard "istanbul-lib-source-maps@npm:^4.0.1": version: 4.0.1 resolution: "istanbul-lib-source-maps@npm:4.0.1" dependencies: debug: ^4.1.1 istanbul-lib-coverage: ^3.0.0 source-map: ^0.6.1 checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 languageName: node linkType: hard "istanbul-reports@npm:^3.0.5": version: 3.1.7 resolution: "istanbul-reports@npm:3.1.7" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 checksum: 2072db6e07bfbb4d0eb30e2700250636182398c1af811aea5032acb219d2080f7586923c09fa194029efd6b92361afb3dcbe1ebcc3ee6651d13340f7c6c4ed95 languageName: node linkType: hard "jackspeak@npm:^3.1.2": version: 3.1.2 resolution: "jackspeak@npm:3.1.2" dependencies: "@isaacs/cliui": ^8.0.2 "@pkgjs/parseargs": ^0.11.0 dependenciesMeta: "@pkgjs/parseargs": optional: true checksum: 134276d5f785c518930701a0dcba1f3b0e9ce3e5b1c3e300898e2ae0bbd9b5195088b77252bf2110768de072c426e9e39f47e13912b0b002da4a3f4ff6e16eac languageName: node linkType: hard "jake@npm:^10.8.5": version: 10.9.1 resolution: "jake@npm:10.9.1" dependencies: async: ^3.2.3 chalk: ^4.0.2 filelist: ^1.0.4 minimatch: ^3.1.2 bin: jake: bin/cli.js checksum: 49659c156b8ad921af377fb782505ae3cc7e7dd8793695b782070d99b4b66d2688b4e3efb32e09252400bfe6e49a7fb393a3a0959e8e1a51dbda95bcacbb9c36 languageName: node linkType: hard "jest-worker@npm:^27.4.5": version: 27.5.1 resolution: "jest-worker@npm:27.5.1" dependencies: "@types/node": "*" merge-stream: ^2.0.0 supports-color: ^8.0.0 checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 languageName: node linkType: hard "jquery-ui@npm:^1.12.1": version: 1.13.3 resolution: "jquery-ui@npm:1.13.3" dependencies: jquery: ">=1.8.0 <4.0.0" checksum: e0df58215db4acc4ae160f637cb18d9abc4d8315b3187308f8ad8d1ef101c71ae6bcc4103a3b8e8767b347bd42f453706a13993af183c8d0c1d4b99e2c820245 languageName: node linkType: hard "jquery@npm:>=1.8.0 <4.0.0, jquery@npm:^3.1.1": version: 3.7.1 resolution: "jquery@npm:3.7.1" checksum: 4370b8139d6ae82867eb6f7f21d1edccf1d1bdf41c0840920ea80d366c2cd5dbe1ceebb110ee9772aa839b04400faa1572c5c560b507c688ed7b61cea26c0e27 languageName: node linkType: hard "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 languageName: node linkType: hard "js-tokens@npm:^3.0.2": version: 3.0.2 resolution: "js-tokens@npm:3.0.2" checksum: ff24cf90e6e4ac446eba56e604781c1aaf3bdaf9b13a00596a0ebd972fa3b25dc83c0f0f67289c33252abb4111e0d14e952a5d9ffb61f5c22532d555ebd8d8a9 languageName: node linkType: hard "js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" dependencies: argparse: ^2.0.1 bin: js-yaml: bin/js-yaml.js checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a languageName: node linkType: hard "js-yaml@npm:^3.10.0": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: argparse: ^1.0.7 esprima: ^4.0.0 bin: js-yaml: bin/js-yaml.js checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c languageName: node linkType: hard "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" checksum: 944f924f2bd67ad533b3850eee47603eed0f6ae425fd1ee8c760f477e8c34a05f144c1bd4f5a5dd1963141dc79a2c55f89ccc5ab77d039e7077f3ad196b64965 languageName: node linkType: hard "jsbn@npm:~0.1.0": version: 0.1.1 resolution: "jsbn@npm:0.1.1" checksum: e5ff29c1b8d965017ef3f9c219dacd6e40ad355c664e277d31246c90545a02e6047018c16c60a00f36d561b3647215c41894f5d869ada6908a2e0ce4200c88f2 languageName: node linkType: hard "jsesc@npm:^1.3.0": version: 1.3.0 resolution: "jsesc@npm:1.3.0" bin: jsesc: bin/jsesc checksum: 9384cc72bf8ef7f2eb75fea64176b8b0c1c5e77604854c72cb4670b7072e112e3baaa69ef134be98cb078834a7812b0bfe676ad441ccd749a59427f5ed2127f1 languageName: node linkType: hard "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" bin: jsesc: bin/jsesc checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d languageName: node linkType: hard "json-buffer@npm:3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 languageName: node linkType: hard "json-parse-better-errors@npm:^1.0.1": version: 1.0.2 resolution: "json-parse-better-errors@npm:1.0.2" checksum: ff2b5ba2a70e88fd97a3cb28c1840144c5ce8fae9cbeeddba15afa333a5c407cf0e42300cd0a2885dbb055227fe68d405070faad941beeffbfde9cf3b2c78c5d languageName: node linkType: hard "json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f languageName: node linkType: hard "json-schema-compare@npm:^0.2.2": version: 0.2.2 resolution: "json-schema-compare@npm:0.2.2" dependencies: lodash: ^4.17.4 checksum: dd6f2173857c8e3b77d6ebdfa05bd505bba5b08709ab46b532722f5d1c33b5fee1fc8f3c97d0c0d011db25f9f3b0baf7ab783bb5f55c32abd9f1201760e43c2c languageName: node linkType: hard "json-schema-merge-allof@npm:^0.8.1": version: 0.8.1 resolution: "json-schema-merge-allof@npm:0.8.1" dependencies: compute-lcm: ^1.1.2 json-schema-compare: ^0.2.2 lodash: ^4.17.20 checksum: 82700f6ac77351959138d6b153d77375a8c29cf48d907241b85c8292dd77aabd8cb816400f2b0d17062c4ccc8893832ec4f664ab9c814927ef502e7a595ea873 languageName: node linkType: hard "json-schema-traverse@npm:^0.3.0": version: 0.3.1 resolution: "json-schema-traverse@npm:0.3.1" checksum: a685c36222023471c25c86cddcff506306ecb8f8941922fd356008419889c41c38e1c16d661d5499d0a561b34f417693e9bb9212ba2b2b2f8f8a345a49e4ec1a languageName: node linkType: hard "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b languageName: node linkType: hard "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" checksum: 02f2f466cdb0362558b2f1fd5e15cce82ef55d60cd7f8fa828cf35ba74330f8d767fcae5c5c2adb7851fa811766c694b9405810879bc4e1ddd78a7c0e03658ad languageName: node linkType: hard "json-schema@npm:0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 languageName: node linkType: hard "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 languageName: node linkType: hard "json-stringify-nice@npm:^1.1.4": version: 1.1.4 resolution: "json-stringify-nice@npm:1.1.4" checksum: 6ddf781148b46857ab04e97f47be05f14c4304b86eb5478369edbeacd070c21c697269964b982fc977e8989d4c59091103b1d9dc291aba40096d6cbb9a392b72 languageName: node linkType: hard "json-stringify-safe@npm:^5.0.1, json-stringify-safe@npm:~5.0.1": version: 5.0.1 resolution: "json-stringify-safe@npm:5.0.1" checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee languageName: node linkType: hard "json5@npm:^1.0.1": version: 1.0.2 resolution: "json5@npm:1.0.2" dependencies: minimist: ^1.2.0 bin: json5: lib/cli.js checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 languageName: node linkType: hard "json5@npm:^2.1.1, json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: json5: lib/cli.js checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 languageName: node linkType: hard "jsonc-parser@npm:3.2.0": version: 3.2.0 resolution: "jsonc-parser@npm:3.2.0" checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 languageName: node linkType: hard "jsonc-parser@npm:^3.2.0": version: 3.2.1 resolution: "jsonc-parser@npm:3.2.1" checksum: 656d9027b91de98d8ab91b3aa0d0a4cab7dc798a6830845ca664f3e76c82d46b973675bbe9b500fae1de37fd3e81aceacbaa2a57884bf2f8f29192150d2d1ef7 languageName: node linkType: hard "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" dependencies: graceful-fs: ^4.1.6 dependenciesMeta: graceful-fs: optional: true checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e languageName: node linkType: hard "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" dependencies: graceful-fs: ^4.1.6 universalify: ^2.0.0 dependenciesMeta: graceful-fs: optional: true checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354 languageName: node linkType: hard "jsonparse@npm:^1.2.0, jsonparse@npm:^1.3.1": version: 1.3.1 resolution: "jsonparse@npm:1.3.1" checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d languageName: node linkType: hard "jsonpointer@npm:^5.0.1": version: 5.0.1 resolution: "jsonpointer@npm:5.0.1" checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c languageName: node linkType: hard "jsonwebtoken@npm:9.0.2": version: 9.0.2 resolution: "jsonwebtoken@npm:9.0.2" dependencies: jws: ^3.2.2 lodash.includes: ^4.3.0 lodash.isboolean: ^3.0.3 lodash.isinteger: ^4.0.4 lodash.isnumber: ^3.0.3 lodash.isplainobject: ^4.0.6 lodash.isstring: ^4.0.1 lodash.once: ^4.0.0 ms: ^2.1.1 semver: ^7.5.4 checksum: fc739a6a8b33f1974f9772dca7f8493ca8df4cc31c5a09dcfdb7cff77447dcf22f4236fb2774ef3fe50df0abeb8e1c6f4c41eba82f500a804ab101e2fbc9d61a languageName: node linkType: hard "jsprim@npm:^2.0.2": version: 2.0.2 resolution: "jsprim@npm:2.0.2" dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 checksum: d175f6b1991e160cb0aa39bc857da780e035611986b5492f32395411879fdaf4e513d98677f08f7352dac93a16b66b8361c674b86a3fa406e2e7af6b26321838 languageName: node linkType: hard "just-diff-apply@npm:^5.2.0": version: 5.5.0 resolution: "just-diff-apply@npm:5.5.0" checksum: ed6bbd59781542ccb786bd843038e4591e8390aa788075beb69d358051f68fbeb122bda050b7f42515d51fb64b907d5c7bea694a0543b87b24ce406cfb5f5bfa languageName: node linkType: hard "just-diff@npm:^5.0.1": version: 5.2.0 resolution: "just-diff@npm:5.2.0" checksum: 5527fb6d28a446185250fba501ad857370c049bac7aa5a34c9ec82a45e1380af1a96137be7df2f87252d9f75ef67be41d4c0267d481ed0235b2ceb3ee1f5f75d languageName: node linkType: hard "just-extend@npm:^6.2.0": version: 6.2.0 resolution: "just-extend@npm:6.2.0" checksum: 022024d6f687c807963b97a24728a378799f7e4af7357d1c1f90dedb402943d5c12be99a5136654bed8362c37a358b1793feaad3366896f239a44e17c5032d86 languageName: node linkType: hard "jwa@npm:^1.4.1": version: 1.4.1 resolution: "jwa@npm:1.4.1" dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: ^5.0.1 checksum: ff30ea7c2dcc61f3ed2098d868bf89d43701605090c5b21b5544b512843ec6fd9e028381a4dda466cbcdb885c2d1150f7c62e7168394ee07941b4098e1035e2f languageName: node linkType: hard "jws@npm:^3.2.2": version: 3.2.2 resolution: "jws@npm:3.2.2" dependencies: jwa: ^1.4.1 safe-buffer: ^5.0.1 checksum: f0213fe5b79344c56cd443428d8f65c16bf842dc8cb8f5aed693e1e91d79c20741663ad6eff07a6d2c433d1831acc9814e8d7bada6a0471fbb91d09ceb2bf5c2 languageName: node linkType: hard "karma-chai@npm:^0.1.0": version: 0.1.0 resolution: "karma-chai@npm:0.1.0" peerDependencies: chai: "*" karma: ">=0.10.9" checksum: 7fae0b4acea35121218c5284e49c7a0e4ad5806abca50ee1451e314e63b4e7b72aaccda90a78d0099cc3a02eb07ebea92cc8877b74cfd62db52fe7bb0907a287 languageName: node linkType: hard "karma-chrome-launcher@npm:^3.1.0": version: 3.2.0 resolution: "karma-chrome-launcher@npm:3.2.0" dependencies: which: ^1.2.1 checksum: e1119e4f95dbcdaec937e5d15a9ffea1b7e5c1d7566f7074ff140161983d4a0821ad274d3dcc34aacfb792caf842a39c459ba9c263723faa6a060cca8692d9b7 languageName: node linkType: hard "karma-coverage@npm:^2.0.3": version: 2.2.1 resolution: "karma-coverage@npm:2.2.1" dependencies: istanbul-lib-coverage: ^3.2.0 istanbul-lib-instrument: ^5.1.0 istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.1 istanbul-reports: ^3.0.5 minimatch: ^3.0.4 checksum: 72ba4363507a0fee7e5b67d9293f54d64d33f25ad20d39c63a14098a7f67890fbada67433743bedf71e0ccbf6a074013867410e542f7438149a9576eb36ee1f8 languageName: node linkType: hard "karma-firefox-launcher@npm:^2.1.1": version: 2.1.3 resolution: "karma-firefox-launcher@npm:2.1.3" dependencies: is-wsl: ^2.2.0 which: ^3.0.0 checksum: 35a82b1e5c013cbc83aed0d58d2d4e2d71d4246ff89ced5c9474ebceaef299f7daff0bf86c052f4cfb6497d76e0fde7f23db2735e6766e8df831030d8babb4db languageName: node linkType: hard "karma-ie-launcher@npm:^1.0.0": version: 1.0.0 resolution: "karma-ie-launcher@npm:1.0.0" dependencies: lodash: ^4.6.1 peerDependencies: karma: ">=0.9" checksum: e1b337c497926951edfad38b8f188e64555a5bba4d4a2947a14dba7ba7f335f87d53205bbc623bc6635223dd172d593ddc69a16c2fa6d115303673d177d1dd36 languageName: node linkType: hard "karma-mocha-reporter@npm:^2.2.5": version: 2.2.5 resolution: "karma-mocha-reporter@npm:2.2.5" dependencies: chalk: ^2.1.0 log-symbols: ^2.1.0 strip-ansi: ^4.0.0 peerDependencies: karma: ">=0.13" checksum: 8b9e43c64bc975d38c18958d7ba95baf9a8d23f11ee4641955fe0ae5e8bd563596c8965d6f290ce8c73c4832fb98bb7ed5fbbaa82b49273d2ca24aa7f3d0d5e5 languageName: node linkType: hard "karma-mocha@npm:^2.0.1": version: 2.0.1 resolution: "karma-mocha@npm:2.0.1" dependencies: minimist: ^1.2.3 checksum: a09f4758758a899fb97836660624ccd1769325e05f6efca63c9132806cc8dfeb20eaf78b3bc4db7921dcb3c48384fbfd5cddfa3568ddaf00197c75852ec9b480 languageName: node linkType: hard "karma-webpack@npm:^5.0.0": version: 5.0.1 resolution: "karma-webpack@npm:5.0.1" dependencies: glob: ^7.1.3 minimatch: ^9.0.3 webpack-merge: ^4.1.5 peerDependencies: webpack: ^5.0.0 checksum: c0faa2cc151ee81a1fb0057c84c3c4a367735ffbba8bd5561c1a539c0880bbc47cf04358ca70f366ca22aaf13fe00fcd4bba4dbbcaa06f4396e1a5f0ca122d10 languageName: node linkType: hard "karma@npm:^6.3.3": version: 6.4.3 resolution: "karma@npm:6.4.3" dependencies: "@colors/colors": 1.5.0 body-parser: ^1.19.0 braces: ^3.0.2 chokidar: ^3.5.1 connect: ^3.7.0 di: ^0.0.1 dom-serialize: ^2.2.1 glob: ^7.1.7 graceful-fs: ^4.2.6 http-proxy: ^1.18.1 isbinaryfile: ^4.0.8 lodash: ^4.17.21 log4js: ^6.4.1 mime: ^2.5.2 minimatch: ^3.0.4 mkdirp: ^0.5.5 qjobs: ^1.2.0 range-parser: ^1.2.1 rimraf: ^3.0.2 socket.io: ^4.7.2 source-map: ^0.6.1 tmp: ^0.2.1 ua-parser-js: ^0.7.30 yargs: ^16.1.1 bin: karma: bin/karma checksum: 4eee6f52c7cf54d860bb35600b61eac3631647efa01282671c9f799dbe4ea80ac729946c8c82e53be778905b5920d221b527c86bd9bec73214ca2f84339aebbe languageName: node linkType: hard "keyv@npm:^4.0.0, keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" dependencies: json-buffer: 3.0.1 checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 languageName: node linkType: hard "kind-of@npm:^6.0.2, kind-of@npm:^6.0.3": version: 6.0.3 resolution: "kind-of@npm:6.0.3" checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b languageName: node linkType: hard "kleur@npm:4.1.5": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 languageName: node linkType: hard "klona@npm:^2.0.5": version: 2.0.6 resolution: "klona@npm:2.0.6" checksum: ac9ee3732e42b96feb67faae4d27cf49494e8a3bf3fa7115ce242fe04786788e0aff4741a07a45a2462e2079aa983d73d38519c85d65b70ef11447bbc3c58ce7 languageName: node linkType: hard "lerna@npm:^5.4.3": version: 5.6.2 resolution: "lerna@npm:5.6.2" dependencies: "@lerna/add": 5.6.2 "@lerna/bootstrap": 5.6.2 "@lerna/changed": 5.6.2 "@lerna/clean": 5.6.2 "@lerna/cli": 5.6.2 "@lerna/command": 5.6.2 "@lerna/create": 5.6.2 "@lerna/diff": 5.6.2 "@lerna/exec": 5.6.2 "@lerna/import": 5.6.2 "@lerna/info": 5.6.2 "@lerna/init": 5.6.2 "@lerna/link": 5.6.2 "@lerna/list": 5.6.2 "@lerna/publish": 5.6.2 "@lerna/run": 5.6.2 "@lerna/version": 5.6.2 "@nrwl/devkit": ">=14.8.1 < 16" import-local: ^3.0.2 inquirer: ^8.2.4 npmlog: ^6.0.2 nx: ">=14.8.1 < 16" typescript: ^3 || ^4 bin: lerna: cli.js checksum: 5e06ac9f1e47e414231aa9d9e6a74f6ea7eef62e0110941b1ac1a73635cfaaae3802047e16c33c9682f5932e72653b959b2895cc49da334afbae51ff718baca3 languageName: node linkType: hard "less@npm:^4.1.2": version: 4.2.0 resolution: "less@npm:4.2.0" dependencies: copy-anything: ^2.0.1 errno: ^0.1.1 graceful-fs: ^4.1.2 image-size: ~0.5.0 make-dir: ^2.1.0 mime: ^1.4.1 needle: ^3.1.0 parse-node-version: ^1.0.1 source-map: ~0.6.0 tslib: ^2.3.0 dependenciesMeta: errno: optional: true graceful-fs: optional: true image-size: optional: true make-dir: optional: true mime: optional: true needle: optional: true source-map: optional: true bin: lessc: bin/lessc checksum: 2ec4fa41e35e5c0331c1ee64419aa5c2cbb9a17b9e9d1deb524ec45843f59d9c4612dffc164ca16126911fbe9913e4ff811a13f33805f71e546f6d022ece93b6 languageName: node linkType: hard "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" dependencies: prelude-ls: ^1.2.1 type-check: ~0.4.0 checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 languageName: node linkType: hard "lib0@npm:^0.2.85, lib0@npm:^0.2.86": version: 0.2.94 resolution: "lib0@npm:0.2.94" dependencies: isomorphic.js: ^0.2.4 bin: 0ecdsa-generate-keypair: bin/0ecdsa-generate-keypair.js 0gentesthtml: bin/gentesthtml.js 0serve: bin/0serve.js checksum: b091c7b39875a58d92ae6dcb014a42b56caf1336e03d310403c47a2fcea079eba92ffb43da90eaff9d010f08bcd20de35fffed7c655c83312ff4e3477f5dc261 languageName: node linkType: hard "libnpmaccess@npm:^6.0.3": version: 6.0.4 resolution: "libnpmaccess@npm:6.0.4" dependencies: aproba: ^2.0.0 minipass: ^3.1.1 npm-package-arg: ^9.0.1 npm-registry-fetch: ^13.0.0 checksum: 86130b435c67a03254489c3b3684d435260b609164f76bcc69adbee78652c36a64551228b2c5ddc2b16851e9e367ee0ba173a641406768397716faa006042322 languageName: node linkType: hard "libnpmpublish@npm:^6.0.4": version: 6.0.5 resolution: "libnpmpublish@npm:6.0.5" dependencies: normalize-package-data: ^4.0.0 npm-package-arg: ^9.0.1 npm-registry-fetch: ^13.0.0 semver: ^7.3.7 ssri: ^9.0.0 checksum: d2f2434517038438be44db2e90e1c8c524df05f7c3b1458617177c2f9ca008dde8a72a4f739b34aee4df0352f71c9289788da86aa38a4709e05c6db33eed570a languageName: node linkType: hard "license-webpack-plugin@npm:^2.3.14": version: 2.3.21 resolution: "license-webpack-plugin@npm:2.3.21" dependencies: "@types/webpack-sources": ^0.1.5 webpack-sources: ^1.2.0 peerDependenciesMeta: webpack: optional: true checksum: 6208bd2060d200fbffbcc89702c929d50c5a4a3f2158b046cf813b3f7f728bbbe4611b9fea2d67843bb5e7d64ad9122cc368a19ac73f5c4ad41765e6283bdc0c languageName: node linkType: hard "lilconfig@npm:2.0.5": version: 2.0.5 resolution: "lilconfig@npm:2.0.5" checksum: f7bb9e42656f06930ad04e583026f087508ae408d3526b8b54895e934eb2a966b7aafae569656f2c79a29fe6d779b3ec44ba577e80814734c8655d6f71cdf2d1 languageName: node linkType: hard "lilconfig@npm:^2.0.5": version: 2.1.0 resolution: "lilconfig@npm:2.1.0" checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 languageName: node linkType: hard "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 languageName: node linkType: hard "lines-and-columns@npm:~2.0.3": version: 2.0.4 resolution: "lines-and-columns@npm:2.0.4" checksum: f5e3e207467d3e722280c962b786dc20ebceb191821dcd771d14ab3146b6744cae28cf305ee4638805bec524ac54800e15698c853fcc53243821f88df37e4975 languageName: node linkType: hard "lint-staged@npm:^12.1.3": version: 12.5.0 resolution: "lint-staged@npm:12.5.0" dependencies: cli-truncate: ^3.1.0 colorette: ^2.0.16 commander: ^9.3.0 debug: ^4.3.4 execa: ^5.1.1 lilconfig: 2.0.5 listr2: ^4.0.5 micromatch: ^4.0.5 normalize-path: ^3.0.0 object-inspect: ^1.12.2 pidtree: ^0.5.0 string-argv: ^0.3.1 supports-color: ^9.2.2 yaml: ^1.10.2 bin: lint-staged: bin/lint-staged.js checksum: ac203917be098305bc0aebd5f1a969e88ea0854e8fb2199ebcbbb059d8bce324cf97db8f3d25f7954dd48c0666ae13987fb4db569d5b6fecda06f9fb742278e1 languageName: node linkType: hard "listr2@npm:^4.0.5": version: 4.0.5 resolution: "listr2@npm:4.0.5" dependencies: cli-truncate: ^2.1.0 colorette: ^2.0.16 log-update: ^4.0.0 p-map: ^4.0.0 rfdc: ^1.3.0 rxjs: ^7.5.5 through: ^2.3.8 wrap-ansi: ^7.0.0 peerDependencies: enquirer: ">= 2.3.0 < 3" peerDependenciesMeta: enquirer: optional: true checksum: 7af31851abe25969ef0581c6db808117e36af15b131401795182427769d9824f451ba9e8aff6ccd25b6a4f6c8796f816292caf08e5f1f9b1775e8e9c313dc6c5 languageName: node linkType: hard "load-json-file@npm:^4.0.0": version: 4.0.0 resolution: "load-json-file@npm:4.0.0" dependencies: graceful-fs: ^4.1.2 parse-json: ^4.0.0 pify: ^3.0.0 strip-bom: ^3.0.0 checksum: 8f5d6d93ba64a9620445ee9bde4d98b1eac32cf6c8c2d20d44abfa41a6945e7969456ab5f1ca2fb06ee32e206c9769a20eec7002fe290de462e8c884b6b8b356 languageName: node linkType: hard "load-json-file@npm:^6.2.0": version: 6.2.0 resolution: "load-json-file@npm:6.2.0" dependencies: graceful-fs: ^4.1.15 parse-json: ^5.0.0 strip-bom: ^4.0.0 type-fest: ^0.6.0 checksum: 4429e430ebb99375fc7cd936348e4f7ba729486080ced4272091c1e386a7f5f738ea3337d8ffd4b01c2f5bc3ddde92f2c780045b66838fe98bdb79f901884643 languageName: node linkType: hard "loader-runner@npm:^4.2.0": version: 4.3.0 resolution: "loader-runner@npm:4.3.0" checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 languageName: node linkType: hard "loader-utils@npm:^1.1.0": version: 1.4.2 resolution: "loader-utils@npm:1.4.2" dependencies: big.js: ^5.2.2 emojis-list: ^3.0.0 json5: ^1.0.1 checksum: eb6fb622efc0ffd1abdf68a2022f9eac62bef8ec599cf8adb75e94d1d338381780be6278534170e99edc03380a6d29bc7eb1563c89ce17c5fed3a0b17f1ad804 languageName: node linkType: hard "loader-utils@npm:^2.0.0": version: 2.0.4 resolution: "loader-utils@npm:2.0.4" dependencies: big.js: ^5.2.2 emojis-list: ^3.0.0 json5: ^2.1.2 checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 languageName: node linkType: hard "locate-path@npm:^2.0.0": version: 2.0.0 resolution: "locate-path@npm:2.0.0" dependencies: p-locate: ^2.0.0 path-exists: ^3.0.0 checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755 languageName: node linkType: hard "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" dependencies: p-locate: ^4.1.0 checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 languageName: node linkType: hard "locate-path@npm:^6.0.0": version: 6.0.0 resolution: "locate-path@npm:6.0.0" dependencies: p-locate: ^5.0.0 checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a languageName: node linkType: hard "lockfile@npm:1.0.4": version: 1.0.4 resolution: "lockfile@npm:1.0.4" dependencies: signal-exit: ^3.0.2 checksum: 8de35aace8acbe883cbca3cc3959e88904d57c79dccd4afffc64aea8f9cf7b4c63598d08b8add66fbf381f8fb3ce4fd4c518cd231c797c266b6c790eb7b33abc languageName: node linkType: hard "lodash-es@npm:^4.17.21": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 languageName: node linkType: hard "lodash._reinterpolate@npm:^3.0.0": version: 3.0.0 resolution: "lodash._reinterpolate@npm:3.0.0" checksum: 06d2d5f33169604fa5e9f27b6067ed9fb85d51a84202a656901e5ffb63b426781a601508466f039c720af111b0c685d12f1a5c14ff8df5d5f27e491e562784b2 languageName: node linkType: hard "lodash.escape@npm:^4.0.1": version: 4.0.1 resolution: "lodash.escape@npm:4.0.1" checksum: fcb54f457497256964d619d5cccbd80a961916fca60df3fe0fa3e7f052715c2944c0ed5aefb4f9e047d127d44aa2d55555f3350cb42c6549e9e293fb30b41e7f languageName: node linkType: hard "lodash.get@npm:^4.4.2": version: 4.4.2 resolution: "lodash.get@npm:4.4.2" checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545 languageName: node linkType: hard "lodash.includes@npm:^4.3.0": version: 4.3.0 resolution: "lodash.includes@npm:4.3.0" checksum: 71092c130515a67ab3bd928f57f6018434797c94def7f46aafa417771e455ce3a4834889f4267b17887d7f75297dfabd96231bf704fd2b8c5096dc4a913568b6 languageName: node linkType: hard "lodash.isboolean@npm:^3.0.3": version: 3.0.3 resolution: "lodash.isboolean@npm:3.0.3" checksum: b70068b4a8b8837912b54052557b21fc4774174e3512ed3c5b94621e5aff5eb6c68089d0a386b7e801d679cd105d2e35417978a5e99071750aa2ed90bffd0250 languageName: node linkType: hard "lodash.isinteger@npm:^4.0.4": version: 4.0.4 resolution: "lodash.isinteger@npm:4.0.4" checksum: 6034821b3fc61a2ffc34e7d5644bb50c5fd8f1c0121c554c21ac271911ee0c0502274852845005f8651d51e199ee2e0cfebfe40aaa49c7fe617f603a8a0b1691 languageName: node linkType: hard "lodash.ismatch@npm:^4.4.0": version: 4.4.0 resolution: "lodash.ismatch@npm:4.4.0" checksum: a393917578842705c7fc1a30fb80613d1ac42d20b67eb26a2a6004d6d61ee90b419f9eb320508ddcd608e328d91eeaa2651411727eaa9a12534ed6ccb02fc705 languageName: node linkType: hard "lodash.isnumber@npm:^3.0.3": version: 3.0.3 resolution: "lodash.isnumber@npm:3.0.3" checksum: 913784275b565346255e6ae6a6e30b760a0da70abc29f3e1f409081585875105138cda4a429ff02577e1bc0a7ae2a90e0a3079a37f3a04c3d6c5aaa532f4cab2 languageName: node linkType: hard "lodash.isplainobject@npm:^4.0.6": version: 4.0.6 resolution: "lodash.isplainobject@npm:4.0.6" checksum: 29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337 languageName: node linkType: hard "lodash.isstring@npm:^4.0.1": version: 4.0.1 resolution: "lodash.isstring@npm:4.0.1" checksum: eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0 languageName: node linkType: hard "lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 languageName: node linkType: hard "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 languageName: node linkType: hard "lodash.mergewith@npm:^4.6.1": version: 4.6.2 resolution: "lodash.mergewith@npm:4.6.2" checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 languageName: node linkType: hard "lodash.once@npm:^4.0.0": version: 4.1.1 resolution: "lodash.once@npm:4.1.1" checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245 languageName: node linkType: hard "lodash.template@npm:^4.2.4": version: 4.5.0 resolution: "lodash.template@npm:4.5.0" dependencies: lodash._reinterpolate: ^3.0.0 lodash.templatesettings: ^4.0.0 checksum: ca64e5f07b6646c9d3dbc0fe3aaa995cb227c4918abd1cef7a9024cd9c924f2fa389a0ec4296aa6634667e029bc81d4bbdb8efbfde11df76d66085e6c529b450 languageName: node linkType: hard "lodash.templatesettings@npm:^4.0.0": version: 4.2.0 resolution: "lodash.templatesettings@npm:4.2.0" dependencies: lodash._reinterpolate: ^3.0.0 checksum: 863e025478b092997e11a04e9d9e735875eeff1ffcd6c61742aa8272e3c2cddc89ce795eb9726c4e74cef5991f722897ff37df7738a125895f23fc7d12a7bb59 languageName: node linkType: hard "lodash.uniq@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniq@npm:4.5.0" checksum: a4779b57a8d0f3c441af13d9afe7ecff22dd1b8ce1129849f71d9bbc8e8ee4e46dfb4b7c28f7ad3d67481edd6e51126e4e2a6ee276e25906d10f7140187c392d languageName: node linkType: hard "lodash@npm:4, lodash@npm:4.17.21, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.6.1, lodash@npm:^4.7.0": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard "log-symbols@npm:4.1.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: chalk: ^4.1.0 is-unicode-supported: ^0.1.0 checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 languageName: node linkType: hard "log-symbols@npm:^2.1.0": version: 2.2.0 resolution: "log-symbols@npm:2.2.0" dependencies: chalk: ^2.0.1 checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8 languageName: node linkType: hard "log-update@npm:^4.0.0": version: 4.0.0 resolution: "log-update@npm:4.0.0" dependencies: ansi-escapes: ^4.3.0 cli-cursor: ^3.1.0 slice-ansi: ^4.0.0 wrap-ansi: ^6.2.0 checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2 languageName: node linkType: hard "log4js@npm:^6.4.1": version: 6.9.1 resolution: "log4js@npm:6.9.1" dependencies: date-format: ^4.0.14 debug: ^4.3.4 flatted: ^3.2.7 rfdc: ^1.3.0 streamroller: ^3.1.5 checksum: 59d98c37d4163138dab5d9b06ae26965d1353106fece143973d57b1003b3a482791aa21374fd2cca81a953b8837b2f9756ac225404e60cbfa4dd3ab59f082e2e languageName: node linkType: hard "loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: js-tokens: ^3.0.0 || ^4.0.0 bin: loose-envify: cli.js checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 languageName: node linkType: hard "loupe@npm:^2.3.6": version: 2.3.7 resolution: "loupe@npm:2.3.7" dependencies: get-func-name: ^2.0.1 checksum: 96c058ec7167598e238bb7fb9def2f9339215e97d6685d9c1e3e4bdb33d14600e11fe7a812cf0c003dfb73ca2df374f146280b2287cae9e8d989e9d7a69a203b languageName: node linkType: hard "lowdb@npm:1.0.0": version: 1.0.0 resolution: "lowdb@npm:1.0.0" dependencies: graceful-fs: ^4.1.3 is-promise: ^2.1.0 lodash: 4 pify: ^3.0.0 steno: ^0.4.1 checksum: 7ae89e3d6e00963129f72c4d4e1fe8e4cda5c08a46b4f4e525109483147e799df90c07d95aeced1c270cc10f4a24c6660fe1601cc4b3a6e2c3f922ad64517eab languageName: node linkType: hard "lowercase-keys@npm:^2.0.0": version: 2.0.0 resolution: "lowercase-keys@npm:2.0.0" checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 languageName: node linkType: hard "lru-cache@npm:7.18.3, lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 languageName: node linkType: hard "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.2.2 resolution: "lru-cache@npm:10.2.2" checksum: 98e8fc93691c546f719a76103ef2bee5a3ac823955c755a47641ec41f8c7fafa1baeaba466937cc1cbfa9cfd47e03536d10e2db3158a64ad91ff3a58a32c893e languageName: node linkType: hard "lru-cache@npm:^5.1.1": version: 5.1.1 resolution: "lru-cache@npm:5.1.1" dependencies: yallist: ^3.0.2 checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb languageName: node linkType: hard "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" dependencies: yallist: ^4.0.0 checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 languageName: node linkType: hard "lunr@npm:^2.3.9": version: 2.3.9 resolution: "lunr@npm:2.3.9" checksum: 176719e24fcce7d3cf1baccce9dd5633cd8bdc1f41ebe6a180112e5ee99d80373fe2454f5d4624d437e5a8319698ca6837b9950566e15d2cae5f2a543a3db4b8 languageName: node linkType: hard "make-dir@npm:^2.1.0": version: 2.1.0 resolution: "make-dir@npm:2.1.0" dependencies: pify: ^4.0.1 semver: ^5.6.0 checksum: 043548886bfaf1820323c6a2997e6d2fa51ccc2586ac14e6f14634f7458b4db2daf15f8c310e2a0abd3e0cddc64df1890d8fc7263033602c47bb12cbfcf86aab languageName: node linkType: hard "make-dir@npm:^3.0.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: semver: ^6.0.0 checksum: 484200020ab5a1fdf12f393fe5f385fc8e4378824c940fba1729dcd198ae4ff24867bc7a5646331e50cead8abff5d9270c456314386e629acec6dff4b8016b78 languageName: node linkType: hard "make-dir@npm:^4.0.0": version: 4.0.0 resolution: "make-dir@npm:4.0.0" dependencies: semver: ^7.5.3 checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a languageName: node linkType: hard "make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" dependencies: agentkeepalive: ^4.2.1 cacache: ^16.1.0 http-cache-semantics: ^4.1.0 http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 is-lambda: ^1.0.1 lru-cache: ^7.7.1 minipass: ^3.1.6 minipass-collect: ^1.0.2 minipass-fetch: ^2.0.3 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 negotiator: ^0.6.3 promise-retry: ^2.0.1 socks-proxy-agent: ^7.0.0 ssri: ^9.0.0 checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c languageName: node linkType: hard "make-fetch-happen@npm:^13.0.0": version: 13.0.1 resolution: "make-fetch-happen@npm:13.0.1" dependencies: "@npmcli/agent": ^2.0.0 cacache: ^18.0.0 http-cache-semantics: ^4.1.1 is-lambda: ^1.0.1 minipass: ^7.0.2 minipass-fetch: ^3.0.0 minipass-flush: ^1.0.5 minipass-pipeline: ^1.2.4 negotiator: ^0.6.3 proc-log: ^4.2.0 promise-retry: ^2.0.1 ssri: ^10.0.0 checksum: 5c9fad695579b79488fa100da05777213dd9365222f85e4757630f8dd2a21a79ddd3206c78cfd6f9b37346819681782b67900ac847a57cf04190f52dda5343fd languageName: node linkType: hard "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed languageName: node linkType: hard "map-obj@npm:^4.0.0": version: 4.3.0 resolution: "map-obj@npm:4.3.0" checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e languageName: node linkType: hard "markdown-to-jsx@npm:^7.4.1": version: 7.4.7 resolution: "markdown-to-jsx@npm:7.4.7" peerDependencies: react: ">= 0.14.0" checksum: bb8a696c8a95dd67ac1eb44255f31cf17e60b6c2ff03bfcd51b5e28da17856c57d7a16da59fda7f3a4eedb01d7e92eeef57a10ff3abd5431e5c80059d4565016 languageName: node linkType: hard "marked@npm:^4.2.12": version: 4.3.0 resolution: "marked@npm:4.3.0" bin: marked: bin/marked.js checksum: 0db6817893952c3ec710eb9ceafb8468bf5ae38cb0f92b7b083baa13d70b19774674be04db5b817681fa7c5c6a088f61300815e4dd75a59696f4716ad69f6260 languageName: node linkType: hard "math-expression-evaluator@npm:^1.2.14": version: 1.4.0 resolution: "math-expression-evaluator@npm:1.4.0" checksum: 451c7b734ccb02759980e03f10c63fb3888b6af0253582ae38e8ca7ef037e15b9b2b82ef3476e79ed257694e8eacc9156b44379d3153de8e6c071a4664f70f93 languageName: node linkType: hard "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1 languageName: node linkType: hard "memorystream@npm:^0.3.1": version: 0.3.1 resolution: "memorystream@npm:0.3.1" checksum: f18b42440d24d09516d01466c06adf797df7873f0d40aa7db02e5fb9ed83074e5e65412d0720901d7069363465f82dc4f8bcb44f0cde271567a61426ce6ca2e9 languageName: node linkType: hard "meow@npm:^8.0.0": version: 8.1.2 resolution: "meow@npm:8.1.2" dependencies: "@types/minimist": ^1.2.0 camelcase-keys: ^6.2.2 decamelize-keys: ^1.1.0 hard-rejection: ^2.1.0 minimist-options: 4.1.0 normalize-package-data: ^3.0.0 read-pkg-up: ^7.0.1 redent: ^3.0.0 trim-newlines: ^3.0.0 type-fest: ^0.18.0 yargs-parser: ^20.2.3 checksum: bc23bf1b4423ef6a821dff9734406bce4b91ea257e7f10a8b7f896f45b59649f07adc0926e2917eacd8cf1df9e4cd89c77623cf63dfd0f8bf54de07a32ee5a85 languageName: node linkType: hard "merge-descriptors@npm:1.0.1": version: 1.0.1 resolution: "merge-descriptors@npm:1.0.1" checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26 languageName: node linkType: hard "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 languageName: node linkType: hard "merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 languageName: node linkType: hard "methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a languageName: node linkType: hard "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.7 resolution: "micromatch@npm:4.0.7" dependencies: braces: ^3.0.3 picomatch: ^2.3.1 checksum: 3cde047d70ad80cf60c787b77198d680db3b8c25b23feb01de5e2652205d9c19f43bd81882f69a0fd1f0cde6a7a122d774998aad3271ddb1b8accf8a0f480cf7 languageName: node linkType: hard "mime-db@npm:1.52.0, mime-db@npm:>= 1.43.0 < 2": version: 1.52.0 resolution: "mime-db@npm:1.52.0" checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f languageName: node linkType: hard "mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: mime-db: 1.52.0 checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 languageName: node linkType: hard "mime@npm:1.6.0, mime@npm:^1.4.1, mime@npm:^1.6.0": version: 1.6.0 resolution: "mime@npm:1.6.0" bin: mime: cli.js checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557 languageName: node linkType: hard "mime@npm:2.6.0, mime@npm:^2.5.2": version: 2.6.0 resolution: "mime@npm:2.6.0" bin: mime: cli.js checksum: 1497ba7b9f6960694268a557eae24b743fd2923da46ec392b042469f4b901721ba0adcf8b0d3c2677839d0e243b209d76e5edcbd09cfdeffa2dfb6bb4df4b862 languageName: node linkType: hard "mime@npm:3.0.0": version: 3.0.0 resolution: "mime@npm:3.0.0" bin: mime: cli.js checksum: f43f9b7bfa64534e6b05bd6062961681aeb406a5b53673b53b683f27fcc4e739989941836a355eef831f4478923651ecc739f4a5f6e20a76487b432bfd4db928 languageName: node linkType: hard "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a languageName: node linkType: hard "mimic-response@npm:^1.0.0": version: 1.0.1 resolution: "mimic-response@npm:1.0.1" checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 languageName: node linkType: hard "mimic-response@npm:^3.1.0": version: 3.1.0 resolution: "mimic-response@npm:3.1.0" checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 languageName: node linkType: hard "min-indent@npm:^1.0.0": version: 1.0.1 resolution: "min-indent@npm:1.0.1" checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 languageName: node linkType: hard "mini-css-extract-plugin@npm:^2.7.0": version: 2.9.0 resolution: "mini-css-extract-plugin@npm:2.9.0" dependencies: schema-utils: ^4.0.0 tapable: ^2.2.1 peerDependencies: webpack: ^5.0.0 checksum: ae192c67ba85ac8bffeab66774635bf90181f00d5dd6cf95412426192599ddf5506fb4b1550acbd7a5476476e39db53c770dd40f8378f7baf5de96e3fec4e6e9 languageName: node linkType: hard "mini-svg-data-uri@npm:^1.4.4": version: 1.4.4 resolution: "mini-svg-data-uri@npm:1.4.4" bin: mini-svg-data-uri: cli.js checksum: 997f1fbd8d59a70f03761e18626d335197a3479cb9d1ff75678e4b64b864d32a0b8fc18115eabde035e5299b8b4a354a78e57dd6ac10f9d604162a6170898d09 languageName: node linkType: hard "minimatch@npm:2 || 3, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: brace-expansion: ^1.1.7 checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a languageName: node linkType: hard "minimatch@npm:3.0.5": version: 3.0.5 resolution: "minimatch@npm:3.0.5" dependencies: brace-expansion: ^1.1.7 checksum: a3b84b426eafca947741b864502cee02860c4e7b145de11ad98775cfcf3066fef422583bc0ffce0952ddf4750c1ccf4220b1556430d4ce10139f66247d87d69e languageName: node linkType: hard "minimatch@npm:4.2.1": version: 4.2.1 resolution: "minimatch@npm:4.2.1" dependencies: brace-expansion: ^1.1.7 checksum: 2b1514e3d0f29a549912f0db7ae7b82c5cab4a8f2dd0369f1c6451a325b3f12b2cf473c95873b6157bb8df183d6cf6db82ff03614b6adaaf1d7e055beccdfd01 languageName: node linkType: hard "minimatch@npm:7.4.6, minimatch@npm:^7.1.3": version: 7.4.6 resolution: "minimatch@npm:7.4.6" dependencies: brace-expansion: ^2.0.1 checksum: 1a6c8d22618df9d2a88aabeef1de5622eb7b558e9f8010be791cb6b0fa6e102d39b11c28d75b855a1e377b12edc7db8ff12a99c20353441caa6a05e78deb5da9 languageName: node linkType: hard "minimatch@npm:^5.0.1": version: 5.1.6 resolution: "minimatch@npm:5.1.6" dependencies: brace-expansion: ^2.0.1 checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 languageName: node linkType: hard "minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.4 resolution: "minimatch@npm:9.0.4" dependencies: brace-expansion: ^2.0.1 checksum: cf717f597ec3eed7dabc33153482a2e8d49f4fd3c26e58fd9c71a94c5029a0838728841b93f46bf1263b65a8010e2ee800d0dc9b004ab8ba8b6d1ec07cc115b5 languageName: node linkType: hard "minimatch@npm:~3.0.4": version: 3.0.8 resolution: "minimatch@npm:3.0.8" dependencies: brace-expansion: ^1.1.7 checksum: 850cca179cad715133132693e6963b0db64ab0988c4d211415b087fc23a3e46321e2c5376a01bf5623d8782aba8bdf43c571e2e902e51fdce7175c7215c29f8b languageName: node linkType: hard "minimist-options@npm:4.1.0": version: 4.1.0 resolution: "minimist-options@npm:4.1.0" dependencies: arrify: ^1.0.1 is-plain-obj: ^1.1.0 kind-of: ^6.0.3 checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e languageName: node linkType: hard "minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.0": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 languageName: node linkType: hard "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" dependencies: minipass: ^3.0.0 checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 languageName: node linkType: hard "minipass-collect@npm:^2.0.1": version: 2.0.1 resolution: "minipass-collect@npm:2.0.1" dependencies: minipass: ^7.0.3 checksum: b251bceea62090f67a6cced7a446a36f4cd61ee2d5cea9aee7fff79ba8030e416327a1c5aa2908dc22629d06214b46d88fdab8c51ac76bacbf5703851b5ad342 languageName: node linkType: hard "minipass-fetch@npm:^2.0.3": version: 2.1.2 resolution: "minipass-fetch@npm:2.1.2" dependencies: encoding: ^0.1.13 minipass: ^3.1.6 minipass-sized: ^1.0.3 minizlib: ^2.1.2 dependenciesMeta: encoding: optional: true checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 languageName: node linkType: hard "minipass-fetch@npm:^3.0.0": version: 3.0.5 resolution: "minipass-fetch@npm:3.0.5" dependencies: encoding: ^0.1.13 minipass: ^7.0.3 minipass-sized: ^1.0.3 minizlib: ^2.1.2 dependenciesMeta: encoding: optional: true checksum: 8047d273236157aab27ab7cd8eab7ea79e6ecd63e8f80c3366ec076cb9a0fed550a6935bab51764369027c414647fd8256c2a20c5445fb250c483de43350de83 languageName: node linkType: hard "minipass-flush@npm:^1.0.5": version: 1.0.5 resolution: "minipass-flush@npm:1.0.5" dependencies: minipass: ^3.0.0 checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf languageName: node linkType: hard "minipass-json-stream@npm:^1.0.1": version: 1.0.1 resolution: "minipass-json-stream@npm:1.0.1" dependencies: jsonparse: ^1.3.1 minipass: ^3.0.0 checksum: 791b696a27d1074c4c08dab1bf5a9f3201145c2933e428f45d880467bce12c60de4703203d2928de4b162d0ae77b0bb4b55f96cb846645800aa0eb4919b3e796 languageName: node linkType: hard "minipass-pipeline@npm:^1.2.4": version: 1.2.4 resolution: "minipass-pipeline@npm:1.2.4" dependencies: minipass: ^3.0.0 checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b languageName: node linkType: hard "minipass-sized@npm:^1.0.3": version: 1.0.3 resolution: "minipass-sized@npm:1.0.3" dependencies: minipass: ^3.0.0 checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 languageName: node linkType: hard "minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": version: 3.3.6 resolution: "minipass@npm:3.3.6" dependencies: yallist: ^4.0.0 checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 languageName: node linkType: hard "minipass@npm:^5.0.0": version: 5.0.0 resolution: "minipass@npm:5.0.0" checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea languageName: node linkType: hard "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4": version: 7.1.1 resolution: "minipass@npm:7.1.1" checksum: d2c461947a7530f93de4162aa3ca0a1bed1f121626906f6ec63a5ba05fd7b1d9bee4fe89a37a43db7241c2416be98a799c1796abae583c7180be37be5c392ef6 languageName: node linkType: hard "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" dependencies: minipass: ^3.0.0 yallist: ^4.0.0 checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 languageName: node linkType: hard "mkdirp-infer-owner@npm:^2.0.0": version: 2.0.0 resolution: "mkdirp-infer-owner@npm:2.0.0" dependencies: chownr: ^2.0.0 infer-owner: ^1.0.4 mkdirp: ^1.0.3 checksum: d8f4ecd32f6762459d6b5714eae6487c67ae9734ab14e26d14377ddd9b2a1bf868d8baa18c0f3e73d3d513f53ec7a698e0f81a9367102c870a55bef7833880f7 languageName: node linkType: hard "mkdirp@npm:1.0.4, mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: mkdirp: bin/cmd.js checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f languageName: node linkType: hard "mkdirp@npm:^0.5.5, mkdirp@npm:^0.5.6, mkdirp@npm:~0.5.1": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: minimist: ^1.2.6 bin: mkdirp: bin/cmd.js checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 languageName: node linkType: hard "mocha@npm:^9.0.0": version: 9.2.2 resolution: "mocha@npm:9.2.2" dependencies: "@ungap/promise-all-settled": 1.1.2 ansi-colors: 4.1.1 browser-stdout: 1.3.1 chokidar: 3.5.3 debug: 4.3.3 diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 glob: 7.2.0 growl: 1.10.5 he: 1.2.0 js-yaml: 4.1.0 log-symbols: 4.1.0 minimatch: 4.2.1 ms: 2.1.3 nanoid: 3.3.1 serialize-javascript: 6.0.0 strip-json-comments: 3.1.1 supports-color: 8.1.1 which: 2.0.2 workerpool: 6.2.0 yargs: 16.2.0 yargs-parser: 20.2.4 yargs-unparser: 2.0.0 bin: _mocha: bin/_mocha mocha: bin/mocha checksum: 4d5ca4ce33fc66627e63acdf09a634e2358c9a00f61de7788b1091b6aad430da04f97f9ecb82d56dc034b623cb833b65576136fd010d77679c03fcea5bc1e12d languageName: node linkType: hard "modify-values@npm:^1.0.0": version: 1.0.1 resolution: "modify-values@npm:1.0.1" checksum: 8296610c608bc97b03c2cf889c6cdf4517e32fa2d836440096374c2209f6b7b3e256c209493a0b32584b9cb32d528e99d0dd19dcd9a14d2d915a312d391cc7e9 languageName: node linkType: hard "moment@npm:^2.24.0": version: 2.30.1 resolution: "moment@npm:2.30.1" checksum: 859236bab1e88c3e5802afcf797fc801acdbd0ee509d34ea3df6eea21eb6bcc2abd4ae4e4e64aa7c986aa6cba563c6e62806218e6412a765010712e5fa121ba6 languageName: node linkType: hard "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4 languageName: node linkType: hard "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f languageName: node linkType: hard "ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d languageName: node linkType: hard "multimatch@npm:^5.0.0": version: 5.0.0 resolution: "multimatch@npm:5.0.0" dependencies: "@types/minimatch": ^3.0.3 array-differ: ^3.0.0 array-union: ^2.1.0 arrify: ^2.0.1 minimatch: ^3.0.4 checksum: 82c8030a53af965cab48da22f1b0f894ef99e16ee680dabdfbd38d2dfacc3c8208c475203d747afd9e26db44118ed0221d5a0d65268c864f06d6efc7ac6df812 languageName: node linkType: hard "mute-stream@npm:0.0.8, mute-stream@npm:~0.0.4": version: 0.0.8 resolution: "mute-stream@npm:0.0.8" checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 languageName: node linkType: hard "mute-stream@npm:1.0.0": version: 1.0.0 resolution: "mute-stream@npm:1.0.0" checksum: 36fc968b0e9c9c63029d4f9dc63911950a3bdf55c9a87f58d3a266289b67180201cade911e7699f8b2fa596b34c9db43dad37649e3f7fdd13c3bb9edb0017ee7 languageName: node linkType: hard "mv@npm:2.1.1": version: 2.1.1 resolution: "mv@npm:2.1.1" dependencies: mkdirp: ~0.5.1 ncp: ~2.0.0 rimraf: ~2.4.0 checksum: 59d4b5ebff6c265b452d6630ae8873d573c82e36fdc1ed9c34c7901a0bf2d3d357022f49db8e9bded127b743f709c7ef7befec249a2b3967578d649a8029aa06 languageName: node linkType: hard "nanoclone@npm:^0.2.1": version: 0.2.1 resolution: "nanoclone@npm:0.2.1" checksum: 96b2954e22f70561f41e20d69856266c65583c2a441dae108f1dc71b716785d2c8038dac5f1d5e92b117aed3825f526b53139e2e5d6e6db8a77cfa35b3b8bf40 languageName: node linkType: hard "nanoid@npm:3.3.1": version: 3.3.1 resolution: "nanoid@npm:3.3.1" bin: nanoid: bin/nanoid.cjs checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 languageName: node linkType: hard "nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" bin: nanoid: bin/nanoid.cjs checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2 languageName: node linkType: hard "natural-compare-lite@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare-lite@npm:1.4.0" checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 languageName: node linkType: hard "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d languageName: node linkType: hard "ncp@npm:~2.0.0": version: 2.0.0 resolution: "ncp@npm:2.0.0" bin: ncp: ./bin/ncp checksum: ea9b19221da1d1c5529bdb9f8e85c9d191d156bcaae408cce5e415b7fbfd8744c288e792bd7faf1fe3b70fd44c74e22f0d43c39b209bc7ac1fb8016f70793a16 languageName: node linkType: hard "needle@npm:^3.1.0": version: 3.3.1 resolution: "needle@npm:3.3.1" dependencies: iconv-lite: ^0.6.3 sax: ^1.2.4 bin: needle: bin/needle checksum: ed4864d7ee85f1037ac803154868bf7151fa59399c1e55e5d93ca26a9d16e1c8ccbe9552d846ce7e2519b4bce1de3e81a501f0dc33244e02902e27cf5a9bc11d languageName: node linkType: hard "negotiator@npm:0.6.3, negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 languageName: node linkType: hard "neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 languageName: node linkType: hard "nice-try@npm:^1.0.4": version: 1.0.5 resolution: "nice-try@npm:1.0.5" checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff languageName: node linkType: hard "nise@npm:^5.1.0": version: 5.1.9 resolution: "nise@npm:5.1.9" dependencies: "@sinonjs/commons": ^3.0.0 "@sinonjs/fake-timers": ^11.2.2 "@sinonjs/text-encoding": ^0.7.2 just-extend: ^6.2.0 path-to-regexp: ^6.2.1 checksum: ab9fd6eabc98170f18aef6c9567983145c1dc62c7aef46eda0fea754083316c1f0f9b2c32e9b4bfdd25122276d670293596ed672b54dd1ffa8eb58b56a30ea95 languageName: node linkType: hard "node-addon-api@npm:^3.2.1": version: 3.2.1 resolution: "node-addon-api@npm:3.2.1" dependencies: node-gyp: latest checksum: 2369986bb0881ccd9ef6bacdf39550e07e089a9c8ede1cbc5fc7712d8e2faa4d50da0e487e333d4125f8c7a616c730131d1091676c9d499af1d74560756b4a18 languageName: node linkType: hard "node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.7": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: whatwg-url: ^5.0.0 peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: encoding: optional: true checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 languageName: node linkType: hard "node-fetch@npm:cjs": version: 2.6.7 resolution: "node-fetch@npm:2.6.7" dependencies: whatwg-url: ^5.0.0 peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: encoding: optional: true checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b languageName: node linkType: hard "node-gyp-build@npm:^4.3.0": version: 4.8.1 resolution: "node-gyp-build@npm:4.8.1" bin: node-gyp-build: bin.js node-gyp-build-optional: optional.js node-gyp-build-test: build-test.js checksum: fe6e95da6f4608c1a98655f6bf2fe4e8dd9c877cd13256056a8acaf585cc7f98718823fe9366be11b78c2f332d5a184b00cf07a4af96c9d8fea45f640c019f98 languageName: node linkType: hard "node-gyp@npm:^9.0.0": version: 9.4.1 resolution: "node-gyp@npm:9.4.1" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 glob: ^7.1.4 graceful-fs: ^4.2.6 make-fetch-happen: ^10.0.3 nopt: ^6.0.0 npmlog: ^6.0.0 rimraf: ^3.0.2 semver: ^7.3.5 tar: ^6.1.2 which: ^2.0.2 bin: node-gyp: bin/node-gyp.js checksum: 8576c439e9e925ab50679f87b7dfa7aa6739e42822e2ad4e26c36341c0ba7163fdf5a946f0a67a476d2f24662bc40d6c97bd9e79ced4321506738e6b760a1577 languageName: node linkType: hard "node-gyp@npm:latest": version: 10.1.0 resolution: "node-gyp@npm:10.1.0" dependencies: env-paths: ^2.2.0 exponential-backoff: ^3.1.1 glob: ^10.3.10 graceful-fs: ^4.2.6 make-fetch-happen: ^13.0.0 nopt: ^7.0.0 proc-log: ^3.0.0 semver: ^7.3.5 tar: ^6.1.2 which: ^4.0.0 bin: node-gyp: bin/node-gyp.js checksum: 72e2ab4b23fc32007a763da94018f58069fc0694bf36115d49a2b195c8831e12cf5dd1e7a3718fa85c06969aedf8fc126722d3b672ec1cb27e06ed33caee3c60 languageName: node linkType: hard "node-releases@npm:^2.0.14": version: 2.0.14 resolution: "node-releases@npm:2.0.14" checksum: 59443a2f77acac854c42d321bf1b43dea0aef55cd544c6a686e9816a697300458d4e82239e2d794ea05f7bbbc8a94500332e2d3ac3f11f52e4b16cbe638b3c41 languageName: node linkType: hard "nopt@npm:^5.0.0": version: 5.0.0 resolution: "nopt@npm:5.0.0" dependencies: abbrev: 1 bin: nopt: bin/nopt.js checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f languageName: node linkType: hard "nopt@npm:^6.0.0": version: 6.0.0 resolution: "nopt@npm:6.0.0" dependencies: abbrev: ^1.0.0 bin: nopt: bin/nopt.js checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac languageName: node linkType: hard "nopt@npm:^7.0.0": version: 7.2.1 resolution: "nopt@npm:7.2.1" dependencies: abbrev: ^2.0.0 bin: nopt: bin/nopt.js checksum: 6fa729cc77ce4162cfad8abbc9ba31d4a0ff6850c3af61d59b505653bef4781ec059f8890ecfe93ee8aa0c511093369cca88bfc998101616a2904e715bbbb7c9 languageName: node linkType: hard "normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" dependencies: hosted-git-info: ^2.1.4 resolve: ^1.10.0 semver: 2 || 3 || 4 || 5 validate-npm-package-license: ^3.0.1 checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 languageName: node linkType: hard "normalize-package-data@npm:^3.0.0": version: 3.0.3 resolution: "normalize-package-data@npm:3.0.3" dependencies: hosted-git-info: ^4.0.1 is-core-module: ^2.5.0 semver: ^7.3.4 validate-npm-package-license: ^3.0.1 checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a languageName: node linkType: hard "normalize-package-data@npm:^4.0.0": version: 4.0.1 resolution: "normalize-package-data@npm:4.0.1" dependencies: hosted-git-info: ^5.0.0 is-core-module: ^2.8.1 semver: ^7.3.5 validate-npm-package-license: ^3.0.4 checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 languageName: node linkType: hard "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 languageName: node linkType: hard "normalize-range@npm:^0.1.2": version: 0.1.2 resolution: "normalize-range@npm:0.1.2" checksum: 9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 languageName: node linkType: hard "normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 languageName: node linkType: hard "nouislider@npm:15.4.0": version: 15.4.0 resolution: "nouislider@npm:15.4.0" checksum: 4b7ffe7ca7eb75b27ffc100949db8594468eba5d8ac82e04fd4ab5a4c1b643b6c94ba7a97afcea2a11ec08ed93a59d1ed771550faf4ef1c7a8cdecd962f89f61 languageName: node linkType: hard "npm-bundled@npm:^1.1.1": version: 1.1.2 resolution: "npm-bundled@npm:1.1.2" dependencies: npm-normalize-package-bin: ^1.0.1 checksum: 6e599155ef28d0b498622f47f1ba189dfbae05095a1ed17cb3a5babf961e965dd5eab621f0ec6f0a98de774e5836b8f5a5ee639010d64f42850a74acec3d4d09 languageName: node linkType: hard "npm-bundled@npm:^2.0.0": version: 2.0.1 resolution: "npm-bundled@npm:2.0.1" dependencies: npm-normalize-package-bin: ^2.0.0 checksum: 7747293985c48c5268871efe691545b03731cb80029692000cbdb0b3344b9617be5187aa36281cabbe6b938e3651b4e87236d1c31f9e645eef391a1a779413e6 languageName: node linkType: hard "npm-install-checks@npm:^5.0.0": version: 5.0.0 resolution: "npm-install-checks@npm:5.0.0" dependencies: semver: ^7.1.1 checksum: 0e7d1aae52b1fe9d3a0fd4a008850c7047931722dd49ee908afd13fd0297ac5ddb10964d9c59afcdaaa2ca04b51d75af2788f668c729ae71fec0e4cdac590ffc languageName: node linkType: hard "npm-normalize-package-bin@npm:^1.0.1": version: 1.0.1 resolution: "npm-normalize-package-bin@npm:1.0.1" checksum: ae7f15155a1e3ace2653f12ddd1ee8eaa3c84452fdfbf2f1943e1de264e4b079c86645e2c55931a51a0a498cba31f70022a5219d5665fbcb221e99e58bc70122 languageName: node linkType: hard "npm-normalize-package-bin@npm:^2.0.0": version: 2.0.0 resolution: "npm-normalize-package-bin@npm:2.0.0" checksum: 7c5379f9b188b564c4332c97bdd9a5d6b7b15f02b5823b00989d6a0e6fb31eb0280f02b0a924f930e1fcaf00e60fae333aec8923d2a4c7747613c7d629d8aa25 languageName: node linkType: hard "npm-package-arg@npm:8.1.1": version: 8.1.1 resolution: "npm-package-arg@npm:8.1.1" dependencies: hosted-git-info: ^3.0.6 semver: ^7.0.0 validate-npm-package-name: ^3.0.0 checksum: 406c59f92d8fac5acbd1df62f4af8075e925af51131b6bc66245641ea71ddb0e60b3e2c56fafebd4e8ffc3ba0453e700a221a36a44740dc9f7488cec97ae4c55 languageName: node linkType: hard "npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": version: 9.1.2 resolution: "npm-package-arg@npm:9.1.2" dependencies: hosted-git-info: ^5.0.0 proc-log: ^2.0.1 semver: ^7.3.5 validate-npm-package-name: ^4.0.0 checksum: 3793488843985ed71deb14fcba7c068d8ed03a18fd8f6b235c6a64465c9a25f60261598106d5cc8677c0bee9548e405c34c2e3c7a822e3113d3389351c745dfa languageName: node linkType: hard "npm-packlist@npm:^5.1.0, npm-packlist@npm:^5.1.1": version: 5.1.3 resolution: "npm-packlist@npm:5.1.3" dependencies: glob: ^8.0.1 ignore-walk: ^5.0.1 npm-bundled: ^2.0.0 npm-normalize-package-bin: ^2.0.0 bin: npm-packlist: bin/index.js checksum: 94cc9c66740e8f80243301de85eb0a2cec5bbd570c3f26b6ad7af1a3eca155f7e810580dc7ea4448f12a8fd82f6db307e7132a5fe69e157eb45b325acadeb22a languageName: node linkType: hard "npm-pick-manifest@npm:^7.0.0": version: 7.0.2 resolution: "npm-pick-manifest@npm:7.0.2" dependencies: npm-install-checks: ^5.0.0 npm-normalize-package-bin: ^2.0.0 npm-package-arg: ^9.0.0 semver: ^7.3.5 checksum: a93ec449c12219a2be8556837db9ac5332914f304a69469bb6f1f47717adc6e262aa318f79166f763512688abd9c4e4b6a2d83b2dd19753a7abe5f0360f2c8bc languageName: node linkType: hard "npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1, npm-registry-fetch@npm:^13.3.0": version: 13.3.1 resolution: "npm-registry-fetch@npm:13.3.1" dependencies: make-fetch-happen: ^10.0.6 minipass: ^3.1.6 minipass-fetch: ^2.0.3 minipass-json-stream: ^1.0.1 minizlib: ^2.1.2 npm-package-arg: ^9.0.1 proc-log: ^2.0.0 checksum: 5a941c2c799568e0dbccfc15f280444da398dadf2eede1b1921f08ddd5cb5f32c7cb4d16be96401f95a33073aeec13a3fd928c753790d3c412c2e64e7f7c6ee4 languageName: node linkType: hard "npm-run-all@npm:^4.1.5": version: 4.1.5 resolution: "npm-run-all@npm:4.1.5" dependencies: ansi-styles: ^3.2.1 chalk: ^2.4.1 cross-spawn: ^6.0.5 memorystream: ^0.3.1 minimatch: ^3.0.4 pidtree: ^0.3.0 read-pkg: ^3.0.0 shell-quote: ^1.6.1 string.prototype.padend: ^3.0.0 bin: npm-run-all: bin/npm-run-all/index.js run-p: bin/run-p/index.js run-s: bin/run-s/index.js checksum: 373b72c6a36564da13c1642c1fd9bb4dcc756bce7a3648f883772f02661095319820834ff813762d2fee403e9b40c1cd27c8685807c107440f10eb19c006d4a0 languageName: node linkType: hard "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" dependencies: path-key: ^3.0.0 checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 languageName: node linkType: hard "npmlog@npm:^6.0.0, npmlog@npm:^6.0.2": version: 6.0.2 resolution: "npmlog@npm:6.0.2" dependencies: are-we-there-yet: ^3.0.0 console-control-strings: ^1.1.0 gauge: ^4.0.3 set-blocking: ^2.0.0 checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a languageName: node linkType: hard "num2fraction@npm:^1.2.2": version: 1.2.2 resolution: "num2fraction@npm:1.2.2" checksum: 1da9c6797b505d3f5b17c7f694c4fa31565bdd5c0e5d669553253aed848a580804cd285280e8a73148bd9628839267daee4967f24b53d4e893e44b563e412635 languageName: node linkType: hard "nx@npm:15.9.7, nx@npm:>=14.8.1 < 16, nx@npm:^15": version: 15.9.7 resolution: "nx@npm:15.9.7" dependencies: "@nrwl/cli": 15.9.7 "@nrwl/nx-darwin-arm64": 15.9.7 "@nrwl/nx-darwin-x64": 15.9.7 "@nrwl/nx-linux-arm-gnueabihf": 15.9.7 "@nrwl/nx-linux-arm64-gnu": 15.9.7 "@nrwl/nx-linux-arm64-musl": 15.9.7 "@nrwl/nx-linux-x64-gnu": 15.9.7 "@nrwl/nx-linux-x64-musl": 15.9.7 "@nrwl/nx-win32-arm64-msvc": 15.9.7 "@nrwl/nx-win32-x64-msvc": 15.9.7 "@nrwl/tao": 15.9.7 "@parcel/watcher": 2.0.4 "@yarnpkg/lockfile": ^1.1.0 "@yarnpkg/parsers": 3.0.0-rc.46 "@zkochan/js-yaml": 0.0.6 axios: ^1.0.0 chalk: ^4.1.0 cli-cursor: 3.1.0 cli-spinners: 2.6.1 cliui: ^7.0.2 dotenv: ~10.0.0 enquirer: ~2.3.6 fast-glob: 3.2.7 figures: 3.2.0 flat: ^5.0.2 fs-extra: ^11.1.0 glob: 7.1.4 ignore: ^5.0.4 js-yaml: 4.1.0 jsonc-parser: 3.2.0 lines-and-columns: ~2.0.3 minimatch: 3.0.5 npm-run-path: ^4.0.1 open: ^8.4.0 semver: 7.5.4 string-width: ^4.2.3 strong-log-transformer: ^2.1.0 tar-stream: ~2.2.0 tmp: ~0.2.1 tsconfig-paths: ^4.1.2 tslib: ^2.3.0 v8-compile-cache: 2.3.0 yargs: ^17.6.2 yargs-parser: 21.1.1 peerDependencies: "@swc-node/register": ^1.4.2 "@swc/core": ^1.2.173 dependenciesMeta: "@nrwl/nx-darwin-arm64": optional: true "@nrwl/nx-darwin-x64": optional: true "@nrwl/nx-linux-arm-gnueabihf": optional: true "@nrwl/nx-linux-arm64-gnu": optional: true "@nrwl/nx-linux-arm64-musl": optional: true "@nrwl/nx-linux-x64-gnu": optional: true "@nrwl/nx-linux-x64-musl": optional: true "@nrwl/nx-win32-arm64-msvc": optional: true "@nrwl/nx-win32-x64-msvc": optional: true peerDependenciesMeta: "@swc-node/register": optional: true "@swc/core": optional: true bin: nx: bin/nx.js checksum: 6a554be82d6759e669e867e5276374c4be96e3821b9c9377d6c19a10b705b15612b8ce5851bc979e30b1473722ab09459c514527a860cc102f76d6fe782da210 languageName: node linkType: hard "object-assign@npm:^4, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f languageName: node linkType: hard "object-inspect@npm:^1.12.2, object-inspect@npm:^1.13.1": version: 1.13.1 resolution: "object-inspect@npm:1.13.1" checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f languageName: node linkType: hard "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a languageName: node linkType: hard "object.assign@npm:^4.1.5": version: 4.1.5 resolution: "object.assign@npm:4.1.5" dependencies: call-bind: ^1.0.5 define-properties: ^1.2.1 has-symbols: ^1.0.3 object-keys: ^1.1.1 checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 languageName: node linkType: hard "on-exit-leak-free@npm:^0.2.0": version: 0.2.0 resolution: "on-exit-leak-free@npm:0.2.0" checksum: d22b0f0538069110626b578db6e68b6ee0e85b1ee9cc5ef9b4de1bba431431d6a8da91a61e09d2ad46f22a96f968e5237833cb9d0b69bc4d294f7ec82f609b05 languageName: node linkType: hard "on-exit-leak-free@npm:^2.1.0": version: 2.1.2 resolution: "on-exit-leak-free@npm:2.1.2" checksum: 6ce7acdc7b9ceb51cf029b5239cbf41937ee4c8dcd9d4e475e1777b41702564d46caa1150a744e00da0ac6d923ab83471646a39a4470f97481cf6e2d8d253c3f languageName: node linkType: hard "on-finished@npm:2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: ee-first: 1.1.1 checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 languageName: node linkType: hard "on-finished@npm:~2.3.0": version: 2.3.0 resolution: "on-finished@npm:2.3.0" dependencies: ee-first: 1.1.1 checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b languageName: node linkType: hard "on-headers@npm:~1.0.2": version: 1.0.2 resolution: "on-headers@npm:1.0.2" checksum: 2bf13467215d1e540a62a75021e8b318a6cfc5d4fc53af8e8f84ad98dbcea02d506c6d24180cd62e1d769c44721ba542f3154effc1f7579a8288c9f7873ed8e5 languageName: node linkType: hard "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: wrappy: 1 checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 languageName: node linkType: hard "onecolor@npm:^3.0.4": version: 3.1.0 resolution: "onecolor@npm:3.1.0" checksum: 7d2fbe56143eb1666aee6b7381073bc7372050d588be3ccaa2cfff820be6e167d727f8ee7099c5f1e2d0a771a46d917542162907e9d45eb45a85985b6ea92dde languageName: node linkType: hard "onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: mimic-fn: ^2.1.0 checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 languageName: node linkType: hard "open@npm:^8.4.0": version: 8.4.2 resolution: "open@npm:8.4.2" dependencies: define-lazy-prop: ^2.0.0 is-docker: ^2.1.1 is-wsl: ^2.2.0 checksum: 6388bfff21b40cb9bd8f913f9130d107f2ed4724ea81a8fd29798ee322b361ca31fa2cdfb491a5c31e43a3996cfe9566741238c7a741ada8d7af1cb78d85cf26 languageName: node linkType: hard "opener@npm:^1.5.1": version: 1.5.2 resolution: "opener@npm:1.5.2" bin: opener: bin/opener-bin.js checksum: 33b620c0d53d5b883f2abc6687dd1c5fd394d270dbe33a6356f2d71e0a2ec85b100d5bac94694198ccf5c30d592da863b2292c5539009c715a9c80c697b4f6cc languageName: node linkType: hard "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" dependencies: deep-is: ^0.1.3 fast-levenshtein: ^2.0.6 levn: ^0.4.1 prelude-ls: ^1.2.1 type-check: ^0.4.0 word-wrap: ^1.2.5 checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb languageName: node linkType: hard "ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" dependencies: bl: ^4.1.0 chalk: ^4.1.0 cli-cursor: ^3.1.0 cli-spinners: ^2.5.0 is-interactive: ^1.0.0 is-unicode-supported: ^0.1.0 log-symbols: ^4.1.0 strip-ansi: ^6.0.0 wcwidth: ^1.0.1 checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 languageName: node linkType: hard "os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d languageName: node linkType: hard "os@npm:~0.1.1": version: 0.1.2 resolution: "os@npm:0.1.2" checksum: dc2d99759eef13f5dc47ddb12c67b9760a7196fd83a35a7aec2d75b82f91163ca1d4e8872238f8c2a35f4cddd5adf5ce6638a234c0563c748d3cd1d69a9f7153 languageName: node linkType: hard "p-cancelable@npm:^2.0.0": version: 2.1.1 resolution: "p-cancelable@npm:2.1.1" checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf languageName: node linkType: hard "p-finally@npm:^1.0.0": version: 1.0.0 resolution: "p-finally@npm:1.0.0" checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4 languageName: node linkType: hard "p-limit@npm:^1.1.0": version: 1.3.0 resolution: "p-limit@npm:1.3.0" dependencies: p-try: ^1.0.0 checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd languageName: node linkType: hard "p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: p-try: ^2.0.0 checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 languageName: node linkType: hard "p-limit@npm:^3.0.2": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: yocto-queue: ^0.1.0 checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 languageName: node linkType: hard "p-locate@npm:^2.0.0": version: 2.0.0 resolution: "p-locate@npm:2.0.0" dependencies: p-limit: ^1.1.0 checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081 languageName: node linkType: hard "p-locate@npm:^4.1.0": version: 4.1.0 resolution: "p-locate@npm:4.1.0" dependencies: p-limit: ^2.2.0 checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 languageName: node linkType: hard "p-locate@npm:^5.0.0": version: 5.0.0 resolution: "p-locate@npm:5.0.0" dependencies: p-limit: ^3.0.2 checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 languageName: node linkType: hard "p-map-series@npm:^2.1.0": version: 2.1.0 resolution: "p-map-series@npm:2.1.0" checksum: 69d4efbb6951c0dd62591d5a18c3af0af78496eae8b55791e049da239d70011aa3af727dece3fc9943e0bb3fd4fa64d24177cfbecc46efaf193179f0feeac486 languageName: node linkType: hard "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" dependencies: aggregate-error: ^3.0.0 checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c languageName: node linkType: hard "p-pipe@npm:^3.1.0": version: 3.1.0 resolution: "p-pipe@npm:3.1.0" checksum: ee9a2609685f742c6ceb3122281ec4453bbbcc80179b13e66fd139dcf19b1c327cf6c2fdfc815b548d6667e7eaefe5396323f6d49c4f7933e4cef47939e3d65c languageName: node linkType: hard "p-queue@npm:^6.6.2": version: 6.6.2 resolution: "p-queue@npm:6.6.2" dependencies: eventemitter3: ^4.0.4 p-timeout: ^3.2.0 checksum: 832642fcc4ab6477b43e6d7c30209ab10952969ed211c6d6f2931be8a4f9935e3578c72e8cce053dc34f2eb6941a408a2c516a54904e989851a1a209cf19761c languageName: node linkType: hard "p-reduce@npm:^2.0.0, p-reduce@npm:^2.1.0": version: 2.1.0 resolution: "p-reduce@npm:2.1.0" checksum: 99b26d36066a921982f25c575e78355824da0787c486e3dd9fc867460e8bf17d5fb3ce98d006b41bdc81ffc0aa99edf5faee53d11fe282a20291fb721b0cb1c7 languageName: node linkType: hard "p-timeout@npm:^3.2.0": version: 3.2.0 resolution: "p-timeout@npm:3.2.0" dependencies: p-finally: ^1.0.0 checksum: 3dd0eaa048780a6f23e5855df3dd45c7beacff1f820476c1d0d1bcd6648e3298752ba2c877aa1c92f6453c7dd23faaf13d9f5149fc14c0598a142e2c5e8d649c languageName: node linkType: hard "p-try@npm:^1.0.0": version: 1.0.0 resolution: "p-try@npm:1.0.0" checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605 languageName: node linkType: hard "p-try@npm:^2.0.0": version: 2.2.0 resolution: "p-try@npm:2.2.0" checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae languageName: node linkType: hard "p-waterfall@npm:^2.1.1": version: 2.1.1 resolution: "p-waterfall@npm:2.1.1" dependencies: p-reduce: ^2.0.0 checksum: 8588bb8b004ee37e559c7e940a480c1742c42725d477b0776ff30b894920a3e48bddf8f60aa0ae82773e500a8fc99d75e947c450e0c2ce187aff72cc1b248f6d languageName: node linkType: hard "package-json@npm:^7.0.0": version: 7.0.0 resolution: "package-json@npm:7.0.0" dependencies: got: ^11.8.2 registry-auth-token: ^4.0.0 registry-url: ^5.0.0 semver: ^7.3.5 checksum: c03699b057f665c5bf2d6af76190b8fb32aaf69c70a78faf7c073c03c3d0d5e168d4a96f386739a4d179e925e66289bf0b93a446fbb3f97b05451a3cd2a3bd90 languageName: node linkType: hard "pacote@npm:^13.0.3, pacote@npm:^13.6.1": version: 13.6.2 resolution: "pacote@npm:13.6.2" dependencies: "@npmcli/git": ^3.0.0 "@npmcli/installed-package-contents": ^1.0.7 "@npmcli/promise-spawn": ^3.0.0 "@npmcli/run-script": ^4.1.0 cacache: ^16.0.0 chownr: ^2.0.0 fs-minipass: ^2.1.0 infer-owner: ^1.0.4 minipass: ^3.1.6 mkdirp: ^1.0.4 npm-package-arg: ^9.0.0 npm-packlist: ^5.1.0 npm-pick-manifest: ^7.0.0 npm-registry-fetch: ^13.0.1 proc-log: ^2.0.0 promise-retry: ^2.0.1 read-package-json: ^5.0.0 read-package-json-fast: ^2.0.3 rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 bin: pacote: lib/bin.js checksum: a7b7f97094ab570a23e1c174537e9953a4d53176cc4b18bac77d7728bd89e2b9fa331d0f78fa463add03df79668a918bbdaa2750819504ee39242063abf53c6e languageName: node linkType: hard "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" dependencies: callsites: ^3.0.0 checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff languageName: node linkType: hard "parse-conflict-json@npm:^2.0.1": version: 2.0.2 resolution: "parse-conflict-json@npm:2.0.2" dependencies: json-parse-even-better-errors: ^2.3.1 just-diff: ^5.0.1 just-diff-apply: ^5.2.0 checksum: 076f65c958696586daefb153f59d575dfb59648be43116a21b74d5ff69ec63dd56f585a27cc2da56d8e64ca5abf0373d6619b8330c035131f8d1e990c8406378 languageName: node linkType: hard "parse-json@npm:^4.0.0": version: 4.0.0 resolution: "parse-json@npm:4.0.0" dependencies: error-ex: ^1.3.1 json-parse-better-errors: ^1.0.1 checksum: 0fe227d410a61090c247e34fa210552b834613c006c2c64d9a05cfe9e89cf8b4246d1246b1a99524b53b313e9ac024438d0680f67e33eaed7e6f38db64cfe7b5 languageName: node linkType: hard "parse-json@npm:^5.0.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: "@babel/code-frame": ^7.0.0 error-ex: ^1.3.1 json-parse-even-better-errors: ^2.3.0 lines-and-columns: ^1.1.6 checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 languageName: node linkType: hard "parse-node-version@npm:^1.0.1": version: 1.0.1 resolution: "parse-node-version@npm:1.0.1" checksum: c192393b6a978092c1ef8df2c42c0a02e4534b96543e23d335f1b9b5b913ac75473d18fe6050b58d6995c57fb383ee71a5cb8397e363caaf38a6df8215cc52fd languageName: node linkType: hard "parse-path@npm:^7.0.0": version: 7.0.0 resolution: "parse-path@npm:7.0.0" dependencies: protocols: ^2.0.0 checksum: 244b46523a58181d251dda9b888efde35d8afb957436598d948852f416d8c76ddb4f2010f9fc94218b4be3e5c0f716aa0d2026194a781e3b8981924142009302 languageName: node linkType: hard "parse-srcset@npm:^1.0.2": version: 1.0.2 resolution: "parse-srcset@npm:1.0.2" checksum: 3a0380380c6082021fcce982f0b89fb8a493ce9dfd7d308e5e6d855201e80db8b90438649b31fdd82a3d6089a8ca17dccddaa2b730a718389af4c037b8539ebf languageName: node linkType: hard "parse-url@npm:^8.1.0": version: 8.1.0 resolution: "parse-url@npm:8.1.0" dependencies: parse-path: ^7.0.0 checksum: b93e21ab4c93c7d7317df23507b41be7697694d4c94f49ed5c8d6288b01cba328fcef5ba388e147948eac20453dee0df9a67ab2012415189fff85973bdffe8d9 languageName: node linkType: hard "parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 languageName: node linkType: hard "path-browserify@npm:^1.0.0": version: 1.0.1 resolution: "path-browserify@npm:1.0.1" checksum: c6d7fa376423fe35b95b2d67990060c3ee304fc815ff0a2dc1c6c3cfaff2bd0d572ee67e18f19d0ea3bbe32e8add2a05021132ac40509416459fffee35200699 languageName: node linkType: hard "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a languageName: node linkType: hard "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 languageName: node linkType: hard "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 languageName: node linkType: hard "path-key@npm:^2.0.1": version: 2.0.1 resolution: "path-key@npm:2.0.1" checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd languageName: node linkType: hard "path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 languageName: node linkType: hard "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a languageName: node linkType: hard "path-scurry@npm:^1.11.0": version: 1.11.1 resolution: "path-scurry@npm:1.11.1" dependencies: lru-cache: ^10.2.0 minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 checksum: 890d5abcd593a7912dcce7cf7c6bf7a0b5648e3dee6caf0712c126ca0a65c7f3d7b9d769072a4d1baf370f61ce493ab5b038d59988688e0c5f3f646ee3c69023 languageName: node linkType: hard "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce languageName: node linkType: hard "path-to-regexp@npm:^6.2.1": version: 6.2.2 resolution: "path-to-regexp@npm:6.2.2" checksum: b7b0005c36f5099f9ed1fb20a820d2e4ed1297ffe683ea1d678f5e976eb9544f01debb281369dabdc26da82e6453901bf71acf2c7ed14b9243536c2a45286c33 languageName: node linkType: hard "path-type@npm:^3.0.0": version: 3.0.0 resolution: "path-type@npm:3.0.0" dependencies: pify: ^3.0.0 checksum: 735b35e256bad181f38fa021033b1c33cfbe62ead42bb2222b56c210e42938eecb272ae1949f3b6db4ac39597a61b44edd8384623ec4d79bfdc9a9c0f12537a6 languageName: node linkType: hard "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 languageName: node linkType: hard "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 languageName: node linkType: hard "performance-now@npm:^2.1.0": version: 2.1.0 resolution: "performance-now@npm:2.1.0" checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 languageName: node linkType: hard "picocolors@npm:^0.2.1": version: 0.2.1 resolution: "picocolors@npm:0.2.1" checksum: 3b0f441f0062def0c0f39e87b898ae7461c3a16ffc9f974f320b44c799418cabff17780ee647fda42b856a1dc45897e2c62047e1b546d94d6d5c6962f45427b2 languageName: node linkType: hard "picocolors@npm:^1.0.0, picocolors@npm:^1.0.1": version: 1.0.1 resolution: "picocolors@npm:1.0.1" checksum: fa68166d1f56009fc02a34cdfd112b0dd3cf1ef57667ac57281f714065558c01828cdf4f18600ad6851cbe0093952ed0660b1e0156bddf2184b6aaf5817553a5 languageName: node linkType: hard "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf languageName: node linkType: hard "pidtree@npm:^0.3.0": version: 0.3.1 resolution: "pidtree@npm:0.3.1" bin: pidtree: bin/pidtree.js checksum: eb49025099f1af89a4696f7673351421f13420f3397b963c901fe23a1c9c2ff50f4750321970d4472c0ffbb065e4a6c3c27f75e226cc62284b19e21d32ce7012 languageName: node linkType: hard "pidtree@npm:^0.5.0": version: 0.5.0 resolution: "pidtree@npm:0.5.0" bin: pidtree: bin/pidtree.js checksum: 371cd14bbc9bdee2a6a44596dd521dd3565e223481e0b1afffdca3f1c29831850bfa7784114dc30d245d37e7d186cec035e036256b39f75d878d19498fe0df6a languageName: node linkType: hard "pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba languageName: node linkType: hard "pify@npm:^3.0.0": version: 3.0.0 resolution: "pify@npm:3.0.0" checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde languageName: node linkType: hard "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" checksum: 9c4e34278cb09987685fa5ef81499c82546c033713518f6441778fbec623fc708777fe8ac633097c72d88470d5963094076c7305cafc7ad340aae27cfacd856b languageName: node linkType: hard "pify@npm:^5.0.0": version: 5.0.0 resolution: "pify@npm:5.0.0" checksum: 443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb languageName: node linkType: hard "pino-abstract-transport@npm:1.1.0, pino-abstract-transport@npm:v1.1.0": version: 1.1.0 resolution: "pino-abstract-transport@npm:1.1.0" dependencies: readable-stream: ^4.0.0 split2: ^4.0.0 checksum: cc84caabee5647b5753ae484d5f63a1bca0f6e1791845e2db2b6d830a561c2b5dd1177720f68d78994c8a93aecc69f2729e6ac2bc871a1bf5bb4b0ec17210668 languageName: node linkType: hard "pino-abstract-transport@npm:v0.5.0": version: 0.5.0 resolution: "pino-abstract-transport@npm:0.5.0" dependencies: duplexify: ^4.1.2 split2: ^4.0.0 checksum: c503f867de3189f8217ab9cf794e8a631dddd0029a829f0f985f5511308152ebd53e363764fbc5570b3d1c715b341e3923456ce16ad84cd41be2b9a074ada234 languageName: node linkType: hard "pino-std-serializers@npm:^4.0.0": version: 4.0.0 resolution: "pino-std-serializers@npm:4.0.0" checksum: 89d487729b58c9d3273a0ee851ead068d6d2e2ccc1af8e1c1d28f1b3442423679bec7ec04d9a2aba36f94f335e82be9f4de19dc4fbc161e71c136aaa15b85ad3 languageName: node linkType: hard "pino-std-serializers@npm:^6.0.0": version: 6.2.2 resolution: "pino-std-serializers@npm:6.2.2" checksum: aeb0662edc46ec926de9961ed4780a4f0586bb7c37d212cd469c069639e7816887a62c5093bc93f260a4e0900322f44fc8ab1343b5a9fa2864a888acccdb22a4 languageName: node linkType: hard "pino@npm:7.11.0": version: 7.11.0 resolution: "pino@npm:7.11.0" dependencies: atomic-sleep: ^1.0.0 fast-redact: ^3.0.0 on-exit-leak-free: ^0.2.0 pino-abstract-transport: v0.5.0 pino-std-serializers: ^4.0.0 process-warning: ^1.0.0 quick-format-unescaped: ^4.0.3 real-require: ^0.1.0 safe-stable-stringify: ^2.1.0 sonic-boom: ^2.2.1 thread-stream: ^0.15.1 bin: pino: bin.js checksum: b919e7dbe41de978bb050dcef94fd687c012eb78d344a18f75f04ce180d5810fc162be1f136722d70cd005ed05832c4023a38b9acbc1076ae63c9f5ec5ca515c languageName: node linkType: hard "pino@npm:8.17.2": version: 8.17.2 resolution: "pino@npm:8.17.2" dependencies: atomic-sleep: ^1.0.0 fast-redact: ^3.1.1 on-exit-leak-free: ^2.1.0 pino-abstract-transport: v1.1.0 pino-std-serializers: ^6.0.0 process-warning: ^3.0.0 quick-format-unescaped: ^4.0.3 real-require: ^0.2.0 safe-stable-stringify: ^2.3.1 sonic-boom: ^3.7.0 thread-stream: ^2.0.0 bin: pino: bin.js checksum: fc769d3d7b1333de94d51815fbe2abc4a1cc07cb0252a399313e54e26c13da2c0a69b227c296bd95ed52660d7eaa993662a9bf270b7370d0f7553fdd38716b63 languageName: node linkType: hard "pixrem@npm:^4.0.0": version: 4.0.1 resolution: "pixrem@npm:4.0.1" dependencies: browserslist: ^2.0.0 postcss: ^6.0.0 reduce-css-calc: ^1.2.7 checksum: 2bdcb8697b5b69657d5f779e3118249f52dc78978b9908efbe856fb1aaea1a957b35ad2766ba11bfcb883e7688cc8b167bb42e08c1a3a1793ee2808971d6f1f0 languageName: node linkType: hard "pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: find-up: ^4.0.0 checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 languageName: node linkType: hard "pkginfo@npm:0.4.1": version: 0.4.1 resolution: "pkginfo@npm:0.4.1" checksum: 0f13694f3682345647b7cb887fb6fe258df51b635f252324cd75eeb8181b4381cb8b9d91dc2d869849e857192b403bea65038d2f7c05b524eeae69ece5048209 languageName: node linkType: hard "pleeease-filters@npm:^4.0.0": version: 4.0.0 resolution: "pleeease-filters@npm:4.0.0" dependencies: onecolor: ^3.0.4 postcss: ^6.0.1 checksum: 112d1095924b192dbb882d2cbffb47ce00245cbf943c7a690448a702f6432d86855a4d100a658ad120ad9b8abc9928f697404297edd623cac279672e520f76c1 languageName: node linkType: hard "portfinder@npm:^1.0.28": version: 1.0.32 resolution: "portfinder@npm:1.0.32" dependencies: async: ^2.6.4 debug: ^3.2.7 mkdirp: ^0.5.6 checksum: 116b4aed1b9e16f6d5503823d966d9ffd41b1c2339e27f54c06cd2f3015a9d8ef53e2a53b57bc0a25af0885977b692007353aa28f9a0a98a44335cb50487240d languageName: node linkType: hard "possible-typed-array-names@npm:^1.0.0": version: 1.0.0 resolution: "possible-typed-array-names@npm:1.0.0" checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae languageName: node linkType: hard "postcss-apply@npm:^0.8.0": version: 0.8.0 resolution: "postcss-apply@npm:0.8.0" dependencies: babel-runtime: ^6.23.0 balanced-match: ^0.4.2 postcss: ^6.0.0 checksum: 1f1ca565166defb1d073b0c869d728212a95f3c91478da8b691e931a803f349b1a76b77c7ecd719814449153ffe6eaf77e289f14d9121d13fbf764ffd4bf627b languageName: node linkType: hard "postcss-attribute-case-insensitive@npm:^2.0.0": version: 2.0.0 resolution: "postcss-attribute-case-insensitive@npm:2.0.0" dependencies: postcss: ^6.0.0 postcss-selector-parser: ^2.2.3 checksum: 58cf5fc90ee3a3dcaef3a82b9f461be9b4159a2c942f17e7cff369c1823150643b162bbde71bbb86cfcf04e2872f07544b8f23d6a343ca4806ef95afa7b9c791 languageName: node linkType: hard "postcss-calc@npm:^6.0.0": version: 6.0.2 resolution: "postcss-calc@npm:6.0.2" dependencies: css-unit-converter: ^1.1.1 postcss: ^7.0.2 postcss-selector-parser: ^2.2.2 reduce-css-calc: ^2.0.0 checksum: 01366ca1558e9674086b01995c34aed7ba589da937597b67d29fe5f553b8b746387bc1ab0a01d507fe96f4ca3e39a0a8b7cc4b9478c415145b843b1ff559955e languageName: node linkType: hard "postcss-cli@npm:^9.1.0": version: 9.1.0 resolution: "postcss-cli@npm:9.1.0" dependencies: chokidar: ^3.3.0 dependency-graph: ^0.11.0 fs-extra: ^10.0.0 get-stdin: ^9.0.0 globby: ^12.0.0 picocolors: ^1.0.0 postcss-load-config: ^3.0.0 postcss-reporter: ^7.0.0 pretty-hrtime: ^1.0.3 read-cache: ^1.0.0 slash: ^4.0.0 yargs: ^17.0.0 peerDependencies: postcss: ^8.0.0 bin: postcss: index.js checksum: 6f172cbdba2966f9b789e2ac6d2d87eb737e5a6c0bc025a729fb23631cfffb62df72472b14c91a8adacabd263c64f4b38fd70923da3727ee994def0b3c930003 languageName: node linkType: hard "postcss-color-function@npm:^4.0.0": version: 4.1.0 resolution: "postcss-color-function@npm:4.1.0" dependencies: css-color-function: ~1.3.3 postcss: ^6.0.23 postcss-message-helpers: ^2.0.0 postcss-value-parser: ^3.3.1 checksum: c4dbfff69544f06e3542109c2eeeb64a4efbe2f7a0e023defcf20d2d95daeef17437abb86cae3a5caa1380e8ff440c8588f67b89034782b431f58f5f3e54a77c languageName: node linkType: hard "postcss-color-gray@npm:^4.0.0": version: 4.1.0 resolution: "postcss-color-gray@npm:4.1.0" dependencies: color: ^2.0.1 postcss: ^6.0.14 postcss-message-helpers: ^2.0.0 reduce-function-call: ^1.0.2 checksum: 882c7dc13311fd7f0643bab0af4506f990aa68c276066d7c54cc0cbf997d36e32e585bfdddde43d4d80bd57241275d8a116fdf7b696b8d3c247dfb1c314bd962 languageName: node linkType: hard "postcss-color-hex-alpha@npm:^3.0.0": version: 3.0.0 resolution: "postcss-color-hex-alpha@npm:3.0.0" dependencies: color: ^1.0.3 postcss: ^6.0.1 postcss-message-helpers: ^2.0.0 checksum: dd49bbaa90c6ebc7f73c9e9c2837060e13fc6255e333871cdca42cf5e4c55ae1bb4df1a7bf6800d528f72601e4c5c0c7e925566b7d57d2fc07d5127a34ab14de languageName: node linkType: hard "postcss-color-hsl@npm:^2.0.0": version: 2.0.0 resolution: "postcss-color-hsl@npm:2.0.0" dependencies: postcss: ^6.0.1 postcss-value-parser: ^3.3.0 units-css: ^0.4.0 checksum: 73836ce7f84eeba1668e87255a32dae558f49e29aa0e6b6f16b6d9cd74ac2a67055035bf8a280418a04ce62f6b16ac1287a27b6c54e0b38f4b756cb277dc0cc1 languageName: node linkType: hard "postcss-color-hwb@npm:^3.0.0": version: 3.0.0 resolution: "postcss-color-hwb@npm:3.0.0" dependencies: color: ^1.0.3 postcss: ^6.0.1 postcss-message-helpers: ^2.0.0 reduce-function-call: ^1.0.2 checksum: f0d68b03eb3e21a37a72ce5efddda2ac61cfb44dd86066bc2035e401fc18b36855976ac654d9a54a7852cebf028a104bd3b80f822e45b75364928a846f7dee1d languageName: node linkType: hard "postcss-color-rebeccapurple@npm:^3.0.0": version: 3.1.0 resolution: "postcss-color-rebeccapurple@npm:3.1.0" dependencies: postcss: ^6.0.22 postcss-values-parser: ^1.5.0 checksum: b90c62245eedb735583d0d81b52a5a99f51bedde8782b1c1b0ec9cc6b86236f322dbf9476ef8608d9eb332fb51f480e5f87e87545dbb822a8b93c82f44359db2 languageName: node linkType: hard "postcss-color-rgb@npm:^2.0.0": version: 2.0.0 resolution: "postcss-color-rgb@npm:2.0.0" dependencies: postcss: ^6.0.1 postcss-value-parser: ^3.3.0 checksum: 6f7bebbff4cb418304b536cbd3aeb78793d0ec2672a25084f8e169dd7682cc91aef60c30015907c39c937675448e401638cb706d393b45ca47d60d1b8d2e2aaf languageName: node linkType: hard "postcss-color-rgba-fallback@npm:^3.0.0": version: 3.0.0 resolution: "postcss-color-rgba-fallback@npm:3.0.0" dependencies: postcss: ^6.0.6 postcss-value-parser: ^3.3.0 rgb-hex: ^2.1.0 checksum: 245df07d2ca94db9c03ba372648a48ff5c2817d3f8131fb0e7397176a7a51507b0e05a5c6fbcec9637b3452d074417a599f3450fffecc4f38d10e9471f83331b languageName: node linkType: hard "postcss-cssnext@npm:^3.1.0": version: 3.1.1 resolution: "postcss-cssnext@npm:3.1.1" dependencies: autoprefixer: ^7.1.1 caniuse-api: ^2.0.0 chalk: ^2.0.1 pixrem: ^4.0.0 pleeease-filters: ^4.0.0 postcss: ^6.0.5 postcss-apply: ^0.8.0 postcss-attribute-case-insensitive: ^2.0.0 postcss-calc: ^6.0.0 postcss-color-function: ^4.0.0 postcss-color-gray: ^4.0.0 postcss-color-hex-alpha: ^3.0.0 postcss-color-hsl: ^2.0.0 postcss-color-hwb: ^3.0.0 postcss-color-rebeccapurple: ^3.0.0 postcss-color-rgb: ^2.0.0 postcss-color-rgba-fallback: ^3.0.0 postcss-custom-media: ^6.0.0 postcss-custom-properties: ^6.1.0 postcss-custom-selectors: ^4.0.1 postcss-font-family-system-ui: ^3.0.0 postcss-font-variant: ^3.0.0 postcss-image-set-polyfill: ^0.3.5 postcss-initial: ^2.0.0 postcss-media-minmax: ^3.0.0 postcss-nesting: ^4.0.1 postcss-pseudo-class-any-link: ^4.0.0 postcss-pseudoelements: ^5.0.0 postcss-replace-overflow-wrap: ^2.0.0 postcss-selector-matches: ^3.0.1 postcss-selector-not: ^3.0.1 peerDependencies: caniuse-lite: ^1.0.30000697 checksum: daa46343c0e086700a6c25e9261aac2f8396d3fdac1e86c02f5e3d1854737213edda4104ce6f30a7c76f3ad989326e916fc102e5607dfdd4a54f0a5f93e1b407 languageName: node linkType: hard "postcss-custom-media@npm:^6.0.0": version: 6.0.0 resolution: "postcss-custom-media@npm:6.0.0" dependencies: postcss: ^6.0.1 checksum: 0d616d5369a99fa7e0efa1951b7ea2b5208e2a0e8df9c9324c67cd61a8f5fc9b3b4b6d88e0175d12c1e940dc5c6a0fbd42a7a56b4ec10450dd252bd5cd8cb12c languageName: node linkType: hard "postcss-custom-properties@npm:^6.1.0": version: 6.3.1 resolution: "postcss-custom-properties@npm:6.3.1" dependencies: balanced-match: ^1.0.0 postcss: ^6.0.18 checksum: ae7fc852259ef6d223fdcf561bcb4106bedc51abc353d259a102b7cff5066446bef01734874508604b664d7b25394fd1ca09f93a475174d299edcc02194254e3 languageName: node linkType: hard "postcss-custom-selectors@npm:^4.0.1": version: 4.0.1 resolution: "postcss-custom-selectors@npm:4.0.1" dependencies: postcss: ^6.0.1 postcss-selector-matches: ^3.0.0 checksum: a3f25ae1fcdf83748f920eabab1d2ea9eda0f722cfb1b0c679577ed5231ef3b0e5125ef81b9c11ba383b5aae21de04e4e82c87c129542c1b7c9f4bd37f9edd65 languageName: node linkType: hard "postcss-font-family-system-ui@npm:^3.0.0": version: 3.0.0 resolution: "postcss-font-family-system-ui@npm:3.0.0" dependencies: postcss: ^6.0 checksum: 6ad35ec6e2499130181ae7962fd3bd52244ebf53d6ea97a2299d98fa3e9917cdfafa6cac1e4b146cadbd409db877d43a5ac25bd82ad0df68f374399d06866f7a languageName: node linkType: hard "postcss-font-variant@npm:^3.0.0": version: 3.0.0 resolution: "postcss-font-variant@npm:3.0.0" dependencies: postcss: ^6.0.1 checksum: a0b2afc64dd6e33712d0464ab50a13ff138aedf65b52b91bb7f66c16313368124ee96defcc3b988a886b367cfc1883b79c4f35804d9f3764afe79c83858a5e4e languageName: node linkType: hard "postcss-image-set-polyfill@npm:^0.3.5": version: 0.3.5 resolution: "postcss-image-set-polyfill@npm:0.3.5" dependencies: postcss: ^6.0.1 postcss-media-query-parser: ^0.2.3 checksum: 5f003275128302b25df8c3923c1b7bf424b5f28f8e7bca867a748f9b917d2e10b26f07149e745d2af8866b0b3b3682a21069120edfeb80c8362c214bd14de0ab languageName: node linkType: hard "postcss-import@npm:^14.0.2": version: 14.1.0 resolution: "postcss-import@npm:14.1.0" dependencies: postcss-value-parser: ^4.0.0 read-cache: ^1.0.0 resolve: ^1.1.7 peerDependencies: postcss: ^8.0.0 checksum: cd45d406e90f67cdab9524352e573cc6b4462b790934a05954e929a6653ebd31288ceebc8ce3c3ed7117ae672d9ebbec57df0bceec0a56e9b259c2e71d47ca86 languageName: node linkType: hard "postcss-initial@npm:^2.0.0": version: 2.0.0 resolution: "postcss-initial@npm:2.0.0" dependencies: lodash.template: ^4.2.4 postcss: ^6.0.1 checksum: d2686a699b02b2a6e61adee34189d25c60ef265213735c72979d0704476b339b142b964e281b1f537dd55735a19c5444813c3849d2aa13036da670b53720d042 languageName: node linkType: hard "postcss-load-config@npm:^3.0.0": version: 3.1.4 resolution: "postcss-load-config@npm:3.1.4" dependencies: lilconfig: ^2.0.5 yaml: ^1.10.2 peerDependencies: postcss: ">=8.0.9" ts-node: ">=9.0.0" peerDependenciesMeta: postcss: optional: true ts-node: optional: true checksum: 1c589504c2d90b1568aecae8238ab993c17dba2c44f848a8f13619ba556d26a1c09644d5e6361b5784e721e94af37b604992f9f3dc0483e687a0cc1cc5029a34 languageName: node linkType: hard "postcss-loader@npm:^6.1.0": version: 6.2.1 resolution: "postcss-loader@npm:6.2.1" dependencies: cosmiconfig: ^7.0.0 klona: ^2.0.5 semver: ^7.3.5 peerDependencies: postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 checksum: e40ae79c3e39df37014677a817b001bd115d8b10dedf53a07b97513d93b1533cd702d7a48831bdd77b9a9484b1ec84a5d4a723f80e83fb28682c75b5e65e8a90 languageName: node linkType: hard "postcss-media-minmax@npm:^3.0.0": version: 3.0.0 resolution: "postcss-media-minmax@npm:3.0.0" dependencies: postcss: ^6.0.1 checksum: 642194880af15dfdd95aa633a3ffaf54f55fdfe8e8a5ed8d7dfaffb4cf3c66117381e77c6fe0432eb4e786229369869a5070c05a5501702bce9631e8873d1fd0 languageName: node linkType: hard "postcss-media-query-parser@npm:^0.2.3": version: 0.2.3 resolution: "postcss-media-query-parser@npm:0.2.3" checksum: 8000d4d95b912994928ff86137f5ab0ed4c4ee1498af2336e93d708ae8827a690cd7acbaed55d14684cf44d82c8d44b031c1c69ae6bcd2f9620ea67573888090 languageName: node linkType: hard "postcss-message-helpers@npm:^2.0.0": version: 2.0.0 resolution: "postcss-message-helpers@npm:2.0.0" checksum: 2a2c43113eb67a0d9551e1dc135a56bc4e5f783365f396b0b7926f77968e21bf9ee5698810acec46e9635a413ae4e33eaed6c289cf2b4bc54333fcea65532a8c languageName: node linkType: hard "postcss-modules-extract-imports@npm:^3.1.0": version: 3.1.0 resolution: "postcss-modules-extract-imports@npm:3.1.0" peerDependencies: postcss: ^8.1.0 checksum: b9192e0f4fb3d19431558be6f8af7ca45fc92baaad9b2778d1732a5880cd25c3df2074ce5484ae491e224f0d21345ffc2d419bd51c25b019af76d7a7af88c17f languageName: node linkType: hard "postcss-modules-local-by-default@npm:^4.0.5": version: 4.0.5 resolution: "postcss-modules-local-by-default@npm:4.0.5" dependencies: icss-utils: ^5.0.0 postcss-selector-parser: ^6.0.2 postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.1.0 checksum: ca9b01f4a0a3dfb33e016299e2dfb7e85c3123292f7aec2efc0c6771b9955648598bfb4c1561f7ee9732fb27fb073681233661b32eef98baab43743f96735452 languageName: node linkType: hard "postcss-modules-scope@npm:^3.2.0": version: 3.2.0 resolution: "postcss-modules-scope@npm:3.2.0" dependencies: postcss-selector-parser: ^6.0.4 peerDependencies: postcss: ^8.1.0 checksum: 2ffe7e98c1fa993192a39c8dd8ade93fc4f59fbd1336ce34fcedaee0ee3bafb29e2e23fb49189256895b30e4f21af661c6a6a16ef7b17ae2c859301e4a4459ae languageName: node linkType: hard "postcss-modules-values@npm:^4.0.0": version: 4.0.0 resolution: "postcss-modules-values@npm:4.0.0" dependencies: icss-utils: ^5.0.0 peerDependencies: postcss: ^8.1.0 checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 languageName: node linkType: hard "postcss-nesting@npm:^4.0.1": version: 4.2.1 resolution: "postcss-nesting@npm:4.2.1" dependencies: postcss: ^6.0.11 checksum: 2dced3b2182d705f7ae7ee6ababdfac5c8e19657aa9b00443d4d453ff0525fbd2013f61abc038a0cfa6b5ec7deb1953f3c367d293fa7d684a2324cafa4797bf0 languageName: node linkType: hard "postcss-pseudo-class-any-link@npm:^4.0.0": version: 4.0.0 resolution: "postcss-pseudo-class-any-link@npm:4.0.0" dependencies: postcss: ^6.0.1 postcss-selector-parser: ^2.2.3 checksum: 0a44c60b48ea01edce31652e144464bf772f1c71528f0dd81f87c7fa95e485668586095ed968d7ea43d52e417bd4e7dff120b82ae1bfb48377b1a196b1b8843b languageName: node linkType: hard "postcss-pseudoelements@npm:^5.0.0": version: 5.0.0 resolution: "postcss-pseudoelements@npm:5.0.0" dependencies: postcss: ^6.0.0 checksum: e199351e1f6284efa69c7812af76ede010f481ca15caf3689497f4e6d68952ab6f5585258a3f3b13fdcfadbf06bd3f926e9d3640ded1912a9bda47e944eae0d3 languageName: node linkType: hard "postcss-replace-overflow-wrap@npm:^2.0.0": version: 2.0.0 resolution: "postcss-replace-overflow-wrap@npm:2.0.0" dependencies: postcss: ^6.0.1 checksum: cbb1591d9c09d95a0923af382c46fdda3778cfb30fcd61b75a3202892381bfe8e152210ce34b70e1bc84ae4b9de03fbb38a50038d2d7098eb3766654b81b920e languageName: node linkType: hard "postcss-reporter@npm:^7.0.0": version: 7.1.0 resolution: "postcss-reporter@npm:7.1.0" dependencies: picocolors: ^1.0.0 thenby: ^1.3.4 peerDependencies: postcss: ^8.1.0 checksum: 765d1d3bcaca5462eb9fba837639966706161337531972116345e4cda535420c471aed9c8364da4a14eb315160ff893b774e059e40085f4d54f3cc3c1ad5ee01 languageName: node linkType: hard "postcss-selector-matches@npm:^3.0.0, postcss-selector-matches@npm:^3.0.1": version: 3.0.1 resolution: "postcss-selector-matches@npm:3.0.1" dependencies: balanced-match: ^0.4.2 postcss: ^6.0.1 checksum: dfef76b1c15c9e06661d5dd8eac94f091f0e4f3279f5001c973c2956b8f44f15a8340a19bda3b9603342b987fcaf740e619b35127d1a0aa8364ddaddb54c7c4e languageName: node linkType: hard "postcss-selector-not@npm:^3.0.1": version: 3.0.1 resolution: "postcss-selector-not@npm:3.0.1" dependencies: balanced-match: ^0.4.2 postcss: ^6.0.1 checksum: b1d8bdbf657a858d08bc6555b9664ed7dae987ba01ccdf0b6d4c65e95541970b986bbc2e899d8a2fcfa91f15fa9275241bde7d644dd7a557cdff418e3038cfae languageName: node linkType: hard "postcss-selector-parser@npm:^2.2.2, postcss-selector-parser@npm:^2.2.3": version: 2.2.3 resolution: "postcss-selector-parser@npm:2.2.3" dependencies: flatten: ^1.0.2 indexes-of: ^1.0.1 uniq: ^1.0.1 checksum: ea5aba10ffb4d3f0804f1d6b46cef121bcfba9b14b78beba89f38a4520a3000384458dbc52a8453b17a56fa83414572972e897735519c52c9a218dd5e3ccf11f languageName: node linkType: hard "postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": version: 6.1.0 resolution: "postcss-selector-parser@npm:6.1.0" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 checksum: 449f614e6706421be307d8638183c61ba45bc3b460fe3815df8971dbb4d59c4087181940d879daee4a7a2daf3d86e915db1cce0c006dd68ca75b4087079273bd languageName: node linkType: hard "postcss-value-parser@npm:^3.2.3, postcss-value-parser@npm:^3.3.0, postcss-value-parser@npm:^3.3.1": version: 3.3.1 resolution: "postcss-value-parser@npm:3.3.1" checksum: 62cd26e1cdbcf2dcc6bcedf3d9b409c9027bc57a367ae20d31dd99da4e206f730689471fd70a2abe866332af83f54dc1fa444c589e2381bf7f8054c46209ce16 languageName: node linkType: hard "postcss-value-parser@npm:^4.0.0, postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f languageName: node linkType: hard "postcss-values-parser@npm:^1.5.0": version: 1.5.0 resolution: "postcss-values-parser@npm:1.5.0" dependencies: flatten: ^1.0.2 indexes-of: ^1.0.1 uniq: ^1.0.1 checksum: b827b69e576f7586ec6255660e0e80d84ca3f873cbc7d2978189d7052038559318f35bef946dd56bccb7f8c970ab280fe5acb921014ebb4004fb75bdfef9d328 languageName: node linkType: hard "postcss@npm:^6.0, postcss@npm:^6.0.0, postcss@npm:^6.0.1, postcss@npm:^6.0.11, postcss@npm:^6.0.14, postcss@npm:^6.0.17, postcss@npm:^6.0.18, postcss@npm:^6.0.22, postcss@npm:^6.0.23, postcss@npm:^6.0.5, postcss@npm:^6.0.6": version: 6.0.23 resolution: "postcss@npm:6.0.23" dependencies: chalk: ^2.4.1 source-map: ^0.6.1 supports-color: ^5.4.0 checksum: cc6cb2c1dbcdefa6f57a71d67fe535c9e96543298bbe28f9a6a64c4f1e21b6127113890dd4cda8873d3f4e6613a0566b7b4bbb230204f3a9a309190bda065d81 languageName: node linkType: hard "postcss@npm:^7.0.2": version: 7.0.39 resolution: "postcss@npm:7.0.39" dependencies: picocolors: ^0.2.1 source-map: ^0.6.1 checksum: 4ac793f506c23259189064bdc921260d869a115a82b5e713973c5af8e94fbb5721a5cc3e1e26840500d7e1f1fa42a209747c5b1a151918a9bc11f0d7ed9048e3 languageName: node linkType: hard "postcss@npm:^8.3.11, postcss@npm:^8.3.2, postcss@npm:^8.4.33": version: 8.4.38 resolution: "postcss@npm:8.4.38" dependencies: nanoid: ^3.3.7 picocolors: ^1.0.0 source-map-js: ^1.2.0 checksum: 649f9e60a763ca4b5a7bbec446a069edf07f057f6d780a5a0070576b841538d1ecf7dd888f2fbfd1f76200e26c969e405aeeae66332e6927dbdc8bdcb90b9451 languageName: node linkType: hard "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a languageName: node linkType: hard "prettier-linter-helpers@npm:^1.0.0": version: 1.0.0 resolution: "prettier-linter-helpers@npm:1.0.0" dependencies: fast-diff: ^1.1.2 checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 languageName: node linkType: hard "prettier@npm:^2.3.2, prettier@npm:^2.8.3": version: 2.8.8 resolution: "prettier@npm:2.8.8" bin: prettier: bin-prettier.js checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 languageName: node linkType: hard "prettier@npm:~2.6.0": version: 2.6.2 resolution: "prettier@npm:2.6.2" bin: prettier: bin-prettier.js checksum: 48d08dde8e9fb1f5bccdd205baa7f192e9fc8bc98f86e1b97d919de804e28c806b0e6cc685e4a88211aa7987fa9668f30baae19580d87ced3ed0f2ec6572106f languageName: node linkType: hard "pretty-hrtime@npm:^1.0.3": version: 1.0.3 resolution: "pretty-hrtime@npm:1.0.3" checksum: bae0e6832fe13c3de43d1a3d43df52bf6090499d74dc65a17f5552cb1a94f1f8019a23284ddf988c3c408a09678d743901e1d8f5b7a71bec31eeeac445bef371 languageName: node linkType: hard "proc-log@npm:^2.0.0, proc-log@npm:^2.0.1": version: 2.0.1 resolution: "proc-log@npm:2.0.1" checksum: f6f23564ff759097db37443e6e2765af84979a703d2c52c1b9df506ee9f87caa101ba49d8fdc115c1a313ec78e37e8134704e9069e6a870f3499d98bb24c436f languageName: node linkType: hard "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 languageName: node linkType: hard "proc-log@npm:^4.2.0": version: 4.2.0 resolution: "proc-log@npm:4.2.0" checksum: 98f6cd012d54b5334144c5255ecb941ee171744f45fca8b43b58ae5a0c1af07352475f481cadd9848e7f0250376ee584f6aa0951a856ff8f021bdfbff4eb33fc languageName: node linkType: hard "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf languageName: node linkType: hard "process-warning@npm:1.0.0, process-warning@npm:^1.0.0": version: 1.0.0 resolution: "process-warning@npm:1.0.0" checksum: c708a03241deec3cabaeee39c4f9ee8c4d71f1c5ef9b746c8252cdb952a6059068cfcdaf348399775244cbc441b6ae5e26a9c87ed371f88335d84f26d19180f9 languageName: node linkType: hard "process-warning@npm:^3.0.0": version: 3.0.0 resolution: "process-warning@npm:3.0.0" checksum: 1fc2eb4524041de3c18423334cc8b4e36bec5ad5472640ca1a936122c6e01da0864c1a4025858ef89aea93eabe7e77db93ccea225b10858617821cb6a8719efe languageName: node linkType: hard "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 languageName: node linkType: hard "promise-all-reject-late@npm:^1.0.0": version: 1.0.1 resolution: "promise-all-reject-late@npm:1.0.1" checksum: d7d61ac412352e2c8c3463caa5b1c3ca0f0cc3db15a09f180a3da1446e33d544c4261fc716f772b95e4c27d559cfd2388540f44104feb356584f9c73cfb9ffcb languageName: node linkType: hard "promise-call-limit@npm:^1.0.1": version: 1.0.2 resolution: "promise-call-limit@npm:1.0.2" checksum: d0664dd2954c063115c58a4d0f929ff8dcfca634146dfdd4ec86f4993cfe14db229fb990457901ad04c923b3fb872067f3b47e692e0c645c01536b92fc4460bd languageName: node linkType: hard "promise-inflight@npm:^1.0.1": version: 1.0.1 resolution: "promise-inflight@npm:1.0.1" checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 languageName: node linkType: hard "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" dependencies: err-code: ^2.0.2 retry: ^0.12.0 checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 languageName: node linkType: hard "promzard@npm:^0.3.0": version: 0.3.0 resolution: "promzard@npm:0.3.0" dependencies: read: 1 checksum: 443a3b39ac916099988ee0161ab4e22edd1fa27e3d39a38d60e48c11ca6df3f5a90bfe44d95af06ed8659c4050b789ffe64c3f9f8e49a4bea1ea19105c98445a languageName: node linkType: hard "prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: loose-envify: ^1.4.0 object-assign: ^4.1.1 react-is: ^16.13.1 checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 languageName: node linkType: hard "property-expr@npm:^2.0.4": version: 2.0.6 resolution: "property-expr@npm:2.0.6" checksum: 89977f4bb230736c1876f460dd7ca9328034502fd92e738deb40516d16564b850c0bbc4e052c3df88b5b8cd58e51c93b46a94bea049a3f23f4a022c038864cab languageName: node linkType: hard "proto-list@npm:~1.2.1": version: 1.2.4 resolution: "proto-list@npm:1.2.4" checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 languageName: node linkType: hard "protocols@npm:^2.0.0, protocols@npm:^2.0.1": version: 2.0.1 resolution: "protocols@npm:2.0.1" checksum: 4a9bef6aa0449a0245ded319ac3cbfd032c3e76ebb562777037a3a832c99253d0e8bc2847f7be350236df620a11f7d4fe683ea7f59a2cc14c69f746b6259eda4 languageName: node linkType: hard "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 languageName: node linkType: hard "proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" checksum: ed7fcc2ba0a33404958e34d95d18638249a68c430e30fcb6c478497d72739ba64ce9810a24f53a7d921d0c065e5b78e3822759800698167256b04659366ca4d4 languageName: node linkType: hard "prr@npm:~1.0.1": version: 1.0.1 resolution: "prr@npm:1.0.1" checksum: 3bca2db0479fd38f8c4c9439139b0c42dcaadcc2fbb7bb8e0e6afaa1383457f1d19aea9e5f961d5b080f1cfc05bfa1fe9e45c97a1d3fd6d421950a73d3108381 languageName: node linkType: hard "psl@npm:^1.1.33": version: 1.9.0 resolution: "psl@npm:1.9.0" checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d languageName: node linkType: hard "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" dependencies: end-of-stream: ^1.1.0 once: ^1.3.1 checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 languageName: node linkType: hard "punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 languageName: node linkType: hard "q@npm:^1.5.1": version: 1.5.1 resolution: "q@npm:1.5.1" checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 languageName: node linkType: hard "qjobs@npm:^1.2.0": version: 1.2.0 resolution: "qjobs@npm:1.2.0" checksum: eb64c00724d2fecaf9246383b4eebc3a4c34845b25d41921dd57f41b30a4310cef661543facac27ceb6911aab64a1acdf45b5d8f1d5e2838554d0c010ee56852 languageName: node linkType: hard "qs@npm:6.10.4": version: 6.10.4 resolution: "qs@npm:6.10.4" dependencies: side-channel: ^1.0.4 checksum: 31e4fedd759d01eae52dde6692abab175f9af3e639993c5caaa513a2a3607b34d8058d3ae52ceeccf37c3025f22ed5e90e9ddd6c2537e19c0562ddd10dc5b1eb languageName: node linkType: hard "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: side-channel: ^1.0.4 checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 languageName: node linkType: hard "qs@npm:^6.4.0": version: 6.12.1 resolution: "qs@npm:6.12.1" dependencies: side-channel: ^1.0.6 checksum: aa761d99e65b6936ba2dd2187f2d9976afbcda38deb3ff1b3fe331d09b0c578ed79ca2abdde1271164b5be619c521ec7db9b34c23f49a074e5921372d16242d5 languageName: node linkType: hard "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 languageName: node linkType: hard "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 languageName: node linkType: hard "quick-format-unescaped@npm:^4.0.3": version: 4.0.4 resolution: "quick-format-unescaped@npm:4.0.4" checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd languageName: node linkType: hard "quick-lru@npm:^4.0.1": version: 4.0.1 resolution: "quick-lru@npm:4.0.1" checksum: bea46e1abfaa07023e047d3cf1716a06172c4947886c053ede5c50321893711577cb6119360f810cc3ffcd70c4d7db4069c3cee876b358ceff8596e062bd1154 languageName: node linkType: hard "quick-lru@npm:^5.1.1": version: 5.1.1 resolution: "quick-lru@npm:5.1.1" checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed languageName: node linkType: hard "randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" dependencies: safe-buffer: ^5.1.0 checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 languageName: node linkType: hard "range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 languageName: node linkType: hard "raw-body@npm:2.5.2": version: 2.5.2 resolution: "raw-body@npm:2.5.2" dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676 languageName: node linkType: hard "rc@npm:1.2.8, rc@npm:^1.2.8": version: 1.2.8 resolution: "rc@npm:1.2.8" dependencies: deep-extend: ^0.6.0 ini: ~1.3.0 minimist: ^1.2.0 strip-json-comments: ~2.0.1 bin: rc: ./cli.js checksum: 2e26e052f8be2abd64e6d1dabfbd7be03f80ec18ccbc49562d31f617d0015fbdbcf0f9eed30346ea6ab789e0fdfe4337f033f8016efdbee0df5354751842080e languageName: node linkType: hard "react-dom@npm:^18.2.0": version: 18.3.1 resolution: "react-dom@npm:18.3.1" dependencies: loose-envify: ^1.1.0 scheduler: ^0.23.2 peerDependencies: react: ^18.3.1 checksum: 298954ecd8f78288dcaece05e88b570014d8f6dce5db6f66e6ee91448debeb59dcd31561dddb354eee47e6c1bb234669459060deb238ed0213497146e555a0b9 languageName: node linkType: hard "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f languageName: node linkType: hard "react-is@npm:^18.2.0": version: 18.3.1 resolution: "react-is@npm:18.3.1" checksum: e20fe84c86ff172fc8d898251b7cc2c43645d108bf96d0b8edf39b98f9a2cae97b40520ee7ed8ee0085ccc94736c4886294456033304151c3f94978cec03df21 languageName: node linkType: hard "react@npm:>=17.0.0 <19.0.0, react@npm:^18.2.0": version: 18.3.1 resolution: "react@npm:18.3.1" dependencies: loose-envify: ^1.1.0 checksum: a27bcfa8ff7c15a1e50244ad0d0c1cb2ad4375eeffefd266a64889beea6f6b64c4966c9b37d14ee32d6c9fcd5aa6ba183b6988167ab4d127d13e7cb5b386a376 languageName: node linkType: hard "read-cache@npm:^1.0.0": version: 1.0.0 resolution: "read-cache@npm:1.0.0" dependencies: pify: ^2.3.0 checksum: cffc728b9ede1e0667399903f9ecaf3789888b041c46ca53382fa3a06303e5132774dc0a96d0c16aa702dbac1ea0833d5a868d414f5ab2af1e1438e19e6657c6 languageName: node linkType: hard "read-cmd-shim@npm:^3.0.0": version: 3.0.1 resolution: "read-cmd-shim@npm:3.0.1" checksum: 79fe66aa78eddcca8dc196765ae3168b3a56e2b69ba54071525eb00a9eeee8cc83b3d5f784432c3d8ce868787fdc059b1a1e0b605246b5108c9003fc927ea263 languageName: node linkType: hard "read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": version: 2.0.3 resolution: "read-package-json-fast@npm:2.0.3" dependencies: json-parse-even-better-errors: ^2.3.0 npm-normalize-package-bin: ^1.0.1 checksum: fca37b3b2160b9dda7c5588b767f6a2b8ce68d03a044000e568208e20bea0cf6dd2de17b90740ce8da8b42ea79c0b3859649dadf29510bbe77224ea65326a903 languageName: node linkType: hard "read-package-json@npm:^5.0.0, read-package-json@npm:^5.0.1": version: 5.0.2 resolution: "read-package-json@npm:5.0.2" dependencies: glob: ^8.0.1 json-parse-even-better-errors: ^2.3.1 normalize-package-data: ^4.0.0 npm-normalize-package-bin: ^2.0.0 checksum: 0882ac9cec1bc92fb5515e9727611fb2909351e1e5c840dce3503cbb25b4cd48eb44b61071986e0fc51043208161f07d364a7336206c8609770186818753b51a languageName: node linkType: hard "read-pkg-up@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg-up@npm:3.0.0" dependencies: find-up: ^2.0.0 read-pkg: ^3.0.0 checksum: 16175573f2914ab9788897bcbe2a62b5728d0075e62285b3680cebe97059e2911e0134a062cf6e51ebe3e3775312bc788ac2039ed6af38ec68d2c10c6f2b30fb languageName: node linkType: hard "read-pkg-up@npm:^7.0.1": version: 7.0.1 resolution: "read-pkg-up@npm:7.0.1" dependencies: find-up: ^4.1.0 read-pkg: ^5.2.0 type-fest: ^0.8.1 checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 languageName: node linkType: hard "read-pkg@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg@npm:3.0.0" dependencies: load-json-file: ^4.0.0 normalize-package-data: ^2.3.2 path-type: ^3.0.0 checksum: 398903ebae6c7e9965419a1062924436cc0b6f516c42c4679a90290d2f87448ed8f977e7aa2dbba4aa1ac09248628c43e493ac25b2bc76640e946035200e34c6 languageName: node linkType: hard "read-pkg@npm:^5.2.0": version: 5.2.0 resolution: "read-pkg@npm:5.2.0" dependencies: "@types/normalize-package-data": ^2.4.0 normalize-package-data: ^2.5.0 parse-json: ^5.0.0 type-fest: ^0.6.0 checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 languageName: node linkType: hard "read@npm:1, read@npm:^1.0.7": version: 1.0.7 resolution: "read@npm:1.0.7" dependencies: mute-stream: ~0.0.4 checksum: 2777c254e5732cac96f5d0a1c0f6b836c89ae23d8febd405b206f6f24d5de1873420f1a0795e0e3721066650d19adf802c7882c4027143ee0acf942a4f34f97b languageName: node linkType: hard "readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: inherits: ^2.0.3 string_decoder: ^1.1.1 util-deprecate: ^1.0.1 checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d languageName: node linkType: hard "readable-stream@npm:^4.0.0": version: 4.5.2 resolution: "readable-stream@npm:4.5.2" dependencies: abort-controller: ^3.0.0 buffer: ^6.0.3 events: ^3.3.0 process: ^0.11.10 string_decoder: ^1.3.0 checksum: c4030ccff010b83e4f33289c535f7830190773e274b3fcb6e2541475070bdfd69c98001c3b0cb78763fc00c8b62f514d96c2b10a8bd35d5ce45203a25fa1d33a languageName: node linkType: hard "readable-stream@npm:~2.3.6": version: 2.3.8 resolution: "readable-stream@npm:2.3.8" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 isarray: ~1.0.0 process-nextick-args: ~2.0.0 safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 languageName: node linkType: hard "readdir-scoped-modules@npm:^1.1.0": version: 1.1.0 resolution: "readdir-scoped-modules@npm:1.1.0" dependencies: debuglog: ^1.0.1 dezalgo: ^1.0.0 graceful-fs: ^4.1.2 once: ^1.3.0 checksum: 6d9f334e40dfd0f5e4a8aab5e67eb460c95c85083c690431f87ab2c9135191170e70c2db6d71afcafb78e073d23eb95dcb3fc33ef91308f6ebfe3197be35e608 languageName: node linkType: hard "readdirp@npm:~3.6.0": version: 3.6.0 resolution: "readdirp@npm:3.6.0" dependencies: picomatch: ^2.2.1 checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 languageName: node linkType: hard "real-require@npm:^0.1.0": version: 0.1.0 resolution: "real-require@npm:0.1.0" checksum: 96745583ed4f82cd5c6a6af012fd1d3c6fc2f13ae1bcff1a3c4f8094696013a1a07c82c5aa66a403d7d4f84949fc2203bc927c7ad120caad125941ca2d7e5e8e languageName: node linkType: hard "real-require@npm:^0.2.0": version: 0.2.0 resolution: "real-require@npm:0.2.0" checksum: fa060f19f2f447adf678d1376928c76379dce5f72bd334da301685ca6cdcb7b11356813332cc243c88470796bc2e2b1e2917fc10df9143dd93c2ea608694971d languageName: node linkType: hard "rechoir@npm:^0.7.0": version: 0.7.1 resolution: "rechoir@npm:0.7.1" dependencies: resolve: ^1.9.0 checksum: 2a04aab4e28c05fcd6ee6768446bc8b859d8f108e71fc7f5bcbc5ef25e53330ce2c11d10f82a24591a2df4c49c4f61feabe1fd11f844c66feedd4cd7bb61146a languageName: node linkType: hard "rechoir@npm:^0.8.0": version: 0.8.0 resolution: "rechoir@npm:0.8.0" dependencies: resolve: ^1.20.0 checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 languageName: node linkType: hard "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" dependencies: indent-string: ^4.0.0 strip-indent: ^3.0.0 checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b languageName: node linkType: hard "reduce-css-calc@npm:^1.2.7": version: 1.3.0 resolution: "reduce-css-calc@npm:1.3.0" dependencies: balanced-match: ^0.4.2 math-expression-evaluator: ^1.2.14 reduce-function-call: ^1.0.1 checksum: 72696db02ede8772fe5ba9c47c6d451557bea0d11525f4e54b6adfcc4e540558755bb0ad454824cb6b998f0bd940eb2ef594f35b3d509dfa37934d93ece0f707 languageName: node linkType: hard "reduce-css-calc@npm:^2.0.0": version: 2.1.8 resolution: "reduce-css-calc@npm:2.1.8" dependencies: css-unit-converter: ^1.1.1 postcss-value-parser: ^3.3.0 checksum: 8fd27c06c4b443b84749a69a8b97d10e6ec7d142b625b41923a8807abb22b9e37e44df14e26cc606a802957be07bdce5e8ee2976a6952a7b438a7727007101e9 languageName: node linkType: hard "reduce-function-call@npm:^1.0.1, reduce-function-call@npm:^1.0.2": version: 1.0.3 resolution: "reduce-function-call@npm:1.0.3" dependencies: balanced-match: ^1.0.0 checksum: d0169016ea22b59d55fa3206507c8f2d009574abd0f9b86552035a8405d52f6d7d5b60d084c5950d6f2884df7de42f87a6260b1b386b79ede63bfc87ea0c3ce8 languageName: node linkType: hard "regenerator-runtime@npm:^0.11.0": version: 0.11.1 resolution: "regenerator-runtime@npm:0.11.1" checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 languageName: node linkType: hard "regenerator-runtime@npm:^0.14.0": version: 0.14.1 resolution: "regenerator-runtime@npm:0.14.1" checksum: 9f57c93277b5585d3c83b0cf76be47b473ae8c6d9142a46ce8b0291a04bb2cf902059f0f8445dcabb3fb7378e5fe4bb4ea1e008876343d42e46d3b484534ce38 languageName: node linkType: hard "regexp.prototype.flags@npm:^1.5.2": version: 1.5.2 resolution: "regexp.prototype.flags@npm:1.5.2" dependencies: call-bind: ^1.0.6 define-properties: ^1.2.1 es-errors: ^1.3.0 set-function-name: ^2.0.1 checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 languageName: node linkType: hard "registry-auth-token@npm:^4.0.0": version: 4.2.2 resolution: "registry-auth-token@npm:4.2.2" dependencies: rc: 1.2.8 checksum: c5030198546ecfdcbcb0722cbc3e260c4f5f174d8d07bdfedd4620e79bfdf17a2db735aa230d600bd388fce6edd26c0a9ed2eb7e9b4641ec15213a28a806688b languageName: node linkType: hard "registry-url@npm:^5.0.0": version: 5.1.0 resolution: "registry-url@npm:5.1.0" dependencies: rc: ^1.2.8 checksum: bcea86c84a0dbb66467b53187fadebfea79017cddfb4a45cf27530d7275e49082fe9f44301976eb0164c438e395684bcf3dae4819b36ff9d1640d8cc60c73df9 languageName: node linkType: hard "repeating@npm:^2.0.0": version: 2.0.1 resolution: "repeating@npm:2.0.1" dependencies: is-finite: ^1.0.0 checksum: d2db0b69c5cb0c14dd750036e0abcd6b3c3f7b2da3ee179786b755cf737ca15fa0fff417ca72de33d6966056f4695440e680a352401fc02c95ade59899afbdd0 languageName: node linkType: hard "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 languageName: node linkType: hard "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" checksum: a03ef6895445f33a4015300c426699bc66b2b044ba7b670aa238610381b56d3f07c686251740d575e22f4c87531ba662d06937508f0f3c0f1ddc04db3130560b languageName: node linkType: hard "requirejs@npm:^2.3.6": version: 2.3.6 resolution: "requirejs@npm:2.3.6" bin: r.js: ./bin/r.js r_js: ./bin/r.js checksum: 7c3c006bf5e1887d93ac7adb7f600328918d23cf3d28282a505a2873d4ddde499c7ec560e55cee3440d17fe1205cb4dcb72b07f35b39e8940372eca850e49b62 languageName: node linkType: hard "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff languageName: node linkType: hard "resolve-alpn@npm:^1.0.0": version: 1.2.1 resolution: "resolve-alpn@npm:1.2.1" checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 languageName: node linkType: hard "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" dependencies: resolve-from: ^5.0.0 checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 languageName: node linkType: hard "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f languageName: node linkType: hard "resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf languageName: node linkType: hard "resolve@npm:^1.1.7, resolve@npm:^1.10.0, resolve@npm:^1.20.0, resolve@npm:^1.9.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c languageName: node linkType: hard "resolve@patch:resolve@^1.1.7#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.9.0#~builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" dependencies: is-core-module: ^2.13.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 languageName: node linkType: hard "responselike@npm:^2.0.0": version: 2.0.1 resolution: "responselike@npm:2.0.1" dependencies: lowercase-keys: ^2.0.0 checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a languageName: node linkType: hard "restore-cursor@npm:^3.1.0": version: 3.1.0 resolution: "restore-cursor@npm:3.1.0" dependencies: onetime: ^5.1.0 signal-exit: ^3.0.2 checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 languageName: node linkType: hard "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c languageName: node linkType: hard "reusify@npm:^1.0.4": version: 1.0.4 resolution: "reusify@npm:1.0.4" checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc languageName: node linkType: hard "rfdc@npm:^1.3.0": version: 1.3.1 resolution: "rfdc@npm:1.3.1" checksum: d5d1e930aeac7e0e0a485f97db1356e388bdbeff34906d206fe524dd5ada76e95f186944d2e68307183fdc39a54928d4426bbb6734851692cfe9195efba58b79 languageName: node linkType: hard "rgb-hex@npm:^2.1.0": version: 2.1.0 resolution: "rgb-hex@npm:2.1.0" checksum: da3fccf3661d91e9feaa1c48cf130b728a598b1a5cb5b1f59a1c597f1a60e547c1dfa6790476d320281278e47f6ee218f0a3f512fb9d7e3698b132fa6a45c6ba languageName: node linkType: hard "rgb@npm:~0.1.0": version: 0.1.0 resolution: "rgb@npm:0.1.0" bin: rgb: ./bin/rgb checksum: d33da6b61be7f200043dec325d2cf359cbd5d8d85ca4c3b3db47b884fbcfbba69dc2f698e97593448a51151b322d8aad3d15254eaed2fac4f6c9c095c3936289 languageName: node linkType: hard "rimraf@npm:^3.0.0, rimraf@npm:^3.0.2": version: 3.0.2 resolution: "rimraf@npm:3.0.2" dependencies: glob: ^7.1.3 bin: rimraf: bin.js checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 languageName: node linkType: hard "rimraf@npm:^5.0.1": version: 5.0.7 resolution: "rimraf@npm:5.0.7" dependencies: glob: ^10.3.7 bin: rimraf: dist/esm/bin.mjs checksum: 884852abf8aefd4667448d87bdab04120a8641266c828cf382ac811713547eda18f81799d2146ffec3178f357d83d44ec01c10095949c82e23551660732bf14f languageName: node linkType: hard "rimraf@npm:~2.4.0": version: 2.4.5 resolution: "rimraf@npm:2.4.5" dependencies: glob: ^6.0.1 bin: rimraf: ./bin.js checksum: 036793b4055d65344ad7bea73c3f4095640af7455478fe56c19783619463e6bb4374ab3556b9e6d4d6d3dd210eb677b0955ece38813e734c294fd2687201151d languageName: node linkType: hard "root-workspace-0b6124@workspace:.": version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: "@jupyterlab/buildutils": ^3.5.2 || ^4.0.0 "@typescript-eslint/eslint-plugin": ^5.48.2 "@typescript-eslint/parser": ^5.48.2 eslint: ^8.32.0 eslint-config-prettier: ^8.6.0 eslint-plugin-prettier: ^4.2.1 glob: ^10.2.4 husky: ^7.0.4 lerna: ^5.4.3 lint-staged: ^12.1.3 prettier: ^2.8.3 rimraf: ^5.0.1 sort-package-json: ^2.1.0 typedoc: ~0.23.24 typescript: ~4.9.4 languageName: unknown linkType: soft "run-async@npm:^2.4.0": version: 2.4.1 resolution: "run-async@npm:2.4.1" checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 languageName: node linkType: hard "run-async@npm:^3.0.0": version: 3.0.0 resolution: "run-async@npm:3.0.0" checksum: 280c03d5a88603f48103fc6fd69f07fb0c392a1e0d319c34ec96a2516030e07ba06f79231a563c78698b882649c2fc1fda601bc84705f57d50efcd1fa506cfc0 languageName: node linkType: hard "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" dependencies: queue-microtask: ^1.2.2 checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d languageName: node linkType: hard "rxjs@npm:^7.5.5, rxjs@npm:^7.8.1": version: 7.8.1 resolution: "rxjs@npm:7.8.1" dependencies: tslib: ^2.1.0 checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 languageName: node linkType: hard "safe-array-concat@npm:^1.1.2": version: 1.1.2 resolution: "safe-array-concat@npm:1.1.2" dependencies: call-bind: ^1.0.7 get-intrinsic: ^1.2.4 has-symbols: ^1.0.3 isarray: ^2.0.5 checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 languageName: node linkType: hard "safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c languageName: node linkType: hard "safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard "safe-regex-test@npm:^1.0.3": version: 1.0.3 resolution: "safe-regex-test@npm:1.0.3" dependencies: call-bind: ^1.0.6 es-errors: ^1.3.0 is-regex: ^1.1.4 checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 languageName: node linkType: hard "safe-stable-stringify@npm:^2.1.0, safe-stable-stringify@npm:^2.3.1": version: 2.4.3 resolution: "safe-stable-stringify@npm:2.4.3" checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 languageName: node linkType: hard "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 languageName: node linkType: hard "sanitize-html@npm:^2.3": version: 2.13.0 resolution: "sanitize-html@npm:2.13.0" dependencies: deepmerge: ^4.2.2 escape-string-regexp: ^4.0.0 htmlparser2: ^8.0.0 is-plain-object: ^5.0.0 parse-srcset: ^1.0.2 postcss: ^8.3.11 checksum: d88602328306dbbddb9c5e2a5798783a3b38977a7ef40bf81dae31220d7fb583149c1046a33ec6817e9d96d172b1aaa9ea159776eb1ee08f6a0571150114c9bf languageName: node linkType: hard "sanitize-html@npm:~2.12.1": version: 2.12.1 resolution: "sanitize-html@npm:2.12.1" dependencies: deepmerge: ^4.2.2 escape-string-regexp: ^4.0.0 htmlparser2: ^8.0.0 is-plain-object: ^5.0.0 parse-srcset: ^1.0.2 postcss: ^8.3.11 checksum: fb96ea7170d51b5af2607f5cfd84464c78fc6f47e339407f55783e781c6a0288a8d40bbf97ea6a8758924ba9b2d33dcc4846bb94caacacd90d7f2de10ed8541a languageName: node linkType: hard "sax@npm:^1.2.4": version: 1.3.0 resolution: "sax@npm:1.3.0" checksum: 238ab3a9ba8c8f8aaf1c5ea9120386391f6ee0af52f1a6a40bbb6df78241dd05d782f2359d614ac6aae08c4c4125208b456548a6cf68625aa4fe178486e63ecd languageName: node linkType: hard "scheduler@npm:^0.23.2": version: 0.23.2 resolution: "scheduler@npm:0.23.2" dependencies: loose-envify: ^1.1.0 checksum: 3e82d1f419e240ef6219d794ff29c7ee415fbdc19e038f680a10c067108e06284f1847450a210b29bbaf97b9d8a97ced5f624c31c681248ac84c80d56ad5a2c4 languageName: node linkType: hard "schema-utils@npm:^0.3.0": version: 0.3.0 resolution: "schema-utils@npm:0.3.0" dependencies: ajv: ^5.0.0 checksum: 441fa4bd4900afb19eb9da1d8d6271056b71ce3d8b1b73bbece791de1d4c90ac7e97ffc9787607aa53611aaf2996711af7c18ba8669f06b084b218cab1e701e3 languageName: node linkType: hard "schema-utils@npm:^2.7.0": version: 2.7.1 resolution: "schema-utils@npm:2.7.1" dependencies: "@types/json-schema": ^7.0.5 ajv: ^6.12.4 ajv-keywords: ^3.5.2 checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b languageName: node linkType: hard "schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" dependencies: "@types/json-schema": ^7.0.8 ajv: ^6.12.5 ajv-keywords: ^3.5.2 checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 languageName: node linkType: hard "schema-utils@npm:^4.0.0": version: 4.2.0 resolution: "schema-utils@npm:4.2.0" dependencies: "@types/json-schema": ^7.0.9 ajv: ^8.9.0 ajv-formats: ^2.1.1 ajv-keywords: ^5.1.0 checksum: 26a0463d47683258106e6652e9aeb0823bf0b85843039e068b57da1892f7ae6b6b1094d48e9ed5ba5cbe9f7166469d880858b9d91abe8bd249421eb813850cde languageName: node linkType: hard "secure-compare@npm:3.0.1": version: 3.0.1 resolution: "secure-compare@npm:3.0.1" checksum: 0a8d8d3e54d5772d2cf1c02325f01fc7366d0bd33f964a08a84fe3ee5f34d46435a6ae729c1d239c750e160ef9b58c764d3efb945a1d07faf47978a8e4161594 languageName: node linkType: hard "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.3.0, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0": version: 5.7.2 resolution: "semver@npm:5.7.2" bin: semver: bin/semver checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard "semver@npm:7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 languageName: node linkType: hard "semver@npm:7.6.0": version: 7.6.0 resolution: "semver@npm:7.6.0" dependencies: lru-cache: ^6.0.0 bin: semver: bin/semver.js checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c languageName: node linkType: hard "semver@npm:7.6.2, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": version: 7.6.2 resolution: "semver@npm:7.6.2" bin: semver: bin/semver.js checksum: 40f6a95101e8d854357a644da1b8dd9d93ce786d5c6a77227bc69dbb17bea83d0d1d1d7c4cd5920a6df909f48e8bd8a5909869535007f90278289f2451d0292d languageName: node linkType: hard "semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: semver: bin/semver.js checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 languageName: node linkType: hard "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" dependencies: debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 fresh: 0.5.2 http-errors: 2.0.0 mime: 1.6.0 ms: 2.1.3 on-finished: 2.4.1 range-parser: ~1.2.1 statuses: 2.0.1 checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 languageName: node linkType: hard "serialize-javascript@npm:6.0.0": version: 6.0.0 resolution: "serialize-javascript@npm:6.0.0" dependencies: randombytes: ^2.1.0 checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 languageName: node linkType: hard "serialize-javascript@npm:^6.0.1": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" dependencies: randombytes: ^2.1.0 checksum: c4839c6206c1d143c0f80763997a361310305751171dd95e4b57efee69b8f6edd8960a0b7fbfc45042aadff98b206d55428aee0dc276efe54f100899c7fa8ab7 languageName: node linkType: hard "serve-static@npm:1.15.0": version: 1.15.0 resolution: "serve-static@npm:1.15.0" dependencies: encodeurl: ~1.0.2 escape-html: ~1.0.3 parseurl: ~1.3.3 send: 0.18.0 checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d languageName: node linkType: hard "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 languageName: node linkType: hard "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" dependencies: define-data-property: ^1.1.4 es-errors: ^1.3.0 function-bind: ^1.1.2 get-intrinsic: ^1.2.4 gopd: ^1.0.1 has-property-descriptors: ^1.0.2 checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 languageName: node linkType: hard "set-function-name@npm:^2.0.1": version: 2.0.2 resolution: "set-function-name@npm:2.0.2" dependencies: define-data-property: ^1.1.4 es-errors: ^1.3.0 functions-have-names: ^1.2.3 has-property-descriptors: ^1.0.2 checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f languageName: node linkType: hard "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89 languageName: node linkType: hard "shallow-clone@npm:^3.0.0": version: 3.0.1 resolution: "shallow-clone@npm:3.0.1" dependencies: kind-of: ^6.0.2 checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 languageName: node linkType: hard "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0" dependencies: shebang-regex: ^1.0.0 checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908 languageName: node linkType: hard "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" dependencies: shebang-regex: ^3.0.0 checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa languageName: node linkType: hard "shebang-regex@npm:^1.0.0": version: 1.0.0 resolution: "shebang-regex@npm:1.0.0" checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372 languageName: node linkType: hard "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 languageName: node linkType: hard "shell-quote@npm:^1.6.1": version: 1.8.1 resolution: "shell-quote@npm:1.8.1" checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b languageName: node linkType: hard "shiki@npm:^0.14.1": version: 0.14.7 resolution: "shiki@npm:0.14.7" dependencies: ansi-sequence-parser: ^1.1.0 jsonc-parser: ^3.2.0 vscode-oniguruma: ^1.7.0 vscode-textmate: ^8.0.0 checksum: 2aec3b3519df977c4391df9e1825cb496e9a4d7e11395f05a0da77e4fa2f7c3d9d6e6ee94029ac699533017f2b25637ee68f6d39f05f311535c2704d0329b520 languageName: node linkType: hard "side-channel@npm:^1.0.4, side-channel@npm:^1.0.6": version: 1.0.6 resolution: "side-channel@npm:1.0.6" dependencies: call-bind: ^1.0.7 es-errors: ^1.3.0 get-intrinsic: ^1.2.4 object-inspect: ^1.13.1 checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 languageName: node linkType: hard "signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 languageName: node linkType: hard "signal-exit@npm:^4.0.1": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 languageName: node linkType: hard "simple-swizzle@npm:^0.2.2": version: 0.2.2 resolution: "simple-swizzle@npm:0.2.2" dependencies: is-arrayish: ^0.3.1 checksum: a7f3f2ab5c76c4472d5c578df892e857323e452d9f392e1b5cf74b74db66e6294a1e1b8b390b519fa1b96b5b613f2a37db6cffef52c3f1f8f3c5ea64eb2d54c0 languageName: node linkType: hard "sinon-chai@npm:^3.3.0": version: 3.7.0 resolution: "sinon-chai@npm:3.7.0" peerDependencies: chai: ^4.0.0 sinon: ">=4.0.0" checksum: 49a353d8eb66cc6db35ac452f6965c72778aa090d1f036dd1e54ba88594b1c3f314b1a403eaff22a4e314f94dc92d9c7d03cbb88c21d89e814293bf5b299964d languageName: node linkType: hard "sinon@npm:^12.0.1": version: 12.0.1 resolution: "sinon@npm:12.0.1" dependencies: "@sinonjs/commons": ^1.8.3 "@sinonjs/fake-timers": ^8.1.0 "@sinonjs/samsam": ^6.0.2 diff: ^5.0.0 nise: ^5.1.0 supports-color: ^7.2.0 checksum: a264310c28df43e923a6e223c719953b7bd829b8e2fee7fe8b40154647e350b6bb4c18009be6f193e50892687f8e8c5d987d666fc3f6e4e78a9f807211ea365f languageName: node linkType: hard "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c languageName: node linkType: hard "slash@npm:^4.0.0": version: 4.0.0 resolution: "slash@npm:4.0.0" checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d languageName: node linkType: hard "slice-ansi@npm:^3.0.0": version: 3.0.0 resolution: "slice-ansi@npm:3.0.0" dependencies: ansi-styles: ^4.0.0 astral-regex: ^2.0.0 is-fullwidth-code-point: ^3.0.0 checksum: 5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24 languageName: node linkType: hard "slice-ansi@npm:^4.0.0": version: 4.0.0 resolution: "slice-ansi@npm:4.0.0" dependencies: ansi-styles: ^4.0.0 astral-regex: ^2.0.0 is-fullwidth-code-point: ^3.0.0 checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 languageName: node linkType: hard "slice-ansi@npm:^5.0.0": version: 5.0.0 resolution: "slice-ansi@npm:5.0.0" dependencies: ansi-styles: ^6.0.0 is-fullwidth-code-point: ^4.0.0 checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e languageName: node linkType: hard "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b languageName: node linkType: hard "socket.io-adapter@npm:~2.5.2": version: 2.5.4 resolution: "socket.io-adapter@npm:2.5.4" dependencies: debug: ~4.3.4 ws: ~8.11.0 checksum: 7dea1d606a039d494f31fe06a9d84e4318704e3e61c1c5b917befe13f03dd9ee1a6564775a5ee92a444e8caaa83555e850e0da855cefa436d18cdbd638b3bb51 languageName: node linkType: hard "socket.io-parser@npm:~4.2.4": version: 4.2.4 resolution: "socket.io-parser@npm:4.2.4" dependencies: "@socket.io/component-emitter": ~3.1.0 debug: ~4.3.1 checksum: 61540ef99af33e6a562b9effe0fad769bcb7ec6a301aba5a64b3a8bccb611a0abdbe25f469933ab80072582006a78ca136bf0ad8adff9c77c9953581285e2263 languageName: node linkType: hard "socket.io@npm:^4.7.2": version: 4.7.5 resolution: "socket.io@npm:4.7.5" dependencies: accepts: ~1.3.4 base64id: ~2.0.0 cors: ~2.8.5 debug: ~4.3.2 engine.io: ~6.5.2 socket.io-adapter: ~2.5.2 socket.io-parser: ~4.2.4 checksum: b8b57216152cf230bdcb77b5450e124ebe1fee7482eeb50a6ef760b69f2f5a064e9b8640ce9c1efc5c9e081f5d797d3f6ff3f81606e19ddaf5d4114aad9ec7d3 languageName: node linkType: hard "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" dependencies: agent-base: ^6.0.2 debug: ^4.3.3 socks: ^2.6.2 checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 languageName: node linkType: hard "socks-proxy-agent@npm:^8.0.3": version: 8.0.3 resolution: "socks-proxy-agent@npm:8.0.3" dependencies: agent-base: ^7.1.1 debug: ^4.3.4 socks: ^2.7.1 checksum: 8fab38821c327c190c28f1658087bc520eb065d55bc07b4a0fdf8d1e0e7ad5d115abbb22a95f94f944723ea969dd771ad6416b1e3cde9060c4c71f705c8b85c5 languageName: node linkType: hard "socks@npm:^2.6.2, socks@npm:^2.7.1": version: 2.8.3 resolution: "socks@npm:2.8.3" dependencies: ip-address: ^9.0.5 smart-buffer: ^4.2.0 checksum: 7a6b7f6eedf7482b9e4597d9a20e09505824208006ea8f2c49b71657427f3c137ca2ae662089baa73e1971c62322d535d9d0cf1c9235cf6f55e315c18203eadd languageName: node linkType: hard "sonic-boom@npm:3.8.0": version: 3.8.0 resolution: "sonic-boom@npm:3.8.0" dependencies: atomic-sleep: ^1.0.0 checksum: c21ece61a0cabb78db96547aecb4e9086eba2db2d53030221ed07215bfda2d25bb02906366ea2584cbe73d236dd7dd109122d3d7287914b76a9630e0a36ad819 languageName: node linkType: hard "sonic-boom@npm:^2.2.1": version: 2.8.0 resolution: "sonic-boom@npm:2.8.0" dependencies: atomic-sleep: ^1.0.0 checksum: c7f9c89f931d7f60f8e0741551a729f0d81e6dc407a99420fc847a9a4c25af048a615b1188ab3c4f1fb3708fe4904973ddab6ebcc8ed5b78b50ab81a99045910 languageName: node linkType: hard "sonic-boom@npm:^3.7.0": version: 3.8.1 resolution: "sonic-boom@npm:3.8.1" dependencies: atomic-sleep: ^1.0.0 checksum: 79c90d7a2f928489fd3d4b68d8f8d747a426ca6ccf83c3b102b36f899d4524463dd310982ab7ab6d6bcfd34b7c7c281ad25e495ad71fbff8fd6fa86d6273fc6b languageName: node linkType: hard "sort-keys@npm:^2.0.0": version: 2.0.0 resolution: "sort-keys@npm:2.0.0" dependencies: is-plain-obj: ^1.0.0 checksum: f0fd827fa9f8f866e98588d2a38c35209afbf1e9a05bb0e4ceeeb8bbf31d923c8902b0a7e0f561590ddb65e58eba6a74f74b991c85360bcc52e83a3f0d1cffd7 languageName: node linkType: hard "sort-keys@npm:^4.0.0": version: 4.2.0 resolution: "sort-keys@npm:4.2.0" dependencies: is-plain-obj: ^2.0.0 checksum: 1535ffd5a789259fc55107d5c3cec09b3e47803a9407fcaae37e1b9e0b813762c47dfee35b6e71e20ca7a69798d0a4791b2058a07f6cab5ef17b2dae83cedbda languageName: node linkType: hard "sort-object-keys@npm:^1.1.3": version: 1.1.3 resolution: "sort-object-keys@npm:1.1.3" checksum: abea944d6722a1710a1aa6e4f9509da085d93d5fc0db23947cb411eedc7731f80022ce8fa68ed83a53dd2ac7441fcf72a3f38c09b3d9bbc4ff80546aa2e151ad languageName: node linkType: hard "sort-package-json@npm:^2.1.0": version: 2.10.0 resolution: "sort-package-json@npm:2.10.0" dependencies: detect-indent: ^7.0.1 detect-newline: ^4.0.0 get-stdin: ^9.0.0 git-hooks-list: ^3.0.0 globby: ^13.1.2 is-plain-obj: ^4.1.0 semver: ^7.6.0 sort-object-keys: ^1.1.3 bin: sort-package-json: cli.js checksum: 095e5c5075c9799d3d6174f82e963fa3be0a1d193af0be656b651d2e5b563dfc794f46c7aa74e3fc761de3fba76951ad2d3de716cf50b3aca4e938f63edbfcae languageName: node linkType: hard "sort-package-json@npm:~1.53.1": version: 1.53.1 resolution: "sort-package-json@npm:1.53.1" dependencies: detect-indent: ^6.0.0 detect-newline: 3.1.0 git-hooks-list: 1.0.3 globby: 10.0.0 is-plain-obj: 2.1.0 sort-object-keys: ^1.1.3 bin: sort-package-json: cli.js checksum: 3bf0b1a625566eb061d7d811f4d8b1cebc2c4d85dcb746fa2b27d39703d3d78edead1aa990273b02264af0a618aa6e7edbf24621e280f03bb06418cbd1f07889 languageName: node linkType: hard "source-list-map@npm:^2.0.0": version: 2.0.1 resolution: "source-list-map@npm:2.0.1" checksum: 806efc6f75e7cd31e4815e7a3aaf75a45c704871ea4075cb2eb49882c6fca28998f44fc5ac91adb6de03b2882ee6fb02f951fdc85e6a22b338c32bfe19557938 languageName: node linkType: hard "source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.0": version: 1.2.0 resolution: "source-map-js@npm:1.2.0" checksum: 791a43306d9223792e84293b00458bf102a8946e7188f3db0e4e22d8d530b5f80a4ce468eb5ec0bf585443ad55ebbd630bf379c98db0b1f317fd902500217f97 languageName: node linkType: hard "source-map-loader@npm:^4.0.1": version: 4.0.2 resolution: "source-map-loader@npm:4.0.2" dependencies: iconv-lite: ^0.6.3 source-map-js: ^1.0.2 peerDependencies: webpack: ^5.72.1 checksum: a7d890b2c553709c002f918d1685191884a24de050beab5809b9fac1cbc10fa0efab33ac5ebde43a6eb513b0f6be785e93dd385ea534bbe469c4410a10d8f604 languageName: node linkType: hard "source-map-loader@npm:~1.0.2": version: 1.0.2 resolution: "source-map-loader@npm:1.0.2" dependencies: data-urls: ^2.0.0 iconv-lite: ^0.6.2 loader-utils: ^2.0.0 schema-utils: ^2.7.0 source-map: ^0.6.1 peerDependencies: webpack: ^4.0.0 || ^5.0.0 checksum: 0360b536e904f8fea452d0e122b9199661765229dc62a4b8093cc9d14e985f2ddd146355ede6d11acdd0b9bf4639b364e2526afcf9d3218ed45af63aa5eb053f languageName: node linkType: hard "source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: buffer-from: ^1.0.0 source-map: ^0.6.0 checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137 languageName: node linkType: hard "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d languageName: node linkType: hard "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 languageName: node linkType: hard "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" dependencies: spdx-expression-parse: ^3.0.0 spdx-license-ids: ^3.0.0 checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 languageName: node linkType: hard "spdx-exceptions@npm:^2.1.0": version: 2.5.0 resolution: "spdx-exceptions@npm:2.5.0" checksum: bb127d6e2532de65b912f7c99fc66097cdea7d64c10d3ec9b5e96524dbbd7d20e01cba818a6ddb2ae75e62bb0c63d5e277a7e555a85cbc8ab40044984fa4ae15 languageName: node linkType: hard "spdx-expression-parse@npm:^3.0.0": version: 3.0.1 resolution: "spdx-expression-parse@npm:3.0.1" dependencies: spdx-exceptions: ^2.1.0 spdx-license-ids: ^3.0.0 checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde languageName: node linkType: hard "spdx-license-ids@npm:^3.0.0": version: 3.0.17 resolution: "spdx-license-ids@npm:3.0.17" checksum: 0aba5d16292ff604dd20982200e23b4d425f6ba364765039bdbde2f6c956b9909fce1ad040a897916a5f87388e85e001f90cb64bf706b6e319f3908cfc445a59 languageName: node linkType: hard "split2@npm:^3.0.0": version: 3.2.2 resolution: "split2@npm:3.2.2" dependencies: readable-stream: ^3.0.0 checksum: 8127ddbedd0faf31f232c0e9192fede469913aa8982aa380752e0463b2e31c2359ef6962eb2d24c125bac59eeec76873678d723b1c7ff696216a1cd071e3994a languageName: node linkType: hard "split2@npm:^4.0.0": version: 4.2.0 resolution: "split2@npm:4.2.0" checksum: 05d54102546549fe4d2455900699056580cca006c0275c334611420f854da30ac999230857a85fdd9914dc2109ae50f80fda43d2a445f2aa86eccdc1dfce779d languageName: node linkType: hard "split@npm:^1.0.0": version: 1.0.1 resolution: "split@npm:1.0.1" dependencies: through: 2 checksum: 12f4554a5792c7e98bb3e22b53c63bfa5ef89aa704353e1db608a55b51f5b12afaad6e4a8ecf7843c15f273f43cdadd67b3705cc43d48a75c2cf4641d51f7e7a languageName: node linkType: hard "sprintf-js@npm:^1.1.3": version: 1.1.3 resolution: "sprintf-js@npm:1.1.3" checksum: a3fdac7b49643875b70864a9d9b469d87a40dfeaf5d34d9d0c5b1cda5fd7d065531fcb43c76357d62254c57184a7b151954156563a4d6a747015cfb41021cad0 languageName: node linkType: hard "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 languageName: node linkType: hard "sshpk@npm:^1.14.1": version: 1.18.0 resolution: "sshpk@npm:1.18.0" dependencies: asn1: ~0.2.3 assert-plus: ^1.0.0 bcrypt-pbkdf: ^1.0.0 dashdash: ^1.12.0 ecc-jsbn: ~0.1.1 getpass: ^0.1.1 jsbn: ~0.1.0 safer-buffer: ^2.0.2 tweetnacl: ~0.14.0 bin: sshpk-conv: bin/sshpk-conv sshpk-sign: bin/sshpk-sign sshpk-verify: bin/sshpk-verify checksum: 01d43374eee3a7e37b3b82fdbecd5518cbb2e47ccbed27d2ae30f9753f22bd6ffad31225cb8ef013bc3fb7785e686cea619203ee1439a228f965558c367c3cfa languageName: node linkType: hard "ssri@npm:^10.0.0": version: 10.0.6 resolution: "ssri@npm:10.0.6" dependencies: minipass: ^7.0.3 checksum: 4603d53a05bcd44188747d38f1cc43833b9951b5a1ee43ba50535bdfc5fe4a0897472dbe69837570a5417c3c073377ef4f8c1a272683b401857f72738ee57299 languageName: node linkType: hard "ssri@npm:^9.0.0, ssri@npm:^9.0.1": version: 9.0.1 resolution: "ssri@npm:9.0.1" dependencies: minipass: ^3.1.1 checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb languageName: node linkType: hard "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb languageName: node linkType: hard "statuses@npm:~1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c languageName: node linkType: hard "steno@npm:^0.4.1": version: 0.4.4 resolution: "steno@npm:0.4.4" dependencies: graceful-fs: ^4.1.3 checksum: 87df4121cf8159fceb3dc925111aff1e237bdea2d37f6684eabbcdea63bfcff79b3234f2a61ffe8de5cf17fcb97e2cf09075a2a98993251f79e2868fe0d5ba1e languageName: node linkType: hard "stream-shift@npm:^1.0.2": version: 1.0.3 resolution: "stream-shift@npm:1.0.3" checksum: a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 languageName: node linkType: hard "streamroller@npm:^3.1.5": version: 3.1.5 resolution: "streamroller@npm:3.1.5" dependencies: date-format: ^4.0.14 debug: ^4.3.4 fs-extra: ^8.1.0 checksum: c1df5612b785ffa4b6bbf16460590b62994c57265bc55a5166eebeeb0daf648e84bc52dc6d57e0cd4e5c7609bda93076753c63ff54589febd1e0b95590f0e443 languageName: node linkType: hard "string-argv@npm:^0.3.1": version: 0.3.2 resolution: "string-argv@npm:0.3.2" checksum: 8703ad3f3db0b2641ed2adbb15cf24d3945070d9a751f9e74a924966db9f325ac755169007233e8985a39a6a292f14d4fee20482989b89b96e473c4221508a0f languageName: node linkType: hard "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: emoji-regex: ^8.0.0 is-fullwidth-code-point: ^3.0.0 strip-ansi: ^6.0.1 checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb languageName: node linkType: hard "string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" dependencies: eastasianwidth: ^0.2.0 emoji-regex: ^9.2.2 strip-ansi: ^7.0.1 checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 languageName: node linkType: hard "string.prototype.padend@npm:^3.0.0": version: 3.1.6 resolution: "string.prototype.padend@npm:3.1.6" dependencies: call-bind: ^1.0.7 define-properties: ^1.2.1 es-abstract: ^1.23.2 es-object-atoms: ^1.0.0 checksum: d9fc23c21bdfb6850756002ef09cebc420882003f29eafbd8322df77a90726bc2a64892d01f94f1fc9fc6f809414fbcbd8615610bb3cddd33512c12b6b3643a2 languageName: node linkType: hard "string.prototype.trim@npm:^1.2.9": version: 1.2.9 resolution: "string.prototype.trim@npm:1.2.9" dependencies: call-bind: ^1.0.7 define-properties: ^1.2.1 es-abstract: ^1.23.0 es-object-atoms: ^1.0.0 checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 languageName: node linkType: hard "string.prototype.trimend@npm:^1.0.8": version: 1.0.8 resolution: "string.prototype.trimend@npm:1.0.8" dependencies: call-bind: ^1.0.7 define-properties: ^1.2.1 es-object-atoms: ^1.0.0 checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd languageName: node linkType: hard "string.prototype.trimstart@npm:^1.0.8": version: 1.0.8 resolution: "string.prototype.trimstart@npm:1.0.8" dependencies: call-bind: ^1.0.7 define-properties: ^1.2.1 es-object-atoms: ^1.0.0 checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 languageName: node linkType: hard "string_decoder@npm:^1.1.1, string_decoder@npm:^1.3.0": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" dependencies: safe-buffer: ~5.2.0 checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 languageName: node linkType: hard "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" dependencies: safe-buffer: ~5.1.0 checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b languageName: node linkType: hard "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: ansi-regex: ^5.0.1 checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c languageName: node linkType: hard "strip-ansi@npm:^3.0.0": version: 3.0.1 resolution: "strip-ansi@npm:3.0.1" dependencies: ansi-regex: ^2.0.0 checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 languageName: node linkType: hard "strip-ansi@npm:^4.0.0": version: 4.0.0 resolution: "strip-ansi@npm:4.0.0" dependencies: ansi-regex: ^3.0.0 checksum: d9186e6c0cf78f25274f6750ee5e4a5725fb91b70fdd79aa5fe648eab092a0ec5b9621b22d69d4534a56319f75d8944efbd84e3afa8d4ad1b9a9491f12c84eca languageName: node linkType: hard "strip-ansi@npm:^7.0.1": version: 7.1.0 resolution: "strip-ansi@npm:7.1.0" dependencies: ansi-regex: ^6.0.1 checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d languageName: node linkType: hard "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b languageName: node linkType: hard "strip-bom@npm:^4.0.0": version: 4.0.0 resolution: "strip-bom@npm:4.0.0" checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 languageName: node linkType: hard "strip-final-newline@npm:^2.0.0": version: 2.0.0 resolution: "strip-final-newline@npm:2.0.0" checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 languageName: node linkType: hard "strip-indent@npm:^3.0.0": version: 3.0.0 resolution: "strip-indent@npm:3.0.0" dependencies: min-indent: ^1.0.0 checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 languageName: node linkType: hard "strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 languageName: node linkType: hard "strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" checksum: 1074ccb63270d32ca28edfb0a281c96b94dc679077828135141f27d52a5a398ef5e78bcf22809d23cadc2b81dfbe345eb5fd8699b385c8b1128907dec4a7d1e1 languageName: node linkType: hard "strong-log-transformer@npm:^2.1.0": version: 2.1.0 resolution: "strong-log-transformer@npm:2.1.0" dependencies: duplexer: ^0.1.1 minimist: ^1.2.0 through: ^2.3.4 bin: sl-log-transformer: bin/sl-log-transformer.js checksum: abf9a4ac143118f26c3a0771b204b02f5cf4fa80384ae158f25e02bfbff761038accc44a7f65869ccd5a5995a7f2c16b1466b83149644ba6cecd3072a8927297 languageName: node linkType: hard "style-loader@npm:^3.3.1, style-loader@npm:~3.3.1": version: 3.3.4 resolution: "style-loader@npm:3.3.4" peerDependencies: webpack: ^5.0.0 checksum: caac3f2fe2c3c89e49b7a2a9329e1cfa515ecf5f36b9c4885f9b218019fda207a9029939b2c35821dec177a264a007e7c391ccdd3ff7401881ce6287b9c8f38b languageName: node linkType: hard "style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": version: 4.1.2 resolution: "style-mod@npm:4.1.2" checksum: 7c5c3e82747f9bcf5f288d8d07f50848e4630fe5ff7bfe4d94cc87d6b6a2588227cbf21b4c792ac6406e5852293300a75e710714479a5c59a06af677f0825ef8 languageName: node linkType: hard "supports-color@npm:8.1.1, supports-color@npm:^8.0.0": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: has-flag: ^4.0.0 checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 languageName: node linkType: hard "supports-color@npm:^2.0.0": version: 2.0.0 resolution: "supports-color@npm:2.0.0" checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 languageName: node linkType: hard "supports-color@npm:^5.3.0, supports-color@npm:^5.4.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" dependencies: has-flag: ^3.0.0 checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac languageName: node linkType: hard "supports-color@npm:^7.1.0, supports-color@npm:^7.2.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" dependencies: has-flag: ^4.0.0 checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a languageName: node linkType: hard "supports-color@npm:^9.2.2": version: 9.4.0 resolution: "supports-color@npm:9.4.0" checksum: cb8ff8daeaf1db642156f69a9aa545b6c01dd9c4def4f90a49f46cbf24be0c245d392fcf37acd119cd1819b99dad2cc9b7e3260813f64bcfd7f5b18b5a1eefb8 languageName: node linkType: hard "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae languageName: node linkType: hard "tabbable@npm:^5.2.0": version: 5.3.3 resolution: "tabbable@npm:5.3.3" checksum: 1aa56e1bb617cc10616c407f4e756f0607f3e2d30f9803664d70b85db037ca27e75918ed1c71443f3dc902e21dc9f991ce4b52d63a538c9b69b3218d3babcd70 languageName: node linkType: hard "tapable@npm:^2.1.1, tapable@npm:^2.2.0, tapable@npm:^2.2.1": version: 2.2.1 resolution: "tapable@npm:2.2.1" checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 languageName: node linkType: hard "tar-stream@npm:~2.2.0": version: 2.2.0 resolution: "tar-stream@npm:2.2.0" dependencies: bl: ^4.0.3 end-of-stream: ^1.4.1 fs-constants: ^1.0.0 inherits: ^2.0.3 readable-stream: ^3.1.1 checksum: 699831a8b97666ef50021c767f84924cfee21c142c2eb0e79c63254e140e6408d6d55a065a2992548e72b06de39237ef2b802b99e3ece93ca3904a37622a66f3 languageName: node linkType: hard "tar@npm:^6.0.5, tar@npm:^6.1.0, tar@npm:^6.1.11, tar@npm:^6.1.2": version: 6.2.1 resolution: "tar@npm:6.2.1" dependencies: chownr: ^2.0.0 fs-minipass: ^2.0.0 minipass: ^5.0.0 minizlib: ^2.1.1 mkdirp: ^1.0.3 yallist: ^4.0.0 checksum: f1322768c9741a25356c11373bce918483f40fa9a25c69c59410c8a1247632487edef5fe76c5f12ac51a6356d2f1829e96d2bc34098668a2fc34d76050ac2b6c languageName: node linkType: hard "temp-dir@npm:^1.0.0": version: 1.0.0 resolution: "temp-dir@npm:1.0.0" checksum: cb2b58ddfb12efa83e939091386ad73b425c9a8487ea0095fe4653192a40d49184a771a1beba99045fbd011e389fd563122d79f54f82be86a55620667e08a6b2 languageName: node linkType: hard "terser-webpack-plugin@npm:^5.3.10, terser-webpack-plugin@npm:^5.3.7": version: 5.3.10 resolution: "terser-webpack-plugin@npm:5.3.10" dependencies: "@jridgewell/trace-mapping": ^0.3.20 jest-worker: ^27.4.5 schema-utils: ^3.1.1 serialize-javascript: ^6.0.1 terser: ^5.26.0 peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: "@swc/core": optional: true esbuild: optional: true uglify-js: optional: true checksum: bd6e7596cf815f3353e2a53e79cbdec959a1b0276f5e5d4e63e9d7c3c5bb5306df567729da287d1c7b39d79093e56863c569c42c6c24cc34c76aa313bd2cbcea languageName: node linkType: hard "terser@npm:^5.26.0": version: 5.31.0 resolution: "terser@npm:5.31.0" dependencies: "@jridgewell/source-map": ^0.3.3 acorn: ^8.8.2 commander: ^2.20.0 source-map-support: ~0.5.20 bin: terser: bin/terser checksum: 48f14229618866bba8a9464e9d0e7fdcb6b6488b3a6c4690fcf4d48df65bf45959d5ae8c02f1a0b3f3dd035a9ae340b715e1e547645b112dc3963daa3564699a languageName: node linkType: hard "text-extensions@npm:^1.0.0": version: 1.9.0 resolution: "text-extensions@npm:1.9.0" checksum: 56a9962c1b62d39b2bcb369b7558ca85c1b55e554b38dfd725edcc0a1babe5815782a60c17ff6b839093b163dfebb92b804208aaaea616ec7571c8059ae0cf44 languageName: node linkType: hard "text-table@npm:^0.2.0": version: 0.2.0 resolution: "text-table@npm:0.2.0" checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a languageName: node linkType: hard "thenby@npm:^1.3.4": version: 1.3.4 resolution: "thenby@npm:1.3.4" checksum: 2d2ef3d67fa851467f328f1373da75a760d6a469d45f667570703894656057a666a1fb488398ce7830606253dba24eb55a063d6ce939e9e872a2b9d2cdd68c2c languageName: node linkType: hard "thread-stream@npm:^0.15.1": version: 0.15.2 resolution: "thread-stream@npm:0.15.2" dependencies: real-require: ^0.1.0 checksum: 0547795a8f357ba1ac0dba29c71f965182e29e21752951a04a7167515ee37524bfba6c410f31e65a01a8d3e5b93400b812889aa09523e38ce4d744c894ffa6c0 languageName: node linkType: hard "thread-stream@npm:^2.0.0": version: 2.7.0 resolution: "thread-stream@npm:2.7.0" dependencies: real-require: ^0.2.0 checksum: 75ab019cda628344c7779e5f5a88f7759764efd29d320327ad2e6c2622778b5f1c43a3966d76a9ee5744086d61c680b413548f5521030f9e9055487684436165 languageName: node linkType: hard "through2@npm:^2.0.0": version: 2.0.5 resolution: "through2@npm:2.0.5" dependencies: readable-stream: ~2.3.6 xtend: ~4.0.1 checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 languageName: node linkType: hard "through2@npm:^4.0.0": version: 4.0.2 resolution: "through2@npm:4.0.2" dependencies: readable-stream: 3 checksum: ac7430bd54ccb7920fd094b1c7ff3e1ad6edd94202e5528331253e5fde0cc56ceaa690e8df9895de2e073148c52dfbe6c4db74cacae812477a35660090960cc0 languageName: node linkType: hard "through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.4, through@npm:^2.3.6, through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd languageName: node linkType: hard "tinylogic@npm:^2.0.0": version: 2.0.0 resolution: "tinylogic@npm:2.0.0" checksum: b966cbb41241a048095fb9e685d5e2020475fdea2c65b4ae51e5dee48964860a4505d987503c004b8a76e96b64c7da2f49954dd36c691d559c315d878ce7da29 languageName: node linkType: hard "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" dependencies: os-tmpdir: ~1.0.2 checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 languageName: node linkType: hard "tmp@npm:^0.2.1, tmp@npm:~0.2.1": version: 0.2.3 resolution: "tmp@npm:0.2.3" checksum: 73b5c96b6e52da7e104d9d44afb5d106bb1e16d9fa7d00dbeb9e6522e61b571fbdb165c756c62164be9a3bbe192b9b268c236d370a2a0955c7689cd2ae377b95 languageName: node linkType: hard "to-fast-properties@npm:^1.0.3": version: 1.0.3 resolution: "to-fast-properties@npm:1.0.3" checksum: bd0abb58c4722851df63419de3f6d901d5118f0440d3f71293ed776dd363f2657edaaf2dc470e3f6b7b48eb84aa411193b60db8a4a552adac30de9516c5cc580 languageName: node linkType: hard "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 languageName: node linkType: hard "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" dependencies: is-number: ^7.0.0 checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed languageName: node linkType: hard "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45 languageName: node linkType: hard "toposort@npm:^2.0.2": version: 2.0.2 resolution: "toposort@npm:2.0.2" checksum: d64c74b570391c9432873f48e231b439ee56bc49f7cb9780b505cfdf5cb832f808d0bae072515d93834dd6bceca5bb34448b5b4b408335e4d4716eaf68195dcb languageName: node linkType: hard "tough-cookie@npm:^4.1.3": version: 4.1.4 resolution: "tough-cookie@npm:4.1.4" dependencies: psl: ^1.1.33 punycode: ^2.1.1 universalify: ^0.2.0 url-parse: ^1.5.3 checksum: 5815059f014c31179a303c673f753f7899a6fce94ac93712c88ea5f3c26e0c042b5f0c7a599a00f8e0feeca4615dba75c3dffc54f3c1a489978aa8205e09307c languageName: node linkType: hard "tr46@npm:^2.1.0": version: 2.1.0 resolution: "tr46@npm:2.1.0" dependencies: punycode: ^2.1.1 checksum: ffe6049b9dca3ae329b059aada7f515b0f0064c611b39b51ff6b53897e954650f6f63d9319c6c008d36ead477c7b55e5f64c9dc60588ddc91ff720d64eb710b3 languageName: node linkType: hard "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 languageName: node linkType: hard "treeify@npm:^1.1.0": version: 1.1.0 resolution: "treeify@npm:1.1.0" checksum: aa00dded220c1dd052573bd6fc2c52862f09870851a284f0d3650d72bf913ba9b4f6b824f4f1ab81899bae29375f4266b07fe47cbf82343a1efa13cc09ce87af languageName: node linkType: hard "treeverse@npm:^2.0.0": version: 2.0.0 resolution: "treeverse@npm:2.0.0" checksum: 3c6b2b890975a4d42c86b9a0f1eb932b4450db3fa874be5c301c4f5e306fd76330c6a490cf334b0937b3a44b049787ba5d98c88bc7b140f34fdb3ab1f83e5269 languageName: node linkType: hard "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 languageName: node linkType: hard "trim-right@npm:^1.0.1": version: 1.0.1 resolution: "trim-right@npm:1.0.1" checksum: 9120af534e006a7424a4f9358710e6e707887b6ccf7ea69e50d6ac6464db1fe22268400def01752f09769025d480395159778153fb98d4a2f6f40d4cf5d4f3b6 languageName: node linkType: hard "tsconfig-paths@npm:^4.1.2": version: 4.2.0 resolution: "tsconfig-paths@npm:4.2.0" dependencies: json5: ^2.2.2 minimist: ^1.2.6 strip-bom: ^3.0.0 checksum: 28c5f7bbbcabc9dabd4117e8fdc61483f6872a1c6b02a4b1c4d68c5b79d06896c3cc9547610c4c3ba64658531caa2de13ead1ea1bf321c7b53e969c4752b98c7 languageName: node linkType: hard "tslib@npm:^1.13.0, tslib@npm:^1.8.1": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd languageName: node linkType: hard "tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.4.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" dependencies: tslib: ^1.8.1 peerDependencies: typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 languageName: node linkType: hard "tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" dependencies: safe-buffer: ^5.0.1 checksum: 05f6510358f8afc62a057b8b692f05d70c1782b70db86d6a1e0d5e28a32389e52fa6e7707b6c5ecccacc031462e4bc35af85ecfe4bbc341767917b7cf6965711 languageName: node linkType: hard "tunnel@npm:^0.0.6": version: 0.0.6 resolution: "tunnel@npm:0.0.6" checksum: c362948df9ad34b649b5585e54ce2838fa583aa3037091aaed66793c65b423a264e5229f0d7e9a95513a795ac2bd4cb72cda7e89a74313f182c1e9ae0b0994fa languageName: node linkType: hard "tweetnacl@npm:^0.14.3, tweetnacl@npm:~0.14.0": version: 0.14.5 resolution: "tweetnacl@npm:0.14.5" checksum: 6061daba1724f59473d99a7bb82e13f211cdf6e31315510ae9656fefd4779851cb927adad90f3b488c8ed77c106adc0421ea8055f6f976ff21b27c5c4e918487 languageName: node linkType: hard "typanion@npm:^3.8.0": version: 3.14.0 resolution: "typanion@npm:3.14.0" checksum: fc0590d02c13c659eb1689e8adf7777e6c00dc911377e44cd36fe1b1271cfaca71547149f12cdc275058c0de5562a14e5273adbae66d47e6e0320e36007f5912 languageName: node linkType: hard "type-check@npm:^0.4.0, type-check@npm:~0.4.0": version: 0.4.0 resolution: "type-check@npm:0.4.0" dependencies: prelude-ls: ^1.2.1 checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a languageName: node linkType: hard "type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 languageName: node linkType: hard "type-fest@npm:^0.18.0": version: 0.18.1 resolution: "type-fest@npm:0.18.1" checksum: e96dcee18abe50ec82dab6cbc4751b3a82046da54c52e3b2d035b3c519732c0b3dd7a2fa9df24efd1a38d953d8d4813c50985f215f1957ee5e4f26b0fe0da395 languageName: node linkType: hard "type-fest@npm:^0.20.2": version: 0.20.2 resolution: "type-fest@npm:0.20.2" checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 languageName: node linkType: hard "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 languageName: node linkType: hard "type-fest@npm:^0.4.1": version: 0.4.1 resolution: "type-fest@npm:0.4.1" checksum: 25f882d9cc2f24af7a0a529157f96dead157894c456bfbad16d48f990c43b470dfb79848e8d9c03fe1be72a7d169e44f6f3135b54628393c66a6189c5dc077f7 languageName: node linkType: hard "type-fest@npm:^0.6.0": version: 0.6.0 resolution: "type-fest@npm:0.6.0" checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f languageName: node linkType: hard "type-fest@npm:^0.8.1": version: 0.8.1 resolution: "type-fest@npm:0.8.1" checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 languageName: node linkType: hard "type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: media-typer: 0.3.0 mime-types: ~2.1.24 checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657 languageName: node linkType: hard "typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" dependencies: call-bind: ^1.0.7 es-errors: ^1.3.0 is-typed-array: ^1.1.13 checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b languageName: node linkType: hard "typed-array-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "typed-array-byte-length@npm:1.0.1" dependencies: call-bind: ^1.0.7 for-each: ^0.3.3 gopd: ^1.0.1 has-proto: ^1.0.3 is-typed-array: ^1.1.13 checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d languageName: node linkType: hard "typed-array-byte-offset@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-byte-offset@npm:1.0.2" dependencies: available-typed-arrays: ^1.0.7 call-bind: ^1.0.7 for-each: ^0.3.3 gopd: ^1.0.1 has-proto: ^1.0.3 is-typed-array: ^1.1.13 checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 languageName: node linkType: hard "typed-array-length@npm:^1.0.6": version: 1.0.6 resolution: "typed-array-length@npm:1.0.6" dependencies: call-bind: ^1.0.7 for-each: ^0.3.3 gopd: ^1.0.1 has-proto: ^1.0.3 is-typed-array: ^1.1.13 possible-typed-array-names: ^1.0.0 checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c languageName: node linkType: hard "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" dependencies: is-typedarray: ^1.0.0 checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 languageName: node linkType: hard "typedarray@npm:^0.0.6": version: 0.0.6 resolution: "typedarray@npm:0.0.6" checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 languageName: node linkType: hard "typedoc@npm:~0.23.24": version: 0.23.28 resolution: "typedoc@npm:0.23.28" dependencies: lunr: ^2.3.9 marked: ^4.2.12 minimatch: ^7.1.3 shiki: ^0.14.1 peerDependencies: typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x bin: typedoc: bin/typedoc checksum: 40eb4e207aac1b734e09400cf03f543642cc7b11000895198dd5a0d3166315759ccf4ac30a2915153597c5c186101c72bac2f1fc12b428184a9274d3a0e44c5e languageName: node linkType: hard "typescript@npm:~4.9.4": version: 4.9.5 resolution: "typescript@npm:4.9.5" bin: tsc: bin/tsc tsserver: bin/tsserver checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db languageName: node linkType: hard "typescript@patch:typescript@npm%3A~4.9.4#~builtin": version: 4.9.5 resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=23ec76" bin: tsc: bin/tsc tsserver: bin/tsserver checksum: ab417a2f398380c90a6cf5a5f74badd17866adf57f1165617d6a551f059c3ba0a3e4da0d147b3ac5681db9ac76a303c5876394b13b3de75fdd5b1eaa06181c9d languageName: node linkType: hard "typestyle@npm:^2.0.4": version: 2.4.0 resolution: "typestyle@npm:2.4.0" dependencies: csstype: 3.0.10 free-style: 3.1.0 checksum: 8b4f02c24f67b594f98507b15a753dabd4db5eb0af007e1d310527c64030e11e9464b25b5a6bc65fb5eec9a4459a8336050121ecc29063ac87b8b47a6d698893 languageName: node linkType: hard "ua-parser-js@npm:^0.7.30": version: 0.7.37 resolution: "ua-parser-js@npm:0.7.37" checksum: 9e91a66171aa16c74680cfac84af6ed7ecdeb508ff7c90a55222f56c63172da2d98d2478763e9469c940415fe29c45a56ae51fec1c19a498e7a3b293f7b3b874 languageName: node linkType: hard "uglify-js@npm:^3.1.4": version: 3.17.4 resolution: "uglify-js@npm:3.17.4" bin: uglifyjs: bin/uglifyjs checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 languageName: node linkType: hard "unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" dependencies: call-bind: ^1.0.2 has-bigints: ^1.0.2 has-symbols: ^1.0.3 which-boxed-primitive: ^1.0.2 checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 languageName: node linkType: hard "underscore@npm:>=1.7.0, underscore@npm:^1.8.3": version: 1.13.7 resolution: "underscore@npm:1.13.7" checksum: 174b011af29e4fbe2c70eb2baa8bfab0d0336cf2f5654f364484967bc6264a86224d0134b9176e4235c8cceae00d11839f0fd4824268de04b11c78aca1241684 languageName: node linkType: hard "underscore@npm:>=1.8.3": version: 1.13.6 resolution: "underscore@npm:1.13.6" checksum: d5cedd14a9d0d91dd38c1ce6169e4455bb931f0aaf354108e47bd46d3f2da7464d49b2171a5cf786d61963204a42d01ea1332a903b7342ad428deaafaf70ec36 languageName: node linkType: hard "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 languageName: node linkType: hard "union@npm:~0.5.0": version: 0.5.0 resolution: "union@npm:0.5.0" dependencies: qs: ^6.4.0 checksum: 021530d02363fb7470ce45d4cb06ae28a97d5a245666e6d0fca6bab0673bea8c7988e7d2f8046acfbab120908cedcb099ca216b357d4483bcd96518b39101be0 languageName: node linkType: hard "uniq@npm:^1.0.1": version: 1.0.1 resolution: "uniq@npm:1.0.1" checksum: 8206535f83745ea83f9da7035f3b983fd6ed5e35b8ed7745441944e4065b616bc67cf0d0a23a86b40ee0074426f0607f0a138f9b78e124eb6a7a6a6966055709 languageName: node linkType: hard "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" dependencies: unique-slug: ^3.0.0 checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f languageName: node linkType: hard "unique-filename@npm:^3.0.0": version: 3.0.0 resolution: "unique-filename@npm:3.0.0" dependencies: unique-slug: ^4.0.0 checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df languageName: node linkType: hard "unique-slug@npm:^3.0.0": version: 3.0.0 resolution: "unique-slug@npm:3.0.0" dependencies: imurmurhash: ^0.1.4 checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c languageName: node linkType: hard "unique-slug@npm:^4.0.0": version: 4.0.0 resolution: "unique-slug@npm:4.0.0" dependencies: imurmurhash: ^0.1.4 checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 languageName: node linkType: hard "units-css@npm:^0.4.0": version: 0.4.0 resolution: "units-css@npm:0.4.0" dependencies: isnumeric: ^0.2.0 viewport-dimensions: ^0.2.0 checksum: 9986b3f4b1cb366f9afdfd806abc5400390cbf701ac0e9c5f4fcc370b3aa099233fa8b4abfd33f59576cbeba0179a667a9b22b0e9844b1bd2ebc6a8339f4a984 languageName: node linkType: hard "universal-user-agent@npm:^6.0.0": version: 6.0.1 resolution: "universal-user-agent@npm:6.0.1" checksum: fdc8e1ae48a05decfc7ded09b62071f571c7fe0bd793d700704c80cea316101d4eac15cc27ed2bb64f4ce166d2684777c3198b9ab16034f547abea0d3aa1c93c languageName: node linkType: hard "universalify@npm:^0.1.0": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff languageName: node linkType: hard "universalify@npm:^0.2.0": version: 0.2.0 resolution: "universalify@npm:0.2.0" checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 languageName: node linkType: hard "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" checksum: ecd8469fe0db28e7de9e5289d32bd1b6ba8f7183db34f3bfc4ca53c49891c2d6aa05f3fb3936a81285a905cc509fb641a0c3fc131ec786167eff41236ae32e60 languageName: node linkType: hard "unix-crypt-td-js@npm:1.1.4": version: 1.1.4 resolution: "unix-crypt-td-js@npm:1.1.4" checksum: c1bfcd699fa0fa15eac087760e34fdf7e2e686de1c40dde7f550c2429389fd7ef68bf83ce804ce7882551573330832aae32e80be3ce991f7080aabd98f8bd554 languageName: node linkType: hard "unpipe@npm:1.0.0, unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2 languageName: node linkType: hard "upath@npm:^2.0.1": version: 2.0.1 resolution: "upath@npm:2.0.1" checksum: 2db04f24a03ef72204c7b969d6991abec9e2cb06fb4c13a1fd1c59bc33b46526b16c3325e55930a11ff86a77a8cbbcda8f6399bf914087028c5beae21ecdb33c languageName: node linkType: hard "update-browserslist-db@npm:^1.0.13": version: 1.0.16 resolution: "update-browserslist-db@npm:1.0.16" dependencies: escalade: ^3.1.2 picocolors: ^1.0.1 peerDependencies: browserslist: ">= 4.21.0" bin: update-browserslist-db: cli.js checksum: 51b1f7189c9ea5925c80154b0a6fd3ec36106d07858d8f69826427d8edb4735d1801512c69eade38ba0814d7407d11f400d74440bbf3da0309f3d788017f35b2 languageName: node linkType: hard "uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: punycode: ^2.1.0 checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 languageName: node linkType: hard "url-join@npm:^4.0.1": version: 4.0.1 resolution: "url-join@npm:4.0.1" checksum: f74e868bf25dbc8be6a8d7237d4c36bb5b6c62c72e594d5ab1347fe91d6af7ccd9eb5d621e30152e4da45c2e9a26bec21390e911ab54a62d4d82e76028374ee5 languageName: node linkType: hard "url-parse@npm:^1.5.3, url-parse@npm:~1.5.1, url-parse@npm:~1.5.4": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: querystringify: ^2.1.1 requires-port: ^1.0.0 checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf languageName: node linkType: hard "util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 languageName: node linkType: hard "utils-merge@npm:1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080 languageName: node linkType: hard "uuid@npm:^8.3.2": version: 8.3.2 resolution: "uuid@npm:8.3.2" bin: uuid: dist/bin/uuid checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df languageName: node linkType: hard "v8-compile-cache@npm:2.3.0": version: 2.3.0 resolution: "v8-compile-cache@npm:2.3.0" checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e languageName: node linkType: hard "validate-npm-package-license@npm:^3.0.1, validate-npm-package-license@npm:^3.0.4": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" dependencies: spdx-correct: ^3.0.0 spdx-expression-parse: ^3.0.0 checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad languageName: node linkType: hard "validate-npm-package-name@npm:^3.0.0": version: 3.0.0 resolution: "validate-npm-package-name@npm:3.0.0" dependencies: builtins: ^1.0.3 checksum: ce4c68207abfb22c05eedb09ff97adbcedc80304a235a0844f5344f1fd5086aa80e4dbec5684d6094e26e35065277b765c1caef68bcea66b9056761eddb22967 languageName: node linkType: hard "validate-npm-package-name@npm:^4.0.0": version: 4.0.0 resolution: "validate-npm-package-name@npm:4.0.0" dependencies: builtins: ^5.0.0 checksum: a32fd537bad17fcb59cfd58ae95a414d443866020d448ec3b22e8d40550cb585026582a57efbe1f132b882eea4da8ac38ee35f7be0dd72988a3cb55d305a20c1 languageName: node linkType: hard "validate.io-array@npm:^1.0.3": version: 1.0.6 resolution: "validate.io-array@npm:1.0.6" checksum: 54eca83ebc702e3e46499f9d9e77287a95ae25c4e727cd2fafee29c7333b3a36cca0c5d8f090b9406262786de80750fba85e7e7ef41e20bf8cc67d5570de449b languageName: node linkType: hard "validate.io-function@npm:^1.0.2": version: 1.0.2 resolution: "validate.io-function@npm:1.0.2" checksum: e4cce2479a20cb7c42e8630c777fb107059c27bc32925f769e3a73ca5fd62b4892d897b3c80227e14d5fcd1c5b7d05544e0579d63e59f14034c0052cda7f7c44 languageName: node linkType: hard "validate.io-integer-array@npm:^1.0.0": version: 1.0.0 resolution: "validate.io-integer-array@npm:1.0.0" dependencies: validate.io-array: ^1.0.3 validate.io-integer: ^1.0.4 checksum: 5f6d7fab8df7d2bf546a05e830201768464605539c75a2c2417b632b4411a00df84b462f81eac75e1be95303e7e0ac92f244c137424739f4e15cd21c2eb52c7f languageName: node linkType: hard "validate.io-integer@npm:^1.0.4": version: 1.0.5 resolution: "validate.io-integer@npm:1.0.5" dependencies: validate.io-number: ^1.0.3 checksum: 88b3f8bb5a5277a95305d64abbfc437079220ce4f57a148cc6113e7ccec03dd86b10a69d413982602aa90a62b8d516148a78716f550dcd3aff863ac1c2a7a5e6 languageName: node linkType: hard "validate.io-number@npm:^1.0.3": version: 1.0.3 resolution: "validate.io-number@npm:1.0.3" checksum: 42418aeb6c969efa745475154fe576809b02eccd0961aad0421b090d6e7a12d23a3e28b0d5dddd2c6347c1a6bdccb82bba5048c716131cd20207244d50e07282 languageName: node linkType: hard "validator@npm:13.11.0": version: 13.11.0 resolution: "validator@npm:13.11.0" checksum: d1e0c27022681420756da25bc03eb08d5f0c66fb008f8ff02ebc95812b77c6be6e03d3bd05cf80ca702e23eeb73dadd66b4b3683173ea2a0bc7cc72820bee131 languageName: node linkType: hard "validator@npm:13.12.0": version: 13.12.0 resolution: "validator@npm:13.12.0" checksum: fb8f070724770b1449ea1a968605823fdb112dbd10507b2802f8841cda3e7b5c376c40f18c84e6a7b59de320a06177e471554101a85f1fa8a70bac1a84e48adf languageName: node linkType: hard "vary@npm:^1, vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b languageName: node linkType: hard "verdaccio-audit@npm:12.0.0-next-7.15": version: 12.0.0-next-7.15 resolution: "verdaccio-audit@npm:12.0.0-next-7.15" dependencies: "@verdaccio/config": 7.0.0-next-7.15 "@verdaccio/core": 7.0.0-next-7.15 express: 4.18.3 https-proxy-agent: 5.0.1 node-fetch: cjs checksum: 8ac6853ac5b2f6cc79b509c2a6c38c3f7ab77ae865bb79e2e37651110185303f4b67e4c6323ca0d80a422fd49b8375f8ca7c4c2bba53bbd235abefcea099db2b languageName: node linkType: hard "verdaccio-htpasswd@npm:12.0.0-next-7.15": version: 12.0.0-next-7.15 resolution: "verdaccio-htpasswd@npm:12.0.0-next-7.15" dependencies: "@verdaccio/core": 7.0.0-next-7.15 "@verdaccio/file-locking": 12.0.0-next.1 apache-md5: 1.1.8 bcryptjs: 2.4.3 core-js: 3.35.0 debug: 4.3.4 http-errors: 2.0.0 unix-crypt-td-js: 1.1.4 checksum: f8b5cc82df29992d807e9398f56e9464a9c06caad975d3c332b4d2607b77f8d34e8d665801861b995dea0b6a6280c8376bcaca80dafc1630e1906c3e0c4794da languageName: node linkType: hard "verdaccio@npm:^5.25.0": version: 5.31.0 resolution: "verdaccio@npm:5.31.0" dependencies: "@cypress/request": 3.0.1 "@verdaccio/auth": 7.0.0-next-7.15 "@verdaccio/config": 7.0.0-next-7.15 "@verdaccio/core": 7.0.0-next-7.15 "@verdaccio/local-storage-legacy": 11.0.2 "@verdaccio/logger-7": 7.0.0-next-7.15 "@verdaccio/middleware": 7.0.0-next-7.15 "@verdaccio/search-indexer": 7.0.0-next-7.2 "@verdaccio/signature": 7.0.0-next-7.5 "@verdaccio/streams": 10.2.1 "@verdaccio/tarball": 12.0.0-next-7.15 "@verdaccio/ui-theme": 7.0.0-next-7.15 "@verdaccio/url": 12.0.0-next-7.15 "@verdaccio/utils": 7.0.0-next-7.15 JSONStream: 1.3.5 async: 3.2.5 clipanion: 3.2.1 compression: 1.7.4 cors: 2.8.5 debug: ^4.3.4 envinfo: 7.13.0 express: 4.19.2 express-rate-limit: 5.5.1 fast-safe-stringify: 2.1.1 handlebars: 4.7.8 js-yaml: 4.1.0 jsonwebtoken: 9.0.2 kleur: 4.1.5 lodash: 4.17.21 lru-cache: 7.18.3 mime: 3.0.0 mkdirp: 1.0.4 mv: 2.1.1 pkginfo: 0.4.1 semver: 7.6.2 validator: 13.12.0 verdaccio-audit: 12.0.0-next-7.15 verdaccio-htpasswd: 12.0.0-next-7.15 dependenciesMeta: "@verdaccio/signature@7.0.0-next-7.5": unplugged: true bin: verdaccio: bin/verdaccio checksum: a8fc4e482069da3f2b4ef3b42f2a299eb589ce70f1e556277ca1b3d6574420b2e06f1ebf013f413e8f904f38822f3b181f33ae54bf5f6d32b29c00a409461779 languageName: node linkType: hard "verror@npm:1.10.0": version: 1.10.0 resolution: "verror@npm:1.10.0" dependencies: assert-plus: ^1.0.0 core-util-is: 1.0.2 extsprintf: ^1.2.0 checksum: c431df0bedf2088b227a4e051e0ff4ca54df2c114096b0c01e1cbaadb021c30a04d7dd5b41ab277bcd51246ca135bf931d4c4c796ecae7a4fef6d744ecef36ea languageName: node linkType: hard "viewport-dimensions@npm:^0.2.0": version: 0.2.0 resolution: "viewport-dimensions@npm:0.2.0" checksum: d15424d553e210c363c0907441bd559edc7c969a4962ebcc54b8db032e01f66381fb7912c7eba1aa664fb95701cb89aabe835a14e006c1da991ccd39f44862bd languageName: node linkType: hard "void-elements@npm:^2.0.0": version: 2.0.1 resolution: "void-elements@npm:2.0.1" checksum: 700c07ba9cfa2dff88bb23974b3173118f9ad8107143db9e5d753552be15cf93380954d4e7f7d7bc80e7306c35c3a7fb83ab0ce4d4dcc18abf90ca8b31452126 languageName: node linkType: hard "vscode-jsonrpc@npm:8.2.0": version: 8.2.0 resolution: "vscode-jsonrpc@npm:8.2.0" checksum: f302a01e59272adc1ae6494581fa31c15499f9278df76366e3b97b2236c7c53ebfc71efbace9041cfd2caa7f91675b9e56f2407871a1b3c7f760a2e2ee61484a languageName: node linkType: hard "vscode-jsonrpc@npm:^6.0.0": version: 6.0.0 resolution: "vscode-jsonrpc@npm:6.0.0" checksum: 3a67a56f287e8c449f2d9752eedf91e704dc7b9a326f47fb56ac07667631deb45ca52192e9bccb2ab108764e48409d70fa64b930d46fc3822f75270b111c5f53 languageName: node linkType: hard "vscode-jsonrpc@npm:^8.0.2": version: 8.2.1 resolution: "vscode-jsonrpc@npm:8.2.1" checksum: 2af2c333d73f6587896a7077978b8d4b430e55c674d5dbb90597a84a6647057c1655a3bff398a9b08f1f8ba57dbd2deabf05164315829c297b0debba3b8bc19e languageName: node linkType: hard "vscode-languageserver-protocol@npm:^3.17.0": version: 3.17.5 resolution: "vscode-languageserver-protocol@npm:3.17.5" dependencies: vscode-jsonrpc: 8.2.0 vscode-languageserver-types: 3.17.5 checksum: dfb42d276df5dfea728267885b99872ecff62f6c20448b8539fae71bb196b420f5351c5aca7c1047bf8fb1f89fa94a961dce2bc5bf7e726198f4be0bb86a1e71 languageName: node linkType: hard "vscode-languageserver-types@npm:3.17.5": version: 3.17.5 resolution: "vscode-languageserver-types@npm:3.17.5" checksum: 79b420e7576398d396579ca3a461c9ed70e78db4403cd28bbdf4d3ed2b66a2b4114031172e51fad49f0baa60a2180132d7cb2ea35aa3157d7af3c325528210ac languageName: node linkType: hard "vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0" checksum: 53519d91d90593e6fb080260892e87d447e9b200c4964d766772b5053f5699066539d92100f77f1302c91e8fc5d9c772fbe40fe4c90f3d411a96d5a9b1e63f42 languageName: node linkType: hard "vscode-textmate@npm:^8.0.0": version: 8.0.0 resolution: "vscode-textmate@npm:8.0.0" checksum: 127780dfea89559d70b8326df6ec344cfd701312dd7f3f591a718693812b7852c30b6715e3cfc8b3200a4e2515b4c96f0843c0eacc0a3020969b5de262c2a4bb languageName: node linkType: hard "vscode-ws-jsonrpc@npm:~1.0.2": version: 1.0.2 resolution: "vscode-ws-jsonrpc@npm:1.0.2" dependencies: vscode-jsonrpc: ^8.0.2 checksum: eb2fdb5c96f124326505f06564dfc6584318b748fd6e39b4c0ba16a0d383d13ba0e9433596abdb841428dfc2a5501994c3206723d1cb38c6af5fcac1faf4be26 languageName: node linkType: hard "w3c-keyname@npm:^2.2.4": version: 2.2.8 resolution: "w3c-keyname@npm:2.2.8" checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 languageName: node linkType: hard "walk-up-path@npm:^1.0.0": version: 1.0.0 resolution: "walk-up-path@npm:1.0.0" checksum: b8019ac4fb9ba1576839ec66d2217f62ab773c1cc4c704bfd1c79b1359fef5366f1382d3ab230a66a14c3adb1bf0fe102d1fdaa3437881e69154dfd1432abd32 languageName: node linkType: hard "watchpack@npm:^2.4.1": version: 2.4.1 resolution: "watchpack@npm:2.4.1" dependencies: glob-to-regexp: ^0.4.1 graceful-fs: ^4.1.2 checksum: 5b0179348655dcdf19cac7cb4ff923fdc024d630650c0bf6bec8899cf47c60e19d4f810a88dba692ed0e7f684cf0fcffea86efdbf6c35d81f031e328043b7fab languageName: node linkType: hard "wcwidth@npm:^1.0.0, wcwidth@npm:^1.0.1": version: 1.0.1 resolution: "wcwidth@npm:1.0.1" dependencies: defaults: ^1.0.3 checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c languageName: node linkType: hard "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c languageName: node linkType: hard "webidl-conversions@npm:^6.1.0": version: 6.1.0 resolution: "webidl-conversions@npm:6.1.0" checksum: 1f526507aa491f972a0c1409d07f8444e1d28778dfa269a9971f2e157182f3d496dc33296e4ed45b157fdb3bf535bb90c90bf10c50dcf1dd6caacb2a34cc84fb languageName: node linkType: hard "webpack-cli@npm:^4.7.2": version: 4.10.0 resolution: "webpack-cli@npm:4.10.0" dependencies: "@discoveryjs/json-ext": ^0.5.0 "@webpack-cli/configtest": ^1.2.0 "@webpack-cli/info": ^1.5.0 "@webpack-cli/serve": ^1.7.0 colorette: ^2.0.14 commander: ^7.0.0 cross-spawn: ^7.0.3 fastest-levenshtein: ^1.0.12 import-local: ^3.0.2 interpret: ^2.2.0 rechoir: ^0.7.0 webpack-merge: ^5.7.3 peerDependencies: webpack: 4.x.x || 5.x.x peerDependenciesMeta: "@webpack-cli/generators": optional: true "@webpack-cli/migrate": optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: optional: true bin: webpack-cli: bin/cli.js checksum: 2ff5355ac348e6b40f2630a203b981728834dca96d6d621be96249764b2d0fc01dd54edfcc37f02214d02935de2cf0eefd6ce689d970d154ef493f01ba922390 languageName: node linkType: hard "webpack-cli@npm:^5.0.1": version: 5.1.4 resolution: "webpack-cli@npm:5.1.4" dependencies: "@discoveryjs/json-ext": ^0.5.0 "@webpack-cli/configtest": ^2.1.1 "@webpack-cli/info": ^2.0.2 "@webpack-cli/serve": ^2.0.5 colorette: ^2.0.14 commander: ^10.0.1 cross-spawn: ^7.0.3 envinfo: ^7.7.3 fastest-levenshtein: ^1.0.12 import-local: ^3.0.2 interpret: ^3.1.1 rechoir: ^0.8.0 webpack-merge: ^5.7.3 peerDependencies: webpack: 5.x.x peerDependenciesMeta: "@webpack-cli/generators": optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: optional: true bin: webpack-cli: bin/cli.js checksum: 3a4ad0d0342a6815c850ee4633cc2a8a5dae04f918e7847f180bf24ab400803cf8a8943707ffbed03eb20fe6ce647f996f60a2aade87b0b4a9954da3da172ce0 languageName: node linkType: hard "webpack-merge@npm:^4.1.5": version: 4.2.2 resolution: "webpack-merge@npm:4.2.2" dependencies: lodash: ^4.17.15 checksum: ce58bc8ab53a3dd5d9a0df65684571349eef53372bf8f224521072110485391335b26ab097c5f07829b88d0c146056944149566e5a953f05997b0fe2cbaf8dd6 languageName: node linkType: hard "webpack-merge@npm:^5.7.3, webpack-merge@npm:^5.8.0": version: 5.10.0 resolution: "webpack-merge@npm:5.10.0" dependencies: clone-deep: ^4.0.1 flat: ^5.0.2 wildcard: ^2.0.0 checksum: 1fe8bf5309add7298e1ac72fb3f2090e1dfa80c48c7e79fa48aa60b5961332c7d0d61efa8851acb805e6b91a4584537a347bc106e05e9aec87fa4f7088c62f2f languageName: node linkType: hard "webpack-sources@npm:^1.2.0": version: 1.4.3 resolution: "webpack-sources@npm:1.4.3" dependencies: source-list-map: ^2.0.0 source-map: ~0.6.1 checksum: 37463dad8d08114930f4bc4882a9602941f07c9f0efa9b6bc78738cd936275b990a596d801ef450d022bb005b109b9f451dd087db2f3c9baf53e8e22cf388f79 languageName: node linkType: hard "webpack-sources@npm:^3.2.3": version: 3.2.3 resolution: "webpack-sources@npm:3.2.3" checksum: 989e401b9fe3536529e2a99dac8c1bdc50e3a0a2c8669cbafad31271eadd994bc9405f88a3039cd2e29db5e6d9d0926ceb7a1a4e7409ece021fe79c37d9c4607 languageName: node linkType: hard "webpack@npm:^5, webpack@npm:^5.65.0, webpack@npm:^5.76.1": version: 5.91.0 resolution: "webpack@npm:5.91.0" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^1.0.5 "@webassemblyjs/ast": ^1.12.1 "@webassemblyjs/wasm-edit": ^1.12.1 "@webassemblyjs/wasm-parser": ^1.12.1 acorn: ^8.7.1 acorn-import-assertions: ^1.9.0 browserslist: ^4.21.10 chrome-trace-event: ^1.0.2 enhanced-resolve: ^5.16.0 es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 glob-to-regexp: ^0.4.1 graceful-fs: ^4.2.11 json-parse-even-better-errors: ^2.3.1 loader-runner: ^4.2.0 mime-types: ^2.1.27 neo-async: ^2.6.2 schema-utils: ^3.2.0 tapable: ^2.1.1 terser-webpack-plugin: ^5.3.10 watchpack: ^2.4.1 webpack-sources: ^3.2.3 peerDependenciesMeta: webpack-cli: optional: true bin: webpack: bin/webpack.js checksum: f1073715dbb1ed5c070affef293d800a867708bcbc5aba4d8baee87660e0cf53c55966a6f36fab078d1d6c9567cdcd0a9086bdfb607cab87ea68c6449791b9a3 languageName: node linkType: hard "whatwg-encoding@npm:^2.0.0": version: 2.0.0 resolution: "whatwg-encoding@npm:2.0.0" dependencies: iconv-lite: 0.6.3 checksum: 7087810c410aa9b689cbd6af8773341a53cdc1f3aae2a882c163bd5522ec8ca4cdfc269aef417a5792f411807d5d77d50df4c24e3abb00bb60192858a40cc675 languageName: node linkType: hard "whatwg-mimetype@npm:^2.3.0": version: 2.3.0 resolution: "whatwg-mimetype@npm:2.3.0" checksum: 23eb885940bcbcca4ff841c40a78e9cbb893ec42743993a42bf7aed16085b048b44b06f3402018931687153550f9a32d259dfa524e4f03577ab898b6965e5383 languageName: node linkType: hard "whatwg-url@npm:^5.0.0": version: 5.0.0 resolution: "whatwg-url@npm:5.0.0" dependencies: tr46: ~0.0.3 webidl-conversions: ^3.0.0 checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c languageName: node linkType: hard "whatwg-url@npm:^8.0.0": version: 8.7.0 resolution: "whatwg-url@npm:8.7.0" dependencies: lodash: ^4.7.0 tr46: ^2.1.0 webidl-conversions: ^6.1.0 checksum: a87abcc6cefcece5311eb642858c8fdb234e51ec74196bfacf8def2edae1bfbffdf6acb251646ed6301f8cee44262642d8769c707256125a91387e33f405dd1e languageName: node linkType: hard "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" dependencies: is-bigint: ^1.0.1 is-boolean-object: ^1.1.0 is-number-object: ^1.0.4 is-string: ^1.0.5 is-symbol: ^1.0.3 checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e languageName: node linkType: hard "which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": version: 1.1.15 resolution: "which-typed-array@npm:1.1.15" dependencies: available-typed-arrays: ^1.0.7 call-bind: ^1.0.7 for-each: ^0.3.3 gopd: ^1.0.1 has-tostringtag: ^1.0.2 checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 languageName: node linkType: hard "which@npm:2.0.2, which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" dependencies: isexe: ^2.0.0 bin: node-which: ./bin/node-which checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 languageName: node linkType: hard "which@npm:^1.2.1, which@npm:^1.2.9": version: 1.3.1 resolution: "which@npm:1.3.1" dependencies: isexe: ^2.0.0 bin: which: ./bin/which checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04 languageName: node linkType: hard "which@npm:^3.0.0": version: 3.0.1 resolution: "which@npm:3.0.1" dependencies: isexe: ^2.0.0 bin: node-which: bin/which.js checksum: adf720fe9d84be2d9190458194f814b5e9015ae4b88711b150f30d0f4d0b646544794b86f02c7ebeec1db2029bc3e83a7ff156f542d7521447e5496543e26890 languageName: node linkType: hard "which@npm:^4.0.0": version: 4.0.0 resolution: "which@npm:4.0.0" dependencies: isexe: ^3.1.1 bin: node-which: bin/which.js checksum: f17e84c042592c21e23c8195108cff18c64050b9efb8459589116999ea9da6dd1509e6a1bac3aeebefd137be00fabbb61b5c2bc0aa0f8526f32b58ee2f545651 languageName: node linkType: hard "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5" dependencies: string-width: ^1.0.2 || 2 || 3 || 4 checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 languageName: node linkType: hard "wildcard@npm:^2.0.0": version: 2.0.1 resolution: "wildcard@npm:2.0.1" checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c languageName: node linkType: hard "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb languageName: node linkType: hard "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 languageName: node linkType: hard "worker-loader@npm:^3.0.2": version: 3.0.8 resolution: "worker-loader@npm:3.0.8" dependencies: loader-utils: ^2.0.0 schema-utils: ^3.0.0 peerDependencies: webpack: ^4.0.0 || ^5.0.0 checksum: 84f4a7eeb2a1d8b9704425837e017c91eedfae67ac89e0b866a2dcf283323c1dcabe0258196278b7d5fd0041392da895c8a0c59ddf3a94f1b2e003df68ddfec3 languageName: node linkType: hard "workerpool@npm:6.2.0": version: 6.2.0 resolution: "workerpool@npm:6.2.0" checksum: 3493b4f0ef979a23d2c1583d7ef85f62fc9463cc02f82829d3e7e663b517f8ae9707da0249b382e46ac58986deb0ca2232ee1081713741211bda9254b429c9bb languageName: node linkType: hard "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" dependencies: ansi-styles: ^4.0.0 string-width: ^4.1.0 strip-ansi: ^6.0.0 checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b languageName: node linkType: hard "wrap-ansi@npm:^6.0.1, wrap-ansi@npm:^6.2.0": version: 6.2.0 resolution: "wrap-ansi@npm:6.2.0" dependencies: ansi-styles: ^4.0.0 string-width: ^4.1.0 strip-ansi: ^6.0.0 checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a languageName: node linkType: hard "wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" dependencies: ansi-styles: ^6.1.0 string-width: ^5.0.1 strip-ansi: ^7.0.1 checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 languageName: node linkType: hard "wrappy@npm:1": version: 1.0.2 resolution: "wrappy@npm:1.0.2" checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 languageName: node linkType: hard "write-file-atomic@npm:^2.4.2": version: 2.4.3 resolution: "write-file-atomic@npm:2.4.3" dependencies: graceful-fs: ^4.1.11 imurmurhash: ^0.1.4 signal-exit: ^3.0.2 checksum: 2db81f92ae974fd87ab4a5e7932feacaca626679a7c98fcc73ad8fcea5a1950eab32fa831f79e9391ac99b562ca091ad49be37a79045bd65f595efbb8f4596ae languageName: node linkType: hard "write-file-atomic@npm:^3.0.0": version: 3.0.3 resolution: "write-file-atomic@npm:3.0.3" dependencies: imurmurhash: ^0.1.4 is-typedarray: ^1.0.0 signal-exit: ^3.0.2 typedarray-to-buffer: ^3.1.5 checksum: c55b24617cc61c3a4379f425fc62a386cc51916a9b9d993f39734d005a09d5a4bb748bc251f1304e7abd71d0a26d339996c275955f527a131b1dcded67878280 languageName: node linkType: hard "write-file-atomic@npm:^4.0.0, write-file-atomic@npm:^4.0.1": version: 4.0.2 resolution: "write-file-atomic@npm:4.0.2" dependencies: imurmurhash: ^0.1.4 signal-exit: ^3.0.7 checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard "write-json-file@npm:^3.2.0": version: 3.2.0 resolution: "write-json-file@npm:3.2.0" dependencies: detect-indent: ^5.0.0 graceful-fs: ^4.1.15 make-dir: ^2.1.0 pify: ^4.0.1 sort-keys: ^2.0.0 write-file-atomic: ^2.4.2 checksum: 2b97ce2027d53c28a33e4a8e7b0d565faf785988b3776f9e0c68d36477c1fb12639fd0d70877d92a861820707966c62ea9c5f7a36a165d615fd47ca8e24c8371 languageName: node linkType: hard "write-json-file@npm:^4.3.0": version: 4.3.0 resolution: "write-json-file@npm:4.3.0" dependencies: detect-indent: ^6.0.0 graceful-fs: ^4.1.15 is-plain-obj: ^2.0.0 make-dir: ^3.0.0 sort-keys: ^4.0.0 write-file-atomic: ^3.0.0 checksum: 33908c591923dc273e6574e7c0e2df157acfcf498e3a87c5615ced006a465c4058877df6abce6fc1acd2844fa3cf4518ace4a34d5d82ab28bcf896317ba1db6f languageName: node linkType: hard "write-pkg@npm:^4.0.0": version: 4.0.0 resolution: "write-pkg@npm:4.0.0" dependencies: sort-keys: ^2.0.0 type-fest: ^0.4.1 write-json-file: ^3.2.0 checksum: 7864d44370f42a6761f6898d07ee2818c7a2faad45116580cf779f3adaf94e4bea5557612533a6c421c32323253ecb63b50615094960a637aeaef5df0fd2d6cd languageName: node linkType: hard "ws@npm:^7.4.6": version: 7.5.10 resolution: "ws@npm:7.5.10" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true checksum: f9bb062abf54cc8f02d94ca86dcd349c3945d63851f5d07a3a61c2fcb755b15a88e943a63cf580cbdb5b74436d67ef6b67f745b8f7c0814e411379138e1863cb languageName: node linkType: hard "ws@npm:^8.11.0": version: 8.17.0 resolution: "ws@npm:8.17.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true checksum: 147ef9eab0251364e1d2c55338ad0efb15e6913923ccbfdf20f7a8a6cb8f88432bcd7f4d8f66977135bfad35575644f9983201c1a361019594a4e53977bf6d4e languageName: node linkType: hard "ws@npm:~8.11.0": version: 8.11.0 resolution: "ws@npm:8.11.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 languageName: node linkType: hard "xtend@npm:~4.0.1": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a languageName: node linkType: hard "y-protocols@npm:^1.0.5": version: 1.0.6 resolution: "y-protocols@npm:1.0.6" dependencies: lib0: ^0.2.85 peerDependencies: yjs: ^13.0.0 checksum: 4b57c8811befcf2e45c3d47830005f8a33e626c734f78a42fe8a4fa3caad2233ba85a7c8bceefbd52ffc40130d3f3faee664fd0d1c324ff1fa8817a056ccdc1c languageName: node linkType: hard "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 languageName: node linkType: hard "yallist@npm:^3.0.2": version: 3.1.1 resolution: "yallist@npm:3.1.1" checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d languageName: node linkType: hard "yallist@npm:^4.0.0": version: 4.0.0 resolution: "yallist@npm:4.0.0" checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 languageName: node linkType: hard "yaml@npm:^1.10.0, yaml@npm:^1.10.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f languageName: node linkType: hard "yargs-parser@npm:20.2.4": version: 20.2.4 resolution: "yargs-parser@npm:20.2.4" checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 languageName: node linkType: hard "yargs-parser@npm:21.1.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c languageName: node linkType: hard "yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 languageName: node linkType: hard "yargs-unparser@npm:2.0.0": version: 2.0.0 resolution: "yargs-unparser@npm:2.0.0" dependencies: camelcase: ^6.0.0 decamelize: ^4.0.0 flat: ^5.0.2 is-plain-obj: ^2.1.0 checksum: 68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 languageName: node linkType: hard "yargs@npm:16.2.0, yargs@npm:^16.1.1, yargs@npm:^16.2.0": version: 16.2.0 resolution: "yargs@npm:16.2.0" dependencies: cliui: ^7.0.2 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 string-width: ^4.2.0 y18n: ^5.0.5 yargs-parser: ^20.2.2 checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 languageName: node linkType: hard "yargs@npm:^17.0.0, yargs@npm:^17.6.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: cliui: ^8.0.1 escalade: ^3.1.1 get-caller-file: ^2.0.5 require-directory: ^2.1.1 string-width: ^4.2.3 y18n: ^5.0.5 yargs-parser: ^21.1.1 checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a languageName: node linkType: hard "yjs@npm:^13.5.40": version: 13.6.15 resolution: "yjs@npm:13.6.15" dependencies: lib0: ^0.2.86 checksum: a0cdb323f9cd40de37c9cd0a9a4613e35d8365488ed6078ec632f0ec1853de4d16e46d435dc97e4029c0e70666e24d02c7240a71e84f7b1f15ff18670d715483 languageName: node linkType: hard "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 languageName: node linkType: hard "yup@npm:0.32.11": version: 0.32.11 resolution: "yup@npm:0.32.11" dependencies: "@babel/runtime": ^7.15.4 "@types/lodash": ^4.14.175 lodash: ^4.17.21 lodash-es: ^4.17.21 nanoclone: ^0.2.1 property-expr: ^2.0.4 toposort: ^2.0.2 checksum: 43a16786b47cc910fed4891cebdd89df6d6e31702e9462e8f969c73eac88551ce750732608012201ea6b93802c8847cb0aa27b5d57370640f4ecf30f9f97d4b0 languageName: node linkType: hard