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

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 (136) hide show
  1. package/dist/button/Button.svelte +9 -10
  2. package/dist/button/Button.svelte.d.ts +5 -32
  3. package/dist/button/index.d.ts +1 -1
  4. package/dist/checkbox/Checkbox.svelte +15 -12
  5. package/dist/checkbox/Checkbox.svelte.d.ts +15 -32
  6. package/dist/checkbox/index.d.ts +1 -1
  7. package/dist/close-button/CloseButton.svelte +4 -7
  8. package/dist/close-button/CloseButton.svelte.d.ts +2 -43
  9. package/dist/close-button/index.d.ts +1 -0
  10. package/dist/close-button/index.js +1 -0
  11. package/dist/data-interactive/DataInteractive.svelte +6 -20
  12. package/dist/data-interactive/DataInteractive.svelte.d.ts +8 -30
  13. package/dist/data-interactive/index.d.ts +1 -1
  14. package/dist/data-interactive/index.js +1 -1
  15. package/dist/description/Description.svelte +15 -12
  16. package/dist/description/Description.svelte.d.ts +7 -27
  17. package/dist/dialog/Dialog.svelte +34 -32
  18. package/dist/dialog/Dialog.svelte.d.ts +4 -41
  19. package/dist/dialog/DialogBackdrop.svelte +10 -11
  20. package/dist/dialog/DialogBackdrop.svelte.d.ts +5 -29
  21. package/dist/dialog/DialogPanel.svelte +18 -11
  22. package/dist/dialog/DialogPanel.svelte.d.ts +5 -30
  23. package/dist/dialog/DialogTitle.svelte +19 -8
  24. package/dist/dialog/DialogTitle.svelte.d.ts +7 -27
  25. package/dist/dialog/context.svelte.js +1 -1
  26. package/dist/dialog/index.d.ts +4 -4
  27. package/dist/dialog/index.js +3 -3
  28. package/dist/field/Field.svelte +10 -18
  29. package/dist/field/Field.svelte.d.ts +4 -30
  30. package/dist/fieldset/Fieldset.svelte +11 -15
  31. package/dist/fieldset/Fieldset.svelte.d.ts +5 -31
  32. package/dist/focus-trap/FocusTrap.svelte +21 -26
  33. package/dist/focus-trap/FocusTrap.svelte.d.ts +5 -34
  34. package/dist/hooks/use-inert-others.svelte.js +10 -10
  35. package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
  36. package/dist/input/Input.svelte +20 -10
  37. package/dist/input/Input.svelte.d.ts +14 -27
  38. package/dist/input/index.d.ts +1 -1
  39. package/dist/internal/FocusSentinel.svelte +33 -32
  40. package/dist/internal/FormResolver.svelte +5 -1
  41. package/dist/internal/Hidden.svelte +10 -24
  42. package/dist/internal/Hidden.svelte.d.ts +5 -30
  43. package/dist/internal/MainTreeProvider.svelte +1 -1
  44. package/dist/label/Label.svelte +19 -13
  45. package/dist/label/Label.svelte.d.ts +7 -31
  46. package/dist/legend/Legend.svelte +20 -6
  47. package/dist/legend/Legend.svelte.d.ts +4 -3
  48. package/dist/listbox/Listbox.svelte +7 -19
  49. package/dist/listbox/Listbox.svelte.d.ts +12 -35
  50. package/dist/listbox/ListboxButton.svelte +14 -14
  51. package/dist/listbox/ListboxButton.svelte.d.ts +6 -32
  52. package/dist/listbox/ListboxOption.svelte +16 -16
  53. package/dist/listbox/ListboxOption.svelte.d.ts +13 -26
  54. package/dist/listbox/ListboxOptions.svelte +13 -12
  55. package/dist/listbox/ListboxOptions.svelte.d.ts +5 -38
  56. package/dist/listbox/ListboxSelectedOption.svelte +15 -17
  57. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +8 -32
  58. package/dist/listbox/index.d.ts +5 -5
  59. package/dist/listbox/index.js +4 -4
  60. package/dist/menu/Menu.svelte +6 -8
  61. package/dist/menu/Menu.svelte.d.ts +4 -31
  62. package/dist/menu/MenuButton.svelte +13 -13
  63. package/dist/menu/MenuButton.svelte.d.ts +5 -34
  64. package/dist/menu/MenuHeading.svelte +12 -11
  65. package/dist/menu/MenuHeading.svelte.d.ts +4 -31
  66. package/dist/menu/MenuItem.svelte +13 -13
  67. package/dist/menu/MenuItem.svelte.d.ts +6 -32
  68. package/dist/menu/MenuItems.svelte +13 -14
  69. package/dist/menu/MenuItems.svelte.d.ts +5 -38
  70. package/dist/menu/MenuSection.svelte +11 -10
  71. package/dist/menu/MenuSection.svelte.d.ts +5 -29
  72. package/dist/menu/MenuSeparator.svelte +11 -9
  73. package/dist/menu/MenuSeparator.svelte.d.ts +5 -28
  74. package/dist/menu/index.d.ts +4 -4
  75. package/dist/menu/index.js +1 -1
  76. package/dist/popover/Popover.svelte +9 -9
  77. package/dist/popover/Popover.svelte.d.ts +5 -30
  78. package/dist/popover/PopoverBackdrop.svelte +16 -13
  79. package/dist/popover/PopoverBackdrop.svelte.d.ts +7 -34
  80. package/dist/popover/PopoverButton.svelte +34 -34
  81. package/dist/popover/PopoverButton.svelte.d.ts +6 -28
  82. package/dist/popover/PopoverGroup.svelte +15 -17
  83. package/dist/popover/PopoverGroup.svelte.d.ts +5 -28
  84. package/dist/popover/PopoverPanel.svelte +47 -42
  85. package/dist/popover/PopoverPanel.svelte.d.ts +6 -36
  86. package/dist/popover/index.d.ts +4 -4
  87. package/dist/popover/index.js +3 -3
  88. package/dist/portal/InternalPortal.svelte +17 -17
  89. package/dist/portal/InternalPortal.svelte.d.ts +5 -30
  90. package/dist/portal/Portal.svelte +7 -6
  91. package/dist/portal/Portal.svelte.d.ts +2 -18
  92. package/dist/portal/PortalGroup.svelte +6 -14
  93. package/dist/portal/PortalGroup.svelte.d.ts +4 -31
  94. package/dist/select/Select.svelte +11 -10
  95. package/dist/select/Select.svelte.d.ts +6 -32
  96. package/dist/select/index.d.ts +1 -1
  97. package/dist/switch/Switch.svelte +14 -13
  98. package/dist/switch/Switch.svelte.d.ts +6 -38
  99. package/dist/switch/SwitchGroup.svelte +5 -5
  100. package/dist/switch/SwitchGroup.svelte.d.ts +7 -27
  101. package/dist/switch/index.d.ts +1 -1
  102. package/dist/tabs/Tab.svelte +13 -13
  103. package/dist/tabs/Tab.svelte.d.ts +5 -32
  104. package/dist/tabs/TabGroup.svelte +9 -9
  105. package/dist/tabs/TabGroup.svelte.d.ts +5 -34
  106. package/dist/tabs/TabList.svelte +8 -9
  107. package/dist/tabs/TabList.svelte.d.ts +6 -28
  108. package/dist/tabs/TabPanel.svelte +12 -12
  109. package/dist/tabs/TabPanel.svelte.d.ts +5 -34
  110. package/dist/tabs/TabPanels.svelte +6 -6
  111. package/dist/tabs/TabPanels.svelte.d.ts +6 -27
  112. package/dist/tabs/index.d.ts +5 -5
  113. package/dist/tabs/index.js +1 -1
  114. package/dist/textarea/Textarea.svelte +13 -11
  115. package/dist/textarea/Textarea.svelte.d.ts +14 -27
  116. package/dist/textarea/index.d.ts +1 -1
  117. package/dist/transition/InternalTransitionChild.svelte +19 -12
  118. package/dist/transition/InternalTransitionChild.svelte.d.ts +3 -32
  119. package/dist/transition/Transition.svelte +12 -21
  120. package/dist/transition/Transition.svelte.d.ts +3 -35
  121. package/dist/transition/TransitionChild.svelte +9 -10
  122. package/dist/transition/TransitionChild.svelte.d.ts +8 -34
  123. package/dist/transition/context.svelte.js +7 -7
  124. package/dist/transition/index.d.ts +2 -2
  125. package/dist/transition/index.js +1 -1
  126. package/dist/utils/ElementOrComponent.svelte +56 -15
  127. package/dist/utils/ElementOrComponent.svelte.d.ts +30 -23
  128. package/dist/utils/state.js +4 -4
  129. package/dist/utils/types.d.ts +12 -9
  130. package/package.json +12 -12
  131. package/dist/combobox/Combobox.svelte +0 -53
  132. package/dist/combobox/Combobox.svelte.d.ts +0 -50
  133. package/dist/utils/Generic.svelte +0 -57
  134. package/dist/utils/Generic.svelte.d.ts +0 -31
  135. package/dist/utils/alternative-types.d.ts +0 -20
  136. package/dist/utils/alternative-types.js +0 -1
