Support Features rendering / static/unmount props

Fixes #1
This commit is contained in:
Ryan Gossiaux
2021-12-22 11:55:52 -08:00
parent 7d413d6e34
commit d21287eace
10 changed files with 178 additions and 141 deletions

View File

@@ -59,7 +59,7 @@
import { get_current_component } from "svelte/internal";
import type { SupportedAs } from "$lib/internal/elements";
import type { HTMLActionArray } from "$lib/hooks/use-actions";
import Render from "$lib/utils/Render.svelte";
import Render, { Features } from "$lib/utils/Render.svelte";
const forwardEvents = forwardEventsBuilder(get_current_component(), [
"close",
]);
@@ -247,42 +247,42 @@
on:mousedown={handleWindowMousedown}
on:keydown={handleWindowKeydown}
/>
{#if visible}
<FocusTrap {containers} {enabled} options={{ initialFocus }} />
<StackContextProvider
element={internalDialogRef}
onUpdate={(message, element) => {
return match(message, {
[StackMessage.Add]() {
containers.add(element);
},
[StackMessage.Remove]() {
containers.delete(element);
},
});
}}
>
<ForcePortalRootContext force={true}>
<Portal>
<PortalGroup target={internalDialogRef}>
<ForcePortalRootContext force={false}>
<DescriptionProvider name={"Dialog.Description"} let:describedby>
<Render
{...{ ...$$restProps, ...propsWeControl }}
{as}
{slotProps}
use={[...use, forwardEvents]}
name={"Dialog"}
bind:el={internalDialogRef}
aria-describedby={describedby}
on:click={handleClick}
>
<slot {...slotProps} />
</Render>
</DescriptionProvider>
</ForcePortalRootContext>
</PortalGroup>
</Portal>
</ForcePortalRootContext>
</StackContextProvider>
{/if}
<FocusTrap {containers} {enabled} options={{ initialFocus }} />
<StackContextProvider
element={internalDialogRef}
onUpdate={(message, element) => {
return match(message, {
[StackMessage.Add]() {
containers.add(element);
},
[StackMessage.Remove]() {
containers.delete(element);
},
});
}}
>
<ForcePortalRootContext force={true}>
<Portal>
<PortalGroup target={internalDialogRef}>
<ForcePortalRootContext force={false}>
<DescriptionProvider name={"Dialog.Description"} let:describedby>
<Render
{...{ ...$$restProps, ...propsWeControl }}
{as}
{slotProps}
use={[...use, forwardEvents]}
name={"Dialog"}
bind:el={internalDialogRef}
aria-describedby={describedby}
on:click={handleClick}
{visible}
features={Features.RenderStrategy | Features.Static}
>
<slot {...slotProps} />
</Render>
</DescriptionProvider>
</ForcePortalRootContext>
</PortalGroup>
</Portal>
</ForcePortalRootContext>
</StackContextProvider>