Repository: fabricjs/fabric.js
Pull request #10070 (2024-08-16 14:26:22)

chore(): reduce class inheritance, merge some classes together.
## Description

When transitioning to Typescript we moved class mixins to class inheritance.
That wasn't really necessary but we preferred to keep class/code organization as before.
This PR squash a bit the inheritance chain by merging together classes with fewer methods that end up all in the fabricObject anyway.

Future breaking refactor should move those into delegates with composition.


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

Open the branch in <a href="https://codesandbox.io/p/github/fabricjs/fabric.js/support-custom-props?mode=review&utm_source=gh_app">Web Editor</a> &bull; <a href="https://codesandbox.io/p/vscode?owner=fabricjs&repo=fabric.js&branch=support-custom-props&utm_source=gh_app">VS Code</a> &bull; <a href="https://codesandbox.io/p/vscode?owner=fabricjs&repo=fabric.js&branch=support-custom-props&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/support-custom-props?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/support-custom-props?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/support-custom-props?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/support-custom-props?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 | 920.636 (**-0.021**) | 306.948 (**-0.068**) | 

github-actions[bot]: Coverage after merging <b>support-custom-props</b> into <b>master</b> will be<table><tbody><tr><th>84.19%</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/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/index.node.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/index.node.ts#L26'>26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/index.node.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/index.node.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/index.node.ts#L44'>44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/index.node.ts#L47'>47</a></td></tr><tr><td colspan='6'><b>extensions/aligning_guidelines/util</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/extensions/aligning_guidelines/util/basic.ts'>basic.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/ClassRegistry.ts'>ClassRegistry.ts</a></td><td><b>91.18%</b></td><td><b>64.29%</b></td><td>100%</td><td><b>97.92%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/ClassRegistry.ts#L35'>35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/ClassRegistry.ts#L56'>56</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts'>Collection.ts</a></td><td><b>72.03%</b></td><td><b>32.26%</b></td><td><b>48.39%</b></td><td><b>84.29%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L153'>153</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L155-L157'>155&ndash;157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L159'>159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L169-L170'>169&ndash;170</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L180-L181'>180&ndash;181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L197'>197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L215'>215</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L217'>217</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L219'>219</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L228'>228</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L243'>243</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L254'>254</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L265'>265</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L270'>270</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L279'>279</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L279'>279</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L281'>281</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L286-L287'>286&ndash;287</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L302'>302</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L302'>302</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L304'>304</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L309-L310'>309&ndash;310</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L327-L328'>327&ndash;328</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L328'>328</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L328-L329'>328&ndash;329</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L333-L334'>333&ndash;334</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L337-L338'>337&ndash;338</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L338-L344'>338&ndash;344</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L346-L348'>346&ndash;348</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L350'>350</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L75'>75</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Collection.ts#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/CommonMethods.ts'>CommonMethods.ts</a></td><td><b>88.57%</b></td><td><b>64.29%</b></td><td><b>83.33%</b></td><td><b>96%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/CommonMethods.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/CommonMethods.ts#L52'>52</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/CommonMethods.ts#L9'>9</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts'>Intersection.ts</a></td><td><b>81.42%</b></td><td><b>41.30%</b></td><td><b>73.33%</b></td><td><b>96.14%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L105'>105</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L132-L133'>132&ndash;133</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L166'>166</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L184-L190'>184&ndash;190</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L228'>228</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L228'>228</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L237'>237</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L239'>239</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L289-L291'>289&ndash;291</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L297'>297</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L297'>297</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L78'>78</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Intersection.ts#L80'>80</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts'>Observable.ts</a></td><td><b>72.25%</b></td><td><b>44.19%</b></td><td><b>31.25%</b></td><td><b>86.36%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L144'>144</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L153'>153</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L156'>156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L168'>168</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L170'>170</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L172'>172</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L175'>175</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L43'>43</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L68-L70'>68&ndash;70</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L72'>72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L78'>78</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L80'>80</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L82-L85'>82&ndash;85</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Observable.ts#L87-L91'>87&ndash;91</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts'>Point.ts</a></td><td><b>84.95%</b></td><td><b>62%</b></td><td><b>44.12%</b></td><td><b>92.68%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L104'>104</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L157'>157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L179'>179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L197'>197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L206'>206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L216'>216</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L225'>225</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L236-L239'>236&ndash;239</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L259'>259</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L284-L285'>284&ndash;285</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L294-L297'>294&ndash;297</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L328'>328</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L341'>341</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L349'>349</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L359'>359</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Point.ts#L95'>95</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts'>Shadow.ts</a></td><td><b>80.91%</b></td><td><b>13.04%</b></td><td><b>37.50%</b></td><td><b>90%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L139-L140'>139&ndash;140</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L145-L150'>145&ndash;150</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L159'>159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L194'>194</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L194'>194</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L196-L197'>196&ndash;197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L197'>197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L199'>199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L206'>206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L206'>206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L223-L230'>223&ndash;230</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L232'>232</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L232'>232</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Shadow.ts#L234-L235'>234&ndash;235</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/cache.ts'>cache.ts</a></td><td><b>83.72%</b></td><td><b>45.45%</b></td><td><b>75%</b></td><td><b>90.14%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/cache.ts#L57'>57</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/cache.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/cache.ts#L71-L72'>71&ndash;72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/cache.ts#L74-L77'>74&ndash;77</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts'>config.ts</a></td><td><b>82.21%</b></td><td><b>20%</b></td><td><b>44.44%</b></td><td><b>94.03%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L123'>123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L131-L132'>131&ndash;132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L134-L137'>134&ndash;137</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L142-L143'>142&ndash;143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L147'>147</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/config.ts#L152'>152</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/ActiveSelectionLayoutManager.ts'>ActiveSelectionLayoutManager.ts</a></td><td><b>86.67%</b></td><td><b>76.92%</b></td><td><b>28.57%</b></td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutManager.ts'>LayoutManager.ts</a></td><td><b>89.25%</b></td><td><b>65.48%</b></td><td><b>53.85%</b></td><td><b>99.31%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutManager.ts#L279'>279</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutManager.ts#L344'>344</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutManager.ts#L355'>355</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/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>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts'>index.ts</a></td><td><b>48.57%</b></td><td><b>37.50%</b></td><td><b>80%</b></td><td><b>66.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L1'>1</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L1'>1</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L1-L2'>1&ndash;2</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L2'>2</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L2-L3'>2&ndash;3</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L3'>3</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L3-L4'>3&ndash;4</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L4'>4</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L4-L5'>4&ndash;5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L5'>5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L5'>5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/index.ts#L5-L6'>5&ndash;6</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/types.ts'>types.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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts'>ClipPathLayout.ts</a></td><td><b>71.05%</b></td><td><b>37.50%</b></td><td>100%</td><td><b>78.95%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L41-L44'>41&ndash;44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L46-L48'>46&ndash;48</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L54'>54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L57-L58'>57&ndash;58</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L66-L69'>66&ndash;69</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/FixedLayout.ts'>FixedLayout.ts</a></td><td><b>85.71%</b></td><td><b>20%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts'>LayoutStrategy.ts</a></td><td><b>84.30%</b></td><td><b>50%</b></td><td><b>71.43%</b></td><td><b>96.51%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L52'>52</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L54'>54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L73'>73</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L73'>73</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L75'>75</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L88'>88</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/utils.ts'>utils.ts</a></td><td><b>62.90%</b></td><td><b>7.14%</b></td><td>100%</td><td><b>78.72%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/utils.ts#L28-L32'>28&ndash;32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/utils.ts#L34-L35'>34&ndash;35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/utils.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/utils.ts#L39-L44'>39&ndash;44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/utils.ts#L47'>47</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/utils.ts#L47'>47</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/LayoutManager/LayoutStrategies/utils.ts#L47'>47</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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts'>Pattern.ts</a></td><td><b>52.08%</b></td><td><b>2.86%</b></td><td><b>10%</b></td><td><b>63.08%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L105-L107'>105&ndash;107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L113'>113</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L113-L114'>113&ndash;114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L117-L119'>117&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L119'>119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L119-L122'>119&ndash;122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L130-L132'>130&ndash;132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L132'>132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L132'>132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L132'>132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L132'>132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L132-L138'>132&ndash;138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L150'>150</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L150'>150</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L150'>150</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L150'>150</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L153-L160'>153&ndash;160</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L160'>160</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L160-L164'>160&ndash;164</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L174-L175'>174&ndash;175</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L175'>175</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L175'>175</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L175-L176'>175&ndash;176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L176-L182'>176&ndash;182</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L182'>182</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L182'>182</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L182-L183'>182&ndash;183</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L183'>183</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L183-L188'>183&ndash;188</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L190-L199'>190&ndash;199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L203-L206'>203&ndash;206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L209-L210'>209&ndash;210</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L212-L214'>212&ndash;214</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L216-L218'>216&ndash;218</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L218'>218</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L218-L221'>218&ndash;221</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L33'>33</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/Pattern/Pattern.ts#L37'>37</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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts'>BaseBrush.ts</a></td><td><b>78.67%</b></td><td><b>8.33%</b></td><td><b>14.29%</b></td><td><b>88.55%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L110'>110</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L114-L115'>114&ndash;115</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L124-L125'>124&ndash;125</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L135'>135</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L146'>146</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L155'>155</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L155-L160'>155&ndash;160</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/BaseBrush.ts#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts'>CircleBrush.ts</a></td><td><b>52.10%</b></td><td><b>12.50%</b></td><td><b>12.50%</b></td><td><b>58.25%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L100-L108'>100&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L108-L118'>108&ndash;118</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L130-L139'>130&ndash;139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L55'>55</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L69'>69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L78-L79'>78&ndash;79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L83'>83</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L85-L86'>85&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/CircleBrush.ts#L92-L98'>92&ndash;98</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PatternBrush.ts#L21'>21</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L122-L123'>122&ndash;123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L152-L154'>152&ndash;154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L276'>276</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L280'>280</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L285-L286'>285&ndash;286</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/PencilBrush.ts#L68-L69'>68&ndash;69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L107-L108'>107&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L110-L111'>110&ndash;111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L118-L119'>118&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L123-L127'>123&ndash;127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L141'>141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L148-L151'>148&ndash;151</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L153-L156'>153&ndash;156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L160-L161'>160&ndash;161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L163'>163</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L165-L168'>165&ndash;168</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L171'>171</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L178-L179'>178&ndash;179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L181'>181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L183-L184'>183&ndash;184</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L186'>186</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L193-L194'>193&ndash;194</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L196-L197'>196&ndash;197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L20'>20</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L21'>21</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L211'>211</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L22-L24'>22&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L28'>28</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L53'>53</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L60'>60</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L84-L86'>84&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/brushes/SprayBrush.ts#L94-L96'>94&ndash;96</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts'>Canvas.ts</a></td><td><b>71.46%</b></td><td><b>31.29%</b></td><td><b>78.57%</b></td><td><b>82.81%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1000'>1000</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1005'>1005</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1009'>1009</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1013-L1014'>1013&ndash;1014</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1019'>1019</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1033'>1033</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1048'>1048</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1050'>1050</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1050'>1050</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1057'>1057</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1062-L1069'>1062&ndash;1069</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1127'>1127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1131'>1131</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1138'>1138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1141'>1141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1143'>1143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1204-L1208'>1204&ndash;1208</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1287-L1291'>1287&ndash;1291</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1294'>1294</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1297'>1297</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1311'>1311</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1318'>1318</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1329'>1329</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1335'>1335</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1381-L1401'>1381&ndash;1401</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1401-L1414'>1401&ndash;1414</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1414-L1416'>1414&ndash;1416</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1419-L1422'>1419&ndash;1422</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1424-L1426'>1424&ndash;1426</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1430'>1430</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1432'>1432</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1434-L1436'>1434&ndash;1436</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1439-L1444'>1439&ndash;1444</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1447-L1449'>1447&ndash;1449</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1452'>1452</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1454'>1454</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1468'>1468</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1475'>1475</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1477-L1493'>1477&ndash;1493</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1493'>1493</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1493-L1494'>1493&ndash;1494</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1496-L1497'>1496&ndash;1497</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1501-L1502'>1501&ndash;1502</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1505-L1506'>1505&ndash;1506</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1509-L1511'>1509&ndash;1511</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L1514'>1514</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L184'>184</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L319'>319</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L329'>329</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L354'>354</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L370'>370</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L389'>389</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L432'>432</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L444'>444</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L560-L564'>560&ndash;564</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L567-L568'>567&ndash;568</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L570'>570</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L580'>580</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L583-L584'>583&ndash;584</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L586'>586</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L589-L591'>589&ndash;591</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L603'>603</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L610-L614'>610&ndash;614</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L616-L621'>616&ndash;621</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L623-L627'>623&ndash;627</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L660'>660</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L662'>662</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L669-L673'>669&ndash;673</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L675-L680'>675&ndash;680</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L682'>682</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L684-L685'>684&ndash;685</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L687-L690'>687&ndash;690</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L692-L693'>692&ndash;693</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L704'>704</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L748'>748</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L784-L787'>784&ndash;787</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L790'>790</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L792'>792</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L792'>792</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L795'>795</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L797'>797</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L799'>799</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L825'>825</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L831-L832'>831&ndash;832</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L834'>834</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L840-L841'>840&ndash;841</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L844-L846'>844&ndash;846</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L848-L852'>848&ndash;852</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L855-L862'>855&ndash;862</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L868'>868</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L871'>871</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L871'>871</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L885'>885</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L888'>888</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L900'>900</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L933-L934'>933&ndash;934</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L937'>937</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L939'>939</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L948-L954'>948&ndash;954</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L957'>957</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L966-L973'>966&ndash;973</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L975'>975</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L994'>994</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/Canvas.ts#L996-L997'>996&ndash;997</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/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/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts'>SelectableCanvas.ts</a></td><td><b>83.53%</b></td><td><b>49.70%</b></td><td><b>80%</b></td><td><b>94.21%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1006'>1006</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1008-L1009'>1008&ndash;1009</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1026'>1026</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1035'>1035</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1103-L1107'>1103&ndash;1107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1153-L1154'>1153&ndash;1154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1156-L1157'>1156&ndash;1157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1159'>1159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1186'>1186</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1188-L1189'>1188&ndash;1189</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1189'>1189</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1191'>1191</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1233'>1233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1235'>1235</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.ts#L1237'>1237</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ef093cf60e472fc897e42416fa7680e01b21ffd1/src/canvas/SelectableCanvas.t
github-actions[bot]: Coverage after merging <b>support-custom-props</b> into <b>master</b> will be<table><tbody><tr><th>84.93%</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/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/index.node.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/index.node.ts#L26'>26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/index.node.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/index.node.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/index.node.ts#L44'>44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/index.node.ts#L47'>47</a></td></tr><tr><td colspan='6'><b>extensions/aligning_guidelines/util</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/extensions/aligning_guidelines/util/basic.ts'>basic.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/ClassRegistry.ts'>ClassRegistry.ts</a></td><td><b>91.18%</b></td><td><b>64.29%</b></td><td>100%</td><td><b>97.92%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/ClassRegistry.ts#L35'>35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/ClassRegistry.ts#L56'>56</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts'>Collection.ts</a></td><td><b>78.71%</b></td><td><b>44.62%</b></td><td><b>87.10%</b></td><td><b>86.21%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L153'>153</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L155-L157'>155&ndash;157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L159'>159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L169-L170'>169&ndash;170</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L181'>181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L197'>197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L217'>217</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L228'>228</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L241'>241</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L243'>243</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L252'>252</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L254'>254</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L265'>265</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L270'>270</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L279'>279</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L281'>281</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L286-L287'>286&ndash;287</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L302'>302</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L304'>304</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L309-L310'>309&ndash;310</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L329'>329</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L333-L334'>333&ndash;334</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L338-L344'>338&ndash;344</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L346-L348'>346&ndash;348</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Collection.ts#L350'>350</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/CommonMethods.ts'>CommonMethods.ts</a></td><td><b>91.43%</b></td><td><b>71.43%</b></td><td>100%</td><td><b>96%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/CommonMethods.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/CommonMethods.ts#L52'>52</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts'>Intersection.ts</a></td><td><b>85.25%</b></td><td><b>48.91%</b></td><td>100%</td><td><b>97.30%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts#L184-L188'>184&ndash;188</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts#L190'>190</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts#L228'>228</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts#L237'>237</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts#L239'>239</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts#L289'>289</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts#L297'>297</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Intersection.ts#L297'>297</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts'>Observable.ts</a></td><td><b>80.63%</b></td><td><b>53.49%</b></td><td><b>93.75%</b></td><td><b>87.88%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L144'>144</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L153'>153</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L156'>156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L168'>168</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L170'>170</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L175'>175</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L68-L70'>68&ndash;70</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L72'>72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L80'>80</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L84-L85'>84&ndash;85</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Observable.ts#L87-L91'>87&ndash;91</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts'>Point.ts</a></td><td><b>90.53%</b></td><td><b>62%</b></td><td>100%</td><td><b>93.90%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L104'>104</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L157'>157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L179'>179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L197'>197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L206'>206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L216'>216</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L225'>225</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L236-L239'>236&ndash;239</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L259'>259</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L285'>285</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L297'>297</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L328'>328</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L341'>341</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L349'>349</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L359'>359</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Point.ts#L95'>95</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts'>Shadow.ts</a></td><td><b>89.21%</b></td><td><b>78.26%</b></td><td>100%</td><td><b>90%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L140'>140</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L145-L150'>145&ndash;150</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L159'>159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L196'>196</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L199'>199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L206'>206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L223-L230'>223&ndash;230</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Shadow.ts#L234-L235'>234&ndash;235</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/cache.ts'>cache.ts</a></td><td><b>84.88%</b></td><td><b>45.45%</b></td><td>100%</td><td><b>90.14%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/cache.ts#L57'>57</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/cache.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/cache.ts#L71-L72'>71&ndash;72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/cache.ts#L74-L77'>74&ndash;77</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/config.ts'>config.ts</a></td><td><b>87.73%</b></td><td><b>55%</b></td><td><b>66.67%</b></td><td><b>94.03%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/config.ts#L132'>132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/config.ts#L134-L137'>134&ndash;137</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/config.ts#L142-L143'>142&ndash;143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/config.ts#L147'>147</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/config.ts#L152'>152</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/ActiveSelectionLayoutManager.ts'>ActiveSelectionLayoutManager.ts</a></td><td><b>91.67%</b></td><td><b>69.23%</b></td><td><b>85.71%</b></td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/ActiveSelectionLayoutManager.ts#L43'>43</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutManager.ts'>LayoutManager.ts</a></td><td><b>90.75%</b></td><td><b>65.48%</b></td><td><b>76.92%</b></td><td><b>99.31%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutManager.ts#L279'>279</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutManager.ts#L344'>344</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutManager.ts#L355'>355</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/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>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts'>index.ts</a></td><td><b>48.57%</b></td><td><b>37.50%</b></td><td><b>80%</b></td><td><b>66.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L1'>1</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L1'>1</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L1-L2'>1&ndash;2</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L2'>2</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L2-L3'>2&ndash;3</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L3'>3</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L3-L4'>3&ndash;4</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L4'>4</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L4-L5'>4&ndash;5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L5'>5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L5'>5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/index.ts#L5-L6'>5&ndash;6</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/types.ts'>types.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/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts'>ClipPathLayout.ts</a></td><td><b>75%</b></td><td><b>56.25%</b></td><td>100%</td><td><b>78.95%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L41-L44'>41&ndash;44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L46-L48'>46&ndash;48</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L66-L69'>66&ndash;69</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/FixedLayout.ts'>FixedLayout.ts</a></td><td><b>85.71%</b></td><td><b>20%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts'>LayoutStrategy.ts</a></td><td><b>87.60%</b></td><td><b>57.14%</b></td><td>100%</td><td><b>96.51%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L54'>54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L73'>73</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L73'>73</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L75'>75</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/utils.ts'>utils.ts</a></td><td><b>72.58%</b></td><td><b>50%</b></td><td>100%</td><td><b>78.72%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/utils.ts#L29-L32'>29&ndash;32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/utils.ts#L34-L35'>34&ndash;35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/LayoutManager/LayoutStrategies/utils.ts#L40-L44'>40&ndash;44</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/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts'>Pattern.ts</a></td><td><b>67.50%</b></td><td><b>88.57%</b></td><td><b>80%</b></td><td><b>63.08%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L105-L107'>105&ndash;107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L118-L119'>118&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L119-L122'>119&ndash;122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L130-L138'>130&ndash;138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L153-L164'>153&ndash;164</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L174'>174</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L176-L181'>176&ndash;181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L183-L188'>183&ndash;188</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L190-L199'>190&ndash;199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L203-L206'>203&ndash;206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L209-L210'>209&ndash;210</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L212-L214'>212&ndash;214</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L216-L218'>216&ndash;218</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L218-L221'>218&ndash;221</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L33'>33</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/Pattern/Pattern.ts#L37'>37</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/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts'>BaseBrush.ts</a></td><td><b>89.33%</b></td><td><b>91.67%</b></td><td>100%</td><td><b>88.55%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L110'>110</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L115'>115</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L124-L125'>124&ndash;125</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L135'>135</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L146'>146</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L155-L160'>155&ndash;160</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/BaseBrush.ts#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts'>CircleBrush.ts</a></td><td><b>52.10%</b></td><td><b>12.50%</b></td><td><b>12.50%</b></td><td><b>58.25%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L100-L108'>100&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L108-L118'>108&ndash;118</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L130-L139'>130&ndash;139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L55'>55</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L69'>69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L78-L79'>78&ndash;79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L83'>83</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L85-L86'>85&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/CircleBrush.ts#L92-L98'>92&ndash;98</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PatternBrush.ts#L21'>21</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L122-L123'>122&ndash;123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L152-L154'>152&ndash;154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L276'>276</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L280'>280</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L285-L286'>285&ndash;286</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/PencilBrush.ts#L68-L69'>68&ndash;69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L107-L108'>107&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L110-L111'>110&ndash;111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L118-L119'>118&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L123-L127'>123&ndash;127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L141'>141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L148-L151'>148&ndash;151</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L153-L156'>153&ndash;156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L160-L161'>160&ndash;161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L163'>163</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L165-L168'>165&ndash;168</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L171'>171</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L178-L179'>178&ndash;179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L181'>181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L183-L184'>183&ndash;184</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L186'>186</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L193-L194'>193&ndash;194</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L196-L197'>196&ndash;197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L20'>20</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L21'>21</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L211'>211</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L22-L24'>22&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L28'>28</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L53'>53</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L60'>60</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L84-L86'>84&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/brushes/SprayBrush.ts#L94-L96'>94&ndash;96</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts'>Canvas.ts</a></td><td><b>74.63%</b></td><td><b>40.47%</b></td><td><b>92.86%</b></td><td><b>83.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1000'>1000</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1005'>1005</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1009'>1009</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1013-L1014'>1013&ndash;1014</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1019'>1019</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1064-L1069'>1064&ndash;1069</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1127'>1127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1131'>1131</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1138'>1138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1141'>1141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1204-L1208'>1204&ndash;1208</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1287-L1291'>1287&ndash;1291</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1318'>1318</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1335'>1335</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1381-L1398'>1381&ndash;1398</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1404-L1409'>1404&ndash;1409</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1412-L1413'>1412&ndash;1413</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1415'>1415</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1419'>1419</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1421-L1422'>1421&ndash;1422</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1424-L1426'>1424&ndash;1426</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1430'>1430</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1432'>1432</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1434-L1436'>1434&ndash;1436</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1439-L1444'>1439&ndash;1444</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1447-L1449'>1447&ndash;1449</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1452'>1452</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1454'>1454</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1468'>1468</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1475'>1475</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1477-L1488'>1477&ndash;1488</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1490-L1493'>1490&ndash;1493</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1493-L1494'>1493&ndash;1494</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1496-L1497'>1496&ndash;1497</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1501-L1502'>1501&ndash;1502</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1505-L1506'>1505&ndash;1506</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1509-L1511'>1509&ndash;1511</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L1514'>1514</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L329'>329</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L354'>354</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L370'>370</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L389'>389</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L444'>444</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L560-L564'>560&ndash;564</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L567-L568'>567&ndash;568</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L570'>570</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L580'>580</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L583-L584'>583&ndash;584</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L586'>586</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L589-L591'>589&ndash;591</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L603'>603</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L610-L614'>610&ndash;614</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L616-L621'>616&ndash;621</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L623-L627'>623&ndash;627</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L660'>660</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L662'>662</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L669-L673'>669&ndash;673</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L675-L680'>675&ndash;680</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L682'>682</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L684-L685'>684&ndash;685</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L687-L690'>687&ndash;690</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L692-L693'>692&ndash;693</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L748'>748</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L784-L787'>784&ndash;787</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L790'>790</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L792'>792</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L795'>795</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L797'>797</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L799'>799</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L825'>825</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L834'>834</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L844'>844</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L846'>846</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L848-L852'>848&ndash;852</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L855-L862'>855&ndash;862</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L888'>888</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L933-L934'>933&ndash;934</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L937'>937</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L939'>939</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L946'>946</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L949-L954'>949&ndash;954</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L957'>957</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L965'>965</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L965-L971'>965&ndash;971</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L973'>973</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L975'>975</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/Canvas.ts#L996-L997'>996&ndash;997</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/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/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts'>SelectableCanvas.ts</a></td><td><b>85.42%</b></td><td><b>53.80%</b></td><td>100%</td><td><b>94.39%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1006'>1006</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1008-L1009'>1008&ndash;1009</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1026'>1026</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1035'>1035</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1103-L1107'>1103&ndash;1107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1153-L1154'>1153&ndash;1154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1156-L1157'>1156&ndash;1157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1159'>1159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1186'>1186</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1188-L1189'>1188&ndash;1189</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1189'>1189</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1191'>1191</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1233'>1233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1235'>1235</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1237'>1237</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1253'>1253</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1255'>1255</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1283'>1283</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1286'>1286</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1329-L1336'>1329&ndash;1336</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1339'>1339</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1342'>1342</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1351-L1352'>1351&ndash;1352</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1356-L1365'>1356&ndash;1365</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1369'>1369</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1371-L1372'>1371&ndash;1372</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1378-L1383'>1378&ndash;1383</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L1387'>1387</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L340-L342'>340&ndash;342</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L346'>346</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L376'>376</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L398'>398</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L476'>476</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L527'>527</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L529'>529</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L605'>605</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L610'>610</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L687'>687</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/SelectableCanvas.ts#L715'>715</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts'>StaticCanvas.ts</a></td><td><b>75.74%</b></td><td><b>69.11%</b></td><td><b>98.91%</b></td><td><b>75.38%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1000'>1000</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1006'>1006</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1009'>1009</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1011'>1011</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1013'>1013</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1021'>1021</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1023-L1029'>1023&ndash;1029</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1039'>1039</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1042'>1042</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1045-L1051'>1045&ndash;1051</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1053-L1054'>1053&ndash;1054</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1056-L1077'>1056&ndash;1077</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1084-L1086'>1084&ndash;1086</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1088'>1088</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1096'>1096</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1102'>1102</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1104'>1104</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1104-L1105'>1104&ndash;1105</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1105-L1106'>1105&ndash;1106</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1108'>1108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1108-L1113'>1108&ndash;1113</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1126'>1126</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1131-L1133'>1131&ndash;1133</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1137'>1137</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1141'>1141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1143'>1143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1145'>1145</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1150-L1154'>1150&ndash;1154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1156'>1156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1158-L1161'>1158&ndash;1161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1164'>1164</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1166'>1166</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1175'>1175</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1177-L1178'>1177&ndash;1178</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1185-L1188'>1185&ndash;1188</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1190'>1190</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1196-L1199'>1196&ndash;1199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1203-L1204'>1203&ndash;1204</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1214'>1214</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1220-L1222'>1220&ndash;1222</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1224-L1229'>1224&ndash;1229</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1229'>1229</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1229-L1233'>1229&ndash;1233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1233'>1233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1233-L1238'>1233&ndash;1238</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1240-L1247'>1240&ndash;1247</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1276-L1277'>1276&ndash;1277</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1279-L1284'>1279&ndash;1284</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1286-L1292'>1286&ndash;1292</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1296'>1296</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1298-L1311'>1298&ndash;1311</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1319-L1320'>1319&ndash;1320</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1330'>1330</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1341'>1341</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1382-L1386'>1382&ndash;1386</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1388'>1388</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1390'>1390</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1392-L1396'>1392&ndash;1396</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1415'>1415</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1431'>1431</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb677148bca9d780d2600ad210af5f56baa/src/canvas/StaticCanvas.ts#L1448'>1448</a>, <a href='https://github.com/fabricjs/fabric.js/blob/ca170fb67714
github-actions[bot]: Coverage after merging <b>support-custom-props</b> into <b>master</b> will be<table><tbody><tr><th>84.89%</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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/index.node.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/index.node.ts#L26'>26</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/index.node.ts#L29'>29</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/index.node.ts#L41'>41</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/index.node.ts#L44'>44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/index.node.ts#L47'>47</a></td></tr><tr><td colspan='6'><b>extensions/aligning_guidelines/util</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/extensions/aligning_guidelines/util/basic.ts'>basic.ts</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/ClassRegistry.ts'>ClassRegistry.ts</a></td><td><b>91.18%</b></td><td><b>64.29%</b></td><td>100%</td><td><b>97.92%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/ClassRegistry.ts#L35'>35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/ClassRegistry.ts#L56'>56</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts'>Collection.ts</a></td><td><b>78.71%</b></td><td><b>44.62%</b></td><td><b>87.10%</b></td><td><b>86.21%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L153'>153</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L155-L157'>155&ndash;157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L159'>159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L169-L170'>169&ndash;170</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L181'>181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L197'>197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L217'>217</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L228'>228</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L241'>241</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L243'>243</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L252'>252</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L254'>254</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L265'>265</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L270'>270</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L279'>279</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L281'>281</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L286-L287'>286&ndash;287</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L302'>302</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L304'>304</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L309-L310'>309&ndash;310</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L329'>329</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L333-L334'>333&ndash;334</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L338-L344'>338&ndash;344</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L346-L348'>346&ndash;348</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Collection.ts#L350'>350</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/CommonMethods.ts'>CommonMethods.ts</a></td><td><b>91.43%</b></td><td><b>71.43%</b></td><td>100%</td><td><b>96%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/CommonMethods.ts#L50'>50</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/CommonMethods.ts#L52'>52</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts'>Intersection.ts</a></td><td><b>85.25%</b></td><td><b>48.91%</b></td><td>100%</td><td><b>97.30%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts#L184-L188'>184&ndash;188</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts#L190'>190</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts#L228'>228</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts#L237'>237</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts#L239'>239</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts#L289'>289</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts#L297'>297</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Intersection.ts#L297'>297</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts'>Observable.ts</a></td><td><b>80.63%</b></td><td><b>53.49%</b></td><td><b>93.75%</b></td><td><b>87.88%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L144'>144</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L153'>153</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L156'>156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L168'>168</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L170'>170</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L175'>175</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L68-L70'>68&ndash;70</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L72'>72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L80'>80</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L84-L85'>84&ndash;85</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Observable.ts#L87-L91'>87&ndash;91</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts'>Point.ts</a></td><td><b>90.53%</b></td><td><b>62%</b></td><td>100%</td><td><b>93.90%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L104'>104</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L117'>117</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L157'>157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L179'>179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L197'>197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L206'>206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L216'>216</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L225'>225</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L236-L239'>236&ndash;239</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L259'>259</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L285'>285</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L297'>297</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L328'>328</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L341'>341</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L349'>349</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L359'>359</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Point.ts#L95'>95</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts'>Shadow.ts</a></td><td><b>89.21%</b></td><td><b>78.26%</b></td><td>100%</td><td><b>90%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L140'>140</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L145-L150'>145&ndash;150</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L159'>159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L196'>196</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L199'>199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L206'>206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L223-L230'>223&ndash;230</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Shadow.ts#L234-L235'>234&ndash;235</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/cache.ts'>cache.ts</a></td><td><b>84.88%</b></td><td><b>45.45%</b></td><td>100%</td><td><b>90.14%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/cache.ts#L57'>57</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/cache.ts#L59'>59</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/cache.ts#L71-L72'>71&ndash;72</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/cache.ts#L74-L77'>74&ndash;77</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/config.ts'>config.ts</a></td><td><b>87.73%</b></td><td><b>55%</b></td><td><b>66.67%</b></td><td><b>94.03%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/config.ts#L132'>132</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/config.ts#L134-L137'>134&ndash;137</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/config.ts#L139'>139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/config.ts#L142-L143'>142&ndash;143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/config.ts#L147'>147</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/config.ts#L152'>152</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/ActiveSelectionLayoutManager.ts'>ActiveSelectionLayoutManager.ts</a></td><td><b>91.67%</b></td><td><b>69.23%</b></td><td><b>85.71%</b></td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/ActiveSelectionLayoutManager.ts#L43'>43</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutManager.ts'>LayoutManager.ts</a></td><td><b>90.75%</b></td><td><b>65.48%</b></td><td><b>76.92%</b></td><td><b>99.31%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutManager.ts#L279'>279</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutManager.ts#L344'>344</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutManager.ts#L355'>355</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts'>index.ts</a></td><td><b>48.57%</b></td><td><b>37.50%</b></td><td><b>80%</b></td><td><b>66.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L1'>1</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L1'>1</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L1-L2'>1&ndash;2</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L2'>2</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L2-L3'>2&ndash;3</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L3'>3</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L3-L4'>3&ndash;4</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L4'>4</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L4-L5'>4&ndash;5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L5'>5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L5'>5</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/index.ts#L5-L6'>5&ndash;6</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/types.ts'>types.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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts'>ClipPathLayout.ts</a></td><td><b>75%</b></td><td><b>56.25%</b></td><td>100%</td><td><b>78.95%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L41-L44'>41&ndash;44</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L46-L48'>46&ndash;48</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/ClipPathLayout.ts#L66-L69'>66&ndash;69</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/FixedLayout.ts'>FixedLayout.ts</a></td><td><b>85.71%</b></td><td><b>20%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/FixedLayout.ts#L23'>23</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts'>LayoutStrategy.ts</a></td><td><b>87.60%</b></td><td><b>57.14%</b></td><td>100%</td><td><b>96.51%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L54'>54</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L73'>73</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L73'>73</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/LayoutStrategy.ts#L75'>75</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/utils.ts'>utils.ts</a></td><td><b>72.58%</b></td><td><b>50%</b></td><td>100%</td><td><b>78.72%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/utils.ts#L29-L32'>29&ndash;32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/utils.ts#L34-L35'>34&ndash;35</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/LayoutManager/LayoutStrategies/utils.ts#L40-L44'>40&ndash;44</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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts'>Pattern.ts</a></td><td><b>67.50%</b></td><td><b>88.57%</b></td><td><b>80%</b></td><td><b>63.08%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L105-L107'>105&ndash;107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L114'>114</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L118-L119'>118&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L119-L122'>119&ndash;122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L130-L138'>130&ndash;138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L153-L164'>153&ndash;164</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L174'>174</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L176-L181'>176&ndash;181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L183-L188'>183&ndash;188</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L190-L199'>190&ndash;199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L203-L206'>203&ndash;206</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L209-L210'>209&ndash;210</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L212-L214'>212&ndash;214</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L216-L218'>216&ndash;218</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L218-L221'>218&ndash;221</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L33'>33</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/Pattern/Pattern.ts#L37'>37</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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts'>BaseBrush.ts</a></td><td><b>89.33%</b></td><td><b>91.67%</b></td><td>100%</td><td><b>88.55%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L110'>110</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L115'>115</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L124-L125'>124&ndash;125</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L130'>130</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L135'>135</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L143'>143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L146'>146</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L155-L160'>155&ndash;160</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/BaseBrush.ts#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts'>CircleBrush.ts</a></td><td><b>52.10%</b></td><td><b>12.50%</b></td><td><b>12.50%</b></td><td><b>58.25%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L100-L108'>100&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L108-L118'>108&ndash;118</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L122'>122</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L130-L139'>130&ndash;139</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L55'>55</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L69'>69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L76'>76</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L78-L79'>78&ndash;79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L79'>79</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L83'>83</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L85-L86'>85&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/CircleBrush.ts#L92-L98'>92&ndash;98</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PatternBrush.ts#L21'>21</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L122-L123'>122&ndash;123</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L152'>152</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L152-L154'>152&ndash;154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L176'>176</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L276'>276</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L280'>280</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L285-L286'>285&ndash;286</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/PencilBrush.ts#L68-L69'>68&ndash;69</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L107'>107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L107-L108'>107&ndash;108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L110-L111'>110&ndash;111</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L118-L119'>118&ndash;119</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L121'>121</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L123-L127'>123&ndash;127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L136'>136</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L140-L141'>140&ndash;141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L141'>141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L148'>148</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L148-L151'>148&ndash;151</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L153-L156'>153&ndash;156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L160-L161'>160&ndash;161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L163'>163</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L165-L168'>165&ndash;168</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L17'>17</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L171'>171</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L178-L179'>178&ndash;179</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L18'>18</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L181'>181</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L183-L184'>183&ndash;184</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L186'>186</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L193-L194'>193&ndash;194</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L196-L197'>196&ndash;197</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L20'>20</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L200'>200</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L207'>207</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L21'>21</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L211'>211</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L22'>22</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L22-L24'>22&ndash;24</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L28'>28</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L32'>32</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L39'>39</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L46'>46</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L53'>53</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L60'>60</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L67'>67</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L84-L86'>84&ndash;86</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/brushes/SprayBrush.ts#L94-L96'>94&ndash;96</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts'>Canvas.ts</a></td><td><b>74.63%</b></td><td><b>40.47%</b></td><td><b>92.86%</b></td><td><b>83.67%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1000'>1000</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1005'>1005</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1009'>1009</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1013-L1014'>1013&ndash;1014</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1019'>1019</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1064-L1069'>1064&ndash;1069</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1127'>1127</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1131'>1131</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1138'>1138</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1141'>1141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1204-L1208'>1204&ndash;1208</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1287-L1291'>1287&ndash;1291</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1318'>1318</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1335'>1335</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1381-L1398'>1381&ndash;1398</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1404-L1409'>1404&ndash;1409</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1412-L1413'>1412&ndash;1413</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1415'>1415</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1419'>1419</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1421-L1422'>1421&ndash;1422</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1424-L1426'>1424&ndash;1426</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1430'>1430</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1432'>1432</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1434-L1436'>1434&ndash;1436</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1439-L1444'>1439&ndash;1444</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1447-L1449'>1447&ndash;1449</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1452'>1452</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1454'>1454</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1468'>1468</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1475'>1475</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1477-L1488'>1477&ndash;1488</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1490-L1493'>1490&ndash;1493</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1493-L1494'>1493&ndash;1494</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1496-L1497'>1496&ndash;1497</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1501-L1502'>1501&ndash;1502</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1505-L1506'>1505&ndash;1506</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1509-L1511'>1509&ndash;1511</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L1514'>1514</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L329'>329</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L354'>354</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L370'>370</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L389'>389</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L444'>444</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L560-L564'>560&ndash;564</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L567-L568'>567&ndash;568</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L570'>570</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L580'>580</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L583-L584'>583&ndash;584</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L586'>586</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L589-L591'>589&ndash;591</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L603'>603</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L610-L614'>610&ndash;614</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L616-L621'>616&ndash;621</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L623-L627'>623&ndash;627</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L660'>660</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L662'>662</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L669-L673'>669&ndash;673</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L675-L680'>675&ndash;680</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L682'>682</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L684-L685'>684&ndash;685</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L687-L690'>687&ndash;690</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L692-L693'>692&ndash;693</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L748'>748</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L784-L787'>784&ndash;787</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L790'>790</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L792'>792</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L795'>795</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L797'>797</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L799'>799</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L825'>825</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L834'>834</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L844'>844</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L846'>846</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L848-L852'>848&ndash;852</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L855-L862'>855&ndash;862</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L888'>888</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L933-L934'>933&ndash;934</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L937'>937</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L939'>939</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L946'>946</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L949-L954'>949&ndash;954</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L957'>957</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L965'>965</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L965-L971'>965&ndash;971</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L973'>973</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L975'>975</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/Canvas.ts#L996-L997'>996&ndash;997</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/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/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts'>SelectableCanvas.ts</a></td><td><b>85.42%</b></td><td><b>53.80%</b></td><td>100%</td><td><b>94.39%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1006'>1006</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1008-L1009'>1008&ndash;1009</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1026'>1026</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1035'>1035</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1103-L1107'>1103&ndash;1107</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1153-L1154'>1153&ndash;1154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1156-L1157'>1156&ndash;1157</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1159'>1159</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1186'>1186</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1188-L1189'>1188&ndash;1189</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1189'>1189</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1191'>1191</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1233'>1233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1235'>1235</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1237'>1237</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1253'>1253</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1255'>1255</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1283'>1283</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1286'>1286</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1329-L1336'>1329&ndash;1336</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1339'>1339</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1342'>1342</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1351-L1352'>1351&ndash;1352</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1356-L1365'>1356&ndash;1365</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1369'>1369</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1371-L1372'>1371&ndash;1372</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1378-L1383'>1378&ndash;1383</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L1387'>1387</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L340-L342'>340&ndash;342</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L346'>346</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L376'>376</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L398'>398</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L476'>476</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L527'>527</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L529'>529</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L605'>605</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L610'>610</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L687'>687</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/SelectableCanvas.ts#L715'>715</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts'>StaticCanvas.ts</a></td><td><b>75.74%</b></td><td><b>69.11%</b></td><td><b>98.91%</b></td><td><b>75.38%</b></td><td><a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1000'>1000</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1006'>1006</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1009'>1009</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1011'>1011</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1013'>1013</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1021'>1021</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1023-L1029'>1023&ndash;1029</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1039'>1039</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1042'>1042</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1045-L1051'>1045&ndash;1051</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1053-L1054'>1053&ndash;1054</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1056-L1077'>1056&ndash;1077</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1084-L1086'>1084&ndash;1086</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1088'>1088</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1096'>1096</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1102'>1102</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1104'>1104</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1104-L1105'>1104&ndash;1105</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1105-L1106'>1105&ndash;1106</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1108'>1108</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1108-L1113'>1108&ndash;1113</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1126'>1126</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1131-L1133'>1131&ndash;1133</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1137'>1137</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1141'>1141</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1143'>1143</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1145'>1145</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1150-L1154'>1150&ndash;1154</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1156'>1156</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1158-L1161'>1158&ndash;1161</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1164'>1164</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1166'>1166</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1175'>1175</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1177-L1178'>1177&ndash;1178</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1185-L1188'>1185&ndash;1188</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1190'>1190</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1196-L1199'>1196&ndash;1199</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1203-L1204'>1203&ndash;1204</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1214'>1214</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1220-L1222'>1220&ndash;1222</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1224-L1229'>1224&ndash;1229</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1229'>1229</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1229-L1233'>1229&ndash;1233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1233'>1233</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1233-L1238'>1233&ndash;1238</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1240-L1247'>1240&ndash;1247</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1276-L1277'>1276&ndash;1277</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1279-L1284'>1279&ndash;1284</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1286-L1292'>1286&ndash;1292</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1296'>1296</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1298-L1311'>1298&ndash;1311</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1319-L1320'>1319&ndash;1320</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1330'>1330</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1341'>1341</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1382-L1386'>1382&ndash;1386</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1388'>1388</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1390'>1390</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1392-L1396'>1392&ndash;1396</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1415'>1415</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1431'>1431</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa15bc6ce90055aa4056069d38d386f/src/canvas/StaticCanvas.ts#L1448'>1448</a>, <a href='https://github.com/fabricjs/fabric.js/blob/7a57fc4a1aa1

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1d71e96b8..87a113463 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,8 @@
 
 ## [next]
 
