* fix(plugin.filler): respect dataset clipping area when filling line charts
The filling area must respect the dataset's clipping area when clipping is enabled. Before this change, the line would be clipped according to the dataset's area but the fill would overlap other datasets.
Closes#12052
* chore(plugin.filler): use @ts-expect-error instead of @ts-ignore
* Use the correct area to clip when stacked scales are used
* adds test cases
* fix CI issue
* apply review
* Update .size-limit.cjs
Co-authored-by: Jacco van den Berg <jaccoberg2281@gmail.com>
Co-authored-by: Jacco van den Berg <jaccoberg2281@gmail.com>
* add warning if filler plugin is used but not registered
* fix lint
* increase size limit
* add test, only put warning in dataset controller
* fix register in docs, remove commented code
* remove other mr
* add documentation
* Apply suggestions from code review
Co-authored-by: Jukka Kurkela <jukka.kurkela@gmail.com>
* Also return false if plugin is disabled by options
* improve warning message
* undo docs changes
* update test
Co-authored-by: Jukka Kurkela <jukka.kurkela@gmail.com>
* Refactor get...Items functions to take events rather than positions
To work toward exposing something like the get...Items functions.
* Switch getAxisItems to use optimizedEvaluateItems
optimizedEvaluateItems falls back to evaluating all items for unsorted items, and sorting / optimizing ought to be okay, so this ought to be equivalent.
* Performance
* Consolidate getRelativePosition
helpers.dom.js's getRelativePosition already had logic to handle ChartEvent vs. Event (as demonstrated by the `native` check within `getCanvasPosition`), so it's redundant for core.interaction.js to have its own `native` check.
Update `getRelativePosition` to use the same `native` check as core.interaction.js's version. As best as I can tell, the ChartEvent's x and y are populated from `getRelativePosition`, so the previous `getCanvasPosition` was effectively just duplicating `getRelativePosition'`s work. I added a test to verify this; it depends on a local, not-yet-submitted change in chartjs-test-utils' `triggerMouseEvent` to return the mouse event that it triggers.
* Add an API to refactor duplicate isPointInArea
* Rename and update JSDoc to prepare for making this public
* Give functions a consistent, generic interface
* Export functions for discussion
* Code review feedback
Add a non-null assertion, as requested in code review.
Add JSDoc to clarify that `getCanvasPosition` now expects a native `Event`, not a `ChartEvent`. Add `@ts-ignore`; `getCanvasPosition` relied on some loose conversions between `Event`, `TouchEvent`, and `Touch` that would require several changes to make TypeScript happy.
* Code review feedback
Return the event directly, to speed up the code a bit. Add JSDoc to help communicate its intent. Update various comments.
* Finalize exports; add docs and TypeScript
* Update src/helpers/helpers.dom.js
* Update src/helpers/helpers.dom.js
Only thing needed actually is the update of chartjs-test-utils to 0.4.0
* Bump chartjs-test-utils dependency
To get supporting work from https://github.com/chartjs/chartjs-test-utils/pull/19
Co-authored-by: Jukka Kurkela <jukka.kurkela@gmail.com>
* Fix cleaning up metasets
I believe it's a mistake to only delete the metaset if it has a valid controller; see f191f2f5 for where this behavior was introduced.
This is a minimal fix for #9653; as discussed there, it may also be worth updating `updateHoverStyle`.
As of #7030, `this._metasets` should always be defined, so checking whether it's undefined is no longer necessary.
* Add a test covering metaset behavior
* Add a regression test for #9653; fix `toHaveSize` usage
* Fix test failure
* Fix detecting changed events
Because `this._listeners` may contain both event handlers from options and internal event handlers for responsive support, the `setsEqual` check would often fail, causing event handlers to be unnecessarily detached and reattached and fired.
If I'm understanding correctly, this is the root cause of #9049.
* Use a separate object for responsive listeners
Correctly update events when responsive property changes as well as when requested events change.
* Code review feedback
When canvas.height and canvas.width are set, the numbers are rounded to
integers. The same rounding must be applied to canvas.style.height and
canvas.style.width to avoid scaling of the canvas which would lead to
blurring.
Acknowledging that canvas.height and canvas.width are integers, the
framebuffer is now only redrawn if those integer values change.
* Relocate chart type and dataset type defaults
* Update types
* Separate overrides and descriptors
* Update derived sample, use merge for inherit
* Don't merge overrides
* Review update