Repository: fabricjs/fabric.js
Pull request #9741 (2024-03-18 12:45:57)

fix(): bubble dirty flag to parent
<!--
        Hi there!
        Thanks for taking the time and putting the effort into making fabric better! 💖
        Take a look at /CONTRIBUTING.md for crucial instructions regarding local setup, testing etc.
        https://github.com/fabricjs/fabric.js/blob/master/CONTRIBUTING.md

        Adding tests that verify your fix and safeguard it from unwanted loss and changes is a MUST.

        Pull Requests are not always simple. Don't hesitate to ask for help (beware of [gotchas](http://fabricjs.com/fabric-gotchas) 😓).
        We appreciate your effort and would like the process to be productive and enjoyable.
        A strong community means a strong and better product for everyone.

        Each PR can introduce a single feature or change or fix a single bug
        Large refactors PR have been discussed before and probably splitted in steps
-->

## Description

As part of the group rewrite we exposed a `parent` ref on the object #8951 .
As part of the layout manager fixes an invalidation bug surfaced #9651 .
Fabric relays on `Object#_set` to bubble cache invalidation to the **parent**.
I forgot to fix the invalidation logic when I exposed the parent ref so it still invalidated the group ref.
The bug occurs when a nested object is part of an `ActiveSelection`.
In that case the group ref is the active selection and the parent ref is the group.
 `ActiveSelection` does not render anything, therefore it doesn't cache meaning that it is pointless to flag it as dirty as opposed to the parent.
This PR will fix the mentioned bug.
I also changed the bubbling logic to always bubble a dirty flag regardless of caching state.

<!-- Summarize the reasons of your changes and the meaning of your code. Why the code you are changing is wrong? why your is better? -->
<!-- If you are fixing a regression, please link the commit that introduced the bug -->
<!-- If you are proposing a feature, please link the discussion/issue where that was presented and discussed -->
<!-- Is this pullrequest a follow up from an open issue? if so please link the issue like the example below in addition to the summary -->
<!-- Related to #1234 -->

## In Action

<!-- Add screenshots or recordings if necessary or requested -->
<!-- Are you proposing a performance change? show a some proof of performance -->


codesandbox[bot]: #### Review or Edit in CodeSandbox

Open the branch in <a href="https://codesandbox.io/p/github/fabricjs/fabric.js/fix/dirty-bubbling?mode=review&utm_source=gh_app">Web Editor</a> &bull; <a href="https://codesandbox.io/p/vscode?owner=fabricjs&repo=fabric.js&branch=fix/dirty-bubbling&utm_source=gh_app">VS Code</a> &bull; <a href="https://codesandbox.io/p/vscode?owner=fabricjs&repo=fabric.js&branch=fix/dirty-bubbling&insiders=true&utm_source=gh_app">Insiders</a><br>
<details>
<summary>Open Preview</summary>
<ul><li><a href="https://codesandbox.io/p/devtool/preview/fabricjs/fabric.js/fix/dirty-bubbling?task=next&port=3000&redirect=true&utm_source=gh_app">Run Next Template</a></li><li><a href="https://codesandbox.io/p/devtool/preview/fabricjs/fabric.js/fix/dirty-bubbling?task=node&port=8080&redirect=true&utm_source=gh_app">Run Node Template</a></li><li><a href="https://codesandbox.io/p/devtool/preview/fabricjs/fabric.js/fix/dirty-bubbling?task=vanilla&port=1234&redirect=true&utm_source=gh_app">Run Vanilla Template</a></li><li><a href="https://codesandbox.io/p/devtool/preview/fabricjs/fabric.js/fix/dirty-bubbling?task=vue&port=5173&redirect=true&utm_source=gh_app">Run Vue Template</a></li></ul>
</details>

<!-- open-in-codesandbox:complete -->

github-actions[bot]: <!-- BUILD STATS COMMENT -->
**Build Stats**

 | file / KB (diff) | bundled | minified | 
 | --- | --- | --- | 
 | fabric | 910.046 (**-0.208**) | 304.755 (**-0.092**) | 

