Repository: fabricjs/fabric.js
Pull request #9627 (2024-01-23 00:15:11)

refactor(): Align gradient with class registry usage, part of #9144

## Description

This PR contains some of the parts relative to the gradient changes proposed in #9144


## In Action

<!-- Add screenshots or recordings if necessary or requested -->
<!-- Are you proposing a performance change? show a some proof of performance -->


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

Open the branch in <a href="https://codesandbox.io/p/github/fabricjs/fabric.js/registry-fixes-gradient?mode=review&utm_source=gh_app">Web Editor</a> &bull; <a href="https://codesandbox.io/p/vscode?owner=fabricjs&repo=fabric.js&branch=registry-fixes-gradient&utm_source=gh_app">VS Code</a> &bull; <a href="https://codesandbox.io/p/vscode?owner=fabricjs&repo=fabric.js&branch=registry-fixes-gradient&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/registry-fixes-gradient?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/registry-fixes-gradient?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/registry-fixes-gradient?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/registry-fixes-gradient?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 | 907.342 (**+0.044**) | 304.493 (**+0.043**) | 

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

Patch:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6ec75d623..6062015c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,7 @@
 
 ## [next]
 
+- refactor(): Align gradient with class registry usage, part of #9144 [#9627](https://github.com/fabricjs/fabric.js/pull/9627)
 - refactor(): Align shadow with class registry, part of #9144 [#9626](https://github.com/fabricjs/fabric.js/pull/9626)
 - cd() Surface the minified build as standard when importing. [#9624](https://github.com/fabricjs/fabric.js/pull/9624)
 - chore(): removed unused code from Path render function [#9619](https://github.com/fabricjs/fabric.js/pull/9619)
diff --git a/src/gradient/Gradient.spec.ts b/src/gradient/Gradient.spec.ts
new file mode 100644
index 000000000..ac0534182
--- /dev/null
+++ b/src/gradient/Gradient.spec.ts
@@ -0,0 +1,570 @@
+import { expect } from '@jest/globals';
+import { getFabricDocument } from '../env';
+import { FabricObject } from '../shapes/Object/FabricObject';
+import { Gradient } from './Gradient';
+import type { SVGOptions } from './typedefs';
+import { classRegistry } from '../ClassRegistry';
+
+describe('Gradient', () => {
+  function fromElement(
+    gradientDef: SVGGradientElement,
+    obj: FabricObject,
+    options: Partial<SVGOptions> = {}
+  ) {
+    return Gradient.fromElement(gradientDef, obj, {
+      width: 0,
+      height: 0,
+      viewBoxHeight: 0,
+      viewBoxWidth: 0,
+      opacity: 1,
+      ...options,
+    } as SVGOptions);
+  }
+
+  it('registered in class registry', () => {
+    expect(classRegistry.getClass('gradient')).toEqual(Gradient);
+    expect(classRegistry.getClass('linear')).toEqual(Gradient);
+    expect(classRegistry.getClass('radial')).toEqual(Gradient);
+  });
+
+  test('fromElement linearGradient', () => {
+    expect(typeof Gradient.fromElement === 'function').toBeTruthy();
+
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'linearGradient'
+    );
+    const stop1 = getFabricDocument().createElement('stop');
+    const stop2 = getFabricDocument().createElement('stop');
+
+    stop1.setAttributeNS(namespace, 'offset', '0%');
+    stop1.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop2.setAttributeNS(namespace, 'offset', '100%');
+    stop2.setAttributeNS(namespace, 'stop-color', 'black');
+    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
+
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+
+    const object = new FabricObject({ width: 100, height: 100 });
+    const gradient = fromElement(element, object, { opacity: '' });
+
+    expect(gradient instanceof Gradient).toBeTruthy();
+    expect(gradient.type).toEqual('linear');
+    expect(gradient.coords.x1).toEqual(0);
+    expect(gradient.coords.y1).toEqual(0);
+    expect(gradient.coords.x2).toEqual(1);
+    expect(gradient.coords.y2).toEqual(0);
+    expect(gradient.gradientUnits).toEqual('percentage');
+
+    expect(gradient.colorStops[0].offset).toEqual(1);
+    expect(gradient.colorStops[1].offset).toEqual(0);
+
+    expect(gradient.colorStops[0].color).toEqual('rgb(0,0,0)');
+    expect(gradient.colorStops[1].color).toEqual('rgb(255,255,255)');
+
+    expect(gradient.colorStops[0].opacity).toEqual(0);
+  });
+
+  test('fromElement linearGradient with floats percentage - objectBoundingBox', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'linearGradient'
+    );
+    element.setAttributeNS(namespace, 'gradientUnits', 'objectBoundingBox');
+    element.setAttributeNS(namespace, 'x1', '10%');
+    element.setAttributeNS(namespace, 'y1', '0.2%');
+    element.setAttributeNS(namespace, 'x2', '200');
+    element.setAttributeNS(namespace, 'y2', '20%');
+    const stop1 = getFabricDocument().createElement('stop');
+    const stop2 = getFabricDocument().createElement('stop');
+
+    stop1.setAttributeNS(namespace, 'offset', '0%');
+    stop1.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop2.setAttributeNS(namespace, 'offset', '100%');
+    stop2.setAttributeNS(namespace, 'stop-color', 'black');
+    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
+
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+
+    const object = new FabricObject({ width: 200, height: 200 });
+    const gradient = fromElement(element, object, { opacity: '' });
+
+    expect(gradient instanceof Gradient).toBeTruthy();
+
+    expect(gradient.coords.x1).toEqual(0.1);
+    expect(gradient.coords.y1).toEqual(0.002);
+    expect(gradient.coords.x2).toEqual(200);
+    expect(gradient.coords.y2).toEqual(0.2);
+    expect(gradient.gradientUnits).toEqual('percentage');
+  });
+
+  test('fromElement linearGradient with floats percentage - userSpaceOnUse', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'linearGradient'
+    );
+    element.setAttributeNS(namespace, 'gradientUnits', 'userSpaceOnUse');
+    element.setAttributeNS(namespace, 'x1', '10%');
+    element.setAttributeNS(namespace, 'y1', '0.2%');
+    element.setAttributeNS(namespace, 'x2', '200');
+    element.setAttributeNS(namespace, 'y2', '20%');
+    const stop1 = getFabricDocument().createElement('stop');
+    const stop2 = getFabricDocument().createElement('stop');
+
+    stop1.setAttributeNS(namespace, 'offset', '0%');
+    stop1.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop2.setAttributeNS(namespace, 'offset', '100%');
+    stop2.setAttributeNS(namespace, 'stop-color', 'black');
+    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
+
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+
+    const object = new FabricObject({
+      left: 10,
+      top: 15,
+      width: 200,
+      height: 200,
+    });
+    const gradient = fromElement(element, object, {
+      opacity: '',
+      viewBoxWidth: 400,
+      viewBoxHeight: 300,
+    });
+
+    expect(gradient instanceof Gradient).toBeTruthy();
+    expect(gradient.gradientUnits).toEqual('pixels');
+    expect(gradient.offsetX).toEqual(-10);
+    expect(gradient.offsetY).toEqual(-15);
+    expect(gradient.coords.x1).toEqual(40);
+    expect(gradient.coords.y1).toEqual(0.6);
+    expect(gradient.coords.x2).toEqual(200);
+    expect(gradient.coords.y2).toEqual(60);
+  });
+
+  test('fromElement linearGradient with Infinity', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'linearGradient'
+    );
+    const stop1 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop2 = getFabricDocument().createElementNS(namespace, 'stop');
+
+    stop1.setAttributeNS(namespace, 'offset', '0%');
+    stop1.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop2.setAttributeNS(namespace, 'offset', '100%');
+    stop2.setAttributeNS(namespace, 'stop-color', 'black');
+    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
+
+    element.setAttributeNS(namespace, 'x1', '-Infinity');
+    element.setAttributeNS(namespace, 'x2', 'Infinity');
+    element.setAttributeNS(namespace, 'y1', 'Infinity');
+    element.setAttributeNS(namespace, 'y2', '-Infinity');
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+
+    const object = new FabricObject({
+      width: 100,
+      height: 300,
+      top: 20,
+      left: 30,
+    });
+    const gradient = fromElement(element, object, { opacity: '' });
+
+    expect(gradient instanceof Gradient).toBeTruthy();
+
+    expect(gradient.coords.x1).toEqual(0);
+    expect(gradient.coords.y1).toEqual(1);
+    expect(gradient.coords.x2).toEqual(1);
+    expect(gradient.coords.y2).toEqual(0);
+
+    expect(gradient.colorStops[0].offset).toEqual(1);
+    expect(gradient.colorStops[1].offset).toEqual(0);
+
+    expect(gradient.colorStops[0].color).toEqual('rgb(0,0,0)');
+    expect(gradient.colorStops[1].color).toEqual('rgb(255,255,255)');
+
+    expect(gradient.colorStops[0].opacity).toEqual(0);
+  });
+
+  test('fromElement without stop', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'linearGradient'
+    );
+    const stop1 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop2 = getFabricDocument().createElementNS(namespace, 'stop');
+
+    stop1.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop2.setAttributeNS(namespace, 'offset', '100%');
+    stop2.setAttributeNS(namespace, 'stop-color', 'black');
+    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
+
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+
+    const object = new FabricObject({ width: 100, height: 100 });
+    const gradient = fromElement(element, object, { opacity: '' });
+
+    expect(gradient instanceof Gradient).toBeTruthy();
+
+    expect(gradient.colorStops[0].offset).toEqual(1);
+    expect(gradient.colorStops[1].offset).toEqual(0);
+  });
+
+  describe('fromElement with x1,x2,y1,2 linear', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'linearGradient'
+    );
+
+    element.setAttributeNS(namespace, 'x1', '30%');
+    element.setAttributeNS(namespace, 'x2', '20%');
+    element.setAttributeNS(namespace, 'y1', '0.1');
+    element.setAttributeNS(namespace, 'y2', 'Infinity');
+
+    const object = new FabricObject({ width: 200, height: 200 });
+    const gradient = fromElement(element, object, { opacity: '' });
+    expect(gradient.coords.x1).toEqual(0.3);
+    expect(gradient.coords.y1).toEqual(0.1);
+    expect(gradient.coords.x2).toEqual(0.2);
+    expect(gradient.coords.y2).toEqual(1);
+
+    it('top and left do not change the output', () => {
+      const object = new FabricObject({
+        width: 200,
+        height: 200,
+        top: 50,
+        left: 10,
+      });
+      const gradient = fromElement(element, object, { opacity: '' });
+      expect(gradient.coords.x1).toEqual(0.3);
+      expect(gradient.coords.y1).toEqual(0.1);
+      expect(gradient.coords.x2).toEqual(0.2);
+      expect(gradient.coords.y2).toEqual(1);
+    });
+  });
+
+  describe('fromElement with x1,x2,y1,2 radial', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'radialGradient'
+    );
+
+    element.setAttributeNS(namespace, 'fx', '30%');
+    element.setAttributeNS(namespace, 'fy', '20%');
+    element.setAttributeNS(namespace, 'cx', '0.1');
+    element.setAttributeNS(namespace, 'cy', '1');
+    element.setAttributeNS(namespace, 'r', '100%');
+
+    let object = new FabricObject({ width: 200, height: 200 });
+    let gradient = fromElement(element, object, { opacity: '' });
+    it('should not change with width height', () => {
+      expect(gradient.coords.x1).toEqual(0.3);
+      expect(gradient.coords.y1).toEqual(0.2);
+      expect(gradient.coords.x2).toEqual(0.1);
+      expect(gradient.coords.y2).toEqual(1);
+      expect(gradient.coords.r1).toEqual(0);
+      expect(gradient.coords.r2).toEqual(1);
+    });
+
+    it('should not change with top left', () => {
+      object = new FabricObject({ width: 200, height: 200, top: 10, left: 10 });
+      gradient = fromElement(element, object, { opacity: '' });
+      expect(gradient.coords.x1).toEqual(0.3);
+      expect(gradient.coords.y1).toEqual(0.2);
+      expect(gradient.coords.x2).toEqual(0.1);
+      expect(gradient.coords.y2).toEqual(1);
+      expect(gradient.coords.r1).toEqual(0);
+      expect(gradient.coords.r2).toEqual(1);
+    });
+  });
+
+  describe('fromElement with x1,x2,y1,2 radial userSpaceOnUse', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'radialGradient'
+    );
+
+    element.setAttributeNS(namespace, 'fx', '30');
+    element.setAttributeNS(namespace, 'fy', '20');
+    element.setAttributeNS(namespace, 'cx', '15');
+    element.setAttributeNS(namespace, 'cy', '18');
+    element.setAttributeNS(namespace, 'r', '100');
+    element.setAttributeNS(namespace, 'gradientUnits', 'userSpaceOnUse');
+
+    it('should not change with width height', () => {
+      const object = new FabricObject({ width: 200, height: 200 });
+      const gradient = fromElement(element, object, { opacity: '' });
+      expect(gradient.coords.x1).toEqual(30);
+      expect(gradient.coords.y1).toEqual(20);
+      expect(gradient.coords.x2).toEqual(15);
+      expect(gradient.coords.y2).toEqual(18);
+      expect(gradient.coords.r1).toEqual(0);
+      expect(gradient.coords.r2).toEqual(100);
+    });
+
+    it('should not change with top left', () => {
+      const object = new FabricObject({
+        width: 200,
+        height: 200,
+        top: 50,
+        left: 60,
+      });
+      const gradient = fromElement(element, object, { opacity: '' });
+      expect(gradient.coords.x1).toEqual(30);
+      expect(gradient.coords.y1).toEqual(20);
+      expect(gradient.coords.x2).toEqual(15);
+      expect(gradient.coords.y2).toEqual(18);
+      expect(gradient.coords.r1).toEqual(0);
+      expect(gradient.coords.r2).toEqual(100);
+    });
+  });
+
+  describe('fromElement with x1,x2,y1,2 linear userSpaceOnUse', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'linearGradient'
+    );
+
+    element.setAttributeNS(namespace, 'x1', '30');
+    element.setAttributeNS(namespace, 'y1', '20');
+    element.setAttributeNS(namespace, 'x2', '15');
+    element.setAttributeNS(namespace, 'y2', '18');
+    element.setAttributeNS(namespace, 'gradientUnits', 'userSpaceOnUse');
+
+    it('should not change with width height', () => {
+      const object = new FabricObject({ width: 200, height: 200 });
+      const gradient = fromElement(element, object, { opacity: '' });
+      expect(gradient.coords.x1).toEqual(30);
+      expect(gradient.coords.y1).toEqual(20);
+      expect(gradient.coords.x2).toEqual(15);
+      expect(gradient.coords.y2).toEqual(18);
+    });
+
+    it('should not change with top left', () => {
+      const object = new FabricObject({
+        width: 200,
+        height: 200,
+        top: 40,
+        left: 40,
+      });
+      const gradient = fromElement(element, object, { opacity: '' });
+      expect(gradient.coords.x1).toEqual(30);
+      expect(gradient.coords.y1).toEqual(20);
+      expect(gradient.coords.x2).toEqual(15);
+      expect(gradient.coords.y2).toEqual(18);
+    });
+  });
+
+  test('fromElement radialGradient defaults', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'radialGradient'
+    );
+    const stop1 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop2 = getFabricDocument().createElementNS(namespace, 'stop');
+
+    stop1.setAttributeNS(namespace, 'offset', '0%');
+    stop1.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop2.setAttributeNS(namespace, 'offset', '100%');
+    stop2.setAttributeNS(namespace, 'stop-color', 'black');
+
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+
+    const object = new FabricObject({ width: 100, height: 100 });
+    const gradient = fromElement(element, object, {});
+
+    expect(gradient instanceof Gradient).toBeTruthy();
+
+    expect(gradient.coords.x1).toEqual(0.5);
+    expect(gradient.coords.y1).toEqual(0.5);
+    expect(gradient.coords.x2).toEqual(0.5);
+    expect(gradient.coords.y2).toEqual(0.5);
+    expect(gradient.coords.r1).toEqual(0);
+    expect(gradient.coords.r2).toEqual(0.5);
+
+    expect(gradient.colorStops[0].offset).toEqual(1);
+    expect(gradient.colorStops[1].offset).toEqual(0);
+
+    expect(gradient.colorStops[0].color).toEqual('rgb(0,0,0)');
+    expect(gradient.colorStops[1].color).toEqual('rgb(255,255,255)');
+  });
+
+  test('fromElement radialGradient with transform', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'radialGradient'
+    );
+    const stop1 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop2 = getFabricDocument().createElementNS(namespace, 'stop');
+
+    stop1.setAttributeNS(namespace, 'offset', '0%');
+    stop1.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop2.setAttributeNS(namespace, 'offset', '100%');
+    stop2.setAttributeNS(namespace, 'stop-color', 'black');
+
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+    element.setAttributeNS(
+      namespace,
+      'gradientTransform',
+      'matrix(3.321 -0.6998 0.4077 1.9347 -440.9168 -408.0598)'
+    );
+    const object = new FabricObject({ width: 100, height: 100 });
+    const gradient = fromElement(element, object, {});
+    expect(gradient.gradientTransform).toEqual([
+      3.321, -0.6998, 0.4077, 1.9347, -440.9168, -408.0598,
+    ]);
+  });
+
+  test('fromElement linearGradient colorStop attributes/styles', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'linearGradient'
+    );
+    const stop1 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop2 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop3 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop4 = getFabricDocument().createElementNS(namespace, 'stop');
+
+    stop1.setAttributeNS(namespace, 'offset', '0%');
+    stop1.setAttributeNS(namespace, 'stop-color', '');
+    stop1.setAttributeNS(namespace, 'stop-opacity', '');
+
+    stop2.setAttributeNS(namespace, 'offset', '0.5');
+    stop2.setAttributeNS(
+      namespace,
+      'style',
+      'stop-color: black; stop-opacity:;'
+    );
+    stop2.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop3.setAttributeNS(namespace, 'offset', '75%');
+    stop3.setAttributeNS(namespace, 'style', 'stop-color:; stop-opacity:;');
+    stop3.setAttributeNS(namespace, 'stop-opacity', '0.9');
+    stop3.setAttributeNS(namespace, 'stop-color', 'blue');
+
+    stop4.setAttributeNS(namespace, 'offset', '100%');
+    stop4.setAttributeNS(
+      namespace,
+      'style',
+      'stop-color: red; stop-opacity: 0.5;'
+    );
+    stop4.setAttributeNS(namespace, 'stop-opacity', '0.9');
+
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+    element.appendChild(stop3);
+    element.appendChild(stop4);
+
+    const object = new FabricObject({ width: 100, height: 100 });
+    const gradient = fromElement(element, object, { opacity: '' });
+
+    expect(gradient instanceof Gradient).toBeTruthy();
+
+    expect(gradient.coords.x1).toEqual(0);
+    expect(gradient.coords.y1).toEqual(0);
+    expect(gradient.coords.x2).toEqual(1);
+    expect(gradient.coords.y2).toEqual(0);
+
+    expect(gradient.colorStops[0].offset).toEqual(1);
+    expect(gradient.colorStops[1].offset).toEqual(0.75);
+    expect(gradient.colorStops[2].offset).toEqual(0.5);
+    expect(gradient.colorStops[3].offset).toEqual(0);
+
+    expect(gradient.colorStops[0].color).toEqual('rgb(255,0,0)');
+    expect(gradient.colorStops[1].color).toEqual('rgb(0,0,255)');
+    expect(gradient.colorStops[2].color).toEqual('rgb(0,0,0)');
+    expect(gradient.colorStops[3].color).toEqual('rgb(0,0,0)');
+
+    expect(gradient.colorStops[0].opacity).toEqual(0.5);
+    expect(gradient.colorStops[1].opacity).toEqual(0.9);
+    expect(gradient.colorStops[2].opacity).toEqual(1);
+    expect(gradient.colorStops[3].opacity).toEqual(1);
+  });
+
+  test('fromElement radialGradient colorStop attributes/styles', () => {
+    const namespace = 'http://www.w3.org/2000/svg';
+    const element = getFabricDocument().createElementNS(
+      namespace,
+      'radialGradient'
+    );
+    const stop1 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop2 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop3 = getFabricDocument().createElementNS(namespace, 'stop');
+    const stop4 = getFabricDocument().createElementNS(namespace, 'stop');
+
+    stop1.setAttributeNS(namespace, 'offset', '0%');
+    stop1.setAttributeNS(namespace, 'stop-color', '');
+    stop1.setAttributeNS(namespace, 'stop-opacity', '');
+
+    stop2.setAttributeNS(namespace, 'offset', '0.5');
+    stop2.setAttributeNS(
+      namespace,
+      'style',
+      'stop-color: black; stop-opacity:;'
+    );
+    stop2.setAttributeNS(namespace, 'stop-color', 'white');
+
+    stop3.setAttributeNS(namespace, 'offset', '75%');
+    stop3.setAttributeNS(namespace, 'style', 'stop-color:; stop-opacity:;');
+    stop3.setAttributeNS(namespace, 'stop-opacity', '0.9');
+    stop3.setAttributeNS(namespace, 'stop-color', 'blue');
+
+    stop4.setAttributeNS(namespace, 'offset', '100%');
+    stop4.setAttributeNS(
+      namespace,
+      'style',
+      'stop-color: red; stop-opacity: 0.5;'
+    );
+    stop4.setAttributeNS(namespace, 'stop-opacity', '0.9');
+
+    element.appendChild(stop1);
+    element.appendChild(stop2);
+    element.appendChild(stop3);
+    element.appendChild(stop4);
+
+    const object = new FabricObject({ width: 100, height: 100 });
+    const gradient = fromElement(element, object, { opacity: '' });
+
+    expect(gradient instanceof Gradient).toBeTruthy();
+
+    expect(gradient.colorStops[0].offset).toEqual(1);
+    expect(gradient.colorStops[1].offset).toEqual(0.75);
+    expect(gradient.colorStops[2].offset).toEqual(0.5);
+    expect(gradient.colorStops[3].offset).toEqual(0);
+
+    expect(gradient.colorStops[0].color).toEqual('rgb(255,0,0)');
+    expect(gradient.colorStops[1].color).toEqual('rgb(0,0,255)');
+    expect(gradient.colorStops[2].color).toEqual('rgb(0,0,0)');
+    expect(gradient.colorStops[3].color).toEqual('rgb(0,0,0)');
+
+    expect(gradient.colorStops[0].opacity).toEqual(0.5);
+    expect(gradient.colorStops[1].opacity).toEqual(0.9);
+    expect(gradient.colorStops[2].opacity).toEqual(1);
+    expect(gradient.colorStops[3].opacity).toEqual(1);
+  });
+});
diff --git a/src/gradient/Gradient.ts b/src/gradient/Gradient.ts
index d7b01a34a..5d650ba42 100644
--- a/src/gradient/Gradient.ts
+++ b/src/gradient/Gradient.ts
@@ -321,6 +321,18 @@ export class Gradient<
     return gradient;
   }
 
