@pzerelles/headlessui-svelte 2.1.2-next.31 → 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 (123) hide show
  1. package/dist/button/Button.svelte +84 -55
  2. package/dist/button/Button.svelte.d.ts +4 -32
  3. package/dist/checkbox/Checkbox.svelte +177 -121
  4. package/dist/checkbox/Checkbox.svelte.d.ts +14 -32
  5. package/dist/close-button/CloseButton.svelte +10 -7
  6. package/dist/close-button/CloseButton.svelte.d.ts +2 -44
  7. package/dist/data-interactive/DataInteractive.svelte +49 -37
  8. package/dist/data-interactive/DataInteractive.svelte.d.ts +7 -30
  9. package/dist/description/Description.svelte +35 -22
  10. package/dist/description/Description.svelte.d.ts +7 -28
  11. package/dist/dialog/Dialog.svelte +326 -232
  12. package/dist/dialog/Dialog.svelte.d.ts +4 -42
  13. package/dist/dialog/DialogBackdrop.svelte +33 -16
  14. package/dist/dialog/DialogBackdrop.svelte.d.ts +4 -29
  15. package/dist/dialog/DialogPanel.svelte +60 -29
  16. package/dist/dialog/DialogPanel.svelte.d.ts +4 -30
  17. package/dist/dialog/DialogTitle.svelte +51 -24
  18. package/dist/dialog/DialogTitle.svelte.d.ts +6 -27
  19. package/dist/field/Field.svelte +44 -28
  20. package/dist/field/Field.svelte.d.ts +4 -30
  21. package/dist/fieldset/Fieldset.svelte +48 -30
  22. package/dist/fieldset/Fieldset.svelte.d.ts +5 -31
  23. package/dist/focus-trap/FocusTrap.svelte +430 -298
  24. package/dist/focus-trap/FocusTrap.svelte.d.ts +5 -34
  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 +95 -54
  28. package/dist/input/Input.svelte.d.ts +13 -27
  29. package/dist/internal/FloatingProvider.svelte +14 -9
  30. package/dist/internal/FocusSentinel.svelte +49 -40
  31. package/dist/internal/ForcePortalRoot.svelte +7 -3
  32. package/dist/internal/FormFields.svelte +47 -34
  33. package/dist/internal/FormFieldsProvider.svelte +9 -5
  34. package/dist/internal/FormResolver.svelte +25 -16
  35. package/dist/internal/Hidden.svelte +45 -38
  36. package/dist/internal/Hidden.svelte.d.ts +4 -30
  37. package/dist/internal/MainTreeProvider.svelte +90 -37
  38. package/dist/internal/Portal.svelte +18 -14
  39. package/dist/label/Label.svelte +100 -59
  40. package/dist/label/Label.svelte.d.ts +7 -32
  41. package/dist/legend/Legend.svelte +27 -4
  42. package/dist/legend/Legend.svelte.d.ts +4 -3
  43. package/dist/listbox/Listbox.svelte +518 -391
  44. package/dist/listbox/Listbox.svelte.d.ts +11 -35
  45. package/dist/listbox/ListboxButton.svelte +175 -128
  46. package/dist/listbox/ListboxButton.svelte.d.ts +5 -32
  47. package/dist/listbox/ListboxOption.svelte +171 -130
  48. package/dist/listbox/ListboxOption.svelte.d.ts +12 -26
  49. package/dist/listbox/ListboxOptions.svelte +403 -305
  50. package/dist/listbox/ListboxOptions.svelte.d.ts +4 -38
  51. package/dist/listbox/ListboxSelectedOption.svelte +40 -19
  52. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +8 -33
  53. package/dist/menu/Menu.svelte +76 -52
  54. package/dist/menu/Menu.svelte.d.ts +3 -31
  55. package/dist/menu/MenuButton.svelte +158 -118
  56. package/dist/menu/MenuButton.svelte.d.ts +4 -34
  57. package/dist/menu/MenuHeading.svelte +34 -15
  58. package/dist/menu/MenuHeading.svelte.d.ts +4 -31
  59. package/dist/menu/MenuItem.svelte +143 -108
  60. package/dist/menu/MenuItem.svelte.d.ts +5 -32
  61. package/dist/menu/MenuItems.svelte +301 -230
  62. package/dist/menu/MenuItems.svelte.d.ts +4 -38
  63. package/dist/menu/MenuSection.svelte +26 -10
  64. package/dist/menu/MenuSection.svelte.d.ts +5 -29
  65. package/dist/menu/MenuSeparator.svelte +20 -5
  66. package/dist/menu/MenuSeparator.svelte.d.ts +5 -28
  67. package/dist/popover/Popover.svelte +217 -151
  68. package/dist/popover/Popover.svelte.d.ts +4 -30
  69. package/dist/popover/PopoverBackdrop.svelte +71 -42
  70. package/dist/popover/PopoverBackdrop.svelte.d.ts +6 -34
  71. package/dist/popover/PopoverButton.svelte +302 -222
  72. package/dist/popover/PopoverButton.svelte.d.ts +6 -29
  73. package/dist/popover/PopoverGroup.svelte +64 -36
  74. package/dist/popover/PopoverGroup.svelte.d.ts +5 -28
  75. package/dist/popover/PopoverPanel.svelte +335 -248
  76. package/dist/popover/PopoverPanel.svelte.d.ts +5 -36
  77. package/dist/popover/index.d.ts +1 -1
  78. package/dist/portal/InternalPortal.svelte +143 -86
  79. package/dist/portal/InternalPortal.svelte.d.ts +4 -30
  80. package/dist/portal/Portal.svelte +8 -4
  81. package/dist/portal/Portal.svelte.d.ts +2 -18
  82. package/dist/portal/PortalGroup.svelte +23 -10
  83. package/dist/portal/PortalGroup.svelte.d.ts +3 -31
  84. package/dist/select/Select.svelte +100 -69
  85. package/dist/select/Select.svelte.d.ts +5 -32
  86. package/dist/switch/Switch.svelte +181 -133
  87. package/dist/switch/Switch.svelte.d.ts +5 -38
  88. package/dist/switch/SwitchGroup.svelte +45 -32
  89. package/dist/switch/SwitchGroup.svelte.d.ts +7 -28
  90. package/dist/tabs/Tab.svelte +195 -143
  91. package/dist/tabs/Tab.svelte.d.ts +4 -32
  92. package/dist/tabs/TabGroup.svelte +87 -57
  93. package/dist/tabs/TabGroup.svelte.d.ts +4 -34
  94. package/dist/tabs/TabList.svelte +31 -12
  95. package/dist/tabs/TabList.svelte.d.ts +5 -28
  96. package/dist/tabs/TabPanel.svelte +69 -44
  97. package/dist/tabs/TabPanel.svelte.d.ts +4 -34
  98. package/dist/tabs/TabPanels.svelte +19 -8
  99. package/dist/tabs/TabPanels.svelte.d.ts +5 -27
  100. package/dist/textarea/Textarea.svelte +87 -54
  101. package/dist/textarea/Textarea.svelte.d.ts +13 -27
  102. package/dist/transition/InternalTransitionChild.svelte +267 -171
  103. package/dist/transition/InternalTransitionChild.svelte.d.ts +3 -33
  104. package/dist/transition/Transition.svelte +88 -67
  105. package/dist/transition/Transition.svelte.d.ts +3 -36
  106. package/dist/transition/TransitionChild.svelte +31 -12
  107. package/dist/transition/TransitionChild.svelte.d.ts +8 -35
  108. package/dist/transition/context.svelte.js +7 -7
  109. package/dist/utils/DisabledProvider.svelte +7 -3
  110. package/dist/utils/ElementOrComponent.svelte +88 -24
  111. package/dist/utils/ElementOrComponent.svelte.d.ts +32 -27
  112. package/dist/utils/StableCollection.svelte +54 -36
  113. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +27 -12
  114. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +88 -44
  115. package/dist/utils/state.js +4 -4
  116. package/dist/utils/types.d.ts +14 -12
  117. package/package.json +12 -12
  118. package/dist/combobox/Combobox.svelte +0 -6
  119. package/dist/combobox/Combobox.svelte.d.ts +0 -50
  120. package/dist/utils/Generic.svelte +0 -46
  121. package/dist/utils/Generic.svelte.d.ts +0 -32
  122. package/dist/utils/alternative-types.d.ts +0 -20
  123. package/dist/utils/alternative-types.js +0 -1