@@ -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
- type BackdropRenderPropArg = {
4
+ export 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}
@@ -1,4 +1,4 @@
1
- import type { ElementType, Props, PropsOf } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare const DEFAULT_BUTTON_TAG: "button";
3
3
  export type PopoverButtonSlot = {
4
4
  open: boolean;
@@ -9,33 +9,11 @@ export type PopoverButtonSlot = {
9
9
  autofocus: boolean;
10
10
  };
11
11
  export type PopoverButtonPropsWeControl = "aria-controls" | "aria-expanded";
12
- export type PopoverButtonComponentProps = {
12
+ export type PopoverButtonProps = Props<typeof DEFAULT_BUTTON_TAG, PopoverButtonSlot, {
13
+ element?: HTMLElement;
14
+ id?: string;
13
15
  disabled?: boolean;
14
16
  autofocus?: boolean;
15
- };
16
- export type PopoverButtonProps<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = Props<TTag, PopoverButtonSlot, PopoverButtonPropsWeControl, PopoverButtonComponentProps>;
17
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> {
18
- props(): {
19
- as?: TTag | undefined;
20
- } & (Exclude<keyof PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | PopoverButtonPropsWeControl | keyof PopoverButtonComponentProps> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
21
- children?: import("svelte").Snippet<[PopoverButtonSlot & {
22
- props?: Record<string, any>;
23
- }]> | undefined;
24
- class?: string | ((bag: PopoverButtonSlot) => string) | null | undefined;
25
- ref?: HTMLElement;
26
- } & PopoverButtonComponentProps;
27
- events(): {};
28
- slots(): {};
29
- bindings(): "ref";
30
- exports(): {};
31
- }
32
- interface $$IsomorphicComponent {
33
- new <TTag extends ElementType = typeof DEFAULT_BUTTON_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']>> & {
34
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
35
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
36
- <TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
37
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
38
- }
39
- declare const PopoverButton: $$IsomorphicComponent;
40
- type PopoverButton<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = InstanceType<typeof PopoverButton<TTag>>;
17
+ }>;
18
+ declare const PopoverButton: import("svelte").Component<PopoverButtonProps, {}, "element">;
41
19
  export default PopoverButton;
@@ -1,25 +1,25 @@
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 { setContext } from "svelte"
4
4
 
5
5
  const DEFAULT_GROUP_TAG = "div" as const
6
- type GroupRenderPropArg = {}
7
- type GroupPropsWeControl = never
8
6
 
9
- export type PopoverGroupProps<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = Props<
10
- TTag,
11
- GroupRenderPropArg,
12
- GroupPropsWeControl
7
+ export type PopoverGroupProps = Props<
8
+ typeof DEFAULT_GROUP_TAG,
9
+ {},
10
+ {
11
+ element?: HTMLElement
12
+ }
13
13
  >
14
14
  </script>
15
15
 
16
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_GROUP_TAG">
16
+ <script lang="ts">
17
17
  import type { PopoverGroupContext, PopoverRegisterBag } from "./context.svelte"
18
18
  import MainTreeProvider from "../internal/MainTreeProvider.svelte"
19
19
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
20
20
  import { getOwnerDocument } from "../utils/owner.js"
21
21
 
22
- let { ref = $bindable(), ...theirProps }: { as?: TTag } & PopoverGroupProps<TTag> = $props()
22
+ let { element = $bindable(), ...theirProps }: PopoverGroupProps = $props()
23
23
 
24
24
  const popovers = $state<PopoverRegisterBag[]>([])
25
25
 
@@ -34,17 +34,17 @@
34
34
  }
