@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,15 +1,21 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props, PropsOf } from "../utils/types.js"
3
-
4
- let DEFAULT_LABEL_TAG = "label" as const
5
-
6
- export type LabelProps<TTag extends ElementType = typeof DEFAULT_LABEL_TAG> = Props<TTag> & {
7
- passive?: boolean
8
- htmlFor?: string
9
- }
2
+ import type { Props } from "../utils/types.js"
3
+
4
+ const DEFAULT_LABEL_TAG = "label" as const
5
+
6
+ export type LabelProps = Props<
7
+ typeof DEFAULT_LABEL_TAG,
8
+ {},
9
+ {
10
+ element?: HTMLElement
11
+ id?: string
12
+ passive?: boolean
13
+ htmlFor?: string
14
+ }
15
+ >
10
16
  </script>
11
17
 
12
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_LABEL_TAG">
18
+ <script lang="ts">
13
19
  import { onMount } from "svelte"
14
20
  import { useProvidedId, htmlid } from "../utils/id.js"
15
21
  import { useDisabled } from "../hooks/use-disabled.js"
@@ -23,12 +29,12 @@
23
29
  const providedDisabled = useDisabled()
24
30
 
25
31
  let {
26
- ref = $bindable(),
27
- id = `headlessui-label-${internalId}` as PropsOf<TTag>["id"],
32
+ element = $bindable(),
33
+ id = `headlessui-label-${internalId}`,
28
34
  htmlFor = providedHtmlFor,
29
35
  passive = false,
30
36
  ...theirOriginalProps
31
- }: { as?: TTag } & LabelProps<TTag> = $props()
37
+ }: LabelProps = $props()
32
38
 
