1
1
import { paint } from "@/drawing" ;
2
2
3
+ const styles = new CSSStyleSheet ( ) ;
4
+ ( ( ) => {
5
+ styles . replace ( `
6
+ :host {
7
+ display: grid;
8
+ grid-template-rows: 100%;
9
+ grid-template-columns: 100%;
10
+ grid-template-areas: "fill";
11
+ }
12
+
13
+ .canvas {
14
+ grid-area: fill;
15
+ contain: strict;
16
+ z-index: -1000;
17
+ }
18
+
19
+ .content {
20
+ grid-area: fill;
21
+ }
22
+ ` ) ;
23
+ } ) ( ) ;
24
+
25
+ const template = new DocumentFragment ( ) ;
26
+
27
+ ( ( ) => {
28
+ const canvas = document . createElement ( "canvas" ) ;
29
+ const div = document . createElement ( "div" ) ;
30
+ div . classList . add ( "canvas" ) ;
31
+ div . appendChild ( canvas ) ;
32
+ template . appendChild ( div ) ;
33
+ } ) ( ) ;
34
+
35
+ ( ( ) => {
36
+ const slot = document . createElement ( "slot" ) ;
37
+ const div = document . createElement ( "div" ) ;
38
+ div . classList . add ( "content" ) ;
39
+ div . appendChild ( slot ) ;
40
+ template . appendChild ( div ) ;
41
+ } ) ( ) ;
42
+
3
43
export default class SquircleCanvas extends HTMLElement {
4
44
_radius = 0 ;
5
45
_fill = "rgba(0, 0, 0, 0)" ;
6
46
_borderWidth = 0 ;
7
47
_borderColor = "rgba(0, 0, 0, 0)" ;
8
48
_animationFrame = - 1 ;
49
+ _shadow ;
9
50
/** @type {CanvasRenderingContext2D? } */
10
51
_context = null ;
11
52
@@ -18,16 +59,16 @@ export default class SquircleCanvas extends HTMLElement {
18
59
19
60
constructor ( ) {
20
61
super ( ) ;
62
+ this . _shadow = this . attachShadow ( { mode : "open" } ) ;
21
63
}
22
64
23
65
connectedCallback ( ) {
24
66
this . setAttribute ( "impl" , "canvas" ) ;
67
+ this . _shadow . adoptedStyleSheets = [ styles ] ;
25
68
26
- const canvas = document . createElement ( "canvas" ) ;
27
- const div = document . createElement ( "div" ) ;
28
- div . classList . add ( "ce-squircle-canvas--canvas" ) ;
29
- div . appendChild ( canvas ) ;
30
- this . appendChild ( div ) ;
69
+ this . _shadow . appendChild ( template . cloneNode ( true ) ) ;
70
+ const canvas = this . _shadow . querySelector ( "canvas" ) ;
71
+ if ( ! canvas ) return ;
31
72
32
73
const ctx = canvas . getContext ( "2d" , { } ) ;
33
74
0 commit comments