github-actions[bot]: Coverage after merging <b>fix/dirty-bubbling</b> into <b>master</b> will be<table><tbody><tr><th>82.68%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/index.node.ts'>index.node.ts</a></td><td><b>14.29%</b></td><td>100%</td><td><b>0%</b></td><td><b>25%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/index.node.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/index.node.ts#L26'>26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/index.node.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/index.node.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/index.node.ts#L44'>44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/index.node.ts#L47'>47</a></td></tr><tr><td colspan='6'><b>src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/ClassRegistry.ts'>ClassRegistry.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Collection.ts'>Collection.ts</a></td><td><b>94.85%</b></td><td><b>94.83%</b></td><td><b>87.10%</b></td><td><b>97.14%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Collection.ts#L109'>109</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Collection.ts#L112'>112</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Collection.ts#L215-L216'>215&ndash;216</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Collection.ts#L241-L242'>241&ndash;242</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/CommonMethods.ts'>CommonMethods.ts</a></td><td><b>96.55%</b></td><td><b>87.50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/CommonMethods.ts#L9'>9</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Intersection.ts'>Intersection.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Observable.ts'>Observable.ts</a></td><td><b>87.76%</b></td><td><b>85.29%</b></td><td><b>87.50%</b></td><td><b>89.58%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Observable.ts#L134-L135'>134&ndash;135</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Observable.ts#L160-L161'>160&ndash;161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Observable.ts#L32-L33'>32&ndash;33</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Observable.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Observable.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Observable.ts#L78'>78</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Observable.ts#L89'>89</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Point.ts'>Point.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Shadow.ts'>Shadow.ts</a></td><td><b>98.55%</b></td><td><b>95.65%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Shadow.ts#L213'>213</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/cache.ts'>cache.ts</a></td><td><b>97.06%</b></td><td><b>90%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/cache.ts#L57'>57</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts'>config.ts</a></td><td><b>74.14%</b></td><td><b>65%</b></td><td><b>66.67%</b></td><td><b>82.76%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts#L131'>131</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts#L139-L141'>139&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts#L152-L154'>152&ndash;154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/config.ts#L30'>30</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/constants.ts'>constants.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/LayoutManager</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts'>LayoutManager.ts</a></td><td><b>87.58%</b></td><td><b>89.29%</b></td><td><b>76.92%</b></td><td><b>90.14%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L151-L152'>151&ndash;152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L154-L155'>154&ndash;155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L249'>249</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L310-L311'>310&ndash;311</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L322'>322</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutManager.ts#L51'>51</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/constants.ts'>constants.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/LayoutManager/LayoutStrategies</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts'>ClipPathLayout.ts</a></td><td><b>82.05%</b></td><td><b>72.22%</b></td><td>100%</td><td><b>88.89%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L30-L31'>30&ndash;31</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L54'>54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L57-L58'>57&ndash;58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L65'>65</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/FitContentLayout.ts'>FitContentLayout.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/FixedLayout.ts'>FixedLayout.ts</a></td><td><b>20%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>40%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L20-L21'>20&ndash;21</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts'>LayoutStrategy.ts</a></td><td><b>85.11%</b></td><td><b>64.71%</b></td><td>100%</td><td><b>95.65%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L35'>35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L70-L71'>70&ndash;71</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/utils.ts'>utils.ts</a></td><td><b>91.67%</b></td><td><b>85.71%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/utils.ts#L28'>28</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/LayoutManager/LayoutStrategies/utils.ts#L34'>34</a></td></tr><tr><td colspan='6'><b>src/Pattern</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Pattern/Pattern.ts'>Pattern.ts</a></td><td><b>90.54%</b></td><td><b>93.94%</b></td><td><b>80%</b></td><td><b>90.32%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Pattern/Pattern.ts#L119'>119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Pattern/Pattern.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Pattern/Pattern.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Pattern/Pattern.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/Pattern/Pattern.ts#L36'>36</a></td></tr><tr><td colspan='6'><b>src/brushes</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/BaseBrush.ts'>BaseBrush.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts'>CircleBrush.ts</a></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L110'>110</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L112'>112</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L114-L116'>114&ndash;116</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L118-L121'>118&ndash;121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L128-L129'>128&ndash;129</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L13'>13</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L138'>138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L23-L24'>23&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L32-L36'>32&ndash;36</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L40-L44'>40&ndash;44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L51-L54'>51&ndash;54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L62-L66'>62&ndash;66</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L68'>68</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L76-L77'>76&ndash;77</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L79-L82'>79&ndash;82</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L84'>84</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L92-L93'>92&ndash;93</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L95'>95</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/CircleBrush.ts#L97-L99'>97&ndash;99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PatternBrush.ts'>PatternBrush.ts</a></td><td><b>97.06%</b></td><td><b>87.50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PatternBrush.ts#L21'>21</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts'>PencilBrush.ts</a></td><td><b>91.06%</b></td><td><b>82.35%</b></td><td>100%</td><td><b>93.81%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L122-L123'>122&ndash;123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L152-L154'>152&ndash;154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L276'>276</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L280'>280</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L285-L286'>285&ndash;286</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L68-L69'>68&ndash;69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/PencilBrush.ts#L84-L85'>84&ndash;85</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts'>SprayBrush.ts</a></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L107-L108'>107&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L110-L111'>110&ndash;111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L118-L119'>118&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L123-L127'>123&ndash;127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L141'>141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L148-L151'>148&ndash;151</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L153-L156'>153&ndash;156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L160-L161'>160&ndash;161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L163'>163</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L165-L168'>165&ndash;168</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L171'>171</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L178-L179'>178&ndash;179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L181'>181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L183-L184'>183&ndash;184</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L186'>186</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L193-L194'>193&ndash;194</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L196-L197'>196&ndash;197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L20'>20</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L21'>21</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L211'>211</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L22-L24'>22&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L28'>28</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L53'>53</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L60'>60</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L84-L86'>84&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L94-L96'>94&ndash;96</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/brushes/SprayBrush.ts#L98-L99'>98&ndash;99</a></td></tr><tr><td colspan='6'><b>src/canvas</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts'>Canvas.ts</a></td><td><b>78.66%</b></td><td><b>77.04%</b></td><td><b>82.14%</b></td><td><b>79.33%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L1001-L1003'>1001&ndash;1003</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L1006-L1007'>1006&ndash;1007</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L1011-L1012'>1011&ndash;1012</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L1123-L1125'>1123&ndash;1125</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L1128-L1129'>1128&ndash;1129</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L1202'>1202</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L1314'>1314</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L1435'>1435</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L158'>158</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L183'>183</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L289'>289</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L289-L294'>289&ndash;294</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L299'>299</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L322-L323'>322&ndash;323</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L328-L333'>328&ndash;333</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L353'>353</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L353'>353</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L353-L354'>353&ndash;354</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L354'>354</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L354-L355'>354&ndash;355</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L363'>363</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L368-L369'>368&ndash;369</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L369'>369</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L369-L370'>369&ndash;370</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L372'>372</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L381'>381</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L387-L388'>387&ndash;388</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L388'>388</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L388'>388</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L431'>431</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L439'>439</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L443'>443</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L443'>443</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L443-L444'>443&ndash;444</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L446'>446</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L528-L529'>528&ndash;529</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L529'>529</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L529-L530'>529&ndash;530</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L536'>536</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L536'>536</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L536-L538'>536&ndash;538</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L558'>558</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L560'>560</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L560'>560</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L560-L561'>560&ndash;561</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L561'>561</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L561'>561</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L564'>564</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L564'>564</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L564-L565'>564&ndash;565</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L568'>568</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L577-L578'>577&ndash;578</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L580-L581'>580&ndash;581</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L583'>583</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L583-L584'>583&ndash;584</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L586-L587'>586&ndash;587</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L599-L600'>599&ndash;600</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L600'>600</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L600-L601'>600&ndash;601</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L603-L608'>603&ndash;608</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L614'>614</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L621'>621</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L658'>658</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L658'>658</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L658'>658</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L660'>660</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L662-L667'>662&ndash;667</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L673'>673</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L679'>679</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L679'>679</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L679-L680'>679&ndash;680</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L682'>682</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L685'>685</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L690'>690</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L703'>703</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L731'>731</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L783-L784'>783&ndash;784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L787-L788'>787&ndash;788</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L791'>791</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L791-L793'>791&ndash;793</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L796-L797'>796&ndash;797</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L879'>879</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L886'>886</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L886'>886</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L886'>886</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L899'>899</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L928-L929'>928&ndash;929</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L929'>929</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L929-L931'>929&ndash;931</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L934-L935'>934&ndash;935</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L935'>935</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L935'>935</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L937'>937</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L945'>945</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L945'>945</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L945-L947'>945&ndash;947</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L947'>947</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L947'>947</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L954-L955'>954&ndash;955</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L963-L964'>963&ndash;964</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L964'>964</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L964-L965'>964&ndash;965</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L971'>971</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/Canvas.ts#L973'>973</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/CanvasOptions.ts'>CanvasOptions.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts'>SelectableCanvas.ts</a></td><td><b>90.22%</b></td><td><b>87.30%</b></td><td><b>94.55%</b></td><td><b>91.74%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L1004'>1004</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L1012'>1012</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L1123'>1123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L1125'>1125</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L1127-L1128'>1127&ndash;1128</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L1199'>1199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L1220-L1221'>1220&ndash;1221</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L1239-L1240'>1239&ndash;1240</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L460-L461'>460&ndash;461</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L463-L464'>463&ndash;464</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L464'>464</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L464'>464</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L513-L514'>513&ndash;514</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L591'>591</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L596'>596</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L666'>666</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L671-L672'>671&ndash;672</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L699-L700'>699&ndash;700</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L724'>724</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L727-L730'>727&ndash;730</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L730'>730</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L730-L731'>730&ndash;731</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L731'>731</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L731'>731</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L737-L738'>737&ndash;738</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L740'>740</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L760-L761'>760&ndash;761</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L766-L770'>766&ndash;770</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L772'>772</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L807-L808'>807&ndash;808</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L811'>811</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L811'>811</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L811-L812'>811&ndash;812</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L931'>931</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L931-L932'>931&ndash;932</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L935'>935</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L955'>955</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/SelectableCanvas.ts#L955'>955</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts'>StaticCanvas.ts</a></td><td><b>96.44%</b></td><td><b>92.72%</b></td><td><b>98.91%</b></td><td><b>98.27%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1045'>1045</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1055'>1055</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1106-L1108'>1106&ndash;1108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1111'>1111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1146-L1147'>1146&ndash;1147</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1223'>1223</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1232'>1232</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1232'>1232</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1236'>1236</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1236'>1236</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L1283-L1284'>1283&ndash;1284</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L188-L189'>188&ndash;189</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L205'>205</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L585'>585</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L597-L598'>597&ndash;598</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L928-L929'>928&ndash;929</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L929'>929</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvas.ts#L929-L930'>929&ndash;930</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/StaticCanvasOptions.ts'>StaticCanvasOptions.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/TextEditingManager.ts'>TextEditingManager.ts</a></td><td><b>86%</b></td><td><b>71.43%</b></td><td><b>91.67%</b></td><td><b>91.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/TextEditingManager.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/TextEditingManager.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/TextEditingManager.ts#L17-L18'>17&ndash;18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/TextEditingManager.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/TextEditingManager.ts#L18'>18</a></td></tr><tr><td colspan='6'><b>src/canvas/DOMManagers</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/CanvasDOMManager.ts'>CanvasDOMManager.ts</a></td><td><b>95.52%</b></td><td><b>70%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/CanvasDOMManager.ts#L21-L22'>21&ndash;22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/CanvasDOMManager.ts#L29'>29</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/StaticCanvasDOMManager.ts'>StaticCanvasDOMManager.ts</a></td><td><b>97.50%</b></td><td><b>88.89%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/StaticCanvasDOMManager.ts#L33'>33</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/util.ts'>util.ts</a></td><td><b>86.67%</b></td><td><b>80.56%</b></td><td><b>83.33%</b></td><td><b>93.94%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/util.ts#L14'>14</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/util.ts#L26'>26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/util.ts#L63-L64'>63&ndash;64</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/util.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/util.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/util.ts#L74'>74</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/canvas/DOMManagers/util.ts#L93-L94'>93&ndash;94</a></td></tr><tr><td colspan='6'><b>src/color</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/Color.ts'>Color.ts</a></td><td><b>94.96%</b></td><td><b>91.67%</b></td><td><b>96.30%</b></td><td><b>96.05%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/Color.ts#L233'>233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/Color.ts#L258-L259'>258&ndash;259</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/Color.ts#L267-L268'>267&ndash;268</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/Color.ts#L48'>48</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/color_map.ts'>color_map.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/constants.ts'>constants.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/util.ts'>util.ts</a></td><td><b>85.71%</b></td><td><b>76.92%</b></td><td>100%</td><td><b>89.74%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/util.ts#L55-L56'>55&ndash;56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/util.ts#L56'>56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/util.ts#L58'>58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/util.ts#L58'>58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/util.ts#L58-L59'>58&ndash;59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/util.ts#L61-L62'>61&ndash;62</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/color/util.ts#L89'>89</a></td></tr><tr><td colspan='6'><b>src/controls</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/Control.ts'>Control.ts</a></td><td><b>94.44%</b></td><td><b>93.10%</b></td><td><b>91.67%</b></td><td><b>96.77%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/Control.ts#L183'>183</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/Control.ts#L249'>249</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/Control.ts#L354'>354</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/changeWidth.ts'>changeWidth.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/commonControls.ts'>commonControls.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts'>controlRendering.ts</a></td><td><b>81.63%</b></td><td><b>78%</b></td><td>100%</td><td><b>84.78%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L106'>106</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L111'>111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L45'>45</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L65-L72'>65&ndash;72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/controlRendering.ts#L81-L82'>81&ndash;82</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/drag.ts'>drag.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/fireEvent.ts'>fireEvent.ts</a></td><td><b>88.89%</b></td><td><b>75%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/fireEvent.ts#L13'>13</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts'>polyControl.ts</a></td><td><b>10.87%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>16.13%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L116-L119'>116&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L119'>119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L129'>129</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L24-L26'>24&ndash;26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L50-L52'>50&ndash;52</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L58-L59'>58&ndash;59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L71'>71</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L77-L79'>77&ndash;79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L81'>81</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L84'>84</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L86'>86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L90-L92'>90&ndash;92</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L94'>94</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/polyControl.ts#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts'>rotate.ts</a></td><td><b>19.57%</b></td><td><b>12.50%</b></td><td><b>50%</b></td><td><b>21.43%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts#L45'>45</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts#L51'>51</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts#L51'>51</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts#L51-L52'>51&ndash;52</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts#L55-L57'>55&ndash;57</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/57871cc5e4d14d466f35ead74e083bf81b2eaa11/src/controls/rotate.ts#L59'>59
asturur: > @asturur please test this with your demo of #9651

