* 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
* Create a new hook to enable data decimation
The `beforeElementUpdate` hook can be used to decimate data. The chart
elements will not be created until after this hook has fired ensuring that
if decimation occurs, only the needed elements will be created.
* Address code review feedback
* Rename hook to beforeElementsUpdate
* Simplify parsing logic
* Add decimation plugin to the core
* Allow a dataset to specify a different data key
* Decimation plugin uses the dataKey feature
* Refactor the decimation plugin to support configurable algorithms
* Lint the plugin changes
* Tests for the dataKey feature
* Convert test files to tabs
* Standardize on tabs in ts files
* Remove the dataKey feature
* Replace dataKey usage in decimation plugin
We define a new descriptor for the `data` key allowing the
plugin to be simpler.
* Disable decimation when indexAxis is Y
* Simplify the decimation width approximation
* Resolve the indexAxis correctly in all cases
* Initial documentation
* Reverse check
* Update TS definitions for new plugin options
* Move defineProperty after bailouts
* Add destroy hook