@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,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,26 @@
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
6
  type GroupRenderPropArg = {}
7
- type GroupPropsWeControl = never
8
7
 
9
- export type PopoverGroupProps<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = Props<
10
- TTag,
8
+ export type PopoverGroupProps = Props<
9
+ typeof DEFAULT_GROUP_TAG,
11
10
  GroupRenderPropArg,
12
- GroupPropsWeControl
11
+ {
12
+ element?: HTMLElement
13
+ }
13
14
  >
14
15
  </script>
15
16
 
16
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_GROUP_TAG">
17
+ <script lang="ts">
17
18
  import type { PopoverGroupContext, PopoverRegisterBag } from "./context.svelte"
18
19
  import MainTreeProvider from "../internal/MainTreeProvider.svelte"
19
20
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
20
21
  import { getOwnerDocument } from "../utils/owner.js"
21
22
 
22
- let { ref = $bindable(), ...theirProps }: { as?: TTag } & PopoverGroupProps<TTag> = $props()
23
+ let { element = $bindable(), ...theirProps }: PopoverGroupProps = $props()
23
24
 
24
25
  const popovers = $state<PopoverRegisterBag[]>([])
25
26
 
@@ -34,17 +35,17 @@
34
35
  }
35
36
 
36
37
  const isFocusWithinPopoverGroup = () => {
37
- const ownerDocument = getOwnerDocument(ref)
38
+ const ownerDocument = getOwnerDocument(element)
38
39
  if (!ownerDocument) return false
39
- let element = ownerDocument.activeElement
40
+ const el = ownerDocument.activeElement
40
41
 
41
- if (ref?.contains(element)) return true
42
+ if (element?.contains(element)) return true
42
43
 
43
44
  // 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
45
  return popovers.some((bag) => {
45
46
  return (
46
- ownerDocument!.getElementById(bag.buttonId!)?.contains(element) ||
47
- ownerDocument!.getElementById(bag.panelId!)?.contains(element)
47
+ ownerDocument!.getElementById(bag.buttonId!)?.contains(el) ||
48
+ ownerDocument!.getElementById(bag.panelId!)?.contains(el)
48
49
  )
49
50
  })
50
51
  }
@@ -66,5 +67,5 @@
66
67
  </script>
67
68
 
68
69
  <MainTreeProvider>
69
- <ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_GROUP_TAG} name="PopoverGroup" bind:ref />
70
+ <ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_GROUP_TAG} name="PopoverGroup" bind:element />
70
71
  </MainTreeProvider>
@@ -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_GROUP_TAG: "div";
3
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>>;
4
+ export type PopoverGroupProps = Props<typeof DEFAULT_GROUP_TAG, GroupRenderPropArg, {
5
+ element?: HTMLElement;
6
+ }>;
7
+ declare const PopoverGroup: import("svelte").Component<PopoverGroupProps, {}, "element">;
30
8
  export default PopoverGroup;
@@ -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 } from "../utils/render.js"
4
4
 
5
5
  const DEFAULT_PANEL_TAG = "div" as const
@@ -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
3
  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
1
  export { default as Popover, type PopoverProps } from "./Popover.svelte";
2
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";
3
+ export { default as PopoverButton, type PopoverButtonProps, type PopoverButtonSlot, type PopoverButtonPropsWeControl, } from "./PopoverButton.svelte";
4
4
  export { default as PopoverGroup, type PopoverGroupProps } from "./PopoverGroup.svelte";
5
5
  export { default as PopoverPanel, type PopoverPanelProps } from "./PopoverPanel.svelte";
@@ -3,8 +3,9 @@
3
3
  import { getOwnerDocument } from "../utils/owner.js"
4
4
  import { getContext, onMount, setContext } from "svelte"
5
5
  import { env } from "../utils/env.js"
6
- import type { ElementType, Props } from "../utils/types.js"
6
+ import type { Props } from "../utils/types.js"
7
7
  import type { PortalGroupContext } from "./PortalGroup.svelte"
8
+ import type { SvelteHTMLElements } from "svelte/elements"
8
9
 