+- chore(): reduce class inheritance, merge some classes together. [#10070](https://github.com/fabricjs/fabric.js/pull/10070)
+
 ## [6.3.0]
 
 - chore(): Remove over-protective cloneDeep from fromObject [#9621](https://github.com/fabricjs/fabric.js/pull/9621)
diff --git a/src/shapes/Object/AnimatableObject.ts b/src/shapes/Object/AnimatableObject.ts
deleted file mode 100644
index be057c38c..000000000
--- a/src/shapes/Object/AnimatableObject.ts
+++ /dev/null
@@ -1,107 +0,0 @@
-import type { TColorArg } from '../../color/typedefs';
-import { FILL, STROKE } from '../../constants';
-import type { ObjectEvents } from '../../EventTypeDefs';
-import type { TAnimation } from '../../util/animation/animate';
-import { animate, animateColor } from '../../util/animation/animate';
-import type {
-  AnimationOptions,
-  ArrayAnimationOptions,
-  ColorAnimationOptions,
-  ValueAnimationOptions,
-} from '../../util/animation/types';
-import { StackedObject } from './StackedObject';
-
-export abstract class AnimatableObject<
-  EventSpec extends ObjectEvents = ObjectEvents,
-> extends StackedObject<EventSpec> {
-  /**
-   * List of properties to consider for animating colors.
-   * @type String[]
-   */
-  static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];
-
-  /**
-   * Animates object's properties
-   * @param {Record<string, number | number[] | TColorArg>} animatable map of keys and end values
-   * @param {Partial<AnimationOptions<T>>} options
-   * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}
-   * @return {Record<string, TAnimation<T>>} map of animation contexts
-   *
-   * As object — multiple properties
-   *
-   * object.animate({ left: ..., top: ... });
-   * object.animate({ left: ..., top: ... }, { duration: ... });
-   */
-  animate<T extends number | number[] | TColorArg>(
-    animatable: Record<string, T>,
-    options?: Partial<AnimationOptions<T>>,
-  ): Record<string, TAnimation<T>> {
-    return Object.entries(animatable).reduce(
-      (acc, [key, endValue]) => {
-        acc[key] = this._animate(key, endValue, options);
-        return acc;
-      },
-      {} as Record<string, TAnimation<T>>,
-    );
-  }
-
-  /**
-   * @private
-   * @param {String} key Property to animate
-   * @param {String} to Value to animate to
-   * @param {Object} [options] Options object
-   */
-  _animate<T extends number | number[] | TColorArg>(
-    key: string,
-    endValue: T,
-    options: Partial<AnimationOptions<T>> = {},
-  ): TAnimation<T> {
-    const path = key.split('.');
-    const propIsColor = (
-      this.constructor as typeof AnimatableObject
-    ).colorProperties.includes(path[path.length - 1]);
-    const { abort, startValue, onChange, onComplete } = options;
-    const animationOptions = {
-      ...options,
-      target: this,
-      // path.reduce... is the current value in case start value isn't provided
-      startValue:
-        startValue ?? path.reduce((deep: any, key) => deep[key], this),
-      endValue,
-      abort: abort?.bind(this),
-      onChange: (
-        value: number | number[] | string,
-        valueProgress: number,
-        durationProgress: number,
-      ) => {
-        path.reduce((deep: Record<string, any>, key, index) => {
-          if (index === path.length - 1) {
-            deep[key] = value;
-          }
-          return deep[key];
-        }, this);
-        onChange &&
-          // @ts-expect-error generic callback arg0 is wrong
-          onChange(value, valueProgress, durationProgress);
-      },
-      onComplete: (
-        value: number | number[] | string,
-        valueProgress: number,
-        durationProgress: number,
-      ) => {
-        this.setCoords();
-        onComplete &&
-          // @ts-expect-error generic callback arg0 is wrong
-          onComplete(value, valueProgress, durationProgress);
-      },
-    } as AnimationOptions<T>;
-
-    return (
-      propIsColor
-        ? animateColor(animationOptions as ColorAnimationOptions)
-        : animate(
-            animationOptions as ValueAnimationOptions | ArrayAnimationOptions,
-          )
-    ) as TAnimation<T>;
-  }
-}
diff --git a/src/shapes/Object/Object.ts b/src/shapes/Object/Object.ts
index 4505d73f7..a7073c1bc 100644
--- a/src/shapes/Object/Object.ts
+++ b/src/shapes/Object/Object.ts
@@ -8,11 +8,11 @@ import {
   SCALE_X,
   SCALE_Y,
   STROKE,
+  FILL,
   TOP,
   VERSION,
 } from '../../constants';
 import type { ObjectEvents } from '../../EventTypeDefs';
-import { AnimatableObject } from './AnimatableObject';
 import { Point } from '../../Point';
 import { Shadow } from '../../Shadow';
 import type {
@@ -57,6 +57,39 @@ import type { SerializedObjectProps } from './types/SerializedObjectProps';
 import type { ObjectProps } from './types/ObjectProps';
 import { getDevicePixelRatio, getEnv } from '../../env';
 import { log } from '../../util/internals/console';
+import type { TColorArg } from '../../color/typedefs';
+import type { TAnimation } from '../../util/animation/animate';
+import { animate, animateColor } from '../../util/animation/animate';
+import type {
+  AnimationOptions,
+  ArrayAnimationOptions,
+  ColorAnimationOptions,
+  ValueAnimationOptions,
+} from '../../util/animation/types';
+import { ObjectGeometry } from './ObjectGeometry';
+
+type TAncestor = FabricObject;
+type TCollection = Group;
+
+export type Ancestors =
+  | [FabricObject | Group]
+  | [FabricObject | Group, ...Group[]]
+  | Group[];
+
+export type AncestryComparison = {
+  /**
+   * common ancestors of `this` and`other`(may include`this` | `other`)
+   */
+  common: Ancestors;
+  /**
+   * ancestors that are of `this` only
+   */
+  fork: Ancestors;
+  /**
+   * ancestors that are of `other` only
+   */
+  otherFork: Ancestors;
+};
 
 export type TCachedFabricObject<T extends FabricObject = FabricObject> = T &
   Required<
@@ -135,7 +168,7 @@ export class FabricObject<
     SProps extends SerializedObjectProps = SerializedObjectProps,
     EventSpec extends ObjectEvents = ObjectEvents,
   >
-  extends AnimatableObject<EventSpec>
+  extends ObjectGeometry<EventSpec>
   implements ObjectProps
 {
   declare minScaleLimit: number;
@@ -1563,6 +1596,247 @@ export class FabricObject<
     this._cacheContext = null;
   }
 
+  // #region Animation methods
+  /**
+   * List of properties to consider for animating colors.
+   * @type String[]
+   */
+  static colorProperties: string[] = [FILL, STROKE, 'backgroundColor'];
+
+  /**
+   * Animates object's properties
+   * @param {Record<string, number | number[] | TColorArg>} animatable map of keys and end values
+   * @param {Partial<AnimationOptions<T>>} options
+   * @tutorial {@link http://fabricjs.com/fabric-intro-part-2#animation}
+   * @return {Record<string, TAnimation<T>>} map of animation contexts
+   *
+   * As object — multiple properties
+   *
+   * object.animate({ left: ..., top: ... });
+   * object.animate({ left: ..., top: ... }, { duration: ... });
+   */
+  animate<T extends number | number[] | TColorArg>(
+    animatable: Record<string, T>,
+    options?: Partial<AnimationOptions<T>>,
+  ): Record<string, TAnimation<T>> {
+    return Object.entries(animatable).reduce(
+      (acc, [key, endValue]) => {
+        acc[key] = this._animate(key, endValue, options);
+        return acc;
+      },
+      {} as Record<string, TAnimation<T>>,
+    );
+  }
+
+  /**
+   * @private
+   * @param {String} key Property to animate
+   * @param {String} to Value to animate to
+   * @param {Object} [options] Options object
+   */
+  _animate<T extends number | number[] | TColorArg>(
+    key: string,
+    endValue: T,
+    options: Partial<AnimationOptions<T>> = {},
+  ): TAnimation<T> {
+    const path = key.split('.');
+    const propIsColor = (
+      this.constructor as typeof FabricObject
+    ).colorProperties.includes(path[path.length - 1]);
+    const { abort, startValue, onChange, onComplete } = options;
+    const animationOptions = {
+      ...options,
+      target: this,
+      // path.reduce... is the current value in case start value isn't provided
+      startValue:
+        startValue ?? path.reduce((deep: any, key) => deep[key], this),
+      endValue,
+      abort: abort?.bind(this),
+      onChange: (
+        value: number | number[] | string,
+        valueProgress: number,
+        durationProgress: number,
+      ) => {
+        path.reduce((deep: Record<string, any>, key, index) => {
+          if (index === path.length - 1) {
+            deep[key] = value;
+          }
+          return deep[key];
+        }, this);
+        onChange &&
+          // @ts-expect-error generic callback arg0 is wrong
+          onChange(value, valueProgress, durationProgress);
+      },
+      onComplete: (
+        value: number | number[] | string,
+        valueProgress: number,
+        durationProgress: number,
+      ) => {
+        this.setCoords();
+        onComplete &&
+          // @ts-expect-error generic callback arg0 is wrong
+          onComplete(value, valueProgress, durationProgress);
+      },
+    } as AnimationOptions<T>;
+
+    return (
+      propIsColor
+        ? animateColor(animationOptions as ColorAnimationOptions)
+        : animate(
+            animationOptions as ValueAnimationOptions | ArrayAnimationOptions,
+          )
+    ) as TAnimation<T>;
+  }
+
+  // #region Object stacking methods
+
+  /**
+   * A reference to the parent of the object
+   * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref
+   */
+  declare parent?: Group;
+
+  /**
+   * Checks if object is descendant of target
+   * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons
+   * @param {TAncestor} target
+   * @returns {boolean}
+   */
+  isDescendantOf(target: TAncestor): boolean {
+    const { parent, group } = this;
+    return (
+      parent === target ||
+      group === target ||
+      // walk up
+      (!!parent && parent.isDescendantOf(target)) ||
+      (!!group && group !== parent && group.isDescendantOf(target))
+    );
+  }
+
+  /**
+   * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top
+   */
+  getAncestors(): Ancestors {
+    const ancestors: TAncestor[] = [];
+    // eslint-disable-next-line @typescript-eslint/no-this-alias
+    let parent: TAncestor | undefined = this;
+    do {
+      parent = parent.parent;
+      parent && ancestors.push(parent);
+    } while (parent);
+    return ancestors as Ancestors;
+  }
+
+  /**
+   * Compare ancestors
+   *
+   * @param {StackedObject} other
+   * @returns {AncestryComparison} an object that represent the ancestry situation.
+   */
+  findCommonAncestors<T extends this>(other: T): AncestryComparison {
+    if (this === other) {
+      return {
+        fork: [],
+        otherFork: [],
+        common: [this, ...this.getAncestors()],
+      } as AncestryComparison;
+    }
+    const ancestors = this.getAncestors();
+    const otherAncestors = other.getAncestors();
+    //  if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case
+    if (
+      ancestors.length === 0 &&
+      otherAncestors.length > 0 &&
+      this === otherAncestors[otherAncestors.length - 1]
+    ) {
+      return {
+        fork: [],
+        otherFork: [
+          other,
+          ...otherAncestors.slice(0, otherAncestors.length - 1),
+        ],
+        common: [this],
+      } as AncestryComparison;
+    }
+    //  compare ancestors
+    for (let i = 0, ancestor; i < ancestors.length; i++) {
+      ancestor = ancestors[i];
+      if (ancestor === other) {
+        return {
+          fork: [this, ...ancestors.slice(0, i)],
+          otherFork: [],
+          common: ancestors.slice(i),
+        } as AncestryComparison;
+      }
+      for (let j = 0; j < otherAncestors.length; j++) {
+        if (this === otherAncestors[j]) {
+          return {
+            fork: [],
+            otherFork: [other, ...otherAncestors.slice(0, j)],
+            common: [this, ...ancestors],
+          } as AncestryComparison;
+        }
+        if (ancestor === otherAncestors[j]) {
+          return {
+            fork: [this, ...ancestors.slice(0, i)],
+            otherFork: [other, ...otherAncestors.slice(0, j)],
+            common: ancestors.slice(i),
+          } as AncestryComparison;
+        }
+      }
+    }
+    // nothing shared
+    return {
+      fork: [this, ...ancestors],
+      otherFork: [other, ...otherAncestors],
+      common: [],
+    } as AncestryComparison;
+  }
+
+  /**
+   *
+   * @param {StackedObject} other
+   * @returns {boolean}
+   */
+  hasCommonAncestors<T extends this>(other: T): boolean {
+    const commonAncestors = this.findCommonAncestors(other);
+    return commonAncestors && !!commonAncestors.common.length;
+  }
+
+  /**
+   *
+   * @param {FabricObject} other object to compare against
+   * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`
+   */
+  isInFrontOf<T extends this>(other: T): boolean | undefined {
+    if (this === other) {
+      return undefined;
+    }
+    const ancestorData = this.findCommonAncestors(other);
+
+    if (ancestorData.fork.includes(other as any)) {
+      return true;
+    }
+    if (ancestorData.otherFork.includes(this as any)) {
+      return false;
+    }
+    // if there isn't a common ancestor, we take the canvas.
+    // if there is no canvas, there is nothing to compare
+    const firstCommonAncestor = ancestorData.common[0] || this.canvas;
+    if (!firstCommonAncestor) {
+      return undefined;
+    }
+    const headOfFork = ancestorData.fork.pop(),
+      headOfOtherFork = ancestorData.otherFork.pop(),
+      thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
+        headOfFork as any,
+      ),
+      otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
+        headOfOtherFork as any,
+      );
+    return thisIndex > -1 && thisIndex > otherIndex;
+  }
+
   /**
    *
    * @param {Function} klass
diff --git a/src/shapes/Object/ObjectGeometry.ts b/src/shapes/Object/ObjectGeometry.ts
index 1c09da8ef..ece0258c8 100644
--- a/src/shapes/Object/ObjectGeometry.ts
+++ b/src/shapes/Object/ObjectGeometry.ts
@@ -22,10 +22,17 @@ import {
 import { radiansToDegrees } from '../../util/misc/radiansDegreesConversion';
 import type { Canvas } from '../../canvas/Canvas';
 import type { StaticCanvas } from '../../canvas/StaticCanvas';
-import { ObjectOrigin } from './ObjectOrigin';
 import type { ObjectEvents } from '../../EventTypeDefs';
 import type { ControlProps } from './types/ControlProps';
 import { resolveOrigin } from '../../util/misc/resolveOrigin';
+import type { Group } from '../Group';
+import { calcDimensionsMatrix } from '../../util/misc/matrix';
+import { sizeAfterTransform } from '../../util/misc/objectTransforms';
+import { degreesToRadians } from '../../util/misc/radiansDegreesConversion';
+import { CommonMethods } from '../../CommonMethods';
+import type { BaseProps } from './types/BaseProps';
+import type { FillStrokeProps } from './types/FillStrokeProps';
+import { CENTER, LEFT, TOP } from '../../constants';
 
 type TMatrixCache = {
   key: number[];
@@ -35,9 +42,14 @@ type TMatrixCache = {
 type TACoords = TCornerPoint;
 
 export class ObjectGeometry<EventSpec extends ObjectEvents = ObjectEvents>
-  extends ObjectOrigin<EventSpec>
-  implements Pick<ControlProps, 'padding'>
+  extends CommonMethods<EventSpec>
+  implements
+    Pick<ControlProps, 'padding'>,
+    BaseProps,
+    Pick<FillStrokeProps, 'strokeWidth' | 'strokeUniform'>
 {
+  // #region Geometry
+
   declare padding: number;
 
   /**
@@ -545,4 +557,227 @@ export class ObjectGeometry<EventSpec extends ObjectEvents = ObjectEvents>
       .transform(this.getViewportTransform(), true)
       .scalarAdd(2 * this.padding);
   }
+
+  // #region Origin
+
+  declare top: number;
+  declare left: number;
+  declare width: number;
+  declare height: number;
+  declare flipX: boolean;
+  declare flipY: boolean;
+  declare scaleX: number;
+  declare scaleY: number;
+  declare skewX: number;
+  declare skewY: number;
+  declare originX: TOriginX;
+  declare originY: TOriginY;
+  declare angle: TDegree;
+  declare strokeWidth: number;
+  declare strokeUniform: boolean;
+
+  /**
+   * Object containing this object.
+   * can influence its size and position
+   */
+  declare group?: Group;
+
+  /**
+   * Calculate object bounding box dimensions from its properties scale, skew.
+   * This bounding box is aligned with object angle and not with canvas axis or screen.
+   * @param {Object} [options]
+   * @param {Number} [options.scaleX]
+   * @param {Number} [options.scaleY]
+   * @param {Number} [options.skewX]
+   * @param {Number} [options.skewY]
+   * @private
+   * @returns {Point} dimensions
+   */
+  _getTransformedDimensions(options: any = {}): Point {
+    const dimOptions = {
+      // if scaleX or scaleY are negative numbers,
+      // this will return dimensions that are negative.
+      // and this will break assumptions around the codebase
+      scaleX: this.scaleX,
+      scaleY: this.scaleY,
+      skewX: this.skewX,
+      skewY: this.skewY,
+      width: this.width,
+      height: this.height,
+      strokeWidth: this.strokeWidth,
+      ...options,
+    };
+    // stroke is applied before/after transformations are applied according to `strokeUniform`
+    const strokeWidth = dimOptions.strokeWidth;
+    let preScalingStrokeValue = strokeWidth,
+      postScalingStrokeValue = 0;
+
+    if (this.strokeUniform) {
+      preScalingStrokeValue = 0;
+      postScalingStrokeValue = strokeWidth;
+    }
+    const dimX = dimOptions.width + preScalingStrokeValue,
+      dimY = dimOptions.height + preScalingStrokeValue,
+      noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;
+    let finalDimensions;
+    if (noSkew) {
+      finalDimensions = new Point(
+        dimX * dimOptions.scaleX,
+        dimY * dimOptions.scaleY,
+      );
+    } else {
+      finalDimensions = sizeAfterTransform(
+        dimX,
+        dimY,
+        calcDimensionsMatrix(dimOptions),
+      );
+    }
+
+    return finalDimensions.scalarAdd(postScalingStrokeValue);
+  }
+
+  /**
+   * Translates the coordinates from a set of origin to another (based on the object's dimensions)
+   * @param {Point} point The point which corresponds to the originX and originY params
+   * @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'
+   * @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'
+   * @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'
+   * @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'
+   * @return {Point}
+   */
+  translateToGivenOrigin(
+    point: Point,
+    fromOriginX: TOriginX,
+    fromOriginY: TOriginY,
+    toOriginX: TOriginX,
+    toOriginY: TOriginY,
+  ): Point {
+    let x = point.x,
+      y = point.y;
+    const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),
+      offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);
+
+    if (offsetX || offsetY) {
+      const dim = this._getTransformedDimensions();
+      x += offsetX * dim.x;
+      y += offsetY * dim.y;
+    }
+
+    return new Point(x, y);
+  }
+
+  /**
+   * Translates the coordinates from origin to center coordinates (based on the object's dimensions)
+   * @param {Point} point The point which corresponds to the originX and originY params
+   * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
+   * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
+   * @return {Point}
+   */
+  translateToCenterPoint(
+    point: Point,
+    originX: TOriginX,
+    originY: TOriginY,
+  ): Point {
+    const p = this.translateToGivenOrigin(
+      point,
+      originX,
+      originY,
+      CENTER,
+      CENTER,
+    );
+    if (this.angle) {
+      return p.rotate(degreesToRadians(this.angle), point);
+    }
+    return p;
+  }
+
+  /**
+   * Translates the coordinates from center to origin coordinates (based on the object's dimensions)
+   * @param {Point} center The point which corresponds to center of the object
+   * @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'
+   * @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'
+   * @return {Point}
+   */
+  translateToOriginPoint(
+    center: Point,
+    originX: TOriginX,
+    originY: TOriginY,
+  ): Point {
+    const p = this.translateToGivenOrigin(
+      center,
+      CENTER,
+      CENTER,
+      originX,
+      originY,
+    );
+    if (this.angle) {
+      return p.rotate(degreesToRadians(this.angle), center);
+    }
+    return p;
+  }
+
+  /**
+   * Returns the center coordinates of the object relative to canvas
+   * @return {Point}
+   */
+  getCenterPoint(): Point {
+    const relCenter = this.getRelativeCenterPoint();
+    return this.group
+      ? transformPoint(relCenter, this.group.calcTransformMatrix())
+      : relCenter;
+  }
+
+  /**
+   * Returns the center coordinates of the object relative to it's parent
+   * @return {Point}
+   */
+  getRelativeCenterPoint(): Point {
+    return this.translateToCenterPoint(
+      new Point(this.left, this.top),
+      this.originX,
+      this.originY,
+    );
+  }
+
+  /**
+   * Returns the coordinates of the object as if it has a different origin
+   * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
+   * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
+   * @return {Point}
+   */
+  getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {
+    return this.translateToOriginPoint(
+      this.getRelativeCenterPoint(),
+      originX,
+      originY,
+    );
+  }
+
+  /**
+   * Sets the position of the object taking into consideration the object's origin
+   * @param {Point} pos The new position of the object
+   * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
+   * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
+   * @return {void}
+   */
+  setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {
+    const center = this.translateToCenterPoint(pos, originX, originY),
+      position = this.translateToOriginPoint(
+        center,
+        this.originX,
+        this.originY,
+      );
+    this.set({ left: position.x, top: position.y });
+  }
+
+  /**
+   * @private
+   */
+  _getLeftTopCoords() {
+    return this.translateToOriginPoint(
+      this.getRelativeCenterPoint(),
+      LEFT,
+      TOP,
+    );
+  }
 }
