@pzerelles/headlessui-svelte 2.1.2-next.32 → 2.1.2-next.33

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 (114) hide show
  1. package/dist/button/Button.svelte +8 -9
  2. package/dist/button/Button.svelte.d.ts +4 -31
  3. package/dist/checkbox/Checkbox.svelte +14 -11
  4. package/dist/checkbox/Checkbox.svelte.d.ts +14 -31
  5. package/dist/close-button/CloseButton.svelte +4 -7
  6. package/dist/close-button/CloseButton.svelte.d.ts +2 -43
  7. package/dist/data-interactive/DataInteractive.svelte +5 -19
  8. package/dist/data-interactive/DataInteractive.svelte.d.ts +7 -29
  9. package/dist/description/Description.svelte +15 -12
  10. package/dist/description/Description.svelte.d.ts +7 -27
  11. package/dist/dialog/Dialog.svelte +34 -32
  12. package/dist/dialog/Dialog.svelte.d.ts +4 -41
  13. package/dist/dialog/DialogBackdrop.svelte +10 -10
  14. package/dist/dialog/DialogBackdrop.svelte.d.ts +4 -28
  15. package/dist/dialog/DialogPanel.svelte +18 -10
  16. package/dist/dialog/DialogPanel.svelte.d.ts +4 -29
  17. package/dist/dialog/DialogTitle.svelte +19 -7
  18. package/dist/dialog/DialogTitle.svelte.d.ts +6 -26
  19. package/dist/field/Field.svelte +9 -15
  20. package/dist/field/Field.svelte.d.ts +4 -29
  21. package/dist/fieldset/Fieldset.svelte +10 -13
  22. package/dist/fieldset/Fieldset.svelte.d.ts +5 -30
  23. package/dist/focus-trap/FocusTrap.svelte +20 -24
  24. package/dist/focus-trap/FocusTrap.svelte.d.ts +5 -33
  25. package/dist/hooks/use-inert-others.svelte.js +10 -10
  26. package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
  27. package/dist/input/Input.svelte +19 -9
  28. package/dist/input/Input.svelte.d.ts +13 -26
  29. package/dist/internal/FocusSentinel.svelte +33 -32
  30. package/dist/internal/FormResolver.svelte +5 -1
  31. package/dist/internal/Hidden.svelte +9 -23
  32. package/dist/internal/Hidden.svelte.d.ts +4 -29
  33. package/dist/internal/MainTreeProvider.svelte +1 -1
  34. package/dist/label/Label.svelte +19 -13
  35. package/dist/label/Label.svelte.d.ts +7 -31
  36. package/dist/legend/Legend.svelte +20 -6
  37. package/dist/legend/Legend.svelte.d.ts +4 -3
  38. package/dist/listbox/Listbox.svelte +6 -17
  39. package/dist/listbox/Listbox.svelte.d.ts +11 -34
  40. package/dist/listbox/ListboxButton.svelte +14 -13
  41. package/dist/listbox/ListboxButton.svelte.d.ts +5 -31
  42. package/dist/listbox/ListboxOption.svelte +15 -15
  43. package/dist/listbox/ListboxOption.svelte.d.ts +12 -25
  44. package/dist/listbox/ListboxOptions.svelte +13 -11
  45. package/dist/listbox/ListboxOptions.svelte.d.ts +4 -37
  46. package/dist/listbox/ListboxSelectedOption.svelte +15 -17
  47. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +8 -32
  48. package/dist/menu/Menu.svelte +5 -7
  49. package/dist/menu/Menu.svelte.d.ts +3 -30
  50. package/dist/menu/MenuButton.svelte +12 -12
  51. package/dist/menu/MenuButton.svelte.d.ts +4 -33
  52. package/dist/menu/MenuHeading.svelte +10 -9
  53. package/dist/menu/MenuHeading.svelte.d.ts +4 -30
  54. package/dist/menu/MenuItem.svelte +12 -12
  55. package/dist/menu/MenuItem.svelte.d.ts +5 -31
  56. package/dist/menu/MenuItems.svelte +12 -13
  57. package/dist/menu/MenuItems.svelte.d.ts +4 -37
  58. package/dist/menu/MenuSection.svelte +9 -8
  59. package/dist/menu/MenuSection.svelte.d.ts +5 -28
  60. package/dist/menu/MenuSeparator.svelte +9 -7
  61. package/dist/menu/MenuSeparator.svelte.d.ts +5 -27
  62. package/dist/popover/Popover.svelte +8 -8
  63. package/dist/popover/Popover.svelte.d.ts +4 -29
  64. package/dist/popover/PopoverBackdrop.svelte +15 -12
  65. package/dist/popover/PopoverBackdrop.svelte.d.ts +6 -33
  66. package/dist/popover/PopoverButton.svelte +34 -34
  67. package/dist/popover/PopoverButton.svelte.d.ts +6 -28
  68. package/dist/popover/PopoverGroup.svelte +14 -13
  69. package/dist/popover/PopoverGroup.svelte.d.ts +5 -27
  70. package/dist/popover/PopoverPanel.svelte +46 -41
  71. package/dist/popover/PopoverPanel.svelte.d.ts +5 -35
  72. package/dist/popover/index.d.ts +1 -1
  73. package/dist/portal/InternalPortal.svelte +17 -16
  74. package/dist/portal/InternalPortal.svelte.d.ts +4 -29
  75. package/dist/portal/Portal.svelte +7 -6
  76. package/dist/portal/Portal.svelte.d.ts +2 -18
  77. package/dist/portal/PortalGroup.svelte +5 -13
  78. package/dist/portal/PortalGroup.svelte.d.ts +3 -30
  79. package/dist/select/Select.svelte +10 -9
  80. package/dist/select/Select.svelte.d.ts +5 -31
  81. package/dist/switch/Switch.svelte +13 -12
  82. package/dist/switch/Switch.svelte.d.ts +5 -37
  83. package/dist/switch/SwitchGroup.svelte +5 -5
  84. package/dist/switch/SwitchGroup.svelte.d.ts +7 -27
  85. package/dist/tabs/Tab.svelte +12 -12
  86. package/dist/tabs/Tab.svelte.d.ts +4 -31
  87. package/dist/tabs/TabGroup.svelte +8 -8
  88. package/dist/tabs/TabGroup.svelte.d.ts +4 -33
  89. package/dist/tabs/TabList.svelte +7 -8
  90. package/dist/tabs/TabList.svelte.d.ts +5 -27
  91. package/dist/tabs/TabPanel.svelte +11 -11
  92. package/dist/tabs/TabPanel.svelte.d.ts +4 -33
  93. package/dist/tabs/TabPanels.svelte +5 -5
  94. package/dist/tabs/TabPanels.svelte.d.ts +5 -26
  95. package/dist/textarea/Textarea.svelte +12 -10
  96. package/dist/textarea/Textarea.svelte.d.ts +13 -26
  97. package/dist/transition/InternalTransitionChild.svelte +19 -12
  98. package/dist/transition/InternalTransitionChild.svelte.d.ts +3 -32
  99. package/dist/transition/Transition.svelte +12 -21
  100. package/dist/transition/Transition.svelte.d.ts +3 -35
  101. package/dist/transition/TransitionChild.svelte +9 -10
  102. package/dist/transition/TransitionChild.svelte.d.ts +8 -34
  103. package/dist/transition/context.svelte.js +7 -7
  104. package/dist/utils/ElementOrComponent.svelte +56 -15
  105. package/dist/utils/ElementOrComponent.svelte.d.ts +30 -23
  106. package/dist/utils/state.js +4 -4
  107. package/dist/utils/types.d.ts +12 -9
  108. package/package.json +12 -12
  109. package/dist/combobox/Combobox.svelte +0 -53
  110. package/dist/combobox/Combobox.svelte.d.ts +0 -50
  111. package/dist/utils/Generic.svelte +0 -57
  112. package/dist/utils/Generic.svelte.d.ts +0 -31
  113. package/dist/utils/alternative-types.d.ts +0 -20
  114. package/dist/utils/alternative-types.js +0 -1
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
3
3
  import { mergeProps, RenderFeatures, type PropsForFeatures } from "../utils/render.js"
