@pzerelles/headlessui-svelte 2.1.2-next.29 → 2.1.2-next.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/button/Button.svelte +54 -84
  2. package/dist/checkbox/Checkbox.svelte +120 -173
  3. package/dist/checkbox/Checkbox.svelte.d.ts +1 -1
  4. package/dist/close-button/CloseButton.svelte +6 -12
  5. package/dist/combobox/Combobox.svelte +3 -50
  6. package/dist/data-interactive/DataInteractive.svelte +29 -55
  7. package/dist/description/Description.svelte +21 -31
  8. package/dist/dialog/Dialog.svelte +228 -320
  9. package/dist/dialog/DialogBackdrop.svelte +12 -29
  10. package/dist/dialog/DialogPanel.svelte +25 -48
  11. package/dist/dialog/DialogTitle.svelte +23 -38
  12. package/dist/field/Field.svelte +25 -47
  13. package/dist/fieldset/Fieldset.svelte +29 -50
  14. package/dist/focus-trap/FocusTrap.svelte +283 -419
  15. package/dist/input/Input.svelte +53 -84
  16. package/dist/internal/FloatingProvider.svelte +9 -14
  17. package/dist/internal/FocusSentinel.svelte +8 -16
  18. package/dist/internal/ForcePortalRoot.svelte +3 -7
  19. package/dist/internal/FormFields.svelte +34 -47
  20. package/dist/internal/FormFieldsProvider.svelte +5 -9
  21. package/dist/internal/FormResolver.svelte +15 -20
  22. package/dist/internal/Hidden.svelte +29 -50
  23. package/dist/internal/MainTreeProvider.svelte +36 -89
  24. package/dist/internal/Portal.svelte +14 -18
  25. package/dist/label/Label.svelte +58 -93
  26. package/dist/legend/Legend.svelte +3 -12
  27. package/dist/listbox/Listbox.svelte +387 -525
  28. package/dist/listbox/Listbox.svelte.d.ts +1 -1
  29. package/dist/listbox/ListboxButton.svelte +127 -173
  30. package/dist/listbox/ListboxOption.svelte +129 -170
  31. package/dist/listbox/ListboxOptions.svelte +304 -400
  32. package/dist/listbox/ListboxSelectedOption.svelte +15 -38
  33. package/dist/menu/Menu.svelte +51 -78
  34. package/dist/menu/MenuButton.svelte +117 -157
  35. package/dist/menu/MenuHeading.svelte +14 -32
  36. package/dist/menu/MenuItem.svelte +107 -142
  37. package/dist/menu/MenuItems.svelte +229 -301
  38. package/dist/menu/MenuSection.svelte +9 -24
  39. package/dist/menu/MenuSeparator.svelte +4 -17
  40. package/dist/popover/Popover.svelte +150 -216
  41. package/dist/popover/PopoverBackdrop.svelte +41 -67
  42. package/dist/popover/PopoverButton.svelte +212 -292
  43. package/dist/popover/PopoverGroup.svelte +35 -62
  44. package/dist/popover/PopoverPanel.svelte +229 -311
  45. package/dist/portal/InternalPortal.svelte +85 -141
  46. package/dist/portal/Portal.svelte +2 -5
  47. package/dist/portal/PortalGroup.svelte +9 -30
  48. package/dist/select/Select.svelte +68 -98
  49. package/dist/switch/Switch.svelte +132 -179
  50. package/dist/switch/SwitchGroup.svelte +31 -44
  51. package/dist/tabs/Tab.svelte +142 -194
  52. package/dist/tabs/TabGroup.svelte +56 -86
  53. package/dist/tabs/TabGroup.svelte.d.ts +1 -1
  54. package/dist/tabs/TabList.svelte +11 -31
  55. package/dist/tabs/TabPanel.svelte +42 -67
  56. package/dist/tabs/TabPanels.svelte +7 -18
  57. package/dist/textarea/Textarea.svelte +53 -84
  58. package/dist/transition/InternalTransitionChild.svelte +170 -259
  59. package/dist/transition/Transition.svelte +66 -96
  60. package/dist/transition/TransitionChild.svelte +11 -31
  61. package/dist/utils/DisabledProvider.svelte +3 -7
  62. package/dist/utils/ElementOrComponent.svelte +23 -43
  63. package/dist/utils/Generic.svelte +16 -27
  64. package/dist/utils/StableCollection.svelte +36 -54
  65. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +12 -27
  66. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +44 -88
  67. package/package.json +4 -4