@@ -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,42 +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<[{
31
- slot: ListboxRenderPropArg<TType>;
32
- props: Record<string, any>;
33
- }]> | undefined;
34
- class?: string | ((bag: ListboxRenderPropArg<TType>) => string) | null | undefined;
35
- ref?: HTMLElement;
36
- } & {
37
- value?: TType | undefined;
38
- defaultValue?: TType | undefined;
39
- onchange?: ((value: TType) => void) | undefined;
40
- by?: ByComparator<TActualType> | undefined;
41
- disabled?: boolean;
42
- invalid?: boolean;
43
- horizontal?: boolean;
44
- form?: string;
45
- name?: string;
46
- multiple?: boolean;
47
- closeOnSelect?: boolean;
48
- __demoMode?: boolean;
49
- };
24
+ declare class __sveltets_Render<TType = string, TActualType = TType extends (infer U)[] ? U : TType> {
25
+ props(): ListboxProps<TType, TActualType>;
50
26
  events(): {};
51
27
  slots(): {};
52
- bindings(): "ref" | "value";
28
+ bindings(): "value";
53
29
  exports(): {};
54
30
  }
55
31
  interface $$IsomorphicComponent {
56
- 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']>> & {
57
- $$bindings?: ReturnType<__sveltets_Render<TTag, TType, TActualType>['bindings']>;
58
- } & ReturnType<__sveltets_Render<TTag, TType, TActualType>['exports']>;
59
- <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']>;
60
- 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']>;
61
37
  }
