From 6f3ae03d26224f0fd827993f64ecc16c6308b2f4 Mon Sep 17 00:00:00 2001 From: vitPinchuk Date: Wed, 31 Jul 2024 08:29:01 +0300 Subject: [PATCH 1/8] radar visual editor initial --- package-lock.json | 157 ++++-- package.json | 1 + src/__mocks__/@grafana/ui.tsx | 8 +- src/__mocks__/@volkovlabs/components.tsx | 86 +++ src/components/EchartsPanel/EchartsPanel.tsx | 5 +- .../GraphEditors/LineEditor/LineEditor.tsx | 94 ++++ .../GraphEditors/LineEditor/index.ts | 1 + .../RadarEditor/RadarEditor.styles.ts | 20 + .../GraphEditors/RadarEditor/RadarEditor.tsx | 156 ++++++ .../GraphEditors/RadarEditor/index.ts | 1 + .../RadarOptionsEditor/RadarOptions.styles.ts | 13 + .../RadarOptionsEditor/RadarOptions.test.tsx | 293 ++++++++++ .../RadarOptionsEditor/RadarOptionsEditor.tsx | 129 +++++ .../GraphEditors/RadarOptionsEditor/index.ts | 1 + .../SeriesEditor/SeriesEditor.test.tsx | 284 ++++++++++ .../SeriesItemEditor/SeriesItemEditor.tsx | 59 +-- src/components/VisualEditor/VisualEditor.tsx | 9 +- src/constants/index.ts | 1 + src/constants/radar.ts | 9 + src/constants/tests.ts | 11 + src/module.ts | 16 +- src/types/index.ts | 1 + src/types/radar.ts | 52 ++ src/types/visual-editor.ts | 11 +- src/utils/code-parameters.ts | 8 +- src/utils/visual-editor.test.ts | 501 +++++++++++++++++- src/utils/visual-editor.ts | 174 +++++- 27 files changed, 1998 insertions(+), 103 deletions(-) create mode 100644 src/__mocks__/@volkovlabs/components.tsx create mode 100644 src/components/GraphEditors/LineEditor/LineEditor.tsx create mode 100644 src/components/GraphEditors/LineEditor/index.ts create mode 100644 src/components/GraphEditors/RadarEditor/RadarEditor.styles.ts create mode 100644 src/components/GraphEditors/RadarEditor/RadarEditor.tsx create mode 100644 src/components/GraphEditors/RadarEditor/index.ts create mode 100644 src/components/GraphEditors/RadarOptionsEditor/RadarOptions.styles.ts create mode 100644 src/components/GraphEditors/RadarOptionsEditor/RadarOptions.test.tsx create mode 100644 src/components/GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx create mode 100644 src/components/GraphEditors/RadarOptionsEditor/index.ts create mode 100644 src/constants/radar.ts create mode 100644 src/types/radar.ts diff --git a/package-lock.json b/package-lock.json index fc16519..8c05054 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "@types/echarts": "^4.9.22", "@types/googlemaps": "^3.43.3", "@volkovlabs/components": "^2.6.0", + "@volkovlabs/grafana-utils": "^1.4.4", "echarts": "^5.5.1", "echarts-extension-amap": "^1.12.0", "echarts-extension-gmap": "^1.6.0", @@ -2193,7 +2194,6 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", - "dev": true, "dependencies": { "@jest/types": "^29.6.3" }, @@ -2433,7 +2433,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" }, @@ -2585,7 +2584,6 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -2602,7 +2600,6 @@ "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" }, @@ -2617,7 +2614,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2633,7 +2629,6 @@ "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" }, @@ -2644,14 +2639,12 @@ "node_modules/@jest/types/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@jest/types/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" } @@ -2660,7 +2653,6 @@ "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" }, @@ -3276,8 +3268,7 @@ "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", @@ -3313,7 +3304,6 @@ "version": "1.6.13", "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.6.13.tgz", "integrity": "sha512-eailUYex6fkfaQTev4Oa3mwn0/e3mQU4H8y1WPuImYQESOQDtVrowwUGDSc19evpBbHpKtwM+hw8nLlhIsF+Tw==", - "dev": true, "hasInstallScript": true, "dependencies": { "@swc/counter": "^0.1.3", @@ -3354,7 +3344,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -3370,7 +3359,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "darwin" @@ -3386,7 +3374,6 @@ "cpu": [ "arm" ], - "dev": true, "optional": true, "os": [ "linux" @@ -3402,7 +3389,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -3418,7 +3404,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -3434,7 +3419,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -3450,7 +3434,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "linux" @@ -3466,7 +3449,6 @@ "cpu": [ "arm64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -3482,7 +3464,6 @@ "cpu": [ "ia32" ], - "dev": true, "optional": true, "os": [ "win32" @@ -3498,7 +3479,6 @@ "cpu": [ "x64" ], - "dev": true, "optional": true, "os": [ "win32" @@ -3510,8 +3490,7 @@ "node_modules/@swc/counter": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "dev": true + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==" }, "node_modules/@swc/helpers": { "version": "0.5.11", @@ -3525,7 +3504,6 @@ "version": "0.2.36", "resolved": "https://registry.npmjs.org/@swc/jest/-/jest-0.2.36.tgz", "integrity": "sha512-8X80dp81ugxs4a11z1ka43FPhP+/e+mJNXJSxiNYk8gIX/jPBtY4gQTrKu/KIoco8bzKuPI5lUxjfLiGsfvnlw==", - "dev": true, "dependencies": { "@jest/create-cache-key-function": "^29.7.0", "@swc/counter": "^0.1.3", @@ -3542,7 +3520,6 @@ "version": "0.1.9", "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.9.tgz", "integrity": "sha512-qKnCno++jzcJ4lM4NTfYifm1EFSCeIfKiAHAfkENZAV5Kl9PjJIyd2yeeVv6c/2CckuLyv2NmRC5pv6pm2WQBg==", - "dev": true, "dependencies": { "@swc/counter": "^0.1.3" } @@ -3932,14 +3909,12 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -3948,7 +3923,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4122,7 +4096,6 @@ "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, "dependencies": { "@types/yargs-parser": "*" } @@ -4130,8 +4103,7 @@ "node_modules/@types/yargs-parser": { "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" }, "node_modules/@types/zrender": { "version": "4.0.6", @@ -4582,6 +4554,90 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@volkovlabs/grafana-utils": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/@volkovlabs/grafana-utils/-/grafana-utils-1.4.4.tgz", + "integrity": "sha512-Ada4FyRNNYyNbrL6OPchrb7OE1jRWXvIrVpIhXLQ4dwmg4IJ8Lr1YG8mBpnXS3SDoRcBHxnYtvwnXqDeM0bg7Q==", + "dependencies": { + "@grafana/data": "^10.2.1", + "@swc/jest": "^0.2.29", + "global": "^4.4.0" + } + }, + "node_modules/@volkovlabs/grafana-utils/node_modules/@braintree/sanitize-url": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.0.0.tgz", + "integrity": "sha512-GMu2OJiTd1HSe74bbJYQnVvELANpYiGFZELyyTM1CR0sdv5ReQAcJ/c/8pIrPab3lO11+D+EpuGLUxqz+y832g==" + }, + "node_modules/@volkovlabs/grafana-utils/node_modules/@grafana/data": { + "version": "10.4.6", + "resolved": "https://registry.npmjs.org/@grafana/data/-/data-10.4.6.tgz", + "integrity": "sha512-p5y+9wFmImCWSULfqkA5EuCmA/pYPs+LL+Hrwh7hJGoe4ifZdJ/EERPzoDLN1UWbiEL0uO/LmLNNKsf8vKM1SA==", + "dependencies": { + "@braintree/sanitize-url": "7.0.0", + "@grafana/schema": "10.4.6", + "@types/d3-interpolate": "^3.0.0", + "@types/string-hash": "1.1.3", + "d3-interpolate": "3.0.1", + "date-fns": "3.3.1", + "dompurify": "^3.0.0", + "eventemitter3": "5.0.1", + "fast_array_intersect": "1.1.0", + "history": "4.10.1", + "lodash": "4.17.21", + "marked": "12.0.0", + "marked-mangle": "1.1.7", + "moment": "2.30.1", + "moment-timezone": "0.5.45", + "ol": "7.4.0", + "papaparse": "5.4.1", + "react-use": "17.5.0", + "regenerator-runtime": "0.14.1", + "rxjs": "7.8.1", + "string-hash": "^1.1.3", + "tinycolor2": "1.6.0", + "tslib": "2.6.2", + "uplot": "1.6.30", + "xss": "^1.0.14" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, + "node_modules/@volkovlabs/grafana-utils/node_modules/@grafana/schema": { + "version": "10.4.6", + "resolved": "https://registry.npmjs.org/@grafana/schema/-/schema-10.4.6.tgz", + "integrity": "sha512-5o7OJ4C0qBsh/8k4iGbnbCrGNq/0I/k5mwJkNjZuNhd2GBwMnVGYbIR4vfoq9uaMKC4e88deMzW3R1bjsk/ESw==", + "dependencies": { + "tslib": "2.6.2" + } + }, + "node_modules/@volkovlabs/grafana-utils/node_modules/date-fns": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.3.1.tgz", + "integrity": "sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/@volkovlabs/grafana-utils/node_modules/marked": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-12.0.0.tgz", + "integrity": "sha512-Vkwtq9rLqXryZnWaQc86+FHLC6tr/fycMfYAhiOIXkrNmeGAyhSxjqu0Rs1i0bBqw5u0S7+lV9fdH2ZSVaoa0w==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@volkovlabs/grafana-utils/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, "node_modules/@volkovlabs/jest-selectors": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@volkovlabs/jest-selectors/-/jest-selectors-1.4.1.tgz", @@ -6927,6 +6983,11 @@ "csstype": "^3.0.2" } }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -8487,6 +8548,15 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -11653,8 +11723,7 @@ "node_modules/jsonc-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==" }, "node_modules/jsonfile": { "version": "6.1.0", @@ -11989,6 +12058,14 @@ "node": ">=6" } }, + "node_modules/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", @@ -12889,6 +12966,14 @@ "node": ">=6" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", diff --git a/package.json b/package.json index 3ea394c..fec2cd4 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "@types/echarts": "^4.9.22", "@types/googlemaps": "^3.43.3", "@volkovlabs/components": "^2.6.0", + "@volkovlabs/grafana-utils": "^1.4.4", "echarts": "^5.5.1", "echarts-extension-amap": "^1.12.0", "echarts-extension-gmap": "^1.6.0", diff --git a/src/__mocks__/@grafana/ui.tsx b/src/__mocks__/@grafana/ui.tsx index c14b4d2..55e67d8 100644 --- a/src/__mocks__/@grafana/ui.tsx +++ b/src/__mocks__/@grafana/ui.tsx @@ -12,6 +12,12 @@ const Select = jest.fn(({ options, onChange, value, isMulti, isClearable, ...res if (isMulti) { onChange(options.filter((option: any) => event.target.values.includes(option.value))); } else { + /** + * Mock Select clear call + */ + if (event.target.value === 'clear') { + onChange(''); + } const option = options.find((option: any) => option.value === event.target.value); option && onChange(option); } @@ -26,7 +32,7 @@ const Select = jest.fn(({ options, onChange, value, isMulti, isClearable, ...res {...restProps} > {isClearable && ( - )} diff --git a/src/__mocks__/@volkovlabs/components.tsx b/src/__mocks__/@volkovlabs/components.tsx new file mode 100644 index 0000000..d4afab0 --- /dev/null +++ b/src/__mocks__/@volkovlabs/components.tsx @@ -0,0 +1,86 @@ +import { Input } from '@grafana/ui'; +import React, { ChangeEvent, useCallback } from 'react'; + +const actual = jest.requireActual('@volkovlabs/components'); + +/** + * Properties + */ +interface Props extends Omit, 'onChange' | 'value'> { + /** + * on Change + * @param value + */ + onChange?: (value: number) => void; + + /** + * Value + * + * @type {number} + */ + value: number | string; + + /** + * Step + * + * @type {number} + */ + step?: number; + + /** + * Min + * + * @type {min} + */ + min?: number; + + /** + * Max + * + * @type {max} + */ + max?: number; +} + +/** + * Number Input + */ +const NumberInput: React.FC = ({ value, onChange, min, max, step, ...restProps }) => { + /** + * Number Value + */ + const numberValue = Number(value); + + /** + * On Save Value + */ + const onSaveValue = useCallback( + (event: ChangeEvent) => { + let v = Number(event.target.value); + + if (Number.isNaN(v)) { + v = 0; + } + + if (step !== undefined && (v * 1000) % (step * 1000) !== 0) { + v = 0; + } + + if (max !== undefined && v > max) { + v = max; + } else if (min !== undefined && v < min) { + v = min; + } + + onChange?.(v); + }, + [max, min, onChange, step] + ); + + return ; +}; + +module.exports = { + ...actual, + NumberInput, +}; diff --git a/src/components/EchartsPanel/EchartsPanel.tsx b/src/components/EchartsPanel/EchartsPanel.tsx index 28e5e81..ac937d6 100644 --- a/src/components/EchartsPanel/EchartsPanel.tsx +++ b/src/components/EchartsPanel/EchartsPanel.tsx @@ -16,7 +16,7 @@ import React, { useEffect, useRef, useState } from 'react'; import { EditorMode, Map, TEST_IDS, Theme } from '../../constants'; import { loadBaidu, loadGaode, loadGoogle, registerMaps } from '../../maps'; import { CodeResult, PanelOptions } from '../../types'; -import { codeParameters, getDatasetSource, visualCodeParameters } from '../../utils'; +import { codeParameters, getDataSeries, getDatasetSource, getRadarOptions, visualCodeParameters } from '../../utils'; import { getStyles } from './EchartsPanel.styles'; /** @@ -214,7 +214,8 @@ export const EchartsPanel: React.FC = ({ options, data, width, height, re dataset: { source: getDatasetSource(data.series, options.visualEditor.dataset), }, - series: options.visualEditor.series, + series: getDataSeries(options.visualEditor.series, data.series), + radar: getRadarOptions(options.visualEditor, data.series), }, }) ) diff --git a/src/components/GraphEditors/LineEditor/LineEditor.tsx b/src/components/GraphEditors/LineEditor/LineEditor.tsx new file mode 100644 index 0000000..e543ddc --- /dev/null +++ b/src/components/GraphEditors/LineEditor/LineEditor.tsx @@ -0,0 +1,94 @@ +import { SelectableValue } from '@grafana/data'; +import { InlineField, InlineFieldRow, Select } from '@grafana/ui'; +import React from 'react'; + +import { TEST_IDS } from '../../../constants'; +import { DatasetItem, SeriesItem, SeriesType } from '../../../types'; +import { getDatasetItemUniqueName } from '../../../utils'; + +/** + * Label Width + */ +const LabelWidth = 10; + +/** + * Line Item + */ +type LineSeriesItem = Extract; + +/** + * Properties + */ +interface Props { + /** + * Value + * + * @type {LineSeriesItem} + */ + value: LineSeriesItem; + + /** + * On Change + */ + onChange: (value: SeriesItem) => void; + + /** + * Dataset + */ + dataset: DatasetItem[]; +} + +export const LineEditor: React.FC = ({ value, onChange, dataset }) => { + return ( + <> + + + ({ + value: getDatasetItemUniqueName(item), + label: getDatasetItemUniqueName(item), + }))} + isMulti={true} + isClearable={true} + onChange={(event) => { + const values = event as SelectableValue[]; + onChange({ + ...value, + encode: { + ...value.encode, + x: values.map((item) => item.value), + }, + }); + }} + aria-label={TEST_IDS.seriesEditor.fieldEncodeX} + /> + + + + ); +}; diff --git a/src/components/GraphEditors/LineEditor/index.ts b/src/components/GraphEditors/LineEditor/index.ts new file mode 100644 index 0000000..7dd877f --- /dev/null +++ b/src/components/GraphEditors/LineEditor/index.ts @@ -0,0 +1 @@ +export * from './LineEditor'; diff --git a/src/components/GraphEditors/RadarEditor/RadarEditor.styles.ts b/src/components/GraphEditors/RadarEditor/RadarEditor.styles.ts new file mode 100644 index 0000000..8130709 --- /dev/null +++ b/src/components/GraphEditors/RadarEditor/RadarEditor.styles.ts @@ -0,0 +1,20 @@ +import { css } from '@emotion/css'; +import { GrafanaTheme2 } from '@grafana/data'; + +/** + * Styles + */ +export const getStyles = (theme: GrafanaTheme2) => { + return { + label: css` + margin-bottom: ${theme.spacing(1)}; + margin-top: ${theme.spacing(2)}; + `, + new: css` + margin-top: ${theme.spacing(2)}; + `, + removeButton: css` + color: ${theme.colors.text.secondary}; + `, + }; +}; diff --git a/src/components/GraphEditors/RadarEditor/RadarEditor.tsx b/src/components/GraphEditors/RadarEditor/RadarEditor.tsx new file mode 100644 index 0000000..fb5363b --- /dev/null +++ b/src/components/GraphEditors/RadarEditor/RadarEditor.tsx @@ -0,0 +1,156 @@ +import { Button, IconButton, InlineField, InlineFieldRow, Input, Label, Select, useStyles2 } from '@grafana/ui'; +import React, { useCallback, useState } from 'react'; + +import { TEST_IDS } from '../../../constants'; +import { DatasetItem, SeriesItem, SeriesType } from '../../../types'; +import { getDatasetItemUniqueName, getSeriesUniqueId } from '../../../utils'; +import { getStyles } from './RadarEditor.styles'; + +/** + * Radar Series Item + */ +type RadarSeriesItem = Extract; + +/** + * Properties + */ +interface Props { + /** + * Value + * + * @type {RadarSeriesItem} + */ + value: RadarSeriesItem; + + /** + * On Change + */ + onChange: (value: SeriesItem) => void; + + /** + * Dataset + */ + dataset: DatasetItem[]; +} + +export const RadarEditor: React.FC = ({ value, onChange, dataset }) => { + /** + * Styles and Theme + */ + const styles = useStyles2(getStyles); + + /** + * States + */ + const [newRadarItemName, setNewRadarItemName] = useState(''); + + /** + * Add new dimension + */ + const addNewDimension = useCallback(() => { + setNewRadarItemName(''); + const dataItem = { + name: newRadarItemName, + value: '', + uid: getSeriesUniqueId(), + }; + const currentRadarValue = value.radarDimensions || []; + currentRadarValue.push(dataItem); + + onChange({ + ...value, + radarDimensions: currentRadarValue, + }); + }, [newRadarItemName, onChange, value]); + + return ( + <> + + {value.radarDimensions?.map((dimension) => { + return ( + + + { + const newDimensions = value.radarDimensions.map((dimensionItem) => { + return { + ...dimensionItem, + name: dimensionItem.uid === dimension.uid ? event.currentTarget.value : dimensionItem.name, + }; + }); + + onChange({ + ...value, + radarDimensions: newDimensions, + }); + }} + data-testid={TEST_IDS.seriesEditor.radarDimensionName(dimension.name)} + /> + + + setNewRadarItemName(event.currentTarget.value)} + data-testid={TEST_IDS.seriesEditor.radarDimensionNewItemId} + /> + + + + + ); +}; diff --git a/src/components/GraphEditors/RadarEditor/index.ts b/src/components/GraphEditors/RadarEditor/index.ts new file mode 100644 index 0000000..c104fbb --- /dev/null +++ b/src/components/GraphEditors/RadarEditor/index.ts @@ -0,0 +1 @@ +export * from './RadarEditor'; diff --git a/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.styles.ts b/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.styles.ts new file mode 100644 index 0000000..e0f7d14 --- /dev/null +++ b/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.styles.ts @@ -0,0 +1,13 @@ +import { css } from '@emotion/css'; +import { GrafanaTheme2 } from '@grafana/data'; + +/** + * Styles + */ +export const getStyles = (theme: GrafanaTheme2) => { + return { + root: css` + margin-top: ${theme.spacing(2)}; + `, + }; +}; diff --git a/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.test.tsx b/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.test.tsx new file mode 100644 index 0000000..bc06a5c --- /dev/null +++ b/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.test.tsx @@ -0,0 +1,293 @@ +import { FieldType } from '@grafana/data'; +import { fireEvent, render, screen, within } from '@testing-library/react'; +import { getJestSelectors } from '@volkovlabs/jest-selectors'; +import React from 'react'; + +import { TEST_IDS } from '../../../constants'; +import { RadarShapeOptions } from '../../../types'; +import { RadarOptionsEditor } from './RadarOptionsEditor'; + +/** + * Properties + */ +type Props = React.ComponentProps; + +/** + * Radar Options Editor + */ +describe('Radar options', () => { + /** + * Create On Change Handler + */ + const createOnChangeHandler = (initialValue: any) => { + let value = initialValue; + return { + value, + onChange: jest.fn((newValue) => { + value = newValue; + }), + }; + }; + + /** + * Selectors + */ + const getSelectors = getJestSelectors(TEST_IDS.seriesEditor); + const selectors = getSelectors(screen); + + /** + * Open Item + */ + const openItem = (): ReturnType => { + /** + * Check item presence + */ + expect(selectors.radarOptionsHeader(false)).toBeInTheDocument(); + + /** + * Make Item is opened + */ + fireEvent.click(selectors.radarOptionsHeader(false)); + + /** + * Check if item content exists + */ + const elementContent = selectors.radarOptionsContent(false); + expect(elementContent).toBeInTheDocument(); + + /** + * Return selectors for opened item + */ + return getSelectors(within(elementContent)); + }; + + /** + * Dataset + */ + const dataset = [ + { + fields: [ + { + name: 'Value', + source: 'A', + type: FieldType.string, + }, + { + name: 'Value 2', + source: 'A', + type: FieldType.string, + }, + ], + name: ' Test', + refId: 'A', + }, + ]; + + /** + * Get Tested Component + */ + const getComponent = (props: Partial) => { + return ; + }; + + it('Should render component', () => { + render(getComponent({})); + + expect(selectors.radarOptionsRoot()).toBeInTheDocument(); + }); + + it('Should change shape option', async () => { + const values = { + dataset: [], + radar: { + indicator: 'A:Value', + radius: 0, + shape: RadarShapeOptions.CIRCLE, + }, + } as any; + + const { value, onChange } = createOnChangeHandler(values); + + render( + getComponent({ + value, + onChange, + }) + ); + + /** + * Initial + */ + expect(selectors.radarOptionsRoot()).toBeInTheDocument(); + + const item = openItem(); + expect(item.radarOptionsShape()).toHaveValue(RadarShapeOptions.CIRCLE); + fireEvent.change(item.radarOptionsShape(), { target: { value: RadarShapeOptions.POLYGON } }); + + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ + radar: expect.objectContaining({ + shape: 'polygon', + }), + }) + ); + }); + + it('Should clear shape option', async () => { + const values = { + dataset: [], + radar: { + indicator: 'A:Value', + radius: 0, + shape: RadarShapeOptions.CIRCLE, + }, + } as any; + + const { value, onChange } = createOnChangeHandler(values); + + render( + getComponent({ + value, + onChange, + }) + ); + + /** + * Initial + */ + expect(selectors.radarOptionsRoot()).toBeInTheDocument(); + + const item = openItem(); + expect(item.radarOptionsShape()).toBeInTheDocument(); + expect(item.radarOptionsShape()).toHaveValue('circle'); + + /** + * Simulate a click on the X button + */ + fireEvent.change(item.radarOptionsShape(), { target: { value: 'clear' } }); + + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ + radar: expect.objectContaining({ + shape: '', + }), + }) + ); + }); + + it('Should change indicator option', async () => { + const values = { + dataset: [], + radar: { + indicator: 'A:Value', + radius: 0, + shape: RadarShapeOptions.CIRCLE, + }, + } as any; + + const { value, onChange } = createOnChangeHandler(values); + + render( + getComponent({ + value, + onChange, + }) + ); + + /** + * Initial + */ + expect(selectors.radarOptionsRoot()).toBeInTheDocument(); + + const item = openItem(); + expect(item.radarOptionsIndicator()).toHaveValue('A:Value'); + fireEvent.change(item.radarOptionsIndicator(), { target: { value: 'A:Value 2' } }); + + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ + radar: expect.objectContaining({ + indicator: 'A:Value 2', + }), + }) + ); + }); + + it('Should clear indicator option', async () => { + const values = { + dataset: [], + radar: { + indicator: 'A:Value', + radius: 0, + shape: RadarShapeOptions.CIRCLE, + }, + } as any; + + const { value, onChange } = createOnChangeHandler(values); + + render( + getComponent({ + value, + onChange, + }) + ); + + /** + * Initial + */ + expect(selectors.radarOptionsRoot()).toBeInTheDocument(); + + const item = openItem(); + expect(item.radarOptionsIndicator()).toHaveValue('A:Value'); + + /** + * Simulate a click on the X button + */ + fireEvent.change(item.radarOptionsIndicator(), { target: { value: 'clear' } }); + + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ + radar: expect.objectContaining({ + indicator: '', + }), + }) + ); + }); + + it('Should change radius option', async () => { + const values = { + dataset: [], + radar: { + indicator: 'A:Value', + radius: 0, + shape: RadarShapeOptions.CIRCLE, + }, + } as any; + + const { value, onChange } = createOnChangeHandler(values); + + render( + getComponent({ + value, + onChange, + }) + ); + + /** + * Initial + */ + expect(selectors.radarOptionsRoot()).toBeInTheDocument(); + + const item = openItem(); + expect(item.radarOptionsRadius()).toHaveValue(0); + + fireEvent.change(item.radarOptionsRadius(), { target: { value: 50 } }); + + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ + radar: expect.objectContaining({ + radius: 50, + }), + }) + ); + }); +}); diff --git a/src/components/GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx b/src/components/GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx new file mode 100644 index 0000000..9d70e82 --- /dev/null +++ b/src/components/GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx @@ -0,0 +1,129 @@ +import { DataFrame, FieldType } from '@grafana/data'; +import { InlineField, InlineFieldRow, Select, useStyles2 } from '@grafana/ui'; +import { Collapse, NumberInput } from '@volkovlabs/components'; +import React, { useMemo, useState } from 'react'; + +import { RADAR_OPTIONS, TEST_IDS } from '../../../constants'; +import { VisualEditorOptions } from '../../../types'; +import { multipleQueriesFields } from '../../../utils'; +import { getStyles } from './RadarOptions.styles'; + +/** + * Properties + */ +interface Props { + /** + * Value + * + * @type {VisualEditorOptions} + */ + value: VisualEditorOptions; + + /** + * On Change + */ + onChange: (value?: VisualEditorOptions | undefined) => void; + + /** + * Data + * + * @type {DataFrame[]} + */ + data: DataFrame[]; +} + +/** + * Radar Options Editor + */ +export const RadarOptionsEditor: React.FC = ({ value, onChange, data }) => { + /** + * Styles and Theme + */ + const styles = useStyles2(getStyles); + + /** + * Options + */ + const options = useMemo(() => multipleQueriesFields(data, [FieldType.string]), [data]); + + /** + * States + */ + const [isOpen, setIsOpen] = useState(false); + + return ( +
+ setIsOpen((prevState) => !prevState)} + title="Radar Options" + > + <> + + + { + onChange({ + ...value, + radar: { + ...value.radar, + indicator: event?.value || '', + }, + }); + }} + data-testid={TEST_IDS.seriesEditor.radarOptionsIndicator} + /> + + + + +
+ ); +}; diff --git a/src/components/GraphEditors/RadarOptionsEditor/index.ts b/src/components/GraphEditors/RadarOptionsEditor/index.ts new file mode 100644 index 0000000..9b374e9 --- /dev/null +++ b/src/components/GraphEditors/RadarOptionsEditor/index.ts @@ -0,0 +1 @@ +export * from './RadarOptionsEditor'; diff --git a/src/components/SeriesEditor/SeriesEditor.test.tsx b/src/components/SeriesEditor/SeriesEditor.test.tsx index 9f29350..c511a00 100644 --- a/src/components/SeriesEditor/SeriesEditor.test.tsx +++ b/src/components/SeriesEditor/SeriesEditor.test.tsx @@ -486,5 +486,289 @@ describe('Series Editor', () => { expect(item.fieldEncodeX()).toHaveValue(['A:Value']); }); }); + + describe('Radar', () => { + const radarItem = { + uid: 'radar', + id: 'radar', + name: 'Radar', + type: SeriesType.RADAR, + radarDimensions: [ + { + name: 'Test', + uid: 'Dimension-Test', + value: 'A:Value', + }, + ], + }; + const radarItems = [ + radarItem, + { + uid: 'other', + id: 'other', + name: 'Other', + }, + ]; + + it('Should add new dimension', async () => { + const { value, onChange } = createOnChangeHandler(radarItems); + + const { rerender } = render( + getComponent({ + value, + onChange, + }) + ); + + const item = openItem(radarItem.id); + + /** + * Initial state + */ + expect(item.radarDimensionButtonAddNew()).toBeInTheDocument(); + expect(item.radarDimensionNewItemId()).toBeInTheDocument(); + expect(item.radarDimensionButtonAddNew()).toBeDisabled(); + + fireEvent.change(item.radarDimensionNewItemId(), { target: { value: 'Test-2' } }); + + expect(item.radarDimensionButtonAddNew()).not.toBeDisabled(); + + await act(async () => { + fireEvent.click(item.radarDimensionButtonAddNew()); + }); + + /** + * Rerender + */ + rerender( + getComponent({ + value, + onChange, + }) + ); + + /** + * Should add new dimensioon for radar + */ + expect(item.radarDimensionName(false, 'Test-2')).toBeInTheDocument(); + + /** + * Should clean new item id field + */ + expect(item.radarDimensionNewItemId()).toHaveValue(''); + }); + + it('Should add new dimension if initial dimensions is empty', async () => { + const radarItem = { + uid: 'radar', + id: 'radar', + name: 'Radar', + type: SeriesType.RADAR, + }; + const radarItems = [ + radarItem, + { + uid: 'other', + id: 'other', + name: 'Other', + }, + ]; + + const { value, onChange } = createOnChangeHandler(radarItems); + + const { rerender } = render( + getComponent({ + value, + onChange, + }) + ); + + const item = openItem(radarItem.id); + + /** + * Initial state + */ + expect(item.radarDimensionButtonAddNew()).toBeInTheDocument(); + expect(item.radarDimensionNewItemId()).toBeInTheDocument(); + expect(item.radarDimensionButtonAddNew()).toBeDisabled(); + + fireEvent.change(item.radarDimensionNewItemId(), { target: { value: 'Test-2' } }); + + expect(item.radarDimensionButtonAddNew()).not.toBeDisabled(); + + await act(async () => { + fireEvent.click(item.radarDimensionButtonAddNew()); + }); + + /** + * Rerender + */ + rerender( + getComponent({ + value, + onChange, + }) + ); + + /** + * Should add new dimensioon for radar + */ + expect(item.radarDimensionName(false, 'Test-2')).toBeInTheDocument(); + + /** + * Should clean new item id field + */ + expect(item.radarDimensionNewItemId()).toHaveValue(''); + }); + + it('Should update dimension name', async () => { + const { value, onChange } = createOnChangeHandler(radarItems); + + const { rerender } = render( + getComponent({ + value, + onChange, + }) + ); + + const item = openItem(radarItem.id); + + /** + * Initial state + */ + expect(item.radarDimensionButtonAddNew()).toBeInTheDocument(); + expect(item.radarDimensionNewItemId()).toBeInTheDocument(); + expect(item.radarDimensionButtonAddNew()).toBeDisabled(); + expect(item.radarDimensionName(false, 'Test')).toBeInTheDocument(); + + fireEvent.change(item.radarDimensionName(false, 'Test'), { target: { value: 'Test-New' } }); + + /** + * Rerender + */ + rerender( + getComponent({ + value, + onChange, + }) + ); + + /** + * Changes + */ + expect(item.radarDimensionName(true, 'Test')).not.toBeInTheDocument(); + expect(item.radarDimensionName(false, 'Test-New')).toBeInTheDocument(); + expect(item.radarDimensionName(false, 'Test-New')).toHaveValue('Test-New'); + }); + + it('Should update dimension value', async () => { + const { value, onChange } = createOnChangeHandler(radarItems); + + const { rerender } = render( + getComponent({ + value, + onChange, + }) + ); + + const item = openItem(radarItem.id); + + /** + * Initial state + */ + expect(item.radarDimensionButtonAddNew()).toBeInTheDocument(); + expect(item.radarDimensionNewItemId()).toBeInTheDocument(); + expect(item.radarDimensionButtonAddNew()).toBeDisabled(); + expect(item.radarDimensionValue(false, 'A:Value')).toBeInTheDocument(); + + fireEvent.change(item.radarDimensionValue(false, 'A:Value'), { target: { value: 'A:Time' } }); + + /** + * Rerender + */ + rerender( + getComponent({ + value, + onChange, + }) + ); + + /** + * Changes + */ + expect(item.radarDimensionName(true, 'A:Value')).not.toBeInTheDocument(); + expect(item.radarDimensionValue(false, 'A:Time')).toBeInTheDocument(); + }); + + it('Should remove dimension', async () => { + const radarItem = { + uid: 'radar-2', + id: 'radar-2', + name: 'Radar-2', + type: SeriesType.RADAR, + radarDimensions: [ + { + name: 'Test', + uid: 'Dimension-Test', + value: 'A:Value', + }, + { + name: 'Test-2', + uid: 'Dimension-Test-2', + value: 'A:Value', + }, + ], + }; + + const radarItemsTest = [ + radarItem, + { + uid: 'other', + id: 'other', + name: 'Other', + }, + ]; + + const { value, onChange } = createOnChangeHandler(radarItemsTest); + + const { rerender } = render( + getComponent({ + value, + onChange, + }) + ); + + const item = openItem(radarItem.id); + + /** + * Initial state + */ + expect(item.radarDimensionButtonAddNew()).toBeInTheDocument(); + expect(item.radarDimensionNewItemId()).toBeInTheDocument(); + expect(item.radarDimensionButtonAddNew()).toBeDisabled(); + expect(item.radarDimensionButtonRemove(false, 'Dimension-Test-2')).toBeInTheDocument(); + expect(item.radarDimensionButtonRemove(false, 'Dimension-Test')).toBeInTheDocument(); + + await act(async () => { + fireEvent.click(item.radarDimensionButtonRemove(false, 'Dimension-Test-2')); + }); + + /** + * Rerender + */ + rerender( + getComponent({ + value, + onChange, + }) + ); + + /** + * Changes + */ + expect(item.radarDimensionButtonRemove(true, 'Dimension-Test-2')).not.toBeInTheDocument(); + expect(item.radarDimensionButtonRemove(false, 'Dimension-Test')).toBeInTheDocument(); + }); + }); }); }); diff --git a/src/components/SeriesItemEditor/SeriesItemEditor.tsx b/src/components/SeriesItemEditor/SeriesItemEditor.tsx index 6df7442..3fa8434 100644 --- a/src/components/SeriesItemEditor/SeriesItemEditor.tsx +++ b/src/components/SeriesItemEditor/SeriesItemEditor.tsx @@ -1,10 +1,11 @@ -import { SelectableValue } from '@grafana/data'; import { InlineField, InlineFieldRow, Input, Select } from '@grafana/ui'; import React from 'react'; import { SERIES_TYPE_OPTIONS, TEST_IDS } from '../../constants'; import { DatasetItem, SeriesItem, SeriesType } from '../../types'; -import { getDatasetItemUniqueName, getSeriesWithNewType } from '../../utils'; +import { getSeriesWithNewType } from '../../utils'; +import { LineEditor } from './../GraphEditors/LineEditor'; +import { RadarEditor } from './../GraphEditors/RadarEditor'; /** * Label Width @@ -75,57 +76,7 @@ export const SeriesItemEditor: React.FC = ({ value, onChange, dataset }) /> - {value.type === SeriesType.LINE && ( - <> - - - ({ - value: getDatasetItemUniqueName(item), - label: getDatasetItemUniqueName(item), - }))} - isMulti={true} - isClearable={true} - onChange={(event) => { - const values = event as SelectableValue[]; - onChange({ - ...value, - encode: { - ...value.encode, - x: values.map((item) => item.value), - }, - }); - }} - aria-label={TEST_IDS.seriesEditor.fieldEncodeX} - /> - - - - )} + {value.type === SeriesType.LINE && } + {value.type === SeriesType.RADAR && } ); diff --git a/src/components/VisualEditor/VisualEditor.tsx b/src/components/VisualEditor/VisualEditor.tsx index 47fdb1f..eba3b9f 100644 --- a/src/components/VisualEditor/VisualEditor.tsx +++ b/src/components/VisualEditor/VisualEditor.tsx @@ -1,15 +1,17 @@ import { StandardEditorProps } from '@grafana/data'; import { Label } from '@grafana/ui'; +import { RadarOptionsEditor } from 'components/GraphEditors/RadarOptionsEditor'; import React from 'react'; -import { VisualEditorOptions } from '../../types'; +import { SeriesType, VisualEditorOptions } from '../../types'; +import { isTypeExistInSeries } from '../../utils'; import { DatasetEditor } from '../DatasetEditor'; import { SeriesEditor } from '../SeriesEditor'; /** * Properties */ -type Props = StandardEditorProps +type Props = StandardEditorProps; /** * Visual Editor @@ -39,6 +41,9 @@ export const VisualEditor: React.FC = ({ value, onChange, context }) => { }} dataset={value.dataset} /> + {isTypeExistInSeries(value.series, SeriesType.RADAR) && ( + + )} ); }; diff --git a/src/constants/index.ts b/src/constants/index.ts index 88c7e68..bd186f6 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -2,5 +2,6 @@ export * from './default'; export * from './echarts'; export * from './editor'; export * from './maps'; +export * from './radar'; export * from './tests'; export * from './visual-editor'; diff --git a/src/constants/radar.ts b/src/constants/radar.ts new file mode 100644 index 0000000..c52356f --- /dev/null +++ b/src/constants/radar.ts @@ -0,0 +1,9 @@ +import { RadarShapeOptions } from '../types'; + +/** + * Radar options + */ +export const RADAR_OPTIONS = [ + { value: RadarShapeOptions.CIRCLE, label: 'Circle' }, + { value: RadarShapeOptions.POLYGON, label: 'Polygon' }, +]; diff --git a/src/constants/tests.ts b/src/constants/tests.ts index fdb271c..13a397f 100644 --- a/src/constants/tests.ts +++ b/src/constants/tests.ts @@ -23,6 +23,17 @@ export const TEST_IDS = { fieldType: 'series-editor field-type', fieldEncodeX: 'series-editor field-encode-x', fieldEncodeY: 'series-editor field-encode-y', + radarDimensionName: (name: string) => `data-testid series-editor radar-dimension-${name}`, + radarDimensionValue: (value: string) => `data-testid series-editor radar-dimension-${value}`, + radarDimensionButtonRemove: (id: string) => `data-testid series-editor radar-dimension button-remove ${id}`, + radarDimensionNewItemId: 'data-testid series-editor radar-dimension new-item-id', + radarDimensionButtonAddNew: 'data-testid series-editor radar-dimension button-add-new', + radarOptionsRoot: 'data-testid series-editor options-root', + radarOptionsHeader: 'data-testid series-editor radar-options header', + radarOptionsContent: 'data-testid series-editor radar-options content', + radarOptionsShape: 'data-testid series-editor radar-options shape', + radarOptionsRadius: 'data-testid series-editor radar-options radius', + radarOptionsIndicator: 'data-testid series-editor radar-options indicator', }, datasetEditor: { buttonAddNew: 'data-testid dataset-editor button-add-new', diff --git a/src/module.ts b/src/module.ts index ef5582f..f97eead 100644 --- a/src/module.ts +++ b/src/module.ts @@ -1,4 +1,4 @@ -import { PanelPlugin } from '@grafana/data'; +import { FieldConfigProperty, PanelPlugin } from '@grafana/data'; import { EchartsEditor, EchartsPanel, VisualEditor } from './components'; import { @@ -22,6 +22,20 @@ import { PanelOptions } from './types'; export const plugin = new PanelPlugin(EchartsPanel) .setNoPadding() .setMigrationHandler(getMigratedOptions) + .useFieldConfig({ + disableStandardOptions: [ + FieldConfigProperty.Color, + FieldConfigProperty.Decimals, + FieldConfigProperty.DisplayName, + FieldConfigProperty.Filterable, + FieldConfigProperty.Mappings, + FieldConfigProperty.NoValue, + FieldConfigProperty.Thresholds, + FieldConfigProperty.Links, + FieldConfigProperty.Unit, + 'unitScale' as never, + ], + }) .setPanelOptions((builder) => { const isCodeEditor = (config: PanelOptions) => config.editorMode !== EditorMode.VISUAL; const isVisualEditor = (config: PanelOptions) => config.editorMode === EditorMode.VISUAL; diff --git a/src/types/index.ts b/src/types/index.ts index 15f58c3..59e91aa 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -3,5 +3,6 @@ export * from './editor'; export * from './gaode'; export * from './google'; export * from './panel'; +export * from './radar'; export * from './theme-editor'; export * from './visual-editor'; diff --git a/src/types/radar.ts b/src/types/radar.ts new file mode 100644 index 0000000..a8c9217 --- /dev/null +++ b/src/types/radar.ts @@ -0,0 +1,52 @@ +import { EChartOption } from 'echarts'; + +/** + * Radar Shape Options + */ +export enum RadarShapeOptions { + POLYGON = 'polygon', + CIRCLE = 'circle', +} + +/** + * Radar Indicator Item + */ +export interface RadarIndicatorItem { + name: string; + max: number; + min?: number; +} + +/** + * Radar Options + */ +export interface RadarChartOptions { + shape?: RadarShapeOptions | ''; + radius?: number | string; + indicator?: RadarIndicatorItem[]; +} + +/** + * Radar Options + */ +export interface RadarOptions { + shape?: RadarShapeOptions | ''; + radius?: number | string; + indicator?: string | ''; +} + +/** + * Radar Dimension Item + */ +export interface RadarDimensionItem { + name: string; + value: string; + uid: string; +} + +/** + * Radar Series Options + */ +export interface RadarSeriesOptions extends EChartOption.SeriesRadar { + radarDimensions: RadarDimensionItem[]; +} diff --git a/src/types/visual-editor.ts b/src/types/visual-editor.ts index 6680ddd..1c5a523 100644 --- a/src/types/visual-editor.ts +++ b/src/types/visual-editor.ts @@ -1,5 +1,7 @@ import { EChartOption } from 'echarts'; +import { RadarOptions, RadarSeriesOptions } from './radar'; + /** * Dataset Item */ @@ -114,7 +116,7 @@ export type SeriesItem = BaseSeriesOptions & | { type: SeriesType.PIE } | { type: SeriesType.SCATTER } | { type: SeriesType.EFFECTSCATTER } - | { type: SeriesType.RADAR } + | ({ type: SeriesType.RADAR } & RadarSeriesOptions) | { type: SeriesType.TREE } | { type: SeriesType.TREEMAP } | { type: SeriesType.SUNBURST } @@ -150,6 +152,13 @@ export interface VisualEditorOptions { * @type {string} */ code: string; + + /** + * Radar options + * + * @type {RadarOptions} + */ + radar?: RadarOptions; } /** diff --git a/src/utils/code-parameters.ts b/src/utils/code-parameters.ts index 5317439..67ca159 100644 --- a/src/utils/code-parameters.ts +++ b/src/utils/code-parameters.ts @@ -5,7 +5,7 @@ import { CodeParameterItem, CodeParametersBuilder } from '@volkovlabs/components import { ECharts } from 'echarts'; import echartsStat from 'echarts-stat'; -import { SeriesItem } from '../types'; +import { RadarChartOptions, SeriesItem } from '../types'; /** * Base Code Parameters Config @@ -38,7 +38,10 @@ const baseParametersConfig = { 'Display error notification.', CodeEditorSuggestionItemKind.Method ), - refresh: new CodeParameterItem<() => void>('Refresh dashboard panels using application events.', CodeEditorSuggestionItemKind.Method), + refresh: new CodeParameterItem<() => void>( + 'Refresh dashboard panels using application events.', + CodeEditorSuggestionItemKind.Method + ), }, }, echarts: new CodeParameterItem('Apache ECharts library.'), @@ -63,6 +66,7 @@ export const visualCodeParameters = new CodeParametersBuilder({ items: { dataset: new CodeParameterItem<{ source: [string[], ...unknown[]] }>('ECharts dataset.'), series: new CodeParameterItem('ECharts series.'), + radar: new CodeParameterItem('ECharts radar.'), }, }, }, diff --git a/src/utils/visual-editor.test.ts b/src/utils/visual-editor.test.ts index 41dfb89..e7bad3a 100644 --- a/src/utils/visual-editor.test.ts +++ b/src/utils/visual-editor.test.ts @@ -1,6 +1,14 @@ -import { toDataFrame } from '@grafana/data'; +import { FieldType, toDataFrame } from '@grafana/data'; -import { getDatasetSource } from './visual-editor'; +import { SeriesType } from '../types'; +import { + convertSeriesToChartOption, + getDatasetSource, + getFieldBasedOptionValue, + getRadarOptions, + getSeriesWithNewType, + multipleQueriesFields, +} from './visual-editor'; describe('Visual Editor Utils', () => { describe('getDatasetSource', () => { @@ -105,4 +113,493 @@ describe('Visual Editor Utils', () => { ]); }); }); + + /** + * Get Series With a new type + */ + describe('getSeriesWithNewType', () => { + it('Should return a line series', () => { + const item = { id: 1, name: 'Line Series', uid: 'line-1' } as any; + const newType = SeriesType.LINE; + const result = getSeriesWithNewType(item, newType); + + expect(result).toEqual({ + id: 1, + name: 'Line Series', + uid: 'line-1', + type: SeriesType.LINE, + encode: { + x: [], + y: [], + }, + }); + }); + + it('Should return a radar series', () => { + const item = { id: 2, name: 'Radar Series', uid: 'radar-2' } as any; + const newType = SeriesType.RADAR; + const result = getSeriesWithNewType(item, newType); + + expect(result).toEqual({ + id: 2, + name: 'Radar Series', + uid: 'radar-2', + type: SeriesType.RADAR, + data: [], + radarDimensions: [], + }); + }); + + it('Should return a series with a custom type (default)', () => { + const item = { id: 3, name: 'Custom Series', uid: 'custom-3' } as any; + const newType = 'custom' as SeriesType; + const result = getSeriesWithNewType(item, newType); + + expect(result).toEqual({ + id: 3, + name: 'Custom Series', + uid: 'custom-3', + type: 'custom', + }); + }); + }); + + /** + * Convert Series to chart Options + */ + describe('convertSeriesToChartOption', () => { + it('Should convert a radar series to chart option', () => { + const item = { + data: [], + id: 'RadarSeries', + uid: 'radar-set', + name: 'Radar Series', + type: SeriesType.RADAR, + radarDimensions: [ + { name: 'Dimension 1', value: 'A:Value', uid: 'value-1' }, + { name: 'Dimension 2', value: 'A:Value2', uid: 'value-2' }, + ], + } as any; + + const series = [ + { + refId: 'A', + fields: [ + { name: 'Value', type: FieldType.number, values: [10, 20, 30] }, + { name: 'Value', type: FieldType.string, values: ['10x', '20x', '30x'] }, + { name: 'Value2', type: FieldType.number, values: [40, 50, 60] }, + ], + }, + { + refId: 'B', + fields: [ + { name: 'Value', type: FieldType.number, values: [70, 80, 90] }, + { name: 'Value2', type: FieldType.number, values: [100, 110, 120] }, + ], + }, + ] as any; + + const result = convertSeriesToChartOption(item, series); + + expect(result).toEqual({ + id: 'RadarSeries', + name: 'Radar Series', + type: SeriesType.RADAR, + uid: 'radar-set', + radarDimensions: [ + { name: 'Dimension 1', value: 'A:Value', uid: 'value-1' }, + { name: 'Dimension 2', value: 'A:Value2', uid: 'value-2' }, + ], + data: [ + { name: 'Dimension 1', value: [10, 20, 30] }, + { name: 'Dimension 2', value: [40, 50, 60] }, + ], + }); + }); + + it('Should convert a radar series to chart option with empty values if no appropriate fields ', () => { + const item = { + data: [], + id: 'RadarSeries', + uid: 'radar-set', + name: 'Radar Series', + type: SeriesType.RADAR, + radarDimensions: [ + { name: 'Dimension 1', value: 'A:Value', uid: 'value-1' }, + { name: 'Dimension 2', value: 'A:Value2', uid: 'value-2' }, + ], + } as any; + + const series = [ + { + refId: 'A', + fields: [ + { name: 'Value-1', type: FieldType.number, values: [10, 20, 30] }, + { name: 'Value-2', type: FieldType.string, values: ['10x', '20x', '30x'] }, + { name: 'Value-3', type: FieldType.number, values: [40, 50, 60] }, + ], + }, + { + refId: 'B', + fields: [ + { name: 'Value-1', type: FieldType.number, values: [70, 80, 90] }, + { name: 'Value-2', type: FieldType.number, values: [100, 110, 120] }, + ], + }, + ] as any; + + const result = convertSeriesToChartOption(item, series); + + expect(result).toEqual({ + id: 'RadarSeries', + name: 'Radar Series', + type: SeriesType.RADAR, + uid: 'radar-set', + radarDimensions: [ + { name: 'Dimension 1', value: 'A:Value', uid: 'value-1' }, + { name: 'Dimension 2', value: 'A:Value2', uid: 'value-2' }, + ], + data: [ + { name: 'Dimension 1', value: [] }, + { name: 'Dimension 2', value: [] }, + ], + }); + }); + }); + + /** + * Get Field + */ + describe('getFieldBasedOptionValue', () => { + it('Should return the field value when field is found', () => { + const series = [ + { refId: 'A', fields: [{ name: 'field1', type: 'number', values: [1, 2, 3] }] }, + { refId: 'B', fields: [{ name: 'field2', type: 'string', values: ['a', 'b', 'c'] }] }, + ] as any; + + const fieldValue = getFieldBasedOptionValue('A:field1', series); + expect(fieldValue).toEqual({ name: 'field1', type: 'number', values: [1, 2, 3] }); + }); + + it('Should return undefined when field is not found', () => { + const series = [ + { refId: 'A', fields: [{ name: 'field1', type: 'number', values: [1, 2, 3] }] }, + { refId: 'B', fields: [{ name: 'field2', type: 'string', values: ['a', 'b', 'c'] }] }, + ] as any; + + const fieldValue = getFieldBasedOptionValue('A:field3', series); + expect(fieldValue).toBeUndefined(); + }); + + it('Should return undefined when frame is not found', () => { + const series = [ + { refId: 'A', fields: [{ name: 'field1', type: 'number', values: [1, 2, 3] }] }, + { refId: 'B', fields: [{ name: 'field2', type: 'string', values: ['a', 'b', 'c'] }] }, + ] as any; + + const fieldValue = getFieldBasedOptionValue('C:field1', series); + expect(fieldValue).toBeUndefined(); + }); + }); + + /** + * Radar options + */ + describe('getRadarOptions', () => { + const editor = { + code: 'console.log()', + radar: { + indicator: 'A:Category', + radius: 0, + shape: 'circle', + }, + series: [ + { + type: SeriesType.RADAR, + radarDimensions: [ + { + name: 'dimension 1', + value: 'A:Value', + }, + { + name: 'dimension 2', + value: 'A:Value2', + }, + ], + }, + ], + } as any; + + const series = [ + { + fields: [ + { + name: 'Category', + type: FieldType.string, + values: ['Test', 'Test 1', 'Test 2'], + }, + { + name: 'Value', + type: FieldType.number, + state: { + range: { + min: 10, + max: 250, + }, + }, + values: [10, 50, 250], + }, + { + state: { + range: { + min: 15, + max: 350, + }, + }, + name: 'Value2', + type: FieldType.number, + values: [15, 75, 350], + }, + ], + name: 'Test', + refId: 'A', + }, + ] as any; + + it('Should get radar options', () => { + const result = getRadarOptions(editor, series); + + expect(result).toEqual({ + indicator: [ + { max: 350, min: 10, name: 'Test' }, + { max: 350, min: 10, name: 'Test 1' }, + { max: 350, min: 10, name: 'Test 2' }, + ], + shape: 'circle', + }); + }); + + it('Should return radius', () => { + const editor = { + code: 'console.log()', + radar: { + indicator: 'A:Category', + radius: 50, + shape: 'circle', + }, + series: [ + { + type: SeriesType.RADAR, + radarDimensions: [ + { + name: 'dimension 1', + value: 'A:Value', + }, + { + name: 'dimension 2', + value: 'A:Value2', + }, + ], + }, + ], + } as any; + + const result = getRadarOptions(editor, series); + + expect(result).toEqual({ + indicator: [ + { max: 350, min: 10, name: 'Test' }, + { max: 350, min: 10, name: 'Test 1' }, + { max: 350, min: 10, name: 'Test 2' }, + ], + shape: 'circle', + radius: '50%', + }); + }); + + it('Should return empty indicator if field not found', () => { + const editor = { + code: 'console.log()', + radar: { + indicator: 'A:Category2', + radius: 50, + shape: 'circle', + }, + series: [ + { + type: SeriesType.RADAR, + radarDimensions: [ + { + name: 'dimension 1', + value: 'A:Value', + }, + { + name: 'dimension 2', + value: 'A:Value2', + }, + ], + }, + ], + } as any; + + const result = getRadarOptions(editor, series); + + expect(result).toEqual({ + indicator: [], + shape: 'circle', + radius: '50%', + }); + }); + + it('Should return 0 value for min max if value doesn`t have min or max', () => { + const series = [ + { + fields: [ + { + name: 'Category', + type: FieldType.string, + values: ['Test', 'Test 1', 'Test 2'], + }, + { + name: 'Value', + type: FieldType.number, + state: { + range: { + min: 0, + max: 0, + }, + }, + values: [10, 50, 250], + }, + { + state: { + range: { + min: 0, + max: 0, + }, + }, + name: 'Value2', + type: FieldType.number, + values: [15, 75, 350], + }, + ], + name: 'Test', + refId: 'A', + }, + ] as any; + + const result = getRadarOptions(editor, series); + + expect(result).toEqual({ + indicator: [ + { max: 0, min: 0, name: 'Test' }, + { max: 0, min: 0, name: 'Test 1' }, + { max: 0, min: 0, name: 'Test 2' }, + ], + shape: 'circle', + }); + }); + }); + + /** + * multipleQueriesFields + */ + describe('multipleQueriesFields', () => { + it('Should return correct values and labels for fields with refId', () => { + const data = [ + { + refId: 'A', + fields: [ + { name: 'field1', type: 'string' }, + { name: 'field2', type: 'number' }, + ], + }, + { + refId: 'B', + fields: [{ name: 'field3', type: 'boolean' }], + }, + ] as any; + + const result = multipleQueriesFields(data); + + expect(result).toEqual([ + { + value: 'A:field1', + label: 'A:field1', + refId: 'A', + field: 'field1', + }, + { + value: 'A:field2', + label: 'A:field2', + refId: 'A', + field: 'field2', + }, + { + value: 'B:field3', + label: 'B:field3', + refId: 'B', + field: 'field3', + }, + ]); + }); + + it('Should return correct values and labels for fields without refId', () => { + const data = [ + { + fields: [ + { name: 'field1', type: 'string' }, + { name: 'field2', type: 'number' }, + ], + }, + ] as any; + + const result = multipleQueriesFields(data); + + expect(result).toEqual([ + { + value: 'field1', + label: 'field1', + refId: '', + field: 'field1', + }, + { + value: 'field2', + label: 'field2', + refId: '', + field: 'field2', + }, + ]); + }); + + it('Should filter fields based on provided types', () => { + const data = [ + { + refId: 'A', + fields: [ + { name: 'field1', type: FieldType.string }, + { name: 'field2', type: FieldType.number }, + { name: 'field3', type: FieldType.boolean }, + ], + }, + ] as any; + + const result = multipleQueriesFields(data, [FieldType.string, FieldType.boolean]); + + expect(result).toEqual([ + { + value: 'A:field1', + label: 'A:field1', + refId: 'A', + field: 'field1', + }, + { + value: 'A:field3', + label: 'A:field3', + refId: 'A', + field: 'field3', + }, + ]); + }); + }); }); diff --git a/src/utils/visual-editor.ts b/src/utils/visual-editor.ts index 66f5471..78e7f8a 100644 --- a/src/utils/visual-editor.ts +++ b/src/utils/visual-editor.ts @@ -1,9 +1,27 @@ -import { DataFrame } from '@grafana/data'; +import { DataFrame, FieldType, SelectableValue } from '@grafana/data'; +import { findField } from '@volkovlabs/grafana-utils'; import { v4 as uuidv4 } from 'uuid'; -import { DatasetItem, SeriesByType, SeriesItem, SeriesType } from '../types'; +import { DatasetItem, RadarChartOptions, SeriesByType, SeriesItem, SeriesType, VisualEditorOptions } from '../types'; import { getFieldValues } from './data-frame'; +/** + * get Field based on option value + * @param fieldName + * @param series + */ +export const getFieldBasedOptionValue = (fieldName: string, series: DataFrame[]) => { + const valueFields = fieldName.split(':'); + const field = findField(series, (field, frame) => { + if (frame?.refId === valueFields[0]) { + return field.name === valueFields[1]; + } + return false; + }); + + return field; +}; + /** * Reorder * @param list @@ -83,6 +101,14 @@ export const getSeriesWithNewType = { + switch (item.type) { + case SeriesType.RADAR: { + const currentData = item.radarDimensions.map((dimension) => { + let currentValue: number[] = []; + if (dimension.value) { + const valueFields = dimension.value.split(':'); + const field = findField(series, (field, frame) => { + if (frame?.refId === valueFields[0]) { + return field.name === valueFields[1] && field.type === FieldType.number; + } + return false; + }); + currentValue = field ? field.values : []; + } + + return { + name: dimension.name, + value: currentValue, + }; + }); + + return { + ...item, + data: currentData, + }; + } + default: { + return item; + } + } +}; + /** * Get Series Unique Id */ export const getSeriesUniqueId = () => uuidv4(); + +/** + * Data Series + * @param visualEditorSeries + * @param series + */ +export const getDataSeries = (visualEditorSeries: SeriesItem[], series: DataFrame[]) => { + const newVisualEditorSeries = visualEditorSeries.map((item) => { + return convertSeriesToChartOption(item, series); + }); + return newVisualEditorSeries; +}; + +/** + * Check type in Series + * @param series + * @param type + */ +export const isTypeExistInSeries = (series: SeriesItem[], type: string) => { + return series.some((value) => value.type === type); +}; + +/** + * Get Radar Chart Options + * @param visualEditor + */ +export const getRadarOptions = (visualEditor: VisualEditorOptions, series: DataFrame[]): RadarChartOptions => { + /** + * Default radar options + */ + const radarOptions: RadarChartOptions = { + shape: visualEditor.radar?.shape || '', + indicator: [], + }; + + /** + * Get All dimensions for Radar from series + */ + const dimensions = visualEditor.series.flatMap((item) => { + if (item.type === SeriesType.RADAR) { + return item.radarDimensions; + } + return []; + }); + + if (visualEditor.radar?.indicator && dimensions.length) { + /** + * Get Names for indicator lines + */ + const indicatorValues = getFieldBasedOptionValue(visualEditor.radar?.indicator, series)?.values || []; + + /** + * Get max values from fields + */ + const dimensionsMaxValues = dimensions.flatMap((item) => { + const field = getFieldBasedOptionValue(item.value, series); + return field?.state?.range?.max || 0; + }); + + /** + * Get min values from fields + */ + const dimensionsMinValues = dimensions.flatMap((item) => { + const field = getFieldBasedOptionValue(item.value, series); + return field?.state?.range?.min || 0; + }); + + /** + * Define radar indicator option + */ + radarOptions.indicator = indicatorValues.map((item) => ({ + name: item, + max: Math.max(...dimensionsMaxValues), + min: Math.min(...dimensionsMinValues), + })); + } + + /** + * Set radar option in percentage + */ + if (visualEditor.radar?.radius) { + radarOptions.radius = `${visualEditor.radar?.radius}%`; + } + + return radarOptions; +}; + +/** + * Get Fields for multiple Queries + * @param data + * @param filterTypes + */ +export const multipleQueriesFields = (data: DataFrame[], filterTypes?: FieldType[]) => { + return data.reduce((acc: SelectableValue[], dataFrame) => { + return acc.concat( + dataFrame.fields + .filter((field) => (filterTypes ? filterTypes.includes(field.type) : true)) + .map((field) => ({ + value: `${dataFrame.refId ? `${dataFrame.refId}:` : ''}${field.name}`, + label: `${dataFrame.refId ? `${dataFrame.refId}:` : ''}${field.name}`, + refId: dataFrame.refId || '', + field: field.name, + })) + ); + }, []); +}; From 656650e0999b4bbbf0f439d2ba6636d7ae5e3907 Mon Sep 17 00:00:00 2001 From: vitPinchuk Date: Wed, 31 Jul 2024 09:53:52 +0300 Subject: [PATCH 2/8] dashboards updated --- echarts.volkovlabs.io/home.json | 123 ++++++++++++++++---- echarts.volkovlabs.io/radar.json | 190 +++++++++++++++++++++++++++++-- 2 files changed, 280 insertions(+), 33 deletions(-) diff --git a/echarts.volkovlabs.io/home.json b/echarts.volkovlabs.io/home.json index 056b181..9fe058c 100644 --- a/echarts.volkovlabs.io/home.json +++ b/echarts.volkovlabs.io/home.json @@ -90,7 +90,7 @@ ] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "targets": [ { "datasource": { @@ -176,7 +176,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "targets": [ { "datasource": { @@ -257,7 +257,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "title": "Calendar", "type": "volkovlabs-echarts-panel" }, @@ -306,7 +306,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "title": "Candlestick", "type": "volkovlabs-echarts-panel" }, @@ -361,7 +361,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "targets": [ { "datasource": { @@ -431,7 +431,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "title": "Geo/Map", "type": "volkovlabs-echarts-panel" }, @@ -480,7 +480,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "title": "Graph", "type": "volkovlabs-echarts-panel" }, @@ -497,7 +497,6 @@ "y": 20 }, "id": 2, - "links": [], "options": { "baidu": { "callback": "bmapReady", @@ -556,7 +555,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "targets": [ { "datasource": { @@ -761,7 +760,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "targets": [ { "datasource": { @@ -846,7 +845,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "targets": [ { "datasource": { @@ -887,6 +886,12 @@ "type": "marcusolsson-static-datasource", "uid": "4ytGZmF4k" }, + "fieldConfig": { + "defaults": { + "max": 55000 + }, + "overrides": [] + }, "gridPos": { "h": 10, "w": 8, @@ -903,7 +908,7 @@ "format": "auto", "height": 600 }, - "editorMode": "code", + "editorMode": "visual", "gaode": { "key": "", "plugin": "AMap.Scale,AMap.ToolBar" @@ -921,13 +926,87 @@ "name": "default" }, "visualEditor": { - "code": "console.log(context);\nreturn {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "code": "context.panel.chart.on('click', (params) => {\n context.grafana.locationService.replace('/d/J06Bi4F4k/radar?orgId=1');\n});\n\nreturn {\n\n radar: context.editor.radar,\n series: context.editor.series,\n graphic: [\n {\n type: 'group',\n rotation: Math.PI / 4,\n bounding: 'raw',\n right: 110,\n bottom: 110,\n z: 100,\n children: [\n {\n type: 'rect',\n left: 'center',\n top: 'center',\n z: 100,\n shape: {\n width: 400,\n height: 50\n },\n style: {\n fill: 'rgba(0,0,0,0.3)'\n }\n },\n {\n type: 'text',\n left: 'center',\n top: 'center',\n z: 100,\n style: {\n fill: '#fff',\n text: 'CLICK FOR MORE',\n font: 'bold 26px sans-serif'\n }\n }\n ]\n }]\n}\n", "codeHeight": 600, - "dataset": [], - "series": [] + "dataset": [ + { + "name": "Allocated Budget", + "source": "A" + }, + { + "name": "Actual Spending", + "source": "A" + } + ], + "radar": { + "indicator": "A:Indicator Names ", + "radius": 70, + "shape": "circle" + }, + "series": [ + { + "data": [], + "id": "Radar", + "name": "Radar", + "radarDimensions": [ + { + "name": "Allocated Budget", + "uid": "e824f052-c662-4e10-a4d5-7172c819fea2", + "value": "A:Allocated Budget" + }, + { + "name": "Actual Spending", + "uid": "16dda71b-d271-40f5-a860-a982ed23a042", + "value": "A:Actual Spending" + } + ], + "type": "radar", + "uid": "288c841b-2101-463e-b2c9-d5451702b049" + } + ] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", + "targets": [ + { + "datasource": { + "type": "marcusolsson-static-datasource", + "uid": "4ytGZmF4k" + }, + "frame": { + "fields": [ + { + "config": {}, + "name": "Indicator Names ", + "type": "string", + "values": [ + "Sales", + "Administration", + "Information Technology", + "Customer Support", + "Development", + "Marketing" + ] + }, + { + "config": {}, + "name": "Allocated Budget", + "type": "number", + "values": [4200, 3000, 20000, 35000, 50000, 18000] + }, + { + "config": {}, + "name": "Actual Spending", + "type": "number", + "values": [5000, 14000, 28000, 25000, 42000, 21000] + } + ], + "meta": {}, + "name": "Radar" + }, + "refId": "A" + } + ], "title": "Radar", "type": "volkovlabs-echarts-panel" }, @@ -976,7 +1055,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "title": "Sankey", "type": "volkovlabs-echarts-panel" }, @@ -1025,7 +1104,7 @@ "series": [] } }, - "pluginVersion": "6.0.0", + "pluginVersion": "6.2.0", "title": "Scatter", "type": "volkovlabs-echarts-panel" }, @@ -1055,7 +1134,7 @@ "key": "", "plugin": "AMap.Scale,AMap.ToolBar" }, - "getOption": "context.panel.chart.on('click', (params) => {\n context.grafana.locationService.replace('/d/vvxC_VFVz/sunburst?orgId=1');\n});\n\nconst item1 = {\n color: '#F54F4A'\n};\nconst item2 = {\n color: '#FF8C75'\n};\nconst item3 = {\n color: '#FFB499'\n};\n\nconst values = [\n {\n children: [\n {\n value: 5,\n children: [\n {\n value: 1,\n itemStyle: item1\n },\n {\n value: 2,\n children: [\n {\n value: 1,\n itemStyle: item2\n }\n ]\n },\n {\n children: [\n {\n value: 1\n }\n ]\n }\n ],\n itemStyle: item1\n },\n {\n value: 10,\n children: [\n {\n value: 6,\n children: [\n {\n value: 1,\n itemStyle: item1\n },\n {\n value: 1\n },\n {\n value: 1,\n itemStyle: item2\n },\n {\n value: 1\n }\n ],\n itemStyle: item3\n },\n {\n value: 2,\n children: [\n {\n value: 1\n }\n ],\n itemStyle: item3\n },\n {\n children: [\n {\n value: 1,\n itemStyle: item2\n }\n ]\n }\n ],\n itemStyle: item1\n }\n ],\n itemStyle: item1\n },\n {\n value: 9,\n children: [\n {\n value: 4,\n children: [\n {\n value: 2,\n itemStyle: item2\n },\n {\n children: [\n {\n value: 1,\n itemStyle: item1\n }\n ]\n }\n ],\n itemStyle: item1\n },\n {\n children: [\n {\n value: 3,\n children: [\n {\n value: 1\n },\n {\n value: 1,\n itemStyle: item2\n }\n ]\n }\n ],\n itemStyle: item3\n }\n ],\n itemStyle: item2\n },\n {\n value: 7,\n children: [\n {\n children: [\n {\n value: 1,\n itemStyle: item3\n },\n {\n value: 3,\n children: [\n {\n value: 1,\n itemStyle: item2\n },\n {\n value: 1\n }\n ],\n itemStyle: item2\n },\n {\n value: 2,\n children: [\n {\n value: 1\n },\n {\n value: 1,\n itemStyle: item1\n }\n ],\n itemStyle: item1\n }\n ],\n itemStyle: item3\n }\n ],\n itemStyle: item1\n },\n {\n children: [\n {\n value: 6,\n children: [\n {\n value: 1,\n itemStyle: item2\n },\n {\n value: 2,\n children: [\n {\n value: 2,\n itemStyle: item2\n }\n ],\n itemStyle: item1\n },\n {\n value: 1,\n itemStyle: item3\n }\n ],\n itemStyle: item3\n },\n {\n value: 3,\n children: [\n {\n value: 1\n },\n {\n children: [\n {\n value: 1,\n itemStyle: item2\n }\n ]\n },\n {\n value: 1\n }\n ],\n itemStyle: item3\n }\n ],\n itemStyle: item1\n }\n];\n\nreturn {\n series: {\n radius: ['15%', '80%'],\n type: 'sunburst',\n sort: undefined,\n emphasis: {\n focus: 'ancestor'\n },\n data: values,\n label: {\n rotate: 'radial'\n },\n levels: [],\n itemStyle: {\n color: '#ddd',\n borderWidth: 2\n }\n },\n graphic: [\n {\n type: 'group',\n rotation: Math.PI / 4,\n bounding: 'raw',\n right: 110,\n bottom: 110,\n z: 100,\n children: [\n {\n type: 'rect',\n left: 'center',\n top: 'center',\n z: 100,\n shape: {\n width: 400,\n height: 50\n },\n style: {\n fill: 'rgba(0,0,0,0.3)'\n }\n },\n {\n type: 'text',\n left: 'center',\n top: 'center',\n z: 100,\n style: {\n fill: '#fff',\n text: 'CLICK FOR MORE',\n font: 'bold 26px sans-serif'\n }\n }\n ]\n }]\n};", + "getOption": "context.panel.chart.on('click', (params) => {\n context.grafana.context.grafana.locationService.replace('/d/vvxC_VFVz/sunburst?orgId=1');\n});\n\nconst item1 = {\n color: '#F54F4A'\n};\nconst item2 = {\n color: '#FF8C75'\n};\nconst item3 = {\n color: '#FFB499'\n};\n\nconst values = [\n {\n children: [\n {\n value: 5,\n children: [\n {\n value: 1,\n itemStyle: item1\n },\n {\n value: 2,\n children: [\n {\n value: 1,\n itemStyle: item2\n }\n ]\n },\n {\n children: [\n {\n value: 1\n }\n ]\n }\n ],\n itemStyle: item1\n },\n {\n value: 10,\n children: [\n {\n value: 6,\n children: [\n {\n value: 1,\n itemStyle: item1\n },\n {\n value: 1\n },\n {\n value: 1,\n itemStyle: item2\n },\n {\n value: 1\n }\n ],\n itemStyle: item3\n },\n {\n value: 2,\n children: [\n {\n value: 1\n }\n ],\n itemStyle: item3\n },\n {\n children: [\n {\n value: 1,\n itemStyle: item2\n }\n ]\n }\n ],\n itemStyle: item1\n }\n ],\n itemStyle: item1\n },\n {\n value: 9,\n children: [\n {\n value: 4,\n children: [\n {\n value: 2,\n itemStyle: item2\n },\n {\n children: [\n {\n value: 1,\n itemStyle: item1\n }\n ]\n }\n ],\n itemStyle: item1\n },\n {\n children: [\n {\n value: 3,\n children: [\n {\n value: 1\n },\n {\n value: 1,\n itemStyle: item2\n }\n ]\n }\n ],\n itemStyle: item3\n }\n ],\n itemStyle: item2\n },\n {\n value: 7,\n children: [\n {\n children: [\n {\n value: 1,\n itemStyle: item3\n },\n {\n value: 3,\n children: [\n {\n value: 1,\n itemStyle: item2\n },\n {\n value: 1\n }\n ],\n itemStyle: item2\n },\n {\n value: 2,\n children: [\n {\n value: 1\n },\n {\n value: 1,\n itemStyle: item1\n }\n ],\n itemStyle: item1\n }\n ],\n itemStyle: item3\n }\n ],\n itemStyle: item1\n },\n {\n children: [\n {\n value: 6,\n children: [\n {\n value: 1,\n itemStyle: item2\n },\n {\n value: 2,\n children: [\n {\n value: 2,\n itemStyle: item2\n }\n ],\n itemStyle: item1\n },\n {\n value: 1,\n itemStyle: item3\n }\n ],\n itemStyle: item3\n },\n {\n value: 3,\n children: [\n {\n value: 1\n },\n {\n children: [\n {\n value: 1,\n itemStyle: item2\n }\n ]\n },\n {\n value: 1\n }\n ],\n itemStyle: item3\n }\n ],\n itemStyle: item1\n }\n];\n\nreturn {\n series: {\n radius: ['15%', '80%'],\n type: 'sunburst',\n sort: undefined,\n emphasis: {\n focus: 'ancestor'\n },\n data: values,\n label: {\n rotate: 'radial'\n },\n levels: [],\n itemStyle: {\n color: '#ddd',\n borderWidth: 2\n }\n },\n graphic: [\n {\n type: 'group',\n rotation: Math.PI / 4,\n bounding: 'raw',\n right: 110,\n bottom: 110,\n z: 100,\n children: [\n {\n type: 'rect',\n left: 'center',\n top: 'center',\n z: 100,\n shape: {\n width: 400,\n height: 50\n },\n style: {\n fill: 'rgba(0,0,0,0.3)'\n }\n },\n {\n type: 'text',\n left: 'center',\n top: 'center',\n z: 100,\n style: {\n fill: '#fff',\n text: 'CLICK FOR MORE',\n font: 'bold 26px sans-serif'\n }\n }\n ]\n }]\n};", "google": { "callback": "gmapReady", "key": "" @@ -1074,7 +1153,7 @@ "series": [] } }, - "pluginVersion": "5.2.0", + "pluginVersion": "6.2.0", "title": "Sunburst", "type": "volkovlabs-echarts-panel" }, @@ -1104,7 +1183,7 @@ "key": "", "plugin": "AMap.Scale,AMap.ToolBar" }, - "getOption": "context.panel.chart.on('click', (params) => {\n context.grafana.locationService.replace('/d/FlnnZ4F4k/treemap?orgId=1');\n});\n\nconst values = {\n \"name\": \"echarts\",\n \"size\": 3835461,\n \"children\": [\n {\n \"name\": \"action\",\n \"size\": 2307,\n \"children\": [\n {\n \"name\": \"action/roamHelper.ts\",\n \"size\": 2307,\n \"value\": 2307\n }\n ],\n \"value\": 2307\n },\n {\n \"name\": \"animation\",\n \"size\": 44515,\n \"children\": [\n {\n \"name\": \"animation/basicTrasition.ts\",\n \"size\": 11322,\n \"value\": 11322\n },\n {\n \"name\": \"animation/morphTransitionHelper.ts\",\n \"size\": 8706,\n \"value\": 8706\n },\n {\n \"name\": \"animation/universalTransition.ts\",\n \"size\": 24487,\n \"value\": 24487\n }\n ],\n \"value\": 44515\n },\n {\n \"name\": \"chart\",\n \"size\": 1059597,\n \"children\": [\n {\n \"name\": \"chart/bar\",\n \"size\": 90538,\n \"children\": [\n {\n \"name\": \"chart/bar/BarSeries.ts\",\n \"size\": 4489,\n \"value\": 4489\n },\n {\n \"name\": \"chart/bar/BarView.ts\",\n \"size\": 41509,\n \"value\": 41509\n },\n {\n \"name\": \"chart/bar/BaseBarSeries.ts\",\n \"size\": 3754,\n \"value\": 3754\n },\n {\n \"name\": \"chart/bar/PictorialBarSeries.ts\",\n \"size\": 5194,\n \"value\": 5194\n },\n {\n \"name\": \"chart/bar/PictorialBarView.ts\",\n \"size\": 31640,\n \"value\": 31640\n },\n {\n \"name\": \"chart/bar/install.ts\",\n \"size\": 2627,\n \"value\": 2627\n },\n {\n \"name\": \"chart/bar/installPictorialBar.ts\",\n \"size\": 1325,\n \"value\": 1325\n }\n ],\n \"value\": 90538\n },\n {\n \"name\": \"chart/bar.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"chart/boxplot\",\n \"size\": 24408,\n \"children\": [\n {\n \"name\": \"chart/boxplot/BoxplotSeries.ts\",\n \"size\": 3891,\n \"value\": 3891\n },\n {\n \"name\": \"chart/boxplot/BoxplotView.ts\",\n \"size\": 5968,\n \"value\": 5968\n },\n {\n \"name\": \"chart/boxplot/boxplotLayout.ts\",\n \"size\": 6718,\n \"value\": 6718\n },\n {\n \"name\": \"chart/boxplot/boxplotTransform.ts\",\n \"size\": 2073,\n \"value\": 2073\n },\n {\n \"name\": \"chart/boxplot/boxplotVisual.ts\",\n \"size\": 1024,\n \"value\": 1024\n },\n {\n \"name\": \"chart/boxplot/install.ts\",\n \"size\": 1411,\n \"value\": 1411\n },\n {\n \"name\": \"chart/boxplot/prepareBoxplotData.ts\",\n \"size\": 3323,\n \"value\": 3323\n }\n ],\n \"value\": 24408\n },\n {\n \"name\": \"chart/boxplot.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"chart/candlestick\",\n \"size\": 31115,\n \"children\": [\n {\n \"name\": \"chart/candlestick/CandlestickSeries.ts\",\n \"size\": 4548,\n \"value\": 4548\n },\n {\n \"name\": \"chart/candlestick/CandlestickView.ts\",\n \"size\": 11680,\n \"value\": 11680\n },\n {\n \"name\": \"chart/candlestick/candlestickLayout.ts\",\n \"size\": 9182,\n \"value\": 9182\n },\n {\n \"name\": \"chart/candlestick/candlestickVisual.ts\",\n \"size\": 2990,\n \"value\": 2990\n },\n {\n \"name\": \"chart/candlestick/install.ts\",\n \"size\": 1447,\n \"value\": 1447\n },\n {\n \"name\": \"chart/candlestick/preprocessor.ts\",\n \"size\": 1268,\n \"value\": 1268\n }\n ],\n \"value\": 31115\n },\n {\n \"name\": \"chart/candlestick.ts\",\n \"size\": 891,\n \"value\": 891\n },\n {\n \"name\": \"chart/custom\",\n \"size\": 87227,\n \"children\": [\n {\n \"name\": \"chart/custom/CustomSeries.ts\",\n \"size\": 12400,\n \"value\": 12400\n },\n {\n \"name\": \"chart/custom/CustomView.ts\",\n \"size\": 60468,\n \"value\": 60468\n },\n {\n \"name\": \"chart/custom/install.ts\",\n \"size\": 1129,\n \"value\": 1129\n },\n {\n \"name\": \"chart/custom/prepare.ts\",\n \"size\": 13230,\n \"value\": 13230\n }\n ],\n \"value\": 87227\n },\n {\n \"name\": \"chart/custom.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"chart/effectScatter\",\n \"size\": 8799,\n \"children\": [\n {\n \"name\": \"chart/effectScatter/EffectScatterSeries.ts\",\n \"size\": 4446,\n \"value\": 4446\n },\n {\n \"name\": \"chart/effectScatter/EffectScatterView.ts\",\n \"size\": 3082,\n \"value\": 3082\n },\n {\n \"name\": \"chart/effectScatter/install.ts\",\n \"size\": 1271,\n \"value\": 1271\n }\n ],\n \"value\": 8799\n },\n {\n \"name\": \"chart/effectScatter.ts\",\n \"size\": 893,\n \"value\": 893\n },\n {\n \"name\": \"chart/funnel\",\n \"size\": 28181,\n \"children\": [\n {\n \"name\": \"chart/funnel/FunnelSeries.ts\",\n \"size\": 5960,\n \"value\": 5960\n },\n {\n \"name\": \"chart/funnel/FunnelView.ts\",\n \"size\": 6781,\n \"value\": 6781\n },\n {\n \"name\": \"chart/funnel/funnelLayout.ts\",\n \"size\": 14126,\n \"value\": 14126\n },\n {\n \"name\": \"chart/funnel/install.ts\",\n \"size\": 1314,\n \"value\": 1314\n }\n ],\n \"value\": 28181\n },\n {\n \"name\": \"chart/funnel.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"chart/gauge\",\n \"size\": 37230,\n \"children\": [\n {\n \"name\": \"chart/gauge/GaugeSeries.ts\",\n \"size\": 7859,\n \"value\": 7859\n },\n {\n \"name\": \"chart/gauge/GaugeView.ts\",\n \"size\": 26107,\n \"value\": 26107\n },\n {\n \"name\": \"chart/gauge/PointerPath.ts\",\n \"size\": 2151,\n \"value\": 2151\n },\n {\n \"name\": \"chart/gauge/install.ts\",\n \"size\": 1113,\n \"value\": 1113\n }\n ],\n \"value\": 37230\n },\n {\n \"name\": \"chart/gauge.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"chart/graph\",\n \"size\": 74973,\n \"children\": [\n {\n \"name\": \"chart/graph/GraphSeries.ts\",\n \"size\": 14275,\n \"value\": 14275\n },\n {\n \"name\": \"chart/graph/GraphView.ts\",\n \"size\": 10843,\n \"value\": 10843\n },\n {\n \"name\": \"chart/graph/adjustEdge.ts\",\n \"size\": 6122,\n \"value\": 6122\n },\n {\n \"name\": \"chart/graph/categoryFilter.ts\",\n \"size\": 2191,\n \"value\": 2191\n },\n {\n \"name\": \"chart/graph/categoryVisual.ts\",\n \"size\": 3546,\n \"value\": 3546\n },\n {\n \"name\": \"chart/graph/circularLayout.ts\",\n \"size\": 1220,\n \"value\": 1220\n },\n {\n \"name\": \"chart/graph/circularLayoutHelper.ts\",\n \"size\": 5653,\n \"value\": 5653\n },\n {\n \"name\": \"chart/graph/createView.ts\",\n \"size\": 3700,\n \"value\": 3700\n },\n {\n \"name\": \"chart/graph/edgeVisual.ts\",\n \"size\": 3507,\n \"value\": 3507\n },\n {\n \"name\": \"chart/graph/forceHelper.ts\",\n \"size\": 7070,\n \"value\": 7070\n },\n {\n \"name\": \"chart/graph/forceLayout.ts\",\n \"size\": 7295,\n \"value\": 7295\n },\n {\n \"name\": \"chart/graph/graphHelper.ts\",\n \"size\": 1616,\n \"value\": 1616\n },\n {\n \"name\": \"chart/graph/install.ts\",\n \"size\": 3086,\n \"value\": 3086\n },\n {\n \"name\": \"chart/graph/simpleLayout.ts\",\n \"size\": 2582,\n \"value\": 2582\n },\n {\n \"name\": \"chart/graph/simpleLayoutHelper.ts\",\n \"size\": 2267,\n \"value\": 2267\n }\n ],\n \"value\": 74973\n },\n {\n \"name\": \"chart/graph.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"chart/heatmap\",\n \"size\": 24819,\n \"children\": [\n {\n \"name\": \"chart/heatmap/HeatmapLayer.ts\",\n \"size\": 6056,\n \"value\": 6056\n },\n {\n \"name\": \"chart/heatmap/HeatmapSeries.ts\",\n \"size\": 3602,\n \"value\": 3602\n },\n {\n \"name\": \"chart/heatmap/HeatmapView.ts\",\n \"size\": 14036,\n \"value\": 14036\n },\n {\n \"name\": \"chart/heatmap/install.ts\",\n \"size\": 1125,\n \"value\": 1125\n }\n ],\n \"value\": 24819\n },\n {\n \"name\": \"chart/heatmap.ts\",\n \"size\": 888,\n \"value\": 888\n },\n {\n \"name\": \"chart/helper\",\n \"size\": 133086,\n \"children\": [\n {\n \"name\": \"chart/helper/EffectLine.ts\",\n \"size\": 8279,\n \"value\": 8279\n },\n {\n \"name\": \"chart/helper/EffectPolyline.ts\",\n \"size\": 3707,\n \"value\": 3707\n },\n {\n \"name\": \"chart/helper/EffectSymbol.ts\",\n \"size\": 8513,\n \"value\": 8513\n },\n {\n \"name\": \"chart/helper/LargeLineDraw.ts\",\n \"size\": 8490,\n \"value\": 8490\n },\n {\n \"name\": \"chart/helper/LargeSymbolDraw.ts\",\n \"size\": 9624,\n \"value\": 9624\n },\n {\n \"name\": \"chart/helper/Line.ts\",\n \"size\": 18271,\n \"value\": 18271\n },\n {\n \"name\": \"chart/helper/LineDraw.ts\",\n \"size\": 7187,\n \"value\": 7187\n },\n {\n \"name\": \"chart/helper/LinePath.ts\",\n \"size\": 2836,\n \"value\": 2836\n },\n {\n \"name\": \"chart/helper/Polyline.ts\",\n \"size\": 3035,\n \"value\": 3035\n },\n {\n \"name\": \"chart/helper/Symbol.ts\",\n \"size\": 13637,\n \"value\": 13637\n },\n {\n \"name\": \"chart/helper/SymbolDraw.ts\",\n \"size\": 10007,\n \"value\": 10007\n },\n {\n \"name\": \"chart/helper/createClipPathFromCoordSys.ts\",\n \"size\": 4784,\n \"value\": 4784\n },\n {\n \"name\": \"chart/helper/createGraphFromNodeEdge.ts\",\n \"size\": 3956,\n \"value\": 3956\n },\n {\n \"name\": \"chart/helper/createListFromArray.ts\",\n \"size\": 5728,\n \"value\": 5728\n },\n {\n \"name\": \"chart/helper/createListSimply.ts\",\n \"size\": 1701,\n \"value\": 1701\n },\n {\n \"name\": \"chart/helper/createRenderPlanner.ts\",\n \"size\": 2050,\n \"value\": 2050\n },\n {\n \"name\": \"chart/helper/enableAriaDecalForTree.ts\",\n \"size\": 1578,\n \"value\": 1578\n },\n {\n \"name\": \"chart/helper/labelHelper.ts\",\n \"size\": 2193,\n \"value\": 2193\n },\n {\n \"name\": \"chart/helper/multipleGraphEdgeHelper.ts\",\n \"size\": 7494,\n \"value\": 7494\n },\n {\n \"name\": \"chart/helper/pieHelper.ts\",\n \"size\": 1510,\n \"value\": 1510\n },\n {\n \"name\": \"chart/helper/treeHelper.ts\",\n \"size\": 2724,\n \"value\": 2724\n },\n {\n \"name\": \"chart/helper/whiskerBoxCommon.ts\",\n \"size\": 5782,\n \"value\": 5782\n }\n ],\n \"value\": 133086\n },\n {\n \"name\": \"chart/line\",\n \"size\": 78825,\n \"children\": [\n {\n \"name\": \"chart/line/LineSeries.ts\",\n \"size\": 7339,\n \"value\": 7339\n },\n {\n \"name\": \"chart/line/LineView.ts\",\n \"size\": 46175,\n \"value\": 46175\n },\n {\n \"name\": \"chart/line/helper.ts\",\n \"size\": 4127,\n \"value\": 4127\n },\n {\n \"name\": \"chart/line/install.ts\",\n \"size\": 2049,\n \"value\": 2049\n },\n {\n \"name\": \"chart/line/lineAnimationDiff.ts\",\n \"size\": 6738,\n \"value\": 6738\n },\n {\n \"name\": \"chart/line/poly.ts\",\n \"size\": 12397,\n \"value\": 12397\n }\n ],\n \"value\": 78825\n },\n {\n \"name\": \"chart/line.ts\",\n \"size\": 884,\n \"value\": 884\n },\n {\n \"name\": \"chart/lines\",\n \"size\": 28837,\n \"children\": [\n {\n \"name\": \"chart/lines/LinesSeries.ts\",\n \"size\": 12955,\n \"value\": 12955\n },\n {\n \"name\": \"chart/lines/LinesView.ts\",\n \"size\": 7716,\n \"value\": 7716\n },\n {\n \"name\": \"chart/lines/install.ts\",\n \"size\": 1281,\n \"value\": 1281\n },\n {\n \"name\": \"chart/lines/linesLayout.ts\",\n \"size\": 4123,\n \"value\": 4123\n },\n {\n \"name\": \"chart/lines/linesVisual.ts\",\n \"size\": 2762,\n \"value\": 2762\n }\n ],\n \"value\": 28837\n },\n {\n \"name\": \"chart/lines.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"chart/map\",\n \"size\": 25765,\n \"children\": [\n {\n \"name\": \"chart/map/MapSeries.ts\",\n \"size\": 10347,\n \"value\": 10347\n },\n {\n \"name\": \"chart/map/MapView.ts\",\n \"size\": 7234,\n \"value\": 7234\n },\n {\n \"name\": \"chart/map/install.ts\",\n \"size\": 1568,\n \"value\": 1568\n },\n {\n \"name\": \"chart/map/mapDataStatistic.ts\",\n \"size\": 3612,\n \"value\": 3612\n },\n {\n \"name\": \"chart/map/mapSymbolLayout.ts\",\n \"size\": 3004,\n \"value\": 3004\n }\n ],\n \"value\": 25765\n },\n {\n \"name\": \"chart/map.ts\",\n \"size\": 883,\n \"value\": 883\n },\n {\n \"name\": \"chart/parallel\",\n \"size\": 16811,\n \"children\": [\n {\n \"name\": \"chart/parallel/ParallelSeries.ts\",\n \"size\": 5234,\n \"value\": 5234\n },\n {\n \"name\": \"chart/parallel/ParallelView.ts\",\n \"size\": 8006,\n \"value\": 8006\n },\n {\n \"name\": \"chart/parallel/install.ts\",\n \"size\": 1385,\n \"value\": 1385\n },\n {\n \"name\": \"chart/parallel/parallelVisual.ts\",\n \"size\": 2186,\n \"value\": 2186\n }\n ],\n \"value\": 16811\n },\n {\n \"name\": \"chart/parallel.ts\",\n \"size\": 888,\n \"value\": 888\n },\n {\n \"name\": \"chart/pictorialBar.ts\",\n \"size\": 895,\n \"value\": 895\n },\n {\n \"name\": \"chart/pie\",\n \"size\": 44655,\n \"children\": [\n {\n \"name\": \"chart/pie/PieSeries.ts\",\n \"size\": 9492,\n \"value\": 9492\n },\n {\n \"name\": \"chart/pie/PieView.ts\",\n \"size\": 10737,\n \"value\": 10737\n },\n {\n \"name\": \"chart/pie/install.ts\",\n \"size\": 1625,\n \"value\": 1625\n },\n {\n \"name\": \"chart/pie/labelLayout.ts\",\n \"size\": 16039,\n \"value\": 16039\n },\n {\n \"name\": \"chart/pie/pieLayout.ts\",\n \"size\": 6762,\n \"value\": 6762\n }\n ],\n \"value\": 44655\n },\n {\n \"name\": \"chart/pie.ts\",\n \"size\": 883,\n \"value\": 883\n },\n {\n \"name\": \"chart/radar\",\n \"size\": 22389,\n \"children\": [\n {\n \"name\": \"chart/radar/RadarSeries.ts\",\n \"size\": 5383,\n \"value\": 5383\n },\n {\n \"name\": \"chart/radar/RadarView.ts\",\n \"size\": 10797,\n \"value\": 10797\n },\n {\n \"name\": \"chart/radar/backwardCompat.ts\",\n \"size\": 1940,\n \"value\": 1940\n },\n {\n \"name\": \"chart/radar/install.ts\",\n \"size\": 1538,\n \"value\": 1538\n },\n {\n \"name\": \"chart/radar/radarLayout.ts\",\n \"size\": 2731,\n \"value\": 2731\n }\n ],\n \"value\": 22389\n },\n {\n \"name\": \"chart/radar.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"chart/sankey\",\n \"size\": 44323,\n \"children\": [\n {\n \"name\": \"chart/sankey/SankeySeries.ts\",\n \"size\": 9638,\n \"value\": 9638\n },\n {\n \"name\": \"chart/sankey/SankeyView.ts\",\n \"size\": 11909,\n \"value\": 11909\n },\n {\n \"name\": \"chart/sankey/install.ts\",\n \"size\": 2033,\n \"value\": 2033\n },\n {\n \"name\": \"chart/sankey/sankeyLayout.ts\",\n \"size\": 18170,\n \"value\": 18170\n },\n {\n \"name\": \"chart/sankey/sankeyVisual.ts\",\n \"size\": 2573,\n \"value\": 2573\n }\n ],\n \"value\": 44323\n },\n {\n \"name\": \"chart/sankey.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"chart/scatter\",\n \"size\": 10739,\n \"children\": [\n {\n \"name\": \"chart/scatter/ScatterSeries.ts\",\n \"size\": 4719,\n \"value\": 4719\n },\n {\n \"name\": \"chart/scatter/ScatterView.ts\",\n \"size\": 4618,\n \"value\": 4618\n },\n {\n \"name\": \"chart/scatter/install.ts\",\n \"size\": 1402,\n \"value\": 1402\n }\n ],\n \"value\": 10739\n },\n {\n \"name\": \"chart/scatter.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"chart/sunburst\",\n \"size\": 43908,\n \"children\": [\n {\n \"name\": \"chart/sunburst/SunburstPiece.ts\",\n \"size\": 10202,\n \"value\": 10202\n },\n {\n \"name\": \"chart/sunburst/SunburstSeries.ts\",\n \"size\": 9448,\n \"value\": 9448\n },\n {\n \"name\": \"chart/sunburst/SunburstView.ts\",\n \"size\": 8236,\n \"value\": 8236\n },\n {\n \"name\": \"chart/sunburst/install.ts\",\n \"size\": 1596,\n \"value\": 1596\n },\n {\n \"name\": \"chart/sunburst/sunburstAction.ts\",\n \"size\": 4014,\n \"value\": 4014\n },\n {\n \"name\": \"chart/sunburst/sunburstLayout.ts\",\n \"size\": 7908,\n \"value\": 7908\n },\n {\n \"name\": \"chart/sunburst/sunburstVisual.ts\",\n \"size\": 2504,\n \"value\": 2504\n }\n ],\n \"value\": 43908\n },\n {\n \"name\": \"chart/sunburst.ts\",\n \"size\": 888,\n \"value\": 888\n },\n {\n \"name\": \"chart/themeRiver\",\n \"size\": 23557,\n \"children\": [\n {\n \"name\": \"chart/themeRiver/ThemeRiverSeries.ts\",\n \"size\": 10023,\n \"value\": 10023\n },\n {\n \"name\": \"chart/themeRiver/ThemeRiverView.ts\",\n \"size\": 6867,\n \"value\": 6867\n },\n {\n \"name\": \"chart/themeRiver/install.ts\",\n \"size\": 1355,\n \"value\": 1355\n },\n {\n \"name\": \"chart/themeRiver/themeRiverLayout.ts\",\n \"size\": 5312,\n \"value\": 5312\n }\n ],\n \"value\": 23557\n },\n {\n \"name\": \"chart/themeRiver.ts\",\n \"size\": 890,\n \"value\": 890\n },\n {\n \"name\": \"chart/tree\",\n \"size\": 58277,\n \"children\": [\n {\n \"name\": \"chart/tree/TreeSeries.ts\",\n \"size\": 8544,\n \"value\": 8544\n },\n {\n \"name\": \"chart/tree/TreeView.ts\",\n \"size\": 25453,\n \"value\": 25453\n },\n {\n \"name\": \"chart/tree/install.ts\",\n \"size\": 1352,\n \"value\": 1352\n },\n {\n \"name\": \"chart/tree/layoutHelper.ts\",\n \"size\": 11766,\n \"value\": 11766\n },\n {\n \"name\": \"chart/tree/traversalHelper.ts\",\n \"size\": 2085,\n \"value\": 2085\n },\n {\n \"name\": \"chart/tree/treeAction.ts\",\n \"size\": 2758,\n \"value\": 2758\n },\n {\n \"name\": \"chart/tree/treeLayout.ts\",\n \"size\": 4787,\n \"value\": 4787\n },\n {\n \"name\": \"chart/tree/treeVisual.ts\",\n \"size\": 1532,\n \"value\": 1532\n }\n ],\n \"value\": 58277\n },\n {\n \"name\": \"chart/tree.ts\",\n \"size\": 884,\n \"value\": 884\n },\n {\n \"name\": \"chart/treemap\",\n \"size\": 101619,\n \"children\": [\n {\n \"name\": \"chart/treemap/Breadcrumb.ts\",\n \"size\": 7862,\n \"value\": 7862\n },\n {\n \"name\": \"chart/treemap/TreemapSeries.ts\",\n \"size\": 18371,\n \"value\": 18371\n },\n {\n \"name\": \"chart/treemap/TreemapView.ts\",\n \"size\": 39544,\n \"value\": 39544\n },\n {\n \"name\": \"chart/treemap/install.ts\",\n \"size\": 1400,\n \"value\": 1400\n },\n {\n \"name\": \"chart/treemap/treemapAction.ts\",\n \"size\": 2938,\n \"value\": 2938\n },\n {\n \"name\": \"chart/treemap/treemapLayout.ts\",\n \"size\": 22173,\n \"value\": 22173\n },\n {\n \"name\": \"chart/treemap/treemapVisual.ts\",\n \"size\": 9331,\n \"value\": 9331\n }\n ],\n \"value\": 101619\n },\n {\n \"name\": \"chart/treemap.ts\",\n \"size\": 887,\n \"value\": 887\n }\n ],\n \"value\": 1059597\n },\n {\n \"name\": \"component\",\n \"size\": 1100395,\n \"children\": [\n {\n \"name\": \"component/aria\",\n \"size\": 2687,\n \"children\": [\n {\n \"name\": \"component/aria/install.ts\",\n \"size\": 1152,\n \"value\": 1152\n },\n {\n \"name\": \"component/aria/preprocessor.ts\",\n \"size\": 1535,\n \"value\": 1535\n }\n ],\n \"value\": 2687\n },\n {\n \"name\": \"component/aria.ts\",\n \"size\": 884,\n \"value\": 884\n },\n {\n \"name\": \"component/axis\",\n \"size\": 80026,\n \"children\": [\n {\n \"name\": \"component/axis/AngleAxisView.ts\",\n \"size\": 14332,\n \"value\": 14332\n },\n {\n \"name\": \"component/axis/AxisBuilder.ts\",\n \"size\": 26066,\n \"value\": 26066\n },\n {\n \"name\": \"component/axis/AxisView.ts\",\n \"size\": 3960,\n \"value\": 3960\n },\n {\n \"name\": \"component/axis/CartesianAxisView.ts\",\n \"size\": 8399,\n \"value\": 8399\n },\n {\n \"name\": \"component/axis/ParallelAxisView.ts\",\n \"size\": 7567,\n \"value\": 7567\n },\n {\n \"name\": \"component/axis/RadiusAxisView.ts\",\n \"size\": 7861,\n \"value\": 7861\n },\n {\n \"name\": \"component/axis/SingleAxisView.ts\",\n \"size\": 5187,\n \"value\": 5187\n },\n {\n \"name\": \"component/axis/axisSplitHelper.ts\",\n \"size\": 4375,\n \"value\": 4375\n },\n {\n \"name\": \"component/axis/parallelAxisAction.ts\",\n \"size\": 2279,\n \"value\": 2279\n }\n ],\n \"value\": 80026\n },\n {\n \"name\": \"component/axisPointer\",\n \"size\": 99148,\n \"children\": [\n {\n \"name\": \"component/axisPointer/AxisPointer.ts\",\n \"size\": 1491,\n \"value\": 1491\n },\n {\n \"name\": \"component/axisPointer/AxisPointerModel.ts\",\n \"size\": 4442,\n \"value\": 4442\n },\n {\n \"name\": \"component/axisPointer/AxisPointerView.ts\",\n \"size\": 2598,\n \"value\": 2598\n },\n {\n \"name\": \"component/axisPointer/BaseAxisPointer.ts\",\n \"size\": 17229,\n \"value\": 17229\n },\n {\n \"name\": \"component/axisPointer/CartesianAxisPointer.ts\",\n \"size\": 6283,\n \"value\": 6283\n },\n {\n \"name\": \"component/axisPointer/PolarAxisPointer.ts\",\n \"size\": 6579,\n \"value\": 6579\n },\n {\n \"name\": \"component/axisPointer/SingleAxisPointer.ts\",\n \"size\": 5990,\n \"value\": 5990\n },\n {\n \"name\": \"component/axisPointer/axisTrigger.ts\",\n \"size\": 18648,\n \"value\": 18648\n },\n {\n \"name\": \"component/axisPointer/findPointFromSeries.ts\",\n \"size\": 3490,\n \"value\": 3490\n },\n {\n \"name\": \"component/axisPointer/globalListener.ts\",\n \"size\": 5144,\n \"value\": 5144\n },\n {\n \"name\": \"component/axisPointer/install.ts\",\n \"size\": 3050,\n \"value\": 3050\n },\n {\n \"name\": \"component/axisPointer/modelHelper.ts\",\n \"size\": 15289,\n \"value\": 15289\n },\n {\n \"name\": \"component/axisPointer/viewHelper.ts\",\n \"size\": 8915,\n \"value\": 8915\n }\n ],\n \"value\": 99148\n },\n {\n \"name\": \"component/axisPointer.ts\",\n \"size\": 891,\n \"value\": 891\n },\n {\n \"name\": \"component/brush\",\n \"size\": 37924,\n \"children\": [\n {\n \"name\": \"component/brush/BrushModel.ts\",\n \"size\": 8228,\n \"value\": 8228\n },\n {\n \"name\": \"component/brush/BrushView.ts\",\n \"size\": 4239,\n \"value\": 4239\n },\n {\n \"name\": \"component/brush/install.ts\",\n \"size\": 2960,\n \"value\": 2960\n },\n {\n \"name\": \"component/brush/preprocessor.ts\",\n \"size\": 2767,\n \"value\": 2767\n },\n {\n \"name\": \"component/brush/selector.ts\",\n \"size\": 6254,\n \"value\": 6254\n },\n {\n \"name\": \"component/brush/visualEncoding.ts\",\n \"size\": 13476,\n \"value\": 13476\n }\n ],\n \"value\": 37924\n },\n {\n \"name\": \"component/brush.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/calendar\",\n \"size\": 17456,\n \"children\": [\n {\n \"name\": \"component/calendar/CalendarView.ts\",\n \"size\": 16196,\n \"value\": 16196\n },\n {\n \"name\": \"component/calendar/install.ts\",\n \"size\": 1260,\n \"value\": 1260\n }\n ],\n \"value\": 17456\n },\n {\n \"name\": \"component/calendar.ts\",\n \"size\": 888,\n \"value\": 888\n },\n {\n \"name\": \"component/dataZoom\",\n \"size\": 133546,\n \"children\": [\n {\n \"name\": \"component/dataZoom/AxisProxy.ts\",\n \"size\": 17411,\n \"value\": 17411\n },\n {\n \"name\": \"component/dataZoom/DataZoomModel.ts\",\n \"size\": 21669,\n \"value\": 21669\n },\n {\n \"name\": \"component/dataZoom/DataZoomView.ts\",\n \"size\": 1411,\n \"value\": 1411\n },\n {\n \"name\": \"component/dataZoom/InsideZoomModel.ts\",\n \"size\": 1923,\n \"value\": 1923\n },\n {\n \"name\": \"component/dataZoom/InsideZoomView.ts\",\n \"size\": 10023,\n \"value\": 10023\n },\n {\n \"name\": \"component/dataZoom/SelectZoomModel.ts\",\n \"size\": 1000,\n \"value\": 1000\n },\n {\n \"name\": \"component/dataZoom/SelectZoomView.ts\",\n \"size\": 994,\n \"value\": 994\n },\n {\n \"name\": \"component/dataZoom/SliderZoomModel.ts\",\n \"size\": 6001,\n \"value\": 6001\n },\n {\n \"name\": \"component/dataZoom/SliderZoomView.ts\",\n \"size\": 36931,\n \"value\": 36931\n },\n {\n \"name\": \"component/dataZoom/dataZoomAction.ts\",\n \"size\": 1553,\n \"value\": 1553\n },\n {\n \"name\": \"component/dataZoom/dataZoomProcessor.ts\",\n \"size\": 5800,\n \"value\": 5800\n },\n {\n \"name\": \"component/dataZoom/helper.ts\",\n \"size\": 7323,\n \"value\": 7323\n },\n {\n \"name\": \"component/dataZoom/history.ts\",\n \"size\": 3585,\n \"value\": 3585\n },\n {\n \"name\": \"component/dataZoom/install.ts\",\n \"size\": 1242,\n \"value\": 1242\n },\n {\n \"name\": \"component/dataZoom/installCommon.ts\",\n \"size\": 1422,\n \"value\": 1422\n },\n {\n \"name\": \"component/dataZoom/installDataZoomInside.ts\",\n \"size\": 1314,\n \"value\": 1314\n },\n {\n \"name\": \"component/dataZoom/installDataZoomSelect.ts\",\n \"size\": 1214,\n \"value\": 1214\n },\n {\n \"name\": \"component/dataZoom/installDataZoomSlider.ts\",\n \"size\": 1214,\n \"value\": 1214\n },\n {\n \"name\": \"component/dataZoom/roams.ts\",\n \"size\": 11516,\n \"value\": 11516\n }\n ],\n \"value\": 133546\n },\n {\n \"name\": \"component/dataZoom.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"component/dataZoomInside.ts\",\n \"size\": 902,\n \"value\": 902\n },\n {\n \"name\": \"component/dataZoomSelect.ts\",\n \"size\": 992,\n \"value\": 992\n },\n {\n \"name\": \"component/dataZoomSlider.ts\",\n \"size\": 903,\n \"value\": 903\n },\n {\n \"name\": \"component/dataset\",\n \"size\": 3390,\n \"children\": [\n {\n \"name\": \"component/dataset/install.ts\",\n \"size\": 3390,\n \"value\": 3390\n }\n ],\n \"value\": 3390\n },\n {\n \"name\": \"component/dataset.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"component/geo\",\n \"size\": 8403,\n \"children\": [\n {\n \"name\": \"component/geo/GeoView.ts\",\n \"size\": 3395,\n \"value\": 3395\n },\n {\n \"name\": \"component/geo/install.ts\",\n \"size\": 5008,\n \"value\": 5008\n }\n ],\n \"value\": 8403\n },\n {\n \"name\": \"component/geo.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/graphic\",\n \"size\": 27689,\n \"children\": [\n {\n \"name\": \"component/graphic/install.ts\",\n \"size\": 27689,\n \"value\": 27689\n }\n ],\n \"value\": 27689\n },\n {\n \"name\": \"component/graphic.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"component/grid\",\n \"size\": 3988,\n \"children\": [\n {\n \"name\": \"component/grid/install.ts\",\n \"size\": 1119,\n \"value\": 1119\n },\n {\n \"name\": \"component/grid/installSimple.ts\",\n \"size\": 2869,\n \"value\": 2869\n }\n ],\n \"value\": 3988\n },\n {\n \"name\": \"component/grid.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/gridSimple.ts\",\n \"size\": 890,\n \"value\": 890\n },\n {\n \"name\": \"component/helper\",\n \"size\": 113305,\n \"children\": [\n {\n \"name\": \"component/helper/BrushController.ts\",\n \"size\": 35862,\n \"value\": 35862\n },\n {\n \"name\": \"component/helper/BrushTargetManager.ts\",\n \"size\": 19989,\n \"value\": 19989\n },\n {\n \"name\": \"component/helper/MapDraw.ts\",\n \"size\": 31814,\n \"value\": 31814\n },\n {\n \"name\": \"component/helper/RoamController.ts\",\n \"size\": 10950,\n \"value\": 10950\n },\n {\n \"name\": \"component/helper/brushHelper.ts\",\n \"size\": 2232,\n \"value\": 2232\n },\n {\n \"name\": \"component/helper/cursorHelper.ts\",\n \"size\": 1725,\n \"value\": 1725\n },\n {\n \"name\": \"component/helper/interactionMutex.ts\",\n \"size\": 1670,\n \"value\": 1670\n },\n {\n \"name\": \"component/helper/listComponent.ts\",\n \"size\": 2756,\n \"value\": 2756\n },\n {\n \"name\": \"component/helper/roamHelper.ts\",\n \"size\": 2050,\n \"value\": 2050\n },\n {\n \"name\": \"component/helper/sliderMove.ts\",\n \"size\": 4257,\n \"value\": 4257\n }\n ],\n \"value\": 113305\n },\n {\n \"name\": \"component/legend\",\n \"size\": 75921,\n \"children\": [\n {\n \"name\": \"component/legend/LegendModel.ts\",\n \"size\": 14508,\n \"value\": 14508\n },\n {\n \"name\": \"component/legend/LegendView.ts\",\n \"size\": 26173,\n \"value\": 26173\n },\n {\n \"name\": \"component/legend/ScrollableLegendModel.ts\",\n \"size\": 3847,\n \"value\": 3847\n },\n {\n \"name\": \"component/legend/ScrollableLegendView.ts\",\n \"size\": 20132,\n \"value\": 20132\n },\n {\n \"name\": \"component/legend/install.ts\",\n \"size\": 1135,\n \"value\": 1135\n },\n {\n \"name\": \"component/legend/installLegendPlain.ts\",\n \"size\": 1434,\n \"value\": 1434\n },\n {\n \"name\": \"component/legend/installLegendScroll.ts\",\n \"size\": 1393,\n \"value\": 1393\n },\n {\n \"name\": \"component/legend/legendAction.ts\",\n \"size\": 4035,\n \"value\": 4035\n },\n {\n \"name\": \"component/legend/legendFilter.ts\",\n \"size\": 1599,\n \"value\": 1599\n },\n {\n \"name\": \"component/legend/scrollableLegendAction.ts\",\n \"size\": 1665,\n \"value\": 1665\n }\n ],\n \"value\": 75921\n },\n {\n \"name\": \"component/legend.ts\",\n \"size\": 947,\n \"value\": 947\n },\n {\n \"name\": \"component/legendPlain.ts\",\n \"size\": 958,\n \"value\": 958\n },\n {\n \"name\": \"component/legendScroll.ts\",\n \"size\": 939,\n \"value\": 939\n },\n {\n \"name\": \"component/markArea.ts\",\n \"size\": 894,\n \"value\": 894\n },\n {\n \"name\": \"component/markLine.ts\",\n \"size\": 894,\n \"value\": 894\n },\n {\n \"name\": \"component/markPoint.ts\",\n \"size\": 937,\n \"value\": 937\n },\n {\n \"name\": \"component/marker\",\n \"size\": 74821,\n \"children\": [\n {\n \"name\": \"component/marker/MarkAreaModel.ts\",\n \"size\": 3082,\n \"value\": 3082\n },\n {\n \"name\": \"component/marker/MarkAreaView.ts\",\n \"size\": 15177,\n \"value\": 15177\n },\n {\n \"name\": \"component/marker/MarkLineModel.ts\",\n \"size\": 3865,\n \"value\": 3865\n },\n {\n \"name\": \"component/marker/MarkLineView.ts\",\n \"size\": 17059,\n \"value\": 17059\n },\n {\n \"name\": \"component/marker/MarkPointModel.ts\",\n \"size\": 2690,\n \"value\": 2690\n },\n {\n \"name\": \"component/marker/MarkPointView.ts\",\n \"size\": 7311,\n \"value\": 7311\n },\n {\n \"name\": \"component/marker/MarkerModel.ts\",\n \"size\": 7620,\n \"value\": 7620\n },\n {\n \"name\": \"component/marker/MarkerView.ts\",\n \"size\": 3120,\n \"value\": 3120\n },\n {\n \"name\": \"component/marker/checkMarkerInSeries.ts\",\n \"size\": 1501,\n \"value\": 1501\n },\n {\n \"name\": \"component/marker/installMarkArea.ts\",\n \"size\": 1414,\n \"value\": 1414\n },\n {\n \"name\": \"component/marker/installMarkLine.ts\",\n \"size\": 1413,\n \"value\": 1413\n },\n {\n \"name\": \"component/marker/installMarkPoint.ts\",\n \"size\": 1423,\n \"value\": 1423\n },\n {\n \"name\": \"component/marker/markerHelper.ts\",\n \"size\": 9146,\n \"value\": 9146\n }\n ],\n \"value\": 74821\n },\n {\n \"name\": \"component/parallel\",\n \"size\": 7529,\n \"children\": [\n {\n \"name\": \"component/parallel/ParallelView.ts\",\n \"size\": 5251,\n \"value\": 5251\n },\n {\n \"name\": \"component/parallel/install.ts\",\n \"size\": 2278,\n \"value\": 2278\n }\n ],\n \"value\": 7529\n },\n {\n \"name\": \"component/parallel.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"component/polar\",\n \"size\": 2653,\n \"children\": [\n {\n \"name\": \"component/polar/install.ts\",\n \"size\": 2653,\n \"value\": 2653\n }\n ],\n \"value\": 2653\n },\n {\n \"name\": \"component/polar.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/radar\",\n \"size\": 9763,\n \"children\": [\n {\n \"name\": \"component/radar/RadarView.ts\",\n \"size\": 8014,\n \"value\": 8014\n },\n {\n \"name\": \"component/radar/install.ts\",\n \"size\": 1749,\n \"value\": 1749\n }\n ],\n \"value\": 9763\n },\n {\n \"name\": \"component/radar.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"component/singleAxis\",\n \"size\": 1939,\n \"children\": [\n {\n \"name\": \"component/singleAxis/install.ts\",\n \"size\": 1939,\n \"value\": 1939\n }\n ],\n \"value\": 1939\n },\n {\n \"name\": \"component/singleAxis.ts\",\n \"size\": 890,\n \"value\": 890\n },\n {\n \"name\": \"component/timeline\",\n \"size\": 54918,\n \"children\": [\n {\n \"name\": \"component/timeline/SliderTimelineModel.ts\",\n \"size\": 5956,\n \"value\": 5956\n },\n {\n \"name\": \"component/timeline/SliderTimelineView.ts\",\n \"size\": 30481,\n \"value\": 30481\n },\n {\n \"name\": \"component/timeline/TimelineAxis.ts\",\n \"size\": 1696,\n \"value\": 1696\n },\n {\n \"name\": \"component/timeline/TimelineModel.ts\",\n \"size\": 8618,\n \"value\": 8618\n },\n {\n \"name\": \"component/timeline/TimelineView.ts\",\n \"size\": 978,\n \"value\": 978\n },\n {\n \"name\": \"component/timeline/install.ts\",\n \"size\": 1478,\n \"value\": 1478\n },\n {\n \"name\": \"component/timeline/preprocessor.ts\",\n \"size\": 3026,\n \"value\": 3026\n },\n {\n \"name\": \"component/timeline/timelineAction.ts\",\n \"size\": 2685,\n \"value\": 2685\n }\n ],\n \"value\": 54918\n },\n {\n \"name\": \"component/timeline.ts\",\n \"size\": 925,\n \"value\": 925\n },\n {\n \"name\": \"component/title\",\n \"size\": 8511,\n \"children\": [\n {\n \"name\": \"component/title/install.ts\",\n \"size\": 8511,\n \"value\": 8511\n }\n ],\n \"value\": 8511\n },\n {\n \"name\": \"component/title.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/toolbox\",\n \"size\": 77259,\n \"children\": [\n {\n \"name\": \"component/toolbox/ToolboxModel.ts\",\n \"size\": 3544,\n \"value\": 3544\n },\n {\n \"name\": \"component/toolbox/ToolboxView.ts\",\n \"size\": 14463,\n \"value\": 14463\n },\n {\n \"name\": \"component/toolbox/feature\",\n \"size\": 53725,\n \"children\": [\n {\n \"name\": \"component/toolbox/feature/Brush.ts\",\n \"size\": 6558,\n \"value\": 6558\n },\n {\n \"name\": \"component/toolbox/feature/DataView.ts\",\n \"size\": 17627,\n \"value\": 17627\n },\n {\n \"name\": \"component/toolbox/feature/DataZoom.ts\",\n \"size\": 12177,\n \"value\": 12177\n },\n {\n \"name\": \"component/toolbox/feature/MagicType.ts\",\n \"size\": 9202,\n \"value\": 9202\n },\n {\n \"name\": \"component/toolbox/feature/Restore.ts\",\n \"size\": 2184,\n \"value\": 2184\n },\n {\n \"name\": \"component/toolbox/feature/SaveAsImage.ts\",\n \"size\": 5977,\n \"value\": 5977\n }\n ],\n \"value\": 53725\n },\n {\n \"name\": \"component/toolbox/featureManager.ts\",\n \"size\": 3745,\n \"value\": 3745\n },\n {\n \"name\": \"component/toolbox/install.ts\",\n \"size\": 1782,\n \"value\": 1782\n }\n ],\n \"value\": 77259\n },\n {\n \"name\": \"component/toolbox.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"component/tooltip\",\n \"size\": 103659,\n \"children\": [\n {\n \"name\": \"component/tooltip/TooltipHTMLContent.ts\",\n \"size\": 17954,\n \"value\": 17954\n },\n {\n \"name\": \"component/tooltip/TooltipModel.ts\",\n \"size\": 5171,\n \"value\": 5171\n },\n {\n \"name\": \"component/tooltip/TooltipRichContent.ts\",\n \"size\": 7836,\n \"value\": 7836\n },\n {\n \"name\": \"component/tooltip/TooltipView.ts\",\n \"size\": 41776,\n \"value\": 41776\n },\n {\n \"name\": \"component/tooltip/helper.ts\",\n \"size\": 2525,\n \"value\": 2525\n },\n {\n \"name\": \"component/tooltip/install.ts\",\n \"size\": 1825,\n \"value\": 1825\n },\n {\n \"name\": \"component/tooltip/seriesFormatTooltip.ts\",\n \"size\": 6035,\n \"value\": 6035\n },\n {\n \"name\": \"component/tooltip/tooltipMarkup.ts\",\n \"size\": 20537,\n \"value\": 20537\n }\n ],\n \"value\": 103659\n },\n {\n \"name\": \"component/tooltip.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"component/transform\",\n \"size\": 11994,\n \"children\": [\n {\n \"name\": \"component/transform/filterTransform.ts\",\n \"size\": 3787,\n \"value\": 3787\n },\n {\n \"name\": \"component/transform/install.ts\",\n \"size\": 1129,\n \"value\": 1129\n },\n {\n \"name\": \"component/transform/sortTransform.ts\",\n \"size\": 7078,\n \"value\": 7078\n }\n ],\n \"value\": 11994\n },\n {\n \"name\": \"component/transform.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"component/visualMap\",\n \"size\": 115902,\n \"children\": [\n {\n \"name\": \"component/visualMap/ContinuousModel.ts\",\n \"size\": 10417,\n \"value\": 10417\n },\n {\n \"name\": \"component/visualMap/ContinuousView.ts\",\n \"size\": 33304,\n \"value\": 33304\n },\n {\n \"name\": \"component/visualMap/PiecewiseModel.ts\",\n \"size\": 20174,\n \"value\": 20174\n },\n {\n \"name\": \"component/visualMap/PiecewiseView.ts\",\n \"size\": 8244,\n \"value\": 8244\n },\n {\n \"name\": \"component/visualMap/VisualMapModel.ts\",\n \"size\": 19339,\n \"value\": 19339\n },\n {\n \"name\": \"component/visualMap/VisualMapView.ts\",\n \"size\": 5532,\n \"value\": 5532\n },\n {\n \"name\": \"component/visualMap/helper.ts\",\n \"size\": 3204,\n \"value\": 3204\n },\n {\n \"name\": \"component/visualMap/install.ts\",\n \"size\": 1268,\n \"value\": 1268\n },\n {\n \"name\": \"component/visualMap/installCommon.ts\",\n \"size\": 2407,\n \"value\": 2407\n },\n {\n \"name\": \"component/visualMap/installVisualMapContinuous.ts\",\n \"size\": 1213,\n \"value\": 1213\n },\n {\n \"name\": \"component/visualMap/installVisualMapPiecewise.ts\",\n \"size\": 1207,\n \"value\": 1207\n },\n {\n \"name\": \"component/visualMap/preprocessor.ts\",\n \"size\": 1969,\n \"value\": 1969\n },\n {\n \"name\": \"component/visualMap/typeDefaulter.ts\",\n \"size\": 1645,\n \"value\": 1645\n },\n {\n \"name\": \"component/visualMap/visualEncoding.ts\",\n \"size\": 4633,\n \"value\": 4633\n },\n {\n \"name\": \"component/visualMap/visualMapAction.ts\",\n \"size\": 1346,\n \"value\": 1346\n }\n ],\n \"value\": 115902\n },\n {\n \"name\": \"component/visualMap.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"component/visualMapContinuous.ts\",\n \"size\": 908,\n \"value\": 908\n },\n {\n \"name\": \"component/visualMapPiecewise.ts\",\n \"size\": 907,\n \"value\": 907\n }\n ],\n \"value\": 1100395\n },\n {\n \"name\": \"coord\",\n \"size\": 347267,\n \"children\": [\n {\n \"name\": \"coord/Axis.ts\",\n \"size\": 10739,\n \"value\": 10739\n },\n {\n \"name\": \"coord/AxisBaseModel.ts\",\n \"size\": 1315,\n \"value\": 1315\n },\n {\n \"name\": \"coord/CoordinateSystem.ts\",\n \"size\": 5980,\n \"value\": 5980\n },\n {\n \"name\": \"coord/View.ts\",\n \"size\": 10106,\n \"value\": 10106\n },\n {\n \"name\": \"coord/axisCommonTypes.ts\",\n \"size\": 7385,\n \"value\": 7385\n },\n {\n \"name\": \"coord/axisDefault.ts\",\n \"size\": 4901,\n \"value\": 4901\n },\n {\n \"name\": \"coord/axisHelper.ts\",\n \"size\": 15047,\n \"value\": 15047\n },\n {\n \"name\": \"coord/axisModelCommonMixin.ts\",\n \"size\": 1479,\n \"value\": 1479\n },\n {\n \"name\": \"coord/axisModelCreator.ts\",\n \"size\": 4611,\n \"value\": 4611\n },\n {\n \"name\": \"coord/axisTickLabelBuilder.ts\",\n \"size\": 15664,\n \"value\": 15664\n },\n {\n \"name\": \"coord/calendar\",\n \"size\": 25306,\n \"children\": [\n {\n \"name\": \"coord/calendar/Calendar.ts\",\n \"size\": 16219,\n \"value\": 16219\n },\n {\n \"name\": \"coord/calendar/CalendarModel.ts\",\n \"size\": 7389,\n \"value\": 7389\n },\n {\n \"name\": \"coord/calendar/prepareCustom.ts\",\n \"size\": 1698,\n \"value\": 1698\n }\n ],\n \"value\": 25306\n },\n {\n \"name\": \"coord/cartesian\",\n \"size\": 55677,\n \"children\": [\n {\n \"name\": \"coord/cartesian/Axis2D.ts\",\n \"size\": 3598,\n \"value\": 3598\n },\n {\n \"name\": \"coord/cartesian/AxisModel.ts\",\n \"size\": 2365,\n \"value\": 2365\n },\n {\n \"name\": \"coord/cartesian/Cartesian.ts\",\n \"size\": 2900,\n \"value\": 2900\n },\n {\n \"name\": \"coord/cartesian/Cartesian2D.ts\",\n \"size\": 6469,\n \"value\": 6469\n },\n {\n \"name\": \"coord/cartesian/Grid.ts\",\n \"size\": 20952,\n \"value\": 20952\n },\n {\n \"name\": \"coord/cartesian/GridModel.ts\",\n \"size\": 2093,\n \"value\": 2093\n },\n {\n \"name\": \"coord/cartesian/cartesianAxisHelper.ts\",\n \"size\": 4715,\n \"value\": 4715\n },\n {\n \"name\": \"coord/cartesian/defaultAxisExtentFromData.ts\",\n \"size\": 10529,\n \"value\": 10529\n },\n {\n \"name\": \"coord/cartesian/prepareCustom.ts\",\n \"size\": 2056,\n \"value\": 2056\n }\n ],\n \"value\": 55677\n },\n {\n \"name\": \"coord/geo\",\n \"size\": 74301,\n \"children\": [\n {\n \"name\": \"coord/geo/Geo.ts\",\n \"size\": 6598,\n \"value\": 6598\n },\n {\n \"name\": \"coord/geo/GeoJSONResource.ts\",\n \"size\": 5590,\n \"value\": 5590\n },\n {\n \"name\": \"coord/geo/GeoModel.ts\",\n \"size\": 8762,\n \"value\": 8762\n },\n {\n \"name\": \"coord/geo/GeoSVGResource.ts\",\n \"size\": 14611,\n \"value\": 14611\n },\n {\n \"name\": \"coord/geo/Region.ts\",\n \"size\": 7708,\n \"value\": 7708\n },\n {\n \"name\": \"coord/geo/fix\",\n \"size\": 7069,\n \"children\": [\n {\n \"name\": \"coord/geo/fix/diaoyuIsland.ts\",\n \"size\": 1510,\n \"value\": 1510\n },\n {\n \"name\": \"coord/geo/fix/geoCoord.ts\",\n \"size\": 1371,\n \"value\": 1371\n },\n {\n \"name\": \"coord/geo/fix/nanhai.ts\",\n \"size\": 2706,\n \"value\": 2706\n },\n {\n \"name\": \"coord/geo/fix/textCoord.ts\",\n \"size\": 1482,\n \"value\": 1482\n }\n ],\n \"value\": 7069\n },\n {\n \"name\": \"coord/geo/geoCreator.ts\",\n \"size\": 8364,\n \"value\": 8364\n },\n {\n \"name\": \"coord/geo/geoSourceManager.ts\",\n \"size\": 4532,\n \"value\": 4532\n },\n {\n \"name\": \"coord/geo/geoTypes.ts\",\n \"size\": 4145,\n \"value\": 4145\n },\n {\n \"name\": \"coord/geo/parseGeoJson.ts\",\n \"size\": 4812,\n \"value\": 4812\n },\n {\n \"name\": \"coord/geo/prepareCustom.ts\",\n \"size\": 2110,\n \"value\": 2110\n }\n ],\n \"value\": 74301\n },\n {\n \"name\": \"coord/parallel\",\n \"size\": 36731,\n \"children\": [\n {\n \"name\": \"coord/parallel/AxisModel.ts\",\n \"size\": 4949,\n \"value\": 4949\n },\n {\n \"name\": \"coord/parallel/Parallel.ts\",\n \"size\": 19683,\n \"value\": 19683\n },\n {\n \"name\": \"coord/parallel/ParallelAxis.ts\",\n \"size\": 1622,\n \"value\": 1622\n },\n {\n \"name\": \"coord/parallel/ParallelModel.ts\",\n \"size\": 5725,\n \"value\": 5725\n },\n {\n \"name\": \"coord/parallel/parallelCreator.ts\",\n \"size\": 2335,\n \"value\": 2335\n },\n {\n \"name\": \"coord/parallel/parallelPreprocessor.ts\",\n \"size\": 2417,\n \"value\": 2417\n }\n ],\n \"value\": 36731\n },\n {\n \"name\": \"coord/polar\",\n \"size\": 27609,\n \"children\": [\n {\n \"name\": \"coord/polar/AngleAxis.ts\",\n \"size\": 4232,\n \"value\": 4232\n },\n {\n \"name\": \"coord/polar/AxisModel.ts\",\n \"size\": 2777,\n \"value\": 2777\n },\n {\n \"name\": \"coord/polar/Polar.ts\",\n \"size\": 7817,\n \"value\": 7817\n },\n {\n \"name\": \"coord/polar/PolarModel.ts\",\n \"size\": 2057,\n \"value\": 2057\n },\n {\n \"name\": \"coord/polar/RadiusAxis.ts\",\n \"size\": 1539,\n \"value\": 1539\n },\n {\n \"name\": \"coord/polar/polarCreator.ts\",\n \"size\": 6577,\n \"value\": 6577\n },\n {\n \"name\": \"coord/polar/prepareCustom.ts\",\n \"size\": 2610,\n \"value\": 2610\n }\n ],\n \"value\": 27609\n },\n {\n \"name\": \"coord/radar\",\n \"size\": 18756,\n \"children\": [\n {\n \"name\": \"coord/radar/IndicatorAxis.ts\",\n \"size\": 1335,\n \"value\": 1335\n },\n {\n \"name\": \"coord/radar/Radar.ts\",\n \"size\": 10466,\n \"value\": 10466\n },\n {\n \"name\": \"coord/radar/RadarModel.ts\",\n \"size\": 6955,\n \"value\": 6955\n }\n ],\n \"value\": 18756\n },\n {\n \"name\": \"coord/scaleRawExtentInfo.ts\",\n \"size\": 11853,\n \"value\": 11853\n },\n {\n \"name\": \"coord/single\",\n \"size\": 19807,\n \"children\": [\n {\n \"name\": \"coord/single/AxisModel.ts\",\n \"size\": 3039,\n \"value\": 3039\n },\n {\n \"name\": \"coord/single/Single.ts\",\n \"size\": 7563,\n \"value\": 7563\n },\n {\n \"name\": \"coord/single/SingleAxis.ts\",\n \"size\": 2246,\n \"value\": 2246\n },\n {\n \"name\": \"coord/single/prepareCustom.ts\",\n \"size\": 1875,\n \"value\": 1875\n },\n {\n \"name\": \"coord/single/singleAxisHelper.ts\",\n \"size\": 2801,\n \"value\": 2801\n },\n {\n \"name\": \"coord/single/singleCreator.ts\",\n \"size\": 2283,\n \"value\": 2283\n }\n ],\n \"value\": 19807\n }\n ],\n \"value\": 347267\n },\n {\n \"name\": \"core\",\n \"size\": 158407,\n \"children\": [\n {\n \"name\": \"core/CoordinateSystem.ts\",\n \"size\": 2238,\n \"value\": 2238\n },\n {\n \"name\": \"core/ExtensionAPI.ts\",\n \"size\": 2758,\n \"value\": 2758\n },\n {\n \"name\": \"core/Scheduler.ts\",\n \"size\": 26263,\n \"value\": 26263\n },\n {\n \"name\": \"core/context.echarts.ts\",\n \"size\": 105836,\n \"value\": 105836\n },\n {\n \"name\": \"core/lifecycle.ts\",\n \"size\": 2905,\n \"value\": 2905\n },\n {\n \"name\": \"core/locale.ts\",\n \"size\": 2757,\n \"value\": 2757\n },\n {\n \"name\": \"core/task.ts\",\n \"size\": 15650,\n \"value\": 15650\n }\n ],\n \"value\": 158407\n },\n {\n \"name\": \"data\",\n \"size\": 257880,\n \"children\": [\n {\n \"name\": \"data/DataDiffer.ts\",\n \"size\": 11383,\n \"value\": 11383\n },\n {\n \"name\": \"data/DataDimensionInfo.ts\",\n \"size\": 3819,\n \"value\": 3819\n },\n {\n \"name\": \"data/Graph.ts\",\n \"size\": 13419,\n \"value\": 13419\n },\n {\n \"name\": \"data/List.ts\",\n \"size\": 80255,\n \"value\": 80255\n },\n {\n \"name\": \"data/OrdinalMeta.ts\",\n \"size\": 4280,\n \"value\": 4280\n },\n {\n \"name\": \"data/Source.ts\",\n \"size\": 17104,\n \"value\": 17104\n },\n {\n \"name\": \"data/Tree.ts\",\n \"size\": 13459,\n \"value\": 13459\n },\n {\n \"name\": \"data/helper\",\n \"size\": 114161,\n \"children\": [\n {\n \"name\": \"data/helper/completeDimensions.ts\",\n \"size\": 13826,\n \"value\": 13826\n },\n {\n \"name\": \"data/helper/createDimensions.ts\",\n \"size\": 3109,\n \"value\": 3109\n },\n {\n \"name\": \"data/helper/dataProvider.ts\",\n \"size\": 17686,\n \"value\": 17686\n },\n {\n \"name\": \"data/helper/dataStackHelper.ts\",\n \"size\": 6541,\n \"value\": 6541\n },\n {\n \"name\": \"data/helper/dataValueHelper.ts\",\n \"size\": 9894,\n \"value\": 9894\n },\n {\n \"name\": \"data/helper/dimensionHelper.ts\",\n \"size\": 6249,\n \"value\": 6249\n },\n {\n \"name\": \"data/helper/linkList.ts\",\n \"size\": 5908,\n \"value\": 5908\n },\n {\n \"name\": \"data/helper/sourceHelper.ts\",\n \"size\": 16203,\n \"value\": 16203\n },\n {\n \"name\": \"data/helper/sourceManager.ts\",\n \"size\": 14546,\n \"value\": 14546\n },\n {\n \"name\": \"data/helper/transform.ts\",\n \"size\": 20199,\n \"value\": 20199\n }\n ],\n \"value\": 114161\n }\n ],\n \"value\": 257880\n },\n {\n \"name\": \"context.echarts.all.ts\",\n \"size\": 7676,\n \"value\": 7676\n },\n {\n \"name\": \"context.echarts.blank.ts\",\n \"size\": 818,\n \"value\": 818\n },\n {\n \"name\": \"context.echarts.common.ts\",\n \"size\": 2624,\n \"value\": 2624\n },\n {\n \"name\": \"context.echarts.simple.ts\",\n \"size\": 1481,\n \"value\": 1481\n },\n {\n \"name\": \"context.echarts.ts\",\n \"size\": 1727,\n \"value\": 1727\n },\n {\n \"name\": \"export\",\n \"size\": 43462,\n \"children\": [\n {\n \"name\": \"export/all.ts\",\n \"size\": 905,\n \"value\": 905\n },\n {\n \"name\": \"export/api\",\n \"size\": 9766,\n \"children\": [\n {\n \"name\": \"export/api/format.ts\",\n \"size\": 1004,\n \"value\": 1004\n },\n {\n \"name\": \"export/api/graphic.ts\",\n \"size\": 1287,\n \"value\": 1287\n },\n {\n \"name\": \"export/api/helper.ts\",\n \"size\": 4467,\n \"value\": 4467\n },\n {\n \"name\": \"export/api/number.ts\",\n \"size\": 1147,\n \"value\": 1147\n },\n {\n \"name\": \"export/api/time.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"export/api/util.ts\",\n \"size\": 975,\n \"value\": 975\n }\n ],\n \"value\": 9766\n },\n {\n \"name\": \"export/api.ts\",\n \"size\": 3749,\n \"value\": 3749\n },\n {\n \"name\": \"export/charts.ts\",\n \"size\": 4745,\n \"value\": 4745\n },\n {\n \"name\": \"export/components.ts\",\n \"size\": 3847,\n \"value\": 3847\n },\n {\n \"name\": \"export/core.ts\",\n \"size\": 4759,\n \"value\": 4759\n },\n {\n \"name\": \"export/features.ts\",\n \"size\": 1022,\n \"value\": 1022\n },\n {\n \"name\": \"export/option.ts\",\n \"size\": 13730,\n \"value\": 13730\n },\n {\n \"name\": \"export/renderers.ts\",\n \"size\": 939,\n \"value\": 939\n }\n ],\n \"value\": 43462\n },\n {\n \"name\": \"extension.ts\",\n \"size\": 3976,\n \"value\": 3976\n },\n {\n \"name\": \"global.d.ts\",\n \"size\": 824,\n \"value\": 824\n },\n {\n \"name\": \"i18n\",\n \"size\": 40367,\n \"children\": [\n {\n \"name\": \"i18n/langCS.ts\",\n \"size\": 4517,\n \"value\": 4517\n },\n {\n \"name\": \"i18n/langDE.ts\",\n \"size\": 4549,\n \"value\": 4549\n },\n {\n \"name\": \"i18n/langEN.ts\",\n \"size\": 4381,\n \"value\": 4381\n },\n {\n \"name\": \"i18n/langES.ts\",\n \"size\": 2543,\n \"value\": 2543\n },\n {\n \"name\": \"i18n/langFI.ts\",\n \"size\": 2603,\n \"value\": 2603\n },\n {\n \"name\": \"i18n/langFR.ts\",\n \"size\": 4556,\n \"value\": 4556\n },\n {\n \"name\": \"i18n/langJA.ts\",\n \"size\": 4846,\n \"value\": 4846\n },\n {\n \"name\": \"i18n/langSI.ts\",\n \"size\": 4565,\n \"value\": 4565\n },\n {\n \"name\": \"i18n/langTH.ts\",\n \"size\": 3388,\n \"value\": 3388\n },\n {\n \"name\": \"i18n/langZH.ts\",\n \"size\": 4419,\n \"value\": 4419\n }\n ],\n \"value\": 40367\n },\n {\n \"name\": \"label\",\n \"size\": 80551,\n \"children\": [\n {\n \"name\": \"label/LabelManager.ts\",\n \"size\": 20409,\n \"value\": 20409\n },\n {\n \"name\": \"label/installLabelLayout.ts\",\n \"size\": 1185,\n \"value\": 1185\n },\n {\n \"name\": \"label/labelGuideHelper.ts\",\n \"size\": 21067,\n \"value\": 21067\n },\n {\n \"name\": \"label/labelLayoutHelper.ts\",\n \"size\": 11492,\n \"value\": 11492\n },\n {\n \"name\": \"label/labelStyle.ts\",\n \"size\": 26398,\n \"value\": 26398\n }\n ],\n \"value\": 80551\n },\n {\n \"name\": \"layout\",\n \"size\": 38780,\n \"children\": [\n {\n \"name\": \"layout/barGrid.ts\",\n \"size\": 23261,\n \"value\": 23261\n },\n {\n \"name\": \"layout/barPolar.ts\",\n \"size\": 11394,\n \"value\": 11394\n },\n {\n \"name\": \"layout/points.ts\",\n \"size\": 4125,\n \"value\": 4125\n }\n ],\n \"value\": 38780\n },\n {\n \"name\": \"legacy\",\n \"size\": 6326,\n \"children\": [\n {\n \"name\": \"legacy/dataSelectAction.ts\",\n \"size\": 4747,\n \"value\": 4747\n },\n {\n \"name\": \"legacy/getTextRect.ts\",\n \"size\": 1579,\n \"value\": 1579\n }\n ],\n \"value\": 6326\n },\n {\n \"name\": \"loading\",\n \"size\": 4935,\n \"children\": [\n {\n \"name\": \"loading/default.ts\",\n \"size\": 4935,\n \"value\": 4935\n }\n ],\n \"value\": 4935\n },\n {\n \"name\": \"model\",\n \"size\": 140931,\n \"children\": [\n {\n \"name\": \"model/Component.ts\",\n \"size\": 11309,\n \"value\": 11309\n },\n {\n \"name\": \"model/Global.ts\",\n \"size\": 38114,\n \"value\": 38114\n },\n {\n \"name\": \"model/Model.ts\",\n \"size\": 9975,\n \"value\": 9975\n },\n {\n \"name\": \"model/OptionManager.ts\",\n \"size\": 18599,\n \"value\": 18599\n },\n {\n \"name\": \"model/Series.ts\",\n \"size\": 24069,\n \"value\": 24069\n },\n {\n \"name\": \"model/globalDefault.ts\",\n \"size\": 4656,\n \"value\": 4656\n },\n {\n \"name\": \"model/internalComponentCreator.ts\",\n \"size\": 3007,\n \"value\": 3007\n },\n {\n \"name\": \"model/mixin\",\n \"size\": 23864,\n \"children\": [\n {\n \"name\": \"model/mixin/areaStyle.ts\",\n \"size\": 1770,\n \"value\": 1770\n },\n {\n \"name\": \"model/mixin/dataFormat.ts\",\n \"size\": 8562,\n \"value\": 8562\n },\n {\n \"name\": \"model/mixin/itemStyle.ts\",\n \"size\": 2193,\n \"value\": 2193\n },\n {\n \"name\": \"model/mixin/lineStyle.ts\",\n \"size\": 2023,\n \"value\": 2023\n },\n {\n \"name\": \"model/mixin/makeStyleMapper.ts\",\n \"size\": 2035,\n \"value\": 2035\n },\n {\n \"name\": \"model/mixin/palette.ts\",\n \"size\": 4309,\n \"value\": 4309\n },\n {\n \"name\": \"model/mixin/textStyle.ts\",\n \"size\": 2972,\n \"value\": 2972\n }\n ],\n \"value\": 23864\n },\n {\n \"name\": \"model/referHelper.ts\",\n \"size\": 7338,\n \"value\": 7338\n }\n ],\n \"value\": 140931\n },\n {\n \"name\": \"preprocessor\",\n \"size\": 21470,\n \"children\": [\n {\n \"name\": \"preprocessor/backwardCompat.ts\",\n \"size\": 9187,\n \"value\": 9187\n },\n {\n \"name\": \"preprocessor/helper\",\n \"size\": 12283,\n \"children\": [\n {\n \"name\": \"preprocessor/helper/compatStyle.ts\",\n \"size\": 12283,\n \"value\": 12283\n }\n ],\n \"value\": 12283\n }\n ],\n \"value\": 21470\n },\n {\n \"name\": \"processor\",\n \"size\": 13789,\n \"children\": [\n {\n \"name\": \"processor/dataFilter.ts\",\n \"size\": 1742,\n \"value\": 1742\n },\n {\n \"name\": \"processor/dataSample.ts\",\n \"size\": 4292,\n \"value\": 4292\n },\n {\n \"name\": \"processor/dataStack.ts\",\n \"size\": 6276,\n \"value\": 6276\n },\n {\n \"name\": \"processor/negativeDataFilter.ts\",\n \"size\": 1479,\n \"value\": 1479\n }\n ],\n \"value\": 13789\n },\n {\n \"name\": \"renderer\",\n \"size\": 2072,\n \"children\": [\n {\n \"name\": \"renderer/installCanvasRenderer.ts\",\n \"size\": 1042,\n \"value\": 1042\n },\n {\n \"name\": \"renderer/installSVGRenderer.ts\",\n \"size\": 1030,\n \"value\": 1030\n }\n ],\n \"value\": 2072\n },\n {\n \"name\": \"scale\",\n \"size\": 56173,\n \"children\": [\n {\n \"name\": \"scale/Interval.ts\",\n \"size\": 9480,\n \"value\": 9480\n },\n {\n \"name\": \"scale/Log.ts\",\n \"size\": 6383,\n \"value\": 6383\n },\n {\n \"name\": \"scale/Ordinal.ts\",\n \"size\": 9362,\n \"value\": 9362\n },\n {\n \"name\": \"scale/Scale.ts\",\n \"size\": 5235,\n \"value\": 5235\n },\n {\n \"name\": \"scale/Time.ts\",\n \"size\": 22179,\n \"value\": 22179\n },\n {\n \"name\": \"scale/helper.ts\",\n \"size\": 3534,\n \"value\": 3534\n }\n ],\n \"value\": 56173\n },\n {\n \"name\": \"theme\",\n \"size\": 6143,\n \"children\": [\n {\n \"name\": \"theme/dark.ts\",\n \"size\": 4867,\n \"value\": 4867\n },\n {\n \"name\": \"theme/light.ts\",\n \"size\": 1276,\n \"value\": 1276\n }\n ],\n \"value\": 6143\n },\n {\n \"name\": \"util\",\n \"size\": 306511,\n \"children\": [\n {\n \"name\": \"util/ECEventProcessor.ts\",\n \"size\": 5900,\n \"value\": 5900\n },\n {\n \"name\": \"util/KDTree.ts\",\n \"size\": 8723,\n \"value\": 8723\n },\n {\n \"name\": \"util/animation.ts\",\n \"size\": 3488,\n \"value\": 3488\n },\n {\n \"name\": \"util/clazz.ts\",\n \"size\": 12608,\n \"value\": 12608\n },\n {\n \"name\": \"util/component.ts\",\n \"size\": 8501,\n \"value\": 8501\n },\n {\n \"name\": \"util/conditionalExpression.ts\",\n \"size\": 14702,\n \"value\": 14702\n },\n {\n \"name\": \"util/decal.ts\",\n \"size\": 14753,\n \"value\": 14753\n },\n {\n \"name\": \"util/event.ts\",\n \"size\": 1223,\n \"value\": 1223\n },\n {\n \"name\": \"util/format.ts\",\n \"size\": 10989,\n \"value\": 10989\n },\n {\n \"name\": \"util/graphic.ts\",\n \"size\": 19902,\n \"value\": 19902\n },\n {\n \"name\": \"util/innerStore.ts\",\n \"size\": 1939,\n \"value\": 1939\n },\n {\n \"name\": \"util/layout.ts\",\n \"size\": 17818,\n \"value\": 17818\n },\n {\n \"name\": \"util/log.ts\",\n \"size\": 4417,\n \"value\": 4417\n },\n {\n \"name\": \"util/model.ts\",\n \"size\": 37198,\n \"value\": 37198\n },\n {\n \"name\": \"util/number.ts\",\n \"size\": 19583,\n \"value\": 19583\n },\n {\n \"name\": \"util/quickSelect.ts\",\n \"size\": 2920,\n \"value\": 2920\n },\n {\n \"name\": \"util/shape\",\n \"size\": 2905,\n \"children\": [\n {\n \"name\": \"util/shape/sausage.ts\",\n \"size\": 2905,\n \"value\": 2905\n }\n ],\n \"value\": 2905\n },\n {\n \"name\": \"util/states.ts\",\n \"size\": 29540,\n \"value\": 29540\n },\n {\n \"name\": \"util/styleCompat.ts\",\n \"size\": 11390,\n \"value\": 11390\n },\n {\n \"name\": \"util/symbol.ts\",\n \"size\": 10302,\n \"value\": 10302\n },\n {\n \"name\": \"util/throttle.ts\",\n \"size\": 5384,\n \"value\": 5384\n },\n {\n \"name\": \"util/time.ts\",\n \"size\": 11356,\n \"value\": 11356\n },\n {\n \"name\": \"util/types.ts\",\n \"size\": 49661,\n \"value\": 49661\n },\n {\n \"name\": \"util/vendor.ts\",\n \"size\": 1309,\n \"value\": 1309\n }\n ],\n \"value\": 306511\n },\n {\n \"name\": \"view\",\n \"size\": 13542,\n \"children\": [\n {\n \"name\": \"view/Chart.ts\",\n \"size\": 9239,\n \"value\": 9239\n },\n {\n \"name\": \"view/Component.ts\",\n \"size\": 4303,\n \"value\": 4303\n }\n ],\n \"value\": 13542\n },\n {\n \"name\": \"visual\",\n \"size\": 70915,\n \"children\": [\n {\n \"name\": \"visual/LegendVisualProvider.ts\",\n \"size\": 2598,\n \"value\": 2598\n },\n {\n \"name\": \"visual/VisualMapping.ts\",\n \"size\": 24898,\n \"value\": 24898\n },\n {\n \"name\": \"visual/aria.ts\",\n \"size\": 10732,\n \"value\": 10732\n },\n {\n \"name\": \"visual/commonVisualTypes.ts\",\n \"size\": 1264,\n \"value\": 1264\n },\n {\n \"name\": \"visual/decal.ts\",\n \"size\": 1774,\n \"value\": 1774\n },\n {\n \"name\": \"visual/helper.ts\",\n \"size\": 3039,\n \"value\": 3039\n },\n {\n \"name\": \"visual/style.ts\",\n \"size\": 9355,\n \"value\": 9355\n },\n {\n \"name\": \"visual/symbol.ts\",\n \"size\": 6643,\n \"value\": 6643\n },\n {\n \"name\": \"visual/visualDefault.ts\",\n \"size\": 2061,\n \"value\": 2061\n },\n {\n \"name\": \"visual/visualSolution.ts\",\n \"size\": 8551,\n \"value\": 8551\n }\n ],\n \"value\": 70915\n },\n {\n \"name\": \"zrender\",\n \"children\": [\n {\n \"name\": \"Element.ts\",\n \"size\": 62570,\n \"value\": 62570\n },\n {\n \"name\": \"Handler.ts\",\n \"size\": 16369,\n \"value\": 16369\n },\n {\n \"name\": \"PainterBase.ts\",\n \"size\": 1043,\n \"value\": 1043\n },\n {\n \"name\": \"Storage.ts\",\n \"size\": 7345,\n \"value\": 7345\n },\n {\n \"name\": \"animation\",\n \"size\": 51765,\n \"children\": [\n {\n \"name\": \"animation/Animation.ts\",\n \"size\": 5960,\n \"value\": 5960\n },\n {\n \"name\": \"animation/Animator.ts\",\n \"size\": 33681,\n \"value\": 33681\n },\n {\n \"name\": \"animation/Clip.ts\",\n \"size\": 3788,\n \"value\": 3788\n },\n {\n \"name\": \"animation/easing.ts\",\n \"size\": 7646,\n \"value\": 7646\n },\n {\n \"name\": \"animation/requestAnimationFrame.ts\",\n \"size\": 690,\n \"value\": 690\n }\n ],\n \"value\": 51765\n },\n {\n \"name\": \"canvas\",\n \"size\": 79635,\n \"children\": [\n {\n \"name\": \"canvas/Layer.ts\",\n \"size\": 17024,\n \"value\": 17024\n },\n {\n \"name\": \"canvas/Painter.ts\",\n \"size\": 32574,\n \"value\": 32574\n },\n {\n \"name\": \"canvas/canvas.ts\",\n \"size\": 113,\n \"value\": 113\n },\n {\n \"name\": \"canvas/graphic.ts\",\n \"size\": 27228,\n \"value\": 27228\n },\n {\n \"name\": \"canvas/helper.ts\",\n \"size\": 2696,\n \"value\": 2696\n }\n ],\n \"value\": 79635\n },\n {\n \"name\": \"config.ts\",\n \"size\": 800,\n \"value\": 800\n },\n {\n \"name\": \"contain\",\n \"size\": 25900,\n \"children\": [\n {\n \"name\": \"contain/arc.ts\",\n \"size\": 1168,\n \"value\": 1168\n },\n {\n \"name\": \"contain/cubic.ts\",\n \"size\": 838,\n \"value\": 838\n },\n {\n \"name\": \"contain/line.ts\",\n \"size\": 981,\n \"value\": 981\n },\n {\n \"name\": \"contain/path.ts\",\n \"size\": 12770,\n \"value\": 12770\n },\n {\n \"name\": \"contain/polygon.ts\",\n \"size\": 722,\n \"value\": 722\n },\n {\n \"name\": \"contain/quadratic.ts\",\n \"size\": 753,\n \"value\": 753\n },\n {\n \"name\": \"contain/text.ts\",\n \"size\": 7844,\n \"value\": 7844\n },\n {\n \"name\": \"contain/util.ts\",\n \"size\": 170,\n \"value\": 170\n },\n {\n \"name\": \"contain/windingLine.ts\",\n \"size\": 654,\n \"value\": 654\n }\n ],\n \"value\": 25900\n },\n {\n \"name\": \"core\",\n \"size\": 182134,\n \"children\": [\n {\n \"name\": \"core/BoundingRect.ts\",\n \"size\": 7805,\n \"value\": 7805\n },\n {\n \"name\": \"core/Eventful.ts\",\n \"size\": 9493,\n \"value\": 9493\n },\n {\n \"name\": \"core/GestureMgr.ts\",\n \"size\": 3179,\n \"value\": 3179\n },\n {\n \"name\": \"core/LRU.ts\",\n \"size\": 3498,\n \"value\": 3498\n },\n {\n \"name\": \"core/OrientedBoundingRect.ts\",\n \"size\": 5917,\n \"value\": 5917\n },\n {\n \"name\": \"core/PathProxy.ts\",\n \"size\": 36414,\n \"value\": 36414\n },\n {\n \"name\": \"core/Point.ts\",\n \"size\": 4097,\n \"value\": 4097\n },\n {\n \"name\": \"core/Transformable.ts\",\n \"size\": 9273,\n \"value\": 9273\n },\n {\n \"name\": \"core/WeakMap.ts\",\n \"size\": 1216,\n \"value\": 1216\n },\n {\n \"name\": \"core/arrayDiff.ts\",\n \"size\": 6082,\n \"value\": 6082\n },\n {\n \"name\": \"core/bbox.ts\",\n \"size\": 5038,\n \"value\": 5038\n },\n {\n \"name\": \"core/curve.ts\",\n \"size\": 12552,\n \"value\": 12552\n },\n {\n \"name\": \"core/dom.ts\",\n \"size\": 5970,\n \"value\": 5970\n },\n {\n \"name\": \"core/env.ts\",\n \"size\": 3281,\n \"value\": 3281\n },\n {\n \"name\": \"core/event.ts\",\n \"size\": 12491,\n \"value\": 12491\n },\n {\n \"name\": \"core/fourPointsTransform.ts\",\n \"size\": 3622,\n \"value\": 3622\n },\n {\n \"name\": \"core/matrix.ts\",\n \"size\": 3136,\n \"value\": 3136\n },\n {\n \"name\": \"core/timsort.ts\",\n \"size\": 17183,\n \"value\": 17183\n },\n {\n \"name\": \"core/types.ts\",\n \"size\": 3240,\n \"value\": 3240\n },\n {\n \"name\": \"core/util.ts\",\n \"size\": 24309,\n \"value\": 24309\n },\n {\n \"name\": \"core/vector.ts\",\n \"size\": 4338,\n \"value\": 4338\n }\n ],\n \"value\": 182134\n },\n {\n \"name\": \"debug\",\n \"size\": 3492,\n \"children\": [\n {\n \"name\": \"debug/showDebugDirtyRect.ts\",\n \"size\": 3492,\n \"value\": 3492\n }\n ],\n \"value\": 3492\n },\n {\n \"name\": \"dom\",\n \"size\": 22220,\n \"children\": [\n {\n \"name\": \"dom/HandlerProxy.ts\",\n \"size\": 22220,\n \"value\": 22220\n }\n ],\n \"value\": 22220\n },\n {\n \"name\": \"export.ts\",\n \"size\": 3317,\n \"value\": 3317\n },\n {\n \"name\": \"graphic\",\n \"size\": 169365,\n \"children\": [\n {\n \"name\": \"graphic/CompoundPath.ts\",\n \"size\": 1606,\n \"value\": 1606\n },\n {\n \"name\": \"graphic/Displayable.ts\",\n \"size\": 19541,\n \"value\": 19541\n },\n {\n \"name\": \"graphic/Gradient.ts\",\n \"size\": 754,\n \"value\": 754\n },\n {\n \"name\": \"graphic/Group.ts\",\n \"size\": 7645,\n \"value\": 7645\n },\n {\n \"name\": \"graphic/Image.ts\",\n \"size\": 3227,\n \"value\": 3227\n },\n {\n \"name\": \"graphic/IncrementalDisplayable.ts\",\n \"size\": 4426,\n \"value\": 4426\n },\n {\n \"name\": \"graphic/LinearGradient.ts\",\n \"size\": 1096,\n \"value\": 1096\n },\n {\n \"name\": \"graphic/Path.ts\",\n \"size\": 21284,\n \"value\": 21284\n },\n {\n \"name\": \"graphic/Pattern.ts\",\n \"size\": 1721,\n \"value\": 1721\n },\n {\n \"name\": \"graphic/RadialGradient.ts\",\n \"size\": 1020,\n \"value\": 1020\n },\n {\n \"name\": \"graphic/TSpan.ts\",\n \"size\": 2844,\n \"value\": 2844\n },\n {\n \"name\": \"graphic/Text.ts\",\n \"size\": 33862,\n \"value\": 33862\n },\n {\n \"name\": \"graphic/constants.ts\",\n \"size\": 168,\n \"value\": 168\n },\n {\n \"name\": \"graphic/helper\",\n \"size\": 47692,\n \"children\": [\n {\n \"name\": \"graphic/helper/dashStyle.ts\",\n \"size\": 503,\n \"value\": 503\n },\n {\n \"name\": \"graphic/helper/image.ts\",\n \"size\": 2989,\n \"value\": 2989\n },\n {\n \"name\": \"graphic/helper/parseText.ts\",\n \"size\": 23755,\n \"value\": 23755\n },\n {\n \"name\": \"graphic/helper/poly.ts\",\n \"size\": 1510,\n \"value\": 1510\n },\n {\n \"name\": \"graphic/helper/roundRect.ts\",\n \"size\": 2138,\n \"value\": 2138\n },\n {\n \"name\": \"graphic/helper/roundSector.ts\",\n \"size\": 8730,\n \"value\": 8730\n },\n {\n \"name\": \"graphic/helper/smoothBezier.ts\",\n \"size\": 2607,\n \"value\": 2607\n },\n {\n \"name\": \"graphic/helper/smoothSpline.ts\",\n \"size\": 1599,\n \"value\": 1599\n },\n {\n \"name\": \"graphic/helper/subPixelOptimize.ts\",\n \"size\": 3861,\n \"value\": 3861\n }\n ],\n \"value\": 47692\n },\n {\n \"name\": \"graphic/shape\",\n \"size\": 22479,\n \"children\": [\n {\n \"name\": \"graphic/shape/Arc.ts\",\n \"size\": 1122,\n \"value\": 1122\n },\n {\n \"name\": \"graphic/shape/BezierCurve.ts\",\n \"size\": 3363,\n \"value\": 3363\n },\n {\n \"name\": \"graphic/shape/Circle.ts\",\n \"size\": 1081,\n \"value\": 1081\n },\n {\n \"name\": \"graphic/shape/Droplet.ts\",\n \"size\": 1070,\n \"value\": 1070\n },\n {\n \"name\": \"graphic/shape/Ellipse.ts\",\n \"size\": 1222,\n \"value\": 1222\n },\n {\n \"name\": \"graphic/shape/Heart.ts\",\n \"size\": 950,\n \"value\": 950\n },\n {\n \"name\": \"graphic/shape/Isogon.ts\",\n \"size\": 1096,\n \"value\": 1096\n },\n {\n \"name\": \"graphic/shape/Line.ts\",\n \"size\": 1985,\n \"value\": 1985\n },\n {\n \"name\": \"graphic/shape/Polygon.ts\",\n \"size\": 811,\n \"value\": 811\n },\n {\n \"name\": \"graphic/shape/Polyline.ts\",\n \"size\": 1023,\n \"value\": 1023\n },\n {\n \"name\": \"graphic/shape/Rect.ts\",\n \"size\": 1927,\n \"value\": 1927\n },\n {\n \"name\": \"graphic/shape/Ring.ts\",\n \"size\": 781,\n \"value\": 781\n },\n {\n \"name\": \"graphic/shape/Rose.ts\",\n \"size\": 1484,\n \"value\": 1484\n },\n {\n \"name\": \"graphic/shape/Sector.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"graphic/shape/Star.ts\",\n \"size\": 1698,\n \"value\": 1698\n },\n {\n \"name\": \"graphic/shape/Trochoid.ts\",\n \"size\": 1977,\n \"value\": 1977\n }\n ],\n \"value\": 22479\n }\n ],\n \"value\": 169365\n },\n {\n \"name\": \"mixin\",\n \"size\": 3505,\n \"children\": [\n {\n \"name\": \"mixin/Draggable.ts\",\n \"size\": 3505,\n \"value\": 3505\n }\n ],\n \"value\": 3505\n },\n {\n \"name\": \"svg\",\n \"size\": 63006,\n \"children\": [\n {\n \"name\": \"svg/Painter.ts\",\n \"size\": 15932,\n \"value\": 15932\n },\n {\n \"name\": \"svg/core.ts\",\n \"size\": 120,\n \"value\": 120\n },\n {\n \"name\": \"svg/graphic.ts\",\n \"size\": 13503,\n \"value\": 13503\n },\n {\n \"name\": \"svg/helper\",\n \"size\": 33341,\n \"children\": [\n {\n \"name\": \"svg/helper/ClippathManager.ts\",\n \"size\": 5600,\n \"value\": 5600\n },\n {\n \"name\": \"svg/helper/Definable.ts\",\n \"size\": 7152,\n \"value\": 7152\n },\n {\n \"name\": \"svg/helper/GradientManager.ts\",\n \"size\": 8044,\n \"value\": 8044\n },\n {\n \"name\": \"svg/helper/PatternManager.ts\",\n \"size\": 7269,\n \"value\": 7269\n },\n {\n \"name\": \"svg/helper/ShadowManager.ts\",\n \"size\": 5276,\n \"value\": 5276\n }\n ],\n \"value\": 33341\n },\n {\n \"name\": \"svg/svg.ts\",\n \"size\": 110,\n \"value\": 110\n }\n ],\n \"value\": 63006\n },\n {\n \"name\": \"tool\",\n \"size\": 122091,\n \"children\": [\n {\n \"name\": \"tool/color.ts\",\n \"size\": 19085,\n \"value\": 19085\n },\n {\n \"name\": \"tool/convertPath.ts\",\n \"size\": 8959,\n \"value\": 8959\n },\n {\n \"name\": \"tool/dividePath.ts\",\n \"size\": 12704,\n \"value\": 12704\n },\n {\n \"name\": \"tool/morphPath.ts\",\n \"size\": 28139,\n \"value\": 28139\n },\n {\n \"name\": \"tool/parseSVG.ts\",\n \"size\": 33804,\n \"value\": 33804\n },\n {\n \"name\": \"tool/parseXML.ts\",\n \"size\": 692,\n \"value\": 692\n },\n {\n \"name\": \"tool/path.ts\",\n \"size\": 16023,\n \"value\": 16023\n },\n {\n \"name\": \"tool/transformPath.ts\",\n \"size\": 2685,\n \"value\": 2685\n }\n ],\n \"value\": 122091\n },\n {\n \"name\": \"vml\",\n \"size\": 42681,\n \"children\": [\n {\n \"name\": \"vml/Painter.ts\",\n \"size\": 5103,\n \"value\": 5103\n },\n {\n \"name\": \"vml/core.ts\",\n \"size\": 1242,\n \"value\": 1242\n },\n {\n \"name\": \"vml/graphic.ts\",\n \"size\": 36190,\n \"value\": 36190\n },\n {\n \"name\": \"vml/vml.ts\",\n \"size\": 146,\n \"value\": 146\n }\n ],\n \"value\": 42681\n },\n {\n \"name\": \"zrender.ts\",\n \"size\": 13102,\n \"value\": 13102\n }\n ]\n }\n ],\n \"value\": 3835461\n};\n\nreturn {\n series: [\n {\n type: 'treemap',\n id: 'echarts-package-size',\n animationDurationUpdate: 1000,\n roam: false,\n nodeClick: undefined,\n data: values.children,\n universalTransition: true,\n label: {\n show: true\n },\n breadcrumb: {\n show: false\n }\n }\n ],\n graphic: [\n {\n type: 'group',\n rotation: Math.PI / 4,\n bounding: 'raw',\n right: 110,\n bottom: 110,\n z: 100,\n children: [\n {\n type: 'rect',\n left: 'center',\n top: 'center',\n z: 100,\n shape: {\n width: 400,\n height: 50\n },\n style: {\n fill: 'rgba(0,0,0,0.3)'\n }\n },\n {\n type: 'text',\n left: 'center',\n top: 'center',\n z: 100,\n style: {\n fill: '#fff',\n text: 'CLICK FOR MORE',\n font: 'bold 26px sans-serif'\n }\n }\n ]\n }]\n};", + "getOption": "context.panel.chart.on('click', (params) => {\n context.grafana.context.grafana.locationService.replace('/d/FlnnZ4F4k/treemap?orgId=1');\n});\n\nconst values = {\n \"name\": \"echarts\",\n \"size\": 3835461,\n \"children\": [\n {\n \"name\": \"action\",\n \"size\": 2307,\n \"children\": [\n {\n \"name\": \"action/roamHelper.ts\",\n \"size\": 2307,\n \"value\": 2307\n }\n ],\n \"value\": 2307\n },\n {\n \"name\": \"animation\",\n \"size\": 44515,\n \"children\": [\n {\n \"name\": \"animation/basicTrasition.ts\",\n \"size\": 11322,\n \"value\": 11322\n },\n {\n \"name\": \"animation/morphTransitionHelper.ts\",\n \"size\": 8706,\n \"value\": 8706\n },\n {\n \"name\": \"animation/universalTransition.ts\",\n \"size\": 24487,\n \"value\": 24487\n }\n ],\n \"value\": 44515\n },\n {\n \"name\": \"chart\",\n \"size\": 1059597,\n \"children\": [\n {\n \"name\": \"chart/bar\",\n \"size\": 90538,\n \"children\": [\n {\n \"name\": \"chart/bar/BarSeries.ts\",\n \"size\": 4489,\n \"value\": 4489\n },\n {\n \"name\": \"chart/bar/BarView.ts\",\n \"size\": 41509,\n \"value\": 41509\n },\n {\n \"name\": \"chart/bar/BaseBarSeries.ts\",\n \"size\": 3754,\n \"value\": 3754\n },\n {\n \"name\": \"chart/bar/PictorialBarSeries.ts\",\n \"size\": 5194,\n \"value\": 5194\n },\n {\n \"name\": \"chart/bar/PictorialBarView.ts\",\n \"size\": 31640,\n \"value\": 31640\n },\n {\n \"name\": \"chart/bar/install.ts\",\n \"size\": 2627,\n \"value\": 2627\n },\n {\n \"name\": \"chart/bar/installPictorialBar.ts\",\n \"size\": 1325,\n \"value\": 1325\n }\n ],\n \"value\": 90538\n },\n {\n \"name\": \"chart/bar.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"chart/boxplot\",\n \"size\": 24408,\n \"children\": [\n {\n \"name\": \"chart/boxplot/BoxplotSeries.ts\",\n \"size\": 3891,\n \"value\": 3891\n },\n {\n \"name\": \"chart/boxplot/BoxplotView.ts\",\n \"size\": 5968,\n \"value\": 5968\n },\n {\n \"name\": \"chart/boxplot/boxplotLayout.ts\",\n \"size\": 6718,\n \"value\": 6718\n },\n {\n \"name\": \"chart/boxplot/boxplotTransform.ts\",\n \"size\": 2073,\n \"value\": 2073\n },\n {\n \"name\": \"chart/boxplot/boxplotVisual.ts\",\n \"size\": 1024,\n \"value\": 1024\n },\n {\n \"name\": \"chart/boxplot/install.ts\",\n \"size\": 1411,\n \"value\": 1411\n },\n {\n \"name\": \"chart/boxplot/prepareBoxplotData.ts\",\n \"size\": 3323,\n \"value\": 3323\n }\n ],\n \"value\": 24408\n },\n {\n \"name\": \"chart/boxplot.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"chart/candlestick\",\n \"size\": 31115,\n \"children\": [\n {\n \"name\": \"chart/candlestick/CandlestickSeries.ts\",\n \"size\": 4548,\n \"value\": 4548\n },\n {\n \"name\": \"chart/candlestick/CandlestickView.ts\",\n \"size\": 11680,\n \"value\": 11680\n },\n {\n \"name\": \"chart/candlestick/candlestickLayout.ts\",\n \"size\": 9182,\n \"value\": 9182\n },\n {\n \"name\": \"chart/candlestick/candlestickVisual.ts\",\n \"size\": 2990,\n \"value\": 2990\n },\n {\n \"name\": \"chart/candlestick/install.ts\",\n \"size\": 1447,\n \"value\": 1447\n },\n {\n \"name\": \"chart/candlestick/preprocessor.ts\",\n \"size\": 1268,\n \"value\": 1268\n }\n ],\n \"value\": 31115\n },\n {\n \"name\": \"chart/candlestick.ts\",\n \"size\": 891,\n \"value\": 891\n },\n {\n \"name\": \"chart/custom\",\n \"size\": 87227,\n \"children\": [\n {\n \"name\": \"chart/custom/CustomSeries.ts\",\n \"size\": 12400,\n \"value\": 12400\n },\n {\n \"name\": \"chart/custom/CustomView.ts\",\n \"size\": 60468,\n \"value\": 60468\n },\n {\n \"name\": \"chart/custom/install.ts\",\n \"size\": 1129,\n \"value\": 1129\n },\n {\n \"name\": \"chart/custom/prepare.ts\",\n \"size\": 13230,\n \"value\": 13230\n }\n ],\n \"value\": 87227\n },\n {\n \"name\": \"chart/custom.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"chart/effectScatter\",\n \"size\": 8799,\n \"children\": [\n {\n \"name\": \"chart/effectScatter/EffectScatterSeries.ts\",\n \"size\": 4446,\n \"value\": 4446\n },\n {\n \"name\": \"chart/effectScatter/EffectScatterView.ts\",\n \"size\": 3082,\n \"value\": 3082\n },\n {\n \"name\": \"chart/effectScatter/install.ts\",\n \"size\": 1271,\n \"value\": 1271\n }\n ],\n \"value\": 8799\n },\n {\n \"name\": \"chart/effectScatter.ts\",\n \"size\": 893,\n \"value\": 893\n },\n {\n \"name\": \"chart/funnel\",\n \"size\": 28181,\n \"children\": [\n {\n \"name\": \"chart/funnel/FunnelSeries.ts\",\n \"size\": 5960,\n \"value\": 5960\n },\n {\n \"name\": \"chart/funnel/FunnelView.ts\",\n \"size\": 6781,\n \"value\": 6781\n },\n {\n \"name\": \"chart/funnel/funnelLayout.ts\",\n \"size\": 14126,\n \"value\": 14126\n },\n {\n \"name\": \"chart/funnel/install.ts\",\n \"size\": 1314,\n \"value\": 1314\n }\n ],\n \"value\": 28181\n },\n {\n \"name\": \"chart/funnel.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"chart/gauge\",\n \"size\": 37230,\n \"children\": [\n {\n \"name\": \"chart/gauge/GaugeSeries.ts\",\n \"size\": 7859,\n \"value\": 7859\n },\n {\n \"name\": \"chart/gauge/GaugeView.ts\",\n \"size\": 26107,\n \"value\": 26107\n },\n {\n \"name\": \"chart/gauge/PointerPath.ts\",\n \"size\": 2151,\n \"value\": 2151\n },\n {\n \"name\": \"chart/gauge/install.ts\",\n \"size\": 1113,\n \"value\": 1113\n }\n ],\n \"value\": 37230\n },\n {\n \"name\": \"chart/gauge.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"chart/graph\",\n \"size\": 74973,\n \"children\": [\n {\n \"name\": \"chart/graph/GraphSeries.ts\",\n \"size\": 14275,\n \"value\": 14275\n },\n {\n \"name\": \"chart/graph/GraphView.ts\",\n \"size\": 10843,\n \"value\": 10843\n },\n {\n \"name\": \"chart/graph/adjustEdge.ts\",\n \"size\": 6122,\n \"value\": 6122\n },\n {\n \"name\": \"chart/graph/categoryFilter.ts\",\n \"size\": 2191,\n \"value\": 2191\n },\n {\n \"name\": \"chart/graph/categoryVisual.ts\",\n \"size\": 3546,\n \"value\": 3546\n },\n {\n \"name\": \"chart/graph/circularLayout.ts\",\n \"size\": 1220,\n \"value\": 1220\n },\n {\n \"name\": \"chart/graph/circularLayoutHelper.ts\",\n \"size\": 5653,\n \"value\": 5653\n },\n {\n \"name\": \"chart/graph/createView.ts\",\n \"size\": 3700,\n \"value\": 3700\n },\n {\n \"name\": \"chart/graph/edgeVisual.ts\",\n \"size\": 3507,\n \"value\": 3507\n },\n {\n \"name\": \"chart/graph/forceHelper.ts\",\n \"size\": 7070,\n \"value\": 7070\n },\n {\n \"name\": \"chart/graph/forceLayout.ts\",\n \"size\": 7295,\n \"value\": 7295\n },\n {\n \"name\": \"chart/graph/graphHelper.ts\",\n \"size\": 1616,\n \"value\": 1616\n },\n {\n \"name\": \"chart/graph/install.ts\",\n \"size\": 3086,\n \"value\": 3086\n },\n {\n \"name\": \"chart/graph/simpleLayout.ts\",\n \"size\": 2582,\n \"value\": 2582\n },\n {\n \"name\": \"chart/graph/simpleLayoutHelper.ts\",\n \"size\": 2267,\n \"value\": 2267\n }\n ],\n \"value\": 74973\n },\n {\n \"name\": \"chart/graph.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"chart/heatmap\",\n \"size\": 24819,\n \"children\": [\n {\n \"name\": \"chart/heatmap/HeatmapLayer.ts\",\n \"size\": 6056,\n \"value\": 6056\n },\n {\n \"name\": \"chart/heatmap/HeatmapSeries.ts\",\n \"size\": 3602,\n \"value\": 3602\n },\n {\n \"name\": \"chart/heatmap/HeatmapView.ts\",\n \"size\": 14036,\n \"value\": 14036\n },\n {\n \"name\": \"chart/heatmap/install.ts\",\n \"size\": 1125,\n \"value\": 1125\n }\n ],\n \"value\": 24819\n },\n {\n \"name\": \"chart/heatmap.ts\",\n \"size\": 888,\n \"value\": 888\n },\n {\n \"name\": \"chart/helper\",\n \"size\": 133086,\n \"children\": [\n {\n \"name\": \"chart/helper/EffectLine.ts\",\n \"size\": 8279,\n \"value\": 8279\n },\n {\n \"name\": \"chart/helper/EffectPolyline.ts\",\n \"size\": 3707,\n \"value\": 3707\n },\n {\n \"name\": \"chart/helper/EffectSymbol.ts\",\n \"size\": 8513,\n \"value\": 8513\n },\n {\n \"name\": \"chart/helper/LargeLineDraw.ts\",\n \"size\": 8490,\n \"value\": 8490\n },\n {\n \"name\": \"chart/helper/LargeSymbolDraw.ts\",\n \"size\": 9624,\n \"value\": 9624\n },\n {\n \"name\": \"chart/helper/Line.ts\",\n \"size\": 18271,\n \"value\": 18271\n },\n {\n \"name\": \"chart/helper/LineDraw.ts\",\n \"size\": 7187,\n \"value\": 7187\n },\n {\n \"name\": \"chart/helper/LinePath.ts\",\n \"size\": 2836,\n \"value\": 2836\n },\n {\n \"name\": \"chart/helper/Polyline.ts\",\n \"size\": 3035,\n \"value\": 3035\n },\n {\n \"name\": \"chart/helper/Symbol.ts\",\n \"size\": 13637,\n \"value\": 13637\n },\n {\n \"name\": \"chart/helper/SymbolDraw.ts\",\n \"size\": 10007,\n \"value\": 10007\n },\n {\n \"name\": \"chart/helper/createClipPathFromCoordSys.ts\",\n \"size\": 4784,\n \"value\": 4784\n },\n {\n \"name\": \"chart/helper/createGraphFromNodeEdge.ts\",\n \"size\": 3956,\n \"value\": 3956\n },\n {\n \"name\": \"chart/helper/createListFromArray.ts\",\n \"size\": 5728,\n \"value\": 5728\n },\n {\n \"name\": \"chart/helper/createListSimply.ts\",\n \"size\": 1701,\n \"value\": 1701\n },\n {\n \"name\": \"chart/helper/createRenderPlanner.ts\",\n \"size\": 2050,\n \"value\": 2050\n },\n {\n \"name\": \"chart/helper/enableAriaDecalForTree.ts\",\n \"size\": 1578,\n \"value\": 1578\n },\n {\n \"name\": \"chart/helper/labelHelper.ts\",\n \"size\": 2193,\n \"value\": 2193\n },\n {\n \"name\": \"chart/helper/multipleGraphEdgeHelper.ts\",\n \"size\": 7494,\n \"value\": 7494\n },\n {\n \"name\": \"chart/helper/pieHelper.ts\",\n \"size\": 1510,\n \"value\": 1510\n },\n {\n \"name\": \"chart/helper/treeHelper.ts\",\n \"size\": 2724,\n \"value\": 2724\n },\n {\n \"name\": \"chart/helper/whiskerBoxCommon.ts\",\n \"size\": 5782,\n \"value\": 5782\n }\n ],\n \"value\": 133086\n },\n {\n \"name\": \"chart/line\",\n \"size\": 78825,\n \"children\": [\n {\n \"name\": \"chart/line/LineSeries.ts\",\n \"size\": 7339,\n \"value\": 7339\n },\n {\n \"name\": \"chart/line/LineView.ts\",\n \"size\": 46175,\n \"value\": 46175\n },\n {\n \"name\": \"chart/line/helper.ts\",\n \"size\": 4127,\n \"value\": 4127\n },\n {\n \"name\": \"chart/line/install.ts\",\n \"size\": 2049,\n \"value\": 2049\n },\n {\n \"name\": \"chart/line/lineAnimationDiff.ts\",\n \"size\": 6738,\n \"value\": 6738\n },\n {\n \"name\": \"chart/line/poly.ts\",\n \"size\": 12397,\n \"value\": 12397\n }\n ],\n \"value\": 78825\n },\n {\n \"name\": \"chart/line.ts\",\n \"size\": 884,\n \"value\": 884\n },\n {\n \"name\": \"chart/lines\",\n \"size\": 28837,\n \"children\": [\n {\n \"name\": \"chart/lines/LinesSeries.ts\",\n \"size\": 12955,\n \"value\": 12955\n },\n {\n \"name\": \"chart/lines/LinesView.ts\",\n \"size\": 7716,\n \"value\": 7716\n },\n {\n \"name\": \"chart/lines/install.ts\",\n \"size\": 1281,\n \"value\": 1281\n },\n {\n \"name\": \"chart/lines/linesLayout.ts\",\n \"size\": 4123,\n \"value\": 4123\n },\n {\n \"name\": \"chart/lines/linesVisual.ts\",\n \"size\": 2762,\n \"value\": 2762\n }\n ],\n \"value\": 28837\n },\n {\n \"name\": \"chart/lines.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"chart/map\",\n \"size\": 25765,\n \"children\": [\n {\n \"name\": \"chart/map/MapSeries.ts\",\n \"size\": 10347,\n \"value\": 10347\n },\n {\n \"name\": \"chart/map/MapView.ts\",\n \"size\": 7234,\n \"value\": 7234\n },\n {\n \"name\": \"chart/map/install.ts\",\n \"size\": 1568,\n \"value\": 1568\n },\n {\n \"name\": \"chart/map/mapDataStatistic.ts\",\n \"size\": 3612,\n \"value\": 3612\n },\n {\n \"name\": \"chart/map/mapSymbolLayout.ts\",\n \"size\": 3004,\n \"value\": 3004\n }\n ],\n \"value\": 25765\n },\n {\n \"name\": \"chart/map.ts\",\n \"size\": 883,\n \"value\": 883\n },\n {\n \"name\": \"chart/parallel\",\n \"size\": 16811,\n \"children\": [\n {\n \"name\": \"chart/parallel/ParallelSeries.ts\",\n \"size\": 5234,\n \"value\": 5234\n },\n {\n \"name\": \"chart/parallel/ParallelView.ts\",\n \"size\": 8006,\n \"value\": 8006\n },\n {\n \"name\": \"chart/parallel/install.ts\",\n \"size\": 1385,\n \"value\": 1385\n },\n {\n \"name\": \"chart/parallel/parallelVisual.ts\",\n \"size\": 2186,\n \"value\": 2186\n }\n ],\n \"value\": 16811\n },\n {\n \"name\": \"chart/parallel.ts\",\n \"size\": 888,\n \"value\": 888\n },\n {\n \"name\": \"chart/pictorialBar.ts\",\n \"size\": 895,\n \"value\": 895\n },\n {\n \"name\": \"chart/pie\",\n \"size\": 44655,\n \"children\": [\n {\n \"name\": \"chart/pie/PieSeries.ts\",\n \"size\": 9492,\n \"value\": 9492\n },\n {\n \"name\": \"chart/pie/PieView.ts\",\n \"size\": 10737,\n \"value\": 10737\n },\n {\n \"name\": \"chart/pie/install.ts\",\n \"size\": 1625,\n \"value\": 1625\n },\n {\n \"name\": \"chart/pie/labelLayout.ts\",\n \"size\": 16039,\n \"value\": 16039\n },\n {\n \"name\": \"chart/pie/pieLayout.ts\",\n \"size\": 6762,\n \"value\": 6762\n }\n ],\n \"value\": 44655\n },\n {\n \"name\": \"chart/pie.ts\",\n \"size\": 883,\n \"value\": 883\n },\n {\n \"name\": \"chart/radar\",\n \"size\": 22389,\n \"children\": [\n {\n \"name\": \"chart/radar/RadarSeries.ts\",\n \"size\": 5383,\n \"value\": 5383\n },\n {\n \"name\": \"chart/radar/RadarView.ts\",\n \"size\": 10797,\n \"value\": 10797\n },\n {\n \"name\": \"chart/radar/backwardCompat.ts\",\n \"size\": 1940,\n \"value\": 1940\n },\n {\n \"name\": \"chart/radar/install.ts\",\n \"size\": 1538,\n \"value\": 1538\n },\n {\n \"name\": \"chart/radar/radarLayout.ts\",\n \"size\": 2731,\n \"value\": 2731\n }\n ],\n \"value\": 22389\n },\n {\n \"name\": \"chart/radar.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"chart/sankey\",\n \"size\": 44323,\n \"children\": [\n {\n \"name\": \"chart/sankey/SankeySeries.ts\",\n \"size\": 9638,\n \"value\": 9638\n },\n {\n \"name\": \"chart/sankey/SankeyView.ts\",\n \"size\": 11909,\n \"value\": 11909\n },\n {\n \"name\": \"chart/sankey/install.ts\",\n \"size\": 2033,\n \"value\": 2033\n },\n {\n \"name\": \"chart/sankey/sankeyLayout.ts\",\n \"size\": 18170,\n \"value\": 18170\n },\n {\n \"name\": \"chart/sankey/sankeyVisual.ts\",\n \"size\": 2573,\n \"value\": 2573\n }\n ],\n \"value\": 44323\n },\n {\n \"name\": \"chart/sankey.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"chart/scatter\",\n \"size\": 10739,\n \"children\": [\n {\n \"name\": \"chart/scatter/ScatterSeries.ts\",\n \"size\": 4719,\n \"value\": 4719\n },\n {\n \"name\": \"chart/scatter/ScatterView.ts\",\n \"size\": 4618,\n \"value\": 4618\n },\n {\n \"name\": \"chart/scatter/install.ts\",\n \"size\": 1402,\n \"value\": 1402\n }\n ],\n \"value\": 10739\n },\n {\n \"name\": \"chart/scatter.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"chart/sunburst\",\n \"size\": 43908,\n \"children\": [\n {\n \"name\": \"chart/sunburst/SunburstPiece.ts\",\n \"size\": 10202,\n \"value\": 10202\n },\n {\n \"name\": \"chart/sunburst/SunburstSeries.ts\",\n \"size\": 9448,\n \"value\": 9448\n },\n {\n \"name\": \"chart/sunburst/SunburstView.ts\",\n \"size\": 8236,\n \"value\": 8236\n },\n {\n \"name\": \"chart/sunburst/install.ts\",\n \"size\": 1596,\n \"value\": 1596\n },\n {\n \"name\": \"chart/sunburst/sunburstAction.ts\",\n \"size\": 4014,\n \"value\": 4014\n },\n {\n \"name\": \"chart/sunburst/sunburstLayout.ts\",\n \"size\": 7908,\n \"value\": 7908\n },\n {\n \"name\": \"chart/sunburst/sunburstVisual.ts\",\n \"size\": 2504,\n \"value\": 2504\n }\n ],\n \"value\": 43908\n },\n {\n \"name\": \"chart/sunburst.ts\",\n \"size\": 888,\n \"value\": 888\n },\n {\n \"name\": \"chart/themeRiver\",\n \"size\": 23557,\n \"children\": [\n {\n \"name\": \"chart/themeRiver/ThemeRiverSeries.ts\",\n \"size\": 10023,\n \"value\": 10023\n },\n {\n \"name\": \"chart/themeRiver/ThemeRiverView.ts\",\n \"size\": 6867,\n \"value\": 6867\n },\n {\n \"name\": \"chart/themeRiver/install.ts\",\n \"size\": 1355,\n \"value\": 1355\n },\n {\n \"name\": \"chart/themeRiver/themeRiverLayout.ts\",\n \"size\": 5312,\n \"value\": 5312\n }\n ],\n \"value\": 23557\n },\n {\n \"name\": \"chart/themeRiver.ts\",\n \"size\": 890,\n \"value\": 890\n },\n {\n \"name\": \"chart/tree\",\n \"size\": 58277,\n \"children\": [\n {\n \"name\": \"chart/tree/TreeSeries.ts\",\n \"size\": 8544,\n \"value\": 8544\n },\n {\n \"name\": \"chart/tree/TreeView.ts\",\n \"size\": 25453,\n \"value\": 25453\n },\n {\n \"name\": \"chart/tree/install.ts\",\n \"size\": 1352,\n \"value\": 1352\n },\n {\n \"name\": \"chart/tree/layoutHelper.ts\",\n \"size\": 11766,\n \"value\": 11766\n },\n {\n \"name\": \"chart/tree/traversalHelper.ts\",\n \"size\": 2085,\n \"value\": 2085\n },\n {\n \"name\": \"chart/tree/treeAction.ts\",\n \"size\": 2758,\n \"value\": 2758\n },\n {\n \"name\": \"chart/tree/treeLayout.ts\",\n \"size\": 4787,\n \"value\": 4787\n },\n {\n \"name\": \"chart/tree/treeVisual.ts\",\n \"size\": 1532,\n \"value\": 1532\n }\n ],\n \"value\": 58277\n },\n {\n \"name\": \"chart/tree.ts\",\n \"size\": 884,\n \"value\": 884\n },\n {\n \"name\": \"chart/treemap\",\n \"size\": 101619,\n \"children\": [\n {\n \"name\": \"chart/treemap/Breadcrumb.ts\",\n \"size\": 7862,\n \"value\": 7862\n },\n {\n \"name\": \"chart/treemap/TreemapSeries.ts\",\n \"size\": 18371,\n \"value\": 18371\n },\n {\n \"name\": \"chart/treemap/TreemapView.ts\",\n \"size\": 39544,\n \"value\": 39544\n },\n {\n \"name\": \"chart/treemap/install.ts\",\n \"size\": 1400,\n \"value\": 1400\n },\n {\n \"name\": \"chart/treemap/treemapAction.ts\",\n \"size\": 2938,\n \"value\": 2938\n },\n {\n \"name\": \"chart/treemap/treemapLayout.ts\",\n \"size\": 22173,\n \"value\": 22173\n },\n {\n \"name\": \"chart/treemap/treemapVisual.ts\",\n \"size\": 9331,\n \"value\": 9331\n }\n ],\n \"value\": 101619\n },\n {\n \"name\": \"chart/treemap.ts\",\n \"size\": 887,\n \"value\": 887\n }\n ],\n \"value\": 1059597\n },\n {\n \"name\": \"component\",\n \"size\": 1100395,\n \"children\": [\n {\n \"name\": \"component/aria\",\n \"size\": 2687,\n \"children\": [\n {\n \"name\": \"component/aria/install.ts\",\n \"size\": 1152,\n \"value\": 1152\n },\n {\n \"name\": \"component/aria/preprocessor.ts\",\n \"size\": 1535,\n \"value\": 1535\n }\n ],\n \"value\": 2687\n },\n {\n \"name\": \"component/aria.ts\",\n \"size\": 884,\n \"value\": 884\n },\n {\n \"name\": \"component/axis\",\n \"size\": 80026,\n \"children\": [\n {\n \"name\": \"component/axis/AngleAxisView.ts\",\n \"size\": 14332,\n \"value\": 14332\n },\n {\n \"name\": \"component/axis/AxisBuilder.ts\",\n \"size\": 26066,\n \"value\": 26066\n },\n {\n \"name\": \"component/axis/AxisView.ts\",\n \"size\": 3960,\n \"value\": 3960\n },\n {\n \"name\": \"component/axis/CartesianAxisView.ts\",\n \"size\": 8399,\n \"value\": 8399\n },\n {\n \"name\": \"component/axis/ParallelAxisView.ts\",\n \"size\": 7567,\n \"value\": 7567\n },\n {\n \"name\": \"component/axis/RadiusAxisView.ts\",\n \"size\": 7861,\n \"value\": 7861\n },\n {\n \"name\": \"component/axis/SingleAxisView.ts\",\n \"size\": 5187,\n \"value\": 5187\n },\n {\n \"name\": \"component/axis/axisSplitHelper.ts\",\n \"size\": 4375,\n \"value\": 4375\n },\n {\n \"name\": \"component/axis/parallelAxisAction.ts\",\n \"size\": 2279,\n \"value\": 2279\n }\n ],\n \"value\": 80026\n },\n {\n \"name\": \"component/axisPointer\",\n \"size\": 99148,\n \"children\": [\n {\n \"name\": \"component/axisPointer/AxisPointer.ts\",\n \"size\": 1491,\n \"value\": 1491\n },\n {\n \"name\": \"component/axisPointer/AxisPointerModel.ts\",\n \"size\": 4442,\n \"value\": 4442\n },\n {\n \"name\": \"component/axisPointer/AxisPointerView.ts\",\n \"size\": 2598,\n \"value\": 2598\n },\n {\n \"name\": \"component/axisPointer/BaseAxisPointer.ts\",\n \"size\": 17229,\n \"value\": 17229\n },\n {\n \"name\": \"component/axisPointer/CartesianAxisPointer.ts\",\n \"size\": 6283,\n \"value\": 6283\n },\n {\n \"name\": \"component/axisPointer/PolarAxisPointer.ts\",\n \"size\": 6579,\n \"value\": 6579\n },\n {\n \"name\": \"component/axisPointer/SingleAxisPointer.ts\",\n \"size\": 5990,\n \"value\": 5990\n },\n {\n \"name\": \"component/axisPointer/axisTrigger.ts\",\n \"size\": 18648,\n \"value\": 18648\n },\n {\n \"name\": \"component/axisPointer/findPointFromSeries.ts\",\n \"size\": 3490,\n \"value\": 3490\n },\n {\n \"name\": \"component/axisPointer/globalListener.ts\",\n \"size\": 5144,\n \"value\": 5144\n },\n {\n \"name\": \"component/axisPointer/install.ts\",\n \"size\": 3050,\n \"value\": 3050\n },\n {\n \"name\": \"component/axisPointer/modelHelper.ts\",\n \"size\": 15289,\n \"value\": 15289\n },\n {\n \"name\": \"component/axisPointer/viewHelper.ts\",\n \"size\": 8915,\n \"value\": 8915\n }\n ],\n \"value\": 99148\n },\n {\n \"name\": \"component/axisPointer.ts\",\n \"size\": 891,\n \"value\": 891\n },\n {\n \"name\": \"component/brush\",\n \"size\": 37924,\n \"children\": [\n {\n \"name\": \"component/brush/BrushModel.ts\",\n \"size\": 8228,\n \"value\": 8228\n },\n {\n \"name\": \"component/brush/BrushView.ts\",\n \"size\": 4239,\n \"value\": 4239\n },\n {\n \"name\": \"component/brush/install.ts\",\n \"size\": 2960,\n \"value\": 2960\n },\n {\n \"name\": \"component/brush/preprocessor.ts\",\n \"size\": 2767,\n \"value\": 2767\n },\n {\n \"name\": \"component/brush/selector.ts\",\n \"size\": 6254,\n \"value\": 6254\n },\n {\n \"name\": \"component/brush/visualEncoding.ts\",\n \"size\": 13476,\n \"value\": 13476\n }\n ],\n \"value\": 37924\n },\n {\n \"name\": \"component/brush.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/calendar\",\n \"size\": 17456,\n \"children\": [\n {\n \"name\": \"component/calendar/CalendarView.ts\",\n \"size\": 16196,\n \"value\": 16196\n },\n {\n \"name\": \"component/calendar/install.ts\",\n \"size\": 1260,\n \"value\": 1260\n }\n ],\n \"value\": 17456\n },\n {\n \"name\": \"component/calendar.ts\",\n \"size\": 888,\n \"value\": 888\n },\n {\n \"name\": \"component/dataZoom\",\n \"size\": 133546,\n \"children\": [\n {\n \"name\": \"component/dataZoom/AxisProxy.ts\",\n \"size\": 17411,\n \"value\": 17411\n },\n {\n \"name\": \"component/dataZoom/DataZoomModel.ts\",\n \"size\": 21669,\n \"value\": 21669\n },\n {\n \"name\": \"component/dataZoom/DataZoomView.ts\",\n \"size\": 1411,\n \"value\": 1411\n },\n {\n \"name\": \"component/dataZoom/InsideZoomModel.ts\",\n \"size\": 1923,\n \"value\": 1923\n },\n {\n \"name\": \"component/dataZoom/InsideZoomView.ts\",\n \"size\": 10023,\n \"value\": 10023\n },\n {\n \"name\": \"component/dataZoom/SelectZoomModel.ts\",\n \"size\": 1000,\n \"value\": 1000\n },\n {\n \"name\": \"component/dataZoom/SelectZoomView.ts\",\n \"size\": 994,\n \"value\": 994\n },\n {\n \"name\": \"component/dataZoom/SliderZoomModel.ts\",\n \"size\": 6001,\n \"value\": 6001\n },\n {\n \"name\": \"component/dataZoom/SliderZoomView.ts\",\n \"size\": 36931,\n \"value\": 36931\n },\n {\n \"name\": \"component/dataZoom/dataZoomAction.ts\",\n \"size\": 1553,\n \"value\": 1553\n },\n {\n \"name\": \"component/dataZoom/dataZoomProcessor.ts\",\n \"size\": 5800,\n \"value\": 5800\n },\n {\n \"name\": \"component/dataZoom/helper.ts\",\n \"size\": 7323,\n \"value\": 7323\n },\n {\n \"name\": \"component/dataZoom/history.ts\",\n \"size\": 3585,\n \"value\": 3585\n },\n {\n \"name\": \"component/dataZoom/install.ts\",\n \"size\": 1242,\n \"value\": 1242\n },\n {\n \"name\": \"component/dataZoom/installCommon.ts\",\n \"size\": 1422,\n \"value\": 1422\n },\n {\n \"name\": \"component/dataZoom/installDataZoomInside.ts\",\n \"size\": 1314,\n \"value\": 1314\n },\n {\n \"name\": \"component/dataZoom/installDataZoomSelect.ts\",\n \"size\": 1214,\n \"value\": 1214\n },\n {\n \"name\": \"component/dataZoom/installDataZoomSlider.ts\",\n \"size\": 1214,\n \"value\": 1214\n },\n {\n \"name\": \"component/dataZoom/roams.ts\",\n \"size\": 11516,\n \"value\": 11516\n }\n ],\n \"value\": 133546\n },\n {\n \"name\": \"component/dataZoom.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"component/dataZoomInside.ts\",\n \"size\": 902,\n \"value\": 902\n },\n {\n \"name\": \"component/dataZoomSelect.ts\",\n \"size\": 992,\n \"value\": 992\n },\n {\n \"name\": \"component/dataZoomSlider.ts\",\n \"size\": 903,\n \"value\": 903\n },\n {\n \"name\": \"component/dataset\",\n \"size\": 3390,\n \"children\": [\n {\n \"name\": \"component/dataset/install.ts\",\n \"size\": 3390,\n \"value\": 3390\n }\n ],\n \"value\": 3390\n },\n {\n \"name\": \"component/dataset.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"component/geo\",\n \"size\": 8403,\n \"children\": [\n {\n \"name\": \"component/geo/GeoView.ts\",\n \"size\": 3395,\n \"value\": 3395\n },\n {\n \"name\": \"component/geo/install.ts\",\n \"size\": 5008,\n \"value\": 5008\n }\n ],\n \"value\": 8403\n },\n {\n \"name\": \"component/geo.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/graphic\",\n \"size\": 27689,\n \"children\": [\n {\n \"name\": \"component/graphic/install.ts\",\n \"size\": 27689,\n \"value\": 27689\n }\n ],\n \"value\": 27689\n },\n {\n \"name\": \"component/graphic.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"component/grid\",\n \"size\": 3988,\n \"children\": [\n {\n \"name\": \"component/grid/install.ts\",\n \"size\": 1119,\n \"value\": 1119\n },\n {\n \"name\": \"component/grid/installSimple.ts\",\n \"size\": 2869,\n \"value\": 2869\n }\n ],\n \"value\": 3988\n },\n {\n \"name\": \"component/grid.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/gridSimple.ts\",\n \"size\": 890,\n \"value\": 890\n },\n {\n \"name\": \"component/helper\",\n \"size\": 113305,\n \"children\": [\n {\n \"name\": \"component/helper/BrushController.ts\",\n \"size\": 35862,\n \"value\": 35862\n },\n {\n \"name\": \"component/helper/BrushTargetManager.ts\",\n \"size\": 19989,\n \"value\": 19989\n },\n {\n \"name\": \"component/helper/MapDraw.ts\",\n \"size\": 31814,\n \"value\": 31814\n },\n {\n \"name\": \"component/helper/RoamController.ts\",\n \"size\": 10950,\n \"value\": 10950\n },\n {\n \"name\": \"component/helper/brushHelper.ts\",\n \"size\": 2232,\n \"value\": 2232\n },\n {\n \"name\": \"component/helper/cursorHelper.ts\",\n \"size\": 1725,\n \"value\": 1725\n },\n {\n \"name\": \"component/helper/interactionMutex.ts\",\n \"size\": 1670,\n \"value\": 1670\n },\n {\n \"name\": \"component/helper/listComponent.ts\",\n \"size\": 2756,\n \"value\": 2756\n },\n {\n \"name\": \"component/helper/roamHelper.ts\",\n \"size\": 2050,\n \"value\": 2050\n },\n {\n \"name\": \"component/helper/sliderMove.ts\",\n \"size\": 4257,\n \"value\": 4257\n }\n ],\n \"value\": 113305\n },\n {\n \"name\": \"component/legend\",\n \"size\": 75921,\n \"children\": [\n {\n \"name\": \"component/legend/LegendModel.ts\",\n \"size\": 14508,\n \"value\": 14508\n },\n {\n \"name\": \"component/legend/LegendView.ts\",\n \"size\": 26173,\n \"value\": 26173\n },\n {\n \"name\": \"component/legend/ScrollableLegendModel.ts\",\n \"size\": 3847,\n \"value\": 3847\n },\n {\n \"name\": \"component/legend/ScrollableLegendView.ts\",\n \"size\": 20132,\n \"value\": 20132\n },\n {\n \"name\": \"component/legend/install.ts\",\n \"size\": 1135,\n \"value\": 1135\n },\n {\n \"name\": \"component/legend/installLegendPlain.ts\",\n \"size\": 1434,\n \"value\": 1434\n },\n {\n \"name\": \"component/legend/installLegendScroll.ts\",\n \"size\": 1393,\n \"value\": 1393\n },\n {\n \"name\": \"component/legend/legendAction.ts\",\n \"size\": 4035,\n \"value\": 4035\n },\n {\n \"name\": \"component/legend/legendFilter.ts\",\n \"size\": 1599,\n \"value\": 1599\n },\n {\n \"name\": \"component/legend/scrollableLegendAction.ts\",\n \"size\": 1665,\n \"value\": 1665\n }\n ],\n \"value\": 75921\n },\n {\n \"name\": \"component/legend.ts\",\n \"size\": 947,\n \"value\": 947\n },\n {\n \"name\": \"component/legendPlain.ts\",\n \"size\": 958,\n \"value\": 958\n },\n {\n \"name\": \"component/legendScroll.ts\",\n \"size\": 939,\n \"value\": 939\n },\n {\n \"name\": \"component/markArea.ts\",\n \"size\": 894,\n \"value\": 894\n },\n {\n \"name\": \"component/markLine.ts\",\n \"size\": 894,\n \"value\": 894\n },\n {\n \"name\": \"component/markPoint.ts\",\n \"size\": 937,\n \"value\": 937\n },\n {\n \"name\": \"component/marker\",\n \"size\": 74821,\n \"children\": [\n {\n \"name\": \"component/marker/MarkAreaModel.ts\",\n \"size\": 3082,\n \"value\": 3082\n },\n {\n \"name\": \"component/marker/MarkAreaView.ts\",\n \"size\": 15177,\n \"value\": 15177\n },\n {\n \"name\": \"component/marker/MarkLineModel.ts\",\n \"size\": 3865,\n \"value\": 3865\n },\n {\n \"name\": \"component/marker/MarkLineView.ts\",\n \"size\": 17059,\n \"value\": 17059\n },\n {\n \"name\": \"component/marker/MarkPointModel.ts\",\n \"size\": 2690,\n \"value\": 2690\n },\n {\n \"name\": \"component/marker/MarkPointView.ts\",\n \"size\": 7311,\n \"value\": 7311\n },\n {\n \"name\": \"component/marker/MarkerModel.ts\",\n \"size\": 7620,\n \"value\": 7620\n },\n {\n \"name\": \"component/marker/MarkerView.ts\",\n \"size\": 3120,\n \"value\": 3120\n },\n {\n \"name\": \"component/marker/checkMarkerInSeries.ts\",\n \"size\": 1501,\n \"value\": 1501\n },\n {\n \"name\": \"component/marker/installMarkArea.ts\",\n \"size\": 1414,\n \"value\": 1414\n },\n {\n \"name\": \"component/marker/installMarkLine.ts\",\n \"size\": 1413,\n \"value\": 1413\n },\n {\n \"name\": \"component/marker/installMarkPoint.ts\",\n \"size\": 1423,\n \"value\": 1423\n },\n {\n \"name\": \"component/marker/markerHelper.ts\",\n \"size\": 9146,\n \"value\": 9146\n }\n ],\n \"value\": 74821\n },\n {\n \"name\": \"component/parallel\",\n \"size\": 7529,\n \"children\": [\n {\n \"name\": \"component/parallel/ParallelView.ts\",\n \"size\": 5251,\n \"value\": 5251\n },\n {\n \"name\": \"component/parallel/install.ts\",\n \"size\": 2278,\n \"value\": 2278\n }\n ],\n \"value\": 7529\n },\n {\n \"name\": \"component/parallel.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"component/polar\",\n \"size\": 2653,\n \"children\": [\n {\n \"name\": \"component/polar/install.ts\",\n \"size\": 2653,\n \"value\": 2653\n }\n ],\n \"value\": 2653\n },\n {\n \"name\": \"component/polar.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/radar\",\n \"size\": 9763,\n \"children\": [\n {\n \"name\": \"component/radar/RadarView.ts\",\n \"size\": 8014,\n \"value\": 8014\n },\n {\n \"name\": \"component/radar/install.ts\",\n \"size\": 1749,\n \"value\": 1749\n }\n ],\n \"value\": 9763\n },\n {\n \"name\": \"component/radar.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"component/singleAxis\",\n \"size\": 1939,\n \"children\": [\n {\n \"name\": \"component/singleAxis/install.ts\",\n \"size\": 1939,\n \"value\": 1939\n }\n ],\n \"value\": 1939\n },\n {\n \"name\": \"component/singleAxis.ts\",\n \"size\": 890,\n \"value\": 890\n },\n {\n \"name\": \"component/timeline\",\n \"size\": 54918,\n \"children\": [\n {\n \"name\": \"component/timeline/SliderTimelineModel.ts\",\n \"size\": 5956,\n \"value\": 5956\n },\n {\n \"name\": \"component/timeline/SliderTimelineView.ts\",\n \"size\": 30481,\n \"value\": 30481\n },\n {\n \"name\": \"component/timeline/TimelineAxis.ts\",\n \"size\": 1696,\n \"value\": 1696\n },\n {\n \"name\": \"component/timeline/TimelineModel.ts\",\n \"size\": 8618,\n \"value\": 8618\n },\n {\n \"name\": \"component/timeline/TimelineView.ts\",\n \"size\": 978,\n \"value\": 978\n },\n {\n \"name\": \"component/timeline/install.ts\",\n \"size\": 1478,\n \"value\": 1478\n },\n {\n \"name\": \"component/timeline/preprocessor.ts\",\n \"size\": 3026,\n \"value\": 3026\n },\n {\n \"name\": \"component/timeline/timelineAction.ts\",\n \"size\": 2685,\n \"value\": 2685\n }\n ],\n \"value\": 54918\n },\n {\n \"name\": \"component/timeline.ts\",\n \"size\": 925,\n \"value\": 925\n },\n {\n \"name\": \"component/title\",\n \"size\": 8511,\n \"children\": [\n {\n \"name\": \"component/title/install.ts\",\n \"size\": 8511,\n \"value\": 8511\n }\n ],\n \"value\": 8511\n },\n {\n \"name\": \"component/title.ts\",\n \"size\": 885,\n \"value\": 885\n },\n {\n \"name\": \"component/toolbox\",\n \"size\": 77259,\n \"children\": [\n {\n \"name\": \"component/toolbox/ToolboxModel.ts\",\n \"size\": 3544,\n \"value\": 3544\n },\n {\n \"name\": \"component/toolbox/ToolboxView.ts\",\n \"size\": 14463,\n \"value\": 14463\n },\n {\n \"name\": \"component/toolbox/feature\",\n \"size\": 53725,\n \"children\": [\n {\n \"name\": \"component/toolbox/feature/Brush.ts\",\n \"size\": 6558,\n \"value\": 6558\n },\n {\n \"name\": \"component/toolbox/feature/DataView.ts\",\n \"size\": 17627,\n \"value\": 17627\n },\n {\n \"name\": \"component/toolbox/feature/DataZoom.ts\",\n \"size\": 12177,\n \"value\": 12177\n },\n {\n \"name\": \"component/toolbox/feature/MagicType.ts\",\n \"size\": 9202,\n \"value\": 9202\n },\n {\n \"name\": \"component/toolbox/feature/Restore.ts\",\n \"size\": 2184,\n \"value\": 2184\n },\n {\n \"name\": \"component/toolbox/feature/SaveAsImage.ts\",\n \"size\": 5977,\n \"value\": 5977\n }\n ],\n \"value\": 53725\n },\n {\n \"name\": \"component/toolbox/featureManager.ts\",\n \"size\": 3745,\n \"value\": 3745\n },\n {\n \"name\": \"component/toolbox/install.ts\",\n \"size\": 1782,\n \"value\": 1782\n }\n ],\n \"value\": 77259\n },\n {\n \"name\": \"component/toolbox.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"component/tooltip\",\n \"size\": 103659,\n \"children\": [\n {\n \"name\": \"component/tooltip/TooltipHTMLContent.ts\",\n \"size\": 17954,\n \"value\": 17954\n },\n {\n \"name\": \"component/tooltip/TooltipModel.ts\",\n \"size\": 5171,\n \"value\": 5171\n },\n {\n \"name\": \"component/tooltip/TooltipRichContent.ts\",\n \"size\": 7836,\n \"value\": 7836\n },\n {\n \"name\": \"component/tooltip/TooltipView.ts\",\n \"size\": 41776,\n \"value\": 41776\n },\n {\n \"name\": \"component/tooltip/helper.ts\",\n \"size\": 2525,\n \"value\": 2525\n },\n {\n \"name\": \"component/tooltip/install.ts\",\n \"size\": 1825,\n \"value\": 1825\n },\n {\n \"name\": \"component/tooltip/seriesFormatTooltip.ts\",\n \"size\": 6035,\n \"value\": 6035\n },\n {\n \"name\": \"component/tooltip/tooltipMarkup.ts\",\n \"size\": 20537,\n \"value\": 20537\n }\n ],\n \"value\": 103659\n },\n {\n \"name\": \"component/tooltip.ts\",\n \"size\": 887,\n \"value\": 887\n },\n {\n \"name\": \"component/transform\",\n \"size\": 11994,\n \"children\": [\n {\n \"name\": \"component/transform/filterTransform.ts\",\n \"size\": 3787,\n \"value\": 3787\n },\n {\n \"name\": \"component/transform/install.ts\",\n \"size\": 1129,\n \"value\": 1129\n },\n {\n \"name\": \"component/transform/sortTransform.ts\",\n \"size\": 7078,\n \"value\": 7078\n }\n ],\n \"value\": 11994\n },\n {\n \"name\": \"component/transform.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"component/visualMap\",\n \"size\": 115902,\n \"children\": [\n {\n \"name\": \"component/visualMap/ContinuousModel.ts\",\n \"size\": 10417,\n \"value\": 10417\n },\n {\n \"name\": \"component/visualMap/ContinuousView.ts\",\n \"size\": 33304,\n \"value\": 33304\n },\n {\n \"name\": \"component/visualMap/PiecewiseModel.ts\",\n \"size\": 20174,\n \"value\": 20174\n },\n {\n \"name\": \"component/visualMap/PiecewiseView.ts\",\n \"size\": 8244,\n \"value\": 8244\n },\n {\n \"name\": \"component/visualMap/VisualMapModel.ts\",\n \"size\": 19339,\n \"value\": 19339\n },\n {\n \"name\": \"component/visualMap/VisualMapView.ts\",\n \"size\": 5532,\n \"value\": 5532\n },\n {\n \"name\": \"component/visualMap/helper.ts\",\n \"size\": 3204,\n \"value\": 3204\n },\n {\n \"name\": \"component/visualMap/install.ts\",\n \"size\": 1268,\n \"value\": 1268\n },\n {\n \"name\": \"component/visualMap/installCommon.ts\",\n \"size\": 2407,\n \"value\": 2407\n },\n {\n \"name\": \"component/visualMap/installVisualMapContinuous.ts\",\n \"size\": 1213,\n \"value\": 1213\n },\n {\n \"name\": \"component/visualMap/installVisualMapPiecewise.ts\",\n \"size\": 1207,\n \"value\": 1207\n },\n {\n \"name\": \"component/visualMap/preprocessor.ts\",\n \"size\": 1969,\n \"value\": 1969\n },\n {\n \"name\": \"component/visualMap/typeDefaulter.ts\",\n \"size\": 1645,\n \"value\": 1645\n },\n {\n \"name\": \"component/visualMap/visualEncoding.ts\",\n \"size\": 4633,\n \"value\": 4633\n },\n {\n \"name\": \"component/visualMap/visualMapAction.ts\",\n \"size\": 1346,\n \"value\": 1346\n }\n ],\n \"value\": 115902\n },\n {\n \"name\": \"component/visualMap.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"component/visualMapContinuous.ts\",\n \"size\": 908,\n \"value\": 908\n },\n {\n \"name\": \"component/visualMapPiecewise.ts\",\n \"size\": 907,\n \"value\": 907\n }\n ],\n \"value\": 1100395\n },\n {\n \"name\": \"coord\",\n \"size\": 347267,\n \"children\": [\n {\n \"name\": \"coord/Axis.ts\",\n \"size\": 10739,\n \"value\": 10739\n },\n {\n \"name\": \"coord/AxisBaseModel.ts\",\n \"size\": 1315,\n \"value\": 1315\n },\n {\n \"name\": \"coord/CoordinateSystem.ts\",\n \"size\": 5980,\n \"value\": 5980\n },\n {\n \"name\": \"coord/View.ts\",\n \"size\": 10106,\n \"value\": 10106\n },\n {\n \"name\": \"coord/axisCommonTypes.ts\",\n \"size\": 7385,\n \"value\": 7385\n },\n {\n \"name\": \"coord/axisDefault.ts\",\n \"size\": 4901,\n \"value\": 4901\n },\n {\n \"name\": \"coord/axisHelper.ts\",\n \"size\": 15047,\n \"value\": 15047\n },\n {\n \"name\": \"coord/axisModelCommonMixin.ts\",\n \"size\": 1479,\n \"value\": 1479\n },\n {\n \"name\": \"coord/axisModelCreator.ts\",\n \"size\": 4611,\n \"value\": 4611\n },\n {\n \"name\": \"coord/axisTickLabelBuilder.ts\",\n \"size\": 15664,\n \"value\": 15664\n },\n {\n \"name\": \"coord/calendar\",\n \"size\": 25306,\n \"children\": [\n {\n \"name\": \"coord/calendar/Calendar.ts\",\n \"size\": 16219,\n \"value\": 16219\n },\n {\n \"name\": \"coord/calendar/CalendarModel.ts\",\n \"size\": 7389,\n \"value\": 7389\n },\n {\n \"name\": \"coord/calendar/prepareCustom.ts\",\n \"size\": 1698,\n \"value\": 1698\n }\n ],\n \"value\": 25306\n },\n {\n \"name\": \"coord/cartesian\",\n \"size\": 55677,\n \"children\": [\n {\n \"name\": \"coord/cartesian/Axis2D.ts\",\n \"size\": 3598,\n \"value\": 3598\n },\n {\n \"name\": \"coord/cartesian/AxisModel.ts\",\n \"size\": 2365,\n \"value\": 2365\n },\n {\n \"name\": \"coord/cartesian/Cartesian.ts\",\n \"size\": 2900,\n \"value\": 2900\n },\n {\n \"name\": \"coord/cartesian/Cartesian2D.ts\",\n \"size\": 6469,\n \"value\": 6469\n },\n {\n \"name\": \"coord/cartesian/Grid.ts\",\n \"size\": 20952,\n \"value\": 20952\n },\n {\n \"name\": \"coord/cartesian/GridModel.ts\",\n \"size\": 2093,\n \"value\": 2093\n },\n {\n \"name\": \"coord/cartesian/cartesianAxisHelper.ts\",\n \"size\": 4715,\n \"value\": 4715\n },\n {\n \"name\": \"coord/cartesian/defaultAxisExtentFromData.ts\",\n \"size\": 10529,\n \"value\": 10529\n },\n {\n \"name\": \"coord/cartesian/prepareCustom.ts\",\n \"size\": 2056,\n \"value\": 2056\n }\n ],\n \"value\": 55677\n },\n {\n \"name\": \"coord/geo\",\n \"size\": 74301,\n \"children\": [\n {\n \"name\": \"coord/geo/Geo.ts\",\n \"size\": 6598,\n \"value\": 6598\n },\n {\n \"name\": \"coord/geo/GeoJSONResource.ts\",\n \"size\": 5590,\n \"value\": 5590\n },\n {\n \"name\": \"coord/geo/GeoModel.ts\",\n \"size\": 8762,\n \"value\": 8762\n },\n {\n \"name\": \"coord/geo/GeoSVGResource.ts\",\n \"size\": 14611,\n \"value\": 14611\n },\n {\n \"name\": \"coord/geo/Region.ts\",\n \"size\": 7708,\n \"value\": 7708\n },\n {\n \"name\": \"coord/geo/fix\",\n \"size\": 7069,\n \"children\": [\n {\n \"name\": \"coord/geo/fix/diaoyuIsland.ts\",\n \"size\": 1510,\n \"value\": 1510\n },\n {\n \"name\": \"coord/geo/fix/geoCoord.ts\",\n \"size\": 1371,\n \"value\": 1371\n },\n {\n \"name\": \"coord/geo/fix/nanhai.ts\",\n \"size\": 2706,\n \"value\": 2706\n },\n {\n \"name\": \"coord/geo/fix/textCoord.ts\",\n \"size\": 1482,\n \"value\": 1482\n }\n ],\n \"value\": 7069\n },\n {\n \"name\": \"coord/geo/geoCreator.ts\",\n \"size\": 8364,\n \"value\": 8364\n },\n {\n \"name\": \"coord/geo/geoSourceManager.ts\",\n \"size\": 4532,\n \"value\": 4532\n },\n {\n \"name\": \"coord/geo/geoTypes.ts\",\n \"size\": 4145,\n \"value\": 4145\n },\n {\n \"name\": \"coord/geo/parseGeoJson.ts\",\n \"size\": 4812,\n \"value\": 4812\n },\n {\n \"name\": \"coord/geo/prepareCustom.ts\",\n \"size\": 2110,\n \"value\": 2110\n }\n ],\n \"value\": 74301\n },\n {\n \"name\": \"coord/parallel\",\n \"size\": 36731,\n \"children\": [\n {\n \"name\": \"coord/parallel/AxisModel.ts\",\n \"size\": 4949,\n \"value\": 4949\n },\n {\n \"name\": \"coord/parallel/Parallel.ts\",\n \"size\": 19683,\n \"value\": 19683\n },\n {\n \"name\": \"coord/parallel/ParallelAxis.ts\",\n \"size\": 1622,\n \"value\": 1622\n },\n {\n \"name\": \"coord/parallel/ParallelModel.ts\",\n \"size\": 5725,\n \"value\": 5725\n },\n {\n \"name\": \"coord/parallel/parallelCreator.ts\",\n \"size\": 2335,\n \"value\": 2335\n },\n {\n \"name\": \"coord/parallel/parallelPreprocessor.ts\",\n \"size\": 2417,\n \"value\": 2417\n }\n ],\n \"value\": 36731\n },\n {\n \"name\": \"coord/polar\",\n \"size\": 27609,\n \"children\": [\n {\n \"name\": \"coord/polar/AngleAxis.ts\",\n \"size\": 4232,\n \"value\": 4232\n },\n {\n \"name\": \"coord/polar/AxisModel.ts\",\n \"size\": 2777,\n \"value\": 2777\n },\n {\n \"name\": \"coord/polar/Polar.ts\",\n \"size\": 7817,\n \"value\": 7817\n },\n {\n \"name\": \"coord/polar/PolarModel.ts\",\n \"size\": 2057,\n \"value\": 2057\n },\n {\n \"name\": \"coord/polar/RadiusAxis.ts\",\n \"size\": 1539,\n \"value\": 1539\n },\n {\n \"name\": \"coord/polar/polarCreator.ts\",\n \"size\": 6577,\n \"value\": 6577\n },\n {\n \"name\": \"coord/polar/prepareCustom.ts\",\n \"size\": 2610,\n \"value\": 2610\n }\n ],\n \"value\": 27609\n },\n {\n \"name\": \"coord/radar\",\n \"size\": 18756,\n \"children\": [\n {\n \"name\": \"coord/radar/IndicatorAxis.ts\",\n \"size\": 1335,\n \"value\": 1335\n },\n {\n \"name\": \"coord/radar/Radar.ts\",\n \"size\": 10466,\n \"value\": 10466\n },\n {\n \"name\": \"coord/radar/RadarModel.ts\",\n \"size\": 6955,\n \"value\": 6955\n }\n ],\n \"value\": 18756\n },\n {\n \"name\": \"coord/scaleRawExtentInfo.ts\",\n \"size\": 11853,\n \"value\": 11853\n },\n {\n \"name\": \"coord/single\",\n \"size\": 19807,\n \"children\": [\n {\n \"name\": \"coord/single/AxisModel.ts\",\n \"size\": 3039,\n \"value\": 3039\n },\n {\n \"name\": \"coord/single/Single.ts\",\n \"size\": 7563,\n \"value\": 7563\n },\n {\n \"name\": \"coord/single/SingleAxis.ts\",\n \"size\": 2246,\n \"value\": 2246\n },\n {\n \"name\": \"coord/single/prepareCustom.ts\",\n \"size\": 1875,\n \"value\": 1875\n },\n {\n \"name\": \"coord/single/singleAxisHelper.ts\",\n \"size\": 2801,\n \"value\": 2801\n },\n {\n \"name\": \"coord/single/singleCreator.ts\",\n \"size\": 2283,\n \"value\": 2283\n }\n ],\n \"value\": 19807\n }\n ],\n \"value\": 347267\n },\n {\n \"name\": \"core\",\n \"size\": 158407,\n \"children\": [\n {\n \"name\": \"core/CoordinateSystem.ts\",\n \"size\": 2238,\n \"value\": 2238\n },\n {\n \"name\": \"core/ExtensionAPI.ts\",\n \"size\": 2758,\n \"value\": 2758\n },\n {\n \"name\": \"core/Scheduler.ts\",\n \"size\": 26263,\n \"value\": 26263\n },\n {\n \"name\": \"core/context.context.echarts.ts\",\n \"size\": 105836,\n \"value\": 105836\n },\n {\n \"name\": \"core/lifecycle.ts\",\n \"size\": 2905,\n \"value\": 2905\n },\n {\n \"name\": \"core/locale.ts\",\n \"size\": 2757,\n \"value\": 2757\n },\n {\n \"name\": \"core/task.ts\",\n \"size\": 15650,\n \"value\": 15650\n }\n ],\n \"value\": 158407\n },\n {\n \"name\": \"data\",\n \"size\": 257880,\n \"children\": [\n {\n \"name\": \"data/DataDiffer.ts\",\n \"size\": 11383,\n \"value\": 11383\n },\n {\n \"name\": \"data/DataDimensionInfo.ts\",\n \"size\": 3819,\n \"value\": 3819\n },\n {\n \"name\": \"data/Graph.ts\",\n \"size\": 13419,\n \"value\": 13419\n },\n {\n \"name\": \"data/List.ts\",\n \"size\": 80255,\n \"value\": 80255\n },\n {\n \"name\": \"data/OrdinalMeta.ts\",\n \"size\": 4280,\n \"value\": 4280\n },\n {\n \"name\": \"data/Source.ts\",\n \"size\": 17104,\n \"value\": 17104\n },\n {\n \"name\": \"data/Tree.ts\",\n \"size\": 13459,\n \"value\": 13459\n },\n {\n \"name\": \"data/helper\",\n \"size\": 114161,\n \"children\": [\n {\n \"name\": \"data/helper/completeDimensions.ts\",\n \"size\": 13826,\n \"value\": 13826\n },\n {\n \"name\": \"data/helper/createDimensions.ts\",\n \"size\": 3109,\n \"value\": 3109\n },\n {\n \"name\": \"data/helper/dataProvider.ts\",\n \"size\": 17686,\n \"value\": 17686\n },\n {\n \"name\": \"data/helper/dataStackHelper.ts\",\n \"size\": 6541,\n \"value\": 6541\n },\n {\n \"name\": \"data/helper/dataValueHelper.ts\",\n \"size\": 9894,\n \"value\": 9894\n },\n {\n \"name\": \"data/helper/dimensionHelper.ts\",\n \"size\": 6249,\n \"value\": 6249\n },\n {\n \"name\": \"data/helper/linkList.ts\",\n \"size\": 5908,\n \"value\": 5908\n },\n {\n \"name\": \"data/helper/sourceHelper.ts\",\n \"size\": 16203,\n \"value\": 16203\n },\n {\n \"name\": \"data/helper/sourceManager.ts\",\n \"size\": 14546,\n \"value\": 14546\n },\n {\n \"name\": \"data/helper/transform.ts\",\n \"size\": 20199,\n \"value\": 20199\n }\n ],\n \"value\": 114161\n }\n ],\n \"value\": 257880\n },\n {\n \"name\": \"context.context.echarts.all.ts\",\n \"size\": 7676,\n \"value\": 7676\n },\n {\n \"name\": \"context.context.echarts.blank.ts\",\n \"size\": 818,\n \"value\": 818\n },\n {\n \"name\": \"context.context.echarts.common.ts\",\n \"size\": 2624,\n \"value\": 2624\n },\n {\n \"name\": \"context.context.echarts.simple.ts\",\n \"size\": 1481,\n \"value\": 1481\n },\n {\n \"name\": \"context.context.echarts.ts\",\n \"size\": 1727,\n \"value\": 1727\n },\n {\n \"name\": \"export\",\n \"size\": 43462,\n \"children\": [\n {\n \"name\": \"export/all.ts\",\n \"size\": 905,\n \"value\": 905\n },\n {\n \"name\": \"export/api\",\n \"size\": 9766,\n \"children\": [\n {\n \"name\": \"export/api/format.ts\",\n \"size\": 1004,\n \"value\": 1004\n },\n {\n \"name\": \"export/api/graphic.ts\",\n \"size\": 1287,\n \"value\": 1287\n },\n {\n \"name\": \"export/api/helper.ts\",\n \"size\": 4467,\n \"value\": 4467\n },\n {\n \"name\": \"export/api/number.ts\",\n \"size\": 1147,\n \"value\": 1147\n },\n {\n \"name\": \"export/api/time.ts\",\n \"size\": 886,\n \"value\": 886\n },\n {\n \"name\": \"export/api/util.ts\",\n \"size\": 975,\n \"value\": 975\n }\n ],\n \"value\": 9766\n },\n {\n \"name\": \"export/api.ts\",\n \"size\": 3749,\n \"value\": 3749\n },\n {\n \"name\": \"export/charts.ts\",\n \"size\": 4745,\n \"value\": 4745\n },\n {\n \"name\": \"export/components.ts\",\n \"size\": 3847,\n \"value\": 3847\n },\n {\n \"name\": \"export/core.ts\",\n \"size\": 4759,\n \"value\": 4759\n },\n {\n \"name\": \"export/features.ts\",\n \"size\": 1022,\n \"value\": 1022\n },\n {\n \"name\": \"export/option.ts\",\n \"size\": 13730,\n \"value\": 13730\n },\n {\n \"name\": \"export/renderers.ts\",\n \"size\": 939,\n \"value\": 939\n }\n ],\n \"value\": 43462\n },\n {\n \"name\": \"extension.ts\",\n \"size\": 3976,\n \"value\": 3976\n },\n {\n \"name\": \"global.d.ts\",\n \"size\": 824,\n \"value\": 824\n },\n {\n \"name\": \"i18n\",\n \"size\": 40367,\n \"children\": [\n {\n \"name\": \"i18n/langCS.ts\",\n \"size\": 4517,\n \"value\": 4517\n },\n {\n \"name\": \"i18n/langDE.ts\",\n \"size\": 4549,\n \"value\": 4549\n },\n {\n \"name\": \"i18n/langEN.ts\",\n \"size\": 4381,\n \"value\": 4381\n },\n {\n \"name\": \"i18n/langES.ts\",\n \"size\": 2543,\n \"value\": 2543\n },\n {\n \"name\": \"i18n/langFI.ts\",\n \"size\": 2603,\n \"value\": 2603\n },\n {\n \"name\": \"i18n/langFR.ts\",\n \"size\": 4556,\n \"value\": 4556\n },\n {\n \"name\": \"i18n/langJA.ts\",\n \"size\": 4846,\n \"value\": 4846\n },\n {\n \"name\": \"i18n/langSI.ts\",\n \"size\": 4565,\n \"value\": 4565\n },\n {\n \"name\": \"i18n/langTH.ts\",\n \"size\": 3388,\n \"value\": 3388\n },\n {\n \"name\": \"i18n/langZH.ts\",\n \"size\": 4419,\n \"value\": 4419\n }\n ],\n \"value\": 40367\n },\n {\n \"name\": \"label\",\n \"size\": 80551,\n \"children\": [\n {\n \"name\": \"label/LabelManager.ts\",\n \"size\": 20409,\n \"value\": 20409\n },\n {\n \"name\": \"label/installLabelLayout.ts\",\n \"size\": 1185,\n \"value\": 1185\n },\n {\n \"name\": \"label/labelGuideHelper.ts\",\n \"size\": 21067,\n \"value\": 21067\n },\n {\n \"name\": \"label/labelLayoutHelper.ts\",\n \"size\": 11492,\n \"value\": 11492\n },\n {\n \"name\": \"label/labelStyle.ts\",\n \"size\": 26398,\n \"value\": 26398\n }\n ],\n \"value\": 80551\n },\n {\n \"name\": \"layout\",\n \"size\": 38780,\n \"children\": [\n {\n \"name\": \"layout/barGrid.ts\",\n \"size\": 23261,\n \"value\": 23261\n },\n {\n \"name\": \"layout/barPolar.ts\",\n \"size\": 11394,\n \"value\": 11394\n },\n {\n \"name\": \"layout/points.ts\",\n \"size\": 4125,\n \"value\": 4125\n }\n ],\n \"value\": 38780\n },\n {\n \"name\": \"legacy\",\n \"size\": 6326,\n \"children\": [\n {\n \"name\": \"legacy/dataSelectAction.ts\",\n \"size\": 4747,\n \"value\": 4747\n },\n {\n \"name\": \"legacy/getTextRect.ts\",\n \"size\": 1579,\n \"value\": 1579\n }\n ],\n \"value\": 6326\n },\n {\n \"name\": \"loading\",\n \"size\": 4935,\n \"children\": [\n {\n \"name\": \"loading/default.ts\",\n \"size\": 4935,\n \"value\": 4935\n }\n ],\n \"value\": 4935\n },\n {\n \"name\": \"model\",\n \"size\": 140931,\n \"children\": [\n {\n \"name\": \"model/Component.ts\",\n \"size\": 11309,\n \"value\": 11309\n },\n {\n \"name\": \"model/Global.ts\",\n \"size\": 38114,\n \"value\": 38114\n },\n {\n \"name\": \"model/Model.ts\",\n \"size\": 9975,\n \"value\": 9975\n },\n {\n \"name\": \"model/OptionManager.ts\",\n \"size\": 18599,\n \"value\": 18599\n },\n {\n \"name\": \"model/Series.ts\",\n \"size\": 24069,\n \"value\": 24069\n },\n {\n \"name\": \"model/globalDefault.ts\",\n \"size\": 4656,\n \"value\": 4656\n },\n {\n \"name\": \"model/internalComponentCreator.ts\",\n \"size\": 3007,\n \"value\": 3007\n },\n {\n \"name\": \"model/mixin\",\n \"size\": 23864,\n \"children\": [\n {\n \"name\": \"model/mixin/areaStyle.ts\",\n \"size\": 1770,\n \"value\": 1770\n },\n {\n \"name\": \"model/mixin/dataFormat.ts\",\n \"size\": 8562,\n \"value\": 8562\n },\n {\n \"name\": \"model/mixin/itemStyle.ts\",\n \"size\": 2193,\n \"value\": 2193\n },\n {\n \"name\": \"model/mixin/lineStyle.ts\",\n \"size\": 2023,\n \"value\": 2023\n },\n {\n \"name\": \"model/mixin/makeStyleMapper.ts\",\n \"size\": 2035,\n \"value\": 2035\n },\n {\n \"name\": \"model/mixin/palette.ts\",\n \"size\": 4309,\n \"value\": 4309\n },\n {\n \"name\": \"model/mixin/textStyle.ts\",\n \"size\": 2972,\n \"value\": 2972\n }\n ],\n \"value\": 23864\n },\n {\n \"name\": \"model/referHelper.ts\",\n \"size\": 7338,\n \"value\": 7338\n }\n ],\n \"value\": 140931\n },\n {\n \"name\": \"preprocessor\",\n \"size\": 21470,\n \"children\": [\n {\n \"name\": \"preprocessor/backwardCompat.ts\",\n \"size\": 9187,\n \"value\": 9187\n },\n {\n \"name\": \"preprocessor/helper\",\n \"size\": 12283,\n \"children\": [\n {\n \"name\": \"preprocessor/helper/compatStyle.ts\",\n \"size\": 12283,\n \"value\": 12283\n }\n ],\n \"value\": 12283\n }\n ],\n \"value\": 21470\n },\n {\n \"name\": \"processor\",\n \"size\": 13789,\n \"children\": [\n {\n \"name\": \"processor/dataFilter.ts\",\n \"size\": 1742,\n \"value\": 1742\n },\n {\n \"name\": \"processor/dataSample.ts\",\n \"size\": 4292,\n \"value\": 4292\n },\n {\n \"name\": \"processor/dataStack.ts\",\n \"size\": 6276,\n \"value\": 6276\n },\n {\n \"name\": \"processor/negativeDataFilter.ts\",\n \"size\": 1479,\n \"value\": 1479\n }\n ],\n \"value\": 13789\n },\n {\n \"name\": \"renderer\",\n \"size\": 2072,\n \"children\": [\n {\n \"name\": \"renderer/installCanvasRenderer.ts\",\n \"size\": 1042,\n \"value\": 1042\n },\n {\n \"name\": \"renderer/installSVGRenderer.ts\",\n \"size\": 1030,\n \"value\": 1030\n }\n ],\n \"value\": 2072\n },\n {\n \"name\": \"scale\",\n \"size\": 56173,\n \"children\": [\n {\n \"name\": \"scale/Interval.ts\",\n \"size\": 9480,\n \"value\": 9480\n },\n {\n \"name\": \"scale/Log.ts\",\n \"size\": 6383,\n \"value\": 6383\n },\n {\n \"name\": \"scale/Ordinal.ts\",\n \"size\": 9362,\n \"value\": 9362\n },\n {\n \"name\": \"scale/Scale.ts\",\n \"size\": 5235,\n \"value\": 5235\n },\n {\n \"name\": \"scale/Time.ts\",\n \"size\": 22179,\n \"value\": 22179\n },\n {\n \"name\": \"scale/helper.ts\",\n \"size\": 3534,\n \"value\": 3534\n }\n ],\n \"value\": 56173\n },\n {\n \"name\": \"theme\",\n \"size\": 6143,\n \"children\": [\n {\n \"name\": \"theme/dark.ts\",\n \"size\": 4867,\n \"value\": 4867\n },\n {\n \"name\": \"theme/light.ts\",\n \"size\": 1276,\n \"value\": 1276\n }\n ],\n \"value\": 6143\n },\n {\n \"name\": \"util\",\n \"size\": 306511,\n \"children\": [\n {\n \"name\": \"util/ECEventProcessor.ts\",\n \"size\": 5900,\n \"value\": 5900\n },\n {\n \"name\": \"util/KDTree.ts\",\n \"size\": 8723,\n \"value\": 8723\n },\n {\n \"name\": \"util/animation.ts\",\n \"size\": 3488,\n \"value\": 3488\n },\n {\n \"name\": \"util/clazz.ts\",\n \"size\": 12608,\n \"value\": 12608\n },\n {\n \"name\": \"util/component.ts\",\n \"size\": 8501,\n \"value\": 8501\n },\n {\n \"name\": \"util/conditionalExpression.ts\",\n \"size\": 14702,\n \"value\": 14702\n },\n {\n \"name\": \"util/decal.ts\",\n \"size\": 14753,\n \"value\": 14753\n },\n {\n \"name\": \"util/event.ts\",\n \"size\": 1223,\n \"value\": 1223\n },\n {\n \"name\": \"util/format.ts\",\n \"size\": 10989,\n \"value\": 10989\n },\n {\n \"name\": \"util/graphic.ts\",\n \"size\": 19902,\n \"value\": 19902\n },\n {\n \"name\": \"util/innerStore.ts\",\n \"size\": 1939,\n \"value\": 1939\n },\n {\n \"name\": \"util/layout.ts\",\n \"size\": 17818,\n \"value\": 17818\n },\n {\n \"name\": \"util/log.ts\",\n \"size\": 4417,\n \"value\": 4417\n },\n {\n \"name\": \"util/model.ts\",\n \"size\": 37198,\n \"value\": 37198\n },\n {\n \"name\": \"util/number.ts\",\n \"size\": 19583,\n \"value\": 19583\n },\n {\n \"name\": \"util/quickSelect.ts\",\n \"size\": 2920,\n \"value\": 2920\n },\n {\n \"name\": \"util/shape\",\n \"size\": 2905,\n \"children\": [\n {\n \"name\": \"util/shape/sausage.ts\",\n \"size\": 2905,\n \"value\": 2905\n }\n ],\n \"value\": 2905\n },\n {\n \"name\": \"util/states.ts\",\n \"size\": 29540,\n \"value\": 29540\n },\n {\n \"name\": \"util/styleCompat.ts\",\n \"size\": 11390,\n \"value\": 11390\n },\n {\n \"name\": \"util/symbol.ts\",\n \"size\": 10302,\n \"value\": 10302\n },\n {\n \"name\": \"util/throttle.ts\",\n \"size\": 5384,\n \"value\": 5384\n },\n {\n \"name\": \"util/time.ts\",\n \"size\": 11356,\n \"value\": 11356\n },\n {\n \"name\": \"util/types.ts\",\n \"size\": 49661,\n \"value\": 49661\n },\n {\n \"name\": \"util/vendor.ts\",\n \"size\": 1309,\n \"value\": 1309\n }\n ],\n \"value\": 306511\n },\n {\n \"name\": \"view\",\n \"size\": 13542,\n \"children\": [\n {\n \"name\": \"view/Chart.ts\",\n \"size\": 9239,\n \"value\": 9239\n },\n {\n \"name\": \"view/Component.ts\",\n \"size\": 4303,\n \"value\": 4303\n }\n ],\n \"value\": 13542\n },\n {\n \"name\": \"visual\",\n \"size\": 70915,\n \"children\": [\n {\n \"name\": \"visual/LegendVisualProvider.ts\",\n \"size\": 2598,\n \"value\": 2598\n },\n {\n \"name\": \"visual/VisualMapping.ts\",\n \"size\": 24898,\n \"value\": 24898\n },\n {\n \"name\": \"visual/aria.ts\",\n \"size\": 10732,\n \"value\": 10732\n },\n {\n \"name\": \"visual/commonVisualTypes.ts\",\n \"size\": 1264,\n \"value\": 1264\n },\n {\n \"name\": \"visual/decal.ts\",\n \"size\": 1774,\n \"value\": 1774\n },\n {\n \"name\": \"visual/helper.ts\",\n \"size\": 3039,\n \"value\": 3039\n },\n {\n \"name\": \"visual/style.ts\",\n \"size\": 9355,\n \"value\": 9355\n },\n {\n \"name\": \"visual/symbol.ts\",\n \"size\": 6643,\n \"value\": 6643\n },\n {\n \"name\": \"visual/visualDefault.ts\",\n \"size\": 2061,\n \"value\": 2061\n },\n {\n \"name\": \"visual/visualSolution.ts\",\n \"size\": 8551,\n \"value\": 8551\n }\n ],\n \"value\": 70915\n },\n {\n \"name\": \"zrender\",\n \"children\": [\n {\n \"name\": \"Element.ts\",\n \"size\": 62570,\n \"value\": 62570\n },\n {\n \"name\": \"Handler.ts\",\n \"size\": 16369,\n \"value\": 16369\n },\n {\n \"name\": \"PainterBase.ts\",\n \"size\": 1043,\n \"value\": 1043\n },\n {\n \"name\": \"Storage.ts\",\n \"size\": 7345,\n \"value\": 7345\n },\n {\n \"name\": \"animation\",\n \"size\": 51765,\n \"children\": [\n {\n \"name\": \"animation/Animation.ts\",\n \"size\": 5960,\n \"value\": 5960\n },\n {\n \"name\": \"animation/Animator.ts\",\n \"size\": 33681,\n \"value\": 33681\n },\n {\n \"name\": \"animation/Clip.ts\",\n \"size\": 3788,\n \"value\": 3788\n },\n {\n \"name\": \"animation/easing.ts\",\n \"size\": 7646,\n \"value\": 7646\n },\n {\n \"name\": \"animation/requestAnimationFrame.ts\",\n \"size\": 690,\n \"value\": 690\n }\n ],\n \"value\": 51765\n },\n {\n \"name\": \"canvas\",\n \"size\": 79635,\n \"children\": [\n {\n \"name\": \"canvas/Layer.ts\",\n \"size\": 17024,\n \"value\": 17024\n },\n {\n \"name\": \"canvas/Painter.ts\",\n \"size\": 32574,\n \"value\": 32574\n },\n {\n \"name\": \"canvas/canvas.ts\",\n \"size\": 113,\n \"value\": 113\n },\n {\n \"name\": \"canvas/graphic.ts\",\n \"size\": 27228,\n \"value\": 27228\n },\n {\n \"name\": \"canvas/helper.ts\",\n \"size\": 2696,\n \"value\": 2696\n }\n ],\n \"value\": 79635\n },\n {\n \"name\": \"config.ts\",\n \"size\": 800,\n \"value\": 800\n },\n {\n \"name\": \"contain\",\n \"size\": 25900,\n \"children\": [\n {\n \"name\": \"contain/arc.ts\",\n \"size\": 1168,\n \"value\": 1168\n },\n {\n \"name\": \"contain/cubic.ts\",\n \"size\": 838,\n \"value\": 838\n },\n {\n \"name\": \"contain/line.ts\",\n \"size\": 981,\n \"value\": 981\n },\n {\n \"name\": \"contain/path.ts\",\n \"size\": 12770,\n \"value\": 12770\n },\n {\n \"name\": \"contain/polygon.ts\",\n \"size\": 722,\n \"value\": 722\n },\n {\n \"name\": \"contain/quadratic.ts\",\n \"size\": 753,\n \"value\": 753\n },\n {\n \"name\": \"contain/text.ts\",\n \"size\": 7844,\n \"value\": 7844\n },\n {\n \"name\": \"contain/util.ts\",\n \"size\": 170,\n \"value\": 170\n },\n {\n \"name\": \"contain/windingLine.ts\",\n \"size\": 654,\n \"value\": 654\n }\n ],\n \"value\": 25900\n },\n {\n \"name\": \"core\",\n \"size\": 182134,\n \"children\": [\n {\n \"name\": \"core/BoundingRect.ts\",\n \"size\": 7805,\n \"value\": 7805\n },\n {\n \"name\": \"core/Eventful.ts\",\n \"size\": 9493,\n \"value\": 9493\n },\n {\n \"name\": \"core/GestureMgr.ts\",\n \"size\": 3179,\n \"value\": 3179\n },\n {\n \"name\": \"core/LRU.ts\",\n \"size\": 3498,\n \"value\": 3498\n },\n {\n \"name\": \"core/OrientedBoundingRect.ts\",\n \"size\": 5917,\n \"value\": 5917\n },\n {\n \"name\": \"core/PathProxy.ts\",\n \"size\": 36414,\n \"value\": 36414\n },\n {\n \"name\": \"core/Point.ts\",\n \"size\": 4097,\n \"value\": 4097\n },\n {\n \"name\": \"core/Transformable.ts\",\n \"size\": 9273,\n \"value\": 9273\n },\n {\n \"name\": \"core/WeakMap.ts\",\n \"size\": 1216,\n \"value\": 1216\n },\n {\n \"name\": \"core/arrayDiff.ts\",\n \"size\": 6082,\n \"value\": 6082\n },\n {\n \"name\": \"core/bbox.ts\",\n \"size\": 5038,\n \"value\": 5038\n },\n {\n \"name\": \"core/curve.ts\",\n \"size\": 12552,\n \"value\": 12552\n },\n {\n \"name\": \"core/dom.ts\",\n \"size\": 5970,\n \"value\": 5970\n },\n {\n \"name\": \"core/env.ts\",\n \"size\": 3281,\n \"value\": 3281\n },\n {\n \"name\": \"core/event.ts\",\n \"size\": 12491,\n \"value\": 12491\n },\n {\n \"name\": \"core/fourPointsTransform.ts\",\n \"size\": 3622,\n \"value\": 3622\n },\n {\n \"name\": \"core/matrix.ts\",\n \"size\": 3136,\n \"value\": 3136\n },\n {\n \"name\": \"core/timsort.ts\",\n \"size\": 17183,\n \"value\": 17183\n },\n {\n \"name\": \"core/types.ts\",\n \"size\": 3240,\n \"value\": 3240\n },\n {\n \"name\": \"core/util.ts\",\n \"size\": 24309,\n \"value\": 24309\n },\n {\n \"name\": \"core/vector.ts\",\n \"size\": 4338,\n \"value\": 4338\n }\n ],\n \"value\": 182134\n },\n {\n \"name\": \"debug\",\n \"size\": 3492,\n \"children\": [\n {\n \"name\": \"debug/showDebugDirtyRect.ts\",\n \"size\": 3492,\n \"value\": 3492\n }\n ],\n \"value\": 3492\n },\n {\n \"name\": \"dom\",\n \"size\": 22220,\n \"children\": [\n {\n \"name\": \"dom/HandlerProxy.ts\",\n \"size\": 22220,\n \"value\": 22220\n }\n ],\n \"value\": 22220\n },\n {\n \"name\": \"export.ts\",\n \"size\": 3317,\n \"value\": 3317\n },\n {\n \"name\": \"graphic\",\n \"size\": 169365,\n \"children\": [\n {\n \"name\": \"graphic/CompoundPath.ts\",\n \"size\": 1606,\n \"value\": 1606\n },\n {\n \"name\": \"graphic/Displayable.ts\",\n \"size\": 19541,\n \"value\": 19541\n },\n {\n \"name\": \"graphic/Gradient.ts\",\n \"size\": 754,\n \"value\": 754\n },\n {\n \"name\": \"graphic/Group.ts\",\n \"size\": 7645,\n \"value\": 7645\n },\n {\n \"name\": \"graphic/Image.ts\",\n \"size\": 3227,\n \"value\": 3227\n },\n {\n \"name\": \"graphic/IncrementalDisplayable.ts\",\n \"size\": 4426,\n \"value\": 4426\n },\n {\n \"name\": \"graphic/LinearGradient.ts\",\n \"size\": 1096,\n \"value\": 1096\n },\n {\n \"name\": \"graphic/Path.ts\",\n \"size\": 21284,\n \"value\": 21284\n },\n {\n \"name\": \"graphic/Pattern.ts\",\n \"size\": 1721,\n \"value\": 1721\n },\n {\n \"name\": \"graphic/RadialGradient.ts\",\n \"size\": 1020,\n \"value\": 1020\n },\n {\n \"name\": \"graphic/TSpan.ts\",\n \"size\": 2844,\n \"value\": 2844\n },\n {\n \"name\": \"graphic/Text.ts\",\n \"size\": 33862,\n \"value\": 33862\n },\n {\n \"name\": \"graphic/constants.ts\",\n \"size\": 168,\n \"value\": 168\n },\n {\n \"name\": \"graphic/helper\",\n \"size\": 47692,\n \"children\": [\n {\n \"name\": \"graphic/helper/dashStyle.ts\",\n \"size\": 503,\n \"value\": 503\n },\n {\n \"name\": \"graphic/helper/image.ts\",\n \"size\": 2989,\n \"value\": 2989\n },\n {\n \"name\": \"graphic/helper/parseText.ts\",\n \"size\": 23755,\n \"value\": 23755\n },\n {\n \"name\": \"graphic/helper/poly.ts\",\n \"size\": 1510,\n \"value\": 1510\n },\n {\n \"name\": \"graphic/helper/roundRect.ts\",\n \"size\": 2138,\n \"value\": 2138\n },\n {\n \"name\": \"graphic/helper/roundSector.ts\",\n \"size\": 8730,\n \"value\": 8730\n },\n {\n \"name\": \"graphic/helper/smoothBezier.ts\",\n \"size\": 2607,\n \"value\": 2607\n },\n {\n \"name\": \"graphic/helper/smoothSpline.ts\",\n \"size\": 1599,\n \"value\": 1599\n },\n {\n \"name\": \"graphic/helper/subPixelOptimize.ts\",\n \"size\": 3861,\n \"value\": 3861\n }\n ],\n \"value\": 47692\n },\n {\n \"name\": \"graphic/shape\",\n \"size\": 22479,\n \"children\": [\n {\n \"name\": \"graphic/shape/Arc.ts\",\n \"size\": 1122,\n \"value\": 1122\n },\n {\n \"name\": \"graphic/shape/BezierCurve.ts\",\n \"size\": 3363,\n \"value\": 3363\n },\n {\n \"name\": \"graphic/shape/Circle.ts\",\n \"size\": 1081,\n \"value\": 1081\n },\n {\n \"name\": \"graphic/shape/Droplet.ts\",\n \"size\": 1070,\n \"value\": 1070\n },\n {\n \"name\": \"graphic/shape/Ellipse.ts\",\n \"size\": 1222,\n \"value\": 1222\n },\n {\n \"name\": \"graphic/shape/Heart.ts\",\n \"size\": 950,\n \"value\": 950\n },\n {\n \"name\": \"graphic/shape/Isogon.ts\",\n \"size\": 1096,\n \"value\": 1096\n },\n {\n \"name\": \"graphic/shape/Line.ts\",\n \"size\": 1985,\n \"value\": 1985\n },\n {\n \"name\": \"graphic/shape/Polygon.ts\",\n \"size\": 811,\n \"value\": 811\n },\n {\n \"name\": \"graphic/shape/Polyline.ts\",\n \"size\": 1023,\n \"value\": 1023\n },\n {\n \"name\": \"graphic/shape/Rect.ts\",\n \"size\": 1927,\n \"value\": 1927\n },\n {\n \"name\": \"graphic/shape/Ring.ts\",\n \"size\": 781,\n \"value\": 781\n },\n {\n \"name\": \"graphic/shape/Rose.ts\",\n \"size\": 1484,\n \"value\": 1484\n },\n {\n \"name\": \"graphic/shape/Sector.ts\",\n \"size\": 889,\n \"value\": 889\n },\n {\n \"name\": \"graphic/shape/Star.ts\",\n \"size\": 1698,\n \"value\": 1698\n },\n {\n \"name\": \"graphic/shape/Trochoid.ts\",\n \"size\": 1977,\n \"value\": 1977\n }\n ],\n \"value\": 22479\n }\n ],\n \"value\": 169365\n },\n {\n \"name\": \"mixin\",\n \"size\": 3505,\n \"children\": [\n {\n \"name\": \"mixin/Draggable.ts\",\n \"size\": 3505,\n \"value\": 3505\n }\n ],\n \"value\": 3505\n },\n {\n \"name\": \"svg\",\n \"size\": 63006,\n \"children\": [\n {\n \"name\": \"svg/Painter.ts\",\n \"size\": 15932,\n \"value\": 15932\n },\n {\n \"name\": \"svg/core.ts\",\n \"size\": 120,\n \"value\": 120\n },\n {\n \"name\": \"svg/graphic.ts\",\n \"size\": 13503,\n \"value\": 13503\n },\n {\n \"name\": \"svg/helper\",\n \"size\": 33341,\n \"children\": [\n {\n \"name\": \"svg/helper/ClippathManager.ts\",\n \"size\": 5600,\n \"value\": 5600\n },\n {\n \"name\": \"svg/helper/Definable.ts\",\n \"size\": 7152,\n \"value\": 7152\n },\n {\n \"name\": \"svg/helper/GradientManager.ts\",\n \"size\": 8044,\n \"value\": 8044\n },\n {\n \"name\": \"svg/helper/PatternManager.ts\",\n \"size\": 7269,\n \"value\": 7269\n },\n {\n \"name\": \"svg/helper/ShadowManager.ts\",\n \"size\": 5276,\n \"value\": 5276\n }\n ],\n \"value\": 33341\n },\n {\n \"name\": \"svg/svg.ts\",\n \"size\": 110,\n \"value\": 110\n }\n ],\n \"value\": 63006\n },\n {\n \"name\": \"tool\",\n \"size\": 122091,\n \"children\": [\n {\n \"name\": \"tool/color.ts\",\n \"size\": 19085,\n \"value\": 19085\n },\n {\n \"name\": \"tool/convertPath.ts\",\n \"size\": 8959,\n \"value\": 8959\n },\n {\n \"name\": \"tool/dividePath.ts\",\n \"size\": 12704,\n \"value\": 12704\n },\n {\n \"name\": \"tool/morphPath.ts\",\n \"size\": 28139,\n \"value\": 28139\n },\n {\n \"name\": \"tool/parseSVG.ts\",\n \"size\": 33804,\n \"value\": 33804\n },\n {\n \"name\": \"tool/parseXML.ts\",\n \"size\": 692,\n \"value\": 692\n },\n {\n \"name\": \"tool/path.ts\",\n \"size\": 16023,\n \"value\": 16023\n },\n {\n \"name\": \"tool/transformPath.ts\",\n \"size\": 2685,\n \"value\": 2685\n }\n ],\n \"value\": 122091\n },\n {\n \"name\": \"vml\",\n \"size\": 42681,\n \"children\": [\n {\n \"name\": \"vml/Painter.ts\",\n \"size\": 5103,\n \"value\": 5103\n },\n {\n \"name\": \"vml/core.ts\",\n \"size\": 1242,\n \"value\": 1242\n },\n {\n \"name\": \"vml/graphic.ts\",\n \"size\": 36190,\n \"value\": 36190\n },\n {\n \"name\": \"vml/vml.ts\",\n \"size\": 146,\n \"value\": 146\n }\n ],\n \"value\": 42681\n },\n {\n \"name\": \"zrender.ts\",\n \"size\": 13102,\n \"value\": 13102\n }\n ]\n }\n ],\n \"value\": 3835461\n};\n\nreturn {\n series: [\n {\n type: 'treemap',\n id: 'echarts-package-size',\n animationDurationUpdate: 1000,\n roam: false,\n nodeClick: undefined,\n data: values.children,\n universalTransition: true,\n label: {\n show: true\n },\n breadcrumb: {\n show: false\n }\n }\n ],\n graphic: [\n {\n type: 'group',\n rotation: Math.PI / 4,\n bounding: 'raw',\n right: 110,\n bottom: 110,\n z: 100,\n children: [\n {\n type: 'rect',\n left: 'center',\n top: 'center',\n z: 100,\n shape: {\n width: 400,\n height: 50\n },\n style: {\n fill: 'rgba(0,0,0,0.3)'\n }\n },\n {\n type: 'text',\n left: 'center',\n top: 'center',\n z: 100,\n style: {\n fill: '#fff',\n text: 'CLICK FOR MORE',\n font: 'bold 26px sans-serif'\n }\n }\n ]\n }]\n};", "google": { "callback": "gmapReady", "key": "" @@ -1123,7 +1202,7 @@ "series": [] } }, - "pluginVersion": "5.2.0", + "pluginVersion": "6.2.0", "title": "Treemap", "type": "volkovlabs-echarts-panel" } diff --git a/echarts.volkovlabs.io/radar.json b/echarts.volkovlabs.io/radar.json index 51519b7..0ad5c32 100644 --- a/echarts.volkovlabs.io/radar.json +++ b/echarts.volkovlabs.io/radar.json @@ -24,7 +24,7 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 9, + "id": 10, "links": [ { "asDropdown": false, @@ -46,6 +46,12 @@ "type": "marcusolsson-static-datasource", "uid": "4ytGZmF4k" }, + "fieldConfig": { + "defaults": { + "max": 55000 + }, + "overrides": [] + }, "gridPos": { "h": 12, "w": 12, @@ -62,12 +68,103 @@ "format": "auto", "height": 600 }, - "editorMode": "code", + "editorMode": "visual", + "gaode": { + "key": "", + "plugin": "AMap.Scale,AMap.ToolBar" + }, "getOption": "return {\n legend: {\n data: ['Allocated Budget', 'Actual Spending'],\n left: 'left',\n },\n radar: {\n // shape: 'circle',\n indicator: [\n { name: 'Sales', max: 6500 },\n { name: 'Administration', max: 16000 },\n { name: 'Information Technology', max: 30000 },\n { name: 'Customer Support', max: 38000 },\n { name: 'Development', max: 52000 },\n { name: 'Marketing', max: 25000 }\n ]\n },\n series: [\n {\n name: 'Budget vs spending',\n type: 'radar',\n data: [\n {\n value: [4200, 3000, 20000, 35000, 50000, 18000],\n name: 'Allocated Budget'\n },\n {\n value: [5000, 14000, 28000, 26000, 42000, 21000],\n name: 'Actual Spending'\n }\n ]\n }\n ]\n};", + "google": { + "callback": "gmapReady", + "key": "" + }, "map": "json", - "renderer": "canvas" + "renderer": "canvas", + "themeEditor": { + "config": "{}", + "name": "default" + }, + "visualEditor": { + "code": "return {\n title: {\n text: 'Basic Radar Chart Visual Editor'\n },\n legend: {\n data: ['Allocated Budget', 'Actual Spending']\n },\n radar: context.editor.radar,\n series: context.editor.series\n}\n", + "dataset": [ + { + "name": "Allocated Budget", + "source": "A" + }, + { + "name": "Actual Spending", + "source": "A" + } + ], + "radar": { + "indicator": "A:Indicator Names", + "radius": 65, + "shape": "polygon" + }, + "series": [ + { + "data": [], + "id": "Radar", + "name": "Radar", + "radarDimensions": [ + { + "name": "Allocated Budget", + "uid": "77354c8a-c290-4b1d-816d-9dea1e46f2d1", + "value": "A:Allocated Budget" + }, + { + "name": "Actual Spending", + "uid": "0efc68f6-3a12-49c7-a930-eda71e84fe8f", + "value": "A:Actual Spending" + } + ], + "type": "radar", + "uid": "3207aea5-b7cc-4f9a-8ea3-463051880143" + } + ] + } }, - "title": "Basic Radar Chart", + "pluginVersion": "6.2.0", + "targets": [ + { + "datasource": { + "type": "marcusolsson-static-datasource", + "uid": "4ytGZmF4k" + }, + "frame": { + "fields": [ + { + "config": {}, + "name": "Indicator Names", + "type": "string", + "values": [ + "Sales", + "Administration", + "Information Technology", + "Customer Support", + "Development", + "Marketing" + ] + }, + { + "config": {}, + "name": "Allocated Budget", + "type": "number", + "values": [4200, 3000, 20000, 35000, 50000, 18000] + }, + { + "config": {}, + "name": "Actual Spending", + "type": "number", + "values": [5000, 14000, 28000, 26000, 42000, 21000] + } + ], + "meta": {} + }, + "refId": "A" + } + ], + "title": " ", "type": "volkovlabs-echarts-panel" }, { @@ -92,10 +189,28 @@ "height": 600 }, "editorMode": "code", + "gaode": { + "key": "", + "plugin": "AMap.Scale,AMap.ToolBar" + }, "getOption": "// Schema:\n// date,AQIindex,PM2.5,PM10,CO,NO2,SO2\nconst dataBJ = [\n [55, 9, 56, 0.46, 18, 6, 1],\n [25, 11, 21, 0.65, 34, 9, 2],\n [56, 7, 63, 0.3, 14, 5, 3],\n [33, 7, 29, 0.33, 16, 6, 4],\n [42, 24, 44, 0.76, 40, 16, 5],\n [82, 58, 90, 1.77, 68, 33, 6],\n [74, 49, 77, 1.46, 48, 27, 7],\n [78, 55, 80, 1.29, 59, 29, 8],\n [267, 216, 280, 4.8, 108, 64, 9],\n [185, 127, 216, 2.52, 61, 27, 10],\n [39, 19, 38, 0.57, 31, 15, 11],\n [41, 11, 40, 0.43, 21, 7, 12],\n [64, 38, 74, 1.04, 46, 22, 13],\n [108, 79, 120, 1.7, 75, 41, 14],\n [108, 63, 116, 1.48, 44, 26, 15],\n [33, 6, 29, 0.34, 13, 5, 16],\n [94, 66, 110, 1.54, 62, 31, 17],\n [186, 142, 192, 3.88, 93, 79, 18],\n [57, 31, 54, 0.96, 32, 14, 19],\n [22, 8, 17, 0.48, 23, 10, 20],\n [39, 15, 36, 0.61, 29, 13, 21],\n [94, 69, 114, 2.08, 73, 39, 22],\n [99, 73, 110, 2.43, 76, 48, 23],\n [31, 12, 30, 0.5, 32, 16, 24],\n [42, 27, 43, 1, 53, 22, 25],\n [154, 117, 157, 3.05, 92, 58, 26],\n [234, 185, 230, 4.09, 123, 69, 27],\n [160, 120, 186, 2.77, 91, 50, 28],\n [134, 96, 165, 2.76, 83, 41, 29],\n [52, 24, 60, 1.03, 50, 21, 30],\n [46, 5, 49, 0.28, 10, 6, 31]\n];\nconst dataGZ = [\n [26, 37, 27, 1.163, 27, 13, 1],\n [85, 62, 71, 1.195, 60, 8, 2],\n [78, 38, 74, 1.363, 37, 7, 3],\n [21, 21, 36, 0.634, 40, 9, 4],\n [41, 42, 46, 0.915, 81, 13, 5],\n [56, 52, 69, 1.067, 92, 16, 6],\n [64, 30, 28, 0.924, 51, 2, 7],\n [55, 48, 74, 1.236, 75, 26, 8],\n [76, 85, 113, 1.237, 114, 27, 9],\n [91, 81, 104, 1.041, 56, 40, 10],\n [84, 39, 60, 0.964, 25, 11, 11],\n [64, 51, 101, 0.862, 58, 23, 12],\n [70, 69, 120, 1.198, 65, 36, 13],\n [77, 105, 178, 2.549, 64, 16, 14],\n [109, 68, 87, 0.996, 74, 29, 15],\n [73, 68, 97, 0.905, 51, 34, 16],\n [54, 27, 47, 0.592, 53, 12, 17],\n [51, 61, 97, 0.811, 65, 19, 18],\n [91, 71, 121, 1.374, 43, 18, 19],\n [73, 102, 182, 2.787, 44, 19, 20],\n [73, 50, 76, 0.717, 31, 20, 21],\n [84, 94, 140, 2.238, 68, 18, 22],\n [93, 77, 104, 1.165, 53, 7, 23],\n [99, 130, 227, 3.97, 55, 15, 24],\n [146, 84, 139, 1.094, 40, 17, 25],\n [113, 108, 137, 1.481, 48, 15, 26],\n [81, 48, 62, 1.619, 26, 3, 27],\n [56, 48, 68, 1.336, 37, 9, 28],\n [82, 92, 174, 3.29, 0, 13, 29],\n [106, 116, 188, 3.628, 101, 16, 30],\n [118, 50, 0, 1.383, 76, 11, 31]\n];\nconst dataSH = [\n [91, 45, 125, 0.82, 34, 23, 1],\n [65, 27, 78, 0.86, 45, 29, 2],\n [83, 60, 84, 1.09, 73, 27, 3],\n [109, 81, 121, 1.28, 68, 51, 4],\n [106, 77, 114, 1.07, 55, 51, 5],\n [109, 81, 121, 1.28, 68, 51, 6],\n [106, 77, 114, 1.07, 55, 51, 7],\n [89, 65, 78, 0.86, 51, 26, 8],\n [53, 33, 47, 0.64, 50, 17, 9],\n [80, 55, 80, 1.01, 75, 24, 10],\n [117, 81, 124, 1.03, 45, 24, 11],\n [99, 71, 142, 1.1, 62, 42, 12],\n [95, 69, 130, 1.28, 74, 50, 13],\n [116, 87, 131, 1.47, 84, 40, 14],\n [108, 80, 121, 1.3, 85, 37, 15],\n [134, 83, 167, 1.16, 57, 43, 16],\n [79, 43, 107, 1.05, 59, 37, 17],\n [71, 46, 89, 0.86, 64, 25, 18],\n [97, 71, 113, 1.17, 88, 31, 19],\n [84, 57, 91, 0.85, 55, 31, 20],\n [87, 63, 101, 0.9, 56, 41, 21],\n [104, 77, 119, 1.09, 73, 48, 22],\n [87, 62, 100, 1, 72, 28, 23],\n [168, 128, 172, 1.49, 97, 56, 24],\n [65, 45, 51, 0.74, 39, 17, 25],\n [39, 24, 38, 0.61, 47, 17, 26],\n [39, 24, 39, 0.59, 50, 19, 27],\n [93, 68, 96, 1.05, 79, 29, 28],\n [188, 143, 197, 1.66, 99, 51, 29],\n [174, 131, 174, 1.55, 108, 50, 30],\n [187, 143, 201, 1.39, 89, 53, 31]\n];\nconst lineStyle = {\n width: 1,\n opacity: 0.5\n};\n\nreturn {\n backgroundColor: '#161627',\n legend: {\n bottom: 5,\n data: ['Beijing', 'Shanghai', 'Guangzhou'],\n itemGap: 20,\n textStyle: {\n color: '#fff',\n fontSize: 14\n },\n selectedMode: 'single'\n },\n radar: {\n indicator: [\n { name: 'AQI', max: 300 },\n { name: 'PM2.5', max: 250 },\n { name: 'PM10', max: 300 },\n { name: 'CO', max: 5 },\n { name: 'NO2', max: 200 },\n { name: 'SO2', max: 100 }\n ],\n shape: 'circle',\n splitNumber: 5,\n axisName: {\n color: 'rgb(238, 197, 102)'\n },\n splitLine: {\n lineStyle: {\n color: [\n 'rgba(238, 197, 102, 0.1)',\n 'rgba(238, 197, 102, 0.2)',\n 'rgba(238, 197, 102, 0.4)',\n 'rgba(238, 197, 102, 0.6)',\n 'rgba(238, 197, 102, 0.8)',\n 'rgba(238, 197, 102, 1)'\n ].reverse()\n }\n },\n splitArea: {\n show: false\n },\n axisLine: {\n lineStyle: {\n color: 'rgba(238, 197, 102, 0.5)'\n }\n }\n },\n series: [\n {\n name: 'Beijing',\n type: 'radar',\n lineStyle: lineStyle,\n data: dataBJ,\n symbol: 'none',\n itemStyle: {\n color: '#F9713C'\n },\n areaStyle: {\n opacity: 0.1\n }\n },\n {\n name: 'Shanghai',\n type: 'radar',\n lineStyle: lineStyle,\n data: dataSH,\n symbol: 'none',\n itemStyle: {\n color: '#B3E4A1'\n },\n areaStyle: {\n opacity: 0.05\n }\n },\n {\n name: 'Guangzhou',\n type: 'radar',\n lineStyle: lineStyle,\n data: dataGZ,\n symbol: 'none',\n itemStyle: {\n color: 'rgb(238, 197, 102)'\n },\n areaStyle: {\n opacity: 0.05\n }\n }\n ]\n};", + "google": { + "callback": "gmapReady", + "key": "" + }, "map": "json", - "renderer": "canvas" + "renderer": "canvas", + "themeEditor": { + "config": "{}", + "name": "default" + }, + "visualEditor": { + "code": "return {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "dataset": [], + "series": [] + } }, + "pluginVersion": "6.2.0", "title": "AQI - Radar", "type": "volkovlabs-echarts-panel" }, @@ -121,10 +236,28 @@ "height": 600 }, "editorMode": "code", + "gaode": { + "key": "", + "plugin": "AMap.Scale,AMap.ToolBar" + }, "getOption": "return {\n color: ['#67F9D8', '#FFE434', '#56A3F1', '#FF917C'],\n legend: {},\n radar: [\n {\n indicator: [\n { text: 'Indicator1' },\n { text: 'Indicator2' },\n { text: 'Indicator3' },\n { text: 'Indicator4' },\n { text: 'Indicator5' }\n ],\n center: ['25%', '50%'],\n radius: '30%',\n startAngle: 90,\n splitNumber: 4,\n shape: 'circle',\n axisName: {\n formatter: '【{value}】',\n color: '#428BD4'\n },\n splitArea: {\n areaStyle: {\n color: ['#77EADF', '#26C3BE', '#64AFE9', '#428BD4'],\n shadowColor: 'rgba(0, 0, 0, 0.2)',\n shadowBlur: 10\n }\n },\n axisLine: {\n lineStyle: {\n color: 'rgba(211, 253, 250, 0.8)'\n }\n },\n splitLine: {\n lineStyle: {\n color: 'rgba(211, 253, 250, 0.8)'\n }\n }\n },\n {\n indicator: [\n { text: 'Indicator1', max: 150 },\n { text: 'Indicator2', max: 150 },\n { text: 'Indicator3', max: 150 },\n { text: 'Indicator4', max: 120 },\n { text: 'Indicator5', max: 108 },\n { text: 'Indicator6', max: 72 }\n ],\n center: ['75%', '50%'],\n radius: '30%',\n axisName: {\n color: '#fff',\n backgroundColor: '#666',\n borderRadius: 3,\n padding: [3, 5]\n }\n }\n ],\n series: [\n {\n type: 'radar',\n emphasis: {\n lineStyle: {\n width: 4\n }\n },\n data: [\n {\n value: [100, 8, 0.4, -80, 2000],\n name: 'Data A'\n },\n {\n value: [60, 5, 0.3, -100, 1500],\n name: 'Data B',\n areaStyle: {\n color: 'rgba(255, 228, 52, 0.6)'\n }\n }\n ]\n },\n {\n type: 'radar',\n radarIndex: 1,\n data: [\n {\n value: [120, 118, 130, 100, 99, 70],\n name: 'Data C',\n symbol: 'rect',\n symbolSize: 12,\n lineStyle: {\n type: 'dashed'\n },\n label: {\n show: true,\n formatter: function (params) {\n return params.value;\n }\n }\n },\n {\n value: [100, 93, 50, 90, 70, 60],\n name: 'Data D',\n areaStyle: {\n color: new context.echarts.graphic.RadialGradient(0.1, 0.6, 1, [\n {\n color: 'rgba(255, 145, 124, 0.1)',\n offset: 0\n },\n {\n color: 'rgba(255, 145, 124, 0.9)',\n offset: 1\n }\n ])\n }\n }\n ]\n }\n ]\n};", + "google": { + "callback": "gmapReady", + "key": "" + }, "map": "json", - "renderer": "canvas" + "renderer": "canvas", + "themeEditor": { + "config": "{}", + "name": "default" + }, + "visualEditor": { + "code": "return {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "dataset": [], + "series": [] + } }, + "pluginVersion": "6.2.0", "title": "Customized Radar Chart", "type": "volkovlabs-echarts-panel" }, @@ -150,10 +283,28 @@ "height": 600 }, "editorMode": "code", + "gaode": { + "key": "", + "plugin": "AMap.Scale,AMap.ToolBar" + }, "getOption": "return {\n tooltip: {\n trigger: 'item'\n },\n legend: {\n type: 'scroll',\n bottom: 10,\n data: (function () {\n var list = [];\n for (var i = 1; i <= 28; i++) {\n list.push(i + 2000 + '');\n }\n return list;\n })()\n },\n visualMap: {\n top: 'middle',\n right: 10,\n color: ['red', 'yellow'],\n calculable: true\n },\n radar: {\n indicator: [\n { text: 'IE8-', max: 400 },\n { text: 'IE9+', max: 400 },\n { text: 'Safari', max: 400 },\n { text: 'Firefox', max: 400 },\n { text: 'Chrome', max: 400 }\n ]\n },\n series: (function () {\n var series = [];\n for (var i = 1; i <= 28; i++) {\n series.push({\n type: 'radar',\n symbol: 'none',\n lineStyle: {\n width: 1\n },\n emphasis: {\n areaStyle: {\n color: 'rgba(0,250,0,0.3)'\n }\n },\n data: [\n {\n value: [\n (40 - i) * 10,\n (38 - i) * 4 + 60,\n i * 5 + 10,\n i * 9,\n (i * i) / 2\n ],\n name: i + 2000 + ''\n }\n ]\n });\n }\n return series;\n })()\n};", + "google": { + "callback": "gmapReady", + "key": "" + }, "map": "json", - "renderer": "canvas" + "renderer": "canvas", + "themeEditor": { + "config": "{}", + "name": "default" + }, + "visualEditor": { + "code": "return {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "dataset": [], + "series": [] + } }, + "pluginVersion": "6.2.0", "title": "Proportion of Browsers", "type": "volkovlabs-echarts-panel" }, @@ -179,16 +330,33 @@ "height": 600 }, "editorMode": "code", + "gaode": { + "key": "", + "plugin": "AMap.Scale,AMap.ToolBar" + }, "getOption": "return {\n tooltip: {\n trigger: 'axis'\n },\n legend: {\n left: 'center',\n data: [\n 'A Software',\n 'A Phone',\n 'Another Phone',\n 'Precipitation',\n 'Evaporation'\n ]\n },\n radar: [\n {\n indicator: [\n { text: 'Brand', max: 100 },\n { text: 'Content', max: 100 },\n { text: 'Usability', max: 100 },\n { text: 'Function', max: 100 }\n ],\n center: ['25%', '40%'],\n radius: '30%'\n },\n {\n indicator: [\n { text: 'Look', max: 100 },\n { text: 'Photo', max: 100 },\n { text: 'System', max: 100 },\n { text: 'Performance', max: 100 },\n { text: 'Screen', max: 100 }\n ],\n radius: '30%',\n center: ['50%', '60%']\n },\n {\n indicator: (function () {\n var res = [];\n for (var i = 1; i <= 12; i++) {\n res.push({ text: i + '月', max: 100 });\n }\n return res;\n })(),\n center: ['75%', '40%'],\n radius: '30%'\n }\n ],\n series: [\n {\n type: 'radar',\n tooltip: {\n trigger: 'item'\n },\n areaStyle: {},\n data: [\n {\n value: [60, 73, 85, 40],\n name: 'A Software'\n }\n ]\n },\n {\n type: 'radar',\n radarIndex: 1,\n areaStyle: {},\n data: [\n {\n value: [85, 90, 90, 95, 95],\n name: 'A Phone'\n },\n {\n value: [95, 80, 95, 90, 93],\n name: 'Another Phone'\n }\n ]\n },\n {\n type: 'radar',\n radarIndex: 2,\n areaStyle: {},\n data: [\n {\n name: 'Precipitation',\n value: [\n 2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 75.6, 82.2, 48.7, 18.8, 6.0, 2.3\n ]\n },\n {\n name: 'Evaporation',\n value: [\n 2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 35.6, 62.2, 32.6, 20.0, 6.4, 3.3\n ]\n }\n ]\n }\n ]\n};", + "google": { + "callback": "gmapReady", + "key": "" + }, "map": "json", - "renderer": "canvas" + "renderer": "canvas", + "themeEditor": { + "config": "{}", + "name": "default" + }, + "visualEditor": { + "code": "return {\n dataset: context.editor.dataset,\n series: context.editor.series,\n xAxis: {\n type: 'time',\n },\n yAxis: {\n type: 'value',\n min: 'dataMin',\n },\n}\n", + "dataset": [], + "series": [] + } }, + "pluginVersion": "6.2.0", "title": "Multiple Radar", "type": "volkovlabs-echarts-panel" } ], - "schemaVersion": 37, - "style": "dark", + "schemaVersion": 39, "tags": ["echarts"], "templating": { "list": [] @@ -203,6 +371,6 @@ "timezone": "", "title": "Radar", "uid": "J06Bi4F4k", - "version": 11, + "version": 1, "weekStart": "" } From 542ba72c28d754faae3bbf64a9c823c2114bec47 Mon Sep 17 00:00:00 2001 From: vitPinchuk Date: Wed, 31 Jul 2024 09:59:07 +0300 Subject: [PATCH 3/8] labels updated --- src/components/GraphEditors/RadarEditor/RadarEditor.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/GraphEditors/RadarEditor/RadarEditor.tsx b/src/components/GraphEditors/RadarEditor/RadarEditor.tsx index fb5363b..13feb47 100644 --- a/src/components/GraphEditors/RadarEditor/RadarEditor.tsx +++ b/src/components/GraphEditors/RadarEditor/RadarEditor.tsx @@ -71,7 +71,7 @@ export const RadarEditor: React.FC = ({ value, onChange, dataset }) => { {value.radarDimensions?.map((dimension) => { return ( - + = ({ value, onChange, dataset }) => { data-testid={TEST_IDS.seriesEditor.radarDimensionName(dimension.name)} /> - + { onChange({ ...value, radar: { ...value.radar, - shape: event?.value || '', + shape: event?.value, }, }); }} @@ -87,14 +87,23 @@ export const RadarOptionsEditor: React.FC = ({ value, onChange, data }) = labelWidth={20} grow={true} > - { + { + let inputValue = event.currentTarget.value; + + /** + * Normalize value if no 10 or 10% format + */ + if (!/^\d*%?$/g.test(inputValue)) { + inputValue = '0'; + } + onChange({ ...value, radar: { ...value.radar, - radius: radiusValue, + radius: inputValue, }, }); }} diff --git a/src/constants/radar.ts b/src/constants/radar.ts index c52356f..bb11938 100644 --- a/src/constants/radar.ts +++ b/src/constants/radar.ts @@ -1,9 +1,9 @@ -import { RadarShapeOptions } from '../types'; +import { RadarShapeType } from '../types'; /** - * Radar options + * Radar shape options */ -export const RADAR_OPTIONS = [ - { value: RadarShapeOptions.CIRCLE, label: 'Circle' }, - { value: RadarShapeOptions.POLYGON, label: 'Polygon' }, +export const RADAR_SHAPE_OPTIONS = [ + { value: RadarShapeType.CIRCLE, label: 'Circle' }, + { value: RadarShapeType.POLYGON, label: 'Polygon' }, ]; diff --git a/src/types/radar.ts b/src/types/radar.ts index a8c9217..c3f676a 100644 --- a/src/types/radar.ts +++ b/src/types/radar.ts @@ -1,9 +1,9 @@ import { EChartOption } from 'echarts'; /** - * Radar Shape Options + * Radar Shape Type */ -export enum RadarShapeOptions { +export enum RadarShapeType { POLYGON = 'polygon', CIRCLE = 'circle', } @@ -12,8 +12,25 @@ export enum RadarShapeOptions { * Radar Indicator Item */ export interface RadarIndicatorItem { + /** + * Name + * + * @type {string} + */ name: string; + + /** + * Max + * + * @type {number} + */ max: number; + + /** + * Min + * + * @type {number} + */ min?: number; } @@ -21,26 +38,77 @@ export interface RadarIndicatorItem { * Radar Options */ export interface RadarChartOptions { - shape?: RadarShapeOptions | ''; + /** + * Shape + * + * @type {RadarShapeType} + */ + shape?: RadarShapeType; + + /** + * Radius + * + * @type {number | string} + */ radius?: number | string; + + /** + * Indicator + * + * @type {RadarIndicatorItem[]} + */ indicator?: RadarIndicatorItem[]; } /** - * Radar Options + * Radar Config Options */ -export interface RadarOptions { - shape?: RadarShapeOptions | ''; +export interface RadarConfigOptions { + /** + * Shape + * + * @type {RadarShapeType | ''} + */ + shape?: RadarShapeType; + + /** + * Radius + * + * @type {number | string} + */ radius?: number | string; - indicator?: string | ''; + + /** + * Indicator + * + * @type {string} + */ + indicator?: string; } /** * Radar Dimension Item */ export interface RadarDimensionItem { + /** + * Name + * + * @type {string} + */ name: string; + + /** + * Value + * + * @type {string} + */ value: string; + + /** + * UID + * + * @type {string} + */ uid: string; } @@ -48,5 +116,10 @@ export interface RadarDimensionItem { * Radar Series Options */ export interface RadarSeriesOptions extends EChartOption.SeriesRadar { + /** + * Radar Dimensions + * + * @type {RadarDimensionItem[]} + */ radarDimensions: RadarDimensionItem[]; } diff --git a/src/types/visual-editor.ts b/src/types/visual-editor.ts index 1c5a523..daaf3b6 100644 --- a/src/types/visual-editor.ts +++ b/src/types/visual-editor.ts @@ -1,6 +1,6 @@ import { EChartOption } from 'echarts'; -import { RadarOptions, RadarSeriesOptions } from './radar'; +import { RadarConfigOptions, RadarSeriesOptions } from './radar'; /** * Dataset Item @@ -156,9 +156,9 @@ export interface VisualEditorOptions { /** * Radar options * - * @type {RadarOptions} + * @type {RadarConfigOptions} */ - radar?: RadarOptions; + radar?: RadarConfigOptions; } /** diff --git a/src/utils/visual-editor.ts b/src/utils/visual-editor.ts index 78e7f8a..5c79a62 100644 --- a/src/utils/visual-editor.ts +++ b/src/utils/visual-editor.ts @@ -12,14 +12,13 @@ import { getFieldValues } from './data-frame'; */ export const getFieldBasedOptionValue = (fieldName: string, series: DataFrame[]) => { const valueFields = fieldName.split(':'); - const field = findField(series, (field, frame) => { + + return findField(series, (field, frame) => { if (frame?.refId === valueFields[0]) { return field.name === valueFields[1]; } return false; }); - - return field; }; /** @@ -167,10 +166,9 @@ export const getSeriesUniqueId = () => uuidv4(); * @param series */ export const getDataSeries = (visualEditorSeries: SeriesItem[], series: DataFrame[]) => { - const newVisualEditorSeries = visualEditorSeries.map((item) => { + return visualEditorSeries.map((item) => { return convertSeriesToChartOption(item, series); }); - return newVisualEditorSeries; }; /** @@ -178,20 +176,21 @@ export const getDataSeries = (visualEditorSeries: SeriesItem[], series: DataFram * @param series * @param type */ -export const isTypeExistInSeries = (series: SeriesItem[], type: string) => { +export const isTypeExistInSeries = (series: SeriesItem[], type: SeriesType) => { return series.some((value) => value.type === type); }; /** * Get Radar Chart Options * @param visualEditor + * @param series */ export const getRadarOptions = (visualEditor: VisualEditorOptions, series: DataFrame[]): RadarChartOptions => { /** * Default radar options */ const radarOptions: RadarChartOptions = { - shape: visualEditor.radar?.shape || '', + shape: visualEditor.radar?.shape, indicator: [], }; From 8bbe873be56afcba7f557b2b9bd32e9f81b141d0 Mon Sep 17 00:00:00 2001 From: Mikhail Volkov Date: Wed, 31 Jul 2024 11:18:58 -0400 Subject: [PATCH 6/8] Update readme --- CHANGELOG.md | 1 + README.md | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 085688c..72b3744 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - Updated to Apache ECharts 5.5.1 (#309) - Updated E2E workflow using Docker (#310) - Updated migration for context parameters (#317) +- Added Radar to visual editor (#316) ## 6.1.0 (2024-05-26) diff --git a/README.md b/README.md index 81a29d5..dc67c42 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Business Charts Panel for Grafana +# Business Charts panel for Grafana ![ECharts](https://github.com/VolkovLabs/volkovlabs-echarts-panel/raw/main/src/img/dashboard.png) @@ -69,6 +69,14 @@ grafana-cli plugins install volkovlabs-echarts-panel | [Tutorials](https://volkovlabs.io/plugins/volkovlabs-echarts-panel/tutorials) | Tutorials for the Business Charts Panel. | | [Release Notes](https://volkovlabs.io/plugins/volkovlabs-echarts-panel/release) | Stay up to date with the latest features and updates. | +## Business Suite for Grafana + +The Business Suite is a collection of open source plugins created and actively maintained by Volkov Labs. + +The collection aims to solve the most frequent business tasks by providing an intuitive interface with detailed written documentation, examples, and video tutorials. + +[![Business Suite for Grafana](https://raw.githubusercontent.com/VolkovLabs/.github/main/business.png)](https://volkovlabs.io/plugins/) + ## Feedback We're looking forward to hearing from you. You can use different ways to get in touch with us. From 3da4ed75a333bc4632be61100e245d81da46fbc9 Mon Sep 17 00:00:00 2001 From: vitPinchuk Date: Thu, 1 Aug 2024 10:03:48 +0300 Subject: [PATCH 7/8] radius behavior updated --- .../RadarOptionsEditor/RadarOptions.test.tsx | 38 +++++++++++++++++++ .../RadarOptionsEditor/RadarOptionsEditor.tsx | 2 +- src/utils/visual-editor.test.ts | 4 +- src/utils/visual-editor.ts | 2 +- 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.test.tsx b/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.test.tsx index b4c6e28..1b25fde 100644 --- a/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.test.tsx +++ b/src/components/GraphEditors/RadarOptionsEditor/RadarOptions.test.tsx @@ -290,4 +290,42 @@ describe('Radar options', () => { }) ); }); + + it('Should change radius option correctly if type wrong format', async () => { + const values = { + dataset: [], + radar: { + indicator: 'A:Value', + radius: 0, + shape: RadarShapeType.CIRCLE, + }, + } as any; + + const { value, onChange } = createOnChangeHandler(values); + + render( + getComponent({ + value, + onChange, + }) + ); + + /** + * Initial + */ + expect(selectors.radarOptionsRoot()).toBeInTheDocument(); + + const item = openItem(); + expect(item.radarOptionsRadius()).toHaveValue('0'); + + fireEvent.change(item.radarOptionsRadius(), { target: { value: 'abc' } }); + + expect(onChange).toHaveBeenCalledWith( + expect.objectContaining({ + radar: expect.objectContaining({ + radius: '0', + }), + }) + ); + }); }); diff --git a/src/components/GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx b/src/components/GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx index f48975b..838ae92 100644 --- a/src/components/GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx +++ b/src/components/GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx @@ -83,7 +83,7 @@ export const RadarOptionsEditor: React.FC = ({ value, onChange, data }) = diff --git a/src/utils/visual-editor.test.ts b/src/utils/visual-editor.test.ts index e7bad3a..a963932 100644 --- a/src/utils/visual-editor.test.ts +++ b/src/utils/visual-editor.test.ts @@ -413,7 +413,7 @@ describe('Visual Editor Utils', () => { { max: 350, min: 10, name: 'Test 2' }, ], shape: 'circle', - radius: '50%', + radius: 50, }); }); @@ -422,7 +422,7 @@ describe('Visual Editor Utils', () => { code: 'console.log()', radar: { indicator: 'A:Category2', - radius: 50, + radius: '50%', shape: 'circle', }, series: [ diff --git a/src/utils/visual-editor.ts b/src/utils/visual-editor.ts index 5c79a62..ad28cca 100644 --- a/src/utils/visual-editor.ts +++ b/src/utils/visual-editor.ts @@ -240,7 +240,7 @@ export const getRadarOptions = (visualEditor: VisualEditorOptions, series: DataF * Set radar option in percentage */ if (visualEditor.radar?.radius) { - radarOptions.radius = `${visualEditor.radar?.radius}%`; + radarOptions.radius = visualEditor.radar?.radius; } return radarOptions; From 804d4f45075e2b2b9159151966dc2ff2b6d7ff1b Mon Sep 17 00:00:00 2001 From: Mikhail Volkov Date: Thu, 1 Aug 2024 14:30:41 -0400 Subject: [PATCH 8/8] Formatting --- README.md | 2 +- src/components/GraphEditors/RadarEditor/RadarEditor.tsx | 2 +- .../GraphEditors/RadarOptionsEditor/RadarOptionsEditor.tsx | 2 +- src/utils/visual-editor.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dc67c42..c0f386f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Business Charts panel for Grafana +# Business Charts for Grafana ![ECharts](https://github.com/VolkovLabs/volkovlabs-echarts-panel/raw/main/src/img/dashboard.png) diff --git a/src/components/GraphEditors/RadarEditor/RadarEditor.tsx b/src/components/GraphEditors/RadarEditor/RadarEditor.tsx index 13feb47..f6c562d 100644 --- a/src/components/GraphEditors/RadarEditor/RadarEditor.tsx +++ b/src/components/GraphEditors/RadarEditor/RadarEditor.tsx @@ -91,7 +91,7 @@ export const RadarEditor: React.FC = ({ value, onChange, dataset }) => { data-testid={TEST_IDS.seriesEditor.radarDimensionName(dimension.name)} /> - +