diff --git a/src/shapes/Object/ObjectOrigin.ts b/src/shapes/Object/ObjectOrigin.ts
deleted file mode 100644
index fe08e2b42..000000000
--- a/src/shapes/Object/ObjectOrigin.ts
+++ /dev/null
@@ -1,237 +0,0 @@
-import { Point } from '../../Point';
-import type { Group } from '../Group';
-import type { TDegree, TOriginX, TOriginY } from '../../typedefs';
-import { calcDimensionsMatrix, transformPoint } from '../../util/misc/matrix';
-import { sizeAfterTransform } from '../../util/misc/objectTransforms';
-import { degreesToRadians } from '../../util/misc/radiansDegreesConversion';
-import { CommonMethods } from '../../CommonMethods';
-import { resolveOrigin } from '../../util/misc/resolveOrigin';
-import type { BaseProps } from './types/BaseProps';
-import type { FillStrokeProps } from './types/FillStrokeProps';
-import { CENTER, LEFT, TOP } from '../../constants';
-
-export class ObjectOrigin<EventSpec>
-  extends CommonMethods<EventSpec>
-  implements BaseProps, Pick<FillStrokeProps, 'strokeWidth' | 'strokeUniform'>
-{
-  declare top: number;
-  declare left: number;
-  declare width: number;
-  declare height: number;
-  declare flipX: boolean;
-  declare flipY: boolean;
-  declare scaleX: number;
-  declare scaleY: number;
-  declare skewX: number;
-  declare skewY: number;
-  declare originX: TOriginX;
-  declare originY: TOriginY;
-  declare angle: TDegree;
-  declare strokeWidth: number;
-  declare strokeUniform: boolean;
-
-  /**
-   * Object containing this object.
-   * can influence its size and position
-   */
-  declare group?: Group;
-
-  /**
-   * Calculate object bounding box dimensions from its properties scale, skew.
-   * This bounding box is aligned with object angle and not with canvas axis or screen.
-   * @param {Object} [options]
-   * @param {Number} [options.scaleX]
-   * @param {Number} [options.scaleY]
-   * @param {Number} [options.skewX]
-   * @param {Number} [options.skewY]
-   * @private
-   * @returns {Point} dimensions
-   */
-  _getTransformedDimensions(options: any = {}): Point {
-    const dimOptions = {
-      // if scaleX or scaleY are negative numbers,
-      // this will return dimensions that are negative.
-      // and this will break assumptions around the codebase
-      scaleX: this.scaleX,
-      scaleY: this.scaleY,
-      skewX: this.skewX,
-      skewY: this.skewY,
-      width: this.width,
-      height: this.height,
-      strokeWidth: this.strokeWidth,
-      ...options,
-    };
-    // stroke is applied before/after transformations are applied according to `strokeUniform`
-    const strokeWidth = dimOptions.strokeWidth;
-    let preScalingStrokeValue = strokeWidth,
-      postScalingStrokeValue = 0;
-
-    if (this.strokeUniform) {
-      preScalingStrokeValue = 0;
-      postScalingStrokeValue = strokeWidth;
-    }
-    const dimX = dimOptions.width + preScalingStrokeValue,
-      dimY = dimOptions.height + preScalingStrokeValue,
-      noSkew = dimOptions.skewX === 0 && dimOptions.skewY === 0;
-    let finalDimensions;
-    if (noSkew) {
-      finalDimensions = new Point(
-        dimX * dimOptions.scaleX,
-        dimY * dimOptions.scaleY,
-      );
-    } else {
-      finalDimensions = sizeAfterTransform(
-        dimX,
-        dimY,
-        calcDimensionsMatrix(dimOptions),
-      );
-    }
-
-    return finalDimensions.scalarAdd(postScalingStrokeValue);
-  }
-
-  /**
-   * Translates the coordinates from a set of origin to another (based on the object's dimensions)
-   * @param {Point} point The point which corresponds to the originX and originY params
-   * @param {TOriginX} fromOriginX Horizontal origin: 'left', 'center' or 'right'
-   * @param {TOriginY} fromOriginY Vertical origin: 'top', 'center' or 'bottom'
-   * @param {TOriginX} toOriginX Horizontal origin: 'left', 'center' or 'right'
-   * @param {TOriginY} toOriginY Vertical origin: 'top', 'center' or 'bottom'
-   * @return {Point}
-   */
-  translateToGivenOrigin(
-    point: Point,
-    fromOriginX: TOriginX,
-    fromOriginY: TOriginY,
-    toOriginX: TOriginX,
-    toOriginY: TOriginY,
-  ): Point {
-    let x = point.x,
-      y = point.y;
-    const offsetX = resolveOrigin(toOriginX) - resolveOrigin(fromOriginX),
-      offsetY = resolveOrigin(toOriginY) - resolveOrigin(fromOriginY);
-
-    if (offsetX || offsetY) {
-      const dim = this._getTransformedDimensions();
-      x += offsetX * dim.x;
-      y += offsetY * dim.y;
-    }
-
-    return new Point(x, y);
-  }
-
-  /**
-   * Translates the coordinates from origin to center coordinates (based on the object's dimensions)
-   * @param {Point} point The point which corresponds to the originX and originY params
-   * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
-   * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
-   * @return {Point}
-   */
-  translateToCenterPoint(
-    point: Point,
-    originX: TOriginX,
-    originY: TOriginY,
-  ): Point {
-    const p = this.translateToGivenOrigin(
-      point,
-      originX,
-      originY,
-      CENTER,
-      CENTER,
-    );
-    if (this.angle) {
-      return p.rotate(degreesToRadians(this.angle), point);
-    }
-    return p;
-  }
-
-  /**
-   * Translates the coordinates from center to origin coordinates (based on the object's dimensions)
-   * @param {Point} center The point which corresponds to center of the object
-   * @param {OriginX} originX Horizontal origin: 'left', 'center' or 'right'
-   * @param {OriginY} originY Vertical origin: 'top', 'center' or 'bottom'
-   * @return {Point}
-   */
-  translateToOriginPoint(
-    center: Point,
-    originX: TOriginX,
-    originY: TOriginY,
-  ): Point {
-    const p = this.translateToGivenOrigin(
-      center,
-      CENTER,
-      CENTER,
-      originX,
-      originY,
-    );
-    if (this.angle) {
-      return p.rotate(degreesToRadians(this.angle), center);
-    }
-    return p;
-  }
-
-  /**
-   * Returns the center coordinates of the object relative to canvas
-   * @return {Point}
-   */
-  getCenterPoint(): Point {
-    const relCenter = this.getRelativeCenterPoint();
-    return this.group
-      ? transformPoint(relCenter, this.group.calcTransformMatrix())
-      : relCenter;
-  }
-
-  /**
-   * Returns the center coordinates of the object relative to it's parent
-   * @return {Point}
-   */
-  getRelativeCenterPoint(): Point {
-    return this.translateToCenterPoint(
-      new Point(this.left, this.top),
-      this.originX,
-      this.originY,
-    );
-  }
-
-  /**
-   * Returns the coordinates of the object as if it has a different origin
-   * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
-   * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
-   * @return {Point}
-   */
-  getPointByOrigin(originX: TOriginX, originY: TOriginY): Point {
-    return this.translateToOriginPoint(
-      this.getRelativeCenterPoint(),
-      originX,
-      originY,
-    );
-  }
-
-  /**
-   * Sets the position of the object taking into consideration the object's origin
-   * @param {Point} pos The new position of the object
-   * @param {TOriginX} originX Horizontal origin: 'left', 'center' or 'right'
-   * @param {TOriginY} originY Vertical origin: 'top', 'center' or 'bottom'
-   * @return {void}
-   */
-  setPositionByOrigin(pos: Point, originX: TOriginX, originY: TOriginY) {
-    const center = this.translateToCenterPoint(pos, originX, originY),
-      position = this.translateToOriginPoint(
-        center,
-        this.originX,
-        this.originY,
-      );
-    this.set({ left: position.x, top: position.y });
-  }
-
-  /**
-   * @private
-   */
-  _getLeftTopCoords() {
-    return this.translateToOriginPoint(
-      this.getRelativeCenterPoint(),
-      LEFT,
-      TOP,
-    );
-  }
-}
diff --git a/src/shapes/Object/StackedObject.spec.ts b/src/shapes/Object/StackedObject.spec.ts
new file mode 100644
index 000000000..2541bcf58
--- /dev/null
+++ b/src/shapes/Object/StackedObject.spec.ts
@@ -0,0 +1,367 @@
+import { Canvas } from '../../canvas/Canvas';
+import { ActiveSelection } from '../ActiveSelection';
+import { Group } from '../Group';
+import { FabricObject } from './FabricObject';
+
+class TestObject extends FabricObject {
+  id: string;
+
+  constructor({ id }: { id: string }) {
+    super();
+    this.id = id;
+  }
+}
+
+class TestCollection extends Group {
+  id: string;
+
+  constructor({ id }: { id: string }) {
+    super();
+    this.id = id;
+  }
+}
+
+class TestCanvas extends Canvas {
+  id: string;
+
+  constructor({ id }: { id: string }) {
+    super();
+    this.id = id;
+  }
+}
+
+function prepareObjectsForTreeTesting() {
+  return {
+    object: new TestObject({ id: 'object' }),
+    other: new TestObject({ id: 'other' }),
+    a: new TestCollection({ id: 'a' }),
+    b: new TestCollection({ id: 'b' }),
+    c: new TestCollection({ id: 'c' }),
+    canvas: new TestCanvas({ id: 'canvas' }),
+  };
+}
+
+describe('FabricObject stacking', () => {
+  test('isDescendantOf', function () {
+    const canvas = new Canvas();
+    const object = new FabricObject();
+    const parent = new Group([]);
+    expect(typeof object.isDescendantOf === 'function').toBe(true);
+    parent.canvas = canvas;
+    object.parent = parent;
+    expect(object.isDescendantOf(parent)).toBe(true);
+    object.parent = new Group();
+    object.parent.parent = parent;
+    expect(object.isDescendantOf(parent)).toBe(true);
+    object.parent = undefined;
+    expect(object.isDescendantOf(parent) === false).toBe(true);
+    object.canvas = canvas;
+    expect(object.isDescendantOf(object) === false).toBe(true);
+    object.parent = parent;
+    const activeSelection = new ActiveSelection([object], { canvas });
+    expect(object.group).toEqual(activeSelection);
+    expect(object.parent).toEqual(parent);
+    expect(object.canvas).toEqual(canvas);
+    expect(object.isDescendantOf(parent));
+    expect(object.isDescendantOf(activeSelection)).toBe(true);
+    delete object.parent;
+    expect(!object.isDescendantOf(parent));
+    expect(object.isDescendantOf(activeSelection)).toBe(true);
+  });
+
+  test('getAncestors return type', () => {
+    const object = new FabricObject();
+
+    const parents: Group[] = object.getAncestors();
+
+    const isGroup = (a: unknown): a is Group => a instanceof Group;
+
+    const ancestors = object.getAncestors();
+    const parentAncestors: Group[] = ancestors.filter(isGroup);
+
+    expect(parents).toBeDefined();
+    expect(parentAncestors).toBeDefined();
+  });
+
+  test('getAncestors', () => {
+    const canvas = new Canvas();
+    const object = new FabricObject();
+    const parent = new Group([]);
+    const other = new Group();
+
+    expect(object.getAncestors()).toEqual([]);
+    object.parent = parent;
+    expect(object.getAncestors()).toEqual([parent]);
+    expect<Group[]>(object.getAncestors()).toEqual([parent]);
+    parent.canvas = canvas;
+    expect(object.getAncestors()).toEqual([parent]);
+    parent.parent = other;
+    expect(object.getAncestors()).toEqual([parent, other]);
+    other.canvas = canvas;
+    expect(object.getAncestors()).toEqual([parent, other]);
+    delete object.parent;
+    expect(object.getAncestors()).toEqual([]);
+  });
+
+  describe('findCommonAncestors', () => {
+    const getId = (obj: unknown) =>
+      (obj as TestObject | TestCollection | TestCanvas).id;
+
+    function findCommonAncestors(
+      object: TestObject,
+      other: TestObject,
+      expected: ReturnType<typeof FabricObject.prototype.findCommonAncestors>,
+    ) {
+      const common = object.findCommonAncestors(other);
+      expect(common.fork.map(getId)).toEqual(expected.fork.map(getId));
+      expect(common.otherFork.map(getId)).toEqual(
+        expected.otherFork.map(getId),
+      );
+      expect(common.common.map(getId)).toEqual(expected.common.map(getId));
+      const oppositeCommon = other.findCommonAncestors(object);
+      expect(oppositeCommon.fork.map(getId)).toEqual(
+        expected.otherFork.map(getId),
+      );
+      expect(oppositeCommon.otherFork.map(getId)).toEqual(
+        expected.fork.map(getId),
+      );
+      expect(oppositeCommon.common.map(getId)).toEqual(
+        expected.common.map(getId),
+      );
+    }
+    const { object, other, a, b, c, canvas } = prepareObjectsForTreeTesting();
+    it('should be a function', () => {
+      expect(typeof object.findCommonAncestors).toBe('function');
+    });
+    it('_objects should be an array', () => {
+      expect(Array.isArray(a._objects)).toBe(true);
+    });
+    it('_objects should be different', () => {
+      expect(a._objects).not.toBe(b._objects);
+    });
+    // same object
+    findCommonAncestors(object, object, {
+      fork: [],
+      otherFork: [],
+      common: [object],
+    });
+    // foreign objects
+    findCommonAncestors(object, other, {
+      fork: [object],
+      otherFork: [other],
+      common: [],
+    });
+    // same level
+    a.add(object, other);
+    findCommonAncestors(object, other, {
+      fork: [object],
+      otherFork: [other],
+      common: [a],
+    });
+    findCommonAncestors(object, a, {
+      fork: [object],
+      otherFork: [],
+      common: [a],
+    });
+    findCommonAncestors(other, a, {
+      fork: [other],
+      otherFork: [],
+      common: [a],
+    });
+    findCommonAncestors(a, object, {
+      fork: [],
+      otherFork: [object],
+      common: [a],
+    });
+    findCommonAncestors(a, object, {
+      fork: [],
+      otherFork: [object],
+      common: [a],
+    });
+    // different level
+    a.remove(object);
+    b.add(object);
+    a.add(b);
+    findCommonAncestors(object, b, {
+      fork: [object],
+      otherFork: [],
+      common: [b, a],
+    });
+    findCommonAncestors(b, a, { fork: [b], otherFork: [], common: [a] });
+    findCommonAncestors(object, other, {
+      fork: [object, b],
+      otherFork: [other],
+      common: [a],
+    });
+    // with common ancestor
+    expect(c.size()).toBe(0);
+    c.add(a);
+    expect(c.size()).toBe(1);
+    findCommonAncestors(object, b, {
+      fork: [object],
+      otherFork: [],
+      common: [b, a, c],
+    });
+    findCommonAncestors(b, a, {
+      fork: [b],
+      otherFork: [],
+      common: [a, c],
+    });
+    findCommonAncestors(object, other, {
+      fork: [object, b],
+      otherFork: [other],
+      common: [a, c],
+    });
+    findCommonAncestors(object, c, {
+      fork: [object, b, a],
+      otherFork: [],
+      common: [c],
+    });
+    findCommonAncestors(other, c, {
+      fork: [other, a],
+      otherFork: [],
+      common: [c],
+    });
+    findCommonAncestors(b, c, {
+      fork: [b, a],
+      otherFork: [],
+      common: [c],
+    });
+    findCommonAncestors(a, c, { fork: [a], otherFork: [], common: [c] });
+    //  deeper asymmetrical
+    c.removeAll();
+    expect(c.size()).toBe(0);
+    a.remove(other);
+    c.add(other, a);
+    findCommonAncestors(object, b, {
+      fork: [object],
+      otherFork: [],
+      common: [b, a, c],
+    });
+    findCommonAncestors(b, a, {
+      fork: [b],
+      otherFork: [],
+      common: [a, c],
+    });
+    findCommonAncestors(a, other, {
+      fork: [a],
+      otherFork: [other],
+      common: [c],
+    });
+    findCommonAncestors(object, other, {
+      fork: [object, b, a],
+      otherFork: [other],
+      common: [c],
+    });
+    findCommonAncestors(object, c, {
+      fork: [object, b, a],
+      otherFork: [],
+      common: [c],
+    });
+    findCommonAncestors(other, c, {
+      fork: [other],
+      otherFork: [],
+      common: [c],
+    });
+    findCommonAncestors(b, c, {
+      fork: [b, a],
+      otherFork: [],
+      common: [c],
+    });
+    findCommonAncestors(a, c, {
+      fork: [a],
+      otherFork: [],
+      common: [c],
+    });
+    //  with canvas
+    a.removeAll();
+    b.removeAll();
+    c.removeAll();
+    canvas.add(object, other);
+    findCommonAncestors(object, other, {
+      fork: [object],
+      otherFork: [other],
+      common: [],
+    });
+    findCommonAncestors(object, other, {
+      fork: [object],
+      otherFork: [other],
+      common: [],
+    });
+  });
+
+  test('isInFrontOf', () => {
+    const isInFrontOf = (
+      object: FabricObject,
+      other: FabricObject,
+      expected: boolean | undefined,
+    ) => {
+      const actual = object.isInFrontOf(other);
+      expect(actual).toBe(expected);
+      if (actual === expected && typeof expected === 'boolean') {
+        const actual2 = other.isInFrontOf(object);
+        expect(!expected).toBe(actual2);
+      }
+    };
+
+    const { object, other, a, b, c, canvas } = prepareObjectsForTreeTesting();
+    expect(typeof object.isInFrontOf).toBe('function');
+    expect(Array.isArray(a._objects)).toBe(true);
+    expect(a._objects !== b._objects).toBe(true);
+    //  same object
+    isInFrontOf(object, object, undefined);
+    //  foreign objects
+    isInFrontOf(object, other, undefined);
+    //  same level
+    a.add(object, other);
+    isInFrontOf(object, other, false);
+    isInFrontOf(object, a, true);
+    isInFrontOf(other, a, true);
+    // different level
+    a.remove(object);
+    b.add(object);
+    a.add(b);
+    isInFrontOf(object, b, true);
+    isInFrontOf(b, a, true);
+    isInFrontOf(object, other, true);
+    //  with common ancestor
+    expect(c.size()).toBe(0); // 'c should be empty'
+    c.add(a);
+    expect(c.size()).toBe(1); // 'c should contain a'
+    isInFrontOf(object, b, true);
+    isInFrontOf(b, a, true);
+    isInFrontOf(object, other, true);
+    isInFrontOf(object, c, true);
+    isInFrontOf(other, c, true);
+    isInFrontOf(b, c, true);
+    isInFrontOf(a, c, true);
+    //  deeper asymmetrical
+    c.removeAll();
+    expect(c.size()).toBe(0);
+    a.remove(other);
+    c.add(other, a);
+    isInFrontOf(object, b, true);
+    isInFrontOf(b, a, true);
+    isInFrontOf(a, other, true);
+    isInFrontOf(object, other, true);
+    isInFrontOf(object, c, true);
+    isInFrontOf(other, c, true);
+    isInFrontOf(b, c, true);
+    isInFrontOf(a, c, true);
+    // with canvas
+    a.removeAll();
+    b.removeAll();
+    c.removeAll();
+    canvas.add(object, other);
+    isInFrontOf(object, other, false);
+    // parent precedes canvas when checking ancestor
+    a.add(object);
+    expect(other.canvas).toBe(canvas);
+    expect(object.canvas).toBe(undefined); // because a is not on canvas
+    isInFrontOf(object, other, undefined);
+    canvas.insertAt(0, a);
+    isInFrontOf(object, other, false);
+    isInFrontOf(a, other, false);
+    expect(object.canvas).toBe(canvas); // because a is now on a canvas
+  });
+});
diff --git a/src/shapes/Object/StackedObject.ts b/src/shapes/Object/StackedObject.ts
deleted file mode 100644
index e5687d457..000000000
--- a/src/shapes/Object/StackedObject.ts
+++ /dev/null
@@ -1,180 +0,0 @@
-import type { ObjectEvents } from '../../EventTypeDefs';
-import type { Group } from '../Group';
-import type { Canvas } from '../../canvas/Canvas';
-import type { StaticCanvas } from '../../canvas/StaticCanvas';
-import { ObjectGeometry } from './ObjectGeometry';
-
-type TAncestor = StackedObject | Canvas | StaticCanvas;
-type TCollection = Group | Canvas | StaticCanvas;
-
-export type Ancestors =
-  | [StackedObject | Group]
-  | [StackedObject | Group, ...Group[]]
-  | Group[];
-
-export type AncestryComparison = {
-  /**
-   * common ancestors of `this` and`other`(may include`this` | `other`)
-   */
-  common: Ancestors;
-  /**
-   * ancestors that are of `this` only
-   */
-  fork: Ancestors;
-  /**
-   * ancestors that are of `other` only
-   */
-  otherFork: Ancestors;
-};
-
-export class StackedObject<
-  EventSpec extends ObjectEvents = ObjectEvents,
-> extends ObjectGeometry<EventSpec> {
-  /**
-   * A reference to the parent of the object
-   * Used to keep the original parent ref when the object has been added to an ActiveSelection, hence loosing the `group` ref
-   */
-  declare parent?: Group;
-
-  /**
-   * Checks if object is descendant of target
-   * Should be used instead of {@link Group.contains} or {@link StaticCanvas.contains} for performance reasons
-   * @param {TAncestor} target
-   * @returns {boolean}
-   */
-  isDescendantOf(target: TAncestor): boolean {
-    const { parent, group } = this;
-    return (
-      parent === target ||
-      group === target ||
-      this.canvas === target ||
-      // walk up
-      (!!parent && parent.isDescendantOf(target)) ||
-      (!!group && group !== parent && group.isDescendantOf(target))
-    );
-  }
-
-  /**
-   * @returns {Ancestors} ancestors (excluding `ActiveSelection`) from bottom to top
-   */
-  getAncestors(): Ancestors {
-    const ancestors: TAncestor[] = [];
-    // eslint-disable-next-line @typescript-eslint/no-this-alias
-    let parent: TAncestor | undefined = this;
-    do {
-      parent = parent instanceof StackedObject ? parent.parent : undefined;
-      parent && ancestors.push(parent);
-    } while (parent);
-    return ancestors as Ancestors;
-  }
-
-  /**
-   * Compare ancestors
-   *
-   * @param {StackedObject} other
-   * @returns {AncestryComparison} an object that represent the ancestry situation.
-   */
-  findCommonAncestors<T extends this>(other: T): AncestryComparison {
-    if (this === other) {
-      return {
-        fork: [],
-        otherFork: [],
-        common: [this, ...this.getAncestors()],
-      } as AncestryComparison;
-    }
-    const ancestors = this.getAncestors();
-    const otherAncestors = other.getAncestors();
-    //  if `this` has no ancestors and `this` is top ancestor of `other` we must handle the following case
-    if (
-      ancestors.length === 0 &&
-      otherAncestors.length > 0 &&
-      this === otherAncestors[otherAncestors.length - 1]
-    ) {
-      return {
-        fork: [],
-        otherFork: [
-          other,
-          ...otherAncestors.slice(0, otherAncestors.length - 1),
-        ],
-        common: [this],
-      } as AncestryComparison;
-    }
-    //  compare ancestors
-    for (let i = 0, ancestor; i < ancestors.length; i++) {
-      ancestor = ancestors[i];
-      if (ancestor === other) {
-        return {
-          fork: [this, ...ancestors.slice(0, i)],
-          otherFork: [],
-          common: ancestors.slice(i),
-        } as AncestryComparison;
-      }
-      for (let j = 0; j < otherAncestors.length; j++) {
-        if (this === otherAncestors[j]) {
-          return {
-            fork: [],
-            otherFork: [other, ...otherAncestors.slice(0, j)],
-            common: [this, ...ancestors],
-          } as AncestryComparison;
-        }
-        if (ancestor === otherAncestors[j]) {
-          return {
-            fork: [this, ...ancestors.slice(0, i)],
-            otherFork: [other, ...otherAncestors.slice(0, j)],
-            common: ancestors.slice(i),
-          } as AncestryComparison;
-        }
-      }
-    }
-    // nothing shared
-    return {
-      fork: [this, ...ancestors],
-      otherFork: [other, ...otherAncestors],
-      common: [],
-    } as AncestryComparison;
-  }
-
-  /**
-   *
-   * @param {StackedObject} other
-   * @returns {boolean}
-   */
-  hasCommonAncestors<T extends this>(other: T): boolean {
-    const commonAncestors = this.findCommonAncestors(other);
-    return commonAncestors && !!commonAncestors.common.length;
-  }
-
-  /**
-   *
-   * @param {FabricObject} other object to compare against
-   * @returns {boolean | undefined} if objects do not share a common ancestor or they are strictly equal it is impossible to determine which is in front of the other; in such cases the function returns `undefined`
-   */
-  isInFrontOf<T extends this>(other: T): boolean | undefined {
-    if (this === other) {
-      return undefined;
-    }
-    const ancestorData = this.findCommonAncestors(other);
-
-    if (ancestorData.fork.includes(other as any)) {
-      return true;
-    }
-    if (ancestorData.otherFork.includes(this as any)) {
-      return false;
-    }
-    // if there isn't a common ancestor, we take the canvas.
-    // if there is no canvas, there is nothing to compare
-    const firstCommonAncestor = ancestorData.common[0] || this.canvas;
-    if (!firstCommonAncestor) {
-      return undefined;
-    }
-    const headOfFork = ancestorData.fork.pop(),
-      headOfOtherFork = ancestorData.otherFork.pop(),
-      thisIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
-        headOfFork as any,
-      ),
-      otherIndex = (firstCommonAncestor as TCollection)._objects.indexOf(
-        headOfOtherFork as any,
-      );
-    return thisIndex > -1 && thisIndex > otherIndex;
-  }
-}


