1
- import { html } from 'lit'
1
+ import { html , LitElement , css } from 'lit'
2
+ import { withContext , contextProvider } from 'wc-context/lit'
2
3
import { styles } from './styles.js'
3
- import { Component } from './component.js'
4
4
5
- class ThemeSwitcher extends Component {
5
+ class ThemeSwitcher extends withContext ( LitElement ) {
6
6
static properties = {
7
7
theme : { type : String } ,
8
8
alttheme : { type : String } ,
@@ -31,7 +31,7 @@ class ThemeSwitcher extends Component {
31
31
}
32
32
}
33
33
34
- class ThemeProvider extends Component {
34
+ class ThemeProvider extends withContext ( LitElement ) {
35
35
static properties = {
36
36
theme : { type : String , providedContext : 'theme' } ,
37
37
}
@@ -41,7 +41,7 @@ class ThemeProvider extends Component {
41
41
}
42
42
}
43
43
44
- class ThemeConsumer extends Component {
44
+ class ThemeConsumer extends withContext ( LitElement ) {
45
45
static observedContexts = [ 'theme' ]
46
46
47
47
contextChangedCallback ( name , oldValue , value ) {
@@ -58,7 +58,7 @@ class ThemeConsumer extends Component {
58
58
}
59
59
}
60
60
61
- class TitleProvider extends Component {
61
+ class TitleProvider extends withContext ( LitElement ) {
62
62
static properties = {
63
63
value : { type : String , providedContext : 'title' } ,
64
64
}
@@ -68,7 +68,7 @@ class TitleProvider extends Component {
68
68
}
69
69
}
70
70
71
- class TitleThemeConsumer extends Component {
71
+ class TitleThemeConsumer extends withContext ( LitElement ) {
72
72
static observedContexts = [ 'title' , 'theme' ]
73
73
74
74
contextChangedCallback ( name , oldValue , value ) {
@@ -87,7 +87,17 @@ class TitleThemeConsumer extends Component {
87
87
}
88
88
}
89
89
90
- class App extends Component {
90
+ class App extends withContext ( LitElement ) {
91
+ static get styles ( ) {
92
+ return [
93
+ css `
94
+ .subtitle {
95
+ margin-top: 8px;
96
+ }
97
+ ` ,
98
+ ]
99
+ }
100
+
91
101
static properties = {
92
102
state : { type : Object } ,
93
103
}
@@ -108,20 +118,31 @@ class App extends Component {
108
118
render ( ) {
109
119
return html `
110
120
< div >
121
+ < div class ="subtitle "> Consumer on light dom</ div >
111
122
< theme-switcher id ="p1 ">
112
123
< theme-consumer id ="c1 "> </ theme-consumer >
113
124
</ theme-switcher >
125
+
126
+ < div class ="subtitle "> Nested providers</ div >
114
127
< theme-switcher id ="p2 ">
115
128
< theme-switcher id ="p3 " theme ="blue " alttheme ="yellow ">
116
129
< theme-consumer id ="c2 "> </ theme-consumer >
117
130
</ theme-switcher >
118
131
</ theme-switcher >
132
+ < div class ="subtitle "> Consume two contexts</ div >
119
133
< theme-switcher id ="p4 ">
120
134
< title-provider value =${ this . state . title } >
121
135
< titletheme-consumer > </ titletheme-consumer >
122
136
</ title-provider >
123
137
</ theme-switcher >
124
138
< button @click =${ this . toggleTitle } > Toggle title</ button >
139
+ < div class ="subtitle "> Using directive</ div >
140
+ < div ${ contextProvider ( 'theme' , 'blue' ) } >
141
+ < theme-consumer > </ theme-consumer >
142
+ </ div >
143
+ < div ${ contextProvider ( 'theme' , 'yellow' ) } >
144
+ < theme-consumer > </ theme-consumer >
145
+ </ div >
125
146
</ div >
126
147
`
127
148
}
@@ -133,7 +154,3 @@ customElements.define('theme-consumer', ThemeConsumer)
133
154
customElements . define ( 'title-provider' , TitleProvider )
134
155
customElements . define ( 'titletheme-consumer' , TitleThemeConsumer )
135
156
customElements . define ( 'context-example' , App )
136
-
137
- const appEl = document . createElement ( 'context-example' )
138
-
139
- document . body . appendChild ( appEl )
0 commit comments