4
4
  import {
5
5
  useFloatingPanel,
@@ -16,11 +16,11 @@
16
16
 
17
17
  let ItemsRenderFeatures = RenderFeatures.RenderStrategy | RenderFeatures.Static
18
18
 
19
- export type MenuItemsProps<TTag extends ElementType = typeof DEFAULT_ITEMS_TAG> = Props<
20
- TTag,
19
+ export type MenuItemsProps = Props<
20
+ typeof DEFAULT_ITEMS_TAG,
21
21
  ItemsRenderPropArg,
22
- ItemsPropsWeControl,
23
22
  {
23
+ element?: HTMLElement
24
24
  id?: string
25
25
  anchor?: AnchorProps
26
26
  portal?: boolean
@@ -30,7 +30,7 @@
30
30
  >
31
31
  </script>
32
32
 
33
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_ITEMS_TAG">
33
+ <script lang="ts">
34
34
  import { useId } from "../hooks/use-id.js"
35
35
  import { getOwnerDocument } from "../utils/owner.js"
36
36
  import { State, useOpenClosed } from "../internal/open-closed.js"
@@ -43,7 +43,7 @@
43
43
  import { Focus } from "../utils/calculate-active-index.js"
44
44
  import { focusFrom, Focus as FocusManagementFocus, restoreFocusIfNecessary } from "../utils/focus-management.js"
45
45
  import { useElementSize } from "../hooks/use-element-size.svelte.js"
46
- import { tick, untrack, type Snippet } from "svelte"
46
+ import { tick, untrack } from "svelte"
47
47
  import Portal from "../portal/Portal.svelte"
48
48
  import { MenuStates, useMenuContext } from "./context.svelte.js"
49
49
  import { useTreeWalker } from "../hooks/use-tree-walker.svelte.js"
@@ -51,15 +51,14 @@
51
51
 
52
52
  const internalId = useId()
53
53
  let {
54
- as = DEFAULT_ITEMS_TAG as TTag,
55
- ref = $bindable(),
54
+ element = $bindable(),
56
55
  id = `headlessui-menu-items-${internalId}`,
57
56
  anchor: rawAnchor,
58
57
  portal = false,
59
58
  modal = true,
60
59
  transition = false,
61
60
  ...theirProps
62
- }: { as?: TTag } & MenuItemsProps<TTag> = $props()
61
+ }: MenuItemsProps = $props()
63
62
  const resolvedAnchor = useResolvedAnchor({
64
63
  get anchor() {
65
64
  return rawAnchor
@@ -76,8 +75,8 @@
76
75
  const getFloatingPanelProps = useFloatingPanelProps()
77
76
 
78
77
  $effect(() => {
79
- untrack(() => _state.setItemsElement(ref ?? null))
80
- if (anchor) setFloating(ref ?? null)
78
+ untrack(() => _state.setItemsElement(element ?? null))
79
+ if (anchor) setFloating(element ?? null)
81
80
  })
82
81
  const ownerDocument = $derived(getOwnerDocument(_state.itemsElement))
83
82
 
@@ -99,7 +98,7 @@
99
98
  return transition
100
99
  },
101
100
  get element() {
102
- return ref
101
+ return element
103
102
  },
104
103
  get show() {
105
104
  return show
@@ -315,6 +314,6 @@
315
314
  features={ItemsRenderFeatures}
316
315
  visible={panelEnabled}
317
316
  name="MenuItems"
318
- bind:ref
317
+ bind:element
319
318
  />
320
319
  </Portal>
@@ -1,51 +1,18 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  import { type PropsForFeatures } from "../utils/render.js";
3
3
  import { type AnchorProps } from "../internal/floating.svelte.js";
4
4
  declare const DEFAULT_ITEMS_TAG: "div";
5
5
  type ItemsRenderPropArg = {
6
6
  open: boolean;
7
7
  };
8
- type ItemsPropsWeControl = "aria-activedescendant" | "aria-labelledby" | "role" | "tabIndex";
9
8
  declare let ItemsRenderFeatures: number;
10
- export type MenuItemsProps<TTag extends ElementType = typeof DEFAULT_ITEMS_TAG> = Props<TTag, ItemsRenderPropArg, ItemsPropsWeControl, {
9
+ export type MenuItemsProps = Props<typeof DEFAULT_ITEMS_TAG, ItemsRenderPropArg, {
10
+ element?: HTMLElement;
11
11
  id?: string;
12
12
  anchor?: AnchorProps;
13
13
  portal?: boolean;
14
14
  modal?: boolean;
15
15
  transition?: boolean;
16
16
  } & PropsForFeatures<typeof ItemsRenderFeatures>>;
17
- import { type Snippet } from "svelte";
18
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_ITEMS_TAG> {
19
- props(): {
20
- as?: TTag | undefined;
21
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "anchor" | "unmount" | "static" | "id" | "transition" | "portal" | "modal" | ItemsPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
22
- children?: Snippet<[ItemsRenderPropArg & {
23
- props?: Record<string, any>;
24
- }]> | undefined;
25
- class?: string | ((bag: ItemsRenderPropArg) => string) | null | undefined;
26
- ref?: HTMLElement;
27
- } & {
28
- id?: string;
29
- anchor?: AnchorProps;
30
- portal?: boolean;
31
- modal?: boolean;
32
- transition?: boolean;
33
- } & {
34
- static?: boolean | undefined;
35
- unmount?: boolean | undefined;
36
- };
37
- events(): {};
38
- slots(): {};
39
- bindings(): "ref";
40
- exports(): {};
41
- }
42
- interface $$IsomorphicComponent {
43
- new <TTag extends ElementType = typeof DEFAULT_ITEMS_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
44
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
45
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
46
- <TTag extends ElementType = typeof DEFAULT_ITEMS_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
47
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
48
- }
49
- declare const MenuItems: $$IsomorphicComponent;
50
- type MenuItems<TTag extends ElementType = typeof DEFAULT_ITEMS_TAG> = InstanceType<typeof MenuItems<TTag>>;
17
+ declare const MenuItems: import("svelte").Component<MenuItemsProps, {}, "element">;
51
18
  export default MenuItems;
@@ -1,29 +1,30 @@
1
1
  <script lang="ts" module>
2
- import type { Snippet } from "svelte"
3
- import type { ElementType, Props } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
4
3
 
5
4
  const DEFAULT_SECTION_TAG = "div" as const
6
5
  type SectionRenderPropArg = {}
7
6
  type SectionPropsWeControl = "role" | "aria-labelledby"
8
7
 
9
- export type MenuSectionProps<TTag extends ElementType = typeof DEFAULT_SECTION_TAG> = Props<
10
- TTag,
8
+ export type MenuSectionProps = Props<
9
+ typeof DEFAULT_SECTION_TAG,
11
10
  SectionRenderPropArg,
12
- SectionPropsWeControl
11
+ {
12
+ element?: HTMLElement
13
+ }
13
14
  >
14
15
  </script>
15
16
 
16
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_SECTION_TAG">
17
+ <script lang="ts">
17
18
  import { useLabels } from "../label/context.svelte.js"
18
19
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
19
20
 
20
21
  const labelledby = useLabels()
21
22
 
22
- let { ref = $bindable(), ...theirProps }: { as?: TTag } & MenuSectionProps<TTag> = $props()
23
+ let { element = $bindable(), ...theirProps }: MenuSectionProps = $props()
23
24
  const ourProps = $derived({
24
25
  "aria-labelledby": labelledby,
25
26
  role: "group",
26
27
  })
27
28
  </script>
28
29
 
29
- <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_SECTION_TAG} name="MenuSection" bind:ref />
30
+ <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_SECTION_TAG} name="MenuSection" bind:element />
@@ -1,31 +1,8 @@
1
- import type { Snippet } from "svelte";
2
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
3
2
  declare const DEFAULT_SECTION_TAG: "div";
4
3
  type SectionRenderPropArg = {};
5
- type SectionPropsWeControl = "role" | "aria-labelledby";
6
- export type MenuSectionProps<TTag extends ElementType = typeof DEFAULT_SECTION_TAG> = Props<TTag, SectionRenderPropArg, SectionPropsWeControl>;
7
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_SECTION_TAG> {
8
- props(): {
9
- as?: TTag | undefined;
10
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | SectionPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
11
- children?: Snippet<[{
12
- props?: Record<string, any>;
13
- }]> | undefined;
14
- class?: string | ((bag: SectionRenderPropArg) => string) | null | undefined;
15
- ref?: HTMLElement;
16
- };
17
- events(): {};
18
- slots(): {};
19
- bindings(): "ref";
20
- exports(): {};
21
- }
22
- interface $$IsomorphicComponent {
23
- new <TTag extends ElementType = typeof DEFAULT_SECTION_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
24
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
25
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
26
- <TTag extends ElementType = typeof DEFAULT_SECTION_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
27
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
28
- }
29
- declare const MenuSection: $$IsomorphicComponent;
30
- type MenuSection<TTag extends ElementType = typeof DEFAULT_SECTION_TAG> = InstanceType<typeof MenuSection<TTag>>;
4
+ export type MenuSectionProps = Props<typeof DEFAULT_SECTION_TAG, SectionRenderPropArg, {
5
+ element?: HTMLElement;
6
+ }>;
7
+ declare const MenuSection: import("svelte").Component<MenuSectionProps, {}, "element">;
31
8
  export default MenuSection;
@@ -1,22 +1,24 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
3
3
 
4
4
  const DEFAULT_SEPARATOR_TAG = "div" as const
5
5
  type SeparatorRenderPropArg = {}
6
6
  type SeparatorPropsWeControl = "role"
7
7
 
8
- export type MenuSeparatorProps<TTag extends ElementType = typeof DEFAULT_SEPARATOR_TAG> = Props<
9
- TTag,
8
+ export type MenuSeparatorProps = Props<
9
+ typeof DEFAULT_SEPARATOR_TAG,
10
10
  SeparatorRenderPropArg,
11
- SeparatorPropsWeControl
11
+ {
12
+ element?: HTMLElement
13
+ }
12
14
  >
13
15
  </script>
14
16
 
15
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_SEPARATOR_TAG">
17
+ <script lang="ts">
16
18
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
17
19
 
18
- let { ref = $bindable(), ...theirProps }: { as?: TTag } & MenuSeparatorProps<TTag> = $props()
20
+ let { element = $bindable(), ...theirProps }: MenuSeparatorProps = $props()
19
21
  const ourProps = { role: "separator" }
20
22
  </script>
21
23
 
22
- <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_SEPARATOR_TAG} name="MenuSeparator" bind:ref />
24
+ <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_SEPARATOR_TAG} name="MenuSeparator" bind:element />
@@ -1,30 +1,8 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare const DEFAULT_SEPARATOR_TAG: "div";
3
3
  type SeparatorRenderPropArg = {};
4
- type SeparatorPropsWeControl = "role";
5
- export type MenuSeparatorProps<TTag extends ElementType = typeof DEFAULT_SEPARATOR_TAG> = Props<TTag, SeparatorRenderPropArg, SeparatorPropsWeControl>;
6
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_SEPARATOR_TAG> {
7
- props(): {
8
- as?: TTag | undefined;
9
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "role"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
10
- children?: import("svelte").Snippet<[{
11
- props?: Record<string, any>;
12
- }]> | undefined;
13
- class?: string | ((bag: SeparatorRenderPropArg) => string) | null | undefined;
14
- ref?: HTMLElement;
15
- };
16
- events(): {};
17
- slots(): {};
18
- bindings(): "ref";
19
- exports(): {};
20
- }
21
- interface $$IsomorphicComponent {
22
- new <TTag extends ElementType = typeof DEFAULT_SEPARATOR_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
23
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
24
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
25
- <TTag extends ElementType = typeof DEFAULT_SEPARATOR_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
26
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
27
- }
28
- declare const MenuSeparator: $$IsomorphicComponent;
29
- type MenuSeparator<TTag extends ElementType = typeof DEFAULT_SEPARATOR_TAG> = InstanceType<typeof MenuSeparator<TTag>>;
4
+ export type MenuSeparatorProps = Props<typeof DEFAULT_SEPARATOR_TAG, SeparatorRenderPropArg, {
5
+ element?: HTMLElement;
6
+ }>;
7
+ declare const MenuSeparator: import("svelte").Component<MenuSeparatorProps, {}, "element">;
30
8
  export default MenuSeparator;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
3
3
 
4
4
  export const DEFAULT_POPOVER_TAG = "div" as const
5
5
  type PopoverRenderPropArg = {
@@ -8,17 +8,17 @@
8
8
  }
9
9
  type PopoverPropsWeControl = never
10
10
 
11
- export type PopoverProps<TTag extends ElementType = typeof DEFAULT_POPOVER_TAG> = Props<
12
- TTag,
11
+ export type PopoverProps = Props<
12
+ typeof DEFAULT_POPOVER_TAG,
13
13
  PopoverRenderPropArg,
14
- PopoverPropsWeControl,
15
14
  {
15
+ element?: HTMLElement
16
16
  __demoMode?: boolean
17
17
  }
18
18
  >
19
19
  </script>
20
20
 
21
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_POPOVER_TAG">
21
+ <script lang="ts">
22
22
  import { getOwnerDocument } from "../utils/owner.js"
23
23
 
24
24
  import { setContext, untrack } from "svelte"
@@ -41,7 +41,7 @@
41
41
  import { createOpenClosedContext, State } from "../internal/open-closed.js"
42
42
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
43
43
 
44
- let { ref = $bindable(), __demoMode = false, ...theirProps }: { as?: TTag } & PopoverProps<TTag> = $props()
44
+ let { element = $bindable(), __demoMode = false, ...theirProps }: PopoverProps = $props()
45
45
 
46
46
  let buttons = $state([])
47
47
  const context = createPopoverContext({
@@ -60,7 +60,7 @@
60
60
  afterButtonSentinel,
61
61
  } = $derived(context)
62
62
 
63
- const ownerDocument = $derived(getOwnerDocument(ref ?? button))
63
+ const ownerDocument = $derived(getOwnerDocument(element ?? button))
64
64
 
65
65
  const isPortalled = $derived.by(() => {
66
66
  if (!button) return false
@@ -223,5 +223,5 @@
223
223
  </script>
224
224
 
225
225
  <MainTreeProvider node={mainTreeNode.node}>
226
- <ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_POPOVER_TAG} name="Popover" bind:ref />
226
+ <ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_POPOVER_TAG} name="Popover" bind:element />
227
227
  </MainTreeProvider>
@@ -1,38 +1,13 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  export declare const DEFAULT_POPOVER_TAG: "div";
3
3
  type PopoverRenderPropArg = {
4
4
  open: boolean;
5
5
  close(focusableElement?: HTMLElement | MouseEvent<HTMLElement>): void;
6
6
  };
7
- type PopoverPropsWeControl = never;
8
- export type PopoverProps<TTag extends ElementType = typeof DEFAULT_POPOVER_TAG> = Props<TTag, PopoverRenderPropArg, PopoverPropsWeControl, {
7
+ export type PopoverProps = Props<typeof DEFAULT_POPOVER_TAG, PopoverRenderPropArg, {
8
+ element?: HTMLElement;
9
9
  __demoMode?: boolean;
10
10
  }>;
11
11
  import { type MouseEvent } from "./context.svelte.js";
12
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_POPOVER_TAG> {
13
- props(): {
14
- as?: TTag | undefined;
15
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "__demoMode"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
16
- children?: import("svelte").Snippet<[PopoverRenderPropArg & {
17
- props?: Record<string, any>;
18
- }]> | undefined;
19
- class?: string | ((bag: PopoverRenderPropArg) => string) | null | undefined;
20
- ref?: HTMLElement;
21
- } & {
22
- __demoMode?: boolean;
23
- };
24
- events(): {};
25
- slots(): {};
26
- bindings(): "ref";
27
- exports(): {};
28
- }
29
- interface $$IsomorphicComponent {
30
- new <TTag extends ElementType = typeof DEFAULT_POPOVER_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
31
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
32
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
33
- <TTag extends ElementType = typeof DEFAULT_POPOVER_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
34
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
35
- }
36
- declare const Popover: $$IsomorphicComponent;
37
- type Popover<TTag extends ElementType = typeof DEFAULT_POPOVER_TAG> = InstanceType<typeof Popover<TTag>>;
12
+ declare const Popover: import("svelte").Component<PopoverProps, {}, "element">;
38
13
  export default Popover;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props, PropsOf } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
3
3
  import { RenderFeatures, type PropsForFeatures } from "../utils/render.js"
4
4
 
5
5
  let DEFAULT_BACKDROP_TAG = "div" as const
@@ -10,17 +10,20 @@
10
10
 
11
11
  const BackdropRenderFeatures = RenderFeatures.RenderStrategy | RenderFeatures.Static
12
12
 
13
- export type PopoverBackdropProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = Props<
14
- TTag,
13
+ export type PopoverBackdropProps = Props<
14
+ typeof DEFAULT_BACKDROP_TAG,
15
15
  BackdropRenderPropArg,
16
- BackdropPropsWeControl,
17
- { transition?: boolean } & PropsForFeatures<typeof BackdropRenderFeatures>
16
+ {
17
+ element?: HTMLElement
18
+ id?: string
19
+ transition?: boolean
20
+ } & PropsForFeatures<typeof BackdropRenderFeatures>
18
21
  >
19
22
 
20
- export type PopoverOverlayProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = PopoverBackdropProps<TTag>
23
+ export type PopoverOverlayProps = PopoverBackdropProps
21
24
  </script>
22
25
 
23
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG">
26
+ <script lang="ts">
24
27
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
25
28
  import { useId } from "../hooks/use-id.js"
26
29
  import { PopoverStates, usePopoverContext } from "./context.svelte.js"
@@ -29,11 +32,11 @@
29
32
 
30
33
  const internalId = useId()
31
34
  let {
32
- ref = $bindable(),
33
- id = `headlessui-popover-backdrop-${internalId}` as PropsOf<TTag>["id"],
35
+ element = $bindable(),
36
+ id = `headlessui-popover-backdrop-${internalId}`,
34
37
  transition = false,
35
38
  ...theirProps
36
- }: { as?: TTag } & PopoverBackdropProps<TTag> = $props()
39
+ }: PopoverBackdropProps = $props()
37
40
  const context = usePopoverContext("PopoverBackdrop")
38
41
  const { popoverState } = $derived(context)
39
42
 
@@ -43,7 +46,7 @@
43
46
  return transition
44
47
  },