I would not know what you want to test with that demo.
ShaMan123: To see that the dirty flag is working as expected with nested selected objects
asturur: Just check it out from the branch and add it to this branch.
Probably one or 2 cases are fixed with the set({ top, left  }) and this pr.
But this is going to refresh the cache and not adjust the layout too. So you would see the object moving but i m not sure you would see the layout adapting
github-actions[bot]: Coverage after merging <b>fix/dirty-bubbling</b> into <b>master</b> will be<table><tbody><tr><th>82.69%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/index.node.ts'>index.node.ts</a></td><td><b>14.29%</b></td><td>100%</td><td><b>0%</b></td><td><b>25%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/index.node.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/index.node.ts#L26'>26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/index.node.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/index.node.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/index.node.ts#L44'>44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/index.node.ts#L47'>47</a></td></tr><tr><td colspan='6'><b>src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/ClassRegistry.ts'>ClassRegistry.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Collection.ts'>Collection.ts</a></td><td><b>94.85%</b></td><td><b>94.83%</b></td><td><b>87.10%</b></td><td><b>97.14%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Collection.ts#L109'>109</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Collection.ts#L112'>112</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Collection.ts#L215-L216'>215&ndash;216</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Collection.ts#L241-L242'>241&ndash;242</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/CommonMethods.ts'>CommonMethods.ts</a></td><td><b>96.55%</b></td><td><b>87.50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/CommonMethods.ts#L9'>9</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Intersection.ts'>Intersection.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Observable.ts'>Observable.ts</a></td><td><b>87.76%</b></td><td><b>85.29%</b></td><td><b>87.50%</b></td><td><b>89.58%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Observable.ts#L134-L135'>134&ndash;135</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Observable.ts#L160-L161'>160&ndash;161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Observable.ts#L32-L33'>32&ndash;33</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Observable.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Observable.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Observable.ts#L78'>78</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Observable.ts#L89'>89</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Point.ts'>Point.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Shadow.ts'>Shadow.ts</a></td><td><b>98.55%</b></td><td><b>95.65%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Shadow.ts#L213'>213</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/cache.ts'>cache.ts</a></td><td><b>97.06%</b></td><td><b>90%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/cache.ts#L57'>57</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts'>config.ts</a></td><td><b>74.14%</b></td><td><b>65%</b></td><td><b>66.67%</b></td><td><b>82.76%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts#L131'>131</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts#L139-L141'>139&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts#L152-L154'>152&ndash;154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/config.ts#L30'>30</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/constants.ts'>constants.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/LayoutManager</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts'>LayoutManager.ts</a></td><td><b>87.58%</b></td><td><b>89.29%</b></td><td><b>76.92%</b></td><td><b>90.14%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L151-L152'>151&ndash;152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L154-L155'>154&ndash;155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L249'>249</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L310-L311'>310&ndash;311</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L322'>322</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutManager.ts#L51'>51</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/constants.ts'>constants.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/LayoutManager/LayoutStrategies</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts'>ClipPathLayout.ts</a></td><td><b>82.05%</b></td><td><b>72.22%</b></td><td>100%</td><td><b>88.89%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L30-L31'>30&ndash;31</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L54'>54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L57-L58'>57&ndash;58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L65'>65</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/FitContentLayout.ts'>FitContentLayout.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/FixedLayout.ts'>FixedLayout.ts</a></td><td><b>20%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>40%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L20-L21'>20&ndash;21</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts'>LayoutStrategy.ts</a></td><td><b>85.11%</b></td><td><b>64.71%</b></td><td>100%</td><td><b>95.65%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L35'>35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L70-L71'>70&ndash;71</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/utils.ts'>utils.ts</a></td><td><b>91.67%</b></td><td><b>85.71%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/utils.ts#L28'>28</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/LayoutManager/LayoutStrategies/utils.ts#L34'>34</a></td></tr><tr><td colspan='6'><b>src/Pattern</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Pattern/Pattern.ts'>Pattern.ts</a></td><td><b>90.54%</b></td><td><b>93.94%</b></td><td><b>80%</b></td><td><b>90.32%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Pattern/Pattern.ts#L119'>119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Pattern/Pattern.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Pattern/Pattern.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Pattern/Pattern.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/Pattern/Pattern.ts#L36'>36</a></td></tr><tr><td colspan='6'><b>src/brushes</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/BaseBrush.ts'>BaseBrush.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts'>CircleBrush.ts</a></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L108'>108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L110'>110</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L112'>112</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L114-L116'>114&ndash;116</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L118-L121'>118&ndash;121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L128-L129'>128&ndash;129</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L13'>13</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L138'>138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L23-L24'>23&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L32-L36'>32&ndash;36</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L40-L44'>40&ndash;44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L51-L54'>51&ndash;54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L62-L66'>62&ndash;66</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L68'>68</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L76-L77'>76&ndash;77</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L79-L82'>79&ndash;82</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L84'>84</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L92-L93'>92&ndash;93</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L95'>95</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/CircleBrush.ts#L97-L99'>97&ndash;99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PatternBrush.ts'>PatternBrush.ts</a></td><td><b>97.06%</b></td><td><b>87.50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PatternBrush.ts#L21'>21</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts'>PencilBrush.ts</a></td><td><b>91.06%</b></td><td><b>82.35%</b></td><td>100%</td><td><b>93.81%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L122-L123'>122&ndash;123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L152-L154'>152&ndash;154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L276'>276</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L280'>280</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L285-L286'>285&ndash;286</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L68-L69'>68&ndash;69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/PencilBrush.ts#L84-L85'>84&ndash;85</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts'>SprayBrush.ts</a></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L107-L108'>107&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L110-L111'>110&ndash;111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L118-L119'>118&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L123-L127'>123&ndash;127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L141'>141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L148-L151'>148&ndash;151</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L153-L156'>153&ndash;156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L160-L161'>160&ndash;161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L163'>163</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L165-L168'>165&ndash;168</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L171'>171</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L178-L179'>178&ndash;179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L181'>181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L183-L184'>183&ndash;184</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L186'>186</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L193-L194'>193&ndash;194</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L196-L197'>196&ndash;197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L20'>20</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L21'>21</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L211'>211</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L22-L24'>22&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L28'>28</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L53'>53</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L60'>60</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L84-L86'>84&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L94-L96'>94&ndash;96</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/brushes/SprayBrush.ts#L98-L99'>98&ndash;99</a></td></tr><tr><td colspan='6'><b>src/canvas</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts'>Canvas.ts</a></td><td><b>78.66%</b></td><td><b>77.04%</b></td><td><b>82.14%</b></td><td><b>79.33%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L1001-L1003'>1001&ndash;1003</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L1006-L1007'>1006&ndash;1007</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L1011-L1012'>1011&ndash;1012</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L1123-L1125'>1123&ndash;1125</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L1128-L1129'>1128&ndash;1129</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L1202'>1202</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L1314'>1314</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L1435'>1435</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L158'>158</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L183'>183</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L289'>289</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L289-L294'>289&ndash;294</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L299'>299</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L322-L323'>322&ndash;323</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L328-L333'>328&ndash;333</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L353'>353</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L353'>353</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L353-L354'>353&ndash;354</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L354'>354</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L354-L355'>354&ndash;355</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L363'>363</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L368-L369'>368&ndash;369</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L369'>369</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L369-L370'>369&ndash;370</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L372'>372</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L381'>381</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L387-L388'>387&ndash;388</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L388'>388</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L388'>388</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L42'>42</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L431'>431</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L439'>439</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L443'>443</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L443'>443</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L443-L444'>443&ndash;444</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L446'>446</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L528-L529'>528&ndash;529</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L529'>529</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L529-L530'>529&ndash;530</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L536'>536</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L536'>536</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L536-L538'>536&ndash;538</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L558'>558</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L560'>560</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L560'>560</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L560-L561'>560&ndash;561</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L561'>561</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L561'>561</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L564'>564</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L564'>564</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L564-L565'>564&ndash;565</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L568'>568</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L577-L578'>577&ndash;578</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L580-L581'>580&ndash;581</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L583'>583</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L583-L584'>583&ndash;584</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L586-L587'>586&ndash;587</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L599-L600'>599&ndash;600</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L600'>600</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L600-L601'>600&ndash;601</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L603-L608'>603&ndash;608</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L614'>614</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L621'>621</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L658'>658</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L658'>658</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L658'>658</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L660'>660</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L662-L667'>662&ndash;667</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L673'>673</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L679'>679</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L679'>679</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L679-L680'>679&ndash;680</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L682'>682</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L685'>685</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L690'>690</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L703'>703</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L731'>731</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L783-L784'>783&ndash;784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L784'>784</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L787-L788'>787&ndash;788</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L791'>791</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L791-L793'>791&ndash;793</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L796-L797'>796&ndash;797</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L879'>879</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L886'>886</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L886'>886</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L886'>886</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L899'>899</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L928-L929'>928&ndash;929</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L929'>929</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L929-L931'>929&ndash;931</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L934-L935'>934&ndash;935</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L935'>935</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L935'>935</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L937'>937</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L945'>945</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L945'>945</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L945-L947'>945&ndash;947</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L947'>947</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L947'>947</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L954-L955'>954&ndash;955</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L963-L964'>963&ndash;964</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L964'>964</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L964-L965'>964&ndash;965</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L971'>971</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/Canvas.ts#L973'>973</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/CanvasOptions.ts'>CanvasOptions.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts'>SelectableCanvas.ts</a></td><td><b>90.22%</b></td><td><b>87.30%</b></td><td><b>94.55%</b></td><td><b>91.74%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L1004'>1004</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L1012'>1012</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L1123'>1123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L1125'>1125</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L1127-L1128'>1127&ndash;1128</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L1199'>1199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L1220-L1221'>1220&ndash;1221</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L1239-L1240'>1239&ndash;1240</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L460-L461'>460&ndash;461</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L463-L464'>463&ndash;464</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L464'>464</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L464'>464</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L513-L514'>513&ndash;514</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L591'>591</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L596'>596</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L666'>666</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L671-L672'>671&ndash;672</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L699-L700'>699&ndash;700</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L724'>724</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L727-L730'>727&ndash;730</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L730'>730</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L730-L731'>730&ndash;731</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L731'>731</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L731'>731</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L737-L738'>737&ndash;738</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L740'>740</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L760-L761'>760&ndash;761</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L766-L770'>766&ndash;770</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L772'>772</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L807-L808'>807&ndash;808</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L811'>811</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L811'>811</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L811-L812'>811&ndash;812</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L931'>931</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L931-L932'>931&ndash;932</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L935'>935</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L955'>955</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/SelectableCanvas.ts#L955'>955</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts'>StaticCanvas.ts</a></td><td><b>96.44%</b></td><td><b>92.72%</b></td><td><b>98.91%</b></td><td><b>98.27%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1045'>1045</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1055'>1055</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1106-L1108'>1106&ndash;1108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1111'>1111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1146-L1147'>1146&ndash;1147</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1223'>1223</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1232'>1232</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1232'>1232</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1236'>1236</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1236'>1236</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L1283-L1284'>1283&ndash;1284</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L188-L189'>188&ndash;189</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L205'>205</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L585'>585</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L597-L598'>597&ndash;598</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L928-L929'>928&ndash;929</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L929'>929</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvas.ts#L929-L930'>929&ndash;930</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/StaticCanvasOptions.ts'>StaticCanvasOptions.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/TextEditingManager.ts'>TextEditingManager.ts</a></td><td><b>86%</b></td><td><b>71.43%</b></td><td><b>91.67%</b></td><td><b>91.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/TextEditingManager.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/TextEditingManager.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/TextEditingManager.ts#L17-L18'>17&ndash;18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/TextEditingManager.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/TextEditingManager.ts#L18'>18</a></td></tr><tr><td colspan='6'><b>src/canvas/DOMManagers</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/CanvasDOMManager.ts'>CanvasDOMManager.ts</a></td><td><b>95.52%</b></td><td><b>70%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/CanvasDOMManager.ts#L21-L22'>21&ndash;22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/CanvasDOMManager.ts#L29'>29</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/StaticCanvasDOMManager.ts'>StaticCanvasDOMManager.ts</a></td><td><b>97.50%</b></td><td><b>88.89%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/StaticCanvasDOMManager.ts#L33'>33</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/util.ts'>util.ts</a></td><td><b>86.67%</b></td><td><b>80.56%</b></td><td><b>83.33%</b></td><td><b>93.94%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/util.ts#L14'>14</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/util.ts#L26'>26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/util.ts#L63-L64'>63&ndash;64</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/util.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/util.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/util.ts#L74'>74</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/canvas/DOMManagers/util.ts#L93-L94'>93&ndash;94</a></td></tr><tr><td colspan='6'><b>src/color</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/Color.ts'>Color.ts</a></td><td><b>94.96%</b></td><td><b>91.67%</b></td><td><b>96.30%</b></td><td><b>96.05%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/Color.ts#L233'>233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/Color.ts#L258-L259'>258&ndash;259</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/Color.ts#L267-L268'>267&ndash;268</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/Color.ts#L48'>48</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/color_map.ts'>color_map.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/constants.ts'>constants.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/util.ts'>util.ts</a></td><td><b>85.71%</b></td><td><b>76.92%</b></td><td>100%</td><td><b>89.74%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/util.ts#L55-L56'>55&ndash;56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/util.ts#L56'>56</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/util.ts#L58'>58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/util.ts#L58'>58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/util.ts#L58-L59'>58&ndash;59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/util.ts#L61-L62'>61&ndash;62</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/color/util.ts#L89'>89</a></td></tr><tr><td colspan='6'><b>src/controls</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/Control.ts'>Control.ts</a></td><td><b>94.44%</b></td><td><b>93.10%</b></td><td><b>91.67%</b></td><td><b>96.77%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/Control.ts#L183'>183</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/Control.ts#L249'>249</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/Control.ts#L354'>354</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/changeWidth.ts'>changeWidth.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/commonControls.ts'>commonControls.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts'>controlRendering.ts</a></td><td><b>81.63%</b></td><td><b>78%</b></td><td>100%</td><td><b>84.78%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L106'>106</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L111'>111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L45'>45</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L65-L72'>65&ndash;72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/controlRendering.ts#L81-L82'>81&ndash;82</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/drag.ts'>drag.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/fireEvent.ts'>fireEvent.ts</a></td><td><b>88.89%</b></td><td><b>75%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/fireEvent.ts#L13'>13</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts'>polyControl.ts</a></td><td><b>10.87%</b></td><td><b>0%</b></td><td><b>0%</b></td><td><b>16.13%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L116-L119'>116&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L119'>119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L129'>129</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L24-L26'>24&ndash;26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L50-L52'>50&ndash;52</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L58-L59'>58&ndash;59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L61'>61</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L71'>71</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L77-L79'>77&ndash;79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L81'>81</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L84'>84</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L86'>86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L90-L92'>90&ndash;92</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L94'>94</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/polyControl.ts#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts'>rotate.ts</a></td><td><b>19.57%</b></td><td><b>12.50%</b></td><td><b>50%</b></td><td><b>21.43%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts#L45'>45</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts#L51'>51</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts#L51'>51</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts#L51-L52'>51&ndash;52</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts#L55-L57'>55&ndash;57</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/cc007262732c19b72c54275c5f771c0804c5b6b8/src/controls/rotate.ts#L59'>59
ShaMan123: tested

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3e6e3ec9b..1f0fc04f0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@
 - chore(TS): minor changes to typescript notation to be compatible with a 5.3.3 [#9725](https://github.com/fabricjs/fabric.js/pull/9725)
 - fix(InteractiveObject): "borderOpacityWhenMoving" does not take effect on the child shapes within the group [#9374](https://github.com/fabricjs/fabric.js/issues/9734)
 - fix(SVGParser): Consider the transformMatrix of the clipPath owner as part of the clipPath trasnformation [#9750](https://github.com/fabricjs/fabric.js/pull/9750)
+- fix(): bubble dirty flag to parent [#9741](https://github.com/fabricjs/fabric.js/pull/9741)
 - fix(StaticCanvas): setDimensions not requesting a render if options are not passed [#9710](https://github.com/fabricjs/fabric.js/pull/9710)
 - fix(LayoutManager): wrong bounding box position when activeSelection has originX/originY that are not default left/top [#9649](https://github.com/fabricjs/fabric.js/pull/9649)
 - fix(ActiveSelection): block ancestors/descendants of selected objects from being selected [#9732](https://github.com/fabricjs/fabric.js/pull/9732)
diff --git a/src/shapes/Group.ts b/src/shapes/Group.ts
index 5ef41b4df..c70075068 100644
--- a/src/shapes/Group.ts
+++ b/src/shapes/Group.ts
@@ -454,7 +454,7 @@ export class Group
    * @return {Boolean}
    */
   isOnACache(): boolean {
-    return this.ownCaching || (!!this.group && this.group.isOnACache());
+    return this.ownCaching || (!!this.parent && this.parent.isOnACache());
   }
 
   /**
diff --git a/src/shapes/Object/Object.spec.ts b/src/shapes/Object/Object.spec.ts
index 66abfc858..749795910 100644
--- a/src/shapes/Object/Object.spec.ts
+++ b/src/shapes/Object/Object.spec.ts
@@ -131,5 +131,16 @@ describe('Object', () => {
       rect.set('dirty', false);
       expect(group.dirty).toBe(true);
     });
+    it('when dirty is true it bubbles to the parent', () => {
+      const rect = new Rect({ width: 100, height: 100 });
+      rect.group = new Group();
+      rect.parent = new Group();
+      rect.group.dirty = false;
+      rect.parent.dirty = false;
+      rect.dirty = false;
+      rect.set('dirty', true);
+      expect(rect.group.dirty).toBe(false);
+      expect(rect.parent.dirty).toBe(true);
+    });
   });
 });
diff --git a/src/shapes/Object/Object.ts b/src/shapes/Object/Object.ts
index bb66971cd..e7c9ef58e 100644
--- a/src/shapes/Object/Object.ts
+++ b/src/shapes/Object/Object.ts
@@ -722,8 +722,6 @@ export class FabricObject<
    * @param {*} value
    */
   _set(key: string, value: any) {
-    const isChanged = this[key as keyof this] !== value;
-
     if (key === 'scaleX' || key === 'scaleY') {
       value = this._constrainScale(value);
     }
@@ -736,29 +734,29 @@ export class FabricObject<
       // i don't like this automatic initialization here
     } else if (key === 'shadow' && value && !(value instanceof Shadow)) {
       value = new Shadow(value);
-    } else if (key === 'dirty' && this.group && value) {
-      // a dirty child makes the parent dirty
-      // but a non dirty child will not make the parent non dirty.
-      // the parent could be dirty for some other reason
-      this.group.set('dirty', value);
     }
 
+    const isChanged = this[key as keyof this] !== value;
     this[key as keyof this] = value;
 
-    if (isChanged) {
-      const groupNeedsUpdate = this.group && this.group.isOnACache();
-      if (
-        (this.constructor as typeof FabricObject).cacheProperties.includes(key)
-      ) {
-        this.dirty = true;
-        groupNeedsUpdate && this.group!.set('dirty', true);
-      } else if (
-        groupNeedsUpdate &&
-        (this.constructor as typeof FabricObject).stateProperties.includes(key)
-      ) {
-        this.group!.set('dirty', true);
-      }
+    // invalidate caches
+    if (
+      isChanged &&
+      (this.constructor as typeof FabricObject).cacheProperties.includes(key)
+    ) {
+      this.dirty = true;
     }
+    // a dirty child makes the parent dirty.
+    // but a non dirty child does not make the parent not dirty.
+    // the parent could be dirty for some other reason.
+    this.parent &&
+      (this.dirty ||
+        (isChanged &&
+          (this.constructor as typeof FabricObject).stateProperties.includes(
+            key
+          ))) &&
+      this.parent._set('dirty', true);
+
     return this;
   }
 
@@ -900,7 +898,7 @@ export class FabricObject<
   shouldCache() {
     this.ownCaching =
       this.needsItsOwnCache() ||
-      (this.objectCaching && (!this.group || !this.group.isOnACache()));
+      (this.objectCaching && (!this.parent || !this.parent.isOnACache()));
     return this.ownCaching;
   }
 


Test patch:
diff --git a/test/unit/group.js b/test/unit/group.js
index b8f94144f..4e2a4e334 100644
--- a/test/unit/group.js
+++ b/test/unit/group.js
@@ -677,18 +677,6 @@
     assert.equal(g1.dirty, true, 'Group has dirty flag set');
   });
 
-  QUnit.test('dirty flag propagation from children up is stopped if group is not caching', function(assert) {
-    var g1 = makeGroupWith4Objects();
-    var obj = g1.item(0);
-    g1.dirty = false;
-    obj.dirty = false;
-    g1.ownCaching = false;
-    assert.equal(g1.dirty, false, 'Group has no dirty flag set');
-    obj.set('fill', 'red');
-    assert.equal(obj.dirty, true, 'Obj has dirty flag set');
-    assert.equal(g1.dirty, false, 'Group has no dirty flag set');
-  });
-
   QUnit.test('dirty flag propagation from children up does not happen if value does not change really', function(assert) {
     var g1 = makeGroupWith4Objects();
     var obj = g1.item(0);
diff --git a/test/unit/object.js b/test/unit/object.js
index 9f8350dd6..845f1864f 100644
--- a/test/unit/object.js
+++ b/test/unit/object.js
@@ -1235,29 +1235,29 @@
     object.needsItsOwnCache = function () { return false; };
 
     object.objectCaching = true;
-    object.group = { isOnACache: function() { return true; }};
+    object.parent = { isOnACache: function() { return true; }};
     assert.equal(object.shouldCache(), false, 'if objectCaching is true, but we are in a group, shouldCache returns false');
 
     object.objectCaching = true;
-    object.group = { isOnACache: function() { return false; }};
+    object.parent = { isOnACache: function() { return false; }};
     assert.equal(object.shouldCache(), true, 'if objectCaching is true, but we are in a not cached group, shouldCache returns true');
 
     object.objectCaching = false;
-    object.group = { isOnACache: function() { return false; }};
+    object.parent = { isOnACache: function() { return false; }};
     assert.equal(object.shouldCache(), false, 'if objectCaching is false, but we are in a not cached group, shouldCache returns false');
 
     object.objectCaching = false;
-    object.group = { isOnACache: function() { return true; }};
+    object.parent = { isOnACache: function() { return true; }};
     assert.equal(object.shouldCache(), false, 'if objectCaching is false, but we are in a cached group, shouldCache returns false');
 
     object.needsItsOwnCache = function () { return true; };
 
     object.objectCaching = false;
-    object.group = { isOnACache: function() { return true; }};
+    object.parent = { isOnACache: function() { return true; }};
     assert.equal(object.shouldCache(), true, 'if objectCaching is false, but we have a clipPath, group cached, we cache anyway');
 
     object.objectCaching = false;
-    object.group = { isOnACache: function() { return false; }};
+    object.parent = { isOnACache: function() { return false; }};
     assert.equal(object.shouldCache(), true, 'if objectCaching is false, but we have a clipPath, group not cached, we cache anyway');
 
   });