1
1
type Props < T > = Partial < Omit < T , "style" | "dataset" | "classList" > > & {
2
- style ?: Partial < CSSStyleDeclaration >
3
- dataset ?: Record < string , string | number >
2
+ style ?: Extract < Partial < CSSStyleDeclaration > , string >
3
+ dataset ?: Record < string , string | number | boolean >
4
4
txt ?: string
5
5
}
6
6
type E = HTMLElementTagNameMap & Record < string , HTMLElement >
@@ -12,12 +12,10 @@ export const Render = <T extends keyof E>(tagName: T) => (p: Props<E[T]> = {}, .
12
12
const { style = { } , dataset = { } , ..._p } = props
13
13
const children = c . filter ( ( c ) => c ) as NNode [ ]
14
14
const render = ( ( element ?: E [ T ] ) => ( ) => {
15
- if ( element ) {
16
- return element
17
- }
15
+ if ( element ) return element
18
16
const e = ( element = document . createElement ( tagName ) )
19
- Object . entries ( _p ) . forEach ( ( [ k , v ] ) => ( e [ k ] = v ) )
20
- Object . entries ( style ) . forEach ( ( [ k , v ] ) => ( e . style [ k ] = v ) )
17
+ Object . entries ( _p ) . forEach ( ( [ k , v ] ) => ( ( < any > e ) [ k ] = v ) )
18
+ Object . entries ( style ) . forEach ( ( [ k , v ] ) => ( ( < any > e . style ) [ k ] = v ) )
21
19
Object . entries ( dataset ) . forEach ( ( [ k , v ] ) => ( e . dataset [ k ] = v as string ) )
22
20
children . forEach ( ( child ) => e . append ( child ( ) ) )
23
21
return e
@@ -29,10 +27,10 @@ const patchProps = (prev: NNode, next: NNode) => {
29
27
const e = prev ( )
30
28
const { style : pStyle = { } , dataset : pData = { } , ...pProps } = prev . props
31
29
const { style : nStyle = { } , dataset : nData = { } , ...nProps } = next . props
32
- Object . entries ( pProps ) . forEach ( ( [ k ] ) => nProps [ k ] === undefined && ( e [ k ] = undefined ) )
33
- Object . entries ( nProps ) . forEach ( ( [ k , v ] ) => pProps [ k ] !== v && ( e [ k ] = v ) )
34
- Object . entries ( pStyle ) . forEach ( ( [ k ] ) => nStyle [ k ] === undefined && e . style . removeProperty ( k ) )
35
- Object . entries ( nStyle ) . forEach ( ( [ k , v ] ) => pStyle [ k ] !== v && ( e . style [ k ] = v ) )
30
+ Object . entries ( pProps ) . forEach ( ( [ k ] ) => ( < any > nProps ) [ k ] === undefined && ( ( < any > e ) [ k ] = undefined ) )
31
+ Object . entries ( nProps ) . forEach ( ( [ k , v ] ) => ( < any > pProps ) [ k ] !== v && ( ( < any > e ) [ k ] = v ) )
32
+ Object . entries ( pStyle ) . forEach ( ( [ k ] ) => ( < any > nStyle ) [ k ] === undefined && e . style . removeProperty ( k ) )
33
+ Object . entries ( nStyle ) . forEach ( ( [ k , v ] ) => ( < any > pStyle ) [ k ] !== v && ( ( < any > e . style ) [ k ] = v ) )
36
34
Object . entries ( pData ) . forEach ( ( [ k ] ) => nData [ k ] === undefined && Reflect . deleteProperty ( e . dataset , k ) )
37
35
Object . entries ( nData ) . forEach ( ( [ k , v ] ) => pData [ k ] !== v && ( e . dataset [ k ] = v as string ) )
38
36
}
@@ -54,7 +52,7 @@ const reconciliate = (prev: NNode, next: NNode): NNode => {
54
52
export const NewRNode = ( element : HTMLElement , props : Record < string , unknown > = { } , ...children : MaybeNNode [ ] ) : NNode =>
55
53
Object . assign ( ( ) => element , { tagName : element . tagName , props, children : children . filter ( ( c ) => c ) as NNode [ ] } )
56
54
57
- export const NewMountPoint = ( root : HTMLElement | ShadowRoot ) => {
58
- let prev = NewRNode ( root as any )
55
+ export const NewMountPoint = ( root : HTMLElement ) => {
56
+ let prev = NewRNode ( root )
59
57
return ( ...children : MaybeNNode [ ] ) => ( prev = reconciliate ( prev , NewRNode ( root as any , { } , ...children ) ) )
60
58
}
0 commit comments