@pzerelles/headlessui-svelte 2.1.2-next.4 → 2.1.2-next.40

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 (252) hide show
  1. package/dist/button/Button.svelte +15 -18
  2. package/dist/button/Button.svelte.d.ts +8 -36
  3. package/dist/button/index.d.ts +1 -1
  4. package/dist/button/index.js +1 -1
  5. package/dist/checkbox/Checkbox.svelte +30 -26
  6. package/dist/checkbox/Checkbox.svelte.d.ts +17 -38
  7. package/dist/checkbox/index.d.ts +1 -1
  8. package/dist/checkbox/index.js +1 -1
  9. package/dist/close-button/CloseButton.svelte +4 -7
  10. package/dist/close-button/CloseButton.svelte.d.ts +3 -46
  11. package/dist/close-button/index.d.ts +1 -0
  12. package/dist/close-button/index.js +1 -0
  13. package/dist/data-interactive/DataInteractive.svelte +6 -22
  14. package/dist/data-interactive/DataInteractive.svelte.d.ts +9 -34
  15. package/dist/data-interactive/index.d.ts +1 -1
  16. package/dist/data-interactive/index.js +1 -1
  17. package/dist/description/Description.svelte +28 -23
  18. package/dist/description/Description.svelte.d.ts +9 -30
  19. package/dist/description/context.svelte.js +14 -16
  20. package/dist/description/index.d.ts +1 -1
  21. package/dist/dialog/Dialog.svelte +315 -31
  22. package/dist/dialog/Dialog.svelte.d.ts +7 -45
  23. package/dist/dialog/DialogBackdrop.svelte +11 -14
  24. package/dist/dialog/DialogBackdrop.svelte.d.ts +8 -33
  25. package/dist/dialog/DialogPanel.svelte +23 -19
  26. package/dist/dialog/DialogPanel.svelte.d.ts +8 -34
  27. package/dist/dialog/DialogTitle.svelte +17 -8
  28. package/dist/dialog/DialogTitle.svelte.d.ts +9 -30
  29. package/dist/dialog/context.svelte.js +2 -2
  30. package/dist/dialog/index.d.ts +4 -4
  31. package/dist/dialog/index.js +4 -4
  32. package/dist/field/Field.svelte +27 -26
  33. package/dist/field/Field.svelte.d.ts +7 -34
  34. package/dist/field/index.d.ts +1 -1
  35. package/dist/fieldset/Fieldset.svelte +14 -20
  36. package/dist/fieldset/Fieldset.svelte.d.ts +8 -35
  37. package/dist/fieldset/index.d.ts +1 -1
  38. package/dist/focus-trap/FocusTrap.svelte +30 -54
  39. package/dist/focus-trap/FocusTrap.svelte.d.ts +10 -52
  40. package/dist/focus-trap/FocusTrapFeatures.d.ts +14 -0
  41. package/dist/focus-trap/FocusTrapFeatures.js +15 -0
  42. package/dist/hooks/use-controllable.svelte.js +2 -1
  43. package/dist/hooks/use-did-element-move.svelte.js +5 -10
  44. package/dist/hooks/use-disabled.d.ts +6 -1
  45. package/dist/hooks/use-disabled.js +10 -5
  46. package/dist/hooks/use-event-listener.svelte.d.ts +1 -1
  47. package/dist/hooks/use-event-listener.svelte.js +3 -1
  48. package/dist/hooks/use-inert-others.svelte.js +10 -10
  49. package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
  50. package/dist/hooks/use-root-containers.svelte.d.ts +2 -2
  51. package/dist/hooks/use-root-containers.svelte.js +5 -5
  52. package/dist/hooks/use-tab-direction.svelte.js +1 -1
  53. package/dist/index.d.ts +5 -2
  54. package/dist/index.js +5 -2
  55. package/dist/input/Input.svelte +28 -21
  56. package/dist/input/Input.svelte.d.ts +16 -33
  57. package/dist/input/index.d.ts +1 -1
  58. package/dist/input/index.js +1 -1
  59. package/dist/internal/FloatingProvider.svelte +17 -0
  60. package/dist/internal/FloatingProvider.svelte.d.ts +8 -0
  61. package/dist/internal/FocusSentinel.svelte +33 -32
  62. package/dist/internal/FocusSentinel.svelte.d.ts +4 -18
  63. package/dist/internal/ForcePortalRoot.svelte.d.ts +4 -18
  64. package/dist/internal/FormFields.svelte +18 -13
  65. package/dist/internal/FormFields.svelte.d.ts +4 -18
  66. package/dist/internal/FormFieldsProvider.svelte +17 -0
  67. package/dist/internal/FormFieldsProvider.svelte.d.ts +7 -0
  68. package/dist/internal/FormResolver.svelte +6 -2
  69. package/dist/internal/FormResolver.svelte.d.ts +4 -18
  70. package/dist/internal/Hidden.svelte +10 -10
  71. package/dist/internal/Hidden.svelte.d.ts +6 -33
  72. package/dist/internal/MainTreeProvider.svelte +1 -1
  73. package/dist/internal/MainTreeProvider.svelte.d.ts +4 -18
  74. package/dist/internal/Portal.svelte.d.ts +4 -18
  75. package/dist/internal/floating-provider.svelte.d.ts +3 -0
  76. package/dist/internal/floating-provider.svelte.js +206 -0
  77. package/dist/internal/floating.svelte.d.ts +46 -22
  78. package/dist/internal/floating.svelte.js +90 -272
  79. package/dist/internal/form-fields.svelte.d.ts +10 -0
  80. package/dist/internal/form-fields.svelte.js +23 -0
  81. package/dist/label/Label.svelte +17 -13
  82. package/dist/label/Label.svelte.d.ts +8 -33
  83. package/dist/label/context.svelte.js +1 -1
  84. package/dist/label/index.d.ts +1 -1
  85. package/dist/legend/Legend.svelte +21 -15
  86. package/dist/legend/Legend.svelte.d.ts +9 -34
  87. package/dist/listbox/Listbox.svelte +79 -163
  88. package/dist/listbox/Listbox.svelte.d.ts +16 -101
  89. package/dist/listbox/ListboxButton.svelte +24 -29
  90. package/dist/listbox/ListboxButton.svelte.d.ts +8 -38
  91. package/dist/listbox/ListboxOption.svelte +33 -27
  92. package/dist/listbox/ListboxOption.svelte.d.ts +16 -32
  93. package/dist/listbox/ListboxOptions.svelte +126 -73
  94. package/dist/listbox/ListboxOptions.svelte.d.ts +8 -43
  95. package/dist/listbox/ListboxSelectedOption.svelte +24 -26
  96. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +14 -39
  97. package/dist/listbox/context.svelte.d.ts +76 -0
  98. package/dist/listbox/context.svelte.js +36 -0
  99. package/dist/listbox/index.d.ts +5 -5
  100. package/dist/listbox/index.js +4 -4
  101. package/dist/menu/Menu.svelte +22 -266
  102. package/dist/menu/Menu.svelte.d.ts +7 -37
  103. package/dist/menu/MenuButton.svelte +22 -24
  104. package/dist/menu/MenuButton.svelte.d.ts +8 -39
  105. package/dist/menu/MenuHeading.svelte +12 -16
  106. package/dist/menu/MenuHeading.svelte.d.ts +7 -36
  107. package/dist/menu/MenuItem.svelte +18 -23
  108. package/dist/menu/MenuItem.svelte.d.ts +9 -39
  109. package/dist/menu/MenuItems.svelte +33 -34
  110. package/dist/menu/MenuItems.svelte.d.ts +8 -43
  111. package/dist/menu/MenuSection.svelte +9 -12
  112. package/dist/menu/MenuSection.svelte.d.ts +7 -33
  113. package/dist/menu/MenuSeparator.svelte +9 -12
  114. package/dist/menu/MenuSeparator.svelte.d.ts +7 -33
  115. package/dist/menu/context.svelte.d.ts +2 -1
  116. package/dist/menu/context.svelte.js +212 -2
  117. package/dist/menu/index.d.ts +7 -7
  118. package/dist/menu/index.js +3 -3
  119. package/dist/popover/Popover.svelte +225 -0
  120. package/dist/popover/Popover.svelte.d.ts +15 -0
  121. package/dist/popover/PopoverBackdrop.svelte +83 -0
  122. package/dist/popover/PopoverBackdrop.svelte.d.ts +17 -0
  123. package/dist/popover/PopoverButton.svelte +324 -0
  124. package/dist/popover/PopoverButton.svelte.d.ts +21 -0
  125. package/dist/popover/PopoverGroup.svelte +66 -0
  126. package/dist/popover/PopoverGroup.svelte.d.ts +9 -0
  127. package/dist/popover/PopoverPanel.svelte +359 -0
  128. package/dist/popover/PopoverPanel.svelte.d.ts +22 -0
  129. package/dist/popover/context.svelte.d.ts +51 -0
  130. package/dist/popover/context.svelte.js +108 -0
  131. package/dist/popover/index.d.ts +5 -0
  132. package/dist/popover/index.js +5 -0
  133. package/dist/portal/InternalPortal.svelte +17 -17
  134. package/dist/portal/InternalPortal.svelte.d.ts +6 -33
  135. package/dist/portal/Portal.svelte +7 -6
  136. package/dist/portal/Portal.svelte.d.ts +3 -22
  137. package/dist/portal/PortalGroup.svelte +6 -14
  138. package/dist/portal/PortalGroup.svelte.d.ts +5 -34
  139. package/dist/radio-group/Radio.svelte +135 -0
  140. package/dist/radio-group/Radio.svelte.d.ts +35 -0
  141. package/dist/radio-group/RadioGroup.svelte +223 -0
  142. package/dist/radio-group/RadioGroup.svelte.d.ts +34 -0
  143. package/dist/radio-group/RadioOption.svelte +138 -0
  144. package/dist/radio-group/RadioOption.svelte.d.ts +37 -0
  145. package/dist/radio-group/contest.svelte.d.ts +30 -0
  146. package/dist/radio-group/contest.svelte.js +40 -0
  147. package/dist/radio-group/index.d.ts +3 -0
  148. package/dist/radio-group/index.js +3 -0
  149. package/dist/select/Select.svelte +103 -0
  150. package/dist/select/Select.svelte.d.ts +21 -0
  151. package/dist/select/index.d.ts +1 -0
  152. package/dist/select/index.js +1 -0
  153. package/dist/switch/Switch.svelte +27 -28
  154. package/dist/switch/Switch.svelte.d.ts +9 -42
  155. package/dist/switch/SwitchGroup.svelte +5 -5
  156. package/dist/switch/SwitchGroup.svelte.d.ts +8 -30
  157. package/dist/switch/index.d.ts +1 -1
  158. package/dist/switch/index.js +1 -1
  159. package/dist/tabs/Tab.svelte +26 -29
  160. package/dist/tabs/Tab.svelte.d.ts +8 -36
  161. package/dist/tabs/TabGroup.svelte +42 -264
  162. package/dist/tabs/TabGroup.svelte.d.ts +7 -57
  163. package/dist/tabs/TabList.svelte +13 -16
  164. package/dist/tabs/TabList.svelte.d.ts +8 -31
  165. package/dist/tabs/TabPanel.svelte +19 -19
  166. package/dist/tabs/TabPanel.svelte.d.ts +8 -38
  167. package/dist/tabs/TabPanels.svelte +11 -9
  168. package/dist/tabs/TabPanels.svelte.d.ts +8 -30
  169. package/dist/tabs/context.svelte.d.ts +31 -0
  170. package/dist/tabs/context.svelte.js +134 -0
  171. package/dist/tabs/index.d.ts +5 -5
  172. package/dist/tabs/index.js +4 -4
  173. package/dist/textarea/Textarea.svelte +23 -19
  174. package/dist/textarea/Textarea.svelte.d.ts +18 -30
  175. package/dist/textarea/index.d.ts +1 -1
  176. package/dist/textarea/index.js +1 -1
  177. package/dist/transition/InternalTransitionChild.svelte +19 -12
  178. package/dist/transition/InternalTransitionChild.svelte.d.ts +4 -35
  179. package/dist/transition/Transition.svelte +16 -17
  180. package/dist/transition/Transition.svelte.d.ts +8 -38
  181. package/dist/transition/TransitionChild.svelte +13 -12
  182. package/dist/transition/TransitionChild.svelte.d.ts +11 -38
  183. package/dist/transition/context.svelte.js +9 -9
  184. package/dist/transition/index.d.ts +2 -2
  185. package/dist/transition/index.js +2 -2
  186. package/dist/utils/DisabledProvider.svelte +10 -0
  187. package/dist/utils/DisabledProvider.svelte.d.ts +8 -0
  188. package/dist/utils/ElementOrComponent.svelte +57 -14
  189. package/dist/utils/ElementOrComponent.svelte.d.ts +19 -29
  190. package/dist/utils/StableCollection.svelte.d.ts +4 -18
  191. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +32 -0
  192. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte.d.ts +8 -0
  193. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +94 -0
  194. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte.d.ts +26 -0
  195. package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.d.ts +6 -0
  196. package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.js +158 -0
  197. package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.d.ts +11 -0
  198. package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.js +53 -0
  199. package/dist/utils/floating-ui/svelte/hooks/useId.svelte.d.ts +9 -0
  200. package/dist/utils/floating-ui/svelte/hooks/useId.svelte.js +28 -0
  201. package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.d.ts +23 -0
  202. package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.js +72 -0
  203. package/dist/utils/floating-ui/svelte/index.d.ts +5 -0
  204. package/dist/utils/floating-ui/svelte/index.js +5 -0
  205. package/dist/utils/floating-ui/svelte/inner.svelte.d.ts +83 -0
  206. package/dist/utils/floating-ui/svelte/inner.svelte.js +178 -0
  207. package/dist/utils/floating-ui/svelte/types.d.ts +114 -0
  208. package/dist/utils/floating-ui/svelte/utils/createPubSub.d.ts +5 -0
  209. package/dist/utils/floating-ui/svelte/utils/createPubSub.js +14 -0
  210. package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.d.ts +2 -0
  211. package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.js +13 -0
  212. package/dist/utils/floating-ui/svelte/utils/log.d.ts +2 -0
  213. package/dist/utils/floating-ui/svelte/utils/log.js +19 -0
  214. package/dist/utils/floating-ui/svelte/utils.d.ts +19 -0
  215. package/dist/utils/floating-ui/svelte/utils.js +136 -0
  216. package/dist/utils/floating-ui/svelte-dom/arrow.d.ts +22 -0
  217. package/dist/utils/floating-ui/svelte-dom/arrow.js +29 -0
  218. package/dist/utils/floating-ui/svelte-dom/index.d.ts +2 -0
  219. package/dist/utils/floating-ui/svelte-dom/index.js +2 -0
  220. package/dist/utils/floating-ui/svelte-dom/types.d.ts +80 -0
  221. package/dist/utils/floating-ui/svelte-dom/types.js +3 -0
  222. package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.d.ts +6 -0
  223. package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.js +182 -0
  224. package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.d.ts +1 -0
  225. package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.js +50 -0
  226. package/dist/utils/floating-ui/svelte-dom/utils/getDPR.d.ts +1 -0
  227. package/dist/utils/floating-ui/svelte-dom/utils/getDPR.js +7 -0
  228. package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.d.ts +1 -0
  229. package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.js +5 -0
  230. package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.d.ts +4 -0
  231. package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.js +7 -0
  232. package/dist/utils/id.d.ts +1 -1
  233. package/dist/utils/id.js +1 -1
  234. package/dist/utils/index.d.ts +3 -0
  235. package/dist/utils/index.js +3 -0
  236. package/dist/utils/state.js +4 -4
  237. package/dist/utils/style.d.ts +2 -0
  238. package/dist/utils/style.js +6 -0
  239. package/dist/utils/types.d.ts +12 -18
  240. package/package.json +33 -32
  241. package/dist/combobox/Combobox.svelte +0 -53
  242. package/dist/combobox/Combobox.svelte.d.ts +0 -50
  243. package/dist/dialog/InternalDialog.svelte +0 -294
  244. package/dist/dialog/InternalDialog.svelte.d.ts +0 -42
  245. package/dist/internal/HoistFormFields.svelte +0 -14
  246. package/dist/internal/HoistFormFields.svelte.d.ts +0 -21
  247. package/dist/internal/id.d.ts +0 -8
  248. package/dist/internal/id.js +0 -11
  249. package/dist/utils/Generic.svelte +0 -56
  250. package/dist/utils/Generic.svelte.d.ts +0 -35
  251. package/dist/utils/alternative-types.d.ts +0 -21
  252. /package/dist/utils/{alternative-types.js → floating-ui/svelte/types.js} +0 -0
