@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.
- package/dist/button/Button.svelte +84 -55
- package/dist/button/Button.svelte.d.ts +4 -32
- package/dist/checkbox/Checkbox.svelte +177 -121
- package/dist/checkbox/Checkbox.svelte.d.ts +14 -32
- package/dist/close-button/CloseButton.svelte +10 -7
- package/dist/close-button/CloseButton.svelte.d.ts +2 -44
- package/dist/data-interactive/DataInteractive.svelte +49 -37
- package/dist/data-interactive/DataInteractive.svelte.d.ts +7 -30
- package/dist/description/Description.svelte +35 -22
- package/dist/description/Description.svelte.d.ts +7 -28
- package/dist/dialog/Dialog.svelte +326 -232
- package/dist/dialog/Dialog.svelte.d.ts +4 -42
- package/dist/dialog/DialogBackdrop.svelte +33 -16
- package/dist/dialog/DialogBackdrop.svelte.d.ts +4 -29
- package/dist/dialog/DialogPanel.svelte +60 -29
- package/dist/dialog/DialogPanel.svelte.d.ts +4 -30
- package/dist/dialog/DialogTitle.svelte +51 -24
- package/dist/dialog/DialogTitle.svelte.d.ts +6 -27
- package/dist/field/Field.svelte +44 -28
- package/dist/field/Field.svelte.d.ts +4 -30
- package/dist/fieldset/Fieldset.svelte +48 -30
- package/dist/fieldset/Fieldset.svelte.d.ts +5 -31
- package/dist/focus-trap/FocusTrap.svelte +430 -298
- package/dist/focus-trap/FocusTrap.svelte.d.ts +5 -34
- package/dist/hooks/use-inert-others.svelte.js +10 -10
- package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
- package/dist/input/Input.svelte +95 -54
- package/dist/input/Input.svelte.d.ts +13 -27
- package/dist/internal/FloatingProvider.svelte +14 -9
- package/dist/internal/FocusSentinel.svelte +49 -40
- package/dist/internal/ForcePortalRoot.svelte +7 -3
- package/dist/internal/FormFields.svelte +47 -34
- package/dist/internal/FormFieldsProvider.svelte +9 -5
- package/dist/internal/FormResolver.svelte +25 -16
- package/dist/internal/Hidden.svelte +45 -38
- package/dist/internal/Hidden.svelte.d.ts +4 -30
- package/dist/internal/MainTreeProvider.svelte +90 -37
- package/dist/internal/Portal.svelte +18 -14
- package/dist/label/Label.svelte +100 -59
- package/dist/label/Label.svelte.d.ts +7 -32
- package/dist/legend/Legend.svelte +27 -4
- package/dist/legend/Legend.svelte.d.ts +4 -3
- package/dist/listbox/Listbox.svelte +518 -391
- package/dist/listbox/Listbox.svelte.d.ts +11 -35
- package/dist/listbox/ListboxButton.svelte +175 -128
- package/dist/listbox/ListboxButton.svelte.d.ts +5 -32
- package/dist/listbox/ListboxOption.svelte +171 -130
- package/dist/listbox/ListboxOption.svelte.d.ts +12 -26
- package/dist/listbox/ListboxOptions.svelte +403 -305
- package/dist/listbox/ListboxOptions.svelte.d.ts +4 -38
- package/dist/listbox/ListboxSelectedOption.svelte +40 -19
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +8 -33
- package/dist/menu/Menu.svelte +76 -52
- package/dist/menu/Menu.svelte.d.ts +3 -31
- package/dist/menu/MenuButton.svelte +158 -118
- package/dist/menu/MenuButton.svelte.d.ts +4 -34
- package/dist/menu/MenuHeading.svelte +34 -15
- package/dist/menu/MenuHeading.svelte.d.ts +4 -31
- package/dist/menu/MenuItem.svelte +143 -108
- package/dist/menu/MenuItem.svelte.d.ts +5 -32
- package/dist/menu/MenuItems.svelte +301 -230
- package/dist/menu/MenuItems.svelte.d.ts +4 -38
- package/dist/menu/MenuSection.svelte +26 -10
- package/dist/menu/MenuSection.svelte.d.ts +5 -29
- package/dist/menu/MenuSeparator.svelte +20 -5
- package/dist/menu/MenuSeparator.svelte.d.ts +5 -28
- package/dist/popover/Popover.svelte +217 -151
- package/dist/popover/Popover.svelte.d.ts +4 -30
- package/dist/popover/PopoverBackdrop.svelte +71 -42
- package/dist/popover/PopoverBackdrop.svelte.d.ts +6 -34
- package/dist/popover/PopoverButton.svelte +302 -222
- package/dist/popover/PopoverButton.svelte.d.ts +6 -29
- package/dist/popover/PopoverGroup.svelte +64 -36
- package/dist/popover/PopoverGroup.svelte.d.ts +5 -28
- package/dist/popover/PopoverPanel.svelte +335 -248
- package/dist/popover/PopoverPanel.svelte.d.ts +5 -36
- package/dist/popover/index.d.ts +1 -1
- package/dist/portal/InternalPortal.svelte +143 -86
- package/dist/portal/InternalPortal.svelte.d.ts +4 -30
- package/dist/portal/Portal.svelte +8 -4
- package/dist/portal/Portal.svelte.d.ts +2 -18
- package/dist/portal/PortalGroup.svelte +23 -10
- package/dist/portal/PortalGroup.svelte.d.ts +3 -31
- package/dist/select/Select.svelte +100 -69
- package/dist/select/Select.svelte.d.ts +5 -32
- package/dist/switch/Switch.svelte +181 -133
- package/dist/switch/Switch.svelte.d.ts +5 -38
- package/dist/switch/SwitchGroup.svelte +45 -32
- package/dist/switch/SwitchGroup.svelte.d.ts +7 -28
- package/dist/tabs/Tab.svelte +195 -143
- package/dist/tabs/Tab.svelte.d.ts +4 -32
- package/dist/tabs/TabGroup.svelte +87 -57
- package/dist/tabs/TabGroup.svelte.d.ts +4 -34
- package/dist/tabs/TabList.svelte +31 -12
- package/dist/tabs/TabList.svelte.d.ts +5 -28
- package/dist/tabs/TabPanel.svelte +69 -44
- package/dist/tabs/TabPanel.svelte.d.ts +4 -34
- package/dist/tabs/TabPanels.svelte +19 -8
- package/dist/tabs/TabPanels.svelte.d.ts +5 -27
- package/dist/textarea/Textarea.svelte +87 -54
- package/dist/textarea/Textarea.svelte.d.ts +13 -27
- package/dist/transition/InternalTransitionChild.svelte +267 -171
- package/dist/transition/InternalTransitionChild.svelte.d.ts +3 -33
- package/dist/transition/Transition.svelte +88 -67
- package/dist/transition/Transition.svelte.d.ts +3 -36
- package/dist/transition/TransitionChild.svelte +31 -12
- package/dist/transition/TransitionChild.svelte.d.ts +8 -35
- package/dist/transition/context.svelte.js +7 -7
- package/dist/utils/DisabledProvider.svelte +7 -3
- package/dist/utils/ElementOrComponent.svelte +88 -24
- package/dist/utils/ElementOrComponent.svelte.d.ts +32 -27
- package/dist/utils/StableCollection.svelte +54 -36
- package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +27 -12
- package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +88 -44
- package/dist/utils/state.js +4 -4
- package/dist/utils/types.d.ts +14 -12
- package/package.json +12 -12
- package/dist/combobox/Combobox.svelte +0 -6
- package/dist/combobox/Combobox.svelte.d.ts +0 -50
- package/dist/utils/Generic.svelte +0 -46
- package/dist/utils/Generic.svelte.d.ts +0 -32
- package/dist/utils/alternative-types.d.ts +0 -20
- 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 {
|
|
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<
|
|
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<
|
|
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(): "
|
|
28
|
+
bindings(): "value";
|
|
53
29
|
exports(): {};
|
|
54
30
|
}
|
|
55
31
|
interface $$IsomorphicComponent {
|
|
56
|
-
new <
|
|
57
|
-
$$bindings?: ReturnType<__sveltets_Render<
|
|
58
|
-
} & ReturnType<__sveltets_Render<
|
|
59
|
-
<
|
|
60
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any, any
|
|
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<
|
|
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>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
|
114
|
-
|
|
115
|
-
{
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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:
|
|
186
|
+
<ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_BUTTON_TAG} name="ListboxButton" bind:element />
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
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
|
|
15
|
-
|
|
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
|
|
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;
|