62
38
  declare const Listbox: $$IsomorphicComponent;
63
- 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>>;
64
40
  export default Listbox;
@@ -1,139 +1,186 @@
1
- <script lang="ts" module>import { useId } from "../hooks/use-id.js";
2
- import { useProvidedId } from "../utils/id.js";
3
- import { ListboxStates, useActions, useData } from "./Listbox.svelte";
4
- import { attemptSubmit } from "../utils/form.js";
5
- import { Focus } from "../utils/calculate-active-index.js";
6
- import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
7
- import { useActivePress } from "../hooks/use-active-press.svelte.js";
8
- import { useResolveButtonType } from "../hooks/use-resolve-button-type.svelte.js";
9
- import { useFloatingReference, useFloatingReferenceProps } from "../internal/floating.svelte.js";
10
- import { stateFromSlot } from "../utils/state.js";
11
- import { useLabelledBy } from "../label/context.svelte.js";
12
- import { useDescribedBy } from "../description/context.svelte.js";
13
- import { useHover } from "../hooks/use-hover.svelte.js";
14
- import { mergeProps } from "../utils/render.js";
15
- import ElementOrComponent from "../utils/ElementOrComponent.svelte";
16
- const DEFAULT_BUTTON_TAG = "button";
17
- </script>
1
+ <script lang="ts" module>
2
+ import { useId } from "../hooks/use-id.js"
3
+ import { useProvidedId } from "../utils/id.js"
4
+ import type { Props } from "../utils/types.js"
5
+ import { ListboxStates, useActions, useData } from "./Listbox.svelte"
6
+ import { attemptSubmit } from "../utils/form.js"
7
+ import { Focus } from "../utils/calculate-active-index.js"
8
+ import { useFocusRing } from "../hooks/use-focus-ring.svelte.js"
9
+ import { useActivePress } from "../hooks/use-active-press.svelte.js"
10
+ import { useResolveButtonType } from "../hooks/use-resolve-button-type.svelte.js"
11
+ import { useFloatingReference, useFloatingReferenceProps } from "../internal/floating.svelte.js"
12
+ import { stateFromSlot } from "../utils/state.js"
13
+ import type { SvelteHTMLElements } from "svelte/elements"
14
+ import { useLabelledBy } from "../label/context.svelte.js"
15
+ import { useDescribedBy } from "../description/context.svelte.js"
16
+ import { useHover } from "../hooks/use-hover.svelte.js"
17
+ import { mergeProps } from "../utils/render.js"
18
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte"
18
19
 
