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}