@@ -1,37 +1,34 @@
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
  let DEFAULT_PANEL_TAG = "div" as const
5
- type PanelRenderPropArg = {
5
+ export type PanelRenderPropArg = {
6
6
  open: boolean
7
7
  }
8
8
 
9
- export type DialogPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = Props<
10
- TTag,
11
- PanelRenderPropArg,
12
- never,
13
- {
14
- id?: string
15
- transition?: boolean
16
- }
17
- >
9
+ export type DialogPanelOwnProps = {
10
+ element?: HTMLElement
11
+ id?: string
12
+ transition?: boolean
13
+ }
14
+
15
+ export type DialogPanelProps = Props<typeof DEFAULT_PANEL_TAG, PanelRenderPropArg, DialogPanelOwnProps>
18
16
  </script>
19
17
 
20
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_PANEL_TAG">
18
+ <script lang="ts">
21
19
  import { useId } from "../hooks/use-id.js"
22
20
  import { DialogStates, useDialogContext } from "./context.svelte.js"
23
21
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
24
22
  import { mergeProps } from "../utils/render.js"
25
23
  import TransitionChild from "../transition/TransitionChild.svelte"
26
- import { onMount } from "svelte"
27
24
 
28
25
  let internalId = useId()
29
26
  let {
30
- ref = $bindable(),
27
+ element = $bindable(),
31
28
  id = `headlessui-dialog-panel-${internalId}`,
32
29
  transition = false,
33
30
  ...theirProps
34
- }: { as?: TTag } & DialogPanelProps<TTag> = $props()
31
+ }: DialogPanelProps = $props()
35
32
  const _state = useDialogContext("Dialog.Panel")