+  static async fromObject(
+    options: GradientOptions<'linear'>
+  ): Promise<Gradient<'radial'>>;
+  static async fromObject(
+    options: GradientOptions<'radial'>
+  ): Promise<Gradient<'radial'>>;
+  static async fromObject(
+    options: GradientOptions<'linear'> | GradientOptions<'radial'>
+  ) {
+    return new this(options);
+  }
+
   /* _FROM_SVG_START_ */
   /**
    * Returns {@link Gradient} instance from an SVG element
@@ -400,3 +412,5 @@ export class Gradient<
 }
 
 classRegistry.setClass(Gradient, 'gradient');
+classRegistry.setClass(Gradient, 'linear');
+classRegistry.setClass(Gradient, 'radial');
diff --git a/src/util/misc/objectEnlive.ts b/src/util/misc/objectEnlive.ts
index 7439905b9..788b224a2 100644
--- a/src/util/misc/objectEnlive.ts
+++ b/src/util/misc/objectEnlive.ts
@@ -12,7 +12,6 @@ import { classRegistry } from '../../ClassRegistry';
 import type { BaseFilter } from '../../filters/BaseFilter';
 import type { FabricObject as BaseFabricObject } from '../../shapes/Object/Object';
 import { FabricError, SignalAbortedError } from '../internals/console';
-import type { Gradient } from '../../gradient';
 import type { Shadow } from '../../Shadow';
 
 export type LoadImageOptions = Abortable & {
@@ -68,7 +67,9 @@ export type EnlivenObjectOptions = Abortable & {
    * Method for further parsing of object elements,
    * called after each fabric object created.
    */
