@@ -13,6 +13,7 @@ const elemConfigByClass = new Map<
1313 {
1414 tag : string
1515 impl : any // TODO!!!!!,
16+ shadow : boolean
1617 styles : string | string [ ] | ( ( ) => string | string [ ] ) | null
1718 props : Map < string , PropConfig >
1819 }
@@ -77,6 +78,7 @@ type Listener<T> = (v: T) => void
7778
7879function elem < E extends Component , C > ( params : {
7980 tag : string
81+ shadow ?: boolean
8082 impl : {
8183 patch : ( content : C , container : HTMLElement ) => void
8284 init : ( self : E , ctrl : Ctrl ) => ( ) => C
@@ -112,13 +114,14 @@ function elem<E extends Component>(params: any) {
112114 elemConfig = {
113115 tag : params . tag ,
114116 impl : params . impl ,
117+ shadow : params . shadow !== false ,
115118 styles : params . styles || null ,
116119 props : new Map ( )
117120 }
118-
119121 elemConfigByClass . set ( clazz , elemConfig )
120122 } else {
121123 elemConfig . tag = params . tag
124+ elemConfig . shadow = params . shadow !== false
122125 elemConfig . styles = params . styles || null
123126 elemConfig . impl = params . impl
124127 }
@@ -169,7 +172,14 @@ function prop(arg1?: any, arg2?: any): any {
169172 let elemConfig = elemConfigByClass . get ( constructor )
170173
171174 if ( ! elemConfig ) {
172- elemConfig = { tag : '' , impl : null , styles : null , props : new Map ( ) }
175+ elemConfig = {
176+ tag : '' ,
177+ shadow : true ,
178+ impl : null ,
179+ styles : null ,
180+ props : new Map ( )
181+ }
182+
173183 elemConfigByClass . set ( constructor , elemConfig )
174184 }
175185
@@ -215,23 +225,36 @@ class BaseElement extends HTMLElement {
215225 styles = ''
216226 }
217227
218- elemConfigByClass . get ( this . constructor ) ! . styles = styles
228+ elemConfig . styles = styles
229+ }
230+ console . log ( 11111 , elemConfig )
231+ if ( elemConfig . shadow ) {
232+ this . attachShadow ( { mode : 'open' } )
219233 }
220-
221- const stylesElement = document . createElement ( 'span' )
222- stylesElement . setAttribute ( 'data-role' , 'styles' )
223234
224235 if ( styles ) {
225236 const styleElem = document . createElement ( 'style' )
226237 styleElem . appendChild ( document . createTextNode ( styles ) )
227- stylesElement . appendChild ( styleElem )
238+
239+ if ( ! elemConfig . shadow ) {
240+ document . head . append ( styleElem )
241+ elemConfig . styles = null
242+ } else {
243+ const stylesElement = document . createElement ( 'span' )
244+ stylesElement . appendChild ( styleElem )
245+ stylesElement . setAttribute ( 'data-role' , 'styles' )
246+ this . shadowRoot ! . append ( stylesElement )
247+ }
228248 }
229249
230250 const contentElement = document . createElement ( 'span' )
231251 contentElement . setAttribute ( 'data-role' , 'content' )
232- this . attachShadow ( { mode : 'open' } )
233- //contentElement.append(document.createElement('span'))
234- this . shadowRoot ! . append ( stylesElement , contentElement )
252+
253+ if ( elemConfig . shadow ) {
254+ this . shadowRoot ! . append ( contentElement )
255+ } else {
256+ this . append ( contentElement )
257+ }
235258
236259 let rendered = false
237260 let mounted = false
0 commit comments