35
35
 
36
36
  const isFocusWithinPopoverGroup = () => {
37
- const ownerDocument = getOwnerDocument(ref)
37
+ const ownerDocument = getOwnerDocument(element)
38
38
  if (!ownerDocument) return false
39
- let element = ownerDocument.activeElement
39
+ const el = ownerDocument.activeElement
40
40
 
41
- if (ref?.contains(element)) return true
41
+ if (element?.contains(element)) return true
42
42
 
43
43
  // Check if the focus is in one of the button or panel elements. This is important in case you are rendering inside a Portal.
44
44
  return popovers.some((bag) => {
45
45
  return (
46
- ownerDocument!.getElementById(bag.buttonId!)?.contains(element) ||
47
- ownerDocument!.getElementById(bag.panelId!)?.contains(element)
46
+ ownerDocument!.getElementById(bag.buttonId!)?.contains(el) ||
47
+ ownerDocument!.getElementById(bag.panelId!)?.contains(el)
48
48
  )
49
49
  })
50
50
  }
@@ -61,10 +61,8 @@
61
61
  isFocusWithinPopoverGroup,
62
62
  closeOthers,
63
63
  })
64
-
65
- const slot = {} satisfies GroupRenderPropArg
66
64
  </script>
67
65
 
68
66
  <MainTreeProvider>