@@ -1,43 +1,20 @@
1
- <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
3
- import type { Snippet } from "svelte"
4
-
5
- const DEFAULT_SELECTED_OPTION_TAG = "svelte:fragment"
6
- type SelectedOptionRenderPropArg = {}
7
- type SelectedOptionPropsWeControl = never
8
-
9
- export type ListboxSelectedOptionProps<TTag extends ElementType = typeof DEFAULT_SELECTED_OPTION_TAG> = Props<
10
- TTag,
11
- SelectedOptionRenderPropArg,
12
- SelectedOptionPropsWeControl,
13
- {
14
- options: Snippet
15
- placeholder?: Snippet
16
- }
17
- >
1
+ <script lang="ts" module>const DEFAULT_SELECTED_OPTION_TAG = "svelte:fragment";
18
2
  </script>
19
3
 
20
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_SELECTED_OPTION_TAG">
21
- import { useData, ValueMode } from "./Listbox.svelte"
22
- import { setContext } from "svelte"
23
- import ElementOrComponent from "../utils/ElementOrComponent.svelte"
24
-
25
- let {
26
- ref = $bindable(),
27
- options,
28
- placeholder,
29
- ...theirProps
30
- }: { as?: TTag } & ListboxSelectedOptionProps<TTag> = $props()
31
-
32
- const data = useData("ListboxSelectedOption")
33
-
34
- const shouldShowPlaceholder = $derived(
35
- data.value === undefined ||
36
- data.value === null ||
37
- (data.mode === ValueMode.Multi && Array.isArray(data.value) && data.value.length === 0)
38
- )
39
-
40
- setContext("SelectedOptionContext", true)
4
+ <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_SELECTED_OPTION_TAG">import { useData, ValueMode } from "./Listbox.svelte";
5
+ import { setContext } from "svelte";
6
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte";
7
+ let {
8
+ ref = $bindable(),
9
+ options,
10
+ placeholder,
11
+ ...theirProps
12
+ } = $props();
13
+ const data = useData("ListboxSelectedOption");
14
+ const shouldShowPlaceholder = $derived(
15
+ data.value === void 0 || data.value === null || data.mode === ValueMode.Multi && Array.isArray(data.value) && data.value.length === 0
16
+ );
17
+ setContext("SelectedOptionContext", true);
41
18
  </script>
42
19
 
