diff --git a/.github/workflows/bokeh-ci.yml b/.github/workflows/bokeh-ci.yml
index b54644ac229..2ab01c49881 100644
--- a/.github/workflows/bokeh-ci.yml
+++ b/.github/workflows/bokeh-ci.yml
@@ -179,36 +179,6 @@ jobs:
name: examples-report
path: examples-report
- integration-tests:
- if: ${{ false }} # disable for now
- needs: build
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v4
-
- - name: Prepare Environment
- uses: ./.github/workflows/composite/test-setup
- with:
- test-env: '3.11'
- source-tree: 'delete'
-
- - name: List installed software
- run: |
- conda info
- conda list
- echo "node $(node --version)"
- echo "npm $(npm --version)"
-
- - name: Run tests
- run: pytest -v --cov=bokeh --cov-report=xml --tb=short --driver chrome --color=yes tests/integration
-
- - name: Upload code coverage
- uses: codecov/codecov-action@v4
- with:
- flags: integration
- verbose: true
-
unit-test:
needs: build
runs-on: ${{ matrix.os }}
@@ -351,27 +321,3 @@ jobs:
- name: Run tests
run: bash scripts/ci/run_downstream_tests.sh
-
- docker_from_wheel:
- if: ${{ false }} # temporarily disable
- needs: build
- runs-on: ubuntu-latest
- env:
- IMAGE_TAG: bokeh/bokeh-dev:branch-3.1
-
- steps:
- - uses: actions/checkout@v4
-
- - name: Download wheel package
- id: download
- uses: actions/download-artifact@v4
- with:
- name: wheel-package
- path: dist/
-
- - name: Start Docker container, install Bokeh from wheel and run Python tests.
- env:
- BOKEH_DOCKER_FROM_WHEEL: 1
- BOKEH_DOCKER_INTERACTIVE: 0
- run: |
- scripts/docker/docker_run.sh $IMAGE_TAG
diff --git a/.github/workflows/bokeh-docker-build.yml b/.github/workflows/bokeh-docker-build.yml
deleted file mode 100644
index 70f3502fb18..00000000000
--- a/.github/workflows/bokeh-docker-build.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: Bokeh-Docker-Build
-
-on:
- workflow_dispatch:
- inputs:
- push_or_save_image:
- type: choice
- description: What to do with image?
- options:
- - "Push to Docker Hub"
- - "Save as artifact"
- required: true
- default: "Push to Docker Hub"
-
-jobs:
- docker-build:
- runs-on: ubuntu-latest
- steps:
- - name: Set date environment variable
- run: |
- echo "iso_date=$(date -u --iso-8601)" >> $GITHUB_ENV
- echo "branch_name=$(echo ${{ github.ref_name }} | tr / -)" >> $GITHUB_ENV
-
- - name: Checkout source
- uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v2
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v2
-
- - name: Login to Docker Hub
- uses: docker/login-action@v2
- with:
- username: bokehservice
- password: ${{ secrets.DOCKER_TOKEN }}
-
- - name: Build image
- uses: docker/build-push-action@v5
- with:
- context: scripts/docker
- load: true
- tags: |
- bokeh/bokeh-dev:latest
- bokeh/bokeh-dev:${{ env.iso_date }}
- bokeh/bokeh-dev:${{ env.branch_name }}
-
- - name: Push image to Docker Hub
- if: ${{ inputs.push_or_save_image }} == "Push to Docker Hub"
- uses: docker/build-push-action@v5
- with:
- context: scripts/docker
- push: true
- tags: |
- bokeh/bokeh-dev:latest
- bokeh/bokeh-dev:${{ env.iso_date }}
- bokeh/bokeh-dev:${{ env.branch_name }}
-
- - name: Save image to tar file
- if: ${{ inputs.push_to_docker_hub }} == "Save as artifact"
- run: |
- docker save -o bokeh-dev.tar bokeh/bokeh-dev
-
- - name: Upload artifact
- if: ${{ inputs.push_to_docker_hub }} == "Save as artifact"
- uses: actions/upload-artifact@v4
- with:
- name: artifact
- path: bokeh-dev.tar
diff --git a/.github/workflows/bokeh-docker-test.yml b/.github/workflows/bokeh-docker-test.yml
deleted file mode 100644
index 820c6da92fb..00000000000
--- a/.github/workflows/bokeh-docker-test.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-name: Bokeh-Docker-Test
-
-on:
- push:
- branches:
- - main
- - branch-*
- pull_request:
-
-jobs:
- docker-test:
- if: ${{ false }} # disable for now
-
- runs-on: ubuntu-latest
- env:
- IMAGE_TAG: bokeh/bokeh-dev:branch-3.1
-
- steps:
- - name: Checkout the repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 0 # full history to get proper build version
-
- - name: Start Docker container, build Bokeh and run tests.
- env:
- BOKEH_DOCKER_BUILD: 1
- BOKEH_DOCKER_TEST: 1
- BOKEH_DOCKER_INTERACTIVE: 0
- run: |
- scripts/docker/docker_run.sh $IMAGE_TAG
-
- - name: Collect results
- shell: bash
- run: |
- SRC="bokehjs/test/baselines/linux"
- DST="bokeh-report-docker/${SRC}"
- mkdir -p ${DST}
- if [[ -e ${SRC}/report.json ]];
- then
- CHANGED=$(git status --short ${SRC}/\*.blf ${SRC}/\*.png | cut -c4-)
- cp ${SRC}/report.json ${CHANGED} ${DST}
- fi
-
- - name: Upload report
- uses: actions/upload-artifact@v4
- with:
- name: bokeh-report-docker
- path: bokeh-report-docker
diff --git a/.gitignore b/.gitignore
index f8ec46cfa9a..f8caea7774a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -45,6 +45,7 @@
.sw[nop]
*.tmp
.vscode
+.idea
# compressed / binary files
*.bz2
diff --git a/README.md b/README.md
index 65d504c74c1..86d751bc35b 100644
--- a/README.md
+++ b/README.md
@@ -26,7 +26,7 @@
-
+
diff --git a/bokehjs/make/package.json b/bokehjs/make/package.json
index a0637fd9676..85f7774a626 100644
--- a/bokehjs/make/package.json
+++ b/bokehjs/make/package.json
@@ -1,6 +1,6 @@
{
"name": "@bokeh/make",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"private": true,
"description": "Internal package for bokehjs' build system",
"license": "BSD-3-Clause",
@@ -13,18 +13,18 @@
],
"devDependencies": {
"@types/eslint": "^8.56.7",
- "@types/node": "^20.12.4",
+ "@types/node": "^20.14.7",
"@types/which": "^3.0.3",
"@types/yargs": "^17.0.32",
- "acorn": "^8.11.3",
+ "acorn": "^8.12.1",
"chalk": "^4.1.2",
"del": "^6.1.1",
- "eslint": "^8.57.0",
- "semver": "^7.6.0",
+ "eslint": "^8.56.0",
+ "semver": "^7.6.2",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
- "typescript-eslint": "^7.5.0",
- "typescript": "~5.4.3",
+ "typescript-eslint": "^7.16.0",
+ "typescript": "~5.5.3",
"which": "^3.0.1",
"yargs": "^17.7.2"
}
diff --git a/bokehjs/package-lock.json b/bokehjs/package-lock.json
index 0bf93630f4c..98ab105fe38 100644
--- a/bokehjs/package-lock.json
+++ b/bokehjs/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@bokeh/bokehjs",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@bokeh/bokehjs",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"license": "BSD-3-Clause",
"workspaces": [
"./make",
@@ -31,7 +31,7 @@
"regl": "^2.1.0",
"sprintf-js": "^1.1.3",
"timezone": "^1.0.23",
- "tslib": "^2.6.2",
+ "tslib": "^2.6.3",
"underscore.template": "^0.1.7"
},
"engines": {
@@ -41,25 +41,25 @@
},
"make": {
"name": "@bokeh/make",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"license": "BSD-3-Clause",
"workspaces": [
"./src/compiler"
],
"devDependencies": {
"@types/eslint": "^8.56.7",
- "@types/node": "^20.12.4",
+ "@types/node": "^20.14.7",
"@types/which": "^3.0.3",
"@types/yargs": "^17.0.32",
- "acorn": "^8.11.3",
+ "acorn": "^8.12.1",
"chalk": "^4.1.2",
"del": "^6.1.1",
- "eslint": "^8.57.0",
- "semver": "^7.6.0",
+ "eslint": "^8.56.0",
+ "semver": "^7.6.2",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
- "typescript": "~5.4.3",
- "typescript-eslint": "^7.5.0",
+ "typescript": "~5.5.3",
+ "typescript-eslint": "^7.16.0",
"which": "^3.0.1",
"yargs": "^17.7.2"
}
@@ -408,6 +408,7 @@
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
"integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"type-detect": "4.0.8"
}
@@ -417,6 +418,7 @@
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz",
"integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.0"
}
@@ -445,7 +447,8 @@
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
"integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
- "dev": true
+ "dev": true,
+ "license": "(Unlicense OR Apache-2.0)"
},
"node_modules/@tsconfig/node10": {
"version": "1.0.11",
@@ -609,10 +612,11 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.12.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.4.tgz",
- "integrity": "sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==",
+ "version": "20.14.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.7.tgz",
+ "integrity": "sha512-uTr2m2IbJJucF3KUxgnGOZvYbN0QgkGyWxG6973HCpMYFy2KfcgYuIwkJQMQkt1VbBMlvWRbpshFTLxnxCZjKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"undici-types": "~5.26.4"
}
@@ -649,12 +653,6 @@
"integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
"dev": true
},
- "node_modules/@types/semver": {
- "version": "7.5.8",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
- "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
- "dev": true
- },
"node_modules/@types/send": {
"version": "0.17.4",
"resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
@@ -749,22 +747,21 @@
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.5.0.tgz",
- "integrity": "sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz",
+ "integrity": "sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "7.5.0",
- "@typescript-eslint/type-utils": "7.5.0",
- "@typescript-eslint/utils": "7.5.0",
- "@typescript-eslint/visitor-keys": "7.5.0",
- "debug": "^4.3.4",
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "7.16.0",
+ "@typescript-eslint/type-utils": "7.16.0",
+ "@typescript-eslint/utils": "7.16.0",
+ "@typescript-eslint/visitor-keys": "7.16.0",
"graphemer": "^1.4.0",
- "ignore": "^5.2.4",
+ "ignore": "^5.3.1",
"natural-compare": "^1.4.0",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
+ "ts-api-utils": "^1.3.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -784,15 +781,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz",
- "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.0.tgz",
+ "integrity": "sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "7.5.0",
- "@typescript-eslint/types": "7.5.0",
- "@typescript-eslint/typescript-estree": "7.5.0",
- "@typescript-eslint/visitor-keys": "7.5.0",
+ "@typescript-eslint/scope-manager": "7.16.0",
+ "@typescript-eslint/types": "7.16.0",
+ "@typescript-eslint/typescript-estree": "7.16.0",
+ "@typescript-eslint/visitor-keys": "7.16.0",
"debug": "^4.3.4"
},
"engines": {
@@ -812,13 +810,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz",
- "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz",
+ "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "7.5.0",
- "@typescript-eslint/visitor-keys": "7.5.0"
+ "@typescript-eslint/types": "7.16.0",
+ "@typescript-eslint/visitor-keys": "7.16.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -829,15 +828,16 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.5.0.tgz",
- "integrity": "sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz",
+ "integrity": "sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/typescript-estree": "7.5.0",
- "@typescript-eslint/utils": "7.5.0",
+ "@typescript-eslint/typescript-estree": "7.16.0",
+ "@typescript-eslint/utils": "7.16.0",
"debug": "^4.3.4",
- "ts-api-utils": "^1.0.1"
+ "ts-api-utils": "^1.3.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -856,10 +856,11 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz",
- "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz",
+ "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^18.18.0 || >=20.0.0"
},
@@ -869,19 +870,20 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz",
- "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz",
+ "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "7.5.0",
- "@typescript-eslint/visitor-keys": "7.5.0",
+ "@typescript-eslint/types": "7.16.0",
+ "@typescript-eslint/visitor-keys": "7.16.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
- "minimatch": "9.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -901,15 +903,17 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -921,18 +925,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.5.0.tgz",
- "integrity": "sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz",
+ "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "7.5.0",
- "@typescript-eslint/types": "7.5.0",
- "@typescript-eslint/typescript-estree": "7.5.0",
- "semver": "^7.5.4"
+ "@typescript-eslint/scope-manager": "7.16.0",
+ "@typescript-eslint/types": "7.16.0",
+ "@typescript-eslint/typescript-estree": "7.16.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -946,13 +948,14 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz",
- "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz",
+ "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "7.5.0",
- "eslint-visitor-keys": "^3.4.1"
+ "@typescript-eslint/types": "7.16.0",
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -988,10 +991,11 @@
}
},
"node_modules/acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.12.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
+ "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -1158,12 +1162,13 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -1239,10 +1244,11 @@
}
},
"node_modules/chrome-remote-interface": {
- "version": "0.33.0",
- "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.33.0.tgz",
- "integrity": "sha512-tv/SgeBfShXk43fwFpQ9wnS7mOCPzETnzDXTNxCb6TqKOiOeIfbrJz+2NAp8GmzwizpKa058wnU1Te7apONaYg==",
+ "version": "0.33.2",
+ "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.33.2.tgz",
+ "integrity": "sha512-wvm9cOeBTrb218EC+6DteGt92iXr2iY0+XJP30f15JVDhqvWvJEVACh9GvUm8b9Yd8bxQivaLSb8k7mgrbyomQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"commander": "2.11.x",
"ws": "^7.2.0"
@@ -1258,10 +1264,11 @@
"dev": true
},
"node_modules/chrome-remote-interface/node_modules/ws": {
- "version": "7.5.9",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
- "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+ "version": "7.5.10",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
+ "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.3.0"
},
@@ -1553,10 +1560,11 @@
}
},
"node_modules/devtools-protocol": {
- "version": "0.0.1282316",
- "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1282316.tgz",
- "integrity": "sha512-i7eIqWdVxeXBY/M+v83yRkOV1sTHnr3XYiC0YNBivLIE6hBfE2H0c2o8VC5ynT44yjy+Ei0kLrBQFK/RUKaAHQ==",
- "dev": true
+ "version": "0.0.1325906",
+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1325906.tgz",
+ "integrity": "sha512-TdtfCa2r5embtfj5TS26lPZd631x4YrEFBgx1dwF3vJm5K9Fw2/2XhiyFkQNn3FJSyq+b/UtEHqP2kwAFqxcJA==",
+ "dev": true,
+ "license": "BSD-3-Clause"
},
"node_modules/diff": {
"version": "5.2.0",
@@ -1957,10 +1965,11 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2428,6 +2437,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
@@ -2512,7 +2522,8 @@
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz",
"integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/keyv": {
"version": "4.5.4",
@@ -2595,18 +2606,6 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
@@ -2815,10 +2814,11 @@
}
},
"node_modules/nise": {
- "version": "5.1.9",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz",
- "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-6.0.0.tgz",
+ "integrity": "sha512-K8ePqo9BFvN31HXwEtTNGzgrPpmvgciDsFz8aztFjt4LqKO/JeFD8tBOeuDiCMXrIl/m1YvfH8auSpxfaD09wg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
"@sinonjs/commons": "^3.0.0",
"@sinonjs/fake-timers": "^11.2.2",
@@ -2828,10 +2828,11 @@
}
},
"node_modules/nise/node_modules/path-to-regexp": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
- "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==",
- "dev": true
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz",
+ "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/nouislider": {
"version": "15.7.1",
@@ -3291,13 +3292,11 @@
"optional": true
},
"node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
@@ -3428,17 +3427,18 @@
}
},
"node_modules/sinon": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz",
- "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==",
+ "version": "18.0.0",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-18.0.0.tgz",
+ "integrity": "sha512-+dXDXzD1sBO6HlmZDd7mXZCR/y5ECiEiGCBSGuFD/kZ0bDTofPYc6JaeGmPSF+1j1MejGUWkORbYOLDyvqCWpA==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/commons": "^3.0.1",
"@sinonjs/fake-timers": "^11.2.2",
"@sinonjs/samsam": "^8.0.0",
- "diff": "^5.1.0",
- "nise": "^5.1.5",
- "supports-color": "^7.2.0"
+ "diff": "^5.2.0",
+ "nise": "^6.0.0",
+ "supports-color": "^7"
},
"funding": {
"type": "opencollective",
@@ -3571,10 +3571,11 @@
}
},
"node_modules/terser": {
- "version": "5.30.3",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz",
- "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==",
+ "version": "5.31.2",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.2.tgz",
+ "integrity": "sha512-LGyRZVFm/QElZHy/CPr/O4eNZOZIzsrQ92y4v9UJe/pFJjypje2yI3C2FmPtvUEnhadlSbmG2nXtdcjHOjCfxw==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
@@ -3610,6 +3611,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -3631,6 +3633,7 @@
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=16"
},
@@ -3705,9 +3708,10 @@
}
},
"node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
+ "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
+ "license": "0BSD"
},
"node_modules/type-check": {
"version": "0.4.0",
@@ -3756,10 +3760,11 @@
}
},
"node_modules/typescript": {
- "version": "5.4.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
- "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz",
+ "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==",
"dev": true,
+ "license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -3769,14 +3774,15 @@
}
},
"node_modules/typescript-eslint": {
- "version": "7.5.0",
- "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.5.0.tgz",
- "integrity": "sha512-eKhF39LRi2xYvvXh3h3S+mCxC01dZTIZBlka25o39i81VeQG+OZyfC4i2GEDspNclMRdXkg9uGhmvWMhjph2XQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.16.0.tgz",
+ "integrity": "sha512-kaVRivQjOzuoCXU6+hLnjo3/baxyzWVO5GrnExkFzETRYJKVHYkrJglOu2OCm8Hi9RPDWX1PTNNTpU5KRV0+RA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/eslint-plugin": "7.5.0",
- "@typescript-eslint/parser": "7.5.0",
- "@typescript-eslint/utils": "7.5.0"
+ "@typescript-eslint/eslint-plugin": "7.16.0",
+ "@typescript-eslint/parser": "7.16.0",
+ "@typescript-eslint/utils": "7.16.0"
},
"engines": {
"node": "^18.18.0 || >=20.0.0"
@@ -3896,10 +3902,11 @@
"dev": true
},
"node_modules/ws": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz",
- "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz",
+ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=10.0.0"
},
@@ -3933,12 +3940,6 @@
"node": ">=10"
}
},
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- },
"node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
@@ -3989,33 +3990,33 @@
},
"src/compiler": {
"name": "@bokeh/compiler",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"license": "BSD-3-Clause",
"devDependencies": {
"@types/combine-source-map": "^0.8.4",
"@types/convert-source-map": "^2.0.3",
"@types/css": "^0.0.37",
"@types/less": "^3.0.6",
- "@types/node": "^20.12.4",
+ "@types/node": "^20.14.7",
"@types/yargs": "^17.0.32",
"chalk": "^4.1.2",
"combine-source-map": "^0.8.0",
"convert-source-map": "^2.0.0",
"css": "^3.0.0",
"less": "^4.2.0",
- "terser": "^5.30.3",
- "typescript": "~5.4.3",
+ "terser": "^5.31.2",
+ "typescript": "~5.5.3",
"yargs": "^17.7.2"
}
},
"src/lib": {
"name": "@bokeh/lib",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"license": "BSD-3-Clause"
},
"src/server": {
"name": "@bokeh/server",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"license": "BSD-3-Clause",
"devDependencies": {
"@types/node": "^20.12.4",
@@ -4024,13 +4025,13 @@
"chalk": "^4.1.2",
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
- "ws": "^8.16.0",
+ "ws": "^8.18.0",
"yargs": "^17.7.2"
}
},
"test": {
"name": "@bokeh/test",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"license": "BSD-3-Clause",
"workspaces": [
"./src/lib"
@@ -4039,23 +4040,23 @@
"@types/cli-progress": "^3.11.5",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
- "@types/node": "^20.12.4",
+ "@types/node": "^20.14.7",
"@types/nunjucks": "^3.2.6",
"@types/pngjs": "^6.0.4",
"@types/sinon": "^17.0.2",
"@types/source-map-support": "^0.5.10",
"@types/yargs": "^17.0.32",
"chalk": "^4.1.2",
- "chrome-remote-interface": "^0.33.0",
+ "chrome-remote-interface": "^0.33.2",
"cli-progress": "^3.12.0",
"cors": "^2.8.5",
- "devtools-protocol": "^0.0.1282316",
+ "devtools-protocol": "^0.0.1325906",
"express": "^4.19.2",
"json5": "^2.2.3",
"nunjucks": "^3.2.4",
"path-browserify": "^1.0.1",
"pngjs": "^7.0.0",
- "sinon": "^17.0.1",
+ "sinon": "^18.0.0",
"source-map-support": "^0.5.21",
"ts-node": "^10.9.2",
"yargs": "^17.7.2"
diff --git a/bokehjs/package.json b/bokehjs/package.json
index ff2e39249be..7fa9513eb02 100644
--- a/bokehjs/package.json
+++ b/bokehjs/package.json
@@ -1,6 +1,6 @@
{
"name": "@bokeh/bokehjs",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"description": "Interactive, novel data visualization",
"keywords": [
"bokeh",
@@ -38,7 +38,7 @@
"dev-build": "node make dev-build"
},
"main": "build/js/lib/bokeh.js",
- "types": "build/js/types/bokeh.d.ts",
+ "types": "build/js/lib/bokeh.d.ts",
"dependencies": {
"@bokeh/numbro": "^1.6.2",
"@bokeh/slickgrid": "~2.4.4103",
@@ -55,7 +55,7 @@
"regl": "^2.1.0",
"sprintf-js": "^1.1.3",
"timezone": "^1.0.23",
- "tslib": "^2.6.2",
+ "tslib": "^2.6.3",
"underscore.template": "^0.1.7"
}
}
diff --git a/bokehjs/src/compiler/linker.ts b/bokehjs/src/compiler/linker.ts
index 6b8336194d7..98e51aeaeb5 100644
--- a/bokehjs/src/compiler/linker.ts
+++ b/bokehjs/src/compiler/linker.ts
@@ -270,8 +270,8 @@ export class Linker {
this.entries = opts.entries.map((path) => resolve(path))
this.bases = (opts.bases ?? []).map((path) => resolve(path))
this.excludes = new Set((opts.excludes ?? []).map((path) => resolve(path)))
- this.external_modules = new Set((opts.externals ?? []).filter((s): s is string => typeof s === "string"))
- this.external_regex = (opts.externals ?? []).filter((s): s is RegExp => s instanceof RegExp)
+ this.external_modules = new Set((opts.externals ?? []).filter((s) => typeof s === "string"))
+ this.external_regex = (opts.externals ?? []).filter((s) => s instanceof RegExp)
this.excluded = opts.excluded ?? (() => false)
this.builtins = opts.builtins ?? false
diff --git a/bokehjs/src/compiler/package.json b/bokehjs/src/compiler/package.json
index 0af6fce6f5a..e814f0275db 100644
--- a/bokehjs/src/compiler/package.json
+++ b/bokehjs/src/compiler/package.json
@@ -1,6 +1,6 @@
{
"name": "@bokeh/compiler",
- "version": "3.5.0-dev.3",
+ "version": "3.6.0-dev.1",
"private": true,
"description": "Internal package for bokehjs' extensions compiler",
"license": "BSD-3-Clause",
@@ -13,15 +13,15 @@
"@types/convert-source-map": "^2.0.3",
"@types/css": "^0.0.37",
"@types/less": "^3.0.6",
- "@types/node": "^20.12.4",
+ "@types/node": "^20.14.7",
"@types/yargs": "^17.0.32",
"chalk": "^4.1.2",
"combine-source-map": "^0.8.0",
"convert-source-map": "^2.0.0",
"css": "^3.0.0",
"less": "^4.2.0",
- "terser": "^5.30.3",
- "typescript": "~5.4.3",
+ "terser": "^5.31.2",
+ "typescript": "~5.5.3",
"yargs": "^17.7.2"
}
}
diff --git a/bokehjs/src/less/base.less b/bokehjs/src/less/base.less
index 6e9f48cbbec..50e2544119c 100644
--- a/bokehjs/src/less/base.less
+++ b/bokehjs/src/less/base.less
@@ -11,7 +11,7 @@
--padding-vertical: 6px;
--padding-horizontal: 12px;
- --bokeh-top-level: 1000; // used for z-index of menus, dropdowns, etc.
+ --bokeh-top-level: 10000; // used for z-index of menus, dropdowns, etc.
}
:host {
diff --git a/bokehjs/src/less/canvas.less b/bokehjs/src/less/canvas.less
index 7df02b0b005..c2421408d60 100644
--- a/bokehjs/src/less/canvas.less
+++ b/bokehjs/src/less/canvas.less
@@ -6,8 +6,10 @@
left: 0;
width: 100%;
height: 100%;
+ overflow: hidden;
}
.bk-events {
touch-action: none;
+ overflow: visible;
}
diff --git a/bokehjs/src/less/icons.less b/bokehjs/src/less/icons.less
index e52642577d2..73a85d98d98 100644
--- a/bokehjs/src/less/icons.less
+++ b/bokehjs/src/less/icons.less
@@ -18,6 +18,10 @@
.tool-icon(--bokeh-icon-replace-mode, "ReplaceMode");
}
+.bk-tool-icon-toggle-mode {
+ .tool-icon(--bokeh-icon-toggle-mode, "ToggleMode");
+}
+
.bk-tool-icon-append-mode {
.tool-icon(--bokeh-icon-append-mode, "AppendMode");
}
diff --git a/bokehjs/src/less/renderer.less b/bokehjs/src/less/renderer.less
deleted file mode 100644
index 9ca4f805dd0..00000000000
--- a/bokehjs/src/less/renderer.less
+++ /dev/null
@@ -1,3 +0,0 @@
-:host {
- position: absolute;
-}
diff --git a/bokehjs/src/lib/api/figure.ts b/bokehjs/src/lib/api/figure.ts
index 4a0a04c960f..4bcc3e93220 100644
--- a/bokehjs/src/lib/api/figure.ts
+++ b/bokehjs/src/lib/api/figure.ts
@@ -1,15 +1,16 @@
import type {HasProps} from "../core/has_props"
import type {Attrs} from "../core/types"
import type {Value, Field, Vector} from "../core/vectorization"
+import {isVectorized} from "../core/vectorization"
import type {Property} from "../core/properties"
import {VectorSpec, UnitsSpec} from "../core/properties"
import type {Class} from "../core/class"
import {extend} from "../core/class"
import type {Location} from "../core/enums"
import {is_equal, Comparator} from "../core/util/eq"
-import {includes, uniq} from "../core/util/array"
+import {includes, uniq, zip} from "../core/util/array"
import {clone, keys, entries, is_empty, dict} from "../core/util/object"
-import {isNumber, isString, isArray, isArrayOf} from "../core/util/types"
+import {isNumber, isString, isArray, isArrayOf, isPlainObject} from "../core/util/types"
import {enumerate} from "core/util/iterator"
import * as nd from "core/util/ndarray"
@@ -35,6 +36,7 @@ import {
Range,
Range1d,
Tool,
+ ToolProxy,
} from "./models"
import {Legend} from "../models/annotations/legend"
@@ -43,7 +45,7 @@ import type {ToolAliases} from "../models/tools/tool"
import {Figure as BaseFigure} from "../models/plots/figure"
import {GestureTool} from "../models/tools/gestures/gesture_tool"
-import type {TypedGlyphRenderer, NamesOf, AuxGlyph} from "./glyph_api"
+import type {NamesOf, AuxGlyph} from "./glyph_api"
import {GlyphAPI} from "./glyph_api"
export type ToolName = keyof ToolAliases
@@ -149,9 +151,9 @@ export class SubFigure extends GlyphAPI {
super()
}
- _glyph(cls: Class, positional: NamesOf, args: unknown[], overrides?: object): TypedGlyphRenderer {
+ _glyph(cls: Class, method: string, positional: NamesOf, args: unknown[], overrides?: object): GlyphRenderer {
const {coordinates} = this
- return this.parent._glyph(cls, positional, args, {coordinates, ...overrides})
+ return this.parent._glyph(cls, method, positional, args, {coordinates, ...overrides})
}
}
@@ -159,13 +161,13 @@ export interface Figure extends GlyphAPI {}
export class Figure extends BaseFigure {
get xaxes(): Axis[] {
- return [...this.below, ...this.above].filter((r): r is Axis => r instanceof Axis)
+ return [...this.below, ...this.above].filter((r) => r instanceof Axis)
}
get yaxes(): Axis[] {
- return [...this.left, ...this.right].filter((r): r is Axis => r instanceof Axis)
+ return [...this.left, ...this.right].filter((r) => r instanceof Axis)
}
get axes(): Axis[] {
- return [...this.below, ...this.above, ...this.left, ...this.right].filter((r): r is Axis => r instanceof Axis)
+ return [...this.below, ...this.above, ...this.left, ...this.right].filter((r) => r instanceof Axis)
}
get xaxis(): Proxied {
@@ -179,13 +181,13 @@ export class Figure extends BaseFigure {
}
get xgrids(): Grid[] {
- return this.center.filter((r): r is Grid => r instanceof Grid && r.dimension == 0)
+ return this.center.filter((r) => r instanceof Grid).filter((grid) => grid.dimension == 0)
}
get ygrids(): Grid[] {
- return this.center.filter((r): r is Grid => r instanceof Grid && r.dimension == 1)
+ return this.center.filter((r) => r instanceof Grid).filter((grid) => grid.dimension == 1)
}
get grids(): Grid[] {
- return this.center.filter((r): r is Grid => r instanceof Grid)
+ return this.center.filter((r) => r instanceof Grid)
}
get xgrid(): Proxied {
@@ -199,7 +201,7 @@ export class Figure extends BaseFigure {
}
get legend(): Legend {
- const legends = this.panels.filter((r): r is Legend => r instanceof Legend)
+ const legends = this.panels.filter((r) => r instanceof Legend)
if (legends.length == 0) {
const legend = new Legend()
@@ -302,7 +304,7 @@ export class Figure extends BaseFigure {
if (isString(active_drag) && active_drag != "auto") {
const tool = tool_map.get(active_drag)
- if (tool != null) {
+ if (tool instanceof GestureTool || tool instanceof ToolProxy) {
this.toolbar.active_drag = tool
}
} else if (active_drag !== undefined) {
@@ -320,7 +322,7 @@ export class Figure extends BaseFigure {
if (isString(active_scroll) && active_scroll != "auto") {
const tool = tool_map.get(active_scroll)
- if (tool != null) {
+ if (tool instanceof GestureTool || tool instanceof ToolProxy) {
this.toolbar.active_scroll = tool
}
} else if (active_scroll !== undefined) {
@@ -329,7 +331,7 @@ export class Figure extends BaseFigure {
if (isString(active_tap) && active_tap != "auto") {
const tool = tool_map.get(active_tap)
- if (tool != null) {
+ if (tool instanceof GestureTool || tool instanceof ToolProxy) {
this.toolbar.active_tap = tool
}
} else if (active_tap !== undefined) {
@@ -338,7 +340,7 @@ export class Figure extends BaseFigure {
if (isString(active_multi) && active_multi != "auto") {
const tool = tool_map.get(active_multi)
- if (tool instanceof GestureTool) {
+ if (tool instanceof GestureTool || tool instanceof ToolProxy) {
this.toolbar.active_multi = tool
}
} else if (active_multi !== undefined) {
@@ -479,22 +481,41 @@ export class Figure extends BaseFigure {
return unresolved_attrs
}
- _glyph(cls: Class, positional: NamesOf, args: unknown[], overrides: object = {}): TypedGlyphRenderer {
+ _signature(method: string, positional: string[]): string {
+ return `the method signature is ${method}(${positional.join(", ")}, args?)`
+ }
+
+ _glyph(cls: Class, method: string, positional: NamesOf, args: unknown[], overrides: object = {}): GlyphRenderer {
let attrs: Attrs & Partial
- if (args.length == 0) {
+
+ const n_args = args.length
+ const n_pos = positional.length
+
+ if (n_args == n_pos || n_args == n_pos + 1) {
attrs = {}
- } else if (args.length == 1) {
- attrs = {...args[0] as Attrs}
- } else {
- if (args.length == positional.length) {
- attrs = {}
- } else {
- attrs = {...args[args.length - 1] as Attrs}
+
+ for (const [[param, arg], i] of enumerate(zip(positional, args))) {
+ if (isPlainObject(arg) && !isVectorized(arg)) {
+ throw new Error(`invalid value for '${param}' parameter at position ${i}; ${this._signature(method, positional)}`)
+ } else {
+ attrs[param] = arg
+ }
}
- for (const [param, i] of enumerate(positional)) {
- attrs[param as string] = args[i]
+ if (n_args == n_pos + 1) {
+ const opts = args[n_args - 1]
+ if (!isPlainObject(opts) || isVectorized(opts)) {
+ throw new Error(`expected optional arguments; ${this._signature(method, positional)}`)
+ } else {
+ attrs = {...attrs, ...args[args.length - 1] as Attrs}
+ }
}
+ } else if (n_args == 0) {
+ attrs = {}
+ } else if (n_args == 1) {
+ attrs = {...args[0] as Attrs}
+ } else {
+ throw new Error(`wrong number of arguments; ${this._signature(method, positional)}`)
}
attrs = {...attrs, ...overrides}
@@ -600,7 +621,7 @@ export class Figure extends BaseFigure {
}
this.add_renderers(glyph_renderer)
- return glyph_renderer as TypedGlyphRenderer
+ return glyph_renderer as GlyphRenderer
}
static _get_range(range?: Range | [number, number] | ArrayLike): Range {
diff --git a/bokehjs/src/lib/api/glyph_api.ts b/bokehjs/src/lib/api/glyph_api.ts
index 4ab037395a6..5b15968e00a 100644
--- a/bokehjs/src/lib/api/glyph_api.ts
+++ b/bokehjs/src/lib/api/glyph_api.ts
@@ -9,24 +9,50 @@ import type * as nd from "core/util/ndarray"
import type {Glyph, GlyphRenderer, ColumnarDataSource, CDSView, CoordinateMapping} from "./models"
import {
- AnnularWedge, Annulus, Arc, Bezier, Block, Circle, Ellipse, HArea, HAreaStep, HBar, HSpan,
- HStrip, HexTile, Image, ImageRGBA, ImageStack, ImageURL, Line, MultiLine, MultiPolygons,
- Patch, Patches, Quad, Quadratic, Ray, Rect, Scatter, Segment, Spline, Step, MathMLGlyph,
- TeXGlyph, Text, VArea, VAreaStep, VBar, VSpan, VStrip, Wedge,
+ AnnularWedge,
+ Annulus,
+ Arc,
+ Bezier,
+ Block,
+ Circle,
+ Ellipse,
+ HArea,
+ HAreaStep,
+ HBar,
+ HSpan,
+ HStrip,
+ HexTile,
+ Image,
+ ImageRGBA,
+ ImageStack,
+ ImageURL,
+ Line,
+ MathMLGlyph as MathML,
+ MultiLine,
+ MultiPolygons,
+ Patch,
+ Patches,
+ Quad,
+ Quadratic,
+ Ray,
+ Rect,
+ Scatter,
+ Segment,
+ Spline,
+ Step,
+ TeXGlyph as TeX,
+ Text,
+ VArea,
+ VAreaStep,
+ VBar,
+ VSpan,
+ VStrip,
+ Wedge,
} from "../models/glyphs"
import type {Marker} from "../models/glyphs/marker"
-export type NamesOf = (keyof T["properties"])[]
-
-export type TypedGlyphRenderer = GlyphRenderer & {
- data_source: ColumnarDataSource
- glyph: G
- hover_glyph: G | null
- nonselection_glyph: G | "auto" | null
- selection_glyph: G | "auto" | null
- muted_glyph: G | "auto" | null
-}
+export type NamesOf = (Extract)[]
export type ColorNDArray = nd.Uint32Array1d | nd.Uint8Array1d | nd.Uint8Array2d | nd.FloatArray2d | nd.ObjectNDArray
export type VectorArg = T | Arrayable | Vector
@@ -138,7 +164,7 @@ export type ImageStackArgs = GlyphArgs
export type ImageURLArgs = GlyphArgs
export type LineArgs = GlyphArgs & AuxLine
export type MarkerArgs = GlyphArgs & AuxLine & AuxFill & AuxHatch
-export type MathMLGlyphArgs = GlyphArgs & AuxText
+export type MathMLArgs = GlyphArgs & AuxText
export type MultiLineArgs = GlyphArgs & AuxLine
export type MultiPolygonsArgs = GlyphArgs & AuxLine & AuxFill & AuxHatch
export type PatchArgs = GlyphArgs & AuxLine & AuxFill & AuxHatch
@@ -151,8 +177,8 @@ export type ScatterArgs = GlyphArgs & AuxLine & AuxFi
export type SegmentArgs = GlyphArgs & AuxLine
export type SplineArgs = GlyphArgs & AuxLine
export type StepArgs = GlyphArgs & AuxLine
-export type TeXGlyphArgs = GlyphArgs & AuxText
-export type TextArgs = GlyphArgs & AuxText
+export type TeXArgs = GlyphArgs & AuxText
+export type TextArgs = GlyphArgs & AuxText
export type VAreaArgs = GlyphArgs & AuxFill & AuxHatch
export type VAreaStepArgs = GlyphArgs & AuxFill & AuxHatch
export type VBarArgs = GlyphArgs & AuxLine & AuxFill & AuxHatch
@@ -161,9 +187,10 @@ export type VStripArgs = GlyphArgs & AuxLine & AuxFi
export type WedgeArgs = GlyphArgs & AuxLine & AuxFill & AuxHatch
export abstract class GlyphAPI {
- abstract _glyph(cls: Class, positional: NamesOf, args: unknown[], overrides?: object): TypedGlyphRenderer
+ abstract _glyph(cls: Class, method: string, positional: NamesOf, args: unknown[], overrides?: object): GlyphRenderer
- annular_wedge(args: Partial): TypedGlyphRenderer
+ annular_wedge(): GlyphRenderer
+ annular_wedge(args: Partial): GlyphRenderer
annular_wedge(
x: AnnularWedgeArgs["x"],
y: AnnularWedgeArgs["y"],
@@ -171,35 +198,38 @@ export abstract class GlyphAPI {
outer_radius: AnnularWedgeArgs["outer_radius"],
start_angle: AnnularWedgeArgs["start_angle"],
end_angle: AnnularWedgeArgs["end_angle"],
- args?: Partial): TypedGlyphRenderer
- annular_wedge(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(AnnularWedge, ["x", "y", "inner_radius", "outer_radius", "start_angle", "end_angle"], args)
+ args?: Partial): GlyphRenderer
+ annular_wedge(...args: unknown[]): GlyphRenderer {
+ return this._glyph(AnnularWedge, "annular_wedge", ["x", "y", "inner_radius", "outer_radius", "start_angle", "end_angle"], args)
}
- annulus(args: Partial): TypedGlyphRenderer
+ annulus(): GlyphRenderer
+ annulus(args: Partial): GlyphRenderer
annulus(
x: AnnulusArgs["x"],
y: AnnulusArgs["y"],
inner_radius: AnnulusArgs["inner_radius"],
outer_radius: AnnulusArgs["outer_radius"],
- args?: Partial): TypedGlyphRenderer
- annulus(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(Annulus, ["x", "y", "inner_radius", "outer_radius"], args)
+ args?: Partial): GlyphRenderer
+ annulus(...args: unknown[]): GlyphRenderer {
+ return this._glyph(Annulus, "annulus", ["x", "y", "inner_radius", "outer_radius"], args)
}
- arc(args: Partial): TypedGlyphRenderer
+ arc(): GlyphRenderer
+ arc(args: Partial): GlyphRenderer
arc(
x: ArcArgs["x"],
y: ArcArgs["y"],
radius: ArcArgs["radius"],
start_angle: ArcArgs["start_angle"],
end_angle: ArcArgs["end_angle"],
- args?: Partial): TypedGlyphRenderer
- arc(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(Arc, ["x", "y", "radius", "start_angle", "end_angle"], args)
+ args?: Partial): GlyphRenderer
+ arc(...args: unknown[]): GlyphRenderer {
+ return this._glyph(Arc, "arc", ["x", "y", "radius", "start_angle", "end_angle"], args)
}
- bezier(args: Partial): TypedGlyphRenderer
+ bezier(): GlyphRenderer
+ bezier(args: Partial): GlyphRenderer
bezier(
x0: BezierArgs["x0"],
y0: BezierArgs["y0"],
@@ -209,216 +239,237 @@ export abstract class GlyphAPI {
cy0: BezierArgs["cy0"],
cx1: BezierArgs["cx1"],
cy1: BezierArgs["cy1"],
- args?: Partial): TypedGlyphRenderer
- bezier(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(Bezier, ["x0", "y0", "x1", "y1", "cx0", "cy0", "cx1", "cy1"], args)
+ args?: Partial): GlyphRenderer
+ bezier(...args: unknown[]): GlyphRenderer {
+ return this._glyph(Bezier, "bezier", ["x0", "y0", "x1", "y1", "cx0", "cy0", "cx1", "cy1"], args)
}
- block(args: Partial): TypedGlyphRenderer
+ block(): GlyphRenderer
+ block(args: Partial): GlyphRenderer
block(
x: BlockArgs["x"],
y: BlockArgs["y"],
width: BlockArgs["width"],
height: BlockArgs["height"],
- args?: Partial): TypedGlyphRenderer
- block(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(Block, ["x", "y", "width", "height"], args)
+ args?: Partial): GlyphRenderer
+ block(...args: unknown[]): GlyphRenderer {
+ return this._glyph(Block, "block", ["x", "y", "width", "height"], args)
}
- circle(args: Partial): TypedGlyphRenderer
+ circle(): GlyphRenderer
+ circle(args: Partial): GlyphRenderer
circle(
x: CircleArgs["x"],
y: CircleArgs["y"],
radius: CircleArgs["radius"],
- args?: Partial): TypedGlyphRenderer
- circle(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(Circle, ["x", "y", "radius"], args)
+ args?: Partial): GlyphRenderer
+ circle(...args: unknown[]): GlyphRenderer {
+ return this._glyph(Circle, "circle", ["x", "y", "radius"], args)
}
- ellipse(args: Partial): TypedGlyphRenderer
+ ellipse(): GlyphRenderer
+ ellipse(args: Partial): GlyphRenderer
ellipse(
x: EllipseArgs["x"],
y: EllipseArgs["y"],
width: EllipseArgs["width"],
height: EllipseArgs["height"],
- args?: Partial): TypedGlyphRenderer
- ellipse(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(Ellipse, ["x", "y", "width", "height"], args)
+ args?: Partial): GlyphRenderer
+ ellipse(...args: unknown[]): GlyphRenderer {
+ return this._glyph(Ellipse, "ellipse", ["x", "y", "width", "height"], args)
}
- harea(args: Partial): TypedGlyphRenderer
+ harea(): GlyphRenderer
+ harea(args: Partial): GlyphRenderer
harea(
x1: HAreaArgs["x1"],
x2: HAreaArgs["x2"],
y: HAreaArgs["y"],
- args?: Partial): TypedGlyphRenderer
- harea(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(HArea, ["x1", "x2", "y"], args)
+ args?: Partial): GlyphRenderer
+ harea(...args: unknown[]): GlyphRenderer {
+ return this._glyph(HArea, "harea", ["x1", "x2", "y"], args)
}
- harea_step(args: Partial): TypedGlyphRenderer
+ harea_step(): GlyphRenderer
+ harea_step(args: Partial): GlyphRenderer
harea_step(
x1: HAreaStepArgs["x1"],
x2: HAreaStepArgs["x2"],
y: HAreaStepArgs["y"],
step_mode: HAreaStepArgs["step_mode"],
- args?: Partial): TypedGlyphRenderer
- harea_step(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(HAreaStep, ["x1", "x2", "y", "step_mode"], args)
+ args?: Partial): GlyphRenderer
+ harea_step(...args: unknown[]): GlyphRenderer {
+ return this._glyph(HAreaStep, "harea_step", ["x1", "x2", "y", "step_mode"], args)
}
- hbar(args: Partial): TypedGlyphRenderer
+ hbar(): GlyphRenderer
+ hbar(args: Partial): GlyphRenderer
hbar(
y: HBarArgs["y"],
height: HBarArgs["height"],
right: HBarArgs["right"],
left: HBarArgs["left"],
- args?: Partial): TypedGlyphRenderer
- hbar(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(HBar, ["y", "height", "right", "left"], args)
+ args?: Partial): GlyphRenderer
+ hbar(...args: unknown[]): GlyphRenderer {
+ return this._glyph(HBar, "hbar", ["y", "height", "right", "left"], args)
}
- hspan(args: Partial): TypedGlyphRenderer
+ hspan(): GlyphRenderer
+ hspan(args: Partial): GlyphRenderer
hspan(
y: HSpanArgs["y"],
- args?: Partial): TypedGlyphRenderer
- hspan(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(HSpan, ["y"], args)
+ args?: Partial): GlyphRenderer
+ hspan(...args: unknown[]): GlyphRenderer {
+ return this._glyph(HSpan, "hspan", ["y"], args)
}
- hstrip(args: Partial): TypedGlyphRenderer
+ hstrip(): GlyphRenderer
+ hstrip(args: Partial): GlyphRenderer
hstrip(
y0: HStripArgs["y0"],
y1: HStripArgs["y1"],
- args?: Partial): TypedGlyphRenderer
- hstrip(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(HStrip, ["y0", "y1"], args)
+ args?: Partial): GlyphRenderer
+ hstrip(...args: unknown[]): GlyphRenderer {
+ return this._glyph(HStrip, "hstrip", ["y0", "y1"], args)
}
- hex_tile(args: Partial): TypedGlyphRenderer
+ hex_tile(): GlyphRenderer
+ hex_tile(args: Partial): GlyphRenderer
hex_tile(
q: HexTileArgs["q"],
r: HexTileArgs["r"],
- args?: Partial): TypedGlyphRenderer
- hex_tile(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(HexTile, ["q", "r"], args)
+ args?: Partial): GlyphRenderer
+ hex_tile(...args: unknown[]): GlyphRenderer {
+ return this._glyph(HexTile, "hex_tile", ["q", "r"], args)
}
- image(args: Partial): TypedGlyphRenderer
+ image(): GlyphRenderer
+ image(args: Partial): GlyphRenderer
image(
image: ImageArgs["image"],
x: ImageArgs["x"],
y: ImageArgs["y"],
dw: ImageArgs["dw"],
dh: ImageArgs["dh"],
- args?: Partial): TypedGlyphRenderer
- image(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(Image, ["color_mapper", "image", "x", "y", "dw", "dh"], args)
+ args?: Partial): GlyphRenderer
+ image(...args: unknown[]): GlyphRenderer {
+ return this._glyph(Image, "image", ["color_mapper", "image", "x", "y", "dw", "dh"], args)
}
- image_stack(args: Partial): TypedGlyphRenderer
+ image_stack(): GlyphRenderer
+ image_stack(args: Partial): GlyphRenderer
image_stack(
image: ImageStackArgs["image"],
x: ImageStackArgs["x"],
y: ImageStackArgs["y"],
dw: ImageStackArgs["dw"],
dh: ImageStackArgs["dh"],
- args?: Partial): TypedGlyphRenderer
- image_stack(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(ImageStack, ["color_mapper", "image", "x", "y", "dw", "dh"], args)
+ args?: Partial): GlyphRenderer
+ image_stack(...args: unknown[]): GlyphRenderer {
+ return this._glyph(ImageStack, "image_stack", ["color_mapper", "image", "x", "y", "dw", "dh"], args)
}
- image_rgba(args: Partial): TypedGlyphRenderer
+ image_rgba(): GlyphRenderer
+ image_rgba(args: Partial): GlyphRenderer
image_rgba(
image: ImageRGBAArgs["image"],
x: ImageRGBAArgs["x"],
y: ImageRGBAArgs["y"],
dw: ImageRGBAArgs["dw"],
dh: ImageRGBAArgs["dh"],
- args?: Partial): TypedGlyphRenderer
- image_rgba(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(ImageRGBA, ["image", "x", "y", "dw", "dh"], args)
+ args?: Partial): GlyphRenderer
+ image_rgba(...args: unknown[]): GlyphRenderer {
+ return this._glyph(ImageRGBA, "image_rgba", ["image", "x", "y", "dw", "dh"], args)
}
- image_url(args: Partial): TypedGlyphRenderer
+ image_url(): GlyphRenderer
+ image_url(args: Partial): GlyphRenderer
image_url(
url: ImageURLArgs["url"],
x: ImageURLArgs["x"],
y: ImageURLArgs["y"],
w: ImageURLArgs["w"],
h: ImageURLArgs["h"],
- args?: Partial): TypedGlyphRenderer
- image_url(...args: unknown[]): TypedGlyphRenderer {
- return this._glyph(ImageURL, ["url", "x", "y", "w", "h"], args)
+ args?: Partial): GlyphRenderer
+ image_url(...args: unknown[]): GlyphRenderer {
+ return this._glyph(ImageURL, "image_url", ["url", "x", "y", "w", "h"], args)
}
- line(args: Partial): TypedGlyphRenderer
+ line(): GlyphRenderer
+ line(args: Partial): GlyphRenderer
line(
x: LineArgs["x"],
y: LineArgs["y"],
- args?: Partial): TypedGlyphRenderer |