69
- <ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_GROUP_TAG} name="PopoverGroup" bind:ref />
67
+ <ElementOrComponent {theirProps} defaultTag={DEFAULT_GROUP_TAG} name="PopoverGroup" bind:element />
70
68
  </MainTreeProvider>
@@ -1,30 +1,7 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare const DEFAULT_GROUP_TAG: "div";
3
- type GroupRenderPropArg = {};
4
- type GroupPropsWeControl = never;
5
- export type PopoverGroupProps<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = Props<TTag, GroupRenderPropArg, GroupPropsWeControl>;
6
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> {
7
- props(): {
8
- as?: TTag | undefined;
9
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, "slot" | "as" | "children" | "class" | "ref"> 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: GroupRenderPropArg) => 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_GROUP_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_GROUP_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 PopoverGroup: $$IsomorphicComponent;
29
- type PopoverGroup<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = InstanceType<typeof PopoverGroup<TTag>>;
3
+ export type PopoverGroupProps = Props<typeof DEFAULT_GROUP_TAG, {}, {
4
+ element?: HTMLElement;
5
+ }>;
6
+ declare const PopoverGroup: import("svelte").Component<PopoverGroupProps, {}, "element">;
30
7
  export default PopoverGroup;
@@ -1,9 +1,9 @@
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 } from "../utils/render.js"
4
4
 
5
5
  const DEFAULT_PANEL_TAG = "div" as const