33
39
  onMount(() => {
34
40
  context.register(id)
@@ -103,5 +109,5 @@
103
109
  {theirProps}
104
110
  defaultTag={htmlFor ? DEFAULT_LABEL_TAG : "div"}
105
111
  name={context.name || "Label"}
106
- bind:ref
112
+ bind:element
107
113
  />
@@ -1,34 +1,10 @@
1
- import type { ElementType, Props, PropsOf } from "../utils/types.js";
2
- declare let DEFAULT_LABEL_TAG: "label";
3
- export type LabelProps<TTag extends ElementType = typeof DEFAULT_LABEL_TAG> = Props<TTag> & {
1
+ import type { Props } from "../utils/types.js";
2
+ declare const DEFAULT_LABEL_TAG: "label";
3
+ export type LabelProps = Props<typeof DEFAULT_LABEL_TAG, {}, {
4
+ element?: HTMLElement;
5
+ id?: string;
4
6
  passive?: boolean;
5
7
  htmlFor?: string;
6
- };
7
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_LABEL_TAG> {
8
- props(): {
9
- as?: TTag | undefined;
10
- } & (Exclude<keyof PropsOf<TTag>, "slot" | "as" | "children" | "class" | "ref"> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
11
- children?: import("svelte").Snippet<[{
12
- props?: Record<string, any>;
13
- }]> | undefined;
14
- class?: string | ((bag: {}) => string) | null | undefined;
15
- ref?: HTMLElement;
16
- } & {
17
- passive?: boolean;
18
- htmlFor?: string;
19
- };
20
- events(): {};
21
- slots(): {};
22
- bindings(): "ref";
23
- exports(): {};
24
- }
25
- interface $$IsomorphicComponent {
26
- new <TTag extends ElementType = typeof DEFAULT_LABEL_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']>> & {
27
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
28
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
29
- <TTag extends ElementType = typeof DEFAULT_LABEL_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
30
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
31
- }
32
- declare const Label: $$IsomorphicComponent;
33
- type Label<TTag extends ElementType = typeof DEFAULT_LABEL_TAG> = InstanceType<typeof Label<TTag>>;
8
+ }>;
9
+ declare const Label: import("svelte").Component<LabelProps, {}, "element">;
34
10
  export default Label;
@@ -4,14 +4,28 @@
4
4
 
5
5
  const DEFAULT_LEGEND_TAG = "div" as const
6
6
 
7
- type LegendRenderPropArg = {}
8
- type LegendPropsWeControl = never
9
-
10
- export type LegendProps = Props<typeof DEFAULT_LEGEND_TAG, LegendRenderPropArg, LegendPropsWeControl, {}>
7
+ export type LegendProps = Props<
8
+ typeof DEFAULT_LEGEND_TAG,
9
+ {},
10
+ {
11
+ element?: HTMLElement
12
+ class?: string
13
+ }
14
+ >
11
15
  </script>
12
16
 
13
17
  <script lang="ts">
14
- let { ...props }: LegendProps = $props()
18
+ let { asChild, children: theirChildren, ...props }: LegendProps = $props()
15
19
  </script>
16
20
 
17
- <Label as="div" {...props} />
21
+ <Label asChild>
22
+ {#snippet children({ props: childProps })}
23
+ {#if asChild}
24
+ {@render theirChildren?.({ props: { ...props, ...childProps } })}
25
+ {:else}
26
+ <div {...props} {...childProps}>
27
+ {@render theirChildren?.({ props: {} })}
28
+ </div>
29
+ {/if}
30
+ {/snippet}
31
+ </Label>
@@ -1,7 +1,8 @@
1
1
  import type { Props } from "../utils/types.js";
2
2
  declare const DEFAULT_LEGEND_TAG: "div";
3
- type LegendRenderPropArg = {};
4
- type LegendPropsWeControl = never;
5
- export type LegendProps = Props<typeof DEFAULT_LEGEND_TAG, LegendRenderPropArg, LegendPropsWeControl, {}>;
3
+ export type LegendProps = Props<typeof DEFAULT_LEGEND_TAG, {}, {
4
+ element?: HTMLElement;
5
+ class?: string;
6
+ }>;
6
7
  declare const Legend: import("svelte").Component<LegendProps, {}, "">;
7
8
  export default Legend;
@@ -5,8 +5,8 @@
5
5
  import { calculateActiveIndex, Focus } from "../utils/calculate-active-index.js"
6
6
  import { FocusableMode, isFocusableElement, sortByDomNode } from "../utils/focus-management.js"
7
7
  import { match } from "../utils/match.js"
8
- import type { ElementType, EnsureArray, Props } from "../utils/types.js"
9
- import { setContext, type Snippet } from "svelte"
8
+ import type { EnsureArray, PropsAsChild } from "../utils/types.js"
9
+ import { setContext } from "svelte"
10
10
  import { ActivationTrigger, ListboxStates, ValueMode } from "./context.svelte.js"
11
11
 
12
12
  let DEFAULT_LISTBOX_TAG = "svelte:fragment"
@@ -17,14 +17,8 @@
17
17
  value: T
18
18
  }
19
19
 
20
- export type ListboxProps<
21
- TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG,
22
- TType = string,
23
- TActualType = TType extends (infer U)[] ? U : TType,
24
- > = Props<
25
- TTag,
20
+ export type ListboxProps<TType = string, TActualType = TType extends (infer U)[] ? U : TType> = PropsAsChild<
26
21
  ListboxRenderPropArg<TType>,
27
- "value" | "defaultValue" | "onchange" | "by" | "disabled" | "horizontal" | "name" | "multiple",
28
22
  {
29
23
  value?: TType
30
24
  defaultValue?: TType
@@ -37,7 +31,6 @@
37
31
  name?: string
38
32
  multiple?: boolean
39
33
  closeOnSelect?: boolean
40
-
41
34
  __demoMode?: boolean
42
35
  }
43
36
  >
@@ -45,10 +38,7 @@
45
38
  export * from "./context.svelte.js"
46
39
  </script>
47
40
 
48
- <script
49
- lang="ts"
50
- generics="TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG, TType = string, TActualType = TType extends (infer U)[] ? U : TType"
51
- >
41
+ <script lang="ts" generics="TType = string, TActualType = TType extends (infer U)[] ? U : TType">
52
42
  import { disposables } from "../utils/disposables.js"
53
43
  import FormFields from "../internal/FormFields.svelte"
54
44
  import { useFloatingProvider } from "../internal/floating-provider.svelte.js"
@@ -304,7 +294,6 @@
304
294
  }
305
295
 
306
296
  let {
307
- ref = $bindable(),
308
297
  value: controlledValue = $bindable(),
309
298
  defaultValue,
310
299
  form,
@@ -318,7 +307,7 @@
318
307
  closeOnSelect,
319
308
  __demoMode = false,
320
309
  ...theirProps
321
- }: { as?: TTag } & ListboxProps<TTag, TType, TActualType> = $props()
310
+ }: ListboxProps<TType, TActualType> = $props()
322
311
 
323
312
  const providedDisabled = useDisabled()
324
313
  const disabled = $derived(providedDisabled.current || ownDisabled)
@@ -562,4 +551,4 @@
562
551
  {#if name && value}
563
552
  <FormFields {disabled} data={{ [name]: value }} {form} onReset={reset} />
564
553
  {/if}
565
- <ElementOrComponent {theirProps} slots={slot} defaultTag={DEFAULT_LISTBOX_TAG} name="Listbox" bind:ref />
554
+ <ElementOrComponent {theirProps} slots={slot} name="Listbox" />
@@ -1,14 +1,12 @@
1
1
  import { type ByComparator } from "../hooks/use-by-comparator.js";
2
- import type { ElementType, Props } from "../utils/types.js";
3
- import { type Snippet } from "svelte";
4
- declare let DEFAULT_LISTBOX_TAG: string;
2
+ import type { PropsAsChild } from "../utils/types.js";
5
3
  type ListboxRenderPropArg<T> = {
6
4
  open: boolean;
7
5
  disabled: boolean;
8
6
  invalid: boolean;
9
7
  value: T;
10
8
  };
11
- export type ListboxProps<TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG, TType = string, TActualType = TType extends (infer U)[] ? U : TType> = Props<TTag, ListboxRenderPropArg<TType>, "value" | "defaultValue" | "onchange" | "by" | "disabled" | "horizontal" | "name" | "multiple", {
9
+ export type ListboxProps<TType = string, TActualType = TType extends (infer U)[] ? U : TType> = PropsAsChild<ListboxRenderPropArg<TType>, {
12
10
  value?: TType;
13
11
  defaultValue?: TType;
14
12
  onchange?: (value: TType) => void;
@@ -23,41 +21,20 @@ export type ListboxProps<TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG,
23
21
  __demoMode?: boolean;
24
22
  }>;
25
23
  export * from "./context.svelte.js";
26
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG, TType = string, TActualType = TType extends (infer U)[] ? U : TType> {
27
- props(): {
28
- as?: TTag | undefined;
29
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, "form" | ("slot" | "as" | "children" | "class" | "ref") | "invalid" | "disabled" | "value" | "name" | "onchange" | "multiple" | "__demoMode" | "horizontal" | "defaultValue" | "by" | "closeOnSelect"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
30
- children?: Snippet<[ListboxRenderPropArg<TType> & {
31
- props?: Record<string, any>;
32
- }]> | undefined;
33
- class?: string | ((bag: ListboxRenderPropArg<TType>) => string) | null | undefined;
34
- ref?: HTMLElement;
35
- } & {
36
- value?: TType | undefined;
37
- defaultValue?: TType | undefined;
38
- onchange?: ((value: TType) => void) | undefined;
39
- by?: ByComparator<TActualType> | undefined;
40
- disabled?: boolean;
41
- invalid?: boolean;
42
- horizontal?: boolean;
43
- form?: string;
44
- name?: string;
45
- multiple?: boolean;
46
- closeOnSelect?: boolean;
47
- __demoMode?: boolean;
48
- };
24
+ declare class __sveltets_Render<TType = string, TActualType = TType extends (infer U)[] ? U : TType> {
25
+ props(): ListboxProps<TType, TActualType>;
49
26
  events(): {};
50
27
  slots(): {};
51
- bindings(): "ref" | "value";
28
+ bindings(): "value";
52
29
  exports(): {};
53
30
  }
54
31
  interface $$IsomorphicComponent {
55
- new <TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG, TType = string, TActualType = TType extends (infer U)[] ? U : TType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag, TType, TActualType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag, TType, TActualType>['props']>, ReturnType<__sveltets_Render<TTag, TType, TActualType>['events']>, ReturnType<__sveltets_Render<TTag, TType, TActualType>['slots']>> & {
56
- $$bindings?: ReturnType<__sveltets_Render<TTag, TType, TActualType>['bindings']>;
57
- } & ReturnType<__sveltets_Render<TTag, TType, TActualType>['exports']>;
58
- <TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG, TType = string, TActualType = TType extends (infer U)[] ? U : TType>(internal: unknown, props: ReturnType<__sveltets_Render<TTag, TType, TActualType>['props']> & {}): ReturnType<__sveltets_Render<TTag, TType, TActualType>['exports']>;
59
- z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
32
+ new <TType = string, TActualType = TType extends (infer U)[] ? U : TType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TType, TActualType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TType, TActualType>['props']>, ReturnType<__sveltets_Render<TType, TActualType>['events']>, ReturnType<__sveltets_Render<TType, TActualType>['slots']>> & {
33
+ $$bindings?: ReturnType<__sveltets_Render<TType, TActualType>['bindings']>;
34
+ } & ReturnType<__sveltets_Render<TType, TActualType>['exports']>;
35
+ <TType = string, TActualType = TType extends (infer U)[] ? U : TType>(internal: unknown, props: ReturnType<__sveltets_Render<TType, TActualType>['props']> & {}): ReturnType<__sveltets_Render<TType, TActualType>['exports']>;
36
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
60
37
  }
61
38
  declare const Listbox: $$IsomorphicComponent;
62
- type Listbox<TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG, TType = string, TActualType = TType extends (infer U)[] ? U : TType> = InstanceType<typeof Listbox<TTag, TType, TActualType>>;
39
+ type Listbox<TType = string, TActualType = TType extends (infer U)[] ? U : TType> = InstanceType<typeof Listbox<TType, TActualType>>;
63
40
  export default Listbox;
@@ -1,7 +1,7 @@
1
1
  <script lang="ts" module>
2
2
  import { useId } from "../hooks/use-id.js"
3
3
  import { useProvidedId } from "../utils/id.js"
4
- import type { ElementType, Props, PropsOf } from "../utils/types.js"
4
+ import type { Props } from "../utils/types.js"
5
5
  import { ListboxStates, useActions, useData } from "./Listbox.svelte"
6
6
  import { attemptSubmit } from "../utils/form.js"
7
7
  import { Focus } from "../utils/calculate-active-index.js"
@@ -10,7 +10,7 @@
10
10
  import { useResolveButtonType } from "../hooks/use-resolve-button-type.svelte.js"
11
11
  import { useFloatingReference, useFloatingReferenceProps } from "../internal/floating.svelte.js"
12
12
  import { stateFromSlot } from "../utils/state.js"
13
- import type { Snippet } from "svelte"
13
+ import type { SvelteHTMLElements } from "svelte/elements"
14
14
  import { useLabelledBy } from "../label/context.svelte.js"
15
15
  import { useDescribedBy } from "../description/context.svelte.js"
16
16
  import { useHover } from "../hooks/use-hover.svelte.js"
@@ -30,35 +30,36 @@
30
30
  }
31
31
  type ButtonPropsWeControl = "aria-controls" | "aria-expanded" | "aria-haspopup" | "aria-labelledby" | "disabled"
32
32
 
33
- export type ListboxButtonProps<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = Props<
34
- TTag,
33
+ export type ListboxButtonProps = Props<
34
+ typeof DEFAULT_BUTTON_TAG,
35
35
  ButtonRenderPropArg,
36
- ButtonPropsWeControl,
37
36
  {
37
+ element?: HTMLElement
38
+ id?: string
38
39
  autofocus?: boolean
39
40
  disabled?: boolean
40
41
  }
41
42
  >
42
43
  </script>
43
44
 
44
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BUTTON_TAG">
45
+ <script lang="ts">
45
46
  const data = useData("ListboxButton")
46
47
  const actions = useActions("ListboxButton")
47
48
 
48
49
  const internalId = useId()
49
50
  const providedId = useProvidedId()
50
51
  let {
51
- ref = $bindable(),
52
- id = (providedId || `headlessui-listbox-button-${internalId}`) as PropsOf<TTag>["id"],
52
+ element = $bindable(),
53
+ id = providedId || `headlessui-listbox-button-${internalId}`,
53
54
  disabled: ownDisabled = false,
54
55
  autofocus = false,
55
56
  ...theirProps
56
- }: { as?: TTag } & ListboxButtonProps<TTag> = $props()
57
+ }: ListboxButtonProps = $props()
57
58
  const { setReference } = useFloatingReference()
58
59
  const { getReferenceProps: getFloatingReferenceProps } = useFloatingReferenceProps()
59
60
  $effect(() => {
60
- data.buttonElement = ref || null
61
- setReference(ref)
61
+ data.buttonElement = element || null
62
+ setReference(element)
62
63
  })
63
64
 
64
65
  const disabled = $derived(data.disabled || ownDisabled)
@@ -149,7 +150,7 @@
149
150
 
150
151
  const buttonType = useResolveButtonType({
151
152
  get props() {
152
- return { type: theirProps.type, as: theirProps.as }
153
+ return { type: theirProps.type ?? undefined, as: DEFAULT_BUTTON_TAG }
153
154
  },
154
155
  get ref() {
155
156
  return { current: data.buttonElement }
@@ -182,4 +183,4 @@
182
183
  )
183
184
  </script>
184
185
 
185
- <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_BUTTON_TAG} name="ListboxButton" bind:ref />
186
+ <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_BUTTON_TAG} name="ListboxButton" bind:element />
@@ -1,5 +1,4 @@
1
- import type { ElementType, Props, PropsOf } from "../utils/types.js";
2
- import type { Snippet } from "svelte";
1
+ import type { Props } from "../utils/types.js";
3
2
  declare const DEFAULT_BUTTON_TAG: "button";
4
3
  type ButtonRenderPropArg = {
5
4
  disabled: boolean;
@@ -11,36 +10,11 @@ type ButtonRenderPropArg = {
11
10
  active: boolean;
12
11
  value: any;
13
12
  };
14
- type ButtonPropsWeControl = "aria-controls" | "aria-expanded" | "aria-haspopup" | "aria-labelledby" | "disabled";
15
- export type ListboxButtonProps<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = Props<TTag, ButtonRenderPropArg, ButtonPropsWeControl, {
13
+ export type ListboxButtonProps = Props<typeof DEFAULT_BUTTON_TAG, ButtonRenderPropArg, {
14
+ element?: HTMLElement;
15
+ id?: string;
16
16
  autofocus?: boolean;
17
17
  disabled?: boolean;
18
18
  }>;
19
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> {
20
- props(): {
21
- as?: TTag | undefined;
22
- } & (Exclude<keyof PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "autofocus" | ButtonPropsWeControl> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
23
- children?: Snippet<[ButtonRenderPropArg & {
24
- props?: Record<string, any>;
25
- }]> | undefined;
26
- class?: string | ((bag: ButtonRenderPropArg) => string) | null | undefined;
27
- ref?: HTMLElement;
28
- } & {
29
- autofocus?: boolean;
30
- disabled?: boolean;
31
- };
32
- events(): {};
33
- slots(): {};
34
- bindings(): "ref";
35
- exports(): {};
36
- }
37
- interface $$IsomorphicComponent {
38
- 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']>> & {
39
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
40
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
41
- <TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
42
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
43
- }
44
- declare const ListboxButton: $$IsomorphicComponent;
45
- type ListboxButton<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = InstanceType<typeof ListboxButton<TTag>>;
19
+ declare const ListboxButton: import("svelte").Component<ListboxButtonProps, {}, "element">;
46
20
  export default ListboxButton;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
3
3
 
4
4
  const DEFAULT_OPTION_TAG = "div" as const
5
5
  type OptionRenderPropArg = {
@@ -13,11 +13,11 @@
13
13
  }
14
14
  type OptionPropsWeControl = "aria-disabled" | "aria-selected" | "role" | "tabIndex"
15
15
 
16
- export type ListboxOptionProps<TTag extends ElementType = typeof DEFAULT_OPTION_TAG, TType = string> = Props<
17
- TTag,
16
+ export type ListboxOptionProps<TType = string> = Props<
17
+ typeof DEFAULT_OPTION_TAG,
18
18
  OptionRenderPropArg,
19
- OptionPropsWeControl,
20
19
  {
20
+ element?: HTMLElement
21
21
  id?: string
22
22
  disabled?: boolean
23
23
  value: TType
@@ -25,7 +25,7 @@
25
25
  >
26
26
  </script>
27
27
 
28
- <script lang="ts" generics="TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG">
28
+ <script lang="ts" generics="TType">
29
29
  import { useId } from "../hooks/use-id.js"
30
30
  import {
31
31
  ActivationTrigger,
@@ -37,7 +37,7 @@
37
37
  } from "./Listbox.svelte"
38
38
  import { disposables } from "../utils/disposables.js"
39
39
  import { Focus } from "../utils/calculate-active-index.js"
40
- import { getContext, onMount, type Snippet } from "svelte"
40
+ import { getContext, onMount } from "svelte"
41
41
  import { useTextValue } from "../hooks/use-text-value.svelte.js"
42
42
  import { useTrackedPointer } from "../hooks/use-tracked-pointer.js"
43
43
  import { stateFromSlot } from "../utils/state.js"
@@ -45,12 +45,12 @@
45
45
 
46
46
  const internalId = useId()
47
47
  let {
48
- ref = $bindable(),
48
+ element = $bindable(),
49
49
  id = `headlessui-listbox-option-${internalId}`,
50
50
  disabled = false,
51
51
  value,
52
52
  ...theirProps
53
- }: { as?: TTag } & ListboxOptionProps<TTag, TType> = $props()
53
+ }: ListboxOptionProps<TType> = $props()
54
54
  const usedInSelectedOption = getContext<boolean>("SelectedOptionContext") === true
55
55
  const data = useData("ListboxOption")
56
56
  const actions = useActions("ListboxOption")
@@ -62,13 +62,13 @@
62
62
  const selected = $derived(data.isSelected(value))
63
63
  const getTextValue = useTextValue({
64
64
  get element() {
65
- return ref as HTMLElement
65
+ return element as HTMLElement
66
66
  },
67
67
  })
68
68
  const bag: ListboxOptionDataRef<TType>["current"] = $derived({
69
69
  disabled,
70
70
  value,
71
- domRef: { current: ref || null },
71
+ domRef: { current: element || null },
72
72
  get textValue() {
73
73
  return getTextValue()
74
74
  },
@@ -76,14 +76,14 @@
76
76
 
77
77
  $effect(() => {
78
78
  if (usedInSelectedOption) return
79
- if (!ref) {
79
+ if (!element) {
80
80
  data.listElements.delete(id)
81
81
  } else {
82
- data.listElements.set(id, ref)
82
+ data.listElements.set(id, element)
83
83
  }
84
84
 
85
85
  return () => {
86
- if (ref) data.listElements.delete(id)
86
+ if (element) data.listElements.delete(id)
87
87
  }
88
88
  })
89
89
 
@@ -93,7 +93,7 @@
93
93
  if (!active) return
94
94
  if (data.activationTrigger === ActivationTrigger.Pointer) return
95
95
  return disposables().requestAnimationFrame(() => {
96
- ;(ref as HTMLElement)?.scrollIntoView?.({ block: "nearest" })
96
+ ;(element as HTMLElement)?.scrollIntoView?.({ block: "nearest" })
97
97
  })
98
98
  })
99
99
 
@@ -177,5 +177,5 @@
177
177
  </script>
178
178
 
179
179
  {#if selected || !usedInSelectedOption}
180
- <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_OPTION_TAG} name="Listbox" bind:ref />
180
+ <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_OPTION_TAG} name="Listbox" bind:element />
181
181
  {/if}
@@ -1,4 +1,4 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare const DEFAULT_OPTION_TAG: "div";
3
3
  type OptionRenderPropArg = {
4
4
  /** @deprecated use `focus` instead */
@@ -8,39 +8,26 @@ type OptionRenderPropArg = {
8
8
  disabled: boolean;
9
9
  selectedOption: boolean;
10
10
  };
11
- type OptionPropsWeControl = "aria-disabled" | "aria-selected" | "role" | "tabIndex";
12
- export type ListboxOptionProps<TTag extends ElementType = typeof DEFAULT_OPTION_TAG, TType = string> = Props<TTag, OptionRenderPropArg, OptionPropsWeControl, {
11
+ export type ListboxOptionProps<TType = string> = Props<typeof DEFAULT_OPTION_TAG, OptionRenderPropArg, {
12
+ element?: HTMLElement;
13
13
  id?: string;
14
14
  disabled?: boolean;
15
15
  value: TType;
16
16
  }>;
17
- import { type Snippet } from "svelte";
18
- declare class __sveltets_Render<TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG> {
19
- props(): {
20
- as?: TTag | undefined;
21
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "disabled" | "value" | "id" | OptionPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
22
- children?: Snippet<[OptionRenderPropArg & {
23
- props?: Record<string, any>;
24
- }]> | undefined;
25
- class?: string | ((bag: OptionRenderPropArg) => string) | null | undefined;
26
- ref?: HTMLElement;
27
- } & {
28
- id?: string;
29
- disabled?: boolean;
30
- value: TType;
31
- };
17
+ declare class __sveltets_Render<TType> {
18
+ props(): ListboxOptionProps<TType>;
32
19
  events(): {};
33
20
  slots(): {};
34
- bindings(): "ref";
21
+ bindings(): "element";
35
22
  exports(): {};
36
23
  }
37
24
  interface $$IsomorphicComponent {
38
- new <TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TType, TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TType, TTag>['props']>, ReturnType<__sveltets_Render<TType, TTag>['events']>, ReturnType<__sveltets_Render<TType, TTag>['slots']>> & {
39
- $$bindings?: ReturnType<__sveltets_Render<TType, TTag>['bindings']>;
40
- } & ReturnType<__sveltets_Render<TType, TTag>['exports']>;
41
- <TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TType, TTag>['props']> & {}): ReturnType<__sveltets_Render<TType, TTag>['exports']>;
42
- z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
25
+ new <TType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TType>['props']>, ReturnType<__sveltets_Render<TType>['events']>, ReturnType<__sveltets_Render<TType>['slots']>> & {
26
+ $$bindings?: ReturnType<__sveltets_Render<TType>['bindings']>;
27
+ } & ReturnType<__sveltets_Render<TType>['exports']>;
28
+ <TType>(internal: unknown, props: ReturnType<__sveltets_Render<TType>['props']> & {}): ReturnType<__sveltets_Render<TType>['exports']>;
29
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
43
30
  }
44
31
  declare const ListboxOption: $$IsomorphicComponent;
45
- type ListboxOption<TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG> = InstanceType<typeof ListboxOption<TType, TTag>>;
32
+ type ListboxOption<TType> = InstanceType<typeof ListboxOption<TType>>;
46
33
  export default ListboxOption;
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
3
3
  import { mergeProps, RenderFeatures, type PropsForFeatures } from "../utils/render.js"
4
4
  import {
5
5
  useFloatingPanel,
@@ -7,8 +7,10 @@
7
7
  useResolvedAnchor,
8
8
  type AnchorPropsWithSelection,
9
9
  } from "../internal/floating.svelte.js"
10
+ import type { SvelteHTMLElements } from "svelte/elements"
10
11
 
11
12
  const DEFAULT_OPTIONS_TAG = "div" as const
13
+
12
14
  type OptionsRenderPropArg = {
13
15
  open: boolean
14
16
  }
@@ -22,11 +24,11 @@
22
24
 
23
25
  let OptionsRenderFeatures = RenderFeatures.RenderStrategy | RenderFeatures.Static
24
26
 
25
- export type ListboxOptionsProps<TTag extends ElementType = typeof DEFAULT_OPTIONS_TAG> = Props<
26
- TTag,
27
+ export type ListboxOptionsProps = Props<
28
+ typeof DEFAULT_OPTIONS_TAG,
27
29
  OptionsRenderPropArg,
28
- OptionsPropsWeControl,
29
30
  {
31
+ element?: HTMLElement
30
32
  id?: string
31
33
  anchor?: AnchorPropsWithSelection
32
34
  portal?: boolean
@@ -36,7 +38,7 @@
36
38
  >
37
39
  </script>
38
40
 
39
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_OPTIONS_TAG">
41
+ <script lang="ts">
40
42
  import { useId } from "../hooks/use-id.js"
41
43
  import { ListboxStates, useActions, useData, ValueMode, type ListboxDataContext } from "./Listbox.svelte"
42
44
  import { getOwnerDocument } from "../utils/owner.js"
@@ -58,14 +60,14 @@
58
60
 
59
61
  const internalId = useId()
60
62
  let {
61
- ref = $bindable(),
63
+ element = $bindable(),
62
64
  id = `headlessui-listbox-options-${internalId}`,
63
65
  anchor: rawAnchor,
64
66
  portal = false,
65
67
  modal = true,
66
68
  transition = false,
67
69
  ...theirProps
68
- }: { as?: TTag } & ListboxOptionsProps<TTag> = $props()
70
+ }: ListboxOptionsProps = $props()
69
71
  const resolvedAnchor = useResolvedAnchor({
70
72
  get anchor() {
71
73
  return rawAnchor
@@ -219,9 +221,9 @@
219
221
  const getFloatingPanelProps = useFloatingPanelProps()
220
222
 
221
223
  $effect(() => {
222
- localOptionsElement = ref
223
- data.optionsElement = ref ?? null
224
- if (anchor) setFloating(ref ?? null)
224
+ localOptionsElement = element
225
+ data.optionsElement = element ?? null
226
+ if (anchor) setFloating(element ?? null)
225
227
  })
226
228
 
227
229
  const searchDisposables = useDisposables()
@@ -414,6 +416,6 @@
414
416
  features={OptionsRenderFeatures}
415
417
  visible={panelEnabled}
416
418
  name="ListboxOptions"
417
- bind:ref
419
+ bind:element
418
420
  />
419
421
  </Portal>