-  reviver?: <T extends BaseFabricObject | FabricObject | BaseFilter | Shadow>(
+  reviver?: <
+    T extends BaseFabricObject | FabricObject | BaseFilter | Shadow | TFiller
+  >(
     serializedObj: Record<string, any>,
     instance: T
   ) => void;
@@ -84,7 +85,7 @@ export type EnlivenObjectOptions = Abortable & {
  * @returns {Promise<FabricObject[]>}
  */
 export const enlivenObjects = <
-  T extends BaseFabricObject | FabricObject | BaseFilter | Shadow
+  T extends BaseFabricObject | FabricObject | BaseFilter | Shadow | TFiller
 >(
   objects: any[],
   { signal, reviver = noop }: EnlivenObjectOptions = {}
@@ -143,18 +144,14 @@ export const enlivenObjectEnlivables = <
       if (!value) {
         return value;
       }
-      // gradient
-      if (value.colorStops) {
-        return new (classRegistry.getClass<typeof Gradient>('gradient'))(value);
-      }
-      // clipPath or shadow
+      // clipPath or shadow or gradient
       if (value.type) {
-        return enlivenObjects<FabricObject | Shadow>([value], { signal }).then(
-          ([enlived]) => {
-            instances.push(enlived);
-            return enlived;
-          }
-        );
+        return enlivenObjects<FabricObject | Shadow | TFiller>([value], {
+          signal,
+        }).then(([enlived]) => {
+          instances.push(enlived);
+          return enlived;
+        });
       }
       // pattern
       if (value.source) {


Test patch:
diff --git a/test/unit/gradient.js b/test/unit/gradient.js
index 9ce18b116..e50831454 100644
--- a/test/unit/gradient.js
+++ b/test/unit/gradient.js
@@ -196,470 +196,6 @@
     assert.equal(gradientCtx.toString(), gradientHTML.toString(), 'is a gradient for canvas radial');
   });
 
-  QUnit.test('fromElement linearGradient', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'linearGradient');
-    var stop1 = fabric.getFabricDocument().createElement('stop');
-    var stop2 = fabric.getFabricDocument().createElement('stop');
-
-    stop1.setAttributeNS(namespace, 'offset', '0%');
-    stop1.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop2.setAttributeNS(namespace, 'offset', '100%');
-    stop2.setAttributeNS(namespace, 'stop-color', 'black');
-    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
-
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-
-    var object = new fabric.Object({ width: 100, height: 100 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-
-    assert.ok(gradient instanceof fabric.Gradient);
-    assert.equal(gradient.type, 'linear');
-    assert.equal(gradient.coords.x1, 0);
-    assert.equal(gradient.coords.y1, 0);
-    assert.equal(gradient.coords.x2, 1);
-    assert.equal(gradient.coords.y2, 0);
-    assert.equal(gradient.gradientUnits, 'percentage');
-
-    assert.equal(gradient.colorStops[0].offset, 1);
-    assert.equal(gradient.colorStops[1].offset, 0);
-
-    assert.equal(gradient.colorStops[0].color, 'rgb(0,0,0)');
-    assert.equal(gradient.colorStops[1].color, 'rgb(255,255,255)');
-
-    assert.equal(gradient.colorStops[0].opacity, 0);
-  });
-
-  QUnit.test('fromElement linearGradient with floats percentage - objectBoundingBox', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'linearGradient');
-    element.setAttributeNS(namespace, 'gradientUnits', 'objectBoundingBox');
-    element.setAttributeNS(namespace, 'x1', '10%');
-    element.setAttributeNS(namespace, 'y1', '0.2%');
-    element.setAttributeNS(namespace, 'x2', '200');
-    element.setAttributeNS(namespace, 'y2', '20%');
-    var stop1 = fabric.getFabricDocument().createElement('stop');
-    var stop2 = fabric.getFabricDocument().createElement('stop');
-
-    stop1.setAttributeNS(namespace, 'offset', '0%');
-    stop1.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop2.setAttributeNS(namespace, 'offset', '100%');
-    stop2.setAttributeNS(namespace, 'stop-color', 'black');
-    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
-
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-
-    var object = new fabric.Object({ width: 200, height: 200 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-
-    assert.ok(gradient instanceof fabric.Gradient);
-
-    assert.equal(gradient.coords.x1, 0.1);
-    assert.equal(gradient.coords.y1, 0.002);
-    assert.equal(gradient.coords.x2, 200);
-    assert.equal(gradient.coords.y2, 0.2);
-    assert.equal(gradient.gradientUnits, 'percentage');
-  });
-
-  QUnit.test('fromElement linearGradient with floats percentage - userSpaceOnUse', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'linearGradient');
-    element.setAttributeNS(namespace, 'gradientUnits', 'userSpaceOnUse');
-    element.setAttributeNS(namespace, 'x1', '10%');
-    element.setAttributeNS(namespace, 'y1', '0.2%');
-    element.setAttributeNS(namespace, 'x2', '200');
-    element.setAttributeNS(namespace, 'y2', '20%');
-    var stop1 = fabric.getFabricDocument().createElement('stop');
-    var stop2 = fabric.getFabricDocument().createElement('stop');
-
-    stop1.setAttributeNS(namespace, 'offset', '0%');
-    stop1.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop2.setAttributeNS(namespace, 'offset', '100%');
-    stop2.setAttributeNS(namespace, 'stop-color', 'black');
-    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
-
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-
-    var object = new fabric.Object({left: 10, top: 15, width: 200, height: 200 });
-    var gradient = fabric.Gradient.fromElement(element, object, {
-      opacity: '',
-      viewBoxWidth: 400,
-      viewBoxHeight: 300,
-    });
-
-    assert.ok(gradient instanceof fabric.Gradient);
-    assert.equal(gradient.gradientUnits, 'pixels');
-    assert.equal(gradient.offsetX, -10);
-    assert.equal(gradient.offsetY, -15);
-    assert.equal(gradient.coords.x1, 40);
-    assert.equal(gradient.coords.y1, 0.6);
-    assert.equal(gradient.coords.x2, 200);
-    assert.equal(gradient.coords.y2, 60);
-  });
-
-  QUnit.test('fromElement linearGradient with Infinity', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'linearGradient');
-    var stop1 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop2 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-
-    stop1.setAttributeNS(namespace, 'offset', '0%');
-    stop1.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop2.setAttributeNS(namespace, 'offset', '100%');
-    stop2.setAttributeNS(namespace, 'stop-color', 'black');
-    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
-
-    element.setAttributeNS(namespace, 'x1', '-Infinity');
-    element.setAttributeNS(namespace, 'x2', 'Infinity');
-    element.setAttributeNS(namespace, 'y1', 'Infinity');
-    element.setAttributeNS(namespace, 'y2', '-Infinity');
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-
-    var object = new fabric.Object({ width: 100, height: 300, top: 20, left: 30 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-
-    assert.ok(gradient instanceof fabric.Gradient);
-
-    assert.equal(gradient.coords.x1, 0);
-    assert.equal(gradient.coords.y1, 1);
-    assert.equal(gradient.coords.x2, 1);
-    assert.equal(gradient.coords.y2, 0);
-
-    assert.equal(gradient.colorStops[0].offset, 1);
-    assert.equal(gradient.colorStops[1].offset, 0);
-
-    assert.equal(gradient.colorStops[0].color, 'rgb(0,0,0)');
-    assert.equal(gradient.colorStops[1].color, 'rgb(255,255,255)');
-
-    assert.equal(gradient.colorStops[0].opacity, 0);
-  });
-
-  QUnit.test('fromElement without stop', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'linearGradient');
-    var stop1 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop2 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-
-    stop1.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop2.setAttributeNS(namespace, 'offset', '100%');
-    stop2.setAttributeNS(namespace, 'stop-color', 'black');
-    stop2.setAttributeNS(namespace, 'stop-opacity', '0');
-
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-
-    var object = new fabric.Object({ width: 100, height: 100 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-
-    assert.ok(gradient instanceof fabric.Gradient);
-
-    assert.equal(gradient.colorStops[0].offset, 1);
-    assert.equal(gradient.colorStops[1].offset, 0);
-  });
-
-  QUnit.test('fromElement with x1,x2,y1,2 linear', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'linearGradient');
-
-    element.setAttributeNS(namespace, 'x1', '30%');
-    element.setAttributeNS(namespace, 'x2', '20%');
-    element.setAttributeNS(namespace, 'y1', '0.1');
-    element.setAttributeNS(namespace, 'y2', 'Infinity');
-
-    var object = new fabric.Object({ width: 200, height: 200 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-    assert.equal(gradient.coords.x1, 0.3);
-    assert.equal(gradient.coords.y1, 0.1);
-    assert.equal(gradient.coords.x2, 0.2);
-    assert.equal(gradient.coords.y2, 1);
-    object = new fabric.Object({ width: 200, height: 200, top: 50, left: 10 });
-    gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-    assert.equal(gradient.coords.x1, 0.3, 'top and left do not change the output');
-    assert.equal(gradient.coords.y1, 0.1, 'top and left do not change the output');
-    assert.equal(gradient.coords.x2, 0.2, 'top and left do not change the output');
-    assert.equal(gradient.coords.y2, 1, 'top and left do not change the output');
-  });
-
-  QUnit.test('fromElement with x1,x2,y1,2 radial', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'radialGradient');
-
-    element.setAttributeNS(namespace, 'fx', '30%');
-    element.setAttributeNS(namespace, 'fy', '20%');
-    element.setAttributeNS(namespace, 'cx', '0.1');
-    element.setAttributeNS(namespace, 'cy', '1');
-    element.setAttributeNS(namespace, 'r', '100%');
-
-    var object = new fabric.Object({ width: 200, height: 200 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-    assert.equal(gradient.coords.x1, 0.3, 'should not change with width height');
-    assert.equal(gradient.coords.y1, 0.2, 'should not change with width height');
-    assert.equal(gradient.coords.x2, 0.1, 'should not change with width height');
-    assert.equal(gradient.coords.y2, 1, 'should not change with width height');
-    assert.equal(gradient.coords.r1, 0, 'should not change with width height');
-    assert.equal(gradient.coords.r2, 1, 'should not change with width height');
-
-    object = new fabric.Object({ width: 200, height: 200, top: 10, left: 10 });
-    gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-    assert.equal(gradient.coords.x1, 0.3, 'should not change with top left');
-    assert.equal(gradient.coords.y1, 0.2, 'should not change with top left');
-    assert.equal(gradient.coords.x2, 0.1, 'should not change with top left');
-    assert.equal(gradient.coords.y2, 1, 'should not change with top left');
-    assert.equal(gradient.coords.r1, 0, 'should not change with top left');
-    assert.equal(gradient.coords.r2, 1, 'should not change with top left');
-  });
-
-  QUnit.test('fromElement with x1,x2,y1,2 radial userSpaceOnUse', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'radialGradient');
-
-    element.setAttributeNS(namespace, 'fx', '30');
-    element.setAttributeNS(namespace, 'fy', '20');
-    element.setAttributeNS(namespace, 'cx', '15');
-    element.setAttributeNS(namespace, 'cy', '18');
-    element.setAttributeNS(namespace, 'r', '100');
-    element.setAttributeNS(namespace, 'gradientUnits', 'userSpaceOnUse');
-
-    var object = new fabric.Object({ width: 200, height: 200 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-    assert.equal(gradient.coords.x1, 30, 'should not change with width height');
-    assert.equal(gradient.coords.y1, 20, 'should not change with width height');
-    assert.equal(gradient.coords.x2, 15, 'should not change with width height');
-    assert.equal(gradient.coords.y2, 18, 'should not change with width height');
-    assert.equal(gradient.coords.r1, 0, 'should not change with width height');
-    assert.equal(gradient.coords.r2, 100, 'should not change with width height');
-
-    object = new fabric.Object({ width: 200, height: 200, top: 50, left: 60 });
-    gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-    assert.equal(gradient.coords.x1, 30, 'should not change with top left');
-    assert.equal(gradient.coords.y1, 20, 'should not change with top left');
-    assert.equal(gradient.coords.x2, 15, 'should not change with top left');
-    assert.equal(gradient.coords.y2, 18, 'should not change with top left');
-    assert.equal(gradient.coords.r1, 0, 'should not change with top left');
-    assert.equal(gradient.coords.r2, 100, 'should not change with top left');
-  });
-
-  QUnit.test('fromElement with x1,x2,y1,2 linear userSpaceOnUse', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace,  'linearGradient');
-
-    element.setAttributeNS(namespace, 'x1', '30');
-    element.setAttributeNS(namespace, 'y1', '20');
-    element.setAttributeNS(namespace, 'x2', '15');
-    element.setAttributeNS(namespace, 'y2', '18');
-    element.setAttributeNS(namespace, 'gradientUnits', 'userSpaceOnUse');
-
-    var object = new fabric.Object({ width: 200, height: 200 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-    assert.equal(gradient.coords.x1, 30, 'should not change with width height');
-    assert.equal(gradient.coords.y1, 20, 'should not change with width height');
-    assert.equal(gradient.coords.x2, 15, 'should not change with width height');
-    assert.equal(gradient.coords.y2, 18, 'should not change with width height');
-
-    object = new fabric.Object({ width: 200, height: 200, top: 40, left: 40 });
-    gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-    assert.equal(gradient.coords.x1, 30, 'should not change with top left');
-    assert.equal(gradient.coords.y1, 20, 'should not change with top left');
-    assert.equal(gradient.coords.x2, 15, 'should not change with top left');
-    assert.equal(gradient.coords.y2, 18, 'should not change with top left');
-  });
-
-  QUnit.test('fromElement radialGradient defaults', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'radialGradient');
-    var stop1 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop2 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-
-    stop1.setAttributeNS(namespace, 'offset', '0%');
-    stop1.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop2.setAttributeNS(namespace, 'offset', '100%');
-    stop2.setAttributeNS(namespace, 'stop-color', 'black');
-
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-
-    var object = new fabric.Object({ width: 100, height: 100 });
-    var gradient = fabric.Gradient.fromElement(element, object, {});
-
-    assert.ok(gradient instanceof fabric.Gradient);
-
-    assert.equal(gradient.coords.x1, 0.5);
-    assert.equal(gradient.coords.y1, 0.5);
-    assert.equal(gradient.coords.x2, 0.5);
-    assert.equal(gradient.coords.y2, 0.5);
-    assert.equal(gradient.coords.r1, 0);
-    assert.equal(gradient.coords.r2, 0.5);
-
-    assert.equal(gradient.colorStops[0].offset, 1);
-    assert.equal(gradient.colorStops[1].offset, 0);
-
-    assert.equal(gradient.colorStops[0].color, 'rgb(0,0,0)');
-    assert.equal(gradient.colorStops[1].color, 'rgb(255,255,255)');
-  });
-
-  QUnit.test('fromElement radialGradient with transform', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'radialGradient');
-    var stop1 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop2 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-
-    stop1.setAttributeNS(namespace, 'offset', '0%');
-    stop1.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop2.setAttributeNS(namespace, 'offset', '100%');
-    stop2.setAttributeNS(namespace, 'stop-color', 'black');
-
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-    element.setAttributeNS(namespace, 'gradientTransform', 'matrix(3.321 -0.6998 0.4077 1.9347 -440.9168 -408.0598)');
-    var object = new fabric.Object({ width: 100, height: 100 });
-    var gradient = fabric.Gradient.fromElement(element, object, {});
-    assert.deepEqual(gradient.gradientTransform, [3.321, -0.6998, 0.4077, 1.9347, -440.9168, -408.0598]);
-  });
-
-  QUnit.test('fromElement linearGradient colorStop attributes/styles', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'linearGradient');
-    var stop1 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop2 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop3 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop4 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-
-    stop1.setAttributeNS(namespace, 'offset', '0%');
-    stop1.setAttributeNS(namespace, 'stop-color', '');
-    stop1.setAttributeNS(namespace, 'stop-opacity', '');
-
-    stop2.setAttributeNS(namespace, 'offset', '0.5');
-    stop2.setAttributeNS(namespace, 'style', 'stop-color: black; stop-opacity:;');
-    stop2.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop3.setAttributeNS(namespace, 'offset', '75%');
-    stop3.setAttributeNS(namespace, 'style', 'stop-color:; stop-opacity:;');
-    stop3.setAttributeNS(namespace, 'stop-opacity', '0.9');
-    stop3.setAttributeNS(namespace, 'stop-color', 'blue');
-
-    stop4.setAttributeNS(namespace, 'offset', '100%');
-    stop4.setAttributeNS(namespace, 'style', 'stop-color: red; stop-opacity: 0.5;');
-    stop4.setAttributeNS(namespace, 'stop-opacity', '0.9');
-
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-    element.appendChild(stop3);
-    element.appendChild(stop4);
-
-    var object = new fabric.Object({ width: 100, height: 100 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-
-    assert.ok(gradient instanceof fabric.Gradient);
-
-    assert.equal(gradient.coords.x1, 0);
-    assert.equal(gradient.coords.y1, 0);
-    assert.equal(gradient.coords.x2, 1);
-    assert.equal(gradient.coords.y2, 0);
-
-    assert.equal(gradient.colorStops[0].offset, 1);
-    assert.equal(gradient.colorStops[1].offset, 0.75);
-    assert.equal(gradient.colorStops[2].offset, 0.5);
-    assert.equal(gradient.colorStops[3].offset, 0);
-
-    assert.equal(gradient.colorStops[0].color, 'rgb(255,0,0)');
-    assert.equal(gradient.colorStops[1].color, 'rgb(0,0,255)');
-    assert.equal(gradient.colorStops[2].color, 'rgb(0,0,0)');
-    assert.equal(gradient.colorStops[3].color, 'rgb(0,0,0)');
-
-    assert.equal(gradient.colorStops[0].opacity, 0.5);
-    assert.equal(gradient.colorStops[1].opacity, 0.9);
-    assert.equal(gradient.colorStops[2].opacity, 1);
-    assert.equal(gradient.colorStops[3].opacity, 1);
-  });
-
-  QUnit.test('fromElement radialGradient colorStop attributes/styles', function(assert) {
-    assert.ok(typeof fabric.Gradient.fromElement === 'function');
-
-    var namespace = 'http://www.w3.org/2000/svg';
-    var element = fabric.getFabricDocument().createElementNS(namespace, 'radialGradient');
-    var stop1 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop2 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop3 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-    var stop4 = fabric.getFabricDocument().createElementNS(namespace, 'stop');
-
-    stop1.setAttributeNS(namespace, 'offset', '0%');
-    stop1.setAttributeNS(namespace, 'stop-color', '');
-    stop1.setAttributeNS(namespace, 'stop-opacity', '');
-
-    stop2.setAttributeNS(namespace, 'offset', '0.5');
-    stop2.setAttributeNS(namespace, 'style', 'stop-color: black; stop-opacity:;');
-    stop2.setAttributeNS(namespace, 'stop-color', 'white');
-
-    stop3.setAttributeNS(namespace, 'offset', '75%');
-    stop3.setAttributeNS(namespace, 'style', 'stop-color:; stop-opacity:;');
-    stop3.setAttributeNS(namespace, 'stop-opacity', '0.9');
-    stop3.setAttributeNS(namespace, 'stop-color', 'blue');
-
-    stop4.setAttributeNS(namespace, 'offset', '100%');
-    stop4.setAttributeNS(namespace, 'style', 'stop-color: red; stop-opacity: 0.5;');
-    stop4.setAttributeNS(namespace, 'stop-opacity', '0.9');
-
-    element.appendChild(stop1);
-    element.appendChild(stop2);
-    element.appendChild(stop3);
-    element.appendChild(stop4);
-
-    var object = new fabric.Object({ width: 100, height: 100 });
-    var gradient = fabric.Gradient.fromElement(element, object, { opacity: '' });
-
-    assert.ok(gradient instanceof fabric.Gradient);
-
-    assert.equal(gradient.colorStops[0].offset, 1);
-    assert.equal(gradient.colorStops[1].offset, 0.75);
-    assert.equal(gradient.colorStops[2].offset, 0.5);
-    assert.equal(gradient.colorStops[3].offset, 0);
-
-    assert.equal(gradient.colorStops[0].color, 'rgb(255,0,0)');
-    assert.equal(gradient.colorStops[1].color, 'rgb(0,0,255)');
-    assert.equal(gradient.colorStops[2].color, 'rgb(0,0,0)');
-    assert.equal(gradient.colorStops[3].color, 'rgb(0,0,0)');
-
-    assert.equal(gradient.colorStops[0].opacity, 0.5);
-    assert.equal(gradient.colorStops[1].opacity, 0.9);
-    assert.equal(gradient.colorStops[2].opacity, 1);
-    assert.equal(gradient.colorStops[3].opacity, 1);
-  });
-
   QUnit.test('toSVG', function(assert) {
     var gradient = createLinearGradient();
     assert.ok(typeof gradient.toSVG === 'function');