36
33
  const { dialogState, unmount } = $derived(_state)
37
34
 
@@ -52,18 +49,25 @@
52
49
  </script>
53
50
 
54
51
  {#if transition}
55
- <TransitionChild {unmount} {ref}>
56
- {#snippet children(slot, props)}
52
+ <TransitionChild asChild {unmount} {element}>
53
+ {#snippet children({ props, ...slot })}
57
54
  <ElementOrComponent
58
55
  ourProps={{ ...ourProps, ...props }}
59
56
  {theirProps}
60
57
  slots={slot}
61
58
  defaultTag={DEFAULT_PANEL_TAG}
62
59
  name="DialogPanel"
63
- bind:ref
60
+ bind:element
64
61
  />
65
62
  {/snippet}
66
63
  </TransitionChild>
67
64
  {:else}
68
- <ElementOrComponent {ourProps} {theirProps} slots={slot} defaultTag={DEFAULT_PANEL_TAG} name="DialogPanel" bind:ref />
65
+ <ElementOrComponent
66
+ {ourProps}
67
+ {theirProps}
68
+ slots={slot}
69
+ defaultTag={DEFAULT_PANEL_TAG}
70
+ name="DialogPanel"
71
+ bind:element
72
+ />
69
73
  {/if}
@@ -1,40 +1,14 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare let DEFAULT_PANEL_TAG: "div";
3
- type PanelRenderPropArg = {
3
+ export type PanelRenderPropArg = {
4
4
  open: boolean;
5
5
  };
6
- export type DialogPanelProps<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = Props<TTag, PanelRenderPropArg, never, {
6
+ export type DialogPanelOwnProps = {
7
+ element?: HTMLElement;
7
8
  id?: string;
8
9
  transition?: boolean;
9
- }>;
10
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> {
11
- props(): {
12
- as?: TTag | undefined;
13
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "id" | "transition"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
14
- children?: import("../utils/types.js").Children<PanelRenderPropArg> | undefined;
15
- ref?: HTMLElement;
16
- } & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
17
- class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: PanelRenderPropArg) => string) | undefined;
18
- } : {}) & {
19
- id?: string;
20
- transition?: boolean;
21
- };
22
- events(): {} & {
23
- [evt: string]: CustomEvent<any>;
24
- };
25
- slots(): {};
26
- bindings(): "ref";
27
- exports(): {};
28
- }
29
- interface $$IsomorphicComponent {
30
- 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']>> & {
31
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
32
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
33
- <TTag extends ElementType = typeof DEFAULT_PANEL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
34
- $$events?: ReturnType<__sveltets_Render<TTag>['events']>;
35
- }): ReturnType<__sveltets_Render<TTag>['exports']>;
36
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
37
- }
38
- declare const DialogPanel: $$IsomorphicComponent;
39
- type DialogPanel<TTag extends ElementType = typeof DEFAULT_PANEL_TAG> = InstanceType<typeof DialogPanel<TTag>>;
10
+ };
11
+ export type DialogPanelProps = Props<typeof DEFAULT_PANEL_TAG, PanelRenderPropArg, DialogPanelOwnProps>;
12
+ declare const DialogPanel: import("svelte").Component<DialogPanelProps, {}, "element">;
13
+ type DialogPanel = ReturnType<typeof DialogPanel>;
40
14
  export default DialogPanel;