43
20
  {#snippet children()}
@@ -1,84 +1,57 @@
1
- <script lang="ts" module>
2
- import { useOutsideClick } from "../hooks/use-outside-click.svelte.js"
3
- import { useFloatingProvider } from "../internal/floating.svelte.js"
4
- import { createOpenClosedContext, State } from "../internal/open-closed.js"
5
- import ElementOrComponent from "../utils/ElementOrComponent.svelte"
6
- import { FocusableMode, isFocusableElement } from "../utils/focus-management.js"
7
- import { match } from "../utils/match.js"
8
- import type { ElementType, Props } from "../utils/types.js"
9
- import type { Snippet } from "svelte"
10
-
11
- let DEFAULT_MENU_TAG = "svelte:fragment"
12
- type MenuRenderPropArg = {
13
- open: boolean
14
- close: () => void
15
- }
16
- type MenuPropsWeControl = never
17
-
18
- export type MenuProps<TTag extends ElementType = typeof DEFAULT_MENU_TAG> = Props<
19
- TTag,
20
- MenuRenderPropArg,
21
- MenuPropsWeControl,
22
- {
23
- __demoMode?: boolean
24
- }
25
- >
1
+ <script lang="ts" module>import { useOutsideClick } from "../hooks/use-outside-click.svelte.js";
2
+ import { useFloatingProvider } from "../internal/floating.svelte.js";
3
+ import { createOpenClosedContext, State } from "../internal/open-closed.js";
4
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte";
5
+ import { FocusableMode, isFocusableElement } from "../utils/focus-management.js";
6
+ import { match } from "../utils/match.js";
7
+ let DEFAULT_MENU_TAG = "svelte:fragment";
26
8
  </script>
27
9
 
28
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_MENU_TAG">
29
- import { ActivationTrigger, createMenuContext, MenuStates, type StateDefinition } from "./context.svelte.js"
30
-
31
- let { ref = $bindable(), __demoMode = false, ...theirProps }: { as?: TTag } & MenuProps<TTag> = $props()
32
-
33
- const context = createMenuContext({
34
- __demoMode,
35
- menuState: __demoMode ? MenuStates.Open : MenuStates.Closed,
36
- buttonElement: null,
37
- itemsElement: null,
38
- items: [],
39
- searchQuery: "",
40
- activeItemIndex: null,
41
- activationTrigger: ActivationTrigger.Other,
42
- } as StateDefinition)
43
- const { menuState, itemsElement, buttonElement } = $derived(context)
44
-
45
- // Handle outside click
46
- const outsideClickEnabled = $derived(menuState === MenuStates.Open)
47
- useOutsideClick({
48
- get enabled() {
49
- return outsideClickEnabled
50
- },
51
- get containers() {
52
- return [buttonElement, itemsElement]
53
- },
54
- cb: (event, target) => {
55
- context.closeMenu()
56
-
57
- if (!isFocusableElement(target, FocusableMode.Loose)) {
58
- event.preventDefault()
59
- buttonElement?.focus()
60
- }
61
- },
62
- })
63
-
64
- const slot = $derived({
65
- open: context.menuState === MenuStates.Open,
66
- close: context.closeMenu,
67
- } satisfies MenuRenderPropArg)
68
-
69
- useFloatingProvider()
70
-
71
- const openClosed = $derived(
72
- match(menuState, {
73
- [MenuStates.Open]: State.Open,
74
- [MenuStates.Closed]: State.Closed,
75
- })
76
- )
77
- createOpenClosedContext({
78
- get value() {
79
- return openClosed
80
- },
10
+ <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_MENU_TAG">import { ActivationTrigger, createMenuContext, MenuStates } from "./context.svelte.js";
11
+ let { ref = $bindable(), __demoMode = false, ...theirProps } = $props();
12
+ const context = createMenuContext({
13
+ __demoMode,
14
+ menuState: __demoMode ? MenuStates.Open : MenuStates.Closed,
15
+ buttonElement: null,
16
+ itemsElement: null,
17
+ items: [],
18
+ searchQuery: "",
19
+ activeItemIndex: null,
20
+ activationTrigger: ActivationTrigger.Other
21
+ });
22
+ const { menuState, itemsElement, buttonElement } = $derived(context);
23
+ const outsideClickEnabled = $derived(menuState === MenuStates.Open);
24
+ useOutsideClick({
25
+ get enabled() {
26
+ return outsideClickEnabled;
27
+ },
28
+ get containers() {
29
+ return [buttonElement, itemsElement];
30
+ },
31
+ cb: (event, target) => {
32
+ context.closeMenu();
33
+ if (!isFocusableElement(target, FocusableMode.Loose)) {
34
+ event.preventDefault();
35
+ buttonElement?.focus();
36
+ }
37
+ }
38
+ });
39
+ const slot = $derived({
40
+ open: context.menuState === MenuStates.Open,
41
+ close: context.closeMenu
42
+ });
43
+ useFloatingProvider();
44
+ const openClosed = $derived(
45
+ match(menuState, {
46
+ [MenuStates.Open]: State.Open,
47
+ [MenuStates.Closed]: State.Closed
81
48
  })
49
+ );
50
+ createOpenClosedContext({
51
+ get value() {
52
+ return openClosed;
53
+ }
54
+ });
82
55
  </script>
83
56
 
84
57
  <ElementOrComponent {theirProps} {slot} defaultTag={DEFAULT_MENU_TAG} name="Menu" bind:ref />
@@ -1,169 +1,129 @@
1
- <script lang="ts" module>
2
- import { tick, type Snippet } from "svelte"
3
- import type { Props, ElementType } from "../utils/types.js"
1
+ <script lang="ts" module>import { tick } from "svelte";
2
+ const DEFAULT_BUTTON_TAG = "button";
3
+ </script>
4
4
 
5
- const DEFAULT_BUTTON_TAG = "button" as const
6
- type ButtonRenderPropArg = {
7
- open: boolean
8
- active: boolean
9
- hover: boolean
10
- focus: boolean
11
- disabled: boolean
12
- autofocus: boolean
5
+ <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BUTTON_TAG">import { useId } from "../hooks/use-id.js";
6
+ import { Focus } from "../utils/calculate-active-index.js";
7
+ import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
8
+ import { useActivePress } from "../hooks/use-active-press.svelte.js";
9
+ import { useResolveButtonType } from "../hooks/use-resolve-button-type.svelte.js";
10
+ import { useFloatingReference, useFloatingReferenceProps } from "../internal/floating.svelte.js";
11
+ import { useHover } from "../hooks/use-hover.svelte.js";
12
+ import { mergeProps } from "../utils/render.js";
13
+ import { MenuStates, useMenuContext } from "./context.svelte.js";
14
+ import { untrack } from "svelte";
15
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte";
16
+ const internalId = useId();
17
+ let {
18
+ ref = $bindable(),
19
+ id = `headlessui-menu-button-${internalId}`,
20
+ disabled = false,
21
+ autofocus = false,
22
+ ...theirProps
23
+ } = $props();
24
+ const _state = useMenuContext("MenuButton");
25
+ const floatingReference = useFloatingReference();
26
+ const { setReference } = $derived(floatingReference);
27
+ const { getReferenceProps: getFloatingReferenceProps } = useFloatingReferenceProps();
28
+ $effect(() => {
29
+ untrack(() => _state.setButtonElement(ref ? ref : null));
30
+ setReference(ref);
31
+ });
32
+ const handleKeyDown = async (event) => {
33
+ switch (event.key) {
34
+ case " ":
35
+ case "Enter":
36
+ case "ArrowDown":
37
+ event.preventDefault();
38
+ event.stopPropagation();
39
+ _state.openMenu();
40
+ await tick();
41
+ _state.goToItem({ focus: Focus.First });
42
+ break;
43
+ case "ArrowUp":
44
+ event.preventDefault();
45
+ event.stopPropagation();
46
+ _state.openMenu();
47
+ await tick();
48
+ _state.goToItem({ focus: Focus.Last });
49
+ break;
13
50
  }
14
- type ButtonPropsWeControl = "aria-controls" | "aria-expanded" | "aria-haspopup"
15
-
16
- export type MenuButtonProps<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = Props<
17
- TTag,
18
- ButtonRenderPropArg,
19
- ButtonPropsWeControl,
20
- {
21
- id?: string
22
- disabled?: boolean
23
- autofocus?: boolean
24
- type?: string
51
+ };
52
+ const handleKeyUp = (event) => {
53
+ switch (event.key) {
54
+ case " ":
55
+ event.preventDefault();
56
+ break;
57
+ }
58
+ };
59
+ const handleClick = async (event) => {
60
+ if (disabled) return;
61
+ if (_state.menuState === MenuStates.Open) {
62
+ _state.closeMenu();
63
+ await tick();
64
+ _state.buttonElement?.focus({ preventScroll: true });
65
+ } else {
66
+ event.preventDefault();
67
+ _state.openMenu();
68
+ }
69
+ };
70
+ const { isFocusVisible: focus, focusProps } = $derived(
71
+ useFocusRing({
72
+ get autofocus() {
73
+ return autofocus;
25
74
  }
26
- >
27
- </script>
28
-
29
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BUTTON_TAG">
30
- import { useId } from "../hooks/use-id.js"
31
- import { Focus } from "../utils/calculate-active-index.js"
32
- import { useFocusRing } from "../hooks/use-focus-ring.svelte.js"
33
- import { useActivePress } from "../hooks/use-active-press.svelte.js"
34
- import { useResolveButtonType } from "../hooks/use-resolve-button-type.svelte.js"
35
- import { useFloatingReference, useFloatingReferenceProps } from "../internal/floating.svelte.js"
36
- import { useHover } from "../hooks/use-hover.svelte.js"
37
- import { mergeProps } from "../utils/render.js"
38
- import { MenuStates, useMenuContext } from "./context.svelte.js"
39
- import { untrack } from "svelte"
40
- import ElementOrComponent from "../utils/ElementOrComponent.svelte"
41
-
42
- const internalId = useId()
43
- let {
44
- ref = $bindable(),
45
- id = `headlessui-menu-button-${internalId}`,
46
- disabled = false,
47
- autofocus = false,
48
- ...theirProps
49
- }: { as?: TTag } & MenuButtonProps<TTag> = $props()
50
- const _state = useMenuContext("MenuButton")
51
- const floatingReference = useFloatingReference()
52
- const { setReference } = $derived(floatingReference)
53
- const { getReferenceProps: getFloatingReferenceProps } = useFloatingReferenceProps()
54
- $effect(() => {
55
- untrack(() => _state.setButtonElement(ref ? (ref as HTMLButtonElement) : null))
56
- setReference(ref)
57
75
  })
58
-
59
- const handleKeyDown = async (event: KeyboardEvent) => {
60
- switch (event.key) {
61
- // Ref: https://www.w3.org/WAI/ARIA/apg/patterns/menubutton/#keyboard-interaction-13
62
-
63
- case " ":
64
- case "Enter":
65
- case "ArrowDown":
66
- event.preventDefault()
67
- event.stopPropagation()
68
- _state.openMenu()
69
- await tick()
70
- _state.goToItem({ focus: Focus.First })
71
- break
72
-
73
- case "ArrowUp":
74
- event.preventDefault()
75
- event.stopPropagation()
76
- _state.openMenu()
77
- await tick()
78
- _state.goToItem({ focus: Focus.Last })
79
- break
80
- }
81
- }
82
-
83
- const handleKeyUp = (event: KeyboardEvent) => {
84
- switch (event.key) {
85
- case " ":
86
- // Required for firefox, event.preventDefault() in handleKeyDown for
87
- // the Space key doesn't cancel the handleKeyUp, which in turn
88
- // triggers a *click*.
89
- event.preventDefault()
90
- break
76
+ );
77
+ const { isHovered: hover, hoverProps } = $derived(
78
+ useHover({
79
+ get disabled() {
80
+ return disabled;
91
81
  }
92
- }
93
-
94
- const handleClick = async (event: MouseEvent) => {
95
- //if (isDisabledReactIssue7711(event.currentTarget)) return event.preventDefault()
96
- if (disabled) return
97
- if (_state.menuState === MenuStates.Open) {
98
- _state.closeMenu()
99
- await tick()
100
- _state.buttonElement?.focus({ preventScroll: true })
101
- } else {
102
- event.preventDefault()
103
- _state.openMenu()
82
+ })
83
+ );
84
+ const { pressed: active, pressProps } = $derived(
85
+ useActivePress({
86
+ get disabled() {
87
+ return disabled;
104
88
  }
89
+ })
90
+ );
91
+ const slot = $derived({
92
+ open: _state.menuState === MenuStates.Open,
93
+ active: active || _state.menuState === MenuStates.Open,
94
+ disabled,
95
+ hover,
96
+ focus,
97
+ autofocus: autofocus ?? false
98
+ });
99
+ const buttonType = useResolveButtonType({
100
+ get props() {
101
+ return { type: theirProps.type, as: theirProps.as };
102
+ },
103
+ get ref() {
104
+ return { current: _state.buttonElement };
105
105
  }
106
-
107
- const { isFocusVisible: focus, focusProps } = $derived(
108
- useFocusRing({
109
- get autofocus() {
110
- return autofocus
111
- },
112
- })
113
- )
114
- const { isHovered: hover, hoverProps } = $derived(
115
- useHover({
116
- get disabled() {
117
- return disabled
118
- },
119
- })
120
- )
121
- const { pressed: active, pressProps } = $derived(
122
- useActivePress({
123
- get disabled() {
124
- return disabled
125
- },
126
- })
127
- )
128
-
129
- const slot = $derived({
130
- open: _state.menuState === MenuStates.Open,
131
- active: active || _state.menuState === MenuStates.Open,
132
- disabled,
133
- hover,
134
- focus,
135
- autofocus: autofocus ?? false,
136
- } satisfies ButtonRenderPropArg)
137
-
138
- const buttonType = useResolveButtonType({
139
- get props() {
140
- return { type: theirProps.type, as: theirProps.as }
141
- },
142
- get ref() {
143
- return { current: _state.buttonElement }
106
+ });
107
+ const ourProps = $derived(
108
+ mergeProps(
109
+ {
110
+ ...getFloatingReferenceProps(),
111
+ id,
112
+ type: buttonType.type,
113
+ "aria-haspopup": "menu",
114
+ "aria-controls": _state.itemsElement?.id,
115
+ "aria-expanded": _state.menuState === MenuStates.Open,
116
+ disabled: disabled || void 0,
117
+ autofocus,
118
+ onkeydown: handleKeyDown,
119
+ onkeyup: handleKeyUp,
120
+ onclick: handleClick
144
121
  },
145
- })
146
-
147
- const ourProps = $derived(
148
- mergeProps(
149
- {
150
- ...getFloatingReferenceProps(),
151
- id,
152
- type: buttonType.type,
153
- "aria-haspopup": "menu",
154
- "aria-controls": _state.itemsElement?.id,
155
- "aria-expanded": _state.menuState === MenuStates.Open,
156
- disabled: disabled || undefined,
157
- autofocus,
158
- onkeydown: handleKeyDown,
159
- onkeyup: handleKeyUp,
160
- onclick: handleClick,
161
- },
162
- focusProps,
163
- hoverProps,
164
- pressProps
165
- )
122
+ focusProps,
123
+ hoverProps,
124
+ pressProps
166
125
  )
126
+ );
167
127
  </script>
168
128
 
169
129
  <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_BUTTON_TAG} name="MenuButton" bind:ref />
@@ -1,37 +1,19 @@
1
- <script lang="ts" module>
2
- import { onMount, type Snippet } from "svelte"
3
- import type { ElementType, Props } from "../utils/types.js"
4
-
5
- const DEFAULT_HEADING_TAG = "header" as const
6
- type HeadingRenderPropArg = {}
7
- type HeadingPropsWeControl = "role"
8
-
9
- export type MenuHeadingProps<TTag extends ElementType = typeof DEFAULT_HEADING_TAG> = Props<
10
- TTag,
11
- HeadingRenderPropArg,
12
- HeadingPropsWeControl,
13
- {
14
- id?: string
15
- }
16
- >
1
+ <script lang="ts" module>import { onMount } from "svelte";
2
+ const DEFAULT_HEADING_TAG = "header";
17
3
  </script>
18
4
 
19
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_HEADING_TAG">
20
- import { useId } from "../hooks/use-id.js"
21
- import { useLabelContext } from "../label/context.svelte.js"
22
- import ElementOrComponent from "../utils/ElementOrComponent.svelte"
23
-
24
- const internalId = useId()
25
- let {
26
- ref = $bindable(),
27
- id = `headlessui-menu-heading-${internalId}`,
28
- ...theirProps
29
- }: { as?: TTag } & MenuHeadingProps<TTag> = $props()
30
-
31
- const context = useLabelContext()
32
- onMount(() => context.register(id))
33
-
34
- const ourProps = $derived({ id, role: "presentation", ...context.props })
5
+ <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_HEADING_TAG">import { useId } from "../hooks/use-id.js";
6
+ import { useLabelContext } from "../label/context.svelte.js";
7
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte";
8
+ const internalId = useId();
9
+ let {
10
+ ref = $bindable(),
11
+ id = `headlessui-menu-heading-${internalId}`,
12
+ ...theirProps
13
+ } = $props();
14
+ const context = useLabelContext();
15
+ onMount(() => context.register(id));
16
+ const ourProps = $derived({ id, role: "presentation", ...context.props });
35
17
  </script>
36
18
 
37
19
  <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_HEADING_TAG} name="MenuItem" bind:ref />