diff --git a/src/lib/components/disclosure/Disclosure.svelte b/src/lib/components/disclosure/Disclosure.svelte index 8cb3510..785ad0f 100644 --- a/src/lib/components/disclosure/Disclosure.svelte +++ b/src/lib/components/disclosure/Disclosure.svelte @@ -45,6 +45,16 @@ import { useId } from "$lib/hooks/use-id"; import { match } from "$lib/utils/match"; import { State, useOpenClosedProvider } from "$lib/internal/open-closed"; + import { forwardEventsBuilder } from "$lib/internal/forwardEventsBuilder"; + 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"; + const forwardEvents = forwardEventsBuilder(get_current_component()); + + export let as: SupportedAs = "div"; + export let use: HTMLActionArray = []; + export let defaultOpen = false; let buttonId = `headlessui-disclosure-button-${useId()}`; let panelId = `headlessui-disclosure-panel-${useId()}`; @@ -107,8 +117,19 @@ useOpenClosedProvider(openClosedState); $: $openClosedState = computeOpenClosedState(disclosureState); + + $: slotProps = { + open: disclosureState === DisclosureStates.Open, + close: $api.close, + }; -
- -
+ + + diff --git a/src/lib/components/disclosure/DisclosureButton.svelte b/src/lib/components/disclosure/DisclosureButton.svelte index 04e62c1..0844859 100644 --- a/src/lib/components/disclosure/DisclosureButton.svelte +++ b/src/lib/components/disclosure/DisclosureButton.svelte @@ -3,6 +3,16 @@ import { usePanelContext } from "./DisclosurePanel.svelte"; import { useId } from "$lib/hooks/use-id"; import { Keys } from "$lib/utils/keyboard"; + import { forwardEventsBuilder } from "$lib/internal/forwardEventsBuilder"; + 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"; + const forwardEvents = forwardEventsBuilder(get_current_component()); + + export let as: SupportedAs = "button"; + export let use: HTMLActionArray = []; + export let disabled = false; const api = useDisclosureContext("DisclosureButton"); const panelContext = usePanelContext(); @@ -25,8 +35,9 @@ } } - function handleKeyDown(event: KeyboardEvent) { + function handleKeyDown(e: CustomEvent) { if (disabled) return; + let event = e as any as KeyboardEvent; if (isWithinPanel) { switch (event.key) { @@ -50,7 +61,8 @@ } } - function handleKeyUp(event: KeyboardEvent) { + function handleKeyUp(e: CustomEvent) { + let event = e as any as KeyboardEvent; switch (event.key) { case Keys.Space: // Required for firefox, event.preventDefault() in handleKeyDown for @@ -71,30 +83,37 @@ "aria-controls": $panelStore ? $api.panelId : undefined, disabled: disabled ? true : undefined, }; + + $: slotProps = { + open: $api.disclosureState === DisclosureStates.Open, + close: $api.close, + }; {#if isWithinPanel} - + + {:else} - + + {/if} diff --git a/src/lib/components/disclosure/DisclosurePanel.svelte b/src/lib/components/disclosure/DisclosurePanel.svelte index 9a01839..5d0fe0c 100644 --- a/src/lib/components/disclosure/DisclosurePanel.svelte +++ b/src/lib/components/disclosure/DisclosurePanel.svelte @@ -10,6 +10,16 @@ {#if visible} -
- -
+ + + {/if}