@@ -1,17 +1,19 @@
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
  let DEFAULT_TITLE_TAG = "h2" as const
5
- type TitleRenderPropArg = {
5
+ export type TitleRenderPropArg = {
6
6
  open: boolean
7
7
  }
8
8
 
9
- export type DialogTitleProps<TTag extends ElementType = typeof DEFAULT_TITLE_TAG> = Props<TTag, TitleRenderPropArg>
9
+ export type DialogTitleOwnProps = { id?: string; element?: HTMLElement }
10
+
11
+ export type DialogTitleProps = Props<typeof DEFAULT_TITLE_TAG, TitleRenderPropArg, DialogTitleOwnProps>
10
12
 
11
13
  //
12
14
  </script>
13
15
 
14
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_TITLE_TAG">
16
+ <script lang="ts">
15
17
  import { useId } from "../hooks/use-id.js"
16
18
  import { DialogStates, useDialogContext } from "./context.svelte.js"
17
19
  import { onMount } from "svelte"
@@ -20,10 +22,10 @@
20
22
 
21
23
  const internalId = useId()
22
24
  let {
23
- ref = $bindable(),
24
- id = `headlessui-dialog-title-${internalId}` as PropsOf<TTag>[string],
25
+ element = $bindable(),
26
+ id = `headlessui-dialog-title-${internalId}`,
25
27
  ...theirProps
26
- }: { as?: TTag } & DialogTitleProps<TTag> = $props()
28
+ }: DialogTitleProps = $props()
27
29
  const _state = useDialogContext("Dialog.Panel")
