* 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
helpers.dom.ts functions referenced the internal `Chart` JavaScript class rather than the published `Chart<TType, TData, TLabel>` TypeScript definition. This causes errors when outside code tries to call helper functions.
The two `Chart` interfaces are incompatible - the `width`, `height`, and `currentDevicePixelRatio` properties are declared as readonly in the TS declaration but are manipulated by helpers.dom.ts functions, and helpers.dom.ts functions need to be invoked both by internal Chart.js code (which uses the JS class) and by outside code (which uses the TS types). To address this, I'm importing the JS version as `PrivateChart`. There may be a better solution.
It's my understanding that the comment about "typedefs are auto-exported" is obsolete now that helpers.dom is a native TS file.
Fixes#11153
* First step in fixing the bug of spanGaps null point interaction
* Complete bugfix of spanGaps null point interaction
* Add two tests in core.interaction.tests for the bugfix change
* Remove odd line break
* Use isNullOrUndef helper for point value checks
* Add 10 more test cases for nearest interaction when spanGaps=true
* Bugfix: spanGaps not working near min and max limits
* Fix error when meta.dataset.options = null
* Add tests for correct setting of line controller properties _drawStart and _drawCount
* Fix spacing in controller line tests
* Add tension to test
* Add a better test case
* Avoid the use of FindLastIndex
* Avoid taking 0 for null value and improve naming
* do not attempt to clear canvas if one does not exist
* update test to explicitly run clearCanvas method to ensure it doesn't throw an error
* explicitly set canvas and ctx to null in test since the helper in test code didn't
* Update test/specs/helpers.canvas.tests.js
---------
Co-authored-by: Jacco van den Berg <jaccoberg2281@gmail.com>
* test: new test to reproduce issue #10951
* test: validate the canvas style too
* fix: Avoid reassigning the the chart size. For specific values of pixelRatio the assignment would cause the size to reduce by 1px. Since it's called from the ResizeObserver it will be stuck in a loop that constantly reduce the size of the chart and canvas.
* Revert "fix: Avoid reassigning the the chart size. For specific values of pixelRatio the assignment would cause the size to reduce by 1px. Since it's called from the ResizeObserver it will be stuck in a loop that constantly reduce the size of the chart and canvas."
This reverts commit ed7a34814d.
* fix: Avoid the resize loop by fixing the rounding error in the retinaScale function.
* fix: getMaximumSize was flooring non-integer height values unnecessarily.
* Revert "fix: Avoid the resize loop by fixing the rounding error in the retinaScale function."
This reverts commit 23525abc6a.
* fix: Avoid the resize loop by fixing the rounding error in the retinaScale function.
* Fix#10749 - backdrops with rotated labels
* remove translation adjustment
Because backdrop now occurs after translation, we don't want to double-adjust the position.
* increase tolerance slightly due to anti-aliasing
Co-authored-by: Charles McNulty <charles.mcnulty@tasconline.com>
* feat: remove line element from scatter controller default config
* feat: move common controllers methods to helpers and add types
* feat: mark methods for scatter and line conntrollers as private
* fix: fix error when showline is true at root options and add tests
* feat: remove else inside scatter controller update
* fix: update getStartAndCountOFVisiblePoints helper code
* Resolve canvasgradient is not defined in node
* Remove trailing white space
* export isPaternOrGradient helper with typings
* fix lint failure, single qoute
* Allow for string inputs too to function
* 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>