Test patch:
diff --git a/test/unit/object.js b/test/unit/object.js
index 09ee096bf..cb44035ac 100644
--- a/test/unit/object.js
+++ b/test/unit/object.js
@@ -612,280 +612,6 @@
     assert.ok(removedEventFired);
   });
 
-  QUnit.test('isDescendantOf', function (assert) {
-    const object = new fabric.Object();
-    const parent = new fabric.Group([]);
-    parent._exitGroup = () => { };
-    assert.ok(typeof object.isDescendantOf === 'function');
-    parent.canvas = canvas;
-    object.parent = parent;
-    assert.ok(object.isDescendantOf(parent));
-    object.parent = new fabric.Object();
-    object.parent.parent = parent;
-    assert.ok(object.isDescendantOf(parent));
-    object.parent = undefined;
-    assert.ok(object.isDescendantOf(parent) === false);
-    object.canvas = canvas;
-    assert.ok(object.isDescendantOf(object) === false);
-    object.parent = parent;
-    const activeSelection = new fabric.ActiveSelection([object], { canvas });
-    assert.equal(object.group, activeSelection);
-    assert.equal(object.parent, parent);
-    assert.equal(object.canvas, canvas);
-    assert.ok(object.isDescendantOf(parent), 'should recognize parent');
-    assert.ok(object.isDescendantOf(activeSelection), 'should recognize active selection');
-    delete object.parent;
-    assert.ok(!object.isDescendantOf(parent));
-    assert.ok(object.isDescendantOf(activeSelection), 'should recognize active selection');
-  });
-
-  QUnit.test('getAncestors', function (assert) {
-    var object = new fabric.Object();
-    var parent = new fabric.Object();
-    var other = new fabric.Object();
-    assert.ok(typeof object.getAncestors === 'function');
-    assert.deepEqual(object.getAncestors(), []);
-    object.parent = parent;
-    assert.deepEqual(object.getAncestors(), [parent]);
-    parent.canvas = canvas;
-    assert.deepEqual(object.getAncestors(), [parent]);
-    parent.parent = other;
-    assert.deepEqual(object.getAncestors(), [parent, other]);
-    other.canvas = canvas;
-    assert.deepEqual(object.getAncestors(), [parent, other]);
-    delete object.parent;
-    assert.deepEqual(object.getAncestors(), []);
-  });
-
-  function prepareObjectsForTreeTesting() {
-    class TestObject extends fabric.Object {
-      toJSON() {
-        return {
-          id: this.id,
-          objects: this._objects?.map(o => o.id),
-          parent: this.parent?.id,
-          canvas: this.canvas?.id
-        }
-      }
-      toString() {
-        return JSON.stringify(this.toJSON(), null, '\t');
-      }
-    }
-    class TestCollection extends fabric.createCollectionMixin(TestObject) {
-      constructor({ id }) {
-        super();
-        this.id = id;
-        this._objects = [];
-      }
-      _onObjectAdded(object) {
-        object.group = this;
-        object.parent = this;
-      }
-      _onObjectRemoved(object) {
-        delete object.group;
-        delete object.parent;
-      }
-      removeAll() {
-        this.remove(...this._objects);
-      }
-    }
-    class TestCanvas extends TestCollection {
-      _onObjectAdded (object) {
-        object.canvas = this;
-      }
-      _onObjectRemoved (object) {
-        delete object.canvas;
-      }
-    }
-    return {
-      object: new TestObject({ id: 'object' }),
-      other: new TestObject({ id: 'other' }),
-      a: new TestCollection({ id: 'a' }),
-      b: new TestCollection({ id: 'b' }),
-      c: new TestCollection({ id: 'c' }),
-      canvas: new TestCanvas({ id: 'canvas' })
-    }
-  }
-
-  QUnit.test('findCommonAncestors', function (assert) {
-    function findCommonAncestors(object, other, expected, message) {
-      var common = object.findCommonAncestors(other);
-      assert.deepEqual(
-        common.fork.map((obj) => obj.id),
-        expected.fork.map((obj) => obj.id),
-        message || `fork property should match check between '${object.id}' and '${other.id}'`
-      );
-      assert.deepEqual(
-        common.otherFork.map((obj) => obj.id),
-        expected.otherFork.map((obj) => obj.id),
-        message || `otherFork property should match check between '${object.id}' and '${other.id}'`
-      );
-      assert.deepEqual(
-        common.common.map((obj) => obj.id),
-        expected.common.map((obj) => obj.id),
-        message || `common property should match check between '${object.id}' and '${other.id}'`
-      );
-      var oppositeCommon = other.findCommonAncestors(object);
-      assert.deepEqual(
-        oppositeCommon.fork.map((obj) => obj.id),
-        expected.otherFork.map((obj) => obj.id),
-        message || `fork property should match opposite check between '${other.id}' and '${object.id}'`
-      );
-      assert.deepEqual(
-        oppositeCommon.otherFork.map((obj) => obj.id),
-        expected.fork.map((obj) => obj.id),
-        message || `otherFork property should match opposite check between '${other.id}' and '${object.id}'`
-      );
-      assert.deepEqual(
-        oppositeCommon.common.map((obj) => obj.id),
-        expected.common.map((obj) => obj.id),
-        message || `common property should match opposite check between '${other.id}' and '${object.id}'`
-      );
-    }
-    var { object, other, a, b, c, canvas } = prepareObjectsForTreeTesting();
-    assert.ok(typeof object.findCommonAncestors === 'function');
-    assert.ok(Array.isArray(a._objects));
-    assert.ok(a._objects !== b._objects);
-    //  same object
-    findCommonAncestors(object, object, { fork: [], otherFork: [] , common: [object] });
-    //  foreign objects
-    findCommonAncestors(object, other, { fork: [object], otherFork: [other] , common: [] });
-    //  same level
-    a.add(object, other);
-    findCommonAncestors(object, other, { fork: [object], otherFork: [other], common: [a] });
-    findCommonAncestors(object, a, { fork: [object], otherFork: [], common: [a] });
-    findCommonAncestors(other, a, { fork: [other], otherFork: [], common: [a] });
-    findCommonAncestors(a, object, { fork: [], otherFork: [object], common: [a] });
-    findCommonAncestors(a, object, { fork: [], otherFork: [object], common: [a] }, 'strict option should have no effect when outside canvas');
-    // different level
-    a.remove(object);
-    b.add(object);
-    a.add(b);
-    findCommonAncestors(object, b, { fork: [object], otherFork: [], common: [b, a] });
-    findCommonAncestors(b, a, { fork: [b], otherFork: [], common: [a] });
-    findCommonAncestors(object, other, { fork: [object, b], otherFork: [other], common: [a] });
-    // with common ancestor
-    assert.equal(c.size(), 0, 'c should be empty');
-    c.add(a);
-    assert.equal(c.size(), 1, 'c should contain a');
-    findCommonAncestors(object, b, { fork: [object], otherFork: [], common: [b, a, c] });
-    findCommonAncestors(b, a, { fork: [b], otherFork: [], common: [a, c] });
-    findCommonAncestors(object, other, { fork: [object, b], otherFork: [other], common: [a, c] });
-    findCommonAncestors(object, c, { fork: [object, b, a], otherFork: [], common: [c] });
-    findCommonAncestors(other, c, { fork: [other, a], otherFork: [], common: [c] });
-    findCommonAncestors(b, c, { fork: [b, a], otherFork: [], common: [c] });
-    findCommonAncestors(a, c, { fork: [a], otherFork: [], common: [c] });
-    //  deeper asymmetrical
-    c.removeAll();
-    assert.equal(c.size(), 0, 'c should be cleared');
-    a.remove(other);
-    c.add(other, a);
-    findCommonAncestors(object, b, { fork: [object], otherFork: [], common: [b, a, c] });
-    findCommonAncestors(b, a, { fork: [b], otherFork: [], common: [a, c] });
-    findCommonAncestors(a, other, { fork: [a], otherFork: [other], common: [c] });
-    findCommonAncestors(object, other, { fork: [object, b, a], otherFork: [other], common: [c] });
-    findCommonAncestors(object, c, { fork: [object, b, a], otherFork: [], common: [c] });
-    findCommonAncestors(other, c, { fork: [other], otherFork: [], common: [c] });
-    findCommonAncestors(b, c, { fork: [b, a], otherFork: [], common: [c] });
-    findCommonAncestors(a, c, { fork: [a], otherFork: [], common: [c] });
-    //  with canvas
-    a.removeAll();
-    b.removeAll();
-    c.removeAll();
-    canvas.add(object, other);
-    findCommonAncestors(object, other, { fork: [object], otherFork: [other], common: [] });
-    findCommonAncestors(object, other, { fork: [object], otherFork: [other], common: [] });
-    //  parent precedes canvas when checking ancestor
-    a.add(object);
-    assert.ok(object.canvas === canvas, 'object should have canvas set');
-    findCommonAncestors(object, other, { fork: [object, a], otherFork: [other], common: [] });
-    findCommonAncestors(object, other, { fork: [object, a], otherFork: [other], common: [] });
-    canvas.insertAt(0, a);
-    findCommonAncestors(object, other, { fork: [object, a], otherFork: [other], common: [] });
-    findCommonAncestors(object, other, { fork: [object, a], otherFork: [other], common: [] });
-    findCommonAncestors(a, other, { fork: [a], otherFork: [other], common: [] });
-  });
-
-  QUnit.assert.isInFrontOf = function (object, other, expected) {
-    var actual = object.isInFrontOf(other);
-    this.pushResult({
-      expected: expected,
-      actual: actual,
-      result: actual === expected,
-      message: `'${expected ? object.id : other.id}' should be in front of '${expected ? other.id : object.id}'`
-    });
-    if (actual === expected && typeof expected === 'boolean') {
-      var actual2 = other.isInFrontOf(object);
-      this.pushResult({
-        expected: !expected,
-        actual: actual2,
-        result: actual2 === !expected,
-        message: `should match opposite check between '${object.id}' and '${other.id}'`
-      });
-    }
-  };
-
-  QUnit.test('isInFrontOf', function (assert) {
-    var { object, other, a, b, c, canvas } = prepareObjectsForTreeTesting();
-    assert.ok(typeof object.isInFrontOf === 'function');
-    assert.ok(Array.isArray(a._objects));
-    assert.ok(a._objects !== b._objects);
-    //  same object
-    assert.isInFrontOf(object, object, undefined);
-    //  foreign objects
-    assert.isInFrontOf(object, other, undefined);
-    //  same level
-    a.add(object, other);
-    assert.isInFrontOf(object, other, false);
-    assert.isInFrontOf(object, a, true);
-    assert.isInFrontOf(other, a, true);
-    // different level
-    a.remove(object);
-    b.add(object);
-    a.add(b);
-    assert.isInFrontOf(object, b, true);
-    assert.isInFrontOf(b, a, true);
-    assert.isInFrontOf(object, other, true);
-    //  with common ancestor
-    assert.equal(c.size(), 0, 'c should be empty');
-    c.add(a);
-    assert.equal(c.size(), 1, 'c should contain a');
-    assert.isInFrontOf(object, b, true);
-    assert.isInFrontOf(b, a, true);
-    assert.isInFrontOf(object, other, true);
-    assert.isInFrontOf(object, c, true);
-    assert.isInFrontOf(other, c, true);
-    assert.isInFrontOf(b, c, true);
-    assert.isInFrontOf(a, c, true);
-    //  deeper asymmetrical
-    c.removeAll();
-    assert.equal(c.size(), 0, 'c should be cleared');
-    a.remove(other);
-    c.add(other, a);
-    assert.isInFrontOf(object, b, true);
-    assert.isInFrontOf(b, a, true);
-    assert.isInFrontOf(a, other, true);
-    assert.isInFrontOf(object, other, true);
-    assert.isInFrontOf(object, c, true);
-    assert.isInFrontOf(other, c, true);
-    assert.isInFrontOf(b, c, true);
-    assert.isInFrontOf(a, c, true);
-    //  with canvas
-    a.removeAll();
-    b.removeAll();
-    c.removeAll();
-    canvas.add(object, other);
-    assert.isInFrontOf(object, other, false);
-    //  parent precedes canvas when checking ancestor
-    a.add(object);
-    assert.ok(object.canvas === canvas, 'object should have canvas set');
-    assert.ok(other.canvas === canvas, 'object should have canvas set');
-    assert.isInFrontOf(object, other, false);
-    canvas.insertAt(0, a);
-    assert.isInFrontOf(object, other, false);
-    assert.isInFrontOf(a, other, false);
-  });
-
   QUnit.test('getTotalObjectScaling with zoom', function(assert) {
     var object = new fabric.Object({ scaleX: 3, scaleY: 2});
     canvas.setZoom(3);