28
30
  const { dialogState, setTitleId } = $derived(_state)
29
31
 
@@ -41,4 +43,11 @@
41
43
  )
42
44
  </script>
43
45
 
44
- <ElementOrComponent {ourProps} {theirProps} slots={slot} defaultTag={DEFAULT_TITLE_TAG} name="DialogTitle" bind:ref />
46
+ <ElementOrComponent
47
+ {ourProps}
48
+ {theirProps}
49
+ slots={slot}
50
+ defaultTag={DEFAULT_TITLE_TAG}
51
+ name="DialogTitle"
52
+ bind:element
53
+ />
@@ -1,34 +1,13 @@
1
- import type { ElementType, Props, PropsOf } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare let DEFAULT_TITLE_TAG: "h2";
3
- type TitleRenderPropArg = {
3
+ export type TitleRenderPropArg = {
4
4
  open: boolean;
5
5
  };
6
- export type DialogTitleProps<TTag extends ElementType = typeof DEFAULT_TITLE_TAG> = Props<TTag, TitleRenderPropArg>;
7
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_TITLE_TAG> {
8
- props(): {
9
- as?: TTag | undefined;
10
- } & (Exclude<keyof PropsOf<TTag>, "as" | "children" | "refName" | "class"> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
11
- children?: import("../utils/types.js").Children<TitleRenderPropArg> | undefined;
12
- ref?: HTMLElement;
13
- } & (true extends (PropsOf<TTag> extends infer T_1 ? T_1 extends PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
14
- class?: PropsOf<TTag>["class"] | ((bag: TitleRenderPropArg) => string) | undefined;
15
- } : {});
16
- events(): {} & {
17
- [evt: string]: CustomEvent<any>;
18
- };
19
- slots(): {};
20
- bindings(): "ref";
21
- exports(): {};
22
- }
23
- interface $$IsomorphicComponent {
24
- new <TTag extends ElementType = typeof DEFAULT_TITLE_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']>> & {
25
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
26
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
27
- <TTag extends ElementType = typeof DEFAULT_TITLE_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
28
- $$events?: ReturnType<__sveltets_Render<TTag>['events']>;
29
- }): ReturnType<__sveltets_Render<TTag>['exports']>;
30
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
31
- }
32
- declare const DialogTitle: $$IsomorphicComponent;
33
- type DialogTitle<TTag extends ElementType = typeof DEFAULT_TITLE_TAG> = InstanceType<typeof DialogTitle<TTag>>;
6
+ export type DialogTitleOwnProps = {
7
+ id?: string;
8
+ element?: HTMLElement;
9
+ };
10
+ export type DialogTitleProps = Props<typeof DEFAULT_TITLE_TAG, TitleRenderPropArg, DialogTitleOwnProps>;
11
+ declare const DialogTitle: import("svelte").Component<DialogTitleProps, {}, "element">;
12
+ type DialogTitle = ReturnType<typeof DialogTitle>;
34
13
  export default DialogTitle;
@@ -6,8 +6,8 @@ export var DialogStates;
6
6
  })(DialogStates || (DialogStates = {}));