19
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BUTTON_TAG">const data = useData("ListboxButton");
20
- const actions = useActions("ListboxButton");
21
- const internalId = useId();
22
- const providedId = useProvidedId();
23
- let {
24
- ref = $bindable(),
25
- id = providedId || `headlessui-listbox-button-${internalId}`,
26
- disabled: ownDisabled = false,
27
- autofocus = false,
28
- ...theirProps
29
- } = $props();
30
- const { setReference } = useFloatingReference();
31
- const { getReferenceProps: getFloatingReferenceProps } = useFloatingReferenceProps();
32
- $effect(() => {
33
- data.buttonElement = ref || null;
34
- setReference(ref);
35
- });
36
- const disabled = $derived(data.disabled || ownDisabled);
37
- const handleKeyDown = (event) => {
38
- switch (event.key) {
39
- case "Enter":
40
- if (event.currentTarget) attemptSubmit(event.currentTarget);
41
- break;
42
- case " ":
43
- case "ArrowDown":
44
- event.preventDefault();
45
- actions.openListbox();
46
- if (!data.value) actions.goToOption(Focus.First);
47
- break;
48
- case "ArrowUp":
49
- event.preventDefault();
50
- actions.openListbox();
51
- if (!data.value) actions.goToOption(Focus.Last);
52
- break;
53
- }
54
- };
55
- const handleKeyUp = (event) => {
56
- switch (event.key) {
57
- case " ":
58
- event.preventDefault();
59
- break;
20
+ const DEFAULT_BUTTON_TAG = "button" as const
21
+ type ButtonRenderPropArg = {
22
+ disabled: boolean
23
+ invalid: boolean
24
+ hover: boolean
25
+ focus: boolean
26
+ autofocus: boolean
27
+ open: boolean
28
+ active: boolean
29
+ value: any
60
30
  }
61
- };
62
- const handleClick = (event) => {
63
- if (data.listboxState === ListboxStates.Open) {
64
- actions.closeListbox();
65
- data.buttonElement?.focus({ preventScroll: true });
66
- } else {
67
- event.preventDefault();
68
- actions.openListbox();
69
- }
70
- };
71
- const handleKeyPress = (event) => event.preventDefault();
72
- const labelledBy = useLabelledBy();
73
- const describedBy = useDescribedBy();
74
- const { isHovered: hover, hoverProps } = $derived(
75
- useHover({
76
- get disabled() {
77
- return disabled;
31
+ type ButtonPropsWeControl = "aria-controls" | "aria-expanded" | "aria-haspopup" | "aria-labelledby" | "disabled"
32
+
33
+ export type ListboxButtonProps = Props<
34
+ typeof DEFAULT_BUTTON_TAG,
35
+ ButtonRenderPropArg,
36
+ {
37
+ element?: HTMLElement
38
+ id?: string
39
+ autofocus?: boolean
40
+ disabled?: boolean
78
41
  }
42
+ >
43
+ </script>
44
+
45
+ <script lang="ts">
46
+ const data = useData("ListboxButton")
47
+ const actions = useActions("ListboxButton")
48
+
49
+ const internalId = useId()
50
+ const providedId = useProvidedId()
51
+ let {
52
+ element = $bindable(),
53
+ id = providedId || `headlessui-listbox-button-${internalId}`,
54
+ disabled: ownDisabled = false,
55
+ autofocus = false,
56
+ ...theirProps
57
+ }: ListboxButtonProps = $props()
58
+ const { setReference } = useFloatingReference()
59
+ const { getReferenceProps: getFloatingReferenceProps } = useFloatingReferenceProps()
60
+ $effect(() => {
61
+ data.buttonElement = element || null
62
+ setReference(element)
79
63
  })
80
- );
81
- const { pressed: active, pressProps } = $derived(
82
- useActivePress({
83
- get disabled() {
84
- return disabled;
64
+
65
+ const disabled = $derived(data.disabled || ownDisabled)
66
+
67
+ const handleKeyDown = (event: KeyboardEvent) => {
68
+ switch (event.key) {
69
+ // Ref: https://www.w3.org/WAI/ARIA/apg/patterns/menubutton/#keyboard-interaction-13
70
+
71
+ case "Enter":
72
+ if (event.currentTarget) attemptSubmit(event.currentTarget as HTMLElement)
73
+ break
74
+
75
+ case " ":
76
+ case "ArrowDown":
77
+ event.preventDefault()
78
+ actions.openListbox()
79
+ if (!data.value) actions.goToOption(Focus.First)
80
+ break
81
+
82
+ case "ArrowUp":
83
+ event.preventDefault()
84
+ actions.openListbox()
85
+ if (!data.value) actions.goToOption(Focus.Last)
86
+ break
85
87
  }
86
- })
87
- );
88
- const { isFocusVisible: focus, focusProps } = $derived(
89
- useFocusRing({
90
- get autofocus() {
91
- return autofocus;
88
+ }
89
+
90
+ const handleKeyUp = (event: KeyboardEvent) => {
91
+ switch (event.key) {
92
+ case " ":
93
+ // Required for firefox, event.preventDefault() in handleKeyDown for
94
+ // the Space key doesn't cancel the handleKeyUp, which in turn
95
+ // triggers a *click*.
96
+ event.preventDefault()
97
+ break
92
98
  }
93
- })
94
- );
95
- const slot = $derived({
96
- open: data.listboxState === ListboxStates.Open,
97
- active: active || data.listboxState === ListboxStates.Open,
98
- disabled,
99
- invalid: data.invalid,
100
- value: data.value,
101
- hover,
102
- focus,
103
- autofocus: autofocus ?? false
104
- });
105
- const buttonType = useResolveButtonType({
106
- get props() {
107
- return { type: theirProps.type, as: theirProps.as };
108
- },
109
- get ref() {
110
- return { current: data.buttonElement };
111
99
  }
112
- });
113
- const ourProps = $derived(
114
- mergeProps(
115
- {
116
- ...getFloatingReferenceProps(),
117
- id,
118
- type: buttonType.type,
119
- "aria-haspopup": "listbox",
120
- "aria-controls": data.optionsElement?.id,
121
- "aria-expanded": data.listboxState === ListboxStates.Open,
122
- "aria-labelledby": labelledBy.value,
123
- "aria-describedby": describedBy.value,
124
- disabled: disabled || void 0,
125
- autofocus,
126
- onkeydown: handleKeyDown,
127
- onkeyup: handleKeyUp,
128
- onkeypress: handleKeyPress,
129
- onclick: handleClick
100
+
101
+ const handleClick = (event: MouseEvent) => {
102
+ //if (isDisabledReactIssue7711(event.currentTarget)) return event.preventDefault()
103
+ if (data.listboxState === ListboxStates.Open) {
104
+ actions.closeListbox()
105
+ data.buttonElement?.focus({ preventScroll: true })
106
+ } else {
107
+ event.preventDefault()
108
+ actions.openListbox()
109
+ }
110
+ }
111
+
112
+ // This is needed so that we can "cancel" the click event when we use the `Enter` key on a button.
113
+ const handleKeyPress = (event: KeyboardEvent) => event.preventDefault()
114
+
115
+ const labelledBy = useLabelledBy()
116
+ const describedBy = useDescribedBy()
117
+
118
+ const { isHovered: hover, hoverProps } = $derived(
119
+ useHover({
120
+ get disabled() {
121
+ return disabled
122
+ },
123
+ })
124
+ )
125
+ const { pressed: active, pressProps } = $derived(
126
+ useActivePress({
127
+ get disabled() {
128
+ return disabled
129
+ },
130
+ })
131
+ )
132
+ const { isFocusVisible: focus, focusProps } = $derived(
133
+ useFocusRing({
134
+ get autofocus() {
135
+ return autofocus
136
+ },
137
+ })
138
+ )
139
+
140
+ const slot = $derived({
141
+ open: data.listboxState === ListboxStates.Open,
142
+ active: active || data.listboxState === ListboxStates.Open,
143
+ disabled,
144
+ invalid: data.invalid,
145
+ value: data.value,
146
+ hover,
147
+ focus,
148
+ autofocus: autofocus ?? false,
149
+ } satisfies ButtonRenderPropArg)
150
+
151
+ const buttonType = useResolveButtonType({
152
+ get props() {
153
+ return { type: theirProps.type ?? undefined, as: DEFAULT_BUTTON_TAG }
154
+ },
155
+ get ref() {
156
+ return { current: data.buttonElement }
130
157
  },
131
- focusProps,
132
- hoverProps,
133
- pressProps,
134
- stateFromSlot(slot)
158
+ })
159
+
160
+ const ourProps = $derived(
161
+ mergeProps(
162
+ {
163
+ ...getFloatingReferenceProps(),
164
+ id,
165
+ type: buttonType.type,
166
+ "aria-haspopup": "listbox",
167
+ "aria-controls": data.optionsElement?.id,
168
+ "aria-expanded": data.listboxState === ListboxStates.Open,
169
+ "aria-labelledby": labelledBy.value,
170
+ "aria-describedby": describedBy.value,
171
+ disabled: disabled || undefined,
172
+ autofocus,
173
+ onkeydown: handleKeyDown,
174
+ onkeyup: handleKeyUp,
175
+ onkeypress: handleKeyPress,
176
+ onclick: handleClick,
177
+ },
178
+ focusProps,
179
+ hoverProps,
180
+ pressProps,
181
+ stateFromSlot(slot)
182
+ )
135
183
  )
136
- );
137
184
  </script>
138
185
 
139
- <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,37 +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<[{
24
- slot: ButtonRenderPropArg;
25
- props: Record<string, any>;
26
- }]> | undefined;
27
- class?: string | ((bag: ButtonRenderPropArg) => string) | null | undefined;
28
- ref?: HTMLElement;
29
- } & {
30
- autofocus?: boolean;
31
- disabled?: boolean;
32
- };
33
- events(): {};
34
- slots(): {};
35
- bindings(): "ref";
36
- exports(): {};
37
- }
38
- interface $$IsomorphicComponent {
39
- 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']>> & {
40
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
41
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
42
- <TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
43
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
44
- }
45
- declare const ListboxButton: $$IsomorphicComponent;
46
- type ListboxButton<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = InstanceType<typeof ListboxButton<TTag>>;
19
+ declare const ListboxButton: import("svelte").Component<ListboxButtonProps, {}, "element">;
47
20
  export default ListboxButton;