9
10
  function usePortalTarget(options: { element: HTMLElement | null }): { readonly target: HTMLElement | null } {
10
11
  const { element } = $derived(options)
@@ -96,24 +97,24 @@
96
97
  type PortalRenderPropArg = {}
97
98
  type PortalPropsWeControl = never
98
99
 
99
- export type PortalProps<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> = Props<
100
- TTag,
100
+ export type PortalProps = Props<
101
+ typeof DEFAULT_PORTAL_TAG,
101
102
  PortalRenderPropArg,
102
- PortalPropsWeControl,
103
103
  {
104
+ element?: HTMLElement
104
105
  enabled?: boolean
105
106
  }
106
107
  >
107
108
  </script>
108
109
 
109
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_PORTAL_TAG">
110
+ <script lang="ts">
110
111
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
111
112
 
112
- let { ref = $bindable(), ...theirProps }: { as?: TTag } & PortalProps<TTag> = $props()
113
+ let { element = $bindable(), ...theirProps }: PortalProps = $props()
113
114
 
114
115
  const portalTarget = usePortalTarget({
115
116
  get element() {
116
- return ref ?? null
117
+ return element ?? null
117
118
  },
118
119
  })
119
120
  const { target } = $derived(portalTarget)
@@ -121,24 +122,24 @@
121
122
  //const ready = useServerHandoffComplete()
122
123
 
123
124
  $effect(() => {
124
- if (!target || !ref) return
125
+ if (!target || !element) return
125
126
 
126
127
  // Element already exists in target, always calling target.appendChild(element) will cause a
127
128
  // brief unmount/remount.
128
- if (ref.parentNode !== target) {
129
- ref.setAttribute("data-headlessui-portal", "")
130
- target.appendChild(ref)
129
+ if (element.parentNode !== target) {
130
+ element.setAttribute("data-headlessui-portal", "")
131
+ target.appendChild(element)
131
132
  }
132
133
  })
133
134
 
134
135
  onMount(() => {
135
- if (parent) parent.register(ref!)
136
+ if (parent) parent.register(element!)
136
137
 
137
138
  return () => {
138
- if (!target || !ref) return
139
+ if (!target || !element) return
139
140
 
140
- if (ref instanceof Node && target.contains(ref)) {
141
- target.removeChild(ref)
141
+ if (element instanceof Node && target.contains(element)) {
142
+ target.removeChild(element)
142
143
  }
143
144
 
144
145
  if (target.childNodes.length <= 0) {
@@ -149,5 +150,5 @@
149
150
  </script>
150
151
 
151
152
  {#if target}
152
- <ElementOrComponent {theirProps} defaultTag={DEFAULT_PORTAL_TAG} name="InternalPortal" bind:ref />
153
+ <ElementOrComponent {theirProps} defaultTag={DEFAULT_PORTAL_TAG} name="InternalPortal" bind:element />
153
154
  {/if}
@@ -1,4 +1,4 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  type PortalParentContext = {
3
3
  register: (portal: HTMLElement) => () => void;
4
4
  unregister: (portal: HTMLElement) => void;
@@ -7,34 +7,9 @@ type PortalParentContext = {
7
7
  export declare function useNestedPortals(): PortalParentContext;
8
8
  export declare const DEFAULT_PORTAL_TAG = "div";
9
9
  type PortalRenderPropArg = {};
10
- type PortalPropsWeControl = never;
11
- export type PortalProps<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> = Props<TTag, PortalRenderPropArg, PortalPropsWeControl, {
10
+ export type PortalProps = Props<typeof DEFAULT_PORTAL_TAG, PortalRenderPropArg, {
11
+ element?: HTMLElement;
12
12
  enabled?: boolean;
13
13
  }>;
14
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> {
15
- props(): {
16
- as?: TTag | undefined;
17
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "enabled"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
18
- children?: import("svelte").Snippet<[{
19
- props?: Record<string, any>;
20
- }]> | undefined;
21
- class?: string | ((bag: PortalRenderPropArg) => string) | null | undefined;
22
- ref?: HTMLElement;
23
- } & {
24
- enabled?: boolean;
25
- };
26
- events(): {};
27
- slots(): {};
28
- bindings(): "ref";
29
- exports(): {};
30
- }
31
- interface $$IsomorphicComponent {
32
- new <TTag extends ElementType = typeof DEFAULT_PORTAL_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']>> & {
33
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
34
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
35
- <TTag extends ElementType = typeof DEFAULT_PORTAL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
36
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
37
- }
38
- declare const InternalPortal: $$IsomorphicComponent;
39
- type InternalPortal<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> = InstanceType<typeof InternalPortal<TTag>>;
14
+ declare const InternalPortal: import("svelte").Component<PortalProps, {}, "element">;
40
15
  export default InternalPortal;
@@ -1,10 +1,11 @@
1
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_PORTAL_TAG">
2
- import type { ElementType } from "../utils/types.js"
3
- import InternalPortal, { DEFAULT_PORTAL_TAG, type PortalProps } from "./InternalPortal.svelte"
1
+ <script lang="ts">
2
+ import InternalPortal, { type PortalProps } from "./InternalPortal.svelte"
4
3
 
5
- let { ref = $bindable(), enabled = true, ...theirProps }: PortalProps<TTag> = $props()
4
+ let { element = $bindable(), enabled = true, ...theirProps }: PortalProps = $props()
6
5
  </script>
7
6
 
8
7
  {#if enabled}
9
- <InternalPortal {...theirProps} bind:ref />
10
- {:else if theirProps.children}{@render theirProps.children()}{/if}
8
+ <InternalPortal {...theirProps} bind:element />
9
+ {:else}
10
+ {@render theirProps.children?.({})}
11
+ {/if}
@@ -1,19 +1,3 @@
1
- import type { ElementType } from "../utils/types.js";
2
- import { DEFAULT_PORTAL_TAG, type PortalProps } from "./InternalPortal.svelte";
3
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> {
4
- props(): PortalProps<TTag>;
5
- events(): {};
6
- slots(): {};
7
- bindings(): "ref";
8
- exports(): {};
9
- }
10
- interface $$IsomorphicComponent {
11
- new <TTag extends ElementType = typeof DEFAULT_PORTAL_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']>> & {
12
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
13
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
14
- <TTag extends ElementType = typeof DEFAULT_PORTAL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
15
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
16
- }
17
- declare const Portal: $$IsomorphicComponent;
18
- type Portal<TTag extends ElementType = typeof DEFAULT_PORTAL_TAG> = InstanceType<typeof Portal<TTag>>;
1
+ import { type PortalProps } from "./InternalPortal.svelte";
2
+ declare const Portal: import("svelte").Component<PortalProps, {}, "element">;
19
3
  export default Portal;
@@ -1,29 +1,21 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
2
+ import type { PropsAsChild } from "../utils/types.js"
3
3
 
4
4
  const DEFAULT_GROUP_TAG = "svelte:fragment"
5
5
  type GroupRenderPropArg = {}
6
- type GroupPropsWeControl = never
7
6
 
8
7
  export type PortalGroupContext = {
9
8
  readonly target: HTMLElement | null
10
9
  }
11
10
 
12
- export type PortalGroupProps<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = Props<
13
- TTag,
14
- GroupRenderPropArg,
15
- GroupPropsWeControl,
16
- {
17
- target: HTMLElement | null
18
- }
19
- >
11
+ export type PortalGroupProps = PropsAsChild<GroupRenderPropArg, { target: HTMLElement | null }>
20
12
  </script>
21
13
 
22
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_GROUP_TAG">
14
+ <script lang="ts">
23
15
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
24
16
  import { setContext } from "svelte"
25
17
 
26
- let { ref = $bindable(), target, ...theirProps }: { as?: TTag } & PortalGroupProps<TTag> = $props()
18
+ let { target, ...theirProps }: PortalGroupProps = $props()
27
19
 
28
20
  setContext("PortalGroupContext", {
29
21
  get target() {
@@ -32,4 +24,4 @@
32
24
  })
33
25
  </script>
34
26
 
35
- <ElementOrComponent {theirProps} defaultTag={DEFAULT_GROUP_TAG} name="PortalGroup" bind:ref />
27
+ <ElementOrComponent {theirProps} name="PortalGroup" />
@@ -1,37 +1,10 @@
1
- import type { ElementType, Props } from "../utils/types.js";
2
- declare const DEFAULT_GROUP_TAG = "svelte:fragment";
1
+ import type { PropsAsChild } from "../utils/types.js";
3
2
  type GroupRenderPropArg = {};
4
- type GroupPropsWeControl = never;
5
3
  export type PortalGroupContext = {
6
4
  readonly target: HTMLElement | null;
7
5
  };
8
- export type PortalGroupProps<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = Props<TTag, GroupRenderPropArg, GroupPropsWeControl, {
6
+ export type PortalGroupProps = PropsAsChild<GroupRenderPropArg, {
9
7
  target: HTMLElement | null;
10
8
  }>;
11
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> {
12
- props(): {
13
- as?: TTag | undefined;
14
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "target"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
15
- children?: import("svelte").Snippet<[{
16
- props?: Record<string, any>;
17
- }]> | undefined;
18
- class?: string | ((bag: GroupRenderPropArg) => string) | null | undefined;
19
- ref?: HTMLElement;
20
- } & {
21
- target: HTMLElement | null;
22
- };
23
- events(): {};
24
- slots(): {};
25
- bindings(): "ref";
26
- exports(): {};
27
- }
28
- interface $$IsomorphicComponent {
29
- 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']>> & {
30
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
31
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
32
- <TTag extends ElementType = typeof DEFAULT_GROUP_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
33
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
34
- }
35
- declare const PortalGroup: $$IsomorphicComponent;
36
- type PortalGroup<TTag extends ElementType = typeof DEFAULT_GROUP_TAG> = InstanceType<typeof PortalGroup<TTag>>;
9
+ declare const PortalGroup: import("svelte").Component<PortalGroupProps, {}, "">;
37
10
  export default PortalGroup;