7
7
  export function useDialogContext(component) {
8
8
  const context = getContext("DialogContext");
9
- if (context === null) {
10
- let err = new Error(`<${component} /> is missing a parent <Dialog /> component.`);
9
+ if (!context) {
10
+ const err = new Error(`<${component} /> is missing a parent <Dialog /> component.`);
11
11
  if (Error.captureStackTrace)
12
12
  Error.captureStackTrace(err, useDialogContext);
13
13
  throw err;
@@ -1,4 +1,4 @@
1
- export { default as Dialog, type DialogProps } from "./Dialog.svelte";
2
- export { default as DialogBackdrop, type DialogBackdropProps } from "./DialogBackdrop.svelte";
3
- export { default as DialogPanel, type DialogPanelProps } from "./DialogPanel.svelte";
4
- export { default as DialogTitle, type DialogTitleProps } from "./DialogTitle.svelte";
1
+ export { default as Dialog, type DialogProps, type DialogRenderPropArg as DialogSlot, type DialogOwnProps, } from "./Dialog.svelte";
2
+ export { default as DialogBackdrop, type DialogBackdropProps, type BackdropRenderPropArg as DialogBackdropSlot, type DialogBackdropOwnProps, } from "./DialogBackdrop.svelte";
3
+ export { default as DialogPanel, type DialogPanelProps, type PanelRenderPropArg as DialogPanelSlot, type DialogPanelOwnProps, } from "./DialogPanel.svelte";
4
+ export { default as DialogTitle, type DialogTitleProps, type TitleRenderPropArg as DialogTitleSlot, type DialogTitleOwnProps, } from "./DialogTitle.svelte";
@@ -1,4 +1,4 @@
1
- export { default as Dialog } from "./Dialog.svelte";
2
- export { default as DialogBackdrop } from "./DialogBackdrop.svelte";
3
- export { default as DialogPanel } from "./DialogPanel.svelte";
4
- export { default as DialogTitle } from "./DialogTitle.svelte";
1
+ export { default as Dialog, } from "./Dialog.svelte";
2
+ export { default as DialogBackdrop, } from "./DialogBackdrop.svelte";
3
+ export { default as DialogPanel, } from "./DialogPanel.svelte";
4
+ export { default as DialogTitle, } from "./DialogTitle.svelte";
@@ -1,32 +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
 
4
4
  let DEFAULT_FIELD_TAG = "div" as const
5
5
 
6
- type FieldRenderPropArg = {}
7
- type FieldPropsWeControl = never
8
-
9
- export type FieldProps<TTag extends ElementType = typeof DEFAULT_FIELD_TAG> = Props<
10
- TTag,
11
- FieldRenderPropArg,
12
- FieldPropsWeControl,
13
- {
14
- disabled?: boolean
15
- }
16
- >
6
+ export type FieldOwnProps = {
7
+ element?: HTMLElement
8
+ disabled?: boolean
9
+ }
10
+
11
+ export type FieldProps = Props<typeof DEFAULT_FIELD_TAG, {}, FieldOwnProps>
17
12
  </script>
18
13
 
19
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_FIELD_TAG">
20
- import { useDisabled } from "../hooks/use-disabled.js"
14
+ <script lang="ts">
15
+ import { provideDisabled } from "../hooks/use-disabled.js"
21
16
  import { createIdContext } from "../utils/id.js"
22
- import { stateFromSlot } from "../utils/state.js"
23
17
  import { nanoid } from "nanoid"
24
- import { setContext, type Snippet } from "svelte"
25
18
  import { useLabels } from "../label/context.svelte.js"
26
19
  import { useDescriptions } from "../description/context.svelte.js"
27
20
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
21
+ import FormFieldsProvider from "../internal/FormFieldsProvider.svelte"
28
22
 
29
- let { ref = $bindable(), disabled: ownDisabled = false, ...theirProps }: { as?: TTag } & FieldProps<TTag> = $props()
23
+ let { element = $bindable(), disabled: ownDisabled = false, children, ...theirProps }: FieldProps = $props()
30
24
 
31
25
  const inputId = `headlessui-control-${nanoid(8)}`
32
26
  createIdContext(inputId)
@@ -34,14 +28,8 @@
34
28
  useLabels()
35
29
  useDescriptions()
36
30
 
37
- const providedDisabled = useDisabled()
38
- const disabled = $derived(providedDisabled.value || ownDisabled)
39
-
40
- setContext("DisabledContext", {
41
- get value() {
42
- return disabled
43
- },
44
- })
31
+ const disabledContext = provideDisabled(() => ownDisabled)
32
+ const { current: disabled } = $derived(disabledContext)
45
33
 
46
34
  const slot = $derived({ disabled })
47
35
 
@@ -51,4 +39,17 @@
51
39
  })
52
40
  </script>
53
41
 
54
- <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_FIELD_TAG} name="Field" bind:ref />
42
+ {#snippet wrapper(args: { props: Record<string, any> })}
43
+ <FormFieldsProvider>
44
+ {@render children?.(args)}
45
+ </FormFieldsProvider>
46
+ {/snippet}
47
+
48
+ <ElementOrComponent
49
+ {ourProps}
50
+ theirProps={{ ...theirProps, children: wrapper }}
51
+ {slot}
52
+ defaultTag={DEFAULT_FIELD_TAG}
53
+ name="Field"
54
+ bind:element
55
+ />
@@ -1,37 +1,10 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare let DEFAULT_FIELD_TAG: "div";
3
- type FieldRenderPropArg = {};
4
- type FieldPropsWeControl = never;
5
- export type FieldProps<TTag extends ElementType = typeof DEFAULT_FIELD_TAG> = Props<TTag, FieldRenderPropArg, FieldPropsWeControl, {
3
+ export type FieldOwnProps = {
4
+ element?: HTMLElement;
6
5
  disabled?: boolean;
7
- }>;
8
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_FIELD_TAG> {
9
- props(): {
10
- as?: TTag | undefined;
11
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "disabled"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
12
- children?: import("../utils/types.js").Children<FieldRenderPropArg> | undefined;
13
- ref?: HTMLElement;
14
- } & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
15
- class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: FieldRenderPropArg) => string) | undefined;
16
- } : {}) & {
17
- disabled?: boolean;
18
- };
19
- events(): {} & {
20
- [evt: string]: CustomEvent<any>;
21
- };
22
- slots(): {};
23
- bindings(): "ref";
24
- exports(): {};
25
- }
26
- interface $$IsomorphicComponent {
27
- new <TTag extends ElementType = typeof DEFAULT_FIELD_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']>> & {
28
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
29
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
30
- <TTag extends ElementType = typeof DEFAULT_FIELD_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
31
- $$events?: ReturnType<__sveltets_Render<TTag>['events']>;
32
- }): ReturnType<__sveltets_Render<TTag>['exports']>;
33
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
34
- }
35
- declare const Field: $$IsomorphicComponent;
36
- type Field<TTag extends ElementType = typeof DEFAULT_FIELD_TAG> = InstanceType<typeof Field<TTag>>;
6
+ };
7
+ export type FieldProps = Props<typeof DEFAULT_FIELD_TAG, {}, FieldOwnProps>;
8
+ declare const Field: import("svelte").Component<FieldProps, {}, "element">;
9
+ type Field = ReturnType<typeof Field>;
37
10
  export default Field;
