@ -2622,12 +2622,19 @@ declare module 'svelte/reactivity/window' {
}
declare module 'svelte/renderer' {
export function createRenderer < T extends RendererNodes < object , object , object , object > = DefaultNodes , TFragment extends object = T extends DefaultNodes ? object : T [ "fragment" ] , TElement extends object = T extends DefaultNodes ? object : T [ "element" ] , TTextNode extends object = T extends DefaultNodes ? object : T [ "text" ] , TComment extends object = T extends DefaultNodes ? object : T [ "comment" ] , R extends Renderer < TFragment , TElement , TTextNode , TComment > = Renderer < TFragment , TElement , TTextNode , TComment > > ( renderer : R ) : R ;
export function createRenderer < T extends RendererNodes < object , object , object , object > = DefaultNodes , TFragment extends object = T extends DefaultNodes ? object : T [ "fragment" ] , TElement extends object = T extends DefaultNodes ? object : T [ "element" ] , TTextNode extends object = T extends DefaultNodes ? object : T [ "text" ] , TComment extends object = T extends DefaultNodes ? object : T [ "comment" ] , TForeignNodes extends RendererNodes < any , any , any , any , any > | undefined = T extends DefaultNodes ? RendererNodes < any , any , any , any , any > : T [ "foreign" ] , R extends Renderer < TFragment , TElement , TTextNode , TComment , TForeignNodes > = Renderer < TFragment , TElement , TTextNode , TComment > > ( renderer : R ) : R ;
type Renderer <
TFragment extends object = object ,
TElement extends object = object ,
TTextNode extends object = object ,
TComment extends object = object ,
TForeignNodes extends RendererNodes < any , any , any , any , any > | undefined = RendererNodes <
any ,
any ,
any ,
any ,
any
> ,
TNode extends TFragment | TElement | TTextNode | TComment =
| TFragment
| TElement
@ -2708,27 +2715,89 @@ declare module 'svelte/renderer' {
/** Remove an event listener of the given type and handler from the target node. */
removeEventListener ( target : TElement , type : string , handler : any , options? : any ) : void ;
/** Operations used when this renderer is interleaved with DOM or another custom renderer. */
foreign ? : {
/ * *
* Insert a node from this renderer into a different renderer ' s parent before the anchor .
* If anchor is null , insert at the end .
* /
insertIntoForeign (
parent : TForeignNodes extends undefined
? never
:
| DefinedRendererNodes < TForeignNodes > [ 'element' ]
| DefinedRendererNodes < TForeignNodes > [ 'fragment' ] ,
element : TNode ,
anchor :
| DefinedRendererNodes < TForeignNodes > [ 'element' ]
| DefinedRendererNodes < TForeignNodes > [ 'text' ]
| DefinedRendererNodes < TForeignNodes > [ 'comment' ]
| null
) : void ;
/ * *
* Insert a node from a different renderer into this renderer ' s parent before the anchor .
* If anchor is null , insert at the end .
* /
insertForeign (
parent : TElement | TFragment ,
element :
| DefinedRendererNodes < TForeignNodes > [ 'element' ]
| DefinedRendererNodes < TForeignNodes > [ 'fragment' ]
| DefinedRendererNodes < TForeignNodes > [ 'text' ]
| DefinedRendererNodes < TForeignNodes > [ 'comment' ] ,
anchor :
| DefinedRendererNodes < TForeignNodes > [ 'element' ]
| DefinedRendererNodes < TForeignNodes > [ 'text' ]
| DefinedRendererNodes < TForeignNodes > [ 'comment' ]
| null
) : void ;
/** Remove a node that was inserted across renderer boundaries. */
removeForeign (
node :
| DefinedRendererNodes < TForeignNodes > [ 'element' ]
| DefinedRendererNodes < TForeignNodes > [ 'fragment' ]
| DefinedRendererNodes < TForeignNodes > [ 'text' ]
| DefinedRendererNodes < TForeignNodes > [ 'comment' ]
) : void ;
/** Remove a node that was inserted across renderer boundaries. */
removeFromForeign ( node : TNode ) : void ;
} ;
} ;
type DefinedRendererNodes < TNodes extends RendererNodes < any , any , any , any , any > | undefined > =
TNodes extends RendererNodes < any , any , any , any , any >
? TNodes
: RendererNodes < any , any , any , any , any > ;
type RendererNodes <
Fragment extends object ,
Element extends object ,
TextNode extends object ,
Comment extends object
Comment extends object ,
ForeignNode extends RendererNodes < any , any , any , any , any > = RendererNodes <
any ,
any ,
any ,
any ,
any
>
> = {
fragment : Fragment ;
element : Element ;
text : TextNode ;
comment : Comment ;
foreign? : ForeignNode ;
} ;
type NodeType = keyof RendererNodes < any , any , any , any > ;
type NodeType = Exclude < keyof RendererNodes < any , any, any , any , any >, 'foreign' >;
// to detect if the user is passing a type or not we create this type utils that adds a unique symbol
// that the user will never be able to pass in. We then create a a DefaultNodes type that is used as the default
// type for the T generic of `createRenderer`. This means we can "detect" if the user is passing a type manually by
// checking if the type extends DefaultNodes and using different default values
// for the other arguments (TFragment, TElement, TTextNode, TComment)
// for the other arguments (TFragment, TElement, TTextNode, TComment , TForeignNodes )
type UnsetObject = object & { readonly __unset : unique symbol } ;
type DefaultNodes = RendererNodes < UnsetObject , UnsetObject , UnsetObject , UnsetObject > ;