6
- type PanelRenderPropArg = {
6
+ export type PanelRenderPropArg = {
7
7
  open: boolean
8
8
  close: (focusableElement?: HTMLElement) => void
9
9
  }
@@ -12,11 +12,12 @@
12
12
 
13
13
  type PanelPropsWeControl = "tabIndex"
14
14
 
15
- export type PopoverPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = Props<
16
- TTag,
15
+ export type PopoverPanelProps = Props<
16
+ typeof DEFAULT_PANEL_TAG,
17
17
  PanelRenderPropArg,
18
- PanelPropsWeControl,
19
18
  {
19
+ element?: HTMLElement
20
+ id?: string
20
21
  focus?: boolean
21
22
  anchor?: AnchorProps
22
23
  portal?: boolean
@@ -30,7 +31,7 @@
30
31
  >
31
32
  </script>
32
33
 
33
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_PANEL_TAG">
34
+ <script lang="ts">
34
35
  import { useId } from "../hooks/use-id.js"
35
36
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
36
37
  import { mergeProps } from "../utils/render.js"
@@ -63,15 +64,15 @@
63
64
 
64
65
  let internalId = useId()
65
66
  let {
66
- ref = $bindable(),
67
- id = `headlessui-popover-panel-${internalId}` as PropsOf<TTag>["id"],
67
+ element = $bindable(),
68
+ id = `headlessui-popover-panel-${internalId}`,
68
69
  focus = false,
69
70
  anchor: rawAnchor,
70
71
  portal: theirPortal = false,
71
72
  modal = false,
72
73
  transition = false,
73
74
  ...theirProps
74
- }: { as?: TTag } & PopoverPanelProps<TTag> = $props()
75
+ }: PopoverPanelProps = $props()
75
76
 
76
77
  const context = usePopoverContext("PopoverPanel")
77
78
  const api = usePopoverAPIContext("PopoverPanel")
@@ -98,10 +99,10 @@
98
99
  const portal = $derived(!!anchor || theirPortal)
99
100
 
100
101
  $effect(() => {
101
- if (anchor) setFloating(ref ?? null)
102
- untrack(() => context.setPanel(ref))
102
+ if (anchor) setFloating(element ?? null)
103
+ untrack(() => context.setPanel(element))
103
104
  })
104
- const ownerDocument = $derived(getOwnerDocument(ref))
105
+ const ownerDocument = $derived(getOwnerDocument(element))
105
106
 
106
107
  $effect(() => {
107
108
  id
@@ -119,7 +120,7 @@
119
120
  return transition
120
121
  },
121
122
  get element() {
122
- return ref
123
+ return element
123
124
  },
124
125
  get show() {
125
126
  return usesOpenClosedState !== null
@@ -157,8 +158,8 @@
157
158
  switch (event.key) {
158
159
  case "Escape":
159
160
  if (context.popoverState !== PopoverStates.Open) return
160
- if (!ref) return
161
- if (ownerDocument?.activeElement && !ref.contains(ownerDocument.activeElement)) {
161
+ if (!element) return
162
+ if (ownerDocument?.activeElement && !element.contains(ownerDocument.activeElement)) {
162
163
  return
163
164
  }
164
165
  event.preventDefault()
@@ -183,12 +184,12 @@
183
184
  if (context.__demoMode) return
184
185
  if (!focus) return
185
186
  if (context.popoverState !== PopoverStates.Open) return
186
- if (!ref) return
187
+ if (!element) return
187
188
 
188
189
  const activeElement = ownerDocument?.activeElement as HTMLElement
189
- if (ref.contains(activeElement)) return // Already focused within Dialog
190
+ if (element.contains(activeElement)) return // Already focused within Dialog
190
191
 
191
- focusIn(ref, Focus.First)
192
+ focusIn(element, Focus.First)
192
193
  }) //, [state.__demoMode, focus, internalPanelRef.current, state.popoverState])
193
194
 
194
195
  const slot = $derived({
@@ -211,8 +212,8 @@
211
212
  ? (event: FocusEvent) => {
212
213
  let el = event.relatedTarget as HTMLElement
213
214
  if (!el) return
214
- if (!ref) return
215
- if (ref.contains(el)) return
215
+ if (!element) return
216
+ if (element.contains(el)) return
216
217
 
217
218
  context.closePopover()
218
219
 
@@ -229,7 +230,7 @@
229
230
 
230
231
  const direction = useTabDirection()
231
232
  const handleBeforeFocus = () => {
232
- let el = ref as HTMLElement
233
+ let el = element as HTMLElement
233
234
  if (!el) return
234
235
 
235
236
  function run() {
@@ -259,7 +260,7 @@
259
260
  }
260
261
 
261
262
  const handleAfterFocus = () => {
262
- let el = ref as HTMLElement
263
+ let el = element as HTMLElement
263
264
  if (!el) return
264
265
 
265
266
  function run() {
@@ -277,7 +278,7 @@
277
278
 
278
279
  // Ignore sentinel buttons and items inside the panel
279
280
  for (const element of combined.slice()) {
280
- if (element.dataset.headlessuiFocusGuard === "true" || ref?.contains(element)) {
281
+ if (element.dataset.headlessuiFocusGuard === "true" || element?.contains(element)) {
281
282
  let idx = combined.indexOf(element)
282
283
  if (idx !== -1) combined.splice(idx, 1)
283
284
  }
@@ -322,15 +323,17 @@
322
323
 
323
324
  <Portal enabled={portal ? theirProps.static || visible : false}>
324
325
  {#if visible && isPortalled}
325
- <Hidden
326
- id={beforePanelSentinelId}
327
- bind:ref={context.beforePanelSentinel as HTMLElement}
328
- features={HiddenFeatures.Focusable}
329
- data-headlessui-focus-guard
330
- as="button"
331
- type="button"
332
- onfocus={handleBeforeFocus}
333
- />
326
+ <Hidden asChild id={beforePanelSentinelId} features={HiddenFeatures.Focusable}>
327
+ {#snippet children({ props })}
328
+ <button
329
+ {...props}
330
+ type="button"
331
+ data-headlessui-focus-guard
332
+ onfocus={handleBeforeFocus}
333
+ bind:this={context.beforePanelSentinel}>&zwnj;</button
334
+ >
335
+ {/snippet}
336
+ </Hidden>
334
337
  {/if}
335
338
  <ElementOrComponent
336
339
  {ourProps}
@@ -340,17 +343,19 @@
340
343
  features={PanelRenderFeatures}
341
344
  {visible}
342
345
  name="PopoverPanel"
343
- bind:ref
346
+ bind:element
344
347
  />
345
348
  {#if visible && isPortalled}
346
- <Hidden
347
- id={afterPanelSentinelId}
348
- bind:ref={context.afterPanelSentinel as HTMLElement}
349
- features={HiddenFeatures.Focusable}
350
- data-headlessui-focus-guard
351
- as="button"
352
- type="button"
353
- onfocus={handleAfterFocus}
354
- />
349
+ <Hidden asChild id={afterPanelSentinelId} features={HiddenFeatures.Focusable}>
350
+ {#snippet children({ props })}
351
+ <button
352
+ {...props}
353
+ type="button"
354
+ data-headlessui-focus-guard
355
+ onfocus={handleAfterFocus}
356
+ bind:this={context.afterPanelSentinel}>&zwnj;</button
357
+ >
358
+ {/snippet}
359
+ </Hidden>
355
360
  {/if}
356
361
  </Portal>
@@ -1,11 +1,12 @@
1
- import type { ElementType, Props, PropsOf } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare const DEFAULT_PANEL_TAG: "div";
3
- type PanelRenderPropArg = {
3
+ export type PanelRenderPropArg = {
4
4
  open: boolean;
5
5
  close: (focusableElement?: HTMLElement) => void;
6
6
  };
7
- type PanelPropsWeControl = "tabIndex";
8
- export type PopoverPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = Props<TTag, PanelRenderPropArg, PanelPropsWeControl, {
7
+ export type PopoverPanelProps = Props<typeof DEFAULT_PANEL_TAG, PanelRenderPropArg, {
8
+ element?: HTMLElement;
9
+ id?: string;
9
10
  focus?: boolean;
10
11
  anchor?: AnchorProps;
11
12
  portal?: boolean;
@@ -15,36 +16,5 @@ export type PopoverPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TA
15
16
  unmount?: boolean;
16
17
  }>;
17
18
  import { type AnchorProps } from "../internal/floating.svelte.js";
18
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> {
19
- props(): {
20
- as?: TTag | undefined;
21
- } & (Exclude<keyof PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "focus" | "anchor" | "unmount" | "static" | "tabIndex" | "transition" | "portal" | "modal"> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
22
- children?: import("svelte").Snippet<[PanelRenderPropArg & {
23
- props?: Record<string, any>;
24
- }]> | undefined;
25
- class?: string | ((bag: PanelRenderPropArg) => string) | null | undefined;
26
- ref?: HTMLElement;
27
- } & {
28
- focus?: boolean;
29
- anchor?: AnchorProps;
30
- portal?: boolean;
31
- modal?: boolean;
32
- transition?: boolean;
33
- static?: boolean;
34
- unmount?: boolean;
35
- };
36
- events(): {};
37
- slots(): {};
38
- bindings(): "ref";
39
- exports(): {};
40
- }
41
- interface $$IsomorphicComponent {
42
- new <TTag extends ElementType = typeof DEFAULT_PANEL_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']>> & {
43
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
44
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
45
- <TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
46
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
47
- }
48
- declare const PopoverPanel: $$IsomorphicComponent;
49
- type PopoverPanel<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = InstanceType<typeof PopoverPanel<TTag>>;
19
+ declare const PopoverPanel: import("svelte").Component<PopoverPanelProps, {}, "element">;
50
20
  export default PopoverPanel;
@@ -1,5 +1,5 @@
1
- export { default as Popover, type PopoverProps } from "./Popover.svelte";
2
- export { default as PopoverBackdrop, type PopoverBackdropProps } from "./PopoverBackdrop.svelte";
3
- export { default as PopoverButton, type PopoverButtonProps, type PopoverButtonComponentProps, type PopoverButtonSlot, type PopoverButtonPropsWeControl, } from "./PopoverButton.svelte";
1
+ export { default as Popover, type PopoverProps, type PopoverRenderPropArg as PopoverSlot } from "./Popover.svelte";
2
+ export { default as PopoverBackdrop, type PopoverBackdropProps, type BackdropRenderPropArg as PopoverBackdropSlot, } from "./PopoverBackdrop.svelte";
3
+ export { default as PopoverButton, type PopoverButtonProps, type PopoverButtonSlot } from "./PopoverButton.svelte";
4
4
  export { default as PopoverGroup, type PopoverGroupProps } from "./PopoverGroup.svelte";
5
- export { default as PopoverPanel, type PopoverPanelProps } from "./PopoverPanel.svelte";
5
+ export { default as PopoverPanel, type PopoverPanelProps, type PanelRenderPropArg as PopoverPanelSlot, } from "./PopoverPanel.svelte";
@@ -1,5 +1,5 @@
1
1
  export { default as Popover } from "./Popover.svelte";
2
- export { default as PopoverBackdrop } from "./PopoverBackdrop.svelte";
3
- export { default as PopoverButton, } from "./PopoverButton.svelte";
2
+ export { default as PopoverBackdrop, } from "./PopoverBackdrop.svelte";
3
+ export { default as PopoverButton } from "./PopoverButton.svelte";
4
4
  export { default as PopoverGroup } from "./PopoverGroup.svelte";
5
- export { default as PopoverPanel } from "./PopoverPanel.svelte";
5
+ export { default as PopoverPanel, } from "./PopoverPanel.svelte";