diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e1534227c7..8588740474 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -41,10 +41,12 @@ body: attributes: label: Link to Minimal Reproduction description: | - If the reproduction does not need a build setup, please provide a link to [JSFiddle](https://jsfiddle.net/plainheart/e46ozpqj/7/), [JSBin](https://jsbin.com/) or [CodePen](https://codepen.io/Ovilia/pen/dyYWXWM). If it requires a build setup, you can use [CodeSandbox](https://codesandbox.io/s/echarts-basic-example-template-mpfz1s) or provide a GitHub repo. + If the reproduction does not need a build setup, please provide a link to [Official Editor](https://echarts.apache.org/examples/editor.html), [JSFiddle](https://jsfiddle.net/plainheart/e46ozpqj/7/), [JSBin](https://jsbin.com/) or [CodePen](https://codepen.io/Ovilia/pen/dyYWXWM). If it requires a build setup, you can use [CodeSandbox](https://codesandbox.io/s/echarts-basic-example-template-mpfz1s) or provide a GitHub repo. + The reproduction should be **minimal** - i.e. it should contain only the bare minimum amount of code needed to show the bug. + Please do not just fill in a random link. The issue will be closed if no valid reproduction is provided. [Why?](https://antfu.me/posts/why-reproductions-are-required) validations: - required: false + required: true - type: textarea attributes: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 23981bcde3..12e06b1c1f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - name: Fetch commit count @@ -58,7 +58,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 diff --git a/.github/workflows/nightly-next.yml b/.github/workflows/nightly-next.yml index c2a6dd870f..bf40c6e71e 100644 --- a/.github/workflows/nightly-next.yml +++ b/.github/workflows/nightly-next.yml @@ -15,7 +15,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -26,6 +26,8 @@ jobs: uses: actions/setup-node@v3 with: registry-url: https://registry.npmjs.org/ + node-version: ${{ matrix.node-version }} + - name: Setup and publish nightly run: | node build/nightly/prepare.js --next diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index ddbcd98412..085b80d306 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -15,14 +15,17 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 + - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: registry-url: https://registry.npmjs.org/ + node-version: ${{ matrix.node-version }} + - name: Setup and publish nightly run: | node build/nightly/prepare.js diff --git a/.github/workflows/source-release.yml b/.github/workflows/source-release.yml index 87b85d5ccb..b6d0e57e4b 100644 --- a/.github/workflows/source-release.yml +++ b/.github/workflows/source-release.yml @@ -11,7 +11,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -56,7 +56,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - uses: actions/checkout@v3 @@ -109,7 +109,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [18.x] steps: - name: Use Node.js ${{ matrix.node-version }} diff --git a/build/build.js b/build/build.js index 176449fb8b..d6e9cc7a44 100755 --- a/build/build.js +++ b/build/build.js @@ -149,11 +149,11 @@ function validateIO(input, output) { */ async function build(configs) { console.log(chalk.yellow(` - NOTICE: If you are using 'npm run build'. Run 'npm run prepublish' before build !!! + NOTICE: If you are using 'npm run build'. Run 'npm run prepare' before build !!! `)); console.log(chalk.yellow(` - NOTICE: If you are using syslink on zrender. Run 'npm run prepublish' in zrender first !! + NOTICE: If you are using syslink on zrender. Run 'npm run prepare' in zrender first !! `)); for (let singleConfig of configs) { diff --git a/package-lock.json b/package-lock.json index ce7ad04193..4be3571afc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,9 +35,9 @@ "fs-extra": "^10.0.0", "glob": "7.0.0", "globby": "11.0.0", - "husky": "^4.2.5", + "husky": "^8.0.3", "jest": "^26.6.1", - "jest-canvas-mock": "^2.2.0", + "jest-canvas-mock": "^2.5.0", "jshint": "2.13.5", "magic-string": "^0.25.7", "open": "6.4.0", @@ -2019,12 +2019,6 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, "node_modules/@types/parsimmon": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@types/parsimmon/-/parsimmon-1.10.4.tgz", @@ -3925,12 +3919,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, "node_modules/component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -4038,22 +4026,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -6583,197 +6555,18 @@ } }, "node_modules/husky": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", - "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", "dev": true, - "hasInstallScript": true, - "dependencies": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^4.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, "bin": { - "husky-run": "bin/run.js", - "husky-upgrade": "lib/upgrader/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/husky" - } - }, - "node_modules/husky/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/husky/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/husky/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/husky/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/husky/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/husky/node_modules/find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", - "dev": true, - "dependencies": { - "semver-regex": "^3.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/husky/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/husky/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/husky/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/husky/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" + "husky": "lib/bin.js" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/husky/node_modules/pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/husky/node_modules/semver-regex": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.3.tgz", - "integrity": "sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/husky/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/typicode" } }, "node_modules/iconv-lite": { @@ -7419,9 +7212,9 @@ } }, "node_modules/jest-canvas-mock": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.3.0.tgz", - "integrity": "sha512-3TMyR66VG2MzAW8Negzec03bbcIjVJMfGNvKzrEnbws1CYKqMNkvIJ8LbkoGYfp42tKqDmhIpQq3v+MNLW2A2w==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.0.tgz", + "integrity": "sha512-s2bmY2f22WPMzhB2YA93kiyf7CAfWAnV/sFfY9s48IVOrGmwui1eSFluDPesq1M+7tSC1hJAit6mzO0ZNXvVBA==", "dev": true, "dependencies": { "cssfontparser": "^1.2.1", @@ -10013,15 +9806,6 @@ "node": ">=8" } }, - "node_modules/opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true, - "bin": { - "opencollective-postinstall": "index.js" - } - }, "node_modules/optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -10397,15 +10181,6 @@ "node": ">=8" } }, - "node_modules/please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "dependencies": { - "semver-compare": "^1.0.0" - } - }, "node_modules/pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -11171,12 +10946,6 @@ "semver": "bin/semver.js" } }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, "node_modules/semver-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", @@ -13009,12 +12778,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "node_modules/which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -13197,15 +12960,6 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, - "node_modules/yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", @@ -13301,18 +13055,6 @@ "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", "dev": true }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/z-schema": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.4.tgz", @@ -15038,12 +14780,6 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, "@types/parsimmon": { "version": "1.10.4", "resolved": "https://registry.npmjs.org/@types/parsimmon/-/parsimmon-1.10.4.tgz", @@ -16558,12 +16294,6 @@ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", - "dev": true - }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -16659,19 +16389,6 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", @@ -18722,134 +18439,10 @@ "dev": true }, "husky": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.3.8.tgz", - "integrity": "sha512-LCqqsB0PzJQ/AlCgfrfzRe3e3+NvmefAdKQhRYpxS4u6clblBoDdzzvHi8fmxKRzvMxPY/1WZWzomPZww0Anow==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "compare-versions": "^3.6.0", - "cosmiconfig": "^7.0.0", - "find-versions": "^4.0.0", - "opencollective-postinstall": "^2.0.2", - "pkg-dir": "^5.0.0", - "please-upgrade-node": "^3.2.0", - "slash": "^3.0.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "find-versions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", - "dev": true, - "requires": { - "semver-regex": "^3.1.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, - "semver-regex": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.3.tgz", - "integrity": "sha512-Aqi54Mk9uYTjVexLnR67rTyBusmwd04cLkHy9hNvk3+G3nT2Oyg7E0l4XVbOaNwIvQ3hHeYxGcyEy+mKreyBFQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true }, "iconv-lite": { "version": "0.4.24", @@ -19442,9 +19035,9 @@ } }, "jest-canvas-mock": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.3.0.tgz", - "integrity": "sha512-3TMyR66VG2MzAW8Negzec03bbcIjVJMfGNvKzrEnbws1CYKqMNkvIJ8LbkoGYfp42tKqDmhIpQq3v+MNLW2A2w==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.0.tgz", + "integrity": "sha512-s2bmY2f22WPMzhB2YA93kiyf7CAfWAnV/sFfY9s48IVOrGmwui1eSFluDPesq1M+7tSC1hJAit6mzO0ZNXvVBA==", "dev": true, "requires": { "cssfontparser": "^1.2.1", @@ -21456,12 +21049,6 @@ "is-wsl": "^1.1.0" } }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", - "dev": true - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -21747,15 +21334,6 @@ "find-up": "^4.0.0" } }, - "please-upgrade-node": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", - "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", - "dev": true, - "requires": { - "semver-compare": "^1.0.0" - } - }, "pngjs": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", @@ -22377,12 +21955,6 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", - "dev": true - }, "semver-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-2.0.0.tgz", @@ -23895,12 +23467,6 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true - }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -24041,12 +23607,6 @@ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, - "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", - "dev": true - }, "yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", @@ -24126,12 +23686,6 @@ "integrity": "sha512-8HFIh676uyGYP6wP13R/j6OJ/1HwJ46snpvzE7aHAN3Ryqh2yX6Xox2B4CUmTwwOIzlG3Bs7ocsP5dZH/R1Qbg==", "dev": true }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, "z-schema": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.4.tgz", diff --git a/package.json b/package.json index f082f2b705..b2ea0f9636 100644 --- a/package.json +++ b/package.json @@ -89,9 +89,9 @@ "fs-extra": "^10.0.0", "glob": "7.0.0", "globby": "11.0.0", - "husky": "^4.2.5", + "husky": "^8.0.3", "jest": "^26.6.1", - "jest-canvas-mock": "^2.2.0", + "jest-canvas-mock": "^2.5.0", "jshint": "2.13.5", "magic-string": "^0.25.7", "open": "6.4.0", diff --git a/src/chart/helper/Line.ts b/src/chart/helper/Line.ts index 961502bda2..bbfb774ba5 100644 --- a/src/chart/helper/Line.ts +++ b/src/chart/helper/Line.ts @@ -64,6 +64,22 @@ interface InnerLineLabel extends LineLabel { function makeSymbolTypeKey(symbolCategory: 'fromSymbol' | 'toSymbol') { return '_' + symbolCategory + 'Type' as '_fromSymbolType' | '_toSymbolType'; } +function makeSymbolTypeValue(name: 'fromSymbol' | 'toSymbol', lineData: LineList, idx: number) { + const symbolType = lineData.getItemVisual(idx, name); + if (!symbolType || symbolType === 'none') { + return symbolType; + } + const symbolSize = lineData.getItemVisual(idx, name + 'Size' as 'fromSymbolSize' | 'toSymbolSize'); + const symbolRotate = lineData.getItemVisual(idx, name + 'Rotate' as 'fromSymbolRotate' | 'toSymbolRotate'); + const symbolOffset = lineData.getItemVisual(idx, name + 'Offset' as 'fromSymbolOffset' | 'toSymbolOffset'); + const symbolKeepAspect = lineData.getItemVisual(idx, + name + 'KeepAspect' as 'fromSymbolKeepAspect' | 'toSymbolKeepAspect'); + const symbolSizeArr = symbolUtil.normalizeSymbolSize(symbolSize); + + const symbolOffsetArr = symbolUtil.normalizeSymbolOffset(symbolOffset || 0, symbolSizeArr); + + return symbolType + symbolSizeArr + symbolOffsetArr + (symbolRotate || '') + (symbolKeepAspect || ''); +} /** * @inner @@ -164,7 +180,7 @@ class Line extends graphic.Group { // it will be updated after line#update. // Or symbol position and rotation update in line#beforeUpdate will be one frame slow this.add(symbol); - this[makeSymbolTypeKey(symbolCategory)] = lineData.getItemVisual(idx, symbolCategory); + this[makeSymbolTypeKey(symbolCategory)] = makeSymbolTypeValue(symbolCategory, lineData, idx); }, this); this._updateCommonStl(lineData, idx, seriesScope); @@ -184,7 +200,7 @@ class Line extends graphic.Group { graphic.updateProps(line, target, seriesModel, idx); each(SYMBOL_CATEGORIES, function (symbolCategory) { - const symbolType = (lineData as LineList).getItemVisual(idx, symbolCategory); + const symbolType = makeSymbolTypeValue(symbolCategory, lineData as LineList, idx); const key = makeSymbolTypeKey(symbolCategory); // Symbol changed if (this[key] !== symbolType) { diff --git a/src/component/axisPointer/AxisPointerModel.ts b/src/component/axisPointer/AxisPointerModel.ts index c776b106a4..8f81891025 100644 --- a/src/component/axisPointer/AxisPointerModel.ts +++ b/src/component/axisPointer/AxisPointerModel.ts @@ -88,6 +88,7 @@ class AxisPointerModel extends ComponentModel { // see `modelHelper`. snap: false, triggerTooltip: true, + triggerEmphasis: true, value: null, status: null, // Init value depends on whether handle is used. diff --git a/src/component/axisPointer/axisTrigger.ts b/src/component/axisPointer/axisTrigger.ts index 810108d866..e3051b953d 100644 --- a/src/component/axisPointer/axisTrigger.ts +++ b/src/component/axisPointer/axisTrigger.ts @@ -462,7 +462,7 @@ function dispatchHighDownActually( // Build hash map and remove duplicate incidentally. each(axesInfo, function (axisInfo, key) { const option = axisInfo.axisPointerModel.option; - option.status === 'show' && each(option.seriesDataIndices, function (batchItem) { + option.status === 'show' && axisInfo.triggerEmphasis && each(option.seriesDataIndices, function (batchItem) { const key = batchItem.seriesIndex + ' | ' + batchItem.dataIndex; newHighlights[key] = batchItem; }); diff --git a/src/component/axisPointer/modelHelper.ts b/src/component/axisPointer/modelHelper.ts index 81c8568741..2b03d20104 100644 --- a/src/component/axisPointer/modelHelper.ts +++ b/src/component/axisPointer/modelHelper.ts @@ -49,6 +49,7 @@ interface AxisInfo { coordSys: CoordinateSystemMaster axisPointerModel: Model triggerTooltip: boolean + triggerEmphasis: boolean involveSeries: boolean snap: boolean useHandle: boolean @@ -87,6 +88,7 @@ export function collect(ecModel: GlobalModel, api: ExtensionAPI) { * coordSys, * axisPointerModel, * triggerTooltip, + * triggerEmphasis, * involveSeries, * snap, * seriesModels, @@ -194,6 +196,7 @@ function collectAxesInfo(result: CollectionResult, ecModel: GlobalModel, api: Ex : axisPointerModel; const snap = axisPointerModel.get('snap'); + const triggerEmphasis = axisPointerModel.get('triggerEmphasis'); const axisKey = makeKey(axis.model); const involveSeries = triggerTooltip || snap || axis.type === 'category'; @@ -204,6 +207,7 @@ function collectAxesInfo(result: CollectionResult, ecModel: GlobalModel, api: Ex coordSys: coordSys, axisPointerModel: axisPointerModel, triggerTooltip: triggerTooltip, + triggerEmphasis: triggerEmphasis, involveSeries: involveSeries, snap: snap, useHandle: isHandleTrigger(axisPointerModel), diff --git a/src/component/legend/LegendView.ts b/src/component/legend/LegendView.ts index 5b4a342599..9af5ffb664 100644 --- a/src/component/legend/LegendView.ts +++ b/src/component/legend/LegendView.ts @@ -413,16 +413,18 @@ class LegendView extends ComponentView { content = formatter(name); } - const inactiveColor = legendItemModel.get('inactiveColor'); + const textColor = isSelected + ? textStyleModel.getTextColor() : legendItemModel.get('inactiveColor'); + itemGroup.add(new graphic.Text({ style: createTextStyle(textStyleModel, { text: content, x: textX, y: itemHeight / 2, - fill: isSelected ? textStyleModel.getTextColor() : inactiveColor, + fill: textColor, align: textAlign, verticalAlign: 'middle' - }) + }, {inheritColor: textColor}) })); // Add a invisible rect to increase the area of mouse hover diff --git a/src/label/labelStyle.ts b/src/label/labelStyle.ts index cd5f8c4a69..3d6740a372 100644 --- a/src/label/labelStyle.ts +++ b/src/label/labelStyle.ts @@ -460,7 +460,7 @@ const TEXT_PROPS_WITH_GLOBAL = [ 'textShadowColor', 'textShadowBlur', 'textShadowOffsetX', 'textShadowOffsetY' ] as const; const TEXT_PROPS_SELF = [ - 'align', 'lineHeight', 'width', 'height', 'tag', 'verticalAlign' + 'align', 'lineHeight', 'width', 'height', 'tag', 'verticalAlign', 'ellipsis' ] as const; const TEXT_PROPS_BOX = [ 'padding', 'borderWidth', 'borderRadius', 'borderDashOffset', diff --git a/src/util/states.ts b/src/util/states.ts index 1748ef6f72..3a8ad4502f 100644 --- a/src/util/states.ts +++ b/src/util/states.ts @@ -506,6 +506,13 @@ export function blurSeries( )) { const view = api.getViewOfSeriesModel(seriesModel); view.group.traverse(function (child) { + // For the elements that have been triggered by other components, + // and are still required to be highlighted, + // because the current is directly forced to blur the element, + // it will cause the focus self to be unable to highlight, so skip the blur of this element. + if ((child as ExtendedElement).__highByOuter && sameSeries && focus === 'self') { + return; + } singleEnterBlur(child); }); diff --git a/src/util/time.ts b/src/util/time.ts index 9a71f44cfc..39b69536db 100644 --- a/src/util/time.ts +++ b/src/util/time.ts @@ -133,7 +133,7 @@ export function format( return (template || '') .replace(/{yyyy}/g, y + '') - .replace(/{yy}/g, y % 100 + '') + .replace(/{yy}/g, pad(y % 100 + '', 2)) .replace(/{Q}/g, q + '') .replace(/{MMMM}/g, month[M - 1]) .replace(/{MMM}/g, monthAbbr[M - 1]) diff --git a/src/util/types.ts b/src/util/types.ts index 6f135e83a1..c15e8c2639 100644 --- a/src/util/types.ts +++ b/src/util/types.ts @@ -1056,6 +1056,8 @@ export interface LabelOption extends TextCommonOption { minMargin?: number overflow?: TextStyleProps['overflow'] + ellipsis?: TextStyleProps['ellipsis'] + silent?: boolean precision?: number | 'auto' valueAnimation?: boolean @@ -1376,6 +1378,8 @@ export interface CommonAxisPointerOption { triggerTooltip?: boolean + triggerEmphasis?: boolean + /** * current value. When using axisPointer.handle, value can be set to define the initial position of axisPointer. */ diff --git a/test/emphasis-self.html b/test/emphasis-self.html new file mode 100644 index 0000000000..3bab8d8c8f --- /dev/null +++ b/test/emphasis-self.html @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/test/label-ellipsis.html b/test/label-ellipsis.html new file mode 100644 index 0000000000..04b3b15dad --- /dev/null +++ b/test/label-ellipsis.html @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + diff --git a/test/legend-style.html b/test/legend-style.html index d822235aaf..803dac2ee0 100644 --- a/test/legend-style.html +++ b/test/legend-style.html @@ -36,6 +36,7 @@
+
+ + + diff --git a/test/lines-symbolSize-update.html b/test/lines-symbolSize-update.html new file mode 100644 index 0000000000..2ed2fa7d31 --- /dev/null +++ b/test/lines-symbolSize-update.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + +
+ + + + + + + diff --git a/test/runTest/actions/__meta__.json b/test/runTest/actions/__meta__.json index 46d6b8e41a..b1cc9c96a4 100644 --- a/test/runTest/actions/__meta__.json +++ b/test/runTest/actions/__meta__.json @@ -89,6 +89,7 @@ "ec-event": 4, "emphasis-disabled": 13, "emphasis-inherit": 1, + "emphasis-self": 1, "funnel": 2, "gauge-simple": 2, "geo-map": 4, @@ -130,6 +131,7 @@ "line-sampling": 2, "line-visual2": 2, "lines-bus": 1, + "lines-symbolSize-update": 1, "map": 3, "map-contour": 2, "map-default": 1, @@ -187,7 +189,7 @@ "tooltip": 10, "tooltip-appendToBody": 4, "tooltip-axisPointer": 20, - "tooltip-axisPointer2": 2, + "tooltip-axisPointer2": 4, "tooltip-cascade": 4, "tooltip-component": 6, "tooltip-domnode": 1, diff --git a/test/runTest/actions/emphasis-self.json b/test/runTest/actions/emphasis-self.json new file mode 100644 index 0000000000..827d4f9958 --- /dev/null +++ b/test/runTest/actions/emphasis-self.json @@ -0,0 +1 @@ +[{"name":"Action 1","ops":[{"type":"mousemove","time":1811,"x":54,"y":598},{"type":"mousemove","time":2012,"x":87,"y":514},{"type":"mousemove","time":2213,"x":89,"y":512},{"type":"mousemove","time":2553,"x":89,"y":508},{"type":"mousemove","time":2753,"x":95,"y":399},{"type":"mousemove","time":2953,"x":97,"y":393},{"type":"mousemove","time":3119,"x":97,"y":393},{"type":"mousemove","time":3319,"x":101,"y":263},{"type":"mousemove","time":3536,"x":101,"y":263},{"type":"mousemove","time":3739,"x":101,"y":264},{"type":"mousemove","time":3944,"x":99,"y":288},{"type":"mousemove","time":4147,"x":98,"y":369},{"type":"mousemove","time":4438,"x":98,"y":369},{"type":"screenshot","time":4725},{"type":"mousemove","time":5093,"x":98,"y":369},{"type":"mousemove","time":5294,"x":113,"y":326},{"type":"mousemove","time":5503,"x":119,"y":300},{"type":"mousemove","time":5911,"x":119,"y":300},{"type":"mousemove","time":6114,"x":115,"y":323},{"type":"mousemove","time":6319,"x":111,"y":348},{"type":"mousemove","time":6519,"x":111,"y":348},{"type":"mousemove","time":6894,"x":111,"y":348},{"type":"mousemove","time":7094,"x":70,"y":338},{"type":"mousemove","time":7301,"x":29,"y":327},{"type":"screenshot","time":7914},{"type":"mousemove","time":7986,"x":30,"y":327},{"type":"mousemove","time":8190,"x":62,"y":310},{"type":"mousemove","time":8397,"x":100,"y":292},{"type":"screenshot","time":9146},{"type":"mousemove","time":9318,"x":100,"y":292},{"type":"mousemove","time":9519,"x":203,"y":282},{"type":"mousemove","time":9723,"x":204,"y":282},{"type":"screenshot","time":10410},{"type":"mousemove","time":10826,"x":204,"y":282},{"type":"mousemove","time":11027,"x":160,"y":284},{"type":"mousemove","time":11236,"x":156,"y":285},{"type":"screenshot","time":11597},{"type":"mousemove","time":11752,"x":156,"y":285},{"type":"mousemove","time":11952,"x":220,"y":286},{"type":"mousemove","time":12152,"x":221,"y":240},{"type":"mousemove","time":12355,"x":222,"y":234},{"type":"mousemove","time":12563,"x":225,"y":226},{"type":"screenshot","time":13151},{"type":"mousemove","time":13315,"x":226,"y":226},{"type":"mousemove","time":13515,"x":320,"y":212},{"type":"mousemove","time":13723,"x":328,"y":197},{"type":"screenshot","time":14231},{"type":"mousemove","time":14524,"x":328,"y":198},{"type":"mousemove","time":14724,"x":311,"y":288},{"type":"mousemove","time":14928,"x":309,"y":295},{"type":"screenshot","time":15368},{"type":"mousemove","time":15607,"x":309,"y":294},{"type":"mousemove","time":15807,"x":304,"y":70},{"type":"mousemove","time":16014,"x":289,"y":63},{"type":"mousemove","time":16219,"x":287,"y":63},{"type":"screenshot","time":16843},{"type":"mousemove","time":17024,"x":287,"y":64},{"type":"mousemove","time":17224,"x":287,"y":97},{"type":"mousemove","time":17426,"x":287,"y":98},{"type":"screenshot","time":17794},{"type":"mousemove","time":18007,"x":288,"y":98},{"type":"mousemove","time":18207,"x":367,"y":74},{"type":"mousemove","time":18419,"x":371,"y":72},{"type":"screenshot","time":19078},{"type":"mousemove","time":19282,"x":371,"y":72},{"type":"mousemove","time":19482,"x":222,"y":116},{"type":"mousemove","time":19690,"x":218,"y":116},{"type":"mousemove","time":19848,"x":217,"y":116},{"type":"mousemove","time":20048,"x":194,"y":72},{"type":"mousemove","time":20249,"x":193,"y":69},{"type":"screenshot","time":20764},{"type":"mousemove","time":20865,"x":193,"y":69},{"type":"mousemove","time":21067,"x":196,"y":71},{"type":"mousemove","time":21273,"x":196,"y":72},{"type":"mousemove","time":21473,"x":232,"y":112},{"type":"mousemove","time":21674,"x":233,"y":112}],"scrollY":0,"scrollX":0,"timestamp":1681397363763}] \ No newline at end of file diff --git a/test/runTest/actions/lines-symbolSize-update.json b/test/runTest/actions/lines-symbolSize-update.json new file mode 100644 index 0000000000..aee5b67469 --- /dev/null +++ b/test/runTest/actions/lines-symbolSize-update.json @@ -0,0 +1 @@ +[{"name":"Action 1","ops":[{"type":"mousemove","time":484,"x":83,"y":96},{"type":"mousemove","time":685,"x":91,"y":83},{"type":"mousemove","time":899,"x":92,"y":83},{"type":"mousedown","time":1506,"x":92,"y":83},{"type":"mouseup","time":1511,"x":92,"y":83},{"time":1512,"delay":400,"type":"screenshot-auto"}],"scrollY":0,"scrollX":0,"timestamp":1679391497375}] \ No newline at end of file diff --git a/test/runTest/actions/tooltip-axisPointer2.json b/test/runTest/actions/tooltip-axisPointer2.json index 0e5292c198..60f573d061 100644 --- a/test/runTest/actions/tooltip-axisPointer2.json +++ b/test/runTest/actions/tooltip-axisPointer2.json @@ -1 +1 @@ -[{"name":"Action 1","ops":[{"type":"mousemove","time":530,"x":31,"y":450},{"type":"mousemove","time":736,"x":57,"y":450},{"type":"mousemove","time":959,"x":82,"y":449},{"type":"mousemove","time":1163,"x":92,"y":447},{"type":"mousemove","time":1389,"x":93,"y":447},{"type":"mousemove","time":1634,"x":93,"y":447},{"type":"mousemove","time":1835,"x":114,"y":448},{"type":"mousemove","time":2051,"x":131,"y":448},{"type":"mousemove","time":2278,"x":142,"y":448},{"type":"mousemove","time":2522,"x":145,"y":447},{"type":"mousemove","time":3210,"x":148,"y":447},{"type":"mousemove","time":3428,"x":155,"y":445},{"type":"mousemove","time":3631,"x":156,"y":445},{"type":"mousemove","time":3834,"x":164,"y":445},{"type":"mousemove","time":4048,"x":183,"y":442},{"type":"mousemove","time":4251,"x":212,"y":439},{"type":"mousemove","time":4459,"x":221,"y":439},{"type":"mousemove","time":4662,"x":222,"y":439},{"type":"mousemove","time":4803,"x":224,"y":439},{"type":"mousemove","time":5005,"x":256,"y":435},{"type":"mousemove","time":5209,"x":281,"y":433},{"type":"mousemove","time":5411,"x":303,"y":433},{"type":"mousemove","time":5718,"x":307,"y":433},{"type":"mousemove","time":5933,"x":328,"y":431},{"type":"mousemove","time":6147,"x":352,"y":430},{"type":"mousemove","time":6373,"x":360,"y":430},{"type":"mousemove","time":6605,"x":361,"y":430},{"type":"mousemove","time":6949,"x":361,"y":430},{"type":"mousemove","time":7182,"x":374,"y":430},{"type":"mousemove","time":7404,"x":401,"y":430},{"type":"mousemove","time":7642,"x":402,"y":430},{"type":"mousemove","time":7821,"x":405,"y":430},{"type":"mousemove","time":8024,"x":418,"y":430},{"type":"mousemove","time":8251,"x":430,"y":430},{"type":"mousemove","time":8674,"x":434,"y":430},{"type":"mousemove","time":8903,"x":448,"y":431},{"type":"mousemove","time":9104,"x":498,"y":424},{"type":"mousemove","time":9330,"x":506,"y":424},{"type":"mousemove","time":9773,"x":511,"y":424},{"type":"mousemove","time":9995,"x":523,"y":426},{"type":"mousemove","time":10207,"x":543,"y":424},{"type":"mousemove","time":10415,"x":570,"y":422},{"type":"mousemove","time":10649,"x":577,"y":422},{"type":"mousemove","time":10921,"x":581,"y":422},{"type":"mousemove","time":11149,"x":645,"y":419},{"type":"mousemove","time":11375,"x":646,"y":418}],"scrollY":0,"scrollX":0,"timestamp":1573747705006},{"name":"Action 2","ops":[{"type":"mousedown","time":505,"x":316,"y":288},{"type":"mouseup","time":619,"x":316,"y":288},{"time":620,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":796,"x":316,"y":288},{"type":"mousemove","time":997,"x":455,"y":295},{"type":"mousedown","time":1172,"x":455,"y":295},{"type":"mouseup","time":1304,"x":455,"y":295},{"time":1305,"delay":400,"type":"screenshot-auto"}],"scrollY":410,"scrollX":0,"timestamp":1620804726835}] \ No newline at end of file +[{"name":"Action 1","ops":[{"type":"mousemove","time":530,"x":31,"y":450},{"type":"mousemove","time":736,"x":57,"y":450},{"type":"mousemove","time":959,"x":82,"y":449},{"type":"mousemove","time":1163,"x":92,"y":447},{"type":"mousemove","time":1389,"x":93,"y":447},{"type":"mousemove","time":1634,"x":93,"y":447},{"type":"mousemove","time":1835,"x":114,"y":448},{"type":"mousemove","time":2051,"x":131,"y":448},{"type":"mousemove","time":2278,"x":142,"y":448},{"type":"mousemove","time":2522,"x":145,"y":447},{"type":"mousemove","time":3210,"x":148,"y":447},{"type":"mousemove","time":3428,"x":155,"y":445},{"type":"mousemove","time":3631,"x":156,"y":445},{"type":"mousemove","time":3834,"x":164,"y":445},{"type":"mousemove","time":4048,"x":183,"y":442},{"type":"mousemove","time":4251,"x":212,"y":439},{"type":"mousemove","time":4459,"x":221,"y":439},{"type":"mousemove","time":4662,"x":222,"y":439},{"type":"mousemove","time":4803,"x":224,"y":439},{"type":"mousemove","time":5005,"x":256,"y":435},{"type":"mousemove","time":5209,"x":281,"y":433},{"type":"mousemove","time":5411,"x":303,"y":433},{"type":"mousemove","time":5718,"x":307,"y":433},{"type":"mousemove","time":5933,"x":328,"y":431},{"type":"mousemove","time":6147,"x":352,"y":430},{"type":"mousemove","time":6373,"x":360,"y":430},{"type":"mousemove","time":6605,"x":361,"y":430},{"type":"mousemove","time":6949,"x":361,"y":430},{"type":"mousemove","time":7182,"x":374,"y":430},{"type":"mousemove","time":7404,"x":401,"y":430},{"type":"mousemove","time":7642,"x":402,"y":430},{"type":"mousemove","time":7821,"x":405,"y":430},{"type":"mousemove","time":8024,"x":418,"y":430},{"type":"mousemove","time":8251,"x":430,"y":430},{"type":"mousemove","time":8674,"x":434,"y":430},{"type":"mousemove","time":8903,"x":448,"y":431},{"type":"mousemove","time":9104,"x":498,"y":424},{"type":"mousemove","time":9330,"x":506,"y":424},{"type":"mousemove","time":9773,"x":511,"y":424},{"type":"mousemove","time":9995,"x":523,"y":426},{"type":"mousemove","time":10207,"x":543,"y":424},{"type":"mousemove","time":10415,"x":570,"y":422},{"type":"mousemove","time":10649,"x":577,"y":422},{"type":"mousemove","time":10921,"x":581,"y":422},{"type":"mousemove","time":11149,"x":645,"y":419},{"type":"mousemove","time":11375,"x":646,"y":418}],"scrollY":0,"scrollX":0,"timestamp":1573747705006},{"name":"Action 2","ops":[{"type":"mousedown","time":505,"x":316,"y":288},{"type":"mouseup","time":619,"x":316,"y":288},{"time":620,"delay":400,"type":"screenshot-auto"},{"type":"mousemove","time":796,"x":316,"y":288},{"type":"mousemove","time":997,"x":455,"y":295},{"type":"mousedown","time":1172,"x":455,"y":295},{"type":"mouseup","time":1304,"x":455,"y":295},{"time":1305,"delay":400,"type":"screenshot-auto"}],"scrollY":410,"scrollX":0,"timestamp":1620804726835},{"name":"Action 3","ops":[{"type":"mousemove","time":941,"x":790,"y":332},{"type":"mousemove","time":1141,"x":679,"y":307},{"type":"mousemove","time":1341,"x":657,"y":298},{"type":"mousemove","time":1541,"x":644,"y":293},{"type":"mousemove","time":1741,"x":644,"y":293},{"type":"mousemove","time":1875,"x":641,"y":292},{"type":"mousemove","time":2079,"x":620,"y":285},{"type":"mousemove","time":2294,"x":619,"y":285},{"type":"screenshot","time":3346},{"type":"mousemove","time":4041,"x":619,"y":282},{"type":"mousemove","time":4241,"x":614,"y":209},{"type":"mousemove","time":4441,"x":615,"y":204},{"type":"mousemove","time":4645,"x":618,"y":199},{"type":"mousemove","time":4862,"x":618,"y":198},{"type":"screenshot","time":5279}],"scrollY":1022,"scrollX":0,"timestamp":1681767847541},{"name":"Action 4","ops":[{"type":"mousemove","time":504,"x":796,"y":353},{"type":"mousemove","time":708,"x":701,"y":358},{"type":"mousemove","time":920,"x":621,"y":372},{"type":"mousemove","time":1103,"x":614,"y":372},{"type":"mousemove","time":1307,"x":545,"y":380},{"type":"mousemove","time":1519,"x":593,"y":382},{"type":"mousemove","time":1723,"x":596,"y":382},{"type":"mousemove","time":1920,"x":596,"y":382},{"type":"mousemove","time":2123,"x":594,"y":382},{"type":"screenshot","time":4060},{"type":"mousemove","time":4336,"x":594,"y":381},{"type":"mousemove","time":4540,"x":610,"y":325},{"type":"mousemove","time":4752,"x":614,"y":313},{"type":"mousemove","time":4957,"x":614,"y":310},{"type":"mousemove","time":5137,"x":614,"y":311},{"type":"mousemove","time":5342,"x":615,"y":315},{"type":"screenshot","time":6509}],"scrollY":1385,"scrollX":0,"timestamp":1681767886629}] \ No newline at end of file diff --git a/test/tooltip-axisPointer2.html b/test/tooltip-axisPointer2.html index dc458dded8..9825be8a19 100644 --- a/test/tooltip-axisPointer2.html +++ b/test/tooltip-axisPointer2.html @@ -39,7 +39,8 @@
- +
+
+ + + \ No newline at end of file diff --git a/test/ut/spec/util/time.test.ts b/test/ut/spec/util/time.test.ts new file mode 100755 index 0000000000..ac459764b7 --- /dev/null +++ b/test/ut/spec/util/time.test.ts @@ -0,0 +1,131 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +import { + format +} from '@/src/util/time'; + + +describe('util/time', function () { + + describe('format', function () { + + const time = new Date('2003-04-09 01:04:02.300 UTC'); + const anotherTime = new Date('2023-12-19 11:44:33.003 UTC'); + + // test {yyyy}, {yy} ... + it('should format year', function () { + expect(format(time, '{yyyy}', true)).toEqual('2003'); + expect(format(time, '{yy}', true)).toEqual('03'); + + expect(format(anotherTime, '{yyyy}', true)).toEqual('2023'); + expect(format(anotherTime, '{yy}', true)).toEqual('23'); + }); + + // test {Q}... + it('should format quarter', function () { + expect(format(time, '{Q}', true)).toEqual('2'); + expect(format(anotherTime, '{Q}', true)).toEqual('4'); + }); + + + // test {MMMM}, {MMM} {MM}, {M} ... + it('should format month', function () { + expect(format(time, '{MMMM}', true)).toEqual('April'); + expect(format(time, '{MMM}', true)).toEqual('Apr'); + expect(format(time, '{MM}', true)).toEqual('04'); + expect(format(time, '{M}', true)).toEqual('4'); + + expect(format(anotherTime, '{MMMM}', true)).toEqual('December'); + expect(format(anotherTime, '{MMM}', true)).toEqual('Dec'); + expect(format(anotherTime, '{MM}', true)).toEqual('12'); + expect(format(anotherTime, '{M}', true)).toEqual('12'); + }); + + // test {dd}, {d} ... + it('should format day', function () { + expect(format(time, '{dd}', true)).toEqual('09'); + expect(format(time, '{d}', true)).toEqual('9'); + + expect(format(anotherTime, '{dd}', true)).toEqual('19'); + expect(format(anotherTime, '{d}', true)).toEqual('19'); + }); + + // test {eeee}, {ee}, {e} ... + it('should format day of week', function () { + expect(format(time, '{eeee}', true)).toEqual('Wednesday'); + expect(format(time, '{ee}', true)).toEqual('Wed'); + expect(format(time, '{e}', true)).toEqual('3'); + + expect(format(anotherTime, '{eeee}', true)).toEqual('Tuesday'); + expect(format(anotherTime, '{ee}', true)).toEqual('Tue'); + expect(format(anotherTime, '{e}', true)).toEqual('2'); + }); + + // test {HH}, {H} ... + it('should format hour', function () { + expect(format(time, '{HH}', true)).toEqual('01'); + expect(format(time, '{H}', true)).toEqual('1'); + + expect(format(anotherTime, '{HH}', true)).toEqual('11'); + expect(format(anotherTime, '{H}', true)).toEqual('11'); + }); + + // test {hh}, {h} ... + it('should format hour', function () { + expect(format(time, '{hh}', true)).toEqual('01'); + expect(format(time, '{h}', true)).toEqual('1'); + + expect(format(anotherTime, '{hh}', true)).toEqual('11'); + expect(format(anotherTime, '{h}', true)).toEqual('11'); + }); + + // test {mm}, {m} ... + it('should format minute', function () { + expect(format(time, '{mm}', true)).toEqual('04'); + expect(format(time, '{m}', true)).toEqual('4'); + + expect(format(anotherTime, '{mm}', true)).toEqual('44'); + expect(format(anotherTime, '{m}', true)).toEqual('44'); + }); + + // test {ss}, {s} ... + it('should format second', function () { + expect(format(time, '{ss}', true)).toEqual('02'); + expect(format(time, '{s}', true)).toEqual('2'); + + expect(format(anotherTime, '{ss}', true)).toEqual('33'); + expect(format(anotherTime, '{s}', true)).toEqual('33'); + }); + + + // test {SSS} ... + it('should format millisecond', function () { + expect(format(time, '{SSS}', true)).toEqual('300'); + expect(format(anotherTime, '{SSS}', true)).toEqual('003'); + }); + + // test {S} ... + it('should format millisecond', function () { + expect(format(time, '{S}', true)).toEqual('300'); + expect(format(anotherTime, '{S}', true)).toEqual('3'); + }); + }); +}); \ No newline at end of file