45
48
  get element() {
46
- return ref
49
+ return element
47
50
  },
48
51
  get show() {
49
52
  return usesOpenClosedState !== null
@@ -78,5 +81,5 @@
78
81
  features={BackdropRenderFeatures}
79
82
  name="PopoverBackdrop"
80
83
  {visible}
81
- bind:ref
84
+ bind:element
82
85
  />
@@ -1,42 +1,15 @@
1
- import type { ElementType, Props, PropsOf } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  import { type PropsForFeatures } from "../utils/render.js";
3
3
  declare let DEFAULT_BACKDROP_TAG: "div";
4
4
  type BackdropRenderPropArg = {
5
5
  open: boolean;
6
6
  };
7
- type BackdropPropsWeControl = "aria-hidden";
8
7
  declare const BackdropRenderFeatures: number;
9
- export type PopoverBackdropProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = Props<TTag, BackdropRenderPropArg, BackdropPropsWeControl, {
8
+ export type PopoverBackdropProps = Props<typeof DEFAULT_BACKDROP_TAG, BackdropRenderPropArg, {
9
+ element?: HTMLElement;
10
+ id?: string;
10
11
  transition?: boolean;
11
12
  } & PropsForFeatures<typeof BackdropRenderFeatures>>;
12
- export type PopoverOverlayProps<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = PopoverBackdropProps<TTag>;
13
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> {
14
- props(): {
15
- as?: TTag | undefined;
16
- } & (Exclude<keyof PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "unmount" | "static" | "aria-hidden" | "transition"> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
17
- children?: import("svelte").Snippet<[BackdropRenderPropArg & {
18
- props?: Record<string, any>;
19
- }]> | undefined;
20
- class?: string | ((bag: BackdropRenderPropArg) => string) | null | undefined;
21
- ref?: HTMLElement;
22
- } & {
23
- transition?: boolean;
24
- } & {
25
- static?: boolean | undefined;
26
- unmount?: boolean | undefined;
27
- };
28
- events(): {};
29
- slots(): {};
30
- bindings(): "ref";
31
- exports(): {};
32
- }
33
- interface $$IsomorphicComponent {
34
- new <TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
35
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
36
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
37
- <TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
38
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
39
- }
40
- declare const PopoverBackdrop: $$IsomorphicComponent;
41
- type PopoverBackdrop<TTag extends ElementType = typeof DEFAULT_BACKDROP_TAG> = InstanceType<typeof PopoverBackdrop<TTag>>;
13
+ export type PopoverOverlayProps = PopoverBackdropProps;
14
+ declare const PopoverBackdrop: import("svelte").Component<PopoverBackdropProps, {}, "element">;
42
15
  export default PopoverBackdrop;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props, PropsOf } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
3
3
 
4
4
  const DEFAULT_BUTTON_TAG = "button" as const
5
5
  export type PopoverButtonSlot = {
@@ -12,20 +12,19 @@
12
12
  }
13
13
  export type PopoverButtonPropsWeControl = "aria-controls" | "aria-expanded"
14
14
 
15
- export type PopoverButtonComponentProps = {
16
- disabled?: boolean
17
- autofocus?: boolean
18
- }
19
-
20
- export type PopoverButtonProps<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = Props<
21
- TTag,
15
+ export type PopoverButtonProps = Props<
16
+ typeof DEFAULT_BUTTON_TAG,
22
17
  PopoverButtonSlot,
23
- PopoverButtonPropsWeControl,
24
- PopoverButtonComponentProps
18
+ {
19
+ element?: HTMLElement
20
+ id?: string
21
+ disabled?: boolean
22
+ autofocus?: boolean
23
+ }
25
24
  >
26
25
  </script>
27
26
 
28
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BUTTON_TAG">
27
+ <script lang="ts">
29
28
  import { useId } from "../hooks/use-id.js"
30
29
  import {
31
30
  PopoverStates,
@@ -48,16 +47,15 @@
48
47
  import { microTask } from "../utils/microTask.js"
49
48
  import Hidden, { HiddenFeatures } from "../internal/Hidden.svelte"
50
49
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
51
- import type { FocusEventHandler } from "svelte/elements"
52
50
 
53
51
  const internalId = useId()
54
52
  let {
55
- ref = $bindable(),
56
- id = `headlessui-popover-button-${internalId}` as PropsOf<TTag>["id"],
53
+ element = $bindable(),
54
+ id = `headlessui-popover-button-${internalId}`,
57
55
  disabled = false,
58
- autofocus = false as PropsOf<TTag>["autofocus"],
56
+ autofocus = false,
59
57
  ...theirProps
60
- }: { as?: TTag } & PopoverButtonProps<TTag> = $props()
58
+ }: PopoverButtonProps = $props()
61
59
  const context = usePopoverContext("PopoverButton")
62
60
  const api = usePopoverAPIContext("PopoverButton")
63
61
  const { isPortalled } = $derived(api)
@@ -111,13 +109,13 @@
111
109
  const floatingReference = useFloatingReference()
112
110
  const { setReference } = $derived(floatingReference)
113
111
  $effect(() => {
114
- setReference(ref)
112
+ setReference(element)
115
113
  })
116
114
  $effect(() => {
117
115
  if (isWithinPanel) return
118
- ref
116
+ element
119
117
  untrack(() => {
120
- if (ref) {
118
+ if (element) {
121
119
  context.buttons.push(uniqueIdentifier)
122
120
  } else {
123
121
  let idx = context.buttons.indexOf(uniqueIdentifier)
@@ -128,10 +126,10 @@
128
126
  console.warn("You are already using a <PopoverButton /> but only 1 <PopoverButton /> is supported.")
129
127
  }
130
128
 
131
- if (ref) context.setButton(ref)
129
+ if (element) context.setButton(element)
132
130
  })
133
131
  })
134
- const ownerDocument = $derived(getOwnerDocument(ref))
132
+ const ownerDocument = $derived(getOwnerDocument(element))
135
133
 
136
134
  const handleKeyDown = (event: KeyboardEvent) => {
137
135
  if (isWithinPanel) {
@@ -158,8 +156,8 @@
158
156
 
159
157
  case "Escape":
160
158
  if (context.popoverState !== PopoverStates.Open) return closeOthers?.(context.buttonId!)
161
- if (!ref) return
162
- if (ownerDocument?.activeElement && !ref.contains(ownerDocument.activeElement)) {
159
+ if (!element) return
160
+ if (ownerDocument?.activeElement && !element.contains(ownerDocument.activeElement)) {
163
161
  return
164
162
  }
165
163
  event.preventDefault()
@@ -234,7 +232,7 @@
234
232
 
235
233
  const type = useResolveButtonType({
236
234
  get props() {
237
- return { type: theirProps.type, as: theirProps.as }
235
+ return { type: theirProps.type ?? undefined, as: element ? element.tagName.toLowerCase() : DEFAULT_BUTTON_TAG }
238
236
  },
239
237
  get ref() {
240
238
  return { current: context.button }
@@ -311,16 +309,18 @@
311
309
  slots={slot}
312
310
  defaultTag={DEFAULT_BUTTON_TAG}
313
311
  name="PopoverButton"
314
- bind:ref
312
+ bind:element
315
313
  />
316
314
  {#if visible && !isWithinPanel && isPortalled}
317
- <Hidden
318
- id={sentinelId}
319
- bind:ref={context.afterButtonSentinel as HTMLElement}
320
- features={HiddenFeatures.Focusable}
321
- data-headlessui-focus-guard
322
- as="button"
323
- type="button"
324
- onfocus={handleFocus}
325
- />
315
+ <Hidden id={sentinelId} features={HiddenFeatures.Focusable} asChild>
316
+ {#snippet children({ props })}
317
+ <button
318
+ {...props}
319
+ type="button"
320
+ data-headlessui-focus-guard
321
+ onfocus={handleFocus}
322
+ bind:this={context.afterButtonSentinel}>&zwnj;</button
323
+ >
324
+ {/snippet}
325
+ </Hidden>
326
326
  {/if}