From 41f8128c2b3ab82a1846f00171d1c153abb1afd3 Mon Sep 17 00:00:00 2001 From: Jacco van den Berg Date: Wed, 14 Dec 2022 21:43:41 +0100 Subject: [PATCH 1/5] Allow dynamic datasets to be colored (#10964) * Allow dynamic datasets to be colored * revieuw --- docs/general/colors.md | 16 +++++++ src/plugins/plugin.colors.ts | 11 +++-- .../plugin.colors/dynamic-datasets-default.js | 42 +++++++++++++++++ .../dynamic-datasets-default.png | Bin 0 -> 15854 bytes .../dynamic-datasets-force-override.js | 43 ++++++++++++++++++ .../dynamic-datasets-force-override.png | Bin 0 -> 15443 bytes 6 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/plugin.colors/dynamic-datasets-default.js create mode 100644 test/fixtures/plugin.colors/dynamic-datasets-default.png create mode 100644 test/fixtures/plugin.colors/dynamic-datasets-force-override.js create mode 100644 test/fixtures/plugin.colors/dynamic-datasets-force-override.png diff --git a/docs/general/colors.md b/docs/general/colors.md index 20d2459f3..f2b4c8d78 100644 --- a/docs/general/colors.md +++ b/docs/general/colors.md @@ -84,6 +84,22 @@ const options = { ::: +### Dynamic datasets at runtime + +By default the colors plugin only works when you initialize the chart without any colors for the border or background specified. +If you want to force the colors plugin to always color your datasets, for example when using dynamic datasets at runtime you will need to set the `forceOverride` option to true: + +```js +const options = { + plugins: { + colors: { + forceOverride: true + } + } +}; +``` + + ### Advanced color palettes See the [awesome list](https://github.com/chartjs/awesome#plugins) for plugins that would give you more flexibility defining color palettes. diff --git a/src/plugins/plugin.colors.ts b/src/plugins/plugin.colors.ts index 14292ca6c..b2817c85a 100644 --- a/src/plugins/plugin.colors.ts +++ b/src/plugins/plugin.colors.ts @@ -1,8 +1,9 @@ import {DoughnutController, PolarAreaController} from '../index.js'; -import type {Chart, ChartConfiguration, ChartDataset} from '../types.js'; +import type {Chart, ChartDataset} from '../types.js'; export interface ColorsPluginOptions { enabled?: boolean; + forceOverride?: boolean; } interface ColorsDescriptor { @@ -85,7 +86,8 @@ export default { defaults: { enabled: true, - }, + forceOverride: false + } as ColorsPluginOptions, beforeLayout(chart: Chart, _args, options: ColorsPluginOptions) { if (!options.enabled) { @@ -93,12 +95,11 @@ export default { } const { - type, options: {elements}, data: {datasets} - } = chart.config as ChartConfiguration; + } = chart.config; - if (containsColorsDefinitions(datasets) || elements && containsColorsDefinitions(elements)) { + if (!options.forceOverride && (containsColorsDefinitions(datasets) || elements && containsColorsDefinitions(elements))) { return; } diff --git a/test/fixtures/plugin.colors/dynamic-datasets-default.js b/test/fixtures/plugin.colors/dynamic-datasets-default.js new file mode 100644 index 000000000..9969d3e2a --- /dev/null +++ b/test/fixtures/plugin.colors/dynamic-datasets-default.js @@ -0,0 +1,42 @@ +module.exports = { + config: { + type: 'bar', + data: { + labels: [0, 1, 2, 3, 4, 5], + datasets: [ + { + data: [5, 5, 5, 5, 5, 5] + } + ] + }, + options: { + scales: { + x: { + ticks: { + display: false, + } + }, + y: { + ticks: { + display: false, + } + } + }, + plugins: { + legend: false, + colors: { + enabled: true + } + } + } + }, + options: { + run(chart) { + chart.data.datasets.push({ + data: [5, 5, 5, 5, 5, 5] + }); + + chart.update(); + } + } +}; diff --git a/test/fixtures/plugin.colors/dynamic-datasets-default.png b/test/fixtures/plugin.colors/dynamic-datasets-default.png new file mode 100644 index 0000000000000000000000000000000000000000..38f281077b377953362548010225510526f738e2 GIT binary patch literal 15854 zcmeHOYgAKL7CuP|C^W??mTFW|2a4Eb(b9so*CaR~1uZGysQ(!2wMBnf3@FX5hPip$O4IrK3ru(B`s>c#Br$73XPJ!?O#wI^Y^=FcfanBJO7~UdZe6E zck~i*=It##I>)2N3c2;J+|<`$>XWZkHVUjA)q%AY)Wt3(w26*9f`HU3TPc2|P& z(m^r(+AH;>)W##;8}X)1wT(j3uAY7Fi=wmK!$NY#WgX5$+PoLH`k=#i*Jk|wKR;(k zcLawR#J9hT#`ktRb%L@8`aSGs^L#t1+xr~8yPUwRtMaWoMq1Ae-N0CgFbx}=d%gC^ zB|*4Y&**7o)p-%zNpB+j?VU;MmfpF6M9qt!O{glu=)A$RIQEK(ET-{rul1T2L?2b# zh^I~q5Wg|~+efmu6|spKi$sidA90nZ!4SrTg&M)uk@m-=J~amkb~5fWO6Nz)vQz{QqB zidwyAbNKuB@`u$S3@Ii&ubQnno#3E#eRYrav-$SqxNI#Q8>p?~bR?Q`)#E;g|FPHQ zn5o~VV4!?K!1IIB8Ws{~DoR5PxoVmH;A>K$OhImN1~N0>|d^=Ww=kqSes>H%MqTOF48aLc!Mi> zNi1d?W7?eoS*8#NZ`Ips8%RewOvj!AFxg^o@68QfgxqQ9hUMp99p=w|(~5nKGSq1= zS2FPZQNH;3^C9?3|4+x|D-gC12a0m`Gtt~7{z`S~h7020g0PHH1;Q+6ztchygUz2R z^1ja@O<~DNHk#f~6C%Ntgcg(0K|iCmgX>0M#$;VDvolxi^4v^B%<>15MT2|y$(ak&h>{NX@p3m34EU+m6uVp>ZYndeu; z9#tUB7B28ur?KVXuA0cE#IE5Yy4ha!X93KxH)>B$H{I67nNL;sWp|h~x{58bgfrzu za!Xr!hr~dZ3Cx4HVz`M_;WDmysfuh@NPZXYg`S8NW*`1>6`BOHRaJ9R&1l4s<-7I@ztpGHO2&z#r(XCz^X%=>$qYU~5^RGXEDT9Jw&L*ih zfw!Dk6i;Ipu4qaOKmCsbYVUF`Iy<1<{-}uA9hOn&4dXNy>(r^0z z382P;e%~nfQ>y(pl!-SLuK3re0&a67CluUr!Y=#R=c z3H?PSEj?tB+%BP=HB@q?%1ykf7%RJasE#c7vF(wvR^Mwg8soc;I{yKD8>1*Rq|lH; zLkbO_Ei|OkwcieH+K`CL8Q2BqF&9U0K@xecWuQG#+j<|jj6`vhtV*IIN!PfYFc0eD z5-o!UDG|@GPA@NWC7AmjrR0z0=2a+irH3e5M`!1m?I%d=jnmPLPhgk$#Ih1O+8FYF zc3u_A$P7>xtqsgAnkU{1vL23cZrx;p8+m`>i9U->Ehlz0Zz69l&z?J~K;D01(IMDK zNx#w4c|mhF%Qm@vju&*khi`IogRFmBj1Oe}H*%ogt8Vu>o*z|QieY`S69eUQ*nwWi zN`bupr&b5#A#O@6-cnLAi;>wp9_IIBB zxAsv={#b7AJbGa7c|06W>;<$55_>tFI_;m3+OXY{xD=t;d84%e6wN_#IuwCLv2}kU zHTiHEa8DXr26Rtz8JLi`l~bfI#c)$}K2^Iw6>9utRVftoQ}sSnaT8UxM%Cz11&L2q zUq&%h=AlZ@@RAnKp7^BUOO670yrEurG=8KCGL?;n^TphEK zKG`*cN1tr!an5i?BhJloi*>d2y2-PFY~}96$b=76t^6L&sI1{{K-i8{m+OK_lfGSp zKk?_bhQZ6iH!e|OvgsmyBV5=Wmv&I7>A3!Oz-Gl0zaMS?l-pQcj{H2o=}h)f94>I9 NK>uLBk5eSh=Bx!RUV2~ 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 ZRGH53sU2J+9=s(C*1B$RDRd4x@Lydfj;#Oy literal 0 HcmV?d00001 From c9f55ccf19481f91379188f18ab805140e58c69b Mon Sep 17 00:00:00 2001 From: Simon He <57086651+Simon-He95@users.noreply.github.com> Date: Thu, 15 Dec 2022 05:24:43 +0800 Subject: [PATCH 2/5] chore: add lint cache (#10974) * chore: add lint cache * chore: update * chore: update --- .gitignore | 6 +++++- package.json | 6 +++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index a03307d82..bf69bd2c6 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,8 @@ npm-debug.log* # Docs .cache-loader build/ -# generated typedocs + +# Generated type docs docs/api docs/.vuepress/dist @@ -31,3 +32,6 @@ docs/.vuepress/dist # Generated /types/tests/autogen*.ts + +# Eslint +.eslintcache diff --git a/package.json b/package.json index 01b903096..4befb13fd 100644 --- a/package.json +++ b/package.json @@ -58,9 +58,9 @@ "dev:ff": "karma start ./karma.conf.cjs --auto-watch --no-single-run --browsers firefox --grep", "docs": "pnpm run build && pnpm --filter \"./docs/**\" build", "docs:dev": "pnpm run build && pnpm --filter \"./docs/**\" dev", - "lint-js": "eslint \"src/**/*.{js,ts}\" \"test/**/*.js\" \"docs/**/*.js\"", - "lint-md": "eslint \"**/*.md\"", - "lint-types": "eslint \"types/**/*.ts\" && pnpm build && node types/tests/autogen.js && tsc -p types/tests/", + "lint-js": "eslint \"src/**/*.{js,ts}\" \"test/**/*.js\" \"docs/**/*.js\" --cache", + "lint-md": "eslint \"**/*.md\" --cache", + "lint-types": "eslint \"types/**/*.ts\" --cache && pnpm build && node types/tests/autogen.js && tsc -p types/tests/", "lint": "concurrently \"pnpm:lint-*\"", "test-size": "size-limit", "test": "pnpm lint && pnpm test-ci", From acfb981ba345de59277af4104075ed34c01e4b65 Mon Sep 17 00:00:00 2001 From: Igor Lukanin Date: Thu, 15 Dec 2022 02:33:39 +0400 Subject: [PATCH 3/5] Update Slack link (#10976) --- README.md | 2 +- docs/.vuepress/config.ts | 2 +- docs/developers/contributing.md | 4 ++-- docs/getting-started/usage.md | 2 +- docs/index.md | 4 ++-- docs/migration/v3-migration.md | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index ff9076d8f..18b767e0a 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ GitHub Workflow Status Coverage Awesome - Slack + Slack

## Documentation diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index 7420bd6b5..cb8577c95 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -130,7 +130,7 @@ export default defineConfig({ ariaLabel: 'Community Menu', items: [ { text: 'Awesome', link: 'https://github.com/chartjs/awesome' }, - { text: 'Slack', link: 'https://chartjs-slack.herokuapp.com/' }, + { text: 'Slack', link: 'https://join.slack.com/t/chartjs/shared_invite/zt-1lo81skkk-AZk6ollhOdrjt9GzPeOsLw' }, { text: 'Stack Overflow', link: 'https://stackoverflow.com/questions/tagged/chart.js' } ] } diff --git a/docs/developers/contributing.md b/docs/developers/contributing.md index 6efd3bd1a..1310eda41 100644 --- a/docs/developers/contributing.md +++ b/docs/developers/contributing.md @@ -2,7 +2,7 @@ New contributions to the library are welcome, but we ask that you please follow these guidelines: -- Before opening a PR for major additions or changes, please discuss the expected API and/or implementation by [filing an issue](https://github.com/chartjs/Chart.js/issues) or asking about it in the [Chart.js Slack](https://chartjs-slack.herokuapp.com/) #dev channel. This will save you development time by getting feedback upfront and make reviews faster by giving the maintainers more context and details. +- Before opening a PR for major additions or changes, please discuss the expected API and/or implementation by [filing an issue](https://github.com/chartjs/Chart.js/issues) or asking about it in the [Chart.js Slack](https://join.slack.com/t/chartjs/shared_invite/zt-1lo81skkk-AZk6ollhOdrjt9GzPeOsLw) #dev channel. This will save you development time by getting feedback upfront and make reviews faster by giving the maintainers more context and details. - Consider whether your changes are useful for all users, or if creating a Chart.js [plugin](plugins.md) would be more appropriate. - Check that your code will pass tests and `eslint` code standards. `pnpm test` will run both the linter and tests for you. - Add unit tests and document new functionality (in the `test/` and `docs/` directories respectively). @@ -11,7 +11,7 @@ New contributions to the library are welcome, but we ask that you please follow ## Joining the project -Active committers and contributors are invited to introduce themselves and request commit access to this project. We have a very active Slack community that you can join [here](https://chartjs-slack.herokuapp.com/). If you think you can help, we'd love to have you! +Active committers and contributors are invited to introduce themselves and request commit access to this project. We have a very active Slack community that you can join [here](https://join.slack.com/t/chartjs/shared_invite/zt-1lo81skkk-AZk6ollhOdrjt9GzPeOsLw). If you think you can help, we'd love to have you! ## Building and Testing diff --git a/docs/getting-started/usage.md b/docs/getting-started/usage.md index acb65cc74..94e186d66 100644 --- a/docs/getting-started/usage.md +++ b/docs/getting-started/usage.md @@ -586,6 +586,6 @@ By importing and registering only select components, we’ve removed more than 5 Now you’re familiar with all major concepts of Chart.js: chart types and elements, datasets, customization, plugins, components, and tree-shaking. -Feel free to review many [examples of charts](../samples/information.html) in the documentation and check the [awesome list](https://github.com/chartjs/awesome) of Chart.js plugins and additional chart types as well as [framework integrations](https://github.com/chartjs/awesome#integrations) (e.g., React, Vue, Svelte, etc.). Also, don’t hesitate to join [Chart.js Slack](https://chartjs-slack.herokuapp.com) and follow [Chart.js on Twitter](https://twitter.com/chartjs). +Feel free to review many [examples of charts](../samples/information.html) in the documentation and check the [awesome list](https://github.com/chartjs/awesome) of Chart.js plugins and additional chart types as well as [framework integrations](https://github.com/chartjs/awesome#integrations) (e.g., React, Vue, Svelte, etc.). Also, don’t hesitate to join [Chart.js Slack](https://join.slack.com/t/chartjs/shared_invite/zt-1lo81skkk-AZk6ollhOdrjt9GzPeOsLw) and follow [Chart.js on Twitter](https://twitter.com/chartjs). Have fun and good luck building with Chart.js! \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 736c55d41..b280c9a59 100644 --- a/docs/index.md +++ b/docs/index.md @@ -4,7 +4,7 @@ Welcome to Chart.js! * **[Get started with Chart.js](./getting-started/) — best if you're new to Chart.js** * Migrate from [Chart.js v3](./migration/v4-migration.html) or [Chart.js v2](./migration/v3-migration.html) -* Join the community on [Slack](https://chartjs-slack.herokuapp.com/) and [Twitter](https://twitter.com/chartjs) +* Join the community on [Slack](https://join.slack.com/t/chartjs/shared_invite/zt-1lo81skkk-AZk6ollhOdrjt9GzPeOsLw) and [Twitter](https://twitter.com/chartjs) * Post a question tagged with `chart.js` on [Stack Overflow](https://stackoverflow.com/questions/tagged/chart.js) * [Contribute to Chart.js](./developers/contributing.html) @@ -30,7 +30,7 @@ Chart.js comes with built-in TypeScript typings and is compatible with all popul ### Developer experience -Chart.js has very thorough documentation (yes, you're reading it), [API reference](./api/), and [examples](./samples/information.html). Maintainers and community members eagerly engage in conversations on [Slack](https://chartjs-slack.herokuapp.com), [GitHub Discussions](https://github.com/chartjs/Chart.js/discussions), and [Stack Overflow](https://stackoverflow.com/questions/tagged/chart.js) where more than 11,000 questions are tagged with `chart.js`. +Chart.js has very thorough documentation (yes, you're reading it), [API reference](./api/), and [examples](./samples/information.html). Maintainers and community members eagerly engage in conversations on [Slack](https://join.slack.com/t/chartjs/shared_invite/zt-1lo81skkk-AZk6ollhOdrjt9GzPeOsLw), [GitHub Discussions](https://github.com/chartjs/Chart.js/discussions), and [Stack Overflow](https://stackoverflow.com/questions/tagged/chart.js) where more than 11,000 questions are tagged with `chart.js`. ### Canvas rendering diff --git a/docs/migration/v3-migration.md b/docs/migration/v3-migration.md index 129ee08c0..a456e3fe5 100644 --- a/docs/migration/v3-migration.md +++ b/docs/migration/v3-migration.md @@ -249,7 +249,7 @@ Animation system was completely rewritten in Chart.js v3. Each property can now ## Developer migration -While the end-user migration for Chart.js 3 is fairly straight-forward, the developer migration can be more complicated. Please reach out for help in the #dev [Slack](https://chartjs-slack.herokuapp.com/) channel if tips on migrating would be helpful. +While the end-user migration for Chart.js 3 is fairly straight-forward, the developer migration can be more complicated. Please reach out for help in the #dev [Slack](https://join.slack.com/t/chartjs/shared_invite/zt-1lo81skkk-AZk6ollhOdrjt9GzPeOsLw) channel if tips on migrating would be helpful. Some of the biggest things that have changed: From 2810bbc6fa605e1eedf27486f0443841772446ae Mon Sep 17 00:00:00 2001 From: Igor Lukanin Date: Thu, 15 Dec 2022 16:52:12 +0400 Subject: [PATCH 4/5] chore: Add Product Hunt button (temporarily) (#10980) --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 18b767e0a..6aa4f2822 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ Coverage Awesome Slack +

+ Chart.js 4.0 - Open source JavaScript charting library for the modern web | Product Hunt

## Documentation From 9d51e99e80c1b7a6e611a93cd891144fd80d5bef Mon Sep 17 00:00:00 2001 From: Jacco van den Berg Date: Thu, 15 Dec 2022 18:48:31 +0100 Subject: [PATCH 5/5] bunp version to 4.1.0 (#10983) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4befb13fd..4c5ccae6f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "chart.js", "homepage": "https://www.chartjs.org", "description": "Simple HTML5 charts using the canvas element.", - "version": "4.0.1", + "version": "4.1.0", "license": "MIT", "type": "module", "sideEffects": [