@@ -1 +1 @@
1
- export { default as Field, type FieldProps } from "./Field.svelte";
1
+ export { default as Field, type FieldProps, type FieldOwnProps } from "./Field.svelte";
@@ -1,34 +1,28 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
3
- let DEFAULT_FIELDSET_TAG = "fieldset" as const
2
+ import type { Props } from "../utils/types.js"
3
+
4
+ const DEFAULT_FIELDSET_TAG = "fieldset" as const
4
5
 
5
- type FieldsetRenderPropArg = {}
6
6
  type FieldsetPropsWeControl = "aria-labelledby" | "aria-disabled" | "role"
7
7
 
8
- export type FieldsetProps<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> = Props<
9
- TTag,
10
- FieldsetRenderPropArg,
11
- FieldsetPropsWeControl,
12
- {
13
- disabled?: boolean
14
- }
15
- >
8
+ export type FieldsetOwnProps = {
9
+ element?: HTMLElement
10
+ disabled?: boolean
11
+ }
12
+
13
+ export type FieldsetProps = Props<typeof DEFAULT_FIELDSET_TAG, {}, FieldsetOwnProps>
16
14
  </script>
17
15
 
18
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG">
16
+ <script lang="ts">
19
17
  import { setContext } from "svelte"
20
18
  import { useDisabled } from "../hooks/use-disabled.js"
21
19
  import { useLabels } from "../label/context.svelte.js"
22
20
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
23
21
 
24
- let {
25
- ref = $bindable(),
26
- disabled: ownDisabled = false,
27
- ...theirProps
28
- }: { as?: TTag } & FieldsetProps<TTag> = $props()
22
+ let { element = $bindable(), disabled: ownDisabled = false, ...theirProps }: FieldsetProps = $props()
29
23
 
30
24
  const providedDisabled = useDisabled()
31
- const disabled = $derived(providedDisabled.value || ownDisabled)
25
+ const disabled = $derived(providedDisabled.current || ownDisabled)
32
26
 
33
27
  setContext("DisabledContext", {
34
28
  get value() {
@@ -39,7 +33,7 @@
39
33
  const labelledBy = useLabels()
40
34
  const slot = $derived({ disabled })
41
35
  const ourProps = $derived(
42
- (theirProps.as ?? DEFAULT_FIELDSET_TAG) === "fieldset"
36
+ !theirProps.asChild
43
37
  ? {
44
38
  "aria-labelledby": labelledBy.value,
45
39
  disabled: disabled || undefined,
@@ -52,4 +46,4 @@
52
46
  )
53
47
  </script>
54
48
 
55
- <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_FIELDSET_TAG} name="Fieldset" bind:ref />
49
+ <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_FIELDSET_TAG} name="Fieldset" bind:element />
@@ -1,37 +1,10 @@
1
- import type { ElementType, Props } from "../utils/types.js";
2
- declare let DEFAULT_FIELDSET_TAG: "fieldset";
3
- type FieldsetRenderPropArg = {};
4
- type FieldsetPropsWeControl = "aria-labelledby" | "aria-disabled" | "role";
5
- export type FieldsetProps<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> = Props<TTag, FieldsetRenderPropArg, FieldsetPropsWeControl, {
1
+ import type { Props } from "../utils/types.js";
2
+ declare const DEFAULT_FIELDSET_TAG: "fieldset";
3
+ export type FieldsetOwnProps = {
4
+ element?: HTMLElement;
6
5
  disabled?: boolean;
7
- }>;
8
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> {
9
- props(): {
10
- as?: TTag | undefined;
11
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "disabled" | FieldsetPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
12
- children?: import("../utils/types.js").Children<FieldsetRenderPropArg> | undefined;
13
- ref?: HTMLElement;
14
- } & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
15
- class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: FieldsetRenderPropArg) => string) | undefined;
16
- } : {}) & {
17
- disabled?: boolean;
18
- };
19
- events(): {} & {
20
- [evt: string]: CustomEvent<any>;
21
- };
22
- slots(): {};
23
- bindings(): "ref";
24
- exports(): {};
25
- }
26
- interface $$IsomorphicComponent {
27
- new <TTag extends ElementType = typeof DEFAULT_FIELDSET_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']>> & {
28
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
29
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
30
- <TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
31
- $$events?: ReturnType<__sveltets_Render<TTag>['events']>;
32
- }): ReturnType<__sveltets_Render<TTag>['exports']>;
33
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
34
- }
35
- declare const Fieldset: $$IsomorphicComponent;
36
- type Fieldset<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> = InstanceType<typeof Fieldset<TTag>>;
6
+ };
7
+ export type FieldsetProps = Props<typeof DEFAULT_FIELDSET_TAG, {}, FieldsetOwnProps>;
8
+ declare const Fieldset: import("svelte").Component<FieldsetProps, {}, "element">;
9
+ type Fieldset = ReturnType<typeof Fieldset>;
37
10
  export default Fieldset;
@@ -1 +1 @@
1
- export { default as Fieldset, type FieldsetProps } from "./Fieldset.svelte";
1
+ export { default as Fieldset, type FieldsetProps, type FieldsetOwnProps } from "./Fieldset.svelte";
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" module>
2
2
  import { getOwnerDocument } from "../utils/owner.js"
3
- import type { ElementType, Props } from "../utils/types.js"
3
+ import type { Props } from "../utils/types.js"
4
4
  import { history } from "../utils/active-element-history.js"
