From 3b9bdb72175044dd92ae4a537e7a86bf6a4c3024 Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Sun, 31 Jul 2022 13:04:11 -0400 Subject: [PATCH 01/31] ci: set up node before running yarn and use caching everywhere (#8328) --- .github/workflows/release-docs-and-schema.yml | 5 +++++ .github/workflows/test.yml | 12 ++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release-docs-and-schema.yml b/.github/workflows/release-docs-and-schema.yml index 0380510bf0..10e1be7247 100644 --- a/.github/workflows/release-docs-and-schema.yml +++ b/.github/workflows/release-docs-and-schema.yml @@ -15,6 +15,11 @@ jobs: steps: - uses: actions/checkout@v3 + - name: Setup Node + uses: actions/setup-node@v3 + with: + cache: 'yarn' + - name: Install Node dependencies run: yarn --frozen-lockfile diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9975ab88a7..5c1f1946f9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -56,14 +56,14 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Install Node dependencies - run: yarn --frozen-lockfile - - name: Setup Node uses: actions/setup-node@v3 with: cache: 'yarn' + - name: Install Node dependencies + run: yarn --frozen-lockfile + - name: Install extra dependencies for Puppeteer run: sudo apt-get install libgbm1 @@ -95,14 +95,14 @@ jobs: steps: - uses: actions/checkout@v3 - - name: Install Node dependencies - run: yarn --frozen-lockfile - - name: Setup Node uses: actions/setup-node@v3 with: cache: 'yarn' + - name: Install Node dependencies + run: yarn --frozen-lockfile + - name: Build run: yarn build:only From 506004bb5055733021294170d7b777cbe1c438ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 06:12:04 +0000 Subject: [PATCH 02/31] chore(deps-dev): bump eslint-plugin-jest from 26.6.0 to 26.7.0 (#8333) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 26.6.0 to 26.7.0. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v26.6.0...v26.7.0) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8289e41acc..1e902a3383 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3934,9 +3934,9 @@ eslint-config-prettier@^8.5.0: integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== eslint-plugin-jest@^26.1.1: - version "26.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.6.0.tgz#546804fa42da75d7d58d4d3b278d5186abd3f6c0" - integrity sha512-f8n46/97ZFdU4KqeQYqO8AEVGIhHWvkpgNBWHH3jrM28/y8llnbf3IjfIKv6p2pZIMinK1PCqbbROxs9Eud02Q== + version "26.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.7.0.tgz#41d405ac9143e1284a3401282db47ed459436778" + integrity sha512-/YNitdfG3o3cC6juZziAdkk6nfJt01jXVfj4AgaYVLs7bupHzRDL5K+eipdzhDXtQsiqaX1TzfwSuRlEgeln1A== dependencies: "@typescript-eslint/utils" "^5.10.0" From 7cdb2ebdff4bd7d39fda309fd180afb41c29feab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 06:12:08 +0000 Subject: [PATCH 03/31] chore(deps-dev): bump @typescript-eslint/eslint-plugin from 5.30.7 to 5.31.0 (#8332) chore(deps-dev): bump @typescript-eslint/eslint-plugin Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.30.7 to 5.31.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.31.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 70 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1e902a3383..aab681f254 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2061,13 +2061,13 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.14.0": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz#1621dabc1ae4084310e19e9efc80dfdbb97e7493" - integrity sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw== + version "5.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz#cae1967b1e569e6171bbc6bec2afa4e0c8efccfe" + integrity sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ== dependencies: - "@typescript-eslint/scope-manager" "5.30.7" - "@typescript-eslint/type-utils" "5.30.7" - "@typescript-eslint/utils" "5.30.7" + "@typescript-eslint/scope-manager" "5.31.0" + "@typescript-eslint/type-utils" "5.31.0" + "@typescript-eslint/utils" "5.31.0" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -2093,12 +2093,20 @@ "@typescript-eslint/types" "5.30.7" "@typescript-eslint/visitor-keys" "5.30.7" -"@typescript-eslint/type-utils@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz#5693dc3db6f313f302764282d614cfdbc8a9fcfd" - integrity sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw== +"@typescript-eslint/scope-manager@5.31.0": + version "5.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz#f47a794ba84d9b818ab7f8f44fff55a61016c606" + integrity sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg== + dependencies: + "@typescript-eslint/types" "5.31.0" + "@typescript-eslint/visitor-keys" "5.31.0" + +"@typescript-eslint/type-utils@5.31.0": + version "5.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz#70a0b7201360b5adbddb0c36080495aa08f6f3d9" + integrity sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w== dependencies: - "@typescript-eslint/utils" "5.30.7" + "@typescript-eslint/utils" "5.31.0" debug "^4.3.4" tsutils "^3.21.0" @@ -2107,6 +2115,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.7.tgz#18331487cc92d0f1fb1a6f580c8ec832528079d0" integrity sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg== +"@typescript-eslint/types@5.31.0": + version "5.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.31.0.tgz#7aa389122b64b18e473c1672fb3b8310e5f07a9a" + integrity sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g== + "@typescript-eslint/typescript-estree@5.30.7": version "5.30.7" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz#05da9f1b281985bfedcf62349847f8d168eecc07" @@ -2120,15 +2133,28 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.30.7", "@typescript-eslint/utils@^5.10.0": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.30.7.tgz#7135be070349e9f7caa262b0ca59dc96123351bb" - integrity sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ== +"@typescript-eslint/typescript-estree@5.31.0": + version "5.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz#eb92970c9d6e3946690d50c346fb9b1d745ee882" + integrity sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw== + dependencies: + "@typescript-eslint/types" "5.31.0" + "@typescript-eslint/visitor-keys" "5.31.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.31.0", "@typescript-eslint/utils@^5.10.0": + version "5.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.31.0.tgz#e146fa00dca948bfe547d665b2138a2dc1b79acd" + integrity sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.30.7" - "@typescript-eslint/types" "5.30.7" - "@typescript-eslint/typescript-estree" "5.30.7" + "@typescript-eslint/scope-manager" "5.31.0" + "@typescript-eslint/types" "5.31.0" + "@typescript-eslint/typescript-estree" "5.31.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" @@ -2140,6 +2166,14 @@ "@typescript-eslint/types" "5.30.7" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.31.0": + version "5.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz#b0eca264df01ce85dceb76aebff3784629258f54" + integrity sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg== + dependencies: + "@typescript-eslint/types" "5.31.0" + eslint-visitor-keys "^3.3.0" + "@zeit/schemas@2.21.0": version "2.21.0" resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.21.0.tgz#cd242c6551ffb51830049d68d9743ab65b45b820" From e2175d53a0a8a52ea7b6ac8589f78a97cb44f4cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 06:12:12 +0000 Subject: [PATCH 04/31] chore(deps-dev): bump @auto-it/first-time-contributor from 10.37.3 to 10.37.4 (#8331) chore(deps-dev): bump @auto-it/first-time-contributor Bumps [@auto-it/first-time-contributor](https://github.com/intuit/auto) from 10.37.3 to 10.37.4. - [Release notes](https://github.com/intuit/auto/releases) - [Changelog](https://github.com/intuit/auto/blob/main/CHANGELOG.md) - [Commits](https://github.com/intuit/auto/compare/v10.37.3...v10.37.4) --- updated-dependencies: - dependency-name: "@auto-it/first-time-contributor" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index aab681f254..5256b6878a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14,6 +14,11 @@ resolved "https://registry.yarnpkg.com/@auto-it/bot-list/-/bot-list-10.37.3.tgz#b0adeca53b744142a502d8548a2d7ea6abe81173" integrity sha512-mV7CxJzlraJYu6qy+ljCosFLfQZkXvdSX+2f5Na3KAuDPLbaFGLwZRa5i53JBYORsS9+n9pbEg5jC+M5HCC0xQ== +"@auto-it/bot-list@10.37.4": + version "10.37.4" + resolved "https://registry.yarnpkg.com/@auto-it/bot-list/-/bot-list-10.37.4.tgz#bb1ba1d42ef6fed0ceb87279d8b7a80b12f4a163" + integrity sha512-Lz981mShjY7VqQpG5mAfiR7py5iH8WbEIbd2/XUQu6EQFgljj0jT6XFA180Hz1tFQJ4o2TqtXaj3gBXURhpggQ== + "@auto-it/conventional-commits@^10.34.1": version "10.37.3" resolved "https://registry.yarnpkg.com/@auto-it/conventional-commits/-/conventional-commits-10.37.3.tgz#1f7b173b4ebd75bd4888bdfbcef04f6d006853b4" @@ -74,13 +79,59 @@ typescript-memoize "^1.0.0-alpha.3" url-join "^4.0.0" +"@auto-it/core@10.37.4": + version "10.37.4" + resolved "https://registry.yarnpkg.com/@auto-it/core/-/core-10.37.4.tgz#8d2979d5cbb3efc8d537caecc12637fc52451219" + integrity sha512-QS1z+PAjXUUKuEzx56ujvhpsgLOIgCdfnj/UyNfbpVoIS+5x7ve/fhoIlkF7A2Ogrvile7EOPT0EIVmDTtzYYg== + dependencies: + "@auto-it/bot-list" "10.37.4" + "@endemolshinegroup/cosmiconfig-typescript-loader" "^3.0.2" + "@octokit/core" "^3.5.1" + "@octokit/plugin-enterprise-compatibility" "1.3.0" + "@octokit/plugin-retry" "^3.0.9" + "@octokit/plugin-throttling" "^3.6.2" + "@octokit/rest" "^18.12.0" + await-to-js "^3.0.0" + chalk "^4.0.0" + cosmiconfig "7.0.0" + deepmerge "^4.0.0" + dotenv "^8.0.0" + endent "^2.1.0" + enquirer "^2.3.4" + env-ci "^5.0.1" + fast-glob "^3.1.1" + fp-ts "^2.5.3" + fromentries "^1.2.0" + gitlog "^4.0.3" + https-proxy-agent "^5.0.0" + import-cwd "^3.0.0" + import-from "^3.0.0" + io-ts "^2.1.2" + lodash.chunk "^4.2.0" + log-symbols "^4.0.0" + node-fetch "2.6.7" + parse-author "^2.0.0" + parse-github-url "1.0.2" + pretty-ms "^7.0.0" + requireg "^0.2.2" + semver "^7.0.0" + signale "^1.4.0" + tapable "^2.2.0" + terminal-link "^2.1.1" + tinycolor2 "^1.4.1" + ts-node "^9.1.1" + tslib "2.1.0" + type-fest "^0.21.1" + typescript-memoize "^1.0.0-alpha.3" + url-join "^4.0.0" + "@auto-it/first-time-contributor@^10.34.1": - version "10.37.3" - resolved "https://registry.yarnpkg.com/@auto-it/first-time-contributor/-/first-time-contributor-10.37.3.tgz#446beaf461811825f1342c98fb94033681f6e75b" - integrity sha512-8mEQg/hjydBIyf8n3NqVI+PFM0X3p08jwAGn/oUTy2Ety9hig04SjSnaWClMGMBhdHYzC51k7Ps/QA+madJZiA== + version "10.37.4" + resolved "https://registry.yarnpkg.com/@auto-it/first-time-contributor/-/first-time-contributor-10.37.4.tgz#f05d93576899754b4ba15e8a652b8cf4a2602ac3" + integrity sha512-SayKVNI/zGAONGk+BGIZkqFgtnqvQFn4iaF1qXwLjBwOyYdviKiJCCBnnre+sCHHDAgSnCEOUCy/TEUKO1xG4w== dependencies: - "@auto-it/bot-list" "10.37.3" - "@auto-it/core" "10.37.3" + "@auto-it/bot-list" "10.37.4" + "@auto-it/core" "10.37.4" array.prototype.flatmap "^1.2.2" endent "^2.1.0" tslib "2.1.0" From 4af1afbdfeffbcd3c387530c0815d4bad9be5ba2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 06:12:18 +0000 Subject: [PATCH 05/31] chore(deps-dev): bump eslint from 8.20.0 to 8.21.0 (#8329) Bumps [eslint](https://github.com/eslint/eslint) from 8.20.0 to 8.21.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.20.0...v8.21.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5256b6878a..2a554465f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1202,15 +1202,20 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@humanwhocodes/config-array@^0.9.2": - version "0.9.5" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7" - integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw== +"@humanwhocodes/config-array@^0.10.4": + version "0.10.4" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.4.tgz#01e7366e57d2ad104feea63e72248f22015c520c" + integrity sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw== dependencies: "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== + "@humanwhocodes/object-schema@^1.2.1": version "1.2.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" @@ -2279,11 +2284,16 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4, acorn@^8.5.0, acorn@^8.7.1: +acorn@^8.2.4, acorn@^8.5.0: version "8.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== +acorn@^8.8.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -4066,12 +4076,13 @@ eslint-visitor-keys@^3.3.0: integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.11.0: - version "8.20.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.20.0.tgz#048ac56aa18529967da8354a478be4ec0a2bc81b" - integrity sha512-d4ixhz5SKCa1D6SCPrivP7yYVi7nyD6A4vs6HIAul9ujBzcEmZVM3/0NN/yu5nKhmO1wjp5xQ46iRfmDGlOviA== + version "8.21.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" + integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== dependencies: "@eslint/eslintrc" "^1.3.0" - "@humanwhocodes/config-array" "^0.9.2" + "@humanwhocodes/config-array" "^0.10.4" + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -4081,14 +4092,17 @@ eslint@^8.11.0: eslint-scope "^7.1.1" eslint-utils "^3.0.0" eslint-visitor-keys "^3.3.0" - espree "^9.3.2" + espree "^9.3.3" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" + find-up "^5.0.0" functional-red-black-tree "^1.0.1" glob-parent "^6.0.1" globals "^13.15.0" + globby "^11.1.0" + grapheme-splitter "^1.0.4" ignore "^5.2.0" import-fresh "^3.0.0" imurmurhash "^0.1.4" @@ -4106,12 +4120,12 @@ eslint@^8.11.0: text-table "^0.2.0" v8-compile-cache "^2.0.3" -espree@^9.3.2: - version "9.3.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.2.tgz#f58f77bd334731182801ced3380a8cc859091596" - integrity sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA== +espree@^9.3.2, espree@^9.3.3: + version "9.3.3" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.3.3.tgz#2dd37c4162bb05f433ad3c1a52ddf8a49dc08e9d" + integrity sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng== dependencies: - acorn "^8.7.1" + acorn "^8.8.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.3.0" @@ -4698,6 +4712,11 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + gzip-size@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" From d6da2f9ea828eb8ed7e56177edb9d72e043e926d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:06:07 +0000 Subject: [PATCH 06/31] chore(deps-dev): bump @auto-it/conventional-commits from 10.37.3 to 10.37.4 (#8336) chore(deps-dev): bump @auto-it/conventional-commits Bumps [@auto-it/conventional-commits](https://github.com/intuit/auto) from 10.37.3 to 10.37.4. - [Release notes](https://github.com/intuit/auto/releases) - [Changelog](https://github.com/intuit/auto/blob/main/CHANGELOG.md) - [Commits](https://github.com/intuit/auto/compare/v10.37.3...v10.37.4) --- updated-dependencies: - dependency-name: "@auto-it/conventional-commits" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2a554465f7..31335aef30 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20,11 +20,11 @@ integrity sha512-Lz981mShjY7VqQpG5mAfiR7py5iH8WbEIbd2/XUQu6EQFgljj0jT6XFA180Hz1tFQJ4o2TqtXaj3gBXURhpggQ== "@auto-it/conventional-commits@^10.34.1": - version "10.37.3" - resolved "https://registry.yarnpkg.com/@auto-it/conventional-commits/-/conventional-commits-10.37.3.tgz#1f7b173b4ebd75bd4888bdfbcef04f6d006853b4" - integrity sha512-2MkGzEEeTYWKhZgCWQ9hC5GF64vAov+LRbeKJCD7ltQ/bq+ZCKkW8SVgf72lK2Kw9R/IEhzX+2VZObREWHGIMQ== + version "10.37.4" + resolved "https://registry.yarnpkg.com/@auto-it/conventional-commits/-/conventional-commits-10.37.4.tgz#6da70ae8df67f73e64bbf3d91917720f89f478a8" + integrity sha512-83mRJIyEr3srCZEeLYjJLwvYpFmHvLrLsneoTyevDNzKPOPVARRHzzLm4nGhsI4ilKgU8CEBSVZNV49cyvsVrQ== dependencies: - "@auto-it/core" "10.37.3" + "@auto-it/core" "10.37.4" array.prototype.flatmap "^1.2.2" conventional-changelog-core "^4.2.0" conventional-changelog-preset-loader "^2.3.4" From 6b88e74e955030b7d3fd7b0f7be9b63d3cfe576d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:06:10 +0000 Subject: [PATCH 07/31] chore(deps-dev): bump auto from 10.37.3 to 10.37.4 (#8335) Bumps [auto](https://github.com/intuit/auto) from 10.37.3 to 10.37.4. - [Release notes](https://github.com/intuit/auto/releases) - [Changelog](https://github.com/intuit/auto/blob/main/CHANGELOG.md) - [Commits](https://github.com/intuit/auto/compare/v10.37.3...v10.37.4) --- updated-dependencies: - dependency-name: auto dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 56 +++++++++++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/yarn.lock b/yarn.lock index 31335aef30..56876d3f14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -137,13 +137,13 @@ tslib "2.1.0" url-join "^4.0.0" -"@auto-it/npm@10.37.3": - version "10.37.3" - resolved "https://registry.yarnpkg.com/@auto-it/npm/-/npm-10.37.3.tgz#c3bfff53076dc0a9631ec4b5ed52a5d2fb598be0" - integrity sha512-+LTcaMB+sa5lqBOPDzHzmw6yQofFQ3rxsKlupSlRxTGacCeDg8JpZ3BbOwftiON/FF/gCr0jKsK6BR0Lf3p+WQ== +"@auto-it/npm@10.37.4": + version "10.37.4" + resolved "https://registry.yarnpkg.com/@auto-it/npm/-/npm-10.37.4.tgz#c1ff5f81138375bd3c9fc091f618a50af4df9aa8" + integrity sha512-nF/fZOZ6agknEiN2q9g+y+TuOsQp2f8EDRJInA0Vs/vfa22FOjIZhjJP/XAxc4ojfj/0OmKoATCQJug5PVwwYg== dependencies: - "@auto-it/core" "10.37.3" - "@auto-it/package-json-utils" "10.37.3" + "@auto-it/core" "10.37.4" + "@auto-it/package-json-utils" "10.37.4" await-to-js "^3.0.0" endent "^2.1.0" env-ci "^5.0.1" @@ -157,32 +157,32 @@ url-join "^4.0.0" user-home "^2.0.0" -"@auto-it/package-json-utils@10.37.3": - version "10.37.3" - resolved "https://registry.yarnpkg.com/@auto-it/package-json-utils/-/package-json-utils-10.37.3.tgz#6a3c1233627fb1458dc079a8d6e8adda387c6174" - integrity sha512-IYRl14TsUFXRIPU8GJzTW3cfL576yZ0GPHUsgDvHqJfkWIplPVe57+sXPCuQNmLXRbq7SXsMG4d3RcuHrUs+Rg== +"@auto-it/package-json-utils@10.37.4": + version "10.37.4" + resolved "https://registry.yarnpkg.com/@auto-it/package-json-utils/-/package-json-utils-10.37.4.tgz#8ca6209e5a2f217c458d2887ca0a9f52450cd7db" + integrity sha512-LLVtEeuAOeDQmhkDEOJyGU9PFdF5i46UcS7vG7BxSLQg2UAhvAolLgD/u6wOTOCDmQnLsBP6hdStSbHjDO8tMg== dependencies: parse-author "^2.0.0" parse-github-url "1.0.2" -"@auto-it/released@10.37.3": - version "10.37.3" - resolved "https://registry.yarnpkg.com/@auto-it/released/-/released-10.37.3.tgz#5d9c443eedcf74cfb8814d925ac95ce881944730" - integrity sha512-eMQT3cTNrfZwqoa3nh8NHyHKhgy6EGgNKxPqnR/4ucvPmjBwQD9sEBiLAbLZ6mOzgINF0+uouw5X1SfWvF4PMA== +"@auto-it/released@10.37.4": + version "10.37.4" + resolved "https://registry.yarnpkg.com/@auto-it/released/-/released-10.37.4.tgz#10d82f1faa08f98a7709b76ae23a1e03c6a3b505" + integrity sha512-1l4gRs/Cb3G6wsIwlxfoIp8OBl/WyAF2Lj5OmZ5Tbjfr6Mki6wD9xxa95rrXG47vaY+u+jcqNYX2dwP2ROxOhA== dependencies: - "@auto-it/bot-list" "10.37.3" - "@auto-it/core" "10.37.3" + "@auto-it/bot-list" "10.37.4" + "@auto-it/core" "10.37.4" deepmerge "^4.0.0" fp-ts "^2.5.3" io-ts "^2.1.2" tslib "2.1.0" -"@auto-it/version-file@10.37.3": - version "10.37.3" - resolved "https://registry.yarnpkg.com/@auto-it/version-file/-/version-file-10.37.3.tgz#81f36c608c49dc2eb8397917d5da13ecb3ff7c7a" - integrity sha512-IFTDLxjBFjcBMo7CmUhY4dgK2EkGyI/3TNQ4QxlUzTSQ3VsPdMpDzD+cHNdyozd94si8fbFGwwsReiaL+5Rl4w== +"@auto-it/version-file@10.37.4": + version "10.37.4" + resolved "https://registry.yarnpkg.com/@auto-it/version-file/-/version-file-10.37.4.tgz#51b46f9a7f03d58566c6b47c2a9e8ddeae65088c" + integrity sha512-CnYgo6GNgBcMDrkoeeHMG3PRDpYZ84pUZehoqZmXKczGzXEJSulHdedmPvuAW3rEvVAFJhWPRcJ10ByRkIQoBg== dependencies: - "@auto-it/core" "10.37.3" + "@auto-it/core" "10.37.4" fp-ts "^2.5.3" io-ts "^2.1.2" semver "^7.0.0" @@ -2531,14 +2531,14 @@ author-regex@^1.0.0: integrity sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA= auto@^10.34.1: - version "10.37.3" - resolved "https://registry.yarnpkg.com/auto/-/auto-10.37.3.tgz#6a920f0f39ffdbe8afa7103576b895d6f09715d3" - integrity sha512-0gQhbm/LKXNBxhIAvXxT9JsUc5bewSuQ8CuIJHEJvm5rhFt/tYProhNIGyfqsqkzear/CScBaohP4SknwtxIHg== + version "10.37.4" + resolved "https://registry.yarnpkg.com/auto/-/auto-10.37.4.tgz#450a9d51166919a97ea85fa06d117ecd94adb9ff" + integrity sha512-chspNHfy17DFOPwLbT74xU+fD0NXhtLpWnKZjoLjHUKp0+ZNJSM9jrBHq2ExB4EAP3UXlFVDG+BzrkgZoYLzCw== dependencies: - "@auto-it/core" "10.37.3" - "@auto-it/npm" "10.37.3" - "@auto-it/released" "10.37.3" - "@auto-it/version-file" "10.37.3" + "@auto-it/core" "10.37.4" + "@auto-it/npm" "10.37.4" + "@auto-it/released" "10.37.4" + "@auto-it/version-file" "10.37.4" await-to-js "^3.0.0" chalk "^4.0.0" command-line-application "^0.10.1" From c26fd9454f8e9f02553fa3f0e09a53b2a9d06302 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:06:13 +0000 Subject: [PATCH 08/31] chore(deps-dev): bump rollup from 2.77.0 to 2.77.2 (#8334) Bumps [rollup](https://github.com/rollup/rollup) from 2.77.0 to 2.77.2. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.77.0...v2.77.2) --- updated-dependencies: - dependency-name: rollup dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 56876d3f14..d9c58aa985 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6996,9 +6996,9 @@ rollup-plugin-terser@^7.0.2: terser "^5.0.0" rollup@^2.70.1: - version "2.77.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.0.tgz#749eaa5ac09b6baa52acc076bc46613eddfd53f4" - integrity sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g== + version "2.77.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" + integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== optionalDependencies: fsevents "~2.3.2" From cc593c1fb726adc6fa526ad9add963b371b6780a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 07:06:16 +0000 Subject: [PATCH 09/31] chore(deps-dev): bump @typescript-eslint/parser from 5.30.7 to 5.31.0 (#8330) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.30.7 to 5.31.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.31.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 46 ++++++---------------------------------------- 1 file changed, 6 insertions(+), 40 deletions(-) diff --git a/yarn.lock b/yarn.lock index d9c58aa985..30f30cb1ed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2132,23 +2132,15 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.14.0": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.30.7.tgz#99d09729392aec9e64b1de45cd63cb81a4ddd980" - integrity sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A== + version "5.31.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.31.0.tgz#7f42d7dcc68a0a6d80a0f3d9a65063aee7bb8d2c" + integrity sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw== dependencies: - "@typescript-eslint/scope-manager" "5.30.7" - "@typescript-eslint/types" "5.30.7" - "@typescript-eslint/typescript-estree" "5.30.7" + "@typescript-eslint/scope-manager" "5.31.0" + "@typescript-eslint/types" "5.31.0" + "@typescript-eslint/typescript-estree" "5.31.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz#8269a931ef1e5ae68b5eb80743cc515c4ffe3dd7" - integrity sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw== - dependencies: - "@typescript-eslint/types" "5.30.7" - "@typescript-eslint/visitor-keys" "5.30.7" - "@typescript-eslint/scope-manager@5.31.0": version "5.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz#f47a794ba84d9b818ab7f8f44fff55a61016c606" @@ -2166,29 +2158,11 @@ debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.30.7.tgz#18331487cc92d0f1fb1a6f580c8ec832528079d0" - integrity sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg== - "@typescript-eslint/types@5.31.0": version "5.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.31.0.tgz#7aa389122b64b18e473c1672fb3b8310e5f07a9a" integrity sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g== -"@typescript-eslint/typescript-estree@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz#05da9f1b281985bfedcf62349847f8d168eecc07" - integrity sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA== - dependencies: - "@typescript-eslint/types" "5.30.7" - "@typescript-eslint/visitor-keys" "5.30.7" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.31.0": version "5.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz#eb92970c9d6e3946690d50c346fb9b1d745ee882" @@ -2214,14 +2188,6 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.30.7": - version "5.30.7" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz#c093abae75b4fd822bfbad9fc337f38a7a14909a" - integrity sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw== - dependencies: - "@typescript-eslint/types" "5.30.7" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.31.0": version "5.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz#b0eca264df01ce85dceb76aebff3784629258f54" From 0bbe2d53da6dd5a8357bc749ac153bb74e0e9b08 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Aug 2022 08:22:07 -0400 Subject: [PATCH 10/31] chore(deps-dev): bump del-cli from 4.0.1 to 5.0.0 (#8313) --- package.json | 2 +- yarn.lock | 122 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 76 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index ee5dc1a8dd..a684dd3aa6 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,7 @@ "cheerio": "^1.0.0-rc.10", "conventional-changelog-cli": "^2.2.2", "d3": "^7.4.4", - "del-cli": "^4.0.1", + "del-cli": "^5.0.0", "eslint": "^8.11.0", "eslint-config-prettier": "^8.5.0", "eslint-plugin-jest": "^26.1.1", diff --git a/yarn.lock b/yarn.lock index 30f30cb1ed..bb822269e6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2272,13 +2272,13 @@ agent-base@6: dependencies: debug "4" -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== +aggregate-error@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e" + integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" + clean-stack "^4.0.0" + indent-string "^5.0.0" ajv-formats@^2.1.1: version "2.1.1" @@ -2908,10 +2908,12 @@ cjs-module-lexer@^1.0.0: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +clean-stack@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31" + integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== + dependencies: + escape-string-regexp "5.0.0" cli-boxes@^3.0.0: version "3.0.0" @@ -3704,27 +3706,27 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" -del-cli@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-4.0.1.tgz#2303ccaa45708ee8c6211568344cf87336abf30a" - integrity sha512-KtR/6cBfZkGDAP2NA7z+bP4p1OMob3wjN9mq13+SWvExx6jT9gFWfLgXEeX8J2B47OKeNCq9yTONmtryQ+m+6g== +del-cli@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-5.0.0.tgz#fa79fd57e888ecaaf8a468d87e8a175142a24aa9" + integrity sha512-rENFhUaYcjoMODwFhhlON+ogN7DoG+4+GFN+bsA1XeDt4w2OKQnQadFP1thHSAlK9FAtl88qgP66wOV+eFZZiQ== dependencies: - del "^6.0.0" - meow "^10.1.0" + del "^7.0.0" + meow "^10.1.3" -del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== +del@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-7.0.0.tgz#79db048bec96f83f344b46c1a66e35d9c09fe8ac" + integrity sha512-tQbV/4u5WVB8HMJr08pgw0b6nG4RGt/tj+7Numvq+zqcvUFeMaIWWOUFltiU+6go8BSO2/ogsB4EasDaj0y68Q== dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" + globby "^13.1.2" + graceful-fs "^4.2.10" + is-glob "^4.0.3" + is-path-cwd "^3.0.0" + is-path-inside "^4.0.0" + p-map "^5.5.0" rimraf "^3.0.2" - slash "^3.0.0" + slash "^4.0.0" delaunator@5: version "5.0.0" @@ -3962,6 +3964,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escape-string-regexp@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -4197,7 +4204,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== -fast-glob@^3.1.1, fast-glob@^3.2.9: +fast-glob@^3.1.1, fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.2.11" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== @@ -4638,7 +4645,7 @@ globals@^13.15.0: dependencies: type-fest "^0.20.2" -globby@^11.0.1, globby@^11.1.0: +globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -4650,6 +4657,17 @@ globby@^11.0.1, globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +globby@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -4673,11 +4691,16 @@ globby@^7.1.1: pify "^3.0.0" slash "^1.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.9: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.9" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +graceful-fs@^4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + grapheme-splitter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" @@ -5032,15 +5055,15 @@ is-obj@^2.0.0: resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== +is-path-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-3.0.0.tgz#889b41e55c8588b1eb2a96a61d05740a674521c7" + integrity sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA== -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-path-inside@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-4.0.0.tgz#805aeb62c47c1b12fc3fd13bfb3ed1e7430071db" + integrity sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA== is-plain-obj@^1.1.0: version "1.1.0" @@ -5928,10 +5951,10 @@ meant@^1.0.1: resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" integrity sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw== -meow@^10.1.0: - version "10.1.2" - resolved "https://registry.yarnpkg.com/meow/-/meow-10.1.2.tgz#62951cb69afa69594142c8250806bc30a3912e4d" - integrity sha512-zbuAlN+V/sXlbGchNS9WTWjUzeamwMt/BApKCJi7B0QyZstZaMx0n4Unll/fg0njGtMdC9UP5SAscvOCLYdM+Q== +meow@^10.1.3: + version "10.1.3" + resolved "https://registry.yarnpkg.com/meow/-/meow-10.1.3.tgz#21689959a7d00e8901aff30d208acb2122eb8088" + integrity sha512-0WL7RMCPPdUTE00+GxJjL4d5Dm6eUbmAzxlzywJWiRUKCW093owmZ7/q74tH9VI91vxw9KJJNxAcvdpxb2G4iA== dependencies: "@types/minimist" "^1.2.2" camelcase-keys "^7.0.0" @@ -6321,12 +6344,12 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== +p-map@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-5.5.0.tgz#054ca8ca778dfa4cf3f8db6638ccb5b937266715" + integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg== dependencies: - aggregate-error "^3.0.0" + aggregate-error "^4.0.0" p-try@^1.0.0: version "1.0.0" @@ -7143,6 +7166,11 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + source-map-resolve@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" From 5995ece05e1dd82a889414a23a2eb34827cf062a Mon Sep 17 00:00:00 2001 From: Lukas Hermann Date: Wed, 3 Aug 2022 23:01:30 -0700 Subject: [PATCH 11/31] feat: Add `timeFormatType` field (#8320) Co-authored-by: GitHub Actions Bot --- build/vega-lite-schema.json | 4 + site/docs/config.md | 4 +- src/compile/axis/encode.ts | 60 +++++++----- src/compile/format.ts | 145 +++++++++++++++------------ src/compile/legend/encode.ts | 37 ++++--- src/config.ts | 9 ++ test/compile/axis/encode.test.ts | 24 +++++ test/compile/format.test.ts | 152 ++++++++++++++++++++++------- test/compile/legend/encode.test.ts | 39 ++++++++ 9 files changed, 339 insertions(+), 135 deletions(-) diff --git a/build/vega-lite-schema.json b/build/vega-lite-schema.json index 3b4cfcbb47..56bd01bbbc 100644 --- a/build/vega-lite-schema.json +++ b/build/vega-lite-schema.json @@ -7725,6 +7725,10 @@ "description": "Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n\n__Default value:__ `\"%b %d, %Y\"` __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.", "type": "string" }, + "timeFormatType": { + "description": "[Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type) for `config.timeFormat`.\n\n__Default value:__ `undefined` -- This is equilvalent to call D3-time-format, which is exposed as [`timeFormat` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#timeFormat). __Note:__ You must also set `customFormatTypes` to `true` and there must *not* be a `timeUnit` defined to use this feature.", + "type": "string" + }, "title": { "$ref": "#/definitions/TitleConfig", "description": "Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config)." diff --git a/site/docs/config.md b/site/docs/config.md index c1449f22c4..809f275d98 100644 --- a/site/docs/config.md +++ b/site/docs/config.md @@ -50,9 +50,9 @@ A Vega-Lite `config` object can have the following top-level properties: ## Format Configuration -These two config properties define the default number and time formats for text marks as well as axes, headers, and legends: +These config properties define the default number and time formats for text marks as well as axes, headers, and legends: -{% include table.html props="numberFormat,numberFormatType,timeFormat,customFormatTypes" source="Config" %} +{% include table.html props="numberFormat,numberFormatType,normalizedNumberFormat,normalizedNumberFormatType,timeFormat,timeFormatType,customFormatTypes" source="Config" %} {:#custom-format-type} diff --git a/src/compile/axis/encode.ts b/src/compile/axis/encode.ts index b9a49b46c9..4a42815813 100644 --- a/src/compile/axis/encode.ts +++ b/src/compile/axis/encode.ts @@ -1,5 +1,5 @@ import {getSecondaryRangeChannel, PositionScaleChannel} from '../../channel'; -import {channelDefType, getFieldOrDatumDef, isPositionFieldOrDatumDef} from '../../channeldef'; +import {channelDefType, getFieldOrDatumDef, isFieldDef, isPositionFieldOrDatumDef} from '../../channeldef'; import {formatCustomType, isCustomFormatType} from '../format'; import {UnitModel} from '../unit'; @@ -22,34 +22,48 @@ export function labels(model: UnitModel, channel: PositionScaleChannel, specifie }), ...specifiedLabelsSpec }; - } else if ( - format === undefined && - formatType === undefined && - channelDefType(fieldOrDatumDef) === 'quantitative' && - config.customFormatTypes - ) { + } else if (format === undefined && formatType === undefined && config.customFormatTypes) { + if (channelDefType(fieldOrDatumDef) === 'quantitative') { + if ( + isPositionFieldOrDatumDef(fieldOrDatumDef) && + fieldOrDatumDef.stack === 'normalize' && + config.normalizedNumberFormatType + ) { + return { + text: formatCustomType({ + fieldOrDatumDef, + field: 'datum.value', + format: config.normalizedNumberFormat, + formatType: config.normalizedNumberFormatType, + config + }), + ...specifiedLabelsSpec + }; + } else if (config.numberFormatType) { + return { + text: formatCustomType({ + fieldOrDatumDef, + field: 'datum.value', + format: config.numberFormat, + formatType: config.numberFormatType, + config + }), + ...specifiedLabelsSpec + }; + } + } if ( - isPositionFieldOrDatumDef(fieldOrDatumDef) && - fieldOrDatumDef.stack === 'normalize' && - config.normalizedNumberFormatType + channelDefType(fieldOrDatumDef) === 'temporal' && + config.timeFormatType && + isFieldDef(fieldOrDatumDef) && + !fieldOrDatumDef.timeUnit ) { return { text: formatCustomType({ fieldOrDatumDef, field: 'datum.value', - format: config.normalizedNumberFormat, - formatType: config.normalizedNumberFormatType, - config - }), - ...specifiedLabelsSpec - }; - } else if (config.numberFormatType) { - return { - text: formatCustomType({ - fieldOrDatumDef, - field: 'datum.value', - format: config.numberFormat, - formatType: config.numberFormatType, + format: config.timeFormat, + formatType: config.timeFormatType, config }), ...specifiedLabelsSpec diff --git a/src/compile/format.ts b/src/compile/format.ts index ade16dbdf2..aa5d76b1e6 100644 --- a/src/compile/format.ts +++ b/src/compile/format.ts @@ -59,47 +59,51 @@ export function formatSignalRef({ const field = fieldToFormat(fieldOrDatumDef, expr, normalizeStack); const type = channelDefType(fieldOrDatumDef); - if ( - normalizeStack && - type === 'quantitative' && - format === undefined && - formatType === undefined && - config.customFormatTypes && - config.normalizedNumberFormatType - ) { - return formatCustomType({ - fieldOrDatumDef, - format: config.normalizedNumberFormat, - formatType: config.normalizedNumberFormatType, - expr, - config - }); - } - - if ( - type === 'quantitative' && - format === undefined && - formatType === undefined && - config.customFormatTypes && - config.numberFormatType - ) { - return formatCustomType({ - fieldOrDatumDef, - format: config.numberFormat, - formatType: config.numberFormatType, - expr, - config - }); + if (format === undefined && formatType === undefined && config.customFormatTypes) { + if (type === 'quantitative') { + if (normalizeStack && config.normalizedNumberFormatType) + return formatCustomType({ + fieldOrDatumDef, + format: config.normalizedNumberFormat, + formatType: config.normalizedNumberFormatType, + expr, + config + }); + if (config.numberFormatType) { + return formatCustomType({ + fieldOrDatumDef, + format: config.numberFormat, + formatType: config.numberFormatType, + expr, + config + }); + } + } + if ( + type === 'temporal' && + config.timeFormatType && + isFieldDef(fieldOrDatumDef) && + fieldOrDatumDef.timeUnit === undefined + ) { + return formatCustomType({ + fieldOrDatumDef, + format: config.timeFormat, + formatType: config.timeFormatType, + expr, + config + }); + } } if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) { - const signal = timeFormatExpression( + const signal = timeFormatExpression({ field, - isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined, + timeUnit: isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined, format, - config.timeFormat, - isScaleFieldDef(fieldOrDatumDef) && fieldOrDatumDef.scale?.type === ScaleType.UTC - ); + formatType: config.timeFormatType, + rawTimeFormat: config.timeFormat, + isUTCScale: isScaleFieldDef(fieldOrDatumDef) && fieldOrDatumDef.scale?.type === ScaleType.UTC + }); return signal ? {signal} : undefined; } @@ -179,21 +183,18 @@ export function guideFormat( ) { if (isCustomFormatType(formatType)) { return undefined; // handled in encode block - } else if ( - format === undefined && - formatType === undefined && - config.customFormatTypes && - channelDefType(fieldOrDatumDef) === 'quantitative' - ) { - if ( - config.normalizedNumberFormatType && - isPositionFieldOrDatumDef(fieldOrDatumDef) && - fieldOrDatumDef.stack === 'normalize' - ) { - return undefined; // handled in encode block - } - if (config.numberFormatType) { - return undefined; // handled in encode block + } else if (format === undefined && formatType === undefined && config.customFormatTypes) { + if (channelDefType(fieldOrDatumDef) === 'quantitative') { + if ( + config.normalizedNumberFormatType && + isPositionFieldOrDatumDef(fieldOrDatumDef) && + fieldOrDatumDef.stack === 'normalize' + ) { + return undefined; // handled in encode block + } + if (config.numberFormatType) { + return undefined; // handled in encode block + } } } @@ -211,8 +212,11 @@ export function guideFormat( if (isFieldOrDatumDefForTimeFormat(fieldOrDatumDef)) { const timeUnit = isFieldDef(fieldOrDatumDef) ? normalizeTimeUnit(fieldOrDatumDef.timeUnit)?.unit : undefined; + if (timeUnit === undefined && config.customFormatTypes && config.timeFormatType) { + return undefined; // hanlded in encode block + } - return timeFormat(format as string, timeUnit, config, omitTimeFormatConfig); + return timeFormat({specifiedFormat: format as string, timeUnit, config, omitTimeFormatConfig}); } return numberFormat({type, specifiedFormat: format, config}); @@ -261,7 +265,17 @@ export function numberFormat({ /** * Returns time format for a fieldDef for use in guides. */ -export function timeFormat(specifiedFormat: string, timeUnit: TimeUnit, config: Config, omitTimeFormatConfig: boolean) { +export function timeFormat({ + specifiedFormat, + timeUnit, + config, + omitTimeFormatConfig +}: { + specifiedFormat?: string; + timeUnit?: TimeUnit; + config: Config; + omitTimeFormatConfig?: boolean; +}) { if (specifiedFormat) { return specifiedFormat; } @@ -305,15 +319,26 @@ export function binFormatExpression( /** * Returns the time expression used for axis/legend labels or text mark for a temporal field */ -export function timeFormatExpression( - field: string, - timeUnit: TimeUnit, - format: string | Dict, - rawTimeFormat: string, // should be provided only for actual text and headers, not axis/legend labels - isUTCScale: boolean -): string { +export function timeFormatExpression({ + field, + timeUnit, + format, + formatType, + rawTimeFormat, + isUTCScale +}: { + field: string; + timeUnit?: TimeUnit; + format?: string | Dict; + formatType?: string; + rawTimeFormat?: string; // should be provided only for actual text and headers, not axis/legend labels + isUTCScale?: boolean; +}): string { if (!timeUnit || format) { // If there is no time unit, or if user explicitly specifies format for axis/legend/text. + if (!timeUnit && formatType) { + return `${formatType}(${field}, '${format}')`; + } format = isString(format) ? format : rawTimeFormat; // only use provided timeFormat if there is no timeUnit. return `${isUTCScale ? 'utc' : 'time'}Format(${field}, '${format}')`; } else { diff --git a/src/compile/legend/encode.ts b/src/compile/legend/encode.ts index 91a60ac9db..334e0b0381 100644 --- a/src/compile/legend/encode.ts +++ b/src/compile/legend/encode.ts @@ -160,20 +160,29 @@ export function labels(specifiedlabelsSpec: any, {fieldOrDatumDef, model, channe formatType, config }); - } else if ( - fieldOrDatumDef.type === 'quantitative' && - format === undefined && - formatType === undefined && - config.customFormatTypes && - config.numberFormatType - ) { - text = formatCustomType({ - fieldOrDatumDef, - field: 'datum.value', - format: config.numberFormat, - formatType: config.numberFormatType, - config - }); + } else if (format === undefined && formatType === undefined && config.customFormatTypes) { + if (fieldOrDatumDef.type === 'quantitative' && config.numberFormatType) { + text = formatCustomType({ + fieldOrDatumDef, + field: 'datum.value', + format: config.numberFormat, + formatType: config.numberFormatType, + config + }); + } else if ( + fieldOrDatumDef.type === 'temporal' && + config.timeFormatType && + isFieldDef(fieldOrDatumDef) && + fieldOrDatumDef.timeUnit === undefined + ) { + text = formatCustomType({ + fieldOrDatumDef, + field: 'datum.value', + format: config.timeFormat, + formatType: config.timeFormatType, + config + }); + } } const labelsSpec = { diff --git a/src/config.ts b/src/config.ts index 4c20c662f1..4c1a905e3c 100644 --- a/src/config.ts +++ b/src/config.ts @@ -189,6 +189,15 @@ export interface VLOnlyConfig { */ timeFormat?: string; + /** + * [Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type) + * for `config.timeFormat`. + * + * __Default value:__ `undefined` -- This is equilvalent to call D3-time-format, which is exposed as [`timeFormat` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#timeFormat). + * __Note:__ You must also set `customFormatTypes` to `true` and there must *not* be a `timeUnit` defined to use this feature. + */ + timeFormatType?: string; + /** * Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type). */ diff --git a/test/compile/axis/encode.test.ts b/test/compile/axis/encode.test.ts index 37120dccbc..8b64e8b900 100644 --- a/test/compile/axis/encode.test.ts +++ b/test/compile/axis/encode.test.ts @@ -77,5 +77,29 @@ describe('compile/axis/encode', () => { const labels = encode.labels(model, 'x', {}); expect(labels.text.signal).toBe('customNumberFormat(datum.value, "abc")'); }); + + it('applies custom timeFormatType from config', () => { + const model = parseUnitModelWithScale({ + mark: 'point', + encoding: { + x: {field: 'a', type: 'temporal'} + }, + config: {customFormatTypes: true, timeFormat: 'abc', timeFormatType: 'customTimeFormat'} + }); + const labels = encode.labels(model, 'x', {}); + expect(labels.text.signal).toBe('customTimeFormat(datum.value, "abc")'); + }); + + it('prefers timeUnit over timeFormatType from config', () => { + const model = parseUnitModelWithScale({ + mark: 'point', + encoding: { + x: {field: 'a', type: 'temporal', timeUnit: 'date'} + }, + config: {customFormatTypes: true, timeFormat: 'abc', timeFormatType: 'customTimeFormat'} + }); + const labels = encode.labels(model, 'x', {}); + expect(labels).toEqual({}); + }); }); }); diff --git a/test/compile/format.test.ts b/test/compile/format.test.ts index 95deafbd96..ada7be09f4 100644 --- a/test/compile/format.test.ts +++ b/test/compile/format.test.ts @@ -4,7 +4,8 @@ import { guideFormat, guideFormatType, numberFormat, - timeFormatExpression + timeFormatExpression, + timeFormat } from '../../src/compile/format'; import {defaultConfig} from '../../src/config'; import {NOMINAL, ORDINAL, QUANTITATIVE, TEMPORAL} from '../../src/type'; @@ -13,13 +14,11 @@ describe('Format', () => { describe('timeFormatExpression()', () => { it('should get the right time expression for month', () => { const fieldDef = {timeUnit: 'month', field: 'a', type: TEMPORAL} as const; - const expression = timeFormatExpression( - vgField(fieldDef, {expr: 'datum'}), - 'month', - undefined, - defaultConfig.timeFormat, - false - ); + const expression = timeFormatExpression({ + field: vgField(fieldDef, {expr: 'datum'}), + timeUnit: 'month', + rawTimeFormat: defaultConfig.timeFormat + }); expect(expression).toBe( 'timeFormat(datum["month_a"], timeUnitSpecifier(["month"], {"year-month":"%b %Y ","year-month-date":"%b %d, %Y "}))' ); @@ -27,38 +26,33 @@ describe('Format', () => { it('should get the right time expression for yearmonth with custom format', () => { const fieldDef = {timeUnit: 'yearmonth', field: 'a', type: TEMPORAL} as const; - const expression = timeFormatExpression( - vgField(fieldDef, {expr: 'datum'}), - 'month', - '%Y', - defaultConfig.timeFormat, - false - ); + const expression = timeFormatExpression({ + field: vgField(fieldDef, {expr: 'datum'}), + timeUnit: 'month', + format: '%Y', + rawTimeFormat: defaultConfig.timeFormat + }); expect(expression).toBe(`timeFormat(datum["yearmonth_a"], '%Y')`); }); it('should get the right time expression for quarter', () => { const fieldDef = {timeUnit: 'quarter', field: 'a', type: TEMPORAL} as const; - const expression = timeFormatExpression( - vgField(fieldDef, {expr: 'datum'}), - 'quarter', - undefined, - defaultConfig.timeFormat, - false - ); + const expression = timeFormatExpression({ + field: vgField(fieldDef, {expr: 'datum'}), + timeUnit: 'quarter', + rawTimeFormat: defaultConfig.timeFormat + }); expect(expression).toBe( 'timeFormat(datum["quarter_a"], timeUnitSpecifier(["quarter"], {"year-month":"%b %Y ","year-month-date":"%b %d, %Y "}))' ); }); it('should get the right time expression for yearquarter', () => { - const expression = timeFormatExpression( - 'datum["data"]', - 'yearquarter', - undefined, - defaultConfig.timeFormat, - false - ); + const expression = timeFormatExpression({ + field: 'datum["data"]', + timeUnit: 'yearquarter', + rawTimeFormat: defaultConfig.timeFormat + }); expect(expression).toBe( 'timeFormat(datum["data"], timeUnitSpecifier(["year","quarter"], {"year-month":"%b %Y ","year-month-date":"%b %d, %Y "}))' ); @@ -66,15 +60,60 @@ describe('Format', () => { it('should get the right time expression for yearmonth with custom format and utc scale type', () => { const fieldDef = {timeUnit: 'yearmonth', field: 'a', type: TEMPORAL} as const; - const expression = timeFormatExpression( - vgField(fieldDef, {expr: 'datum'}), - 'month', - '%Y', - defaultConfig.timeFormat, - true - ); + const expression = timeFormatExpression({ + field: vgField(fieldDef, {expr: 'datum'}), + timeUnit: 'month', + format: '%Y', + rawTimeFormat: defaultConfig.timeFormat, + isUTCScale: true + }); expect(expression).toBe(`utcFormat(datum["yearmonth_a"], '%Y')`); }); + + it('should get the right time expression for with a custom timeFormatType', () => { + const fieldDef = {field: 'a', type: TEMPORAL} as const; + const expression = timeFormatExpression({ + field: vgField(fieldDef, {expr: 'datum'}), + format: '%Y', + formatType: 'customFormat' + }); + expect(expression).toBe(`customFormat(datum["a"], '%Y')`); + }); + + it('should prefer timeUnit over timeFormatType', () => { + const fieldDef = {field: 'a', type: TEMPORAL, timeUnit: 'date'} as const; + const expression = timeFormatExpression({ + field: vgField(fieldDef, {expr: 'datum'}), + format: '%Y', + timeUnit: 'date', + formatType: 'customFormat' + }); + expect(expression).toBe(`timeFormat(datum["date_a"], '%Y')`); + }); + }); + + describe('timeFormat()', () => { + it('returns the specifiedFormat if it exists', () => { + const formatted = timeFormat({specifiedFormat: 'abc', config: {}}); + expect(formatted).toBe('abc'); + }); + + it('returns the the formatted timeUnitExpression', () => { + const formatted = timeFormat({timeUnit: 'date', config: {}}); + expect(formatted).toEqual({ + signal: 'timeUnitSpecifier(["date"], {"year-month":"%b %Y ","year-month-date":"%b %d, %Y "})' + }); + }); + + it('omits the timeFormat when omitTimeFormatConfig and no specifiedFormat', () => { + const formatted = timeFormat({config: {timeFormat: '%y'}, omitTimeFormatConfig: true}); + expect(formatted).toBeUndefined(); + }); + + it('returns the timeFormat when !omitTimeFormatConfig and no specifiedFormat', () => { + const formatted = timeFormat({config: {timeFormat: '%y'}, omitTimeFormatConfig: false}); + expect(formatted).toBe('%y'); + }); }); describe('numberFormat()', () => { @@ -189,6 +228,20 @@ describe('Format', () => { }); }); + it('should use a custom formatter datumDef if config.timeFormatType is present', () => { + expect( + formatSignalRef({ + fieldOrDatumDef: {field: 'date', type: 'temporal'}, + format: undefined, + formatType: undefined, + expr: 'parent', + config: {timeFormat: 'abc', timeFormatType: 'customFormatter', customFormatTypes: true} + }) + ).toEqual({ + signal: 'customFormatter(parent["date"], "abc")' + }); + }); + it('should use a custom formatter datumDef if config.normalizedNumberFormatType is present and stack is normalized', () => { expect( formatSignalRef({ @@ -235,6 +288,7 @@ describe('Format', () => { const format = guideFormat({datum: 200, type: 'quantitative'}, 'quantitative', 'abc', 'custom', {}, false); expect(format).toBeUndefined(); }); + it('returns undefined for custom formatType in the config', () => { const format = guideFormat( {datum: 200, type: 'quantitative'}, @@ -259,6 +313,32 @@ describe('Format', () => { expect(format).toBeUndefined(); }); + it('returns undefined for a field if custom timeFormatType is in the config', () => { + const format = guideFormat( + {datum: 200, type: 'temporal'}, + 'temporal', + undefined, + undefined, + {timeFormat: 'abc', timeFormatType: 'customFormatter', customFormatTypes: true}, + false + ); + expect(format).toBeUndefined(); + }); + + it('Prefers timeUnit to timeFormatType', () => { + const format = guideFormat( + {field: 'x', type: 'temporal', timeUnit: 'hours'}, + 'temporal', + undefined, + undefined, + {timeFormat: 'abc', timeFormatType: 'customFormatter', customFormatTypes: true}, + false + ); + expect(format).toEqual({ + signal: 'timeUnitSpecifier(["hours"], {"year-month":"%b %Y ","year-month-date":"%b %d, %Y "})' + }); + }); + it('returns format as normalizedNumberFormatType it is not in the config', () => { const format = guideFormat( {datum: 200, type: 'quantitative', stack: 'normalize'} as PositionDatumDef, diff --git a/test/compile/legend/encode.test.ts b/test/compile/legend/encode.test.ts index 074ca6d0bf..d36bbaae7f 100644 --- a/test/compile/legend/encode.test.ts +++ b/test/compile/legend/encode.test.ts @@ -185,4 +185,43 @@ describe('compile/legend', () => { ); expect(label.text).toEqual({signal: 'customDateFormat(datum.value, "abc")'}); }); + + it('returns correct expression for custom format Type from config.timeFormatType', () => { + const fieldDef: Encoding['color'] = { + field: 'a', + type: 'temporal' + }; + + const model = parseUnitModelWithScale({ + mark: 'point', + encoding: {color: fieldDef}, + config: {customFormatTypes: true, timeFormat: 'abc', timeFormatType: 'customDateFormat'} + }); + + const label = encode.labels( + {}, + {fieldOrDatumDef: fieldDef, model, channel: COLOR, legendCmpt: symbolLegend, legendType: 'symbol'} + ); + expect(label.text).toEqual({signal: 'customDateFormat(datum.value, "abc")'}); + }); + + it('prefers timeUnit over config.timeFormatType', () => { + const fieldDef: Encoding['color'] = { + field: 'a', + type: 'temporal', + timeUnit: 'date' + }; + + const model = parseUnitModelWithScale({ + mark: 'point', + encoding: {color: fieldDef}, + config: {customFormatTypes: true, timeFormat: 'abc', timeFormatType: 'customDateFormat'} + }); + + const label = encode.labels( + {}, + {fieldOrDatumDef: fieldDef, model, channel: COLOR, legendCmpt: symbolLegend, legendType: 'symbol'} + ); + expect(label).toBeUndefined(); + }); }); From bda0bf10eac40b39c17de582f0aa5bd4bfed0e81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 07:01:57 +0000 Subject: [PATCH 12/31] chore(deps-dev): bump @rollup/plugin-commonjs from 22.0.1 to 22.0.2 (#8347) Bumps [@rollup/plugin-commonjs](https://github.com/rollup/plugins/tree/HEAD/packages/commonjs) from 22.0.1 to 22.0.2. - [Release notes](https://github.com/rollup/plugins/releases) - [Changelog](https://github.com/rollup/plugins/blob/master/packages/commonjs/CHANGELOG.md) - [Commits](https://github.com/rollup/plugins/commits/commonjs-v22.0.2/packages/commonjs) --- updated-dependencies: - dependency-name: "@rollup/plugin-commonjs" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 56 +++---------------------------------------------------- 1 file changed, 3 insertions(+), 53 deletions(-) diff --git a/yarn.lock b/yarn.lock index bb822269e6..ec289ce3c1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,11 +9,6 @@ dependencies: "@jridgewell/trace-mapping" "^0.3.0" -"@auto-it/bot-list@10.37.3": - version "10.37.3" - resolved "https://registry.yarnpkg.com/@auto-it/bot-list/-/bot-list-10.37.3.tgz#b0adeca53b744142a502d8548a2d7ea6abe81173" - integrity sha512-mV7CxJzlraJYu6qy+ljCosFLfQZkXvdSX+2f5Na3KAuDPLbaFGLwZRa5i53JBYORsS9+n9pbEg5jC+M5HCC0xQ== - "@auto-it/bot-list@10.37.4": version "10.37.4" resolved "https://registry.yarnpkg.com/@auto-it/bot-list/-/bot-list-10.37.4.tgz#bb1ba1d42ef6fed0ceb87279d8b7a80b12f4a163" @@ -34,51 +29,6 @@ io-ts "^2.1.2" tslib "2.1.0" -"@auto-it/core@10.37.3": - version "10.37.3" - resolved "https://registry.yarnpkg.com/@auto-it/core/-/core-10.37.3.tgz#6ebb76654bbebe9b761b5f43a99fded1ace426e2" - integrity sha512-ybaX1vgdH/vjbiDWXviwhW5yQiQAOrouXmFPF5nH6kGUXCuQsEHAcZsc/0/ifnVVWtYmsVXyP+a1cJ4lvLXmCA== - dependencies: - "@auto-it/bot-list" "10.37.3" - "@endemolshinegroup/cosmiconfig-typescript-loader" "^3.0.2" - "@octokit/plugin-enterprise-compatibility" "1.3.0" - "@octokit/plugin-retry" "^3.0.9" - "@octokit/plugin-throttling" "^3.6.2" - "@octokit/rest" "^18.12.0" - await-to-js "^3.0.0" - chalk "^4.0.0" - cosmiconfig "7.0.0" - deepmerge "^4.0.0" - dotenv "^8.0.0" - endent "^2.1.0" - enquirer "^2.3.4" - env-ci "^5.0.1" - fast-glob "^3.1.1" - fp-ts "^2.5.3" - fromentries "^1.2.0" - gitlog "^4.0.3" - https-proxy-agent "^5.0.0" - import-cwd "^3.0.0" - import-from "^3.0.0" - io-ts "^2.1.2" - lodash.chunk "^4.2.0" - log-symbols "^4.0.0" - node-fetch "2.6.7" - parse-author "^2.0.0" - parse-github-url "1.0.2" - pretty-ms "^7.0.0" - requireg "^0.2.2" - semver "^7.0.0" - signale "^1.4.0" - tapable "^2.2.0" - terminal-link "^2.1.1" - tinycolor2 "^1.4.1" - ts-node "^9.1.1" - tslib "2.1.0" - type-fest "^0.21.1" - typescript-memoize "^1.0.0-alpha.3" - url-join "^4.0.0" - "@auto-it/core@10.37.4": version "10.37.4" resolved "https://registry.yarnpkg.com/@auto-it/core/-/core-10.37.4.tgz#8d2979d5cbb3efc8d537caecc12637fc52451219" @@ -1650,9 +1600,9 @@ "@rollup/pluginutils" "^3.1.0" "@rollup/plugin-commonjs@^22.0.0": - version "22.0.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.1.tgz#f7cb777d20de3eeeaf994f39080115c336bef810" - integrity sha512-dGfEZvdjDHObBiP5IvwTKMVeq/tBZGMBHZFMdIV1ClMM/YoWS34xrHFGfag9SN2ZtMgNZRFruqvxZQEa70O6nQ== + version "22.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-22.0.2.tgz#ee8ca8415cda30d383b4096aad5222435b4b69b6" + integrity sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg== dependencies: "@rollup/pluginutils" "^3.1.0" commondir "^1.0.1" From 40f3f5d67d8e7e02091bf25104718382204b3b2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 07:02:00 +0000 Subject: [PATCH 13/31] chore(deps-dev): bump @babel/core from 7.18.9 to 7.18.10 (#8346) Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.18.9 to 7.18.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.10/packages/babel-core) --- updated-dependencies: - dependency-name: "@babel/core" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 74 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/yarn.lock b/yarn.lock index ec289ce3c1..5a7ad3f53a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -151,32 +151,32 @@ integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== "@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.17.5", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.18.9", "@babel/generator@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" - integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== +"@babel/generator@^7.18.10", "@babel/generator@^7.7.2": + version "7.18.12" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.12.tgz#fa58daa303757bd6f5e4bbca91b342040463d9f4" + integrity sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.18.10" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -387,6 +387,11 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" @@ -425,10 +430,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.6", "@babel/parser@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" - integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.18.10", "@babel/parser@^7.18.11": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.11.tgz#68bb07ab3d380affa9a3f96728df07969645d2d9" + integrity sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -1077,36 +1082,37 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.18.6", "@babel/template@^7.3.3": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== +"@babel/template@^7.18.10", "@babel/template@^7.18.6", "@babel/template@^7.3.3": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" - integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== +"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" + integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.11" + "@babel/types" "^7.18.10" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" - integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== +"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.18.10", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: + "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" From 8f119b6d941c9dc79da5eeba5b60401b64294069 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 07:02:05 +0000 Subject: [PATCH 14/31] chore(deps-dev): bump eslint-plugin-jest from 26.7.0 to 26.8.0 (#8345) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 26.7.0 to 26.8.0. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v26.7.0...v26.8.0) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5a7ad3f53a..b7a196c6d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3958,9 +3958,9 @@ eslint-config-prettier@^8.5.0: integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== eslint-plugin-jest@^26.1.1: - version "26.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.7.0.tgz#41d405ac9143e1284a3401282db47ed459436778" - integrity sha512-/YNitdfG3o3cC6juZziAdkk6nfJt01jXVfj4AgaYVLs7bupHzRDL5K+eipdzhDXtQsiqaX1TzfwSuRlEgeln1A== + version "26.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.8.0.tgz#32471a6af11dbcb7d0ccf83e8edc83d256fd34a3" + integrity sha512-IyGhk+PpDgIA99OBPHo+l2aTtt8yAeB1IgPwXOQZSzi8ag/t1MsLZBN2MKL1sj6ahlkaxbkhlm7ll+NPcMcjaQ== dependencies: "@typescript-eslint/utils" "^5.10.0" From 913148a905f110670c3a296479effbfa5bde3086 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 07:02:08 +0000 Subject: [PATCH 15/31] chore(deps-dev): bump @typescript-eslint/parser from 5.31.0 to 5.32.0 (#8344) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.31.0 to 5.32.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.32.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index b7a196c6d7..4b3baca455 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2088,13 +2088,13 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.14.0": - version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.31.0.tgz#7f42d7dcc68a0a6d80a0f3d9a65063aee7bb8d2c" - integrity sha512-UStjQiZ9OFTFReTrN+iGrC6O/ko9LVDhreEK5S3edmXgR396JGq7CoX2TWIptqt/ESzU2iRKXAHfSF2WJFcWHw== + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d" + integrity sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A== dependencies: - "@typescript-eslint/scope-manager" "5.31.0" - "@typescript-eslint/types" "5.31.0" - "@typescript-eslint/typescript-estree" "5.31.0" + "@typescript-eslint/scope-manager" "5.32.0" + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/typescript-estree" "5.32.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.31.0": @@ -2105,6 +2105,14 @@ "@typescript-eslint/types" "5.31.0" "@typescript-eslint/visitor-keys" "5.31.0" +"@typescript-eslint/scope-manager@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz#763386e963a8def470580cc36cf9228864190b95" + integrity sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg== + dependencies: + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/visitor-keys" "5.32.0" + "@typescript-eslint/type-utils@5.31.0": version "5.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz#70a0b7201360b5adbddb0c36080495aa08f6f3d9" @@ -2119,6 +2127,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.31.0.tgz#7aa389122b64b18e473c1672fb3b8310e5f07a9a" integrity sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g== +"@typescript-eslint/types@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8" + integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ== + "@typescript-eslint/typescript-estree@5.31.0": version "5.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz#eb92970c9d6e3946690d50c346fb9b1d745ee882" @@ -2132,6 +2145,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12" + integrity sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg== + dependencies: + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/visitor-keys" "5.32.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.31.0", "@typescript-eslint/utils@^5.10.0": version "5.31.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.31.0.tgz#e146fa00dca948bfe547d665b2138a2dc1b79acd" @@ -2152,6 +2178,14 @@ "@typescript-eslint/types" "5.31.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz#b9715d0b11fdb5dd10fd0c42ff13987470525394" + integrity sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g== + dependencies: + "@typescript-eslint/types" "5.32.0" + eslint-visitor-keys "^3.3.0" + "@zeit/schemas@2.21.0": version "2.21.0" resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.21.0.tgz#cd242c6551ffb51830049d68d9743ab65b45b820" From e4e59b80b470e77bc79c13f3d97bc6243d45e203 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 07:02:11 +0000 Subject: [PATCH 16/31] chore(deps-dev): bump @types/chai from 4.3.1 to 4.3.3 (#8343) Bumps [@types/chai](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chai) from 4.3.1 to 4.3.3. - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chai) --- updated-dependencies: - dependency-name: "@types/chai" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4b3baca455..7391ddd8ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1716,9 +1716,9 @@ "@babel/types" "^7.3.0" "@types/chai@^4.3.0": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" - integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.3.tgz#3c90752792660c4b562ad73b3fbd68bf3bc7ae07" + integrity sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g== "@types/clone@~2.1.1": version "2.1.1" From 7e20dafc181c7ab9aaba213c2f72fea3279b68a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 08:02:34 +0000 Subject: [PATCH 17/31] chore(deps-dev): bump @babel/preset-env from 7.18.9 to 7.18.10 (#8341) Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.9 to 7.18.10. - [Release notes](https://github.com/babel/babel/releases) - [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md) - [Commits](https://github.com/babel/babel/commits/v7.18.10/packages/babel-preset-env) --- updated-dependencies: - dependency-name: "@babel/preset-env" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 118 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 68 insertions(+), 50 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7391ddd8ee..c03cd0b2fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -145,7 +145,7 @@ dependencies: "@babel/highlight" "^7.18.6" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.18.8": +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.18.8": version "7.18.8" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== @@ -195,7 +195,7 @@ "@babel/helper-explode-assignable-expression" "^7.18.6" "@babel/types" "^7.18.6" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.18.9": +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== @@ -226,15 +226,13 @@ "@babel/helper-annotate-as-pure" "^7.18.6" regexpu-core "^5.1.0" -"@babel/helper-define-polyfill-provider@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz#52411b445bdb2e676869e5a74960d2d3826d2665" - integrity sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA== +"@babel/helper-define-polyfill-provider@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz#bd10d0aca18e8ce012755395b05a79f45eca5073" + integrity sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg== dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" @@ -294,7 +292,7 @@ dependencies: "@babel/types" "^7.18.9" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13": +"@babel/helper-module-imports@^7.10.4": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== @@ -329,7 +327,7 @@ dependencies: "@babel/types" "^7.18.6" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== @@ -344,6 +342,16 @@ "@babel/helper-wrap-function" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + "@babel/helper-replace-supers@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz#efedf51cfccea7b7b8c0f00002ab317e7abfe420" @@ -412,6 +420,16 @@ "@babel/traverse" "^7.18.6" "@babel/types" "^7.18.6" +"@babel/helper-wrap-function@^7.18.9": + version "7.18.11" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz#bff23ace436e3f6aefb61f85ffae2291c80ed1fb" + integrity sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w== + dependencies: + "@babel/helper-function-name" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.11" + "@babel/types" "^7.18.10" + "@babel/helpers@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" @@ -451,14 +469,14 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.18.9" "@babel/plugin-proposal-optional-chaining" "^7.18.9" -"@babel/plugin-proposal-async-generator-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" - integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== +"@babel/plugin-proposal-async-generator-functions@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.18.6": @@ -959,12 +977,12 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-syntax-typescript" "^7.18.6" -"@babel/plugin-transform-unicode-escapes@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" - integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" @@ -975,9 +993,9 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/preset-env@^7.16.11": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" - integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" + integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== dependencies: "@babel/compat-data" "^7.18.8" "@babel/helper-compilation-targets" "^7.18.9" @@ -985,7 +1003,7 @@ "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-async-generator-functions" "^7.18.10" "@babel/plugin-proposal-class-properties" "^7.18.6" "@babel/plugin-proposal-class-static-block" "^7.18.6" "@babel/plugin-proposal-dynamic-import" "^7.18.6" @@ -1045,13 +1063,13 @@ "@babel/plugin-transform-sticky-regex" "^7.18.6" "@babel/plugin-transform-template-literals" "^7.18.9" "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" + "@babel/types" "^7.18.10" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" core-js-compat "^3.22.1" semver "^6.3.0" @@ -1091,7 +1109,7 @@ "@babel/parser" "^7.18.10" "@babel/types" "^7.18.10" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.18.10", "@babel/traverse@^7.18.11", "@babel/traverse@^7.18.6", "@babel/traverse@^7.18.9", "@babel/traverse@^7.7.2": version "7.18.11" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.11.tgz#3d51f2afbd83ecf9912bcbb5c4d94e3d2ddaa16f" integrity sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ== @@ -2558,29 +2576,29 @@ babel-plugin-jest-hoist@^27.5.1: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-polyfill-corejs2@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5" - integrity sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w== +babel-plugin-polyfill-corejs2@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" + integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz#aabe4b2fa04a6e038b688c5e55d44e78cd3a5f72" - integrity sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ== +babel-plugin-polyfill-corejs3@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" + integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" - integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" + integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.1" + "@babel/helper-define-polyfill-provider" "^0.3.2" babel-preset-current-node-syntax@^1.0.0: version "1.0.1" From a969fda614781840a6e3efbdc81b435fbaf8d1f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Aug 2022 08:02:37 +0000 Subject: [PATCH 18/31] chore(deps-dev): bump @typescript-eslint/eslint-plugin from 5.31.0 to 5.32.0 (#8340) chore(deps-dev): bump @typescript-eslint/eslint-plugin Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.31.0 to 5.32.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.32.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 70 ++++++++++++++----------------------------------------- 1 file changed, 18 insertions(+), 52 deletions(-) diff --git a/yarn.lock b/yarn.lock index c03cd0b2fe..76840b35ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2091,13 +2091,13 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.14.0": - version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.31.0.tgz#cae1967b1e569e6171bbc6bec2afa4e0c8efccfe" - integrity sha512-VKW4JPHzG5yhYQrQ1AzXgVgX8ZAJEvCz0QI6mLRX4tf7rnFfh5D8SKm0Pq6w5PyNfAWJk6sv313+nEt3ohWMBQ== + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz#e27e38cffa4a61226327c874a7be965e9a861624" + integrity sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew== dependencies: - "@typescript-eslint/scope-manager" "5.31.0" - "@typescript-eslint/type-utils" "5.31.0" - "@typescript-eslint/utils" "5.31.0" + "@typescript-eslint/scope-manager" "5.32.0" + "@typescript-eslint/type-utils" "5.32.0" + "@typescript-eslint/utils" "5.32.0" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -2115,14 +2115,6 @@ "@typescript-eslint/typescript-estree" "5.32.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.31.0": - version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.31.0.tgz#f47a794ba84d9b818ab7f8f44fff55a61016c606" - integrity sha512-8jfEzBYDBG88rcXFxajdVavGxb5/XKXyvWgvD8Qix3EEJLCFIdVloJw+r9ww0wbyNLOTYyBsR+4ALNGdlalLLg== - dependencies: - "@typescript-eslint/types" "5.31.0" - "@typescript-eslint/visitor-keys" "5.31.0" - "@typescript-eslint/scope-manager@5.32.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz#763386e963a8def470580cc36cf9228864190b95" @@ -2131,38 +2123,20 @@ "@typescript-eslint/types" "5.32.0" "@typescript-eslint/visitor-keys" "5.32.0" -"@typescript-eslint/type-utils@5.31.0": - version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.31.0.tgz#70a0b7201360b5adbddb0c36080495aa08f6f3d9" - integrity sha512-7ZYqFbvEvYXFn9ax02GsPcEOmuWNg+14HIf4q+oUuLnMbpJ6eHAivCg7tZMVwzrIuzX3QCeAOqKoyMZCv5xe+w== +"@typescript-eslint/type-utils@5.32.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz#45a14506fe3fb908600b4cef2f70778f7b5cdc79" + integrity sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg== dependencies: - "@typescript-eslint/utils" "5.31.0" + "@typescript-eslint/utils" "5.32.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.31.0": - version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.31.0.tgz#7aa389122b64b18e473c1672fb3b8310e5f07a9a" - integrity sha512-/f/rMaEseux+I4wmR6mfpM2wvtNZb1p9hAV77hWfuKc3pmaANp5dLAZSiE3/8oXTYTt3uV9KW5yZKJsMievp6g== - "@typescript-eslint/types@5.32.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8" integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ== -"@typescript-eslint/typescript-estree@5.31.0": - version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.31.0.tgz#eb92970c9d6e3946690d50c346fb9b1d745ee882" - integrity sha512-3S625TMcARX71wBc2qubHaoUwMEn+l9TCsaIzYI/ET31Xm2c9YQ+zhGgpydjorwQO9pLfR/6peTzS/0G3J/hDw== - dependencies: - "@typescript-eslint/types" "5.31.0" - "@typescript-eslint/visitor-keys" "5.31.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.32.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12" @@ -2176,26 +2150,18 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.31.0", "@typescript-eslint/utils@^5.10.0": - version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.31.0.tgz#e146fa00dca948bfe547d665b2138a2dc1b79acd" - integrity sha512-kcVPdQS6VIpVTQ7QnGNKMFtdJdvnStkqS5LeALr4rcwx11G6OWb2HB17NMPnlRHvaZP38hL9iK8DdE9Fne7NYg== +"@typescript-eslint/utils@5.32.0", "@typescript-eslint/utils@^5.10.0": + version "5.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.32.0.tgz#eccb6b672b94516f1afc6508d05173c45924840c" + integrity sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.31.0" - "@typescript-eslint/types" "5.31.0" - "@typescript-eslint/typescript-estree" "5.31.0" + "@typescript-eslint/scope-manager" "5.32.0" + "@typescript-eslint/types" "5.32.0" + "@typescript-eslint/typescript-estree" "5.32.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.31.0": - version "5.31.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.31.0.tgz#b0eca264df01ce85dceb76aebff3784629258f54" - integrity sha512-ZK0jVxSjS4gnPirpVjXHz7mgdOsZUHzNYSfTw2yPa3agfbt9YfqaBiBZFSSxeBWnpWkzCxTfUpnzA3Vily/CSg== - dependencies: - "@typescript-eslint/types" "5.31.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.32.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz#b9715d0b11fdb5dd10fd0c42ff13987470525394" From 5fb894a6318811a7da0e7c105f8c300b910a1007 Mon Sep 17 00:00:00 2001 From: Kanit Wongsuphasawat Date: Thu, 11 Aug 2022 12:39:25 -0700 Subject: [PATCH 19/31] fix: fix thin bar problem (#8350) (#8349) Co-authored-by: GitHub Actions Bot --- examples/compiled/arc_ordinal_theta.vg.json | 2 +- examples/compiled/bar.vg.json | 2 +- examples/compiled/bar_aggregate.vg.json | 2 +- .../compiled/bar_aggregate_format.vg.json | 2 +- .../bar_aggregate_sort_by_encoding.vg.json | 2 +- .../compiled/bar_aggregate_sort_mean.vg.json | 2 +- .../compiled/bar_aggregate_transform.vg.json | 2 +- .../compiled/bar_aggregate_vertical.vg.json | 2 +- examples/compiled/bar_argmax.vg.json | 2 +- .../compiled/bar_argmax_transform.vg.json | 2 +- examples/compiled/bar_array_aggregate.vg.json | 2 +- examples/compiled/bar_axis_orient.vg.json | 2 +- .../compiled/bar_axis_space_saving.vg.json | 2 +- .../compiled/bar_color_disabled_scale.vg.json | 2 +- examples/compiled/bar_column_fold.vg.json | 2 +- examples/compiled/bar_column_pivot.vg.json | 2 +- .../compiled/bar_corner_radius_end.vg.json | 2 +- examples/compiled/bar_count_minimap.vg.json | 4 +- .../compiled/bar_custom_sort_full.vg.json | 2 +- .../compiled/bar_custom_sort_partial.vg.json | 2 +- .../bar_default_tooltip_title_null.vg.json | 2 +- examples/compiled/bar_distinct.vg.json | 2 +- ...diverging_stack_population_pyramid.vg.json | 2 +- .../bar_diverging_stack_transform.vg.json | 2 +- examples/compiled/bar_filter_calc.vg.json | 2 +- examples/compiled/bar_fit.vg.json | 2 +- examples/compiled/bar_gantt.vg.json | 2 +- examples/compiled/bar_grouped.vg.json | 2 +- .../bar_grouped_custom_padding.vg.json | 2 +- .../compiled/bar_grouped_errorbar.vg.json | 2 +- examples/compiled/bar_grouped_facet.vg.json | 2 +- ...ar_grouped_facet_independent_scale.vg.json | 2 +- ...acet_independent_scale_fixed_width.vg.json | 2 +- .../compiled/bar_grouped_fixed_width.vg.json | 2 +- .../compiled/bar_grouped_horizontal.vg.json | 2 +- examples/compiled/bar_grouped_label.vg.json | 2 +- .../compiled/bar_grouped_repeated.vg.json | 4 +- examples/compiled/bar_grouped_stacked.vg.json | 2 +- .../bar_grouped_step_for_offset.vg.json | 2 +- .../bar_grouped_step_for_position.vg.json | 2 +- examples/compiled/bar_grouped_thin.png | Bin 0 -> 122777 bytes examples/compiled/bar_grouped_thin.svg | 1 + examples/compiled/bar_grouped_thin.vg.json | 120 ++++++++++++++++++ .../compiled/bar_layered_transparent.vg.json | 2 +- examples/compiled/bar_month.vg.json | 2 +- .../bar_multi_values_per_categories.vg.json | 2 +- examples/compiled/bar_negative.vg.json | 2 +- .../bar_negative_horizontal_label.vg.json | 2 +- examples/compiled/bar_params.vg.json | 2 +- examples/compiled/bar_params_bound.vg.json | 2 +- .../compiled/bar_percent_of_total.vg.json | 2 +- examples/compiled/bar_size_default.vg.json | 2 +- .../compiled/bar_size_explicit_bad.vg.json | 2 +- examples/compiled/bar_size_fit.vg.json | 2 +- examples/compiled/bar_size_responsive.vg.json | 2 +- examples/compiled/bar_size_step_small.vg.json | 2 +- examples/compiled/bar_sort_by_count.vg.json | 2 +- examples/compiled/bar_swap_axes.vg.json | 2 +- examples/compiled/bar_swap_custom.vg.json | 2 +- examples/compiled/bar_title.vg.json | 2 +- examples/compiled/bar_title_start.vg.json | 2 +- examples/compiled/bar_tooltip.vg.json | 2 +- examples/compiled/bar_tooltip_multi.vg.json | 2 +- examples/compiled/bar_tooltip_title.vg.json | 2 +- .../bar_x_offset_without_x_broken.vg.json | 2 +- .../compiled/concat_bar_layer_circle.vg.json | 2 +- .../concat_population_pyramid.vg.json | 4 +- examples/compiled/concat_weather.vg.json | 4 +- .../facet_cross_independent_scale.vg.json | 4 +- examples/compiled/facet_custom.vg.json | 2 +- examples/compiled/facet_custom_header.vg.json | 2 +- examples/compiled/facet_grid_bar.vg.json | 2 +- .../compiled/facet_independent_scale.vg.json | 2 +- examples/compiled/hconcat_weather.vg.json | 2 +- examples/compiled/histogram_ordinal.vg.json | 2 +- .../compiled/histogram_ordinal_sort.vg.json | 2 +- .../interactive_bar_select_highlight.vg.json | 2 +- .../compiled/interactive_concat_layer.vg.json | 2 +- .../interactive_dashboard_europe_pop.vg.json | 4 +- .../interactive_seattle_weather.vg.json | 2 +- .../joinaggregate_mean_difference.vg.json | 2 +- ...naggregate_mean_difference_by_year.vg.json | 2 +- .../joinaggregate_percent_of_total.vg.json | 2 +- .../compiled/layer_bar_annotations.vg.json | 4 +- .../compiled/layer_bar_circle_grouped.vg.json | 2 +- examples/compiled/layer_bar_fruit.vg.json | 2 +- .../layer_bar_grouped_line_ungrouped.vg.json | 2 +- examples/compiled/layer_bar_labels.vg.json | 2 +- .../compiled/layer_bar_labels_grey.vg.json | 2 +- .../compiled/layer_bar_labels_style.vg.json | 2 +- examples/compiled/layer_bar_line.vg.json | 2 +- .../compiled/layer_bar_line_union.vg.json | 2 +- examples/compiled/layer_bar_month.vg.json | 2 +- .../layer_bar_tick_datum_grouped.vg.json | 2 +- .../compiled/layer_precipitation_mean.vg.json | 2 +- examples/compiled/layer_text_heatmap.vg.json | 4 +- .../layer_text_heatmap_joinaggregate.vg.json | 4 +- examples/compiled/lookup.vg.json | 2 +- examples/compiled/rect_heatmap.vg.json | 4 +- .../compiled/rect_heatmap_weather.vg.json | 4 +- examples/compiled/rect_lasagna.vg.json | 4 +- .../selection_composition_and.vg.json | 4 +- .../compiled/selection_composition_or.vg.json | 4 +- examples/compiled/selection_heatmap.vg.json | 4 +- .../selection_interval_mark_style.vg.json | 4 +- .../selection_layer_bar_month.vg.json | 2 +- .../selection_project_interval.vg.json | 4 +- .../selection_project_interval_x.vg.json | 4 +- .../selection_project_interval_x_y.vg.json | 4 +- .../selection_project_interval_y.vg.json | 4 +- .../compiled/selection_type_interval.vg.json | 4 +- .../selection_type_interval_invert.vg.json | 4 +- .../compiled/selection_type_point.vg.json | 4 +- .../selection_type_single_dblclick.vg.json | 4 +- .../selection_type_single_mouseover.vg.json | 4 +- examples/compiled/stacked_bar_count.vg.json | 2 +- ...ked_bar_count_corner_radius_config.vg.json | 2 +- ...acked_bar_count_corner_radius_mark.vg.json | 2 +- ...ked_bar_count_corner_radius_mark_x.vg.json | 2 +- ...ked_bar_count_corner_radius_stroke.vg.json | 2 +- examples/compiled/stacked_bar_h.vg.json | 2 +- .../stacked_bar_h_normalized_labeled.vg.json | 2 +- examples/compiled/stacked_bar_h_order.vg.json | 2 +- .../stacked_bar_h_order_custom.vg.json | 2 +- .../compiled/stacked_bar_normalize.vg.json | 2 +- .../compiled/stacked_bar_population.vg.json | 2 +- .../stacked_bar_population_transform.vg.json | 2 +- .../compiled/stacked_bar_sum_opacity.vg.json | 2 +- .../compiled/stacked_bar_unaggregate.vg.json | 2 +- examples/compiled/stacked_bar_v.vg.json | 2 +- examples/compiled/stacked_bar_weather.vg.json | 2 +- .../compiled/test_aggregate_nested.vg.json | 2 +- examples/compiled/trellis_bar.vg.json | 2 +- .../compiled/trellis_bar_no_header.vg.json | 2 +- examples/compiled/trellis_stacked_bar.vg.json | 2 +- examples/compiled/vconcat_weather.vg.json | 2 +- examples/compiled/window_top_k.vg.json | 2 +- examples/compiled/window_top_k_others.vg.json | 2 +- examples/specs/bar_grouped_thin.vl.json | 22 ++++ src/compile/mark/encode/position-rect.ts | 11 +- test/compile/mark/bar.test.ts | 28 ++-- test/compile/mark/rect.test.ts | 10 +- 142 files changed, 328 insertions(+), 184 deletions(-) create mode 100644 examples/compiled/bar_grouped_thin.png create mode 100644 examples/compiled/bar_grouped_thin.svg create mode 100644 examples/compiled/bar_grouped_thin.vg.json create mode 100644 examples/specs/bar_grouped_thin.vl.json diff --git a/examples/compiled/arc_ordinal_theta.vg.json b/examples/compiled/arc_ordinal_theta.vg.json index b8aed31ada..d89f45594f 100644 --- a/examples/compiled/arc_ordinal_theta.vg.json +++ b/examples/compiled/arc_ordinal_theta.vg.json @@ -57,7 +57,7 @@ "endAngle": { "scale": "theta", "field": "dir", - "offset": {"scale": "theta", "band": 1} + "offset": {"signal": "max(0.25, bandwidth('theta'))"} } } } diff --git a/examples/compiled/bar.vg.json b/examples/compiled/bar.vg.json index cf7d1e2bbc..a7403201ad 100644 --- a/examples/compiled/bar.vg.json +++ b/examples/compiled/bar.vg.json @@ -60,7 +60,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_aggregate.vg.json b/examples/compiled/bar_aggregate.vg.json index 515e795f5a..034f12aaf4 100644 --- a/examples/compiled/bar_aggregate.vg.json +++ b/examples/compiled/bar_aggregate.vg.json @@ -49,7 +49,7 @@ "x": {"scale": "x", "field": "sum_people"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "age"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_aggregate_format.vg.json b/examples/compiled/bar_aggregate_format.vg.json index 9c2dab9cfc..ef2b5a09f1 100644 --- a/examples/compiled/bar_aggregate_format.vg.json +++ b/examples/compiled/bar_aggregate_format.vg.json @@ -49,7 +49,7 @@ "x": {"scale": "x", "field": "sum_people"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "age"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_aggregate_sort_by_encoding.vg.json b/examples/compiled/bar_aggregate_sort_by_encoding.vg.json index 281bdfeca8..de6fe777a0 100644 --- a/examples/compiled/bar_aggregate_sort_by_encoding.vg.json +++ b/examples/compiled/bar_aggregate_sort_by_encoding.vg.json @@ -53,7 +53,7 @@ "x": {"scale": "x", "field": "sum_people"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "age"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_aggregate_sort_mean.vg.json b/examples/compiled/bar_aggregate_sort_mean.vg.json index 2acec08b42..4973b4a9c2 100644 --- a/examples/compiled/bar_aggregate_sort_mean.vg.json +++ b/examples/compiled/bar_aggregate_sort_mean.vg.json @@ -53,7 +53,7 @@ "x": {"scale": "x", "field": "sum_people"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "age"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_aggregate_transform.vg.json b/examples/compiled/bar_aggregate_transform.vg.json index 47ed9786bf..2d3a70d941 100644 --- a/examples/compiled/bar_aggregate_transform.vg.json +++ b/examples/compiled/bar_aggregate_transform.vg.json @@ -53,7 +53,7 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; mean_acc: \" + (format(datum[\"mean_acc\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "mean_acc_end"}, "y2": {"scale": "y", "field": "mean_acc_start"} } diff --git a/examples/compiled/bar_aggregate_vertical.vg.json b/examples/compiled/bar_aggregate_vertical.vg.json index 73ca1cd793..4691e64ce7 100644 --- a/examples/compiled/bar_aggregate_vertical.vg.json +++ b/examples/compiled/bar_aggregate_vertical.vg.json @@ -45,7 +45,7 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Mean of Acceleration: \" + (format(datum[\"mean_Acceleration\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "mean_Acceleration"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_argmax.vg.json b/examples/compiled/bar_argmax.vg.json index d3ad3245d9..13f7d7dd35 100644 --- a/examples/compiled/bar_argmax.vg.json +++ b/examples/compiled/bar_argmax.vg.json @@ -51,7 +51,7 @@ }, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "Major Genre"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_argmax_transform.vg.json b/examples/compiled/bar_argmax_transform.vg.json index 87a4afbed9..850047557f 100644 --- a/examples/compiled/bar_argmax_transform.vg.json +++ b/examples/compiled/bar_argmax_transform.vg.json @@ -70,7 +70,7 @@ "field": "argmax_US_Gross\\.Production Budget\\._start" }, "y": {"scale": "y", "field": "Major Genre"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_array_aggregate.vg.json b/examples/compiled/bar_array_aggregate.vg.json index dfe641c48e..6ff6f5ea89 100644 --- a/examples/compiled/bar_array_aggregate.vg.json +++ b/examples/compiled/bar_array_aggregate.vg.json @@ -58,7 +58,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; Average of b: \" + (format(datum[\"average_b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "average_b"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_axis_orient.vg.json b/examples/compiled/bar_axis_orient.vg.json index 1f5b146912..53f1126461 100644 --- a/examples/compiled/bar_axis_orient.vg.json +++ b/examples/compiled/bar_axis_orient.vg.json @@ -71,7 +71,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_axis_space_saving.vg.json b/examples/compiled/bar_axis_space_saving.vg.json index 5eaf09008b..c204ae6671 100644 --- a/examples/compiled/bar_axis_space_saving.vg.json +++ b/examples/compiled/bar_axis_space_saving.vg.json @@ -43,7 +43,7 @@ "x": {"scale": "x", "field": "__count"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "Origin", "offset": 5, "band": 0.25}, - "height": {"scale": "y", "band": 0.5} + "height": {"signal": "max(0.25, 0.5 * bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_color_disabled_scale.vg.json b/examples/compiled/bar_color_disabled_scale.vg.json index 68c3a29ad3..1f95862e5d 100644 --- a/examples/compiled/bar_color_disabled_scale.vg.json +++ b/examples/compiled/bar_color_disabled_scale.vg.json @@ -54,7 +54,7 @@ "signal": "\"color: \" + (isValid(datum[\"color\"]) ? datum[\"color\"] : \"\"+datum[\"color\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "color"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_column_fold.vg.json b/examples/compiled/bar_column_fold.vg.json index f197b99d3d..77675fa56d 100644 --- a/examples/compiled/bar_column_fold.vg.json +++ b/examples/compiled/bar_column_fold.vg.json @@ -138,7 +138,7 @@ "signal": "\"country: \" + (isValid(datum[\"country\"]) ? datum[\"country\"] : \"\"+datum[\"country\"]) + \"; value: \" + (format(datum[\"value\"], \"\"))" }, "x": {"scale": "x", "field": "country"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_column_pivot.vg.json b/examples/compiled/bar_column_pivot.vg.json index 3e69682af4..e66f5a1ea3 100644 --- a/examples/compiled/bar_column_pivot.vg.json +++ b/examples/compiled/bar_column_pivot.vg.json @@ -65,7 +65,7 @@ "signal": "\"country: \" + (isValid(datum[\"country\"]) ? datum[\"country\"] : \"\"+datum[\"country\"]) + \"; gold: \" + (format(datum[\"gold\"], \"\"))" }, "x": {"scale": "x", "field": "country"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "gold_end"}, "y2": {"scale": "y", "field": "gold_start"} } diff --git a/examples/compiled/bar_corner_radius_end.vg.json b/examples/compiled/bar_corner_radius_end.vg.json index 64a6015a4f..6c1a57b614 100644 --- a/examples/compiled/bar_corner_radius_end.vg.json +++ b/examples/compiled/bar_corner_radius_end.vg.json @@ -63,7 +63,7 @@ "encode": { "update": { "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": { "signal": "min(scale('y',datum[\"min_b_start\"]),scale('y',datum[\"max_b_start\"]),scale('y',datum[\"min_b_end\"]),scale('y',datum[\"max_b_end\"]))" }, diff --git a/examples/compiled/bar_count_minimap.vg.json b/examples/compiled/bar_count_minimap.vg.json index 117eab5493..55686d7c9f 100644 --- a/examples/compiled/bar_count_minimap.vg.json +++ b/examples/compiled/bar_count_minimap.vg.json @@ -92,7 +92,7 @@ "x": {"scale": "concat_0_x", "field": "__count"}, "x2": {"scale": "concat_0_x", "value": 0}, "y": {"scale": "concat_0_y", "field": "Name"}, - "height": {"scale": "concat_0_y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('concat_0_y'))"} } } } @@ -362,7 +362,7 @@ "x": {"scale": "concat_1_x", "field": "__count"}, "x2": {"scale": "concat_1_x", "value": 0}, "y": {"scale": "concat_1_y", "field": "Name"}, - "height": {"scale": "concat_1_y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('concat_1_y'))"} } } }, diff --git a/examples/compiled/bar_custom_sort_full.vg.json b/examples/compiled/bar_custom_sort_full.vg.json index 4cfa00cbdc..7a444d9ab3 100644 --- a/examples/compiled/bar_custom_sort_full.vg.json +++ b/examples/compiled/bar_custom_sort_full.vg.json @@ -60,7 +60,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_custom_sort_partial.vg.json b/examples/compiled/bar_custom_sort_partial.vg.json index cc37703181..6828a9c6a4 100644 --- a/examples/compiled/bar_custom_sort_partial.vg.json +++ b/examples/compiled/bar_custom_sort_partial.vg.json @@ -67,7 +67,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_default_tooltip_title_null.vg.json b/examples/compiled/bar_default_tooltip_title_null.vg.json index 414e5a232d..22a9c5dfb0 100644 --- a/examples/compiled/bar_default_tooltip_title_null.vg.json +++ b/examples/compiled/bar_default_tooltip_title_null.vg.json @@ -63,7 +63,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_distinct.vg.json b/examples/compiled/bar_distinct.vg.json index 1eb0ce79b8..17721c5355 100644 --- a/examples/compiled/bar_distinct.vg.json +++ b/examples/compiled/bar_distinct.vg.json @@ -45,7 +45,7 @@ "signal": "\"Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Distinct of Name: \" + (format(datum[\"distinct_Name\"], \"\"))" }, "x": {"scale": "x", "field": "Origin"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "distinct_Name"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_diverging_stack_population_pyramid.vg.json b/examples/compiled/bar_diverging_stack_population_pyramid.vg.json index 4bf0a341e3..e0afae68d8 100644 --- a/examples/compiled/bar_diverging_stack_population_pyramid.vg.json +++ b/examples/compiled/bar_diverging_stack_population_pyramid.vg.json @@ -67,7 +67,7 @@ "x": {"scale": "x", "field": "sum_signed_people_end"}, "x2": {"scale": "x", "field": "sum_signed_people_start"}, "y": {"scale": "y", "field": "age"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_diverging_stack_transform.vg.json b/examples/compiled/bar_diverging_stack_transform.vg.json index 950cdca34b..499eb20a72 100644 --- a/examples/compiled/bar_diverging_stack_transform.vg.json +++ b/examples/compiled/bar_diverging_stack_transform.vg.json @@ -312,7 +312,7 @@ "x": {"scale": "x", "field": "nx"}, "x2": {"scale": "x", "field": "nx2"}, "y": {"scale": "y", "field": "question"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_filter_calc.vg.json b/examples/compiled/bar_filter_calc.vg.json index f16d151db1..ddaf50dcb1 100644 --- a/examples/compiled/bar_filter_calc.vg.json +++ b/examples/compiled/bar_filter_calc.vg.json @@ -62,7 +62,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b2: \" + (format(datum[\"b2\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b2_end"}, "y2": {"scale": "y", "field": "b2_start"} } diff --git a/examples/compiled/bar_fit.vg.json b/examples/compiled/bar_fit.vg.json index 6abf452be9..bd1f49f679 100644 --- a/examples/compiled/bar_fit.vg.json +++ b/examples/compiled/bar_fit.vg.json @@ -55,7 +55,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_gantt.vg.json b/examples/compiled/bar_gantt.vg.json index 0379ed49f3..4fd65adfac 100644 --- a/examples/compiled/bar_gantt.vg.json +++ b/examples/compiled/bar_gantt.vg.json @@ -48,7 +48,7 @@ "x": {"scale": "x", "field": "start"}, "x2": {"scale": "x", "field": "end"}, "y": {"scale": "y", "field": "task"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_grouped.vg.json b/examples/compiled/bar_grouped.vg.json index efeaca1d2d..23798b9f9d 100644 --- a/examples/compiled/bar_grouped.vg.json +++ b/examples/compiled/bar_grouped.vg.json @@ -66,7 +66,7 @@ "field": "category", "offset": {"scale": "xOffset", "field": "group"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_custom_padding.vg.json b/examples/compiled/bar_grouped_custom_padding.vg.json index 3ed25ccd14..b6916729ed 100644 --- a/examples/compiled/bar_grouped_custom_padding.vg.json +++ b/examples/compiled/bar_grouped_custom_padding.vg.json @@ -63,7 +63,7 @@ "field": "category", "offset": {"scale": "xOffset", "field": "group"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_errorbar.vg.json b/examples/compiled/bar_grouped_errorbar.vg.json index 7b8e24a031..1e6a3ac463 100644 --- a/examples/compiled/bar_grouped_errorbar.vg.json +++ b/examples/compiled/bar_grouped_errorbar.vg.json @@ -83,7 +83,7 @@ "field": "Cylinders", "offset": {"scale": "xOffset", "field": "Origin"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "mean_Acceleration"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_grouped_facet.vg.json b/examples/compiled/bar_grouped_facet.vg.json index 0b06ad5941..caa2f96c81 100644 --- a/examples/compiled/bar_grouped_facet.vg.json +++ b/examples/compiled/bar_grouped_facet.vg.json @@ -131,7 +131,7 @@ "signal": "\"group: \" + (isValid(datum[\"group\"]) ? datum[\"group\"] : \"\"+datum[\"group\"]) + \"; value: \" + (format(datum[\"value\"], \"\"))" }, "x": {"scale": "x", "field": "group"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_facet_independent_scale.vg.json b/examples/compiled/bar_grouped_facet_independent_scale.vg.json index 8c49ce7ab9..61f5f87a69 100644 --- a/examples/compiled/bar_grouped_facet_independent_scale.vg.json +++ b/examples/compiled/bar_grouped_facet_independent_scale.vg.json @@ -149,7 +149,7 @@ "signal": "\"group: \" + (isValid(datum[\"group\"]) ? datum[\"group\"] : \"\"+datum[\"group\"]) + \"; value: \" + (format(datum[\"value\"], \"\"))" }, "x": {"scale": "child_x", "field": "group"}, - "width": {"scale": "child_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('child_x'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_facet_independent_scale_fixed_width.vg.json b/examples/compiled/bar_grouped_facet_independent_scale_fixed_width.vg.json index b6b9bd0656..349601a689 100644 --- a/examples/compiled/bar_grouped_facet_independent_scale_fixed_width.vg.json +++ b/examples/compiled/bar_grouped_facet_independent_scale_fixed_width.vg.json @@ -124,7 +124,7 @@ "signal": "\"group: \" + (isValid(datum[\"group\"]) ? datum[\"group\"] : \"\"+datum[\"group\"]) + \"; value: \" + (format(datum[\"value\"], \"\"))" }, "x": {"scale": "child_x", "field": "group"}, - "width": {"scale": "child_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('child_x'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_fixed_width.vg.json b/examples/compiled/bar_grouped_fixed_width.vg.json index 076a137a61..f0f2fb3239 100644 --- a/examples/compiled/bar_grouped_fixed_width.vg.json +++ b/examples/compiled/bar_grouped_fixed_width.vg.json @@ -57,7 +57,7 @@ "field": "category", "offset": {"scale": "xOffset", "field": "group"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_horizontal.vg.json b/examples/compiled/bar_grouped_horizontal.vg.json index 04039a18e4..6de464a01b 100644 --- a/examples/compiled/bar_grouped_horizontal.vg.json +++ b/examples/compiled/bar_grouped_horizontal.vg.json @@ -68,7 +68,7 @@ "field": "category", "offset": {"scale": "yOffset", "field": "group"} }, - "height": {"scale": "yOffset", "band": 1} + "height": {"signal": "max(0.25, bandwidth('yOffset'))"} } } } diff --git a/examples/compiled/bar_grouped_label.vg.json b/examples/compiled/bar_grouped_label.vg.json index 61d956bf58..99fad91d1b 100644 --- a/examples/compiled/bar_grouped_label.vg.json +++ b/examples/compiled/bar_grouped_label.vg.json @@ -81,7 +81,7 @@ "field": "category", "offset": {"scale": "xOffset", "field": "group"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_repeated.vg.json b/examples/compiled/bar_grouped_repeated.vg.json index 000c4479e5..8174ba5b62 100644 --- a/examples/compiled/bar_grouped_repeated.vg.json +++ b/examples/compiled/bar_grouped_repeated.vg.json @@ -48,7 +48,7 @@ "field": "Major Genre", "offset": {"scale": "xOffset", "value": "Worldwide Gross"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": [ { "test": "!isValid(datum[\"sum_Worldwide Gross\"]) || !isFinite(+datum[\"sum_Worldwide Gross\"])", @@ -77,7 +77,7 @@ "field": "Major Genre", "offset": {"scale": "xOffset", "value": "US Gross"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": [ { "test": "!isValid(datum[\"sum_US Gross\"]) || !isFinite(+datum[\"sum_US Gross\"])", diff --git a/examples/compiled/bar_grouped_stacked.vg.json b/examples/compiled/bar_grouped_stacked.vg.json index 19324562fa..727c32e6be 100644 --- a/examples/compiled/bar_grouped_stacked.vg.json +++ b/examples/compiled/bar_grouped_stacked.vg.json @@ -66,7 +66,7 @@ "field": "Cylinders", "offset": {"scale": "xOffset", "field": "Origin"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "sum_Weight_in_lbs_end"}, "y2": {"scale": "y", "field": "sum_Weight_in_lbs_start"} } diff --git a/examples/compiled/bar_grouped_step_for_offset.vg.json b/examples/compiled/bar_grouped_step_for_offset.vg.json index e7f62bc9bf..6b0296359e 100644 --- a/examples/compiled/bar_grouped_step_for_offset.vg.json +++ b/examples/compiled/bar_grouped_step_for_offset.vg.json @@ -66,7 +66,7 @@ "field": "category", "offset": {"scale": "xOffset", "field": "group"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_step_for_position.vg.json b/examples/compiled/bar_grouped_step_for_position.vg.json index 694e751e5f..81bd6e3c9c 100644 --- a/examples/compiled/bar_grouped_step_for_position.vg.json +++ b/examples/compiled/bar_grouped_step_for_position.vg.json @@ -63,7 +63,7 @@ "field": "category", "offset": {"scale": "xOffset", "field": "group"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/bar_grouped_thin.png b/examples/compiled/bar_grouped_thin.png new file mode 100644 index 0000000000000000000000000000000000000000..3185ae279304ed2dd0de5a5bac2bd3c4e959d731 GIT binary patch literal 122777 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

A`VHY2tuerzYR^lfBLDaI& zV5?h~eTjs(d&Ps9lV=Rvt#Jknyt{kn&M{(RDKse#g1%r#tTwjt>!tgERg>PFVR(qW zig9Cusav*BU22zo-nDrCz}?;K^o@+I9`Tr-jN2=Yoz_|SgX?7adfD+F>nT}$2vj`; ztw0dY)_)9_SR&8$%q4Xge#or0FX;q6hLMfa{Mqq(ROSUqV-G*rUw|NtjH7F!OPWet z^5NbuqS;^_zoB$W;feqMYXL-~ntnG1vkEWdW@qaX*2L-lUjOKKXMJ-oFj08o6HL8{cEd(sfM~LhyO%ojB3{A5KR??*aL=pbtYlE%z$x&L{Z8ya@ns-V zXIFJLj~UzZUh?e*=mdd_Q?b8Ih3kY8$TK8Bgt7%1D(urboCE7a^P4vf=*L06GF0{L zKXh&6(PNJt@r5!63p?y|_4WM_O)9W|{}wbqxDoeboUJd>;Crz7Y-4GLg4cO=Ob`8u zS*g=H{6@eg{&z%q9b5zN;Ne%h)HZL)B=X^=Rzb-12569-ZR*?|DC1iK;CH?mGKpg- zy{d`_El2UWH?@eRqoFu^?J97f{%Uk1Egxpi+hwXK2p8lJojvpH%0A{$-aUIZA$aW3 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 literal 0 HcmV?d00001 diff --git a/examples/compiled/bar_grouped_thin.svg b/examples/compiled/bar_grouped_thin.svg new file mode 100644 index 0000000000..dd02e406ab --- /dev/null +++ b/examples/compiled/bar_grouped_thin.svg @@ -0,0 +1 @@ +nullAbel FerraraAdam McKayAdam ShankmanAdrian LyneAdrienne ShellyAkira KurosawaAlan AldaAlan J. PakulaAlan ParkerAlan RudolphAlbert BrooksAlbert HughesAlejandro Gonzalez InarrituAlex KendrickAlex ProyasAlexander PayneAlexandre AjaAlfonso CuaronAlfred HitchcockAmy HeckerlingAndrei KonchalovskyAndrew AdamsonAndrew BergmanAndrew DavisAndrew FlemingAndrew NiccolAndrew StantonAndrzej BartkowiakAndy FickmanAndy GarciaAndy TennantAndy WachowskiAng LeeAngela RobinsonAnne FletcherAnthony MinghellaAntoine FuquaAntonio BanderasAri S. KirschenbaumArthur HillerAtom EgoyanBarbet SchroederBarbra StreisandBarry LevinsonBarry SonnenfeldBaz LuhrmannBen AffleckBen StillerBennett MillerBernardo BertolucciBetty ThomasBill CondonBill DukeBill PaxtonBille AugustBille WoodruffBilly Bob ThorntonBilly WilderBlake EdwardsBoaz YakinBob FosseBob RafelsonBobby FarrellyBrad AndersonBrad BirdBrad SilberlingBradley Rust GreyBrett RatnerBrian De PalmaBrian LevantBrian RobbinsBruce BeresfordBryan SingerCameron CroweCarl FranklinCarlos SaldanhaCatherine HardwickeCatherine OwensChan-wook ParkCharles Martin SmithCharles S. DuttonCharles ShyerChris ColumbusChris NahonChris NoonanChris RockChris WedgeChris WeitzChristian DuguayChristophe GansChristopher GuestChristopher NolanChuck RussellClint EastwoodCorey YuenCosta-GavrasCurtis HansonD.J. CarusoDamien WayansDanny BoyleDanny De VitoDarren AronofskyDarren Lynn BousmanDavid BowersDavid CronenbergDavid DobkinDavid FincherDavid FrankelDavid Gordon GreenDavid GoyerDavid KoeppDavid LeanDavid LynchDavid MametDavid O. RussellDavid R. EllisDavid SilvermanDavid SladeDavid TwohyDavid YatesDavid ZuckerDeepa MehtaDennie GordonDennis DuganDenzel WashingtonDominic SenaDon BluthDonald PetrieDoug LimanDrew BarrymoreDwight H. LittleE. Elias MerhigeEd HarrisEdgar WrightEdward BurnsEdward ZwickEli RothElia KazanEmile ArdolinoEmilio EstevezEric DarnellF. Gary GrayFernando MeirellesForest WhitakerFrancis Ford CoppolaFrancis LawrenceFranco ZeffirelliFrank CapraFrank CoraciFrank DarabontFrank MarshallFrank OzFrank PerryFranklin J. SchaffnerFred SchepisiFred WolfFred ZinnemannGabriele MuccinoGarry MarshallGary RossGary TrousdaleGary WinickGavin HoodGeorge A. RomeroGeorge ClooneyGeorge CukorGeorge LucasGeorge MillerGeorge P. CosmatosGeorge Roy HillGil KenanGina Prince-BythewoodGore VerbinskiGrant HeslovGreg MottolaGriffin DunneGuillermo Del ToroGurinder ChadhaGus Van SantGuy HamiltonGuy RitchieHal AshbyHal NeedhamHarold BeckerHarold RamisHayao MiyazakiHerbert RossHoward DeutchHoward HawksHugh HudsonHugh WilsonIain SoftleyIvan ReitmanJ.J. AbramsJack Lee ThompsonJames CameronJames FoleyJames GrayJames IvoryJames L. BrooksJames MangoldJames McTeigueJames TobackJames WongJan De BontJane CampionJared HessJason AlexanderJason FriedbergJason ReitmanJay ChandrasekharJay RoachJay RussellJean-Jacques AnnaudJean-Pierre JeunetJeff ""King Jeff"" HollinsJeff BurrJeffrey W. ByrdJerry ZuckerJim AbrahamsJim JarmuschJim SheridanJoan ChenJoe CarnahanJoe DanteJoe JohnstonJoe PytkaJoe WrightJoel CoenJoel SchumacherJoel ZwickJoey Lauren AdamsJohn BadhamJohn BoormanJohn CarpenterJohn DahlJohn Erick DowdleJohn FordJohn FrankenheimerJohn G. AvildsenJohn GlenJohn GuillerminJohn HustonJohn LandisJohn LasseterJohn MaddenJohn McTiernanJohn MiliusJohn MuskerJohn PasquinJohn SaylesJohn SchlesingerJohn SchultzJohn SingletonJohn SturgesJohn TurturroJohn WatersJohn WayneJohn WooJon AmielJon AvnetJon FavreauJon TurteltaubJonathan DemmeJonathan FrakesJonathan MostowJoseph McGinty NicholJoseph RubenJoss WhedonJudd ApatowJulian SchnabelJustin LinKarey KirkpatrickKasi LemmonsKathryn BigelowKatia LundKeenen Ivory WayansKelly AsburyKen KwapisKenneth BranaghKevin BrayKevin CostnerKevin GreutertKevin LimaKevin MacDonaldKevin ReynoldsKevin SmithKevin SpaceyKimberly PeirceKing VidorLarry CharlesLars Von TrierLasse HallstromLawrence KasdanLee DanielsLee TamahoriLen WisemanLeonard NimoyLes MayfieldLouis LeterrierLuc BessonLuke GreenfieldLuke WilsonM. Night ShyamalanMalcolm D. LeeMarc ForsterMark DiSalleMark DindalMark DuplassMark Steven JohnsonMark WatersMartha CoolidgeMartin BrestMartin CampbellMartin RittMartin ScorseseMary HarronMathieu KassovitzMatt DillonMatt ReevesMatthew VaughnMel BrooksMel GibsonMichael AptedMichael BayMichael C. BrownMichael Caton-JonesMichael CiminoMichael CrichtonMichael CurtizMichael LehmannMichael LembeckMichael MannMichael MooreMichael O. SajbelMichael PolishMichael RadfordMichael RitchieMichael SpierigMichael WinterbottomMichel GondryMick JacksonMike BinderMike FiggisMike JudgeMike LeighMike NewellMike NicholsMilos FormanMimi LederMira NairMorgan SpurlockNancy MeyersNeal BrennanNeil JordanNeil LaButeNeill BlomkampNick CassavetesNick ParkNoah BaumbachNora EphronNorman JewisonOliver StoneOren PeliOxide Pang ChunP.J. HoganPatrick Read JohnsonPaul AndersonPaul GreengrassPaul HaggisPaul MazurskyPaul McGuiganPaul Michael GlaserPaul SchraderPaul Thomas AndersonPaul VerhoevenPaul WeilandPaul WeitzPedro AlmodovarPenelope SpheerisPenny MarshallPete DocterPeter BergPeter BillingsleyPeter CattaneoPeter ChelsomPeter HewittPeter HyamsPeter JacksonPeter SegalPeter SollettPeter WebberPeter WeirPeyton ReedPhil Alden RobinsonPhil JoanouPhil LordPhilip KaufmanPhillip NoycePierre MorelQuentin TarantinoRaja GosnellRandal KleiserRenny HarlinRichard BenjaminRichard BrooksRichard DonnerRichard E. GrantRichard FleischerRichard KellyRichard LaGraveneseRichard LinklaterRichard MarquandRick RosenthalRicky GervaisRidley ScottRob CohenRob LettermanRob MarshallRob MinkoffRob ReinerRob ZombieRobert AltmanRobert DuvallRobert LuketicRobert MorescoRobert RedfordRobert RodriguezRobert WiseRobert ZemeckisRoberto BenigniRod LurieRoger DonaldsonRoger KumbleRoger SpottiswoodeRoland EmmerichRoland JoffeRoman PolanskiRon HowardRon SheltonRonald NeameRonny YuRuben FleischerRupert WainwrightRussell MulcahyRyan LittleSally FieldSam FellSam FirstenbergSam MendesSam PeckinpahSam RaimiSammo Hung Kam-BoScott DerricksonScott HicksSean PennSergio LeoneSeth GordonShane AckerShane MeadowsShawn LevyShekhar KapurSheldon LettichSidney J. FurieSidney LumetSimon WestSimon WincerSir Richard AttenboroughSofia CoppolaSpike JonzeSpike LeeStanley DonenStanley KubrickStephen ChowStephen DaldryStephen FrearsStephen FryStephen HerekStephen HopkinsStephen NorringtonStephen SommersSteve BarronSteve BuscemiSteve CarrSteve HicknerSteve MinerSteve OedekerkSteven SeagalSteven SoderberghSteven SpielbergSteven ZaillianSue CorcoranSydney PollackSylvain WhiteSylvester StalloneTamara JenkinsTaylor HackfordTed DemmeTed KotcheffTerrence MalickTerry GilliamTerry ZwigoffThomas VinterbergTim Blake NelsonTim BurtonTim HillTim JohnsonTim RobbinsTim StoryTimur BekmambetovTobe HooperTodd FieldTodd HaynesTodd PhillipsTodd SolondzTom DeyTom HanksTom HooperTom ShadyacTom TykwerTom VaughanTony BillTony GilroyTony GoldwynTony ScottTrey ParkerTyler PerryUwe BollVin DieselVincent GalloVincente MinnelliVondie Curtis-HallWalter HillWalter SallesWarren BeattyWayne WangWerner HerzogWes AndersonWes CravenWhit StillmanWilliam FriedkinWilliam MaloneWilliam WylerWolfgang PetersenWong Kar-waiWoody AllenYimou ZhangZach BraffZack SnyderZak PennDirector020406080100Mean of Rotten Tomatoes Rating \ No newline at end of file diff --git a/examples/compiled/bar_grouped_thin.vg.json b/examples/compiled/bar_grouped_thin.vg.json new file mode 100644 index 0000000000..69c532b3bc --- /dev/null +++ b/examples/compiled/bar_grouped_thin.vg.json @@ -0,0 +1,120 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "background": "white", + "padding": 5, + "width": 500, + "height": 200, + "style": "cell", + "data": [ + { + "name": "source_0", + "url": "data/movies.json", + "format": {"type": "json"}, + "transform": [ + { + "type": "aggregate", + "groupby": ["Director", "Title"], + "ops": ["mean"], + "fields": ["Rotten Tomatoes Rating"], + "as": ["mean_Rotten Tomatoes Rating"] + } + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "rect", + "style": ["bar"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "fill": [ + { + "test": "datum['IMDB Rating'] === null || datum['Rotten Tomatoes Rating'] === null", + "value": "#aaa" + }, + {"value": "#4c78a8"} + ], + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"Director: \" + (isValid(datum[\"Director\"]) ? datum[\"Director\"] : \"\"+datum[\"Director\"]) + \"; Mean of Rotten Tomatoes Rating: \" + (format(datum[\"mean_Rotten Tomatoes Rating\"], \"\")) + \"; Title: \" + (isValid(datum[\"Title\"]) ? datum[\"Title\"] : \"\"+datum[\"Title\"])" + }, + "x": { + "scale": "x", + "field": "Director", + "offset": {"scale": "xOffset", "field": "Title"} + }, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, + "y": [ + { + "test": "!isValid(datum[\"mean_Rotten Tomatoes Rating\"]) || !isFinite(+datum[\"mean_Rotten Tomatoes Rating\"])", + "field": {"group": "height"} + }, + {"scale": "y", "field": "mean_Rotten Tomatoes Rating"} + ], + "y2": {"scale": "y", "value": 0} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "band", + "domain": {"data": "source_0", "field": "Director", "sort": true}, + "range": [0, {"signal": "width"}], + "paddingInner": 0.2, + "paddingOuter": 0.2 + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "mean_Rotten Tomatoes Rating"}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + }, + { + "name": "xOffset", + "type": "band", + "domain": {"data": "source_0", "field": "Title", "sort": true}, + "range": [0, {"signal": "bandwidth('x')"}] + } + ], + "axes": [ + { + "scale": "y", + "orient": "left", + "gridScale": "x", + "grid": true, + "tickCount": {"signal": "ceil(height/40)"}, + "domain": false, + "labels": false, + "aria": false, + "maxExtent": 0, + "minExtent": 0, + "ticks": false, + "zindex": 0 + }, + { + "scale": "x", + "orient": "bottom", + "grid": false, + "title": "Director", + "labelAlign": "right", + "labelAngle": 270, + "labelBaseline": "middle", + "zindex": 0 + }, + { + "scale": "y", + "orient": "left", + "grid": false, + "title": "Mean of Rotten Tomatoes Rating", + "labelOverlap": true, + "tickCount": {"signal": "ceil(height/40)"}, + "zindex": 0 + } + ] +} diff --git a/examples/compiled/bar_layered_transparent.vg.json b/examples/compiled/bar_layered_transparent.vg.json index 8b5bc6ef03..fbd9aa0f00 100644 --- a/examples/compiled/bar_layered_transparent.vg.json +++ b/examples/compiled/bar_layered_transparent.vg.json @@ -53,7 +53,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_people"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_month.vg.json b/examples/compiled/bar_month.vg.json index 3fc56b1524..cdd3dacecf 100644 --- a/examples/compiled/bar_month.vg.json +++ b/examples/compiled/bar_month.vg.json @@ -51,7 +51,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Mean of precipitation: \" + (format(datum[\"mean_precipitation\"], \"\"))" }, "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "mean_precipitation"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_multi_values_per_categories.vg.json b/examples/compiled/bar_multi_values_per_categories.vg.json index 8547fe9606..63d48a5175 100644 --- a/examples/compiled/bar_multi_values_per_categories.vg.json +++ b/examples/compiled/bar_multi_values_per_categories.vg.json @@ -63,7 +63,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_negative.vg.json b/examples/compiled/bar_negative.vg.json index 8f9e76b9f9..8965cdfe1d 100644 --- a/examples/compiled/bar_negative.vg.json +++ b/examples/compiled/bar_negative.vg.json @@ -60,7 +60,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_negative_horizontal_label.vg.json b/examples/compiled/bar_negative_horizontal_label.vg.json index 9d139addad..96aa0dbd66 100644 --- a/examples/compiled/bar_negative_horizontal_label.vg.json +++ b/examples/compiled/bar_negative_horizontal_label.vg.json @@ -72,7 +72,7 @@ "x": {"scale": "x", "field": "b_end"}, "x2": {"scale": "x", "field": "b_start"}, "y": {"scale": "y", "field": "a"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/bar_params.vg.json b/examples/compiled/bar_params.vg.json index 6123354272..3273c30642 100644 --- a/examples/compiled/bar_params.vg.json +++ b/examples/compiled/bar_params.vg.json @@ -64,7 +64,7 @@ "encode": { "update": { "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": { "signal": "min(scale('y',datum[\"min_b_start\"]),scale('y',datum[\"max_b_start\"]),scale('y',datum[\"min_b_end\"]),scale('y',datum[\"max_b_end\"]))" }, diff --git a/examples/compiled/bar_params_bound.vg.json b/examples/compiled/bar_params_bound.vg.json index 7e94ef9da6..81146c10f5 100644 --- a/examples/compiled/bar_params_bound.vg.json +++ b/examples/compiled/bar_params_bound.vg.json @@ -68,7 +68,7 @@ "encode": { "update": { "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": { "signal": "min(scale('y',datum[\"min_b_start\"]),scale('y',datum[\"max_b_start\"]),scale('y',datum[\"min_b_end\"]),scale('y',datum[\"max_b_end\"]))" }, diff --git a/examples/compiled/bar_percent_of_total.vg.json b/examples/compiled/bar_percent_of_total.vg.json index ed7365cc58..2258fe7f1d 100644 --- a/examples/compiled/bar_percent_of_total.vg.json +++ b/examples/compiled/bar_percent_of_total.vg.json @@ -69,7 +69,7 @@ "x": {"scale": "x", "field": "PercentOfTotal_end"}, "x2": {"scale": "x", "field": "PercentOfTotal_start"}, "y": {"scale": "y", "field": "Activity"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_size_default.vg.json b/examples/compiled/bar_size_default.vg.json index 4e4a3593b7..a657e6fda5 100644 --- a/examples/compiled/bar_size_default.vg.json +++ b/examples/compiled/bar_size_default.vg.json @@ -41,7 +41,7 @@ "signal": "\"Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Origin"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_size_explicit_bad.vg.json b/examples/compiled/bar_size_explicit_bad.vg.json index d27a388e21..564c59c463 100644 --- a/examples/compiled/bar_size_explicit_bad.vg.json +++ b/examples/compiled/bar_size_explicit_bad.vg.json @@ -35,7 +35,7 @@ "signal": "\"Name: \" + (isValid(datum[\"Name\"]) ? datum[\"Name\"] : \"\"+datum[\"Name\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Name"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_size_fit.vg.json b/examples/compiled/bar_size_fit.vg.json index 8e5ec39e8d..aed17f5075 100644 --- a/examples/compiled/bar_size_fit.vg.json +++ b/examples/compiled/bar_size_fit.vg.json @@ -35,7 +35,7 @@ "signal": "\"Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Origin"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_size_responsive.vg.json b/examples/compiled/bar_size_responsive.vg.json index 88cf30114b..2ed5384234 100644 --- a/examples/compiled/bar_size_responsive.vg.json +++ b/examples/compiled/bar_size_responsive.vg.json @@ -47,7 +47,7 @@ "signal": "\"Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Number of Cars: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Origin"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_size_step_small.vg.json b/examples/compiled/bar_size_step_small.vg.json index a31082143b..4b49288a92 100644 --- a/examples/compiled/bar_size_step_small.vg.json +++ b/examples/compiled/bar_size_step_small.vg.json @@ -41,7 +41,7 @@ "signal": "\"Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Origin"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_sort_by_count.vg.json b/examples/compiled/bar_sort_by_count.vg.json index 9d87c26a6e..cec76baa9b 100644 --- a/examples/compiled/bar_sort_by_count.vg.json +++ b/examples/compiled/bar_sort_by_count.vg.json @@ -42,7 +42,7 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/bar_swap_axes.vg.json b/examples/compiled/bar_swap_axes.vg.json index 5f88082761..24c5aedd84 100644 --- a/examples/compiled/bar_swap_axes.vg.json +++ b/examples/compiled/bar_swap_axes.vg.json @@ -60,7 +60,7 @@ "x": {"scale": "x", "field": "average_b"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "a"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_swap_custom.vg.json b/examples/compiled/bar_swap_custom.vg.json index 201bbdb74a..4d8760930d 100644 --- a/examples/compiled/bar_swap_custom.vg.json +++ b/examples/compiled/bar_swap_custom.vg.json @@ -60,7 +60,7 @@ "x": {"scale": "x", "field": "average_b"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "a"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/bar_title.vg.json b/examples/compiled/bar_title.vg.json index cac465ad90..cef272a2d1 100644 --- a/examples/compiled/bar_title.vg.json +++ b/examples/compiled/bar_title.vg.json @@ -60,7 +60,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_title_start.vg.json b/examples/compiled/bar_title_start.vg.json index 060cdc9c87..03fedcee38 100644 --- a/examples/compiled/bar_title_start.vg.json +++ b/examples/compiled/bar_title_start.vg.json @@ -60,7 +60,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_tooltip.vg.json b/examples/compiled/bar_tooltip.vg.json index 2ab3ef1e59..5295344d5f 100644 --- a/examples/compiled/bar_tooltip.vg.json +++ b/examples/compiled/bar_tooltip.vg.json @@ -61,7 +61,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_tooltip_multi.vg.json b/examples/compiled/bar_tooltip_multi.vg.json index a1b3f4e40a..6a35ed202d 100644 --- a/examples/compiled/bar_tooltip_multi.vg.json +++ b/examples/compiled/bar_tooltip_multi.vg.json @@ -62,7 +62,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_tooltip_title.vg.json b/examples/compiled/bar_tooltip_title.vg.json index 78c257643f..4575f585db 100644 --- a/examples/compiled/bar_tooltip_title.vg.json +++ b/examples/compiled/bar_tooltip_title.vg.json @@ -62,7 +62,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\")) + \"; Field A: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; Field B: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/bar_x_offset_without_x_broken.vg.json b/examples/compiled/bar_x_offset_without_x_broken.vg.json index 9fb6abcc67..7224919868 100644 --- a/examples/compiled/bar_x_offset_without_x_broken.vg.json +++ b/examples/compiled/bar_x_offset_without_x_broken.vg.json @@ -60,7 +60,7 @@ "signal": "\"value: \" + (format(datum[\"value\"], \"\")) + \"; group: \" + (isValid(datum[\"group\"]) ? datum[\"group\"] : \"\"+datum[\"group\"])" }, "x": {"scale": "x", "field": "group"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/concat_bar_layer_circle.vg.json b/examples/compiled/concat_bar_layer_circle.vg.json index cd91195e8d..4bdc186d2f 100644 --- a/examples/compiled/concat_bar_layer_circle.vg.json +++ b/examples/compiled/concat_bar_layer_circle.vg.json @@ -315,7 +315,7 @@ "signal": "\"Major Genre: \" + (isValid(datum[\"Major Genre\"]) ? datum[\"Major Genre\"] : \"\"+datum[\"Major Genre\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "concat_1_x", "field": "Major Genre"}, - "width": {"scale": "concat_1_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('concat_1_x'))"}, "y": {"scale": "concat_1_y", "field": "__count"}, "y2": {"scale": "concat_1_y", "value": 0} } diff --git a/examples/compiled/concat_population_pyramid.vg.json b/examples/compiled/concat_population_pyramid.vg.json index 526faf05fb..8e337a1fb8 100644 --- a/examples/compiled/concat_population_pyramid.vg.json +++ b/examples/compiled/concat_population_pyramid.vg.json @@ -129,7 +129,7 @@ "x": {"scale": "concat_0_x", "field": "sum_people_end"}, "x2": {"scale": "concat_0_x", "field": "sum_people_start"}, "y": {"scale": "concat_0_y", "field": "age"}, - "height": {"scale": "concat_0_y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('concat_0_y'))"} } } } @@ -208,7 +208,7 @@ "x": {"scale": "concat_2_x", "field": "sum_people_end"}, "x2": {"scale": "concat_2_x", "field": "sum_people_start"}, "y": {"scale": "concat_2_y", "field": "age"}, - "height": {"scale": "concat_2_y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('concat_2_y'))"} } } } diff --git a/examples/compiled/concat_weather.vg.json b/examples/compiled/concat_weather.vg.json index 416a30ea6c..0df5e44753 100644 --- a/examples/compiled/concat_weather.vg.json +++ b/examples/compiled/concat_weather.vg.json @@ -138,7 +138,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Mean of precipitation: \" + (format(datum[\"mean_precipitation\"], \"\"))" }, "x": {"scale": "concat_0_x", "field": "month_date"}, - "width": {"scale": "concat_0_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('concat_0_x'))"}, "y": {"scale": "concat_0_y", "field": "mean_precipitation"}, "y2": {"scale": "concat_0_y", "value": 0} } @@ -207,7 +207,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Median of precipitation: \" + (format(datum[\"median_precipitation\"], \"\"))" }, "x": {"scale": "concat_1_x", "field": "month_date"}, - "width": {"scale": "concat_1_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('concat_1_x'))"}, "y": {"scale": "concat_1_y", "field": "median_precipitation"}, "y2": {"scale": "concat_1_y", "value": 0} } diff --git a/examples/compiled/facet_cross_independent_scale.vg.json b/examples/compiled/facet_cross_independent_scale.vg.json index ee46c02b89..d6280b91b1 100644 --- a/examples/compiled/facet_cross_independent_scale.vg.json +++ b/examples/compiled/facet_cross_independent_scale.vg.json @@ -169,9 +169,9 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (isValid(datum[\"b\"]) ? datum[\"b\"] : \"\"+datum[\"b\"])" }, "x": {"scale": "child_x", "field": "a"}, - "width": {"scale": "child_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('child_x'))"}, "y": {"scale": "child_y", "field": "b"}, - "height": {"scale": "child_y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('child_y'))"} } } } diff --git a/examples/compiled/facet_custom.vg.json b/examples/compiled/facet_custom.vg.json index 5435c57482..8efd0d24a6 100644 --- a/examples/compiled/facet_custom.vg.json +++ b/examples/compiled/facet_custom.vg.json @@ -151,7 +151,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_people_end"}, "y2": {"scale": "y", "field": "sum_people_start"} } diff --git a/examples/compiled/facet_custom_header.vg.json b/examples/compiled/facet_custom_header.vg.json index 5435c57482..8efd0d24a6 100644 --- a/examples/compiled/facet_custom_header.vg.json +++ b/examples/compiled/facet_custom_header.vg.json @@ -151,7 +151,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_people_end"}, "y2": {"scale": "y", "field": "sum_people_start"} } diff --git a/examples/compiled/facet_grid_bar.vg.json b/examples/compiled/facet_grid_bar.vg.json index c2264832a3..ffe8d7fbb6 100644 --- a/examples/compiled/facet_grid_bar.vg.json +++ b/examples/compiled/facet_grid_bar.vg.json @@ -192,7 +192,7 @@ "x": {"scale": "x", "field": "p_end"}, "x2": {"scale": "x", "field": "p_start"}, "y": {"scale": "y", "field": "c"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/facet_independent_scale.vg.json b/examples/compiled/facet_independent_scale.vg.json index 16883e8863..ec52febd7e 100644 --- a/examples/compiled/facet_independent_scale.vg.json +++ b/examples/compiled/facet_independent_scale.vg.json @@ -146,7 +146,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "child_x", "field": "age"}, - "width": {"scale": "child_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('child_x'))"}, "y": {"scale": "y", "field": "sum_people_end"}, "y2": {"scale": "y", "field": "sum_people_start"} } diff --git a/examples/compiled/hconcat_weather.vg.json b/examples/compiled/hconcat_weather.vg.json index 8bb952d22f..958915aad6 100644 --- a/examples/compiled/hconcat_weather.vg.json +++ b/examples/compiled/hconcat_weather.vg.json @@ -117,7 +117,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Mean of precipitation: \" + (format(datum[\"mean_precipitation\"], \"\"))" }, "x": {"scale": "concat_0_x", "field": "month_date"}, - "width": {"scale": "concat_0_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('concat_0_x'))"}, "y": {"scale": "concat_0_y", "field": "mean_precipitation"}, "y2": {"scale": "concat_0_y", "value": 0} } diff --git a/examples/compiled/histogram_ordinal.vg.json b/examples/compiled/histogram_ordinal.vg.json index 43b2f6e0fd..1b11b8bd79 100644 --- a/examples/compiled/histogram_ordinal.vg.json +++ b/examples/compiled/histogram_ordinal.vg.json @@ -66,7 +66,7 @@ "signal": "\"IMDB Rating (binned): \" + (!isValid(datum[\"bin_maxbins_10_IMDB Rating\"]) || !isFinite(+datum[\"bin_maxbins_10_IMDB Rating\"]) ? \"null\" : format(datum[\"bin_maxbins_10_IMDB Rating\"], \"\") + \" – \" + format(datum[\"bin_maxbins_10_IMDB Rating_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "bin_maxbins_10_IMDB Rating_range"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/histogram_ordinal_sort.vg.json b/examples/compiled/histogram_ordinal_sort.vg.json index b0e3d9f849..a31354fb06 100644 --- a/examples/compiled/histogram_ordinal_sort.vg.json +++ b/examples/compiled/histogram_ordinal_sort.vg.json @@ -72,7 +72,7 @@ "signal": "\"IMDB Rating (binned): \" + (!isValid(datum[\"bin_maxbins_10_IMDB Rating\"]) || !isFinite(+datum[\"bin_maxbins_10_IMDB Rating\"]) ? \"null\" : format(datum[\"bin_maxbins_10_IMDB Rating\"], \"\") + \" – \" + format(datum[\"bin_maxbins_10_IMDB Rating_end\"], \"\")) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "bin_maxbins_10_IMDB Rating_range"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/interactive_bar_select_highlight.vg.json b/examples/compiled/interactive_bar_select_highlight.vg.json index 61090f6587..348178735e 100644 --- a/examples/compiled/interactive_bar_select_highlight.vg.json +++ b/examples/compiled/interactive_bar_select_highlight.vg.json @@ -167,7 +167,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/interactive_concat_layer.vg.json b/examples/compiled/interactive_concat_layer.vg.json index e73c94dd63..46b90b6af8 100644 --- a/examples/compiled/interactive_concat_layer.vg.json +++ b/examples/compiled/interactive_concat_layer.vg.json @@ -317,7 +317,7 @@ "signal": "\"Major Genre: \" + (isValid(datum[\"Major Genre\"]) ? datum[\"Major Genre\"] : \"\"+datum[\"Major Genre\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "concat_1_x", "field": "Major Genre"}, - "width": {"scale": "concat_1_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('concat_1_x'))"}, "y": {"scale": "concat_1_y", "field": "__count"}, "y2": {"scale": "concat_1_y", "value": 0} } diff --git a/examples/compiled/interactive_dashboard_europe_pop.vg.json b/examples/compiled/interactive_dashboard_europe_pop.vg.json index 905b49d135..7907c00a1f 100644 --- a/examples/compiled/interactive_dashboard_europe_pop.vg.json +++ b/examples/compiled/interactive_dashboard_europe_pop.vg.json @@ -626,7 +626,7 @@ "field": "Population_ages_15_64_of_total_start" }, "y": {"scale": "concat_0_y", "field": "Country"}, - "height": {"scale": "concat_0_y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('concat_0_y'))"} } } }, @@ -950,7 +950,7 @@ "field": "Population_ages_65_and_above_of_total_start" }, "y": {"scale": "concat_1_y", "field": "Country"}, - "height": {"scale": "concat_1_y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('concat_1_y'))"} } } }, diff --git a/examples/compiled/interactive_seattle_weather.vg.json b/examples/compiled/interactive_seattle_weather.vg.json index 13d435d98b..850ac9048e 100644 --- a/examples/compiled/interactive_seattle_weather.vg.json +++ b/examples/compiled/interactive_seattle_weather.vg.json @@ -498,7 +498,7 @@ "x": {"scale": "concat_1_x", "field": "__count"}, "x2": {"scale": "concat_1_x", "value": 0}, "y": {"scale": "concat_1_y", "field": "weather"}, - "height": {"scale": "concat_1_y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('concat_1_y'))"} } } } diff --git a/examples/compiled/joinaggregate_mean_difference.vg.json b/examples/compiled/joinaggregate_mean_difference.vg.json index ae63ba42e2..d3592f878a 100644 --- a/examples/compiled/joinaggregate_mean_difference.vg.json +++ b/examples/compiled/joinaggregate_mean_difference.vg.json @@ -82,7 +82,7 @@ "x": {"scale": "x", "field": "IMDB Rating_end"}, "x2": {"scale": "x", "field": "IMDB Rating_start"}, "y": {"scale": "y", "field": "Title"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/joinaggregate_mean_difference_by_year.vg.json b/examples/compiled/joinaggregate_mean_difference_by_year.vg.json index 476b0af3f3..611937a644 100644 --- a/examples/compiled/joinaggregate_mean_difference_by_year.vg.json +++ b/examples/compiled/joinaggregate_mean_difference_by_year.vg.json @@ -84,7 +84,7 @@ "x": {"scale": "x", "field": "IMDB Rating_end"}, "x2": {"scale": "x", "field": "IMDB Rating_start"}, "y": {"scale": "y", "field": "Title"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/joinaggregate_percent_of_total.vg.json b/examples/compiled/joinaggregate_percent_of_total.vg.json index ed7365cc58..2258fe7f1d 100644 --- a/examples/compiled/joinaggregate_percent_of_total.vg.json +++ b/examples/compiled/joinaggregate_percent_of_total.vg.json @@ -69,7 +69,7 @@ "x": {"scale": "x", "field": "PercentOfTotal_end"}, "x2": {"scale": "x", "field": "PercentOfTotal_start"}, "y": {"scale": "y", "field": "Activity"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/layer_bar_annotations.vg.json b/examples/compiled/layer_bar_annotations.vg.json index 481e8c5c7b..0c4bd6ee71 100644 --- a/examples/compiled/layer_bar_annotations.vg.json +++ b/examples/compiled/layer_bar_annotations.vg.json @@ -79,7 +79,7 @@ "signal": "\"Day: \" + (isValid(datum[\"Day\"]) ? datum[\"Day\"] : \"\"+datum[\"Day\"]) + \"; Value: \" + (format(datum[\"Value\"], \"\"))" }, "x": {"scale": "x", "field": "Day"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Value_end"}, "y2": {"scale": "y", "field": "Value_start"} } @@ -98,7 +98,7 @@ "signal": "\"Day: \" + (isValid(datum[\"Day\"]) ? datum[\"Day\"] : \"\"+datum[\"Day\"]) + \"; PM2.5 Value: \" + (format(datum[\"baseline\"], \"\")) + \"; Value: \" + (format(datum[\"Value\"], \"\"))" }, "x": {"scale": "x", "field": "Day"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "baseline"}, "y2": {"scale": "y", "field": "Value"} } diff --git a/examples/compiled/layer_bar_circle_grouped.vg.json b/examples/compiled/layer_bar_circle_grouped.vg.json index 2b50d57e02..4de4dea6d2 100644 --- a/examples/compiled/layer_bar_circle_grouped.vg.json +++ b/examples/compiled/layer_bar_circle_grouped.vg.json @@ -81,7 +81,7 @@ "field": "category", "offset": {"scale": "xOffset", "field": "group"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/layer_bar_fruit.vg.json b/examples/compiled/layer_bar_fruit.vg.json index b836111433..e7d01668fb 100644 --- a/examples/compiled/layer_bar_fruit.vg.json +++ b/examples/compiled/layer_bar_fruit.vg.json @@ -71,7 +71,7 @@ "x": {"scale": "x", "field": "count_end"}, "x2": {"scale": "x", "field": "count_start"}, "y": {"scale": "y", "field": "name"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/layer_bar_grouped_line_ungrouped.vg.json b/examples/compiled/layer_bar_grouped_line_ungrouped.vg.json index dc3df7df6b..bd2e4f27df 100644 --- a/examples/compiled/layer_bar_grouped_line_ungrouped.vg.json +++ b/examples/compiled/layer_bar_grouped_line_ungrouped.vg.json @@ -79,7 +79,7 @@ "field": "category", "offset": {"scale": "xOffset", "field": "group"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "value_end"}, "y2": {"scale": "y", "field": "value_start"} } diff --git a/examples/compiled/layer_bar_labels.vg.json b/examples/compiled/layer_bar_labels.vg.json index 7ede2672cf..31d397cd71 100644 --- a/examples/compiled/layer_bar_labels.vg.json +++ b/examples/compiled/layer_bar_labels.vg.json @@ -62,7 +62,7 @@ "x": {"scale": "x", "field": "b_end"}, "x2": {"scale": "x", "field": "b_start"}, "y": {"scale": "y", "field": "a"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/layer_bar_labels_grey.vg.json b/examples/compiled/layer_bar_labels_grey.vg.json index beb6fa9b63..8b77756483 100644 --- a/examples/compiled/layer_bar_labels_grey.vg.json +++ b/examples/compiled/layer_bar_labels_grey.vg.json @@ -53,7 +53,7 @@ "x": {"scale": "x", "field": "mean_IMDB Rating"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "Major Genre"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/layer_bar_labels_style.vg.json b/examples/compiled/layer_bar_labels_style.vg.json index 0efd8ebe05..dd0169cc9c 100644 --- a/examples/compiled/layer_bar_labels_style.vg.json +++ b/examples/compiled/layer_bar_labels_style.vg.json @@ -61,7 +61,7 @@ "x": {"scale": "x", "field": "b_end"}, "x2": {"scale": "x", "field": "b_start"}, "y": {"scale": "y", "field": "a"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/layer_bar_line.vg.json b/examples/compiled/layer_bar_line.vg.json index eec6e7a17b..0fa026c72d 100644 --- a/examples/compiled/layer_bar_line.vg.json +++ b/examples/compiled/layer_bar_line.vg.json @@ -59,7 +59,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/layer_bar_line_union.vg.json b/examples/compiled/layer_bar_line_union.vg.json index ea1feef68a..3cf4f28bc2 100644 --- a/examples/compiled/layer_bar_line_union.vg.json +++ b/examples/compiled/layer_bar_line_union.vg.json @@ -59,7 +59,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; c: \" + (format(datum[\"c\"], \"\"))" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "c_end"}, "y2": {"scale": "y", "field": "c_start"} } diff --git a/examples/compiled/layer_bar_month.vg.json b/examples/compiled/layer_bar_month.vg.json index a0b5889ea6..498fab4f7b 100644 --- a/examples/compiled/layer_bar_month.vg.json +++ b/examples/compiled/layer_bar_month.vg.json @@ -72,7 +72,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Mean of precipitation: \" + (format(datum[\"mean_precipitation\"], \"\"))" }, "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "mean_precipitation"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/layer_bar_tick_datum_grouped.vg.json b/examples/compiled/layer_bar_tick_datum_grouped.vg.json index d39abf994b..335a19cc9d 100644 --- a/examples/compiled/layer_bar_tick_datum_grouped.vg.json +++ b/examples/compiled/layer_bar_tick_datum_grouped.vg.json @@ -53,7 +53,7 @@ "field": "Cylinders", "offset": {"scale": "xOffset", "field": "Origin"} }, - "width": {"scale": "xOffset", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('xOffset'))"}, "y": {"scale": "y", "field": "mean_Acceleration"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/layer_precipitation_mean.vg.json b/examples/compiled/layer_precipitation_mean.vg.json index e49acfaf0d..d19a7112bd 100644 --- a/examples/compiled/layer_precipitation_mean.vg.json +++ b/examples/compiled/layer_precipitation_mean.vg.json @@ -72,7 +72,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Mean of precipitation: \" + (format(datum[\"mean_precipitation\"], \"\"))" }, "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "mean_precipitation"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/layer_text_heatmap.vg.json b/examples/compiled/layer_text_heatmap.vg.json index 66ae81e15e..4f005e6d2d 100644 --- a/examples/compiled/layer_text_heatmap.vg.json +++ b/examples/compiled/layer_text_heatmap.vg.json @@ -48,9 +48,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"num_cars\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/layer_text_heatmap_joinaggregate.vg.json b/examples/compiled/layer_text_heatmap_joinaggregate.vg.json index d449076c74..030416d423 100644 --- a/examples/compiled/layer_text_heatmap_joinaggregate.vg.json +++ b/examples/compiled/layer_text_heatmap_joinaggregate.vg.json @@ -59,9 +59,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"num_cars\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/lookup.vg.json b/examples/compiled/lookup.vg.json index 1c7ec313be..461db2d4fd 100644 --- a/examples/compiled/lookup.vg.json +++ b/examples/compiled/lookup.vg.json @@ -57,7 +57,7 @@ "signal": "\"group: \" + (isValid(datum[\"group\"]) ? datum[\"group\"] : \"\"+datum[\"group\"]) + \"; Mean of age: \" + (format(datum[\"mean_age\"], \"\"))" }, "x": {"scale": "x", "field": "group"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "mean_age"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/rect_heatmap.vg.json b/examples/compiled/rect_heatmap.vg.json index d10f2c4d07..5afa68acb2 100644 --- a/examples/compiled/rect_heatmap.vg.json +++ b/examples/compiled/rect_heatmap.vg.json @@ -42,9 +42,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Mean of Horsepower: \" + (format(datum[\"mean_Horsepower\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/rect_heatmap_weather.vg.json b/examples/compiled/rect_heatmap_weather.vg.json index 3005add738..a185f5a3cd 100644 --- a/examples/compiled/rect_heatmap_weather.vg.json +++ b/examples/compiled/rect_heatmap_weather.vg.json @@ -61,9 +61,9 @@ "signal": "\"Day: \" + (timeFormat(datum[\"date_date\"], '%e')) + \"; Month: \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Max of temp_max: \" + (format(datum[\"max_temp_max\"], \"\"))" }, "x": {"scale": "x", "field": "date_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "month_date"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/rect_lasagna.vg.json b/examples/compiled/rect_lasagna.vg.json index ed0448069f..b6364132b8 100644 --- a/examples/compiled/rect_lasagna.vg.json +++ b/examples/compiled/rect_lasagna.vg.json @@ -45,9 +45,9 @@ "signal": "\"Time: \" + (timeFormat(datum[\"yearmonthdate_date\"], '%Y')) + \"; symbol: \" + (isValid(datum[\"symbol\"]) ? datum[\"symbol\"] : \"\"+datum[\"symbol\"]) + \"; Price: \" + (format(datum[\"sum_price\"], \"\"))" }, "x": {"scale": "x", "field": "yearmonthdate_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "symbol"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/selection_composition_and.vg.json b/examples/compiled/selection_composition_and.vg.json index c67bcf6799..5cf170d729 100644 --- a/examples/compiled/selection_composition_and.vg.json +++ b/examples/compiled/selection_composition_and.vg.json @@ -585,9 +585,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_composition_or.vg.json b/examples/compiled/selection_composition_or.vg.json index 1629968999..5122dc54e3 100644 --- a/examples/compiled/selection_composition_or.vg.json +++ b/examples/compiled/selection_composition_or.vg.json @@ -585,9 +585,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_heatmap.vg.json b/examples/compiled/selection_heatmap.vg.json index 9d107c543d..02149f6e3f 100644 --- a/examples/compiled/selection_heatmap.vg.json +++ b/examples/compiled/selection_heatmap.vg.json @@ -121,9 +121,9 @@ "signal": "\"predicted: \" + (isValid(datum[\"predicted\"]) ? datum[\"predicted\"] : \"\"+datum[\"predicted\"]) + \"; actual: \" + (isValid(datum[\"actual\"]) ? datum[\"actual\"] : \"\"+datum[\"actual\"]) + \"; count: \" + (format(datum[\"count\"], \"\"))" }, "x": {"scale": "x", "field": "predicted"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "actual"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/selection_interval_mark_style.vg.json b/examples/compiled/selection_interval_mark_style.vg.json index 05bfed9cdf..a736606940 100644 --- a/examples/compiled/selection_interval_mark_style.vg.json +++ b/examples/compiled/selection_interval_mark_style.vg.json @@ -578,9 +578,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_layer_bar_month.vg.json b/examples/compiled/selection_layer_bar_month.vg.json index 5e6abd859c..600cd0b017 100644 --- a/examples/compiled/selection_layer_bar_month.vg.json +++ b/examples/compiled/selection_layer_bar_month.vg.json @@ -293,7 +293,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Mean of precipitation: \" + (format(datum[\"mean_precipitation\"], \"\"))" }, "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "mean_precipitation"}, "y2": {"scale": "y", "value": 0} } diff --git a/examples/compiled/selection_project_interval.vg.json b/examples/compiled/selection_project_interval.vg.json index 2586350b46..920b039888 100644 --- a/examples/compiled/selection_project_interval.vg.json +++ b/examples/compiled/selection_project_interval.vg.json @@ -308,9 +308,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_project_interval_x.vg.json b/examples/compiled/selection_project_interval_x.vg.json index 22020f4c9d..d7f80f4b6f 100644 --- a/examples/compiled/selection_project_interval_x.vg.json +++ b/examples/compiled/selection_project_interval_x.vg.json @@ -251,9 +251,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_project_interval_x_y.vg.json b/examples/compiled/selection_project_interval_x_y.vg.json index 2586350b46..920b039888 100644 --- a/examples/compiled/selection_project_interval_x_y.vg.json +++ b/examples/compiled/selection_project_interval_x_y.vg.json @@ -308,9 +308,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_project_interval_y.vg.json b/examples/compiled/selection_project_interval_y.vg.json index fd238a8b98..82bf700c3f 100644 --- a/examples/compiled/selection_project_interval_y.vg.json +++ b/examples/compiled/selection_project_interval_y.vg.json @@ -251,9 +251,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_type_interval.vg.json b/examples/compiled/selection_type_interval.vg.json index 2586350b46..920b039888 100644 --- a/examples/compiled/selection_type_interval.vg.json +++ b/examples/compiled/selection_type_interval.vg.json @@ -308,9 +308,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_type_interval_invert.vg.json b/examples/compiled/selection_type_interval_invert.vg.json index 2d268913ce..40947e9b51 100644 --- a/examples/compiled/selection_type_interval_invert.vg.json +++ b/examples/compiled/selection_type_interval_invert.vg.json @@ -307,9 +307,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/selection_type_point.vg.json b/examples/compiled/selection_type_point.vg.json index 4ec3e4ea8d..6dba2e61ad 100644 --- a/examples/compiled/selection_type_point.vg.json +++ b/examples/compiled/selection_type_point.vg.json @@ -97,9 +97,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/selection_type_single_dblclick.vg.json b/examples/compiled/selection_type_single_dblclick.vg.json index 394be3d0a8..ea489ca44a 100644 --- a/examples/compiled/selection_type_single_dblclick.vg.json +++ b/examples/compiled/selection_type_single_dblclick.vg.json @@ -97,9 +97,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/selection_type_single_mouseover.vg.json b/examples/compiled/selection_type_single_mouseover.vg.json index b3084883fe..91347e543e 100644 --- a/examples/compiled/selection_type_single_mouseover.vg.json +++ b/examples/compiled/selection_type_single_mouseover.vg.json @@ -97,9 +97,9 @@ "signal": "\"Cylinders: \" + (isValid(datum[\"Cylinders\"]) ? datum[\"Cylinders\"] : \"\"+datum[\"Cylinders\"]) + \"; Origin: \" + (isValid(datum[\"Origin\"]) ? datum[\"Origin\"] : \"\"+datum[\"Origin\"]) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\"))" }, "x": {"scale": "x", "field": "Cylinders"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "Origin"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/stacked_bar_count.vg.json b/examples/compiled/stacked_bar_count.vg.json index a638526842..7687ac5e77 100644 --- a/examples/compiled/stacked_bar_count.vg.json +++ b/examples/compiled/stacked_bar_count.vg.json @@ -55,7 +55,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\")) + \"; weather: \" + (isValid(datum[\"weather\"]) ? datum[\"weather\"] : \"\"+datum[\"weather\"])" }, "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count_end"}, "y2": {"scale": "y", "field": "__count_start"} } diff --git a/examples/compiled/stacked_bar_count_corner_radius_config.vg.json b/examples/compiled/stacked_bar_count_corner_radius_config.vg.json index 6ea4d89ea0..bcc361cd0e 100644 --- a/examples/compiled/stacked_bar_count_corner_radius_config.vg.json +++ b/examples/compiled/stacked_bar_count_corner_radius_config.vg.json @@ -63,7 +63,7 @@ "encode": { "update": { "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": { "signal": "min(scale('y',datum[\"min___count_start\"]),scale('y',datum[\"max___count_start\"]),scale('y',datum[\"min___count_end\"]),scale('y',datum[\"max___count_end\"]))" }, diff --git a/examples/compiled/stacked_bar_count_corner_radius_mark.vg.json b/examples/compiled/stacked_bar_count_corner_radius_mark.vg.json index 5bc897aaaf..c5cfffe114 100644 --- a/examples/compiled/stacked_bar_count_corner_radius_mark.vg.json +++ b/examples/compiled/stacked_bar_count_corner_radius_mark.vg.json @@ -63,7 +63,7 @@ "encode": { "update": { "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": { "signal": "min(scale('y',datum[\"min___count_start\"]),scale('y',datum[\"max___count_start\"]),scale('y',datum[\"min___count_end\"]),scale('y',datum[\"max___count_end\"]))" }, diff --git a/examples/compiled/stacked_bar_count_corner_radius_mark_x.vg.json b/examples/compiled/stacked_bar_count_corner_radius_mark_x.vg.json index 375b9e4810..5ce246633a 100644 --- a/examples/compiled/stacked_bar_count_corner_radius_mark_x.vg.json +++ b/examples/compiled/stacked_bar_count_corner_radius_mark_x.vg.json @@ -63,7 +63,7 @@ "encode": { "update": { "y": {"scale": "y", "field": "month_date"}, - "height": {"scale": "y", "band": 1}, + "height": {"signal": "max(0.25, bandwidth('y'))"}, "cornerRadiusTopRight": {"value": 8}, "cornerRadiusBottomRight": {"value": 8}, "x": { diff --git a/examples/compiled/stacked_bar_count_corner_radius_stroke.vg.json b/examples/compiled/stacked_bar_count_corner_radius_stroke.vg.json index 9c330413c0..5dc5751083 100644 --- a/examples/compiled/stacked_bar_count_corner_radius_stroke.vg.json +++ b/examples/compiled/stacked_bar_count_corner_radius_stroke.vg.json @@ -63,7 +63,7 @@ "encode": { "update": { "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": { "signal": "min(scale('y',datum[\"min___count_start\"]),scale('y',datum[\"max___count_start\"]),scale('y',datum[\"min___count_end\"]),scale('y',datum[\"max___count_end\"]))" }, diff --git a/examples/compiled/stacked_bar_h.vg.json b/examples/compiled/stacked_bar_h.vg.json index 9e3f423017..2d7351dc7a 100644 --- a/examples/compiled/stacked_bar_h.vg.json +++ b/examples/compiled/stacked_bar_h.vg.json @@ -55,7 +55,7 @@ "x": {"scale": "x", "field": "sum_yield_end"}, "x2": {"scale": "x", "field": "sum_yield_start"}, "y": {"scale": "y", "field": "variety"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/stacked_bar_h_normalized_labeled.vg.json b/examples/compiled/stacked_bar_h_normalized_labeled.vg.json index 2997d11aba..87e5d5c356 100644 --- a/examples/compiled/stacked_bar_h_normalized_labeled.vg.json +++ b/examples/compiled/stacked_bar_h_normalized_labeled.vg.json @@ -77,7 +77,7 @@ "x": {"scale": "x", "field": "sum_people_end"}, "x2": {"scale": "x", "field": "sum_people_start"}, "y": {"scale": "y", "field": "age"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } }, diff --git a/examples/compiled/stacked_bar_h_order.vg.json b/examples/compiled/stacked_bar_h_order.vg.json index c480e6afb3..bf3acb95fb 100644 --- a/examples/compiled/stacked_bar_h_order.vg.json +++ b/examples/compiled/stacked_bar_h_order.vg.json @@ -55,7 +55,7 @@ "x": {"scale": "x", "field": "sum_yield_end"}, "x2": {"scale": "x", "field": "sum_yield_start"}, "y": {"scale": "y", "field": "variety"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/stacked_bar_h_order_custom.vg.json b/examples/compiled/stacked_bar_h_order_custom.vg.json index 19d8890cf9..b1bd41de1e 100644 --- a/examples/compiled/stacked_bar_h_order_custom.vg.json +++ b/examples/compiled/stacked_bar_h_order_custom.vg.json @@ -60,7 +60,7 @@ "x": {"scale": "x", "field": "sum_yield_end"}, "x2": {"scale": "x", "field": "sum_yield_start"}, "y": {"scale": "y", "field": "variety"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/stacked_bar_normalize.vg.json b/examples/compiled/stacked_bar_normalize.vg.json index 4c5da74244..08df66d85e 100644 --- a/examples/compiled/stacked_bar_normalize.vg.json +++ b/examples/compiled/stacked_bar_normalize.vg.json @@ -59,7 +59,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people_end\"]-datum[\"sum_people_start\"], \".0%\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_people_end"}, "y2": {"scale": "y", "field": "sum_people_start"} } diff --git a/examples/compiled/stacked_bar_population.vg.json b/examples/compiled/stacked_bar_population.vg.json index fb4719486a..89196843e0 100644 --- a/examples/compiled/stacked_bar_population.vg.json +++ b/examples/compiled/stacked_bar_population.vg.json @@ -60,7 +60,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_people_end"}, "y2": {"scale": "y", "field": "sum_people_start"} } diff --git a/examples/compiled/stacked_bar_population_transform.vg.json b/examples/compiled/stacked_bar_population_transform.vg.json index f320dd7484..1d5c55b211 100644 --- a/examples/compiled/stacked_bar_population_transform.vg.json +++ b/examples/compiled/stacked_bar_population_transform.vg.json @@ -53,7 +53,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"v1\"], \"\")) + \"; v2: \" + (format(datum[\"v2\"], \"\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "v1"}, "y2": {"scale": "y", "field": "v2"} } diff --git a/examples/compiled/stacked_bar_sum_opacity.vg.json b/examples/compiled/stacked_bar_sum_opacity.vg.json index 572c5b05c7..6492caecc1 100644 --- a/examples/compiled/stacked_bar_sum_opacity.vg.json +++ b/examples/compiled/stacked_bar_sum_opacity.vg.json @@ -61,7 +61,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; people: \" + (format(datum[\"people\"], \"\"))" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_people_end"}, "y2": {"scale": "y", "field": "sum_people_start"} } diff --git a/examples/compiled/stacked_bar_unaggregate.vg.json b/examples/compiled/stacked_bar_unaggregate.vg.json index da55f175ff..92509ade9d 100644 --- a/examples/compiled/stacked_bar_unaggregate.vg.json +++ b/examples/compiled/stacked_bar_unaggregate.vg.json @@ -54,7 +54,7 @@ "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\")) + \"; c: \" + (isValid(datum[\"c\"]) ? datum[\"c\"] : \"\"+datum[\"c\"])" }, "x": {"scale": "x", "field": "a"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "b_end"}, "y2": {"scale": "y", "field": "b_start"} } diff --git a/examples/compiled/stacked_bar_v.vg.json b/examples/compiled/stacked_bar_v.vg.json index 27400a5a5c..a0409fbb63 100644 --- a/examples/compiled/stacked_bar_v.vg.json +++ b/examples/compiled/stacked_bar_v.vg.json @@ -53,7 +53,7 @@ "signal": "\"variety: \" + (isValid(datum[\"variety\"]) ? datum[\"variety\"] : \"\"+datum[\"variety\"]) + \"; Sum of yield: \" + (format(datum[\"sum_yield\"], \"\")) + \"; site: \" + (isValid(datum[\"site\"]) ? datum[\"site\"] : \"\"+datum[\"site\"])" }, "x": {"scale": "x", "field": "variety"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_yield_end"}, "y2": {"scale": "y", "field": "sum_yield_start"} } diff --git a/examples/compiled/stacked_bar_weather.vg.json b/examples/compiled/stacked_bar_weather.vg.json index 3bd6a710e4..5eb9d436b0 100644 --- a/examples/compiled/stacked_bar_weather.vg.json +++ b/examples/compiled/stacked_bar_weather.vg.json @@ -55,7 +55,7 @@ "signal": "\"Month of the year: \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Count of Records: \" + (format(datum[\"__count\"], \"\")) + \"; Weather type: \" + (isValid(datum[\"weather\"]) ? datum[\"weather\"] : \"\"+datum[\"weather\"])" }, "x": {"scale": "x", "field": "month_date"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "__count_end"}, "y2": {"scale": "y", "field": "__count_start"} } diff --git a/examples/compiled/test_aggregate_nested.vg.json b/examples/compiled/test_aggregate_nested.vg.json index d83d7c2d26..65bda28edf 100644 --- a/examples/compiled/test_aggregate_nested.vg.json +++ b/examples/compiled/test_aggregate_nested.vg.json @@ -92,7 +92,7 @@ "x": {"scale": "x", "field": "sum_properties\\.yield_end"}, "x2": {"scale": "x", "field": "sum_properties\\.yield_start"}, "y": {"scale": "y", "field": "properties\\.variety"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/trellis_bar.vg.json b/examples/compiled/trellis_bar.vg.json index f6091d3260..a8b3fef14a 100644 --- a/examples/compiled/trellis_bar.vg.json +++ b/examples/compiled/trellis_bar.vg.json @@ -143,7 +143,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_people_end"}, "y2": {"scale": "y", "field": "sum_people_start"} } diff --git a/examples/compiled/trellis_bar_no_header.vg.json b/examples/compiled/trellis_bar_no_header.vg.json index 31df7c83d2..0e859595af 100644 --- a/examples/compiled/trellis_bar_no_header.vg.json +++ b/examples/compiled/trellis_bar_no_header.vg.json @@ -117,7 +117,7 @@ "signal": "\"age: \" + (isValid(datum[\"age\"]) ? datum[\"age\"] : \"\"+datum[\"age\"]) + \"; population: \" + (format(datum[\"sum_people\"], \"\")) + \"; gender: \" + (isValid(datum[\"gender\"]) ? datum[\"gender\"] : \"\"+datum[\"gender\"])" }, "x": {"scale": "x", "field": "age"}, - "width": {"scale": "x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('x'))"}, "y": {"scale": "y", "field": "sum_people_end"}, "y2": {"scale": "y", "field": "sum_people_start"} } diff --git a/examples/compiled/trellis_stacked_bar.vg.json b/examples/compiled/trellis_stacked_bar.vg.json index d73024a5ab..0291364369 100644 --- a/examples/compiled/trellis_stacked_bar.vg.json +++ b/examples/compiled/trellis_stacked_bar.vg.json @@ -138,7 +138,7 @@ "x": {"scale": "x", "field": "sum_yield_end"}, "x2": {"scale": "x", "field": "sum_yield_start"}, "y": {"scale": "y", "field": "variety"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/vconcat_weather.vg.json b/examples/compiled/vconcat_weather.vg.json index 1255516cc8..b815a04198 100644 --- a/examples/compiled/vconcat_weather.vg.json +++ b/examples/compiled/vconcat_weather.vg.json @@ -117,7 +117,7 @@ "signal": "\"date (month): \" + (timeFormat(datum[\"month_date\"], timeUnitSpecifier([\"month\"], {\"year-month\":\"%b %Y \",\"year-month-date\":\"%b %d, %Y \"}))) + \"; Mean of precipitation: \" + (format(datum[\"mean_precipitation\"], \"\"))" }, "x": {"scale": "concat_0_x", "field": "month_date"}, - "width": {"scale": "concat_0_x", "band": 1}, + "width": {"signal": "max(0.25, bandwidth('concat_0_x'))"}, "y": {"scale": "concat_0_y", "field": "mean_precipitation"}, "y2": {"scale": "concat_0_y", "value": 0} } diff --git a/examples/compiled/window_top_k.vg.json b/examples/compiled/window_top_k.vg.json index 37d343a85f..23aec6d38c 100644 --- a/examples/compiled/window_top_k.vg.json +++ b/examples/compiled/window_top_k.vg.json @@ -90,7 +90,7 @@ "x": {"scale": "x", "field": "score_end"}, "x2": {"scale": "x", "field": "score_start"}, "y": {"scale": "y", "field": "student"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/compiled/window_top_k_others.vg.json b/examples/compiled/window_top_k_others.vg.json index 96c858f7c7..106ca55477 100644 --- a/examples/compiled/window_top_k_others.vg.json +++ b/examples/compiled/window_top_k_others.vg.json @@ -78,7 +78,7 @@ "x": {"scale": "x", "field": "mean_aggregate_gross"}, "x2": {"scale": "x", "value": 0}, "y": {"scale": "y", "field": "ranked_director"}, - "height": {"scale": "y", "band": 1} + "height": {"signal": "max(0.25, bandwidth('y'))"} } } } diff --git a/examples/specs/bar_grouped_thin.vl.json b/examples/specs/bar_grouped_thin.vl.json new file mode 100644 index 0000000000..265228c52e --- /dev/null +++ b/examples/specs/bar_grouped_thin.vl.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "data": {"url": "data/movies.json"}, + "width": 500, + "mark": "bar", + "encoding": { + "x": {"field": "Director", "type": "nominal"}, + "xOffset": {"field": "Title", "type": "nominal"}, + "y": { + "aggregate": "mean", + "field": "Rotten Tomatoes Rating", + "type": "quantitative" + }, + "color": { + "condition": { + "test": "datum['IMDB Rating'] === null || datum['Rotten Tomatoes Rating'] === null", + "value": "#aaa" + } + } + }, + "config": {"mark": {"invalid": null}} +} diff --git a/src/compile/mark/encode/position-rect.ts b/src/compile/mark/encode/position-rect.ts index 891cdbce0c..1091008e45 100644 --- a/src/compile/mark/encode/position-rect.ts +++ b/src/compile/mark/encode/position-rect.ts @@ -77,7 +77,12 @@ function defaultSizeRef( if (scale) { const scaleType = scale.get('type'); if (scaleType === 'band') { - return {scale: scaleName, band: bandSize.band}; + let bandWidth = `bandwidth('${scaleName}')`; + if (bandSize.band !== 1) { + bandWidth = `${bandSize.band} * ${bandWidth}`; + } + // TODO(#8351): make 0.25 here configurable + return {signal: `max(0.25, ${bandWidth})`}; } else if (bandSize.band !== 1) { log.warn(log.message.cannotUseRelativeBandSizeWithNonBandScale(scaleType)); bandSize = undefined; @@ -139,6 +144,7 @@ function positionAndSize( log.warn(log.message.cannotApplySizeToNonOrientedMark(markDef.type)); } } + const hasSizeFromMarkOrEncoding = !!sizeMixins; // Otherwise, apply default value const bandSize = getBandSize({channel, fieldDef, markDef, config, scaleType: scale?.get('type'), useVlSizeChannel}); @@ -156,7 +162,8 @@ function positionAndSize( If band is 0.6, the the x/y position in such case should be `(1 - band) / 2` = 0.2 */ - const defaultBandAlign = scale?.get('type') !== 'band' || !('band' in sizeMixins[vgSizeChannel]) ? 'middle' : 'top'; + const defaultBandAlign = + scale?.get('type') === 'band' && isRelativeBandSize(bandSize) && !hasSizeFromMarkOrEncoding ? 'top' : 'middle'; const vgChannel = vgAlignedPositionChannel(channel, markDef, config, defaultBandAlign); const center = vgChannel === 'xc' || vgChannel === 'yc'; diff --git a/test/compile/mark/bar.test.ts b/test/compile/mark/bar.test.ts index 25856d993c..7c7d354843 100644 --- a/test/compile/mark/bar.test.ts +++ b/test/compile/mark/bar.test.ts @@ -18,7 +18,7 @@ describe('Mark: Bar', () => { it('should draw bar, with y from zero to field value and with band value for x/width', () => { expect(props.x).toEqual({scale: 'x', field: 'Origin'}); - expect(props.width).toEqual({scale: 'x', band: 1}); + expect(props.width).toEqual({signal: `max(0.25, bandwidth('x'))`}); expect(props.y).toEqual({scale: 'y', field: 'mean_Acceleration'}); expect(props.y2).toEqual({scale: 'y', value: 0}); expect(props.height).toBeUndefined(); @@ -37,7 +37,7 @@ describe('Mark: Bar', () => { }); const props = bar.encodeEntry(model); expect(props.x).toEqual({scale: 'x', field: 'Origin', offset: {scale: 'xOffset', field: 'SubOrigin'}}); - expect(props.width).toEqual({scale: 'xOffset', band: 1}); + expect(props.width).toEqual({signal: `max(0.25, bandwidth('xOffset'))`}); expect(props.y).toEqual({scale: 'y', field: 'mean_Acceleration'}); expect(props.y2).toEqual({scale: 'y', value: 0}); expect(props.height).toBeUndefined(); @@ -75,7 +75,7 @@ describe('Mark: Bar', () => { const props = bar.encodeEntry(model); expect(props.x).toEqual({scale: 'x', field: 'Origin'}); - expect(props.width).toEqual({scale: 'x', band: 1}); + expect(props.width).toEqual({signal: `max(0.25, bandwidth('x'))`}); expect(props.y).toEqual({scale: 'y', field: 'mean_Acceleration'}); expect(props.y2).toEqual({scale: 'y', value: 0}); expect(props.height).toBeUndefined(); @@ -154,7 +154,7 @@ describe('Mark: Bar', () => { it('should draw bar from zero to field value and with band value for x/width', () => { expect(props.y).toEqual({scale: 'y', field: 'Origin'}); - expect(props.height).toEqual({scale: 'y', band: 1}); + expect(props.height).toEqual({signal: `max(0.25, bandwidth('y'))`}); expect(props.x).toEqual({scale: 'x', field: 'mean_Acceleration'}); expect(props.x2).toEqual({scale: 'x', value: 0}); expect(props.width).toBeUndefined(); @@ -174,7 +174,7 @@ describe('Mark: Bar', () => { it('should draw bar from zero to field value and with band value for x/width', () => { expect(props.y).toEqual({scale: 'y', field: 'Origin', band: 0.2}); - expect(props.height).toEqual({scale: 'y', band: 0.6}); + expect(props.height).toEqual({signal: `max(0.25, 0.6 * bandwidth('y'))`}); expect(props.x).toEqual({scale: 'x', field: 'mean_Acceleration'}); expect(props.x2).toEqual({scale: 'x', value: 0}); expect(props.width).toBeUndefined(); @@ -464,7 +464,7 @@ describe('Mark: Bar', () => { it('should draw bar with y', () => { expect(props.y).toEqual({scale: 'y', field: 'bin_maxbins_10_Horsepower_range'}); - expect(props.height).toEqual({scale: 'y', band: 1}); + expect(props.height).toEqual({signal: `max(0.25, bandwidth('y'))`}); }); }); @@ -481,7 +481,7 @@ describe('Mark: Bar', () => { it('should draw bar with y', () => { expect(props.x).toEqual({scale: 'x', field: 'bin_maxbins_10_Horsepower_range'}); - expect(props.width).toEqual({scale: 'x', band: 1}); + expect(props.width).toEqual({signal: `max(0.25, bandwidth('x'))`}); }); }); @@ -620,10 +620,7 @@ describe('Mark: Bar', () => { scale: 'x', field: 'Origin' }); - expect(props.width).toEqual({ - scale: 'x', - band: 1 - }); + expect(props.width).toEqual({signal: `max(0.25, bandwidth('x'))`}); }); }); @@ -645,10 +642,7 @@ describe('Mark: Bar', () => { scale: 'y', field: 'Origin' }); - expect(props.height).toEqual({ - scale: 'y', - band: 1 - }); + expect(props.height).toEqual({signal: `max(0.25, bandwidth('y'))`}); }); }); @@ -918,9 +912,9 @@ describe('Mark: Bar', () => { const props = bar.encodeEntry(model); expect(props.x).toEqual({scale: 'x', field: 'Origin'}); - expect(props.width).toEqual({scale: 'x', band: 1}); + expect(props.width).toEqual({signal: `max(0.25, bandwidth('x'))`}); expect(props.y).toEqual({scale: 'y', field: 'Cylinders'}); - expect(props.height).toEqual({scale: 'y', band: 1}); + expect(props.height).toEqual({signal: `max(0.25, bandwidth('y'))`}); }); }); diff --git a/test/compile/mark/rect.test.ts b/test/compile/mark/rect.test.ts index 8f9844d317..da374aec61 100644 --- a/test/compile/mark/rect.test.ts +++ b/test/compile/mark/rect.test.ts @@ -110,7 +110,7 @@ describe('Mark: Rect', () => { it('should draw bar, with y from zero to field value and x band', () => { expect(props.x).toEqual({scale: 'x', field: 'Origin'}); - expect(props.width).toEqual({scale: 'x', band: 1}); + expect(props.width).toEqual({signal: `max(0.25, bandwidth('x'))`}); expect(props.y).toEqual({scale: 'y', field: 'mean_Acceleration'}); expect(props.y2).toEqual({scale: 'y', value: 0}); expect(props.height).toBeUndefined(); @@ -170,7 +170,7 @@ describe('Mark: Rect', () => { it('should draw bar from zero to field value and y band', () => { expect(props.y).toEqual({scale: 'y', field: 'Origin'}); - expect(props.height).toEqual({scale: 'y', band: 1}); + expect(props.height).toEqual({signal: `max(0.25, bandwidth('y'))`}); expect(props.x).toEqual({scale: 'x', field: 'mean_Acceleration'}); expect(props.x2).toEqual({scale: 'x', value: 0}); expect(props.width).toBeUndefined(); @@ -192,7 +192,7 @@ describe('Mark: Rect', () => { }); const props = rect.encodeEntry(model); expect(props.y).toEqual({scale: 'y', field: 'Origin'}); - expect(props.height).toEqual({scale: 'y', band: 1}); + expect(props.height).toEqual({signal: `max(0.25, bandwidth('y'))`}); expect(props.x).toEqual({scale: 'x', field: 'mean_Acceleration'}); expect(props.x2).toEqual({scale: 'x', value: 0}); expect(props.width).toBeUndefined(); @@ -275,9 +275,9 @@ describe('Mark: Rect', () => { it('should draw rect with x and y bands', () => { expect(props.x).toEqual({scale: 'x', field: 'Cylinders'}); - expect(props.width).toEqual({scale: 'x', band: 1}); + expect(props.width).toEqual({signal: `max(0.25, bandwidth('x'))`}); expect(props.y).toEqual({scale: 'y', field: 'Origin'}); - expect(props.height).toEqual({scale: 'y', band: 1}); + expect(props.height).toEqual({signal: `max(0.25, bandwidth('y'))`}); }); }); From a0378de695c2b7e27e950e8152cb213ea5251763 Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Thu, 11 Aug 2022 18:20:01 -0400 Subject: [PATCH 20/31] docs: Explicit temporal type (#8352) Explicit temporal type Since this spec is used as the example for the [temporal encoding type](https://vega.github.io/vega-lite/docs/type.html#temporal) it's nice to have it spelled out. Co-authored-by: Dan Marshall --- examples/specs/bar_month_temporal.vl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/specs/bar_month_temporal.vl.json b/examples/specs/bar_month_temporal.vl.json index 622814fa34..7b0aae110f 100644 --- a/examples/specs/bar_month_temporal.vl.json +++ b/examples/specs/bar_month_temporal.vl.json @@ -3,7 +3,7 @@ "data": {"url": "data/seattle-weather.csv"}, "mark": "bar", "encoding": { - "x": {"timeUnit": "month", "field": "date"}, + "x": {"timeUnit": "month", "field": "date", "type": "temporal"}, "y": {"aggregate": "mean", "field": "precipitation"} } } From d2699a10dff8e6d59fee9ee219a03b0a2a89cfc7 Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Thu, 11 Aug 2022 19:21:56 -0400 Subject: [PATCH 21/31] docs: add heat lane example (#8353) * Added heat lane example * Add "as" key to aggregate op * Remove "color": "black" as it's not used * Empty-Commit for CI * chore: update TOC [CI] * chore: update examples [CI] Co-authored-by: Jon Mease Co-authored-by: Jon Mease Co-authored-by: GitHub Actions Bot --- examples/compiled/bar_heatlane.png | Bin 0 -> 10810 bytes examples/compiled/bar_heatlane.svg | 1 + examples/compiled/bar_heatlane.vg.json | 150 ++++++++++++++++++ examples/specs/bar_heatlane.vl.json | 68 ++++++++ .../bar_heatlane_normalized.vl.json | 70 ++++++++ site/_data/examples.json | 4 + 6 files changed, 293 insertions(+) create mode 100644 examples/compiled/bar_heatlane.png create mode 100644 examples/compiled/bar_heatlane.svg create mode 100644 examples/compiled/bar_heatlane.vg.json create mode 100644 examples/specs/bar_heatlane.vl.json create mode 100644 examples/specs/normalized/bar_heatlane_normalized.vl.json diff --git a/examples/compiled/bar_heatlane.png b/examples/compiled/bar_heatlane.png new file mode 100644 index 0000000000000000000000000000000000000000..779a28f8d2d0bb633bb2cb84f3c767ff823132e5 GIT binary patch literal 10810 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 b**Saq#Obn{+|e`)gCfc|)lnbhO@jUn$!x9M literal 0 HcmV?d00001 diff --git a/examples/compiled/bar_heatlane.svg b/examples/compiled/bar_heatlane.svg new file mode 100644 index 0000000000..b72c127fcb --- /dev/null +++ b/examples/compiled/bar_heatlane.svg @@ -0,0 +1 @@ +020406080100120140160180200220240Horsepower20406080100120countHeat Lane of Horsepower \ No newline at end of file diff --git a/examples/compiled/bar_heatlane.vg.json b/examples/compiled/bar_heatlane.vg.json new file mode 100644 index 0000000000..910871071b --- /dev/null +++ b/examples/compiled/bar_heatlane.vg.json @@ -0,0 +1,150 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "Heat lane chart based on https://www.smashingmagazine.com/2022/07/accessibility-first-approach-chart-visual-design/", + "background": "white", + "padding": 5, + "width": 400, + "height": 150, + "title": {"text": "Heat Lane of Horsepower", "frame": "group"}, + "style": "cell", + "data": [ + { + "name": "source_0", + "url": "data/cars.json", + "format": {"type": "json"}, + "transform": [ + { + "type": "extent", + "field": "Horsepower", + "signal": "bin_maxbins_10_Horsepower_extent" + }, + { + "type": "bin", + "field": "Horsepower", + "as": ["bin_Horsepower_start", "bin_Horsepower_end"], + "signal": "bin_maxbins_10_Horsepower_bins", + "extent": {"signal": "bin_maxbins_10_Horsepower_extent"}, + "maxbins": 10 + }, + { + "type": "aggregate", + "groupby": ["bin_Horsepower_start", "bin_Horsepower_end"], + "ops": ["count"], + "fields": [null], + "as": ["count"] + }, + { + "type": "extent", + "field": "count", + "signal": "bin_maxbins_10_count_extent" + }, + { + "type": "bin", + "field": "count", + "as": ["bin_count_start", "bin_count_end"], + "signal": "bin_maxbins_10_count_bins", + "extent": {"signal": "bin_maxbins_10_count_extent"}, + "maxbins": 10 + }, + {"type": "formula", "expr": "-datum.bin_count_end/2", "as": "y2"}, + {"type": "formula", "expr": "datum.bin_count_end/2", "as": "y"}, + { + "type": "joinaggregate", + "as": ["max_bin_count_end"], + "ops": ["max"], + "fields": ["bin_count_end"] + }, + { + "type": "filter", + "expr": "isValid(datum[\"bin_Horsepower_start\"]) && isFinite(+datum[\"bin_Horsepower_start\"])" + } + ] + } + ], + "marks": [ + { + "name": "layer_0_marks", + "type": "rect", + "style": ["bar"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "cornerRadius": {"value": 3}, + "fill": {"scale": "color", "field": "max_bin_count_end"}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"Horsepower: \" + (format(datum[\"bin_Horsepower_start\"], \"\")) + \"; y: \" + (isValid(datum[\"y\"]) ? datum[\"y\"] : \"\"+datum[\"y\"]) + \"; bin_Horsepower_end: \" + (format(datum[\"bin_Horsepower_end\"], \"\")) + \"; y2: \" + (isValid(datum[\"y2\"]) ? datum[\"y2\"] : \"\"+datum[\"y2\"]) + \"; count: \" + (isValid(datum[\"max_bin_count_end\"]) ? datum[\"max_bin_count_end\"] : \"\"+datum[\"max_bin_count_end\"])" + }, + "x": {"scale": "x", "field": "bin_Horsepower_start", "offset": 2}, + "x2": {"scale": "x", "field": "bin_Horsepower_end", "offset": -2}, + "y": {"scale": "y", "field": "y", "band": 0.5}, + "y2": {"scale": "y", "field": "y2", "band": 0.5} + } + } + }, + { + "name": "layer_1_marks", + "type": "rect", + "style": ["bar"], + "from": {"data": "source_0"}, + "encode": { + "update": { + "fill": {"scale": "color", "field": "bin_count_end"}, + "ariaRoleDescription": {"value": "bar"}, + "description": { + "signal": "\"Horsepower: \" + (format(datum[\"bin_Horsepower_start\"], \"\")) + \"; y: \" + (isValid(datum[\"y\"]) ? datum[\"y\"] : \"\"+datum[\"y\"]) + \"; bin_Horsepower_end: \" + (format(datum[\"bin_Horsepower_end\"], \"\")) + \"; y2: \" + (isValid(datum[\"y2\"]) ? datum[\"y2\"] : \"\"+datum[\"y2\"]) + \"; count: \" + (isValid(datum[\"bin_count_end\"]) ? datum[\"bin_count_end\"] : \"\"+datum[\"bin_count_end\"])" + }, + "x": {"scale": "x", "field": "bin_Horsepower_start", "offset": 2}, + "x2": {"scale": "x", "field": "bin_Horsepower_end", "offset": -2}, + "y": {"scale": "y", "field": "y", "offset": -3, "band": 0.5}, + "y2": {"scale": "y", "field": "y2", "offset": 3, "band": 0.5} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": { + "data": "source_0", + "fields": ["bin_Horsepower_start", "bin_Horsepower_end"] + }, + "range": [0, {"signal": "width"}], + "nice": true, + "zero": true + }, + { + "name": "y", + "type": "band", + "domain": {"data": "source_0", "fields": ["y", "y2"], "sort": true}, + "range": [0, {"signal": "height"}], + "paddingInner": 0.1, + "paddingOuter": 0.05 + }, + { + "name": "color", + "type": "ordinal", + "domain": { + "data": "source_0", + "fields": ["max_bin_count_end", "bin_count_end"], + "sort": true + }, + "range": {"scheme": "lighttealblue"}, + "interpolate": "hcl" + } + ], + "axes": [ + { + "scale": "x", + "orient": "bottom", + "grid": false, + "title": "Horsepower", + "labelFlush": true, + "labelOverlap": true, + "tickCount": {"signal": "ceil(width/40)"}, + "zindex": 0 + } + ], + "legends": [{"title": "count", "fill": "color", "symbolType": "square"}] +} diff --git a/examples/specs/bar_heatlane.vl.json b/examples/specs/bar_heatlane.vl.json new file mode 100644 index 0000000000..6ed9fb5a0f --- /dev/null +++ b/examples/specs/bar_heatlane.vl.json @@ -0,0 +1,68 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "Heat lane chart based on https://www.smashingmagazine.com/2022/07/accessibility-first-approach-chart-visual-design/", + "data": {"url": "data/cars.json"}, + "height": 150, + "width": 400, + "title": "Heat Lane of Horsepower", + "transform": [ + { + "bin": true, + "field": "Horsepower", + "as": ["bin_Horsepower_start", "bin_Horsepower_end"] + }, + { + "aggregate": [{"op": "count", "as": "count"}], + "groupby": ["bin_Horsepower_start", "bin_Horsepower_end"] + }, + {"bin": true, "field": "count", "as": ["bin_count_start", "bin_count_end"]}, + {"calculate": "-datum.bin_count_end/2", "as": "y2"}, + {"calculate": "datum.bin_count_end/2", "as": "y"}, + { + "joinaggregate": [ + {"field": "bin_count_end", "op": "max", "as": "max_bin_count_end"} + ] + } + ], + "encoding": { + "x": { + "field": "bin_Horsepower_start", + "type": "quantitative", + "title": "Horsepower", + "axis": {"grid": false} + }, + "x2": {"field": "bin_Horsepower_end"}, + "y": {"field": "y", "axis": null}, + "y2": {"field": "y2"} + }, + "layer": [ + { + "mark": { + "type": "bar", + "xOffset": 2, + "x2Offset": -2, + "cornerRadius": 3 + }, + "encoding": { + "color": { + "field": "max_bin_count_end", + "type": "ordinal", + "title": "count", + "scale": {"scheme": "lighttealblue"} + } + } + }, + { + "mark": { + "type": "bar", + "xOffset": 2, + "x2Offset": -2, + "yOffset": -3, + "y2Offset": 3 + }, + "encoding": { + "color": {"field": "bin_count_end", "type": "ordinal", "title": "count"} + } + } + ] +} diff --git a/examples/specs/normalized/bar_heatlane_normalized.vl.json b/examples/specs/normalized/bar_heatlane_normalized.vl.json new file mode 100644 index 0000000000..0aa01abbdf --- /dev/null +++ b/examples/specs/normalized/bar_heatlane_normalized.vl.json @@ -0,0 +1,70 @@ +{ + "$schema": "https://vega.github.io/schema/vega-lite/v5.json", + "description": "Heat lane chart based on https://www.smashingmagazine.com/2022/07/accessibility-first-approach-chart-visual-design/", + "data": {"url": "data/cars.json"}, + "height": 150, + "width": 400, + "title": "Heat Lane of Horsepower", + "layer": [ + { + "mark": {"type": "bar", "xOffset": 2, "x2Offset": -2, "cornerRadius": 3}, + "encoding": { + "x": { + "field": "bin_Horsepower_start", + "type": "quantitative", + "title": "Horsepower", + "axis": {"grid": false} + }, + "x2": {"field": "bin_Horsepower_end"}, + "y": {"field": "y", "axis": null}, + "y2": {"field": "y2"}, + "color": { + "field": "max_bin_count_end", + "type": "ordinal", + "title": "count", + "scale": {"scheme": "lighttealblue"} + } + } + }, + { + "mark": { + "type": "bar", + "xOffset": 2, + "x2Offset": -2, + "yOffset": -3, + "y2Offset": 3 + }, + "encoding": { + "x": { + "field": "bin_Horsepower_start", + "type": "quantitative", + "title": "Horsepower", + "axis": {"grid": false} + }, + "x2": {"field": "bin_Horsepower_end"}, + "y": {"field": "y", "axis": null}, + "y2": {"field": "y2"}, + "color": {"field": "bin_count_end", "type": "ordinal", "title": "count"} + } + } + ], + "transform": [ + { + "bin": true, + "field": "Horsepower", + "as": ["bin_Horsepower_start", "bin_Horsepower_end"] + }, + { + "aggregate": [{"op": "count", "as": "count"}], + "groupby": ["bin_Horsepower_start", "bin_Horsepower_end"] + }, + {"bin": true, "field": "count", "as": ["bin_count_start", "bin_count_end"]}, + {"calculate": "-datum.bin_count_end/2", "as": "y2"}, + {"calculate": "datum.bin_count_end/2", "as": "y"}, + { + "joinaggregate": [ + {"field": "bin_count_end", "op": "max", "as": "max_bin_count_end"} + ] + } + ] +} \ No newline at end of file diff --git a/site/_data/examples.json b/site/_data/examples.json index 543c8f69df..b51498fe1e 100644 --- a/site/_data/examples.json +++ b/site/_data/examples.json @@ -95,6 +95,10 @@ { "name": "bar_axis_space_saving", "title": "Bar Chart with a Spacing-Saving Y-Axis" + }, + { + "name": "bar_heatlane", + "title": "Heat Lane Chart" } ], "Histograms, Density Plots, and Dot Plots": [ From 01d2dbc3fd679bb168adfdbd6d4d8e58ba979597 Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Fri, 12 Aug 2022 10:53:43 -0400 Subject: [PATCH 22/31] ci: simplify setup and use caching (#8355) --- .github/workflows/publish-to-npm.yml | 19 ++++++++++++++----- .github/workflows/release-docs-and-schema.yml | 7 ------- .github/workflows/test.yml | 2 +- package.json | 3 ++- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/.github/workflows/publish-to-npm.yml b/.github/workflows/publish-to-npm.yml index f45a04513f..f93a134cf0 100644 --- a/.github/workflows/publish-to-npm.yml +++ b/.github/workflows/publish-to-npm.yml @@ -14,21 +14,30 @@ jobs: if: "!contains(github.event.head_commit.message, 'ci skip') && !contains(github.event.head_commit.message, 'skip ci')" name: Make a release and publish to NPM - steps: - uses: actions/checkout@v3 - - - name: Prepare repository - run: git fetch --unshallow --tags + with: + fetch-depth: 0 - uses: actions/setup-node@v3 with: registry-url: 'https://registry.npmjs.org' + cache: 'yarn' + env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Install Node dependencies run: yarn --frozen-lockfile - - run: npm run release + - name: Build + run: yarn build + + - name: Check NPM deployment + run: ./scripts/check-npm.sh + + - name: Create release + run: npm run shipit env: + NPM_TOKEN: ${{ secrets.NPM_TOKEN }} NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} GITHUB_TOKEN: ${{ secrets.GH_PAT }} diff --git a/.github/workflows/release-docs-and-schema.yml b/.github/workflows/release-docs-and-schema.yml index 10e1be7247..6888cda26b 100644 --- a/.github/workflows/release-docs-and-schema.yml +++ b/.github/workflows/release-docs-and-schema.yml @@ -39,13 +39,6 @@ jobs: env: GH_PAT: ${{ secrets.GH_PAT }} - - name: Check NPM deployment - run: ./scripts/check-npm.sh - - - uses: actions/setup-node@v3 - with: - registry-url: 'https://registry.npmjs.org' - - name: Prebuild website run: yarn predeploy:site diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5c1f1946f9..0abc5d3167 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,7 +7,7 @@ on: pull_request: jobs: - test-matrix: + test: name: Node runs-on: ubuntu-latest diff --git a/package.json b/package.json index a684dd3aa6..4327d485de 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,8 @@ "watch:site": "yarn build:site -w", "watch:test": "yarn jest --watch test/", "watch:test:runtime": "NODE_OPTIONS=--experimental-vm-modules TZ=America/Los_Angeles npx jest --watch test-runtime/ --config test-runtime/jest-config.json", - "release": "yarn run prebuild && yarn build && auto shipit" + "release": "yarn run prebuild && yarn build && yarn shipit", + "shipit": "auto shipit" }, "repository": { "type": "git", From d623a2f56fc7ee13eab52ddc0438ccdb87bea42b Mon Sep 17 00:00:00 2001 From: fish Date: Fri, 12 Aug 2022 22:59:20 +0800 Subject: [PATCH 23/31] docs: add MarkText to Vega-Lite ecosystem (#8283) --- site/ecosystem.md | 1 + 1 file changed, 1 insertion(+) diff --git a/site/ecosystem.md b/site/ecosystem.md index ef9e3b43ca..a9ad55ac29 100644 --- a/site/ecosystem.md +++ b/site/ecosystem.md @@ -101,6 +101,7 @@ We mark featured plugins and tools with a Date: Mon, 15 Aug 2022 07:02:04 +0000 Subject: [PATCH 24/31] chore(deps-dev): bump @typescript-eslint/parser from 5.32.0 to 5.33.0 (#8361) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.32.0 to 5.33.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.33.0/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 46 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 76840b35ac..54c8130a4a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2106,13 +2106,13 @@ tsutils "^3.21.0" "@typescript-eslint/parser@^5.14.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.32.0.tgz#1de243443bc6186fb153b9e395b842e46877ca5d" - integrity sha512-IxRtsehdGV9GFQ35IGm5oKKR2OGcazUoiNBxhRV160iF9FoyuXxjY+rIqs1gfnd+4eL98OjeGnMpE7RF/NBb3A== + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.33.0.tgz#26ec3235b74f0667414613727cb98f9b69dc5383" + integrity sha512-cgM5cJrWmrDV2KpvlcSkelTBASAs1mgqq+IUGKJvFxWrapHpaRy5EXPQz9YaKF3nZ8KY18ILTiVpUtbIac86/w== dependencies: - "@typescript-eslint/scope-manager" "5.32.0" - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/typescript-estree" "5.32.0" + "@typescript-eslint/scope-manager" "5.33.0" + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/typescript-estree" "5.33.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.32.0": @@ -2123,6 +2123,14 @@ "@typescript-eslint/types" "5.32.0" "@typescript-eslint/visitor-keys" "5.32.0" +"@typescript-eslint/scope-manager@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz#509d7fa540a2c58f66bdcfcf278a3fa79002e18d" + integrity sha512-/Jta8yMNpXYpRDl8EwF/M8It2A9sFJTubDo0ATZefGXmOqlaBffEw0ZbkbQ7TNDK6q55NPHFshGBPAZvZkE8Pw== + dependencies: + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/visitor-keys" "5.33.0" + "@typescript-eslint/type-utils@5.32.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz#45a14506fe3fb908600b4cef2f70778f7b5cdc79" @@ -2137,6 +2145,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8" integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ== +"@typescript-eslint/types@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.0.tgz#d41c584831805554b063791338b0220b613a275b" + integrity sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw== + "@typescript-eslint/typescript-estree@5.32.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12" @@ -2150,6 +2163,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz#02d9c9ade6f4897c09e3508c27de53ad6bfa54cf" + integrity sha512-tqq3MRLlggkJKJUrzM6wltk8NckKyyorCSGMq4eVkyL5sDYzJJcMgZATqmF8fLdsWrW7OjjIZ1m9v81vKcaqwQ== + dependencies: + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/visitor-keys" "5.33.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.32.0", "@typescript-eslint/utils@^5.10.0": version "5.32.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.32.0.tgz#eccb6b672b94516f1afc6508d05173c45924840c" @@ -2170,6 +2196,14 @@ "@typescript-eslint/types" "5.32.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz#fbcbb074e460c11046e067bc3384b5d66b555484" + integrity sha512-/XsqCzD4t+Y9p5wd9HZiptuGKBlaZO5showwqODii5C0nZawxWLF+Q6k5wYHBrQv96h6GYKyqqMHCSTqta8Kiw== + dependencies: + "@typescript-eslint/types" "5.33.0" + eslint-visitor-keys "^3.3.0" + "@zeit/schemas@2.21.0": version "2.21.0" resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.21.0.tgz#cd242c6551ffb51830049d68d9743ab65b45b820" From f3c001dbde258339a4a3122bbed34fc429dbcdcb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:02:08 +0000 Subject: [PATCH 25/31] chore(deps-dev): bump rollup from 2.77.2 to 2.78.0 (#8360) Bumps [rollup](https://github.com/rollup/rollup) from 2.77.2 to 2.78.0. - [Release notes](https://github.com/rollup/rollup/releases) - [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md) - [Commits](https://github.com/rollup/rollup/compare/v2.77.2...v2.78.0) --- updated-dependencies: - dependency-name: rollup dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 54c8130a4a..f693cf46b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6993,9 +6993,9 @@ rollup-plugin-terser@^7.0.2: terser "^5.0.0" rollup@^2.70.1: - version "2.77.2" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" - integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== + version "2.78.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.0.tgz#00995deae70c0f712ea79ad904d5f6b033209d9e" + integrity sha512-4+YfbQC9QEVvKTanHhIAFVUFSRsezvQF8vFOJwtGfb9Bb+r014S+qryr9PSmw8x6sMnPkmFBGAvIFVQxvJxjtg== optionalDependencies: fsevents "~2.3.2" From 29248f6de40caa10eb0ad6b5296e0c90724d4a03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:02:12 +0000 Subject: [PATCH 26/31] chore(deps-dev): bump eslint from 8.21.0 to 8.22.0 (#8359) Bumps [eslint](https://github.com/eslint/eslint) from 8.21.0 to 8.22.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.21.0...v8.22.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f693cf46b2..cffed5d0d4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4057,9 +4057,9 @@ eslint-visitor-keys@^3.3.0: integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== eslint@^8.11.0: - version "8.21.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.21.0.tgz#1940a68d7e0573cef6f50037addee295ff9be9ef" - integrity sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA== + version "8.22.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.22.0.tgz#78fcb044196dfa7eef30a9d65944f6f980402c48" + integrity sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.10.4" From fec28837e92167f4caafba7ff36d6db151b413f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 07:02:16 +0000 Subject: [PATCH 27/31] chore(deps-dev): bump eslint-plugin-jest from 26.8.0 to 26.8.2 (#8358) Bumps [eslint-plugin-jest](https://github.com/jest-community/eslint-plugin-jest) from 26.8.0 to 26.8.2. - [Release notes](https://github.com/jest-community/eslint-plugin-jest/releases) - [Changelog](https://github.com/jest-community/eslint-plugin-jest/blob/main/CHANGELOG.md) - [Commits](https://github.com/jest-community/eslint-plugin-jest/compare/v26.8.0...v26.8.2) --- updated-dependencies: - dependency-name: eslint-plugin-jest dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index cffed5d0d4..c52d7ba8a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4010,9 +4010,9 @@ eslint-config-prettier@^8.5.0: integrity sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q== eslint-plugin-jest@^26.1.1: - version "26.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.8.0.tgz#32471a6af11dbcb7d0ccf83e8edc83d256fd34a3" - integrity sha512-IyGhk+PpDgIA99OBPHo+l2aTtt8yAeB1IgPwXOQZSzi8ag/t1MsLZBN2MKL1sj6ahlkaxbkhlm7ll+NPcMcjaQ== + version "26.8.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.8.2.tgz#42a1248a5ade2bc589eb0f9c4e0608dd89b18cf3" + integrity sha512-67oh0FKaku9y48OpLzL3uK9ckrgLb83Sp5gxxTbtOGDw9lq6D8jw/Psj/9CipkbK406I2M7mvx1q+pv/MdbvxA== dependencies: "@typescript-eslint/utils" "^5.10.0" From c91b7c4dd9b28f1346972e86082cd1eca5fbd128 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Aug 2022 08:02:05 +0000 Subject: [PATCH 28/31] chore(deps-dev): bump @typescript-eslint/eslint-plugin from 5.32.0 to 5.33.0 (#8357) chore(deps-dev): bump @typescript-eslint/eslint-plugin Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 5.32.0 to 5.33.0. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.33.0/packages/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 70 ++++++++++++++----------------------------------------- 1 file changed, 18 insertions(+), 52 deletions(-) diff --git a/yarn.lock b/yarn.lock index c52d7ba8a7..77d74c7ae9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2091,13 +2091,13 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.14.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.32.0.tgz#e27e38cffa4a61226327c874a7be965e9a861624" - integrity sha512-CHLuz5Uz7bHP2WgVlvoZGhf0BvFakBJKAD/43Ty0emn4wXWv5k01ND0C0fHcl/Im8Td2y/7h44E9pca9qAu2ew== + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.0.tgz#059798888720ec52ffa96c5f868e31a8f70fa3ec" + integrity sha512-jHvZNSW2WZ31OPJ3enhLrEKvAZNyAFWZ6rx9tUwaessTc4sx9KmgMNhVcqVAl1ETnT5rU5fpXTLmY9YvC1DCNg== dependencies: - "@typescript-eslint/scope-manager" "5.32.0" - "@typescript-eslint/type-utils" "5.32.0" - "@typescript-eslint/utils" "5.32.0" + "@typescript-eslint/scope-manager" "5.33.0" + "@typescript-eslint/type-utils" "5.33.0" + "@typescript-eslint/utils" "5.33.0" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -2115,14 +2115,6 @@ "@typescript-eslint/typescript-estree" "5.33.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.32.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.32.0.tgz#763386e963a8def470580cc36cf9228864190b95" - integrity sha512-KyAE+tUON0D7tNz92p1uetRqVJiiAkeluvwvZOqBmW9z2XApmk5WSMV9FrzOroAcVxJZB3GfUwVKr98Dr/OjOg== - dependencies: - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/visitor-keys" "5.32.0" - "@typescript-eslint/scope-manager@5.33.0": version "5.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.33.0.tgz#509d7fa540a2c58f66bdcfcf278a3fa79002e18d" @@ -2131,38 +2123,20 @@ "@typescript-eslint/types" "5.33.0" "@typescript-eslint/visitor-keys" "5.33.0" -"@typescript-eslint/type-utils@5.32.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.32.0.tgz#45a14506fe3fb908600b4cef2f70778f7b5cdc79" - integrity sha512-0gSsIhFDduBz3QcHJIp3qRCvVYbqzHg8D6bHFsDMrm0rURYDj+skBK2zmYebdCp+4nrd9VWd13egvhYFJj/wZg== +"@typescript-eslint/type-utils@5.33.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.33.0.tgz#92ad1fba973c078d23767ce2d8d5a601baaa9338" + integrity sha512-2zB8uEn7hEH2pBeyk3NpzX1p3lF9dKrEbnXq1F7YkpZ6hlyqb2yZujqgRGqXgRBTHWIUG3NGx/WeZk224UKlIA== dependencies: - "@typescript-eslint/utils" "5.32.0" + "@typescript-eslint/utils" "5.33.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.32.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.32.0.tgz#484273021eeeae87ddb288f39586ef5efeb6dcd8" - integrity sha512-EBUKs68DOcT/EjGfzywp+f8wG9Zw6gj6BjWu7KV/IYllqKJFPlZlLSYw/PTvVyiRw50t6wVbgv4p9uE2h6sZrQ== - "@typescript-eslint/types@5.33.0": version "5.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.33.0.tgz#d41c584831805554b063791338b0220b613a275b" integrity sha512-nIMt96JngB4MYFYXpZ/3ZNU4GWPNdBbcB5w2rDOCpXOVUkhtNlG2mmm8uXhubhidRZdwMaMBap7Uk8SZMU/ppw== -"@typescript-eslint/typescript-estree@5.32.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.32.0.tgz#282943f34babf07a4afa7b0ff347a8e7b6030d12" - integrity sha512-ZVAUkvPk3ITGtCLU5J4atCw9RTxK+SRc6hXqLtllC2sGSeMFWN+YwbiJR9CFrSFJ3w4SJfcWtDwNb/DmUIHdhg== - dependencies: - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/visitor-keys" "5.32.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.33.0": version "5.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.0.tgz#02d9c9ade6f4897c09e3508c27de53ad6bfa54cf" @@ -2176,26 +2150,18 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.32.0", "@typescript-eslint/utils@^5.10.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.32.0.tgz#eccb6b672b94516f1afc6508d05173c45924840c" - integrity sha512-W7lYIAI5Zlc5K082dGR27Fczjb3Q57ECcXefKU/f0ajM5ToM0P+N9NmJWip8GmGu/g6QISNT+K6KYB+iSHjXCQ== +"@typescript-eslint/utils@5.33.0", "@typescript-eslint/utils@^5.10.0": + version "5.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.33.0.tgz#46797461ce3146e21c095d79518cc0f8ec574038" + integrity sha512-JxOAnXt9oZjXLIiXb5ZIcZXiwVHCkqZgof0O8KPgz7C7y0HS42gi75PdPlqh1Tf109M0fyUw45Ao6JLo7S5AHw== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.32.0" - "@typescript-eslint/types" "5.32.0" - "@typescript-eslint/typescript-estree" "5.32.0" + "@typescript-eslint/scope-manager" "5.33.0" + "@typescript-eslint/types" "5.33.0" + "@typescript-eslint/typescript-estree" "5.33.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.32.0": - version "5.32.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.32.0.tgz#b9715d0b11fdb5dd10fd0c42ff13987470525394" - integrity sha512-S54xOHZgfThiZ38/ZGTgB2rqx51CMJ5MCfVT2IplK4Q7hgzGfe0nLzLCcenDnc/cSjP568hdeKfeDcBgqNHD/g== - dependencies: - "@typescript-eslint/types" "5.32.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.33.0": version "5.33.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.0.tgz#fbcbb074e460c11046e067bc3384b5d66b555484" From af53b74d9f30f43dbf282e212e8a404a31e2afb8 Mon Sep 17 00:00:00 2001 From: Dominik Moritz Date: Mon, 15 Aug 2022 14:59:59 -0400 Subject: [PATCH 29/31] ci: split scripts and refine triggers (#8356) * ci: split scripts and refine triggers * ci: run on pr * Use original branch for check jobs * Manually trigger merge * use default refs * Add back branch --- .github/workflows/check-toc.yml | 53 ++++++++++++++++++ .github/workflows/check.yml | 56 ++----------------- .github/workflows/merge-dependabot.yml | 3 + .github/workflows/publish-to-npm.yml | 2 + .github/workflows/release-docs-and-schema.yml | 4 +- .github/workflows/test-docs.yml | 31 ++++++++++ .github/workflows/test.yml | 24 +------- scripts/check-and-commit-toc.sh | 3 - scripts/check-and-commit.sh | 3 - 9 files changed, 100 insertions(+), 79 deletions(-) create mode 100644 .github/workflows/check-toc.yml create mode 100644 .github/workflows/test-docs.yml diff --git a/.github/workflows/check-toc.yml b/.github/workflows/check-toc.yml new file mode 100644 index 0000000000..21d4cb2630 --- /dev/null +++ b/.github/workflows/check-toc.yml @@ -0,0 +1,53 @@ +name: Check + +on: + workflow_dispatch: + pull_request: + paths: + - 'site/**' + - 'scripts/**' + +jobs: + toc: + name: TOC + if: "!contains(github.event.head_commit.message, '[ci skip]')" + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + token: ${{ secrets.GH_PAT || github.token }} + ref: ${{ github.head_ref }} + + - name: Setup Node + uses: actions/setup-node@v3 + with: + cache: 'yarn' + + - name: Install Node dependencies + run: yarn --frozen-lockfile + + - name: Setup Ruby + uses: actions/setup-ruby@v1 + with: + ruby-version: '2.x' + + - name: Setup data + run: yarn data + + - name: Build Jekyll + run: | + gem install bundler + pushd site + bundle install + bundle exec jekyll build -q + popd + + - name: Build TOC + run: scripts/generate-toc + + - name: Setup Git remote + run: scripts/setup-git-ci.sh + + - name: Check and Commit + run: scripts/check-and-commit-toc.sh diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 90cee05c97..93af350d60 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,9 +1,8 @@ name: Check on: - push: - branches: - - '**' + workflow_dispatch: + pull_request: jobs: check: @@ -14,6 +13,7 @@ jobs: - uses: actions/checkout@v3 with: token: ${{ secrets.GH_PAT || github.token }} + ref: ${{ github.head_ref }} - name: Setup Node uses: actions/setup-node@v3 @@ -35,60 +35,16 @@ jobs: sudo mv parallel sem /usr/local/bin - name: Format - if: github.ref != 'refs/heads/next' run: yarn format - name: Build Schema run: yarn schema - name: Check Schema - run: ./scripts/check-schema.sh + run: scripts/check-schema.sh - name: Setup Git remote - run: ./scripts/setup-git-ci.sh + run: scripts/setup-git-ci.sh - name: Check and Commit - run: ./scripts/check-and-commit.sh - - toc: - name: TOC - if: "!contains(github.event.head_commit.message, '[ci skip]')" - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - with: - token: ${{ secrets.GH_PAT || github.token }} - - - name: Setup Node - uses: actions/setup-node@v3 - with: - cache: 'yarn' - - - name: Install Node dependencies - run: yarn --frozen-lockfile - - - name: Setup Ruby - uses: actions/setup-ruby@v1 - with: - ruby-version: '2.x' - - - name: Setup data - run: yarn data - - - name: Build Jekyll - run: | - gem install bundler - pushd site - bundle install - bundle exec jekyll build -q - popd - - - name: Build TOC - run: scripts/generate-toc - - - name: Setup Git remote - run: ./scripts/setup-git-ci.sh - - - name: Check and Commit - run: ./scripts/check-and-commit-toc.sh + run: scripts/check-and-commit.sh diff --git a/.github/workflows/merge-dependabot.yml b/.github/workflows/merge-dependabot.yml index 4fb46f6c1c..631b708ab4 100644 --- a/.github/workflows/merge-dependabot.yml +++ b/.github/workflows/merge-dependabot.yml @@ -1,7 +1,10 @@ name: Auto-merge Dependabot PRs + on: + workflow_dispatch: schedule: - cron: '0 * * * *' + jobs: auto_merge: name: Auto-merge Dependabot PRs diff --git a/.github/workflows/publish-to-npm.yml b/.github/workflows/publish-to-npm.yml index f93a134cf0..dad6b24aa6 100644 --- a/.github/workflows/publish-to-npm.yml +++ b/.github/workflows/publish-to-npm.yml @@ -7,6 +7,8 @@ on: - 'dependabot/**' # documentation site should not trigger releases - 'gh-pages' + paths-ignore: + - 'site/**' jobs: publish: diff --git a/.github/workflows/release-docs-and-schema.yml b/.github/workflows/release-docs-and-schema.yml index 6888cda26b..8514797e4a 100644 --- a/.github/workflows/release-docs-and-schema.yml +++ b/.github/workflows/release-docs-and-schema.yml @@ -27,7 +27,7 @@ jobs: run: yarn build - name: Setup Git remote - run: ./scripts/setup-git-ci.sh + run: scripts/setup-git-ci.sh env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -49,4 +49,4 @@ jobs: site-directory: 'site/' - name: Publish schema - run: ./scripts/deploy-schema.sh + run: scripts/deploy-schema.sh diff --git a/.github/workflows/test-docs.yml b/.github/workflows/test-docs.yml new file mode 100644 index 0000000000..a581ad046f --- /dev/null +++ b/.github/workflows/test-docs.yml @@ -0,0 +1,31 @@ +name: Test + +on: + workflow_dispatch: + pull_request: + paths: + - 'site/**' + - 'yarn.lock' + - '**prettier**' + +jobs: + build-site: + name: Build Site + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Setup Node + uses: actions/setup-node@v3 + with: + cache: 'yarn' + + - name: Install Node dependencies + run: yarn --frozen-lockfile + + - name: Lint + run: yarn prettierbase --check + + - name: Build + run: yarn build:site diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0abc5d3167..bad02e35dd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,10 +1,10 @@ name: Test on: - push: - branches: - - next + workflow_dispatch: pull_request: + paths-ignore: + - 'site/**' jobs: test: @@ -31,24 +31,6 @@ jobs: - name: Build run: yarn build - build-site: - name: Build Site - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - name: Setup Node - uses: actions/setup-node@v3 - with: - cache: 'yarn' - - - name: Install Node dependencies - run: yarn --frozen-lockfile - - - name: Build - run: yarn build:site - runtime-lint-coverage: name: Runtime, Linting, and Coverage runs-on: ubuntu-latest diff --git a/scripts/check-and-commit-toc.sh b/scripts/check-and-commit-toc.sh index 17a4fe988a..f853cb8a69 100755 --- a/scripts/check-and-commit-toc.sh +++ b/scripts/check-and-commit-toc.sh @@ -3,9 +3,6 @@ set -euo pipefail GIT_BRANCH="${GITHUB_REF/refs\/heads\//}" -git checkout $GIT_BRANCH - -echo "On branch $GIT_BRANCH." # Only push on human pull request branches. Exclude release, prerelease, and bot branches. if [ "$GIT_BRANCH" != "stable" ] && [ "$GIT_BRANCH" != "next" ] && [[ "$GIT_BRANCH" != dependabot/* ]]; then diff --git a/scripts/check-and-commit.sh b/scripts/check-and-commit.sh index 2212938cd4..8f2e33b213 100755 --- a/scripts/check-and-commit.sh +++ b/scripts/check-and-commit.sh @@ -3,9 +3,6 @@ set -euo pipefail GIT_BRANCH="${GITHUB_REF/refs\/heads\//}" -git checkout $GIT_BRANCH - -echo "On branch $GIT_BRANCH." # Only push on human pull request branches. Exclude release, prerelease, and bot branches. if [ "$GIT_BRANCH" != "stable" ] && [ "$GIT_BRANCH" != "next" ] && [[ "$GIT_BRANCH" != dependabot/* ]]; then From cf0e97bea71872a28cae9b81a2e0f3468c0a3f1c Mon Sep 17 00:00:00 2001 From: Kanit Wongsuphasawat Date: Mon, 15 Aug 2022 12:14:20 -0700 Subject: [PATCH 30/31] Update CONTRIBUTING.md --- CONTRIBUTING.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0c0fa742ca..11409a91d8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -199,7 +199,8 @@ Publishing is handled by a 2-branch [pre-release process](https://intuit.github. - PRs made into the default branch are auto-deployed to the `next` pre-release tag on NPM. The result can be installed with `npm install vega-lite/@next`. - When merging into `next`, please use the `squash and merge` strategy. - To release a new stable version, open a PR from `next` into `stable` using this [compare link](https://github.com/vega/vega-lite/compare/stable...next). - - When merging from `next` into `stable`, please use the `create a merge commit` strategy. + - When merging from `next` into `stable`, please use the `create a merge commit` strategy. + - After the release note is generated (from commits), please take a look to clean up so the log is readable to the community. ## Suggested Programming Environment. From 1102bf3bfba79c6d8cd6cd9712cc446ca3b143a1 Mon Sep 17 00:00:00 2001 From: Lukas Hermann Date: Mon, 15 Aug 2022 13:24:19 -0700 Subject: [PATCH 31/31] ci: Use Pull Request Head Ref (#8363) * ci: use pull request head ref * chore: lint --- .github/workflows/check-toc.yml | 2 +- .github/workflows/check.yml | 2 +- CONTRIBUTING.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check-toc.yml b/.github/workflows/check-toc.yml index 21d4cb2630..ad50112df3 100644 --- a/.github/workflows/check-toc.yml +++ b/.github/workflows/check-toc.yml @@ -17,7 +17,7 @@ jobs: - uses: actions/checkout@v3 with: token: ${{ secrets.GH_PAT || github.token }} - ref: ${{ github.head_ref }} + ref: ${{ github.event.pull_request.head.ref }} - name: Setup Node uses: actions/setup-node@v3 diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 93af350d60..37867e6aad 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v3 with: token: ${{ secrets.GH_PAT || github.token }} - ref: ${{ github.head_ref }} + ref: ${{ github.event.pull_request.head.ref }} - name: Setup Node uses: actions/setup-node@v3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 11409a91d8..6114a2cde7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -199,7 +199,7 @@ Publishing is handled by a 2-branch [pre-release process](https://intuit.github. - PRs made into the default branch are auto-deployed to the `next` pre-release tag on NPM. The result can be installed with `npm install vega-lite/@next`. - When merging into `next`, please use the `squash and merge` strategy. - To release a new stable version, open a PR from `next` into `stable` using this [compare link](https://github.com/vega/vega-lite/compare/stable...next). - - When merging from `next` into `stable`, please use the `create a merge commit` strategy. + - When merging from `next` into `stable`, please use the `create a merge commit` strategy. - After the release note is generated (from commits), please take a look to clean up so the log is readable to the community. ## Suggested Programming Environment.