5
5
  import { useWatch } from "../hooks/use-watch.svelte.js"
6
6
  import { microTask } from "../utils/microTask.js"
@@ -13,6 +13,7 @@
13
13
  import { useDisposables } from "../utils/disposables.js"
14
14
  import Hidden, { HiddenFeatures } from "../internal/Hidden.svelte"
15
15
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
16
+ import { FocusTrapFeatures } from "./FocusTrapFeatures.js"
16
17
 
17
18
  type Containers =
18
19
  // Lazy resolved containers
@@ -34,45 +35,24 @@
34
35
  return all
35
36
  }
36
37
 
37
- let DEFAULT_FOCUS_TRAP_TAG = "div" as const
38
+ const DEFAULT_FOCUS_TRAP_TAG = "div" as const
38
39
 
39
- export enum FocusTrapFeatures {
40
- /** No features enabled for the focus trap. */
41
- None = 0,
40
+ export * from "./FocusTrapFeatures.js"
42
41
 
43
- /** Ensure that we move focus initially into the container. */
44
- InitialFocus = 1 << 0,
45
-
46
- /** Ensure that pressing `Tab` and `Shift+Tab` is trapped within the container. */
47
- TabLock = 1 << 1,
48
-
49
- /** Ensure that programmatically moving focus outside of the container is disallowed. */
50
- FocusLock = 1 << 2,
51
-
52
- /** Ensure that we restore the focus when unmounting the focus trap. */
53
- RestoreFocus = 1 << 3,
42
+ type FocusTrapPropsWeControl = never
54
43
 
55
- /** Initial focus should look for the `data-autofocus` */
56
- AutoFocus = 1 << 4,
44
+ export type FocusTrapOwnProps = {
45
+ element?: HTMLElement
46
+ initialFocus?: HTMLElement
47
+ // A fallback element to focus, but this element will be skipped when tabbing around. This is
48
+ // only done for focusing a fallback parent container (e.g.: A `Dialog`, but you want to tab
49
+ // *inside* the dialog excluding the dialog itself).
50
+ initialFocusFallback?: HTMLElement
51
+ features?: FocusTrapFeatures
52
+ containers?: Containers
57
53
  }
58
54
 
59
- type FocusTrapRenderPropArg = {}
60
- type FocusTrapPropsWeControl = never
61
-
62
- export type FocusTrapProps<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG> = Props<
63
- TTag,
64
- FocusTrapRenderPropArg,
65
- FocusTrapPropsWeControl,
66
- {
67
- initialFocus?: HTMLElement
68
- // A fallback element to focus, but this element will be skipped when tabbing around. This is
69
- // only done for focusing a fallback parent container (e.g.: A `Dialog`, but you want to tab
70
- // *inside* the dialog excluding the dialog itself).
71
- initialFocusFallback?: HTMLElement
72
- features?: FocusTrapFeatures
73
- containers?: Containers
74
- }
75
- >
55
+ export type FocusTrapProps = Props<typeof DEFAULT_FOCUS_TRAP_TAG, {}, FocusTrapOwnProps>
76
56
 
77
57
  function useRestoreElement(options?: { enabled: boolean }) {
78
58
  const { enabled } = $derived(options ?? { enabled: true })
@@ -310,10 +290,10 @@
310
290
  }
311
291
  </script>
312
292
 
313
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG">
293
+ <script lang="ts">
314
294
  let container = $state<HTMLElement | null>(null)
315
295
  let {
316
- ref = $bindable(),
296
+ element = $bindable(),
317
297
  initialFocus,
318
298
  initialFocusFallback,
319
299
  containers,
@@ -322,13 +302,13 @@
322
302
  FocusTrapFeatures.FocusLock |
323
303
  FocusTrapFeatures.RestoreFocus,
324
304
  ...theirProps
325
- }: { as?: TTag } & FocusTrapProps<TTag> = $props()
305
+ }: FocusTrapProps = $props()
326
306
 
327
307
  /*if (!useServerHandoffComplete()) {
328
308
  features = FocusTrapFeatures.None
329
309
  }*/
330
310
 
331
- const ownerDocument = $derived(getOwnerDocument(ref))
311
+ const ownerDocument = $derived(getOwnerDocument(element))
332
312
 
333
313
  useRestoreFocus({
334
314
  get features() {
@@ -458,21 +438,17 @@
458
438
  </script>
459
439
 
460
440
  {#if tabLockEnabled}
461
- <Hidden
462
- as="button"
463
- type="button"
464
- data-headlessui-focus-guard
465
- onfocus={handleFocus}
466
- features={HiddenFeatures.Focusable}
467
- />
441
+ <Hidden asChild features={HiddenFeatures.Focusable}>
442
+ {#snippet children({ props })}
443
+ <button {...props} type="button" data-headlessui-focus-guard onfocus={handleFocus}>&zwnj;</button>
444
+ {/snippet}
445
+ </Hidden>
468
446
  {/if}
469
- <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_FOCUS_TRAP_TAG} name="FocusTrap" bind:ref />
447
+ <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_FOCUS_TRAP_TAG} name="FocusTrap" bind:element />
470
448
  {#if tabLockEnabled}
471
- <Hidden
472
- as="button"
473
- type="button"
474
- data-headlessui-focus-guard
475
- onfocus={handleFocus}
476
- features={HiddenFeatures.Focusable}
477
- />
449
+ <Hidden asChild features={HiddenFeatures.Focusable}>
450
+ {#snippet children({ props })}
451
+ <button {...props} type="button" data-headlessui-focus-guard onfocus={handleFocus}>&zwnj;</button>
452
+ {/snippet}
453
+ </Hidden>
478
454
  {/if}