@pzerelles/headlessui-svelte 2.1.2-next.31 → 2.1.2-next.32
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 -54
- package/dist/button/Button.svelte.d.ts +2 -3
- package/dist/checkbox/Checkbox.svelte +173 -120
- package/dist/checkbox/Checkbox.svelte.d.ts +2 -3
- package/dist/close-button/CloseButton.svelte +12 -6
- package/dist/close-button/CloseButton.svelte.d.ts +7 -8
- package/dist/combobox/Combobox.svelte +50 -3
- package/dist/data-interactive/DataInteractive.svelte +55 -29
- package/dist/data-interactive/DataInteractive.svelte.d.ts +2 -3
- package/dist/description/Description.svelte +31 -21
- package/dist/description/Description.svelte.d.ts +1 -2
- package/dist/dialog/Dialog.svelte +320 -228
- package/dist/dialog/Dialog.svelte.d.ts +2 -3
- package/dist/dialog/DialogBackdrop.svelte +30 -13
- package/dist/dialog/DialogBackdrop.svelte.d.ts +2 -3
- package/dist/dialog/DialogPanel.svelte +49 -26
- package/dist/dialog/DialogPanel.svelte.d.ts +2 -3
- package/dist/dialog/DialogTitle.svelte +38 -23
- package/dist/dialog/DialogTitle.svelte.d.ts +2 -3
- package/dist/field/Field.svelte +47 -25
- package/dist/field/Field.svelte.d.ts +1 -2
- package/dist/fieldset/Fieldset.svelte +50 -29
- package/dist/fieldset/Fieldset.svelte.d.ts +1 -2
- package/dist/focus-trap/FocusTrap.svelte +419 -283
- package/dist/focus-trap/FocusTrap.svelte.d.ts +1 -2
- package/dist/input/Input.svelte +84 -53
- package/dist/input/Input.svelte.d.ts +2 -3
- package/dist/internal/FloatingProvider.svelte +14 -9
- package/dist/internal/FocusSentinel.svelte +16 -8
- 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 +20 -15
- package/dist/internal/Hidden.svelte +50 -29
- package/dist/internal/Hidden.svelte.d.ts +1 -2
- package/dist/internal/MainTreeProvider.svelte +89 -36
- package/dist/internal/Portal.svelte +18 -14
- package/dist/label/Label.svelte +93 -58
- package/dist/label/Label.svelte.d.ts +1 -2
- package/dist/legend/Legend.svelte +12 -3
- package/dist/listbox/Listbox.svelte +525 -387
- package/dist/listbox/Listbox.svelte.d.ts +2 -3
- package/dist/listbox/ListboxButton.svelte +173 -127
- package/dist/listbox/ListboxButton.svelte.d.ts +2 -3
- package/dist/listbox/ListboxOption.svelte +170 -129
- package/dist/listbox/ListboxOption.svelte.d.ts +2 -3
- package/dist/listbox/ListboxOptions.svelte +400 -304
- package/dist/listbox/ListboxOptions.svelte.d.ts +2 -3
- package/dist/listbox/ListboxSelectedOption.svelte +38 -15
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +1 -2
- package/dist/menu/Menu.svelte +77 -51
- package/dist/menu/Menu.svelte.d.ts +2 -3
- package/dist/menu/MenuButton.svelte +157 -117
- package/dist/menu/MenuButton.svelte.d.ts +2 -3
- package/dist/menu/MenuHeading.svelte +32 -14
- package/dist/menu/MenuHeading.svelte.d.ts +1 -2
- package/dist/menu/MenuItem.svelte +142 -107
- package/dist/menu/MenuItem.svelte.d.ts +2 -3
- package/dist/menu/MenuItems.svelte +301 -229
- package/dist/menu/MenuItems.svelte.d.ts +2 -3
- package/dist/menu/MenuSection.svelte +24 -9
- package/dist/menu/MenuSection.svelte.d.ts +1 -2
- package/dist/menu/MenuSeparator.svelte +17 -4
- package/dist/menu/MenuSeparator.svelte.d.ts +1 -2
- package/dist/popover/Popover.svelte +216 -150
- package/dist/popover/Popover.svelte.d.ts +2 -3
- package/dist/popover/PopoverBackdrop.svelte +67 -41
- package/dist/popover/PopoverBackdrop.svelte.d.ts +2 -3
- package/dist/popover/PopoverButton.svelte +292 -212
- package/dist/popover/PopoverButton.svelte.d.ts +2 -3
- package/dist/popover/PopoverGroup.svelte +62 -35
- package/dist/popover/PopoverGroup.svelte.d.ts +1 -2
- package/dist/popover/PopoverPanel.svelte +311 -229
- package/dist/popover/PopoverPanel.svelte.d.ts +2 -3
- package/dist/portal/InternalPortal.svelte +141 -85
- package/dist/portal/InternalPortal.svelte.d.ts +1 -2
- package/dist/portal/Portal.svelte +5 -2
- package/dist/portal/PortalGroup.svelte +30 -9
- package/dist/portal/PortalGroup.svelte.d.ts +1 -2
- package/dist/select/Select.svelte +98 -68
- package/dist/select/Select.svelte.d.ts +2 -3
- package/dist/switch/Switch.svelte +179 -132
- package/dist/switch/Switch.svelte.d.ts +2 -3
- package/dist/switch/SwitchGroup.svelte +44 -31
- package/dist/switch/SwitchGroup.svelte.d.ts +1 -2
- package/dist/tabs/Tab.svelte +194 -142
- package/dist/tabs/Tab.svelte.d.ts +2 -3
- package/dist/tabs/TabGroup.svelte +86 -56
- package/dist/tabs/TabGroup.svelte.d.ts +2 -3
- package/dist/tabs/TabList.svelte +31 -11
- package/dist/tabs/TabList.svelte.d.ts +2 -3
- package/dist/tabs/TabPanel.svelte +67 -42
- package/dist/tabs/TabPanel.svelte.d.ts +2 -3
- package/dist/tabs/TabPanels.svelte +18 -7
- package/dist/tabs/TabPanels.svelte.d.ts +2 -3
- package/dist/textarea/Textarea.svelte +84 -53
- package/dist/textarea/Textarea.svelte.d.ts +2 -3
- package/dist/transition/InternalTransitionChild.svelte +259 -170
- package/dist/transition/InternalTransitionChild.svelte.d.ts +2 -3
- package/dist/transition/Transition.svelte +96 -66
- package/dist/transition/Transition.svelte.d.ts +2 -3
- package/dist/transition/TransitionChild.svelte +31 -11
- package/dist/transition/TransitionChild.svelte.d.ts +2 -3
- package/dist/utils/DisabledProvider.svelte +7 -3
- package/dist/utils/ElementOrComponent.svelte +46 -23
- package/dist/utils/ElementOrComponent.svelte.d.ts +8 -10
- package/dist/utils/Generic.svelte +30 -19
- package/dist/utils/Generic.svelte.d.ts +6 -7
- 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/types.d.ts +4 -5
- package/package.json +1 -1
|
@@ -1,114 +1,149 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
import type { Props, ElementType } from "../utils/types.js"
|
|
3
|
+
import { onMount } from "svelte"
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import ElementOrComponent from "../utils/ElementOrComponent.svelte";
|
|
14
|
-
import { mergeProps } from "../utils/render.js";
|
|
15
|
-
import { useDescriptions } from "../description/context.svelte.js";
|
|
16
|
-
const internalId = useId();
|
|
17
|
-
let {
|
|
18
|
-
ref = $bindable(),
|
|
19
|
-
id = `headlessui-menu-item-${internalId}`,
|
|
20
|
-
disabled = false,
|
|
21
|
-
...theirProps
|
|
22
|
-
} = $props();
|
|
23
|
-
const _state = useMenuContext("MenuItem");
|
|
24
|
-
const active = $derived(_state.activeItemIndex !== null ? _state.items[_state.activeItemIndex].id === id : false);
|
|
25
|
-
$effect(() => {
|
|
26
|
-
_state.activeItemIndex;
|
|
27
|
-
if (_state.__demoMode) return;
|
|
28
|
-
if (_state.menuState !== MenuStates.Open) return;
|
|
29
|
-
if (!active) return;
|
|
30
|
-
if (_state.activationTrigger === ActivationTrigger.Pointer) return;
|
|
31
|
-
return disposables().requestAnimationFrame(() => {
|
|
32
|
-
;
|
|
33
|
-
ref?.scrollIntoView?.({ block: "nearest" });
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
const getTextValue = useTextValue({
|
|
37
|
-
get element() {
|
|
38
|
-
return ref || null;
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
const bag = $derived({
|
|
42
|
-
disabled,
|
|
43
|
-
domRef: { current: ref || null },
|
|
44
|
-
get textValue() {
|
|
45
|
-
return getTextValue();
|
|
5
|
+
const DEFAULT_ITEM_TAG = "svelte:fragment" as const
|
|
6
|
+
type ItemRenderPropArg = {
|
|
7
|
+
/** @deprecated use `focus` instead */
|
|
8
|
+
active: boolean
|
|
9
|
+
focus: boolean
|
|
10
|
+
disabled: boolean
|
|
11
|
+
close: () => void
|
|
12
|
+
props?: Record<string, any>
|
|
46
13
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
14
|
+
type ItemPropsWeControl = "aria-describedby" | "aria-disabled" | "aria-labelledby" | "role" | "tabIndex"
|
|
15
|
+
|
|
16
|
+
export type MenuItemProps<TTag extends ElementType = typeof DEFAULT_ITEM_TAG> = Props<
|
|
17
|
+
TTag,
|
|
18
|
+
ItemRenderPropArg,
|
|
19
|
+
ItemPropsWeControl,
|
|
20
|
+
{
|
|
21
|
+
id?: string
|
|
22
|
+
disabled?: boolean
|
|
52
23
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
_state
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
24
|
+
>
|
|
25
|
+
</script>
|
|
26
|
+
|
|
27
|
+
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_ITEM_TAG">
|
|
28
|
+
import { useId } from "../hooks/use-id.js"
|
|
29
|
+
import { ActivationTrigger, MenuStates, useMenuContext, type MenuItemDataRef } from "./context.svelte.js"
|
|
30
|
+
import { disposables } from "../utils/disposables.js"
|
|
31
|
+
import { useTextValue } from "../hooks/use-text-value.svelte.js"
|
|
32
|
+
import { restoreFocusIfNecessary } from "../utils/focus-management.js"
|
|
33
|
+
import { Focus } from "../utils/calculate-active-index.js"
|
|
34
|
+
import { useTrackedPointer } from "../hooks/use-tracked-pointer.js"
|
|
35
|
+
import { useLabels } from "../label/context.svelte.js"
|
|
36
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
37
|
+
import { mergeProps } from "../utils/render.js"
|
|
38
|
+
import { useDescriptions } from "../description/context.svelte.js"
|
|
39
|
+
|
|
40
|
+
const internalId = useId()
|
|
41
|
+
let {
|
|
42
|
+
ref = $bindable(),
|
|
43
|
+
id = `headlessui-menu-item-${internalId}`,
|
|
44
|
+
disabled = false,
|
|
45
|
+
...theirProps
|
|
46
|
+
}: { as?: TTag } & MenuItemProps<TTag> = $props()
|
|
47
|
+
const _state = useMenuContext("MenuItem")
|
|
48
|
+
const active = $derived(_state.activeItemIndex !== null ? _state.items[_state.activeItemIndex].id === id : false)
|
|
49
|
+
|
|
50
|
+
$effect(() => {
|
|
51
|
+
/* We also want to trigger this when the position of the active item changes so that we can re-trigger the scrollIntoView */
|
|
52
|
+
_state.activeItemIndex
|
|
53
|
+
if (_state.__demoMode) return
|
|
54
|
+
if (_state.menuState !== MenuStates.Open) return
|
|
55
|
+
if (!active) return
|
|
56
|
+
if (_state.activationTrigger === ActivationTrigger.Pointer) return
|
|
57
|
+
return disposables().requestAnimationFrame(() => {
|
|
58
|
+
;(ref as HTMLElement)?.scrollIntoView?.({ block: "nearest" })
|
|
59
|
+
})
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
const getTextValue = useTextValue({
|
|
63
|
+
get element() {
|
|
64
|
+
return ref || null
|
|
65
|
+
},
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
const bag: MenuItemDataRef["current"] = $derived({
|
|
69
|
+
disabled,
|
|
70
|
+
domRef: { current: ref || null },
|
|
71
|
+
get textValue() {
|
|
72
|
+
return getTextValue()
|
|
73
|
+
},
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
onMount(() => {
|
|
77
|
+
_state.registerItem(id, {
|
|
78
|
+
get current() {
|
|
79
|
+
return bag
|
|
80
|
+
},
|
|
81
|
+
})
|
|
82
|
+
return () => _state.unregisterItem(id)
|
|
110
83
|
})
|
|
111
|
-
|
|
84
|
+
|
|
85
|
+
const handleClick = (event: MouseEvent) => {
|
|
86
|
+
if (disabled) return event.preventDefault()
|
|
87
|
+
_state.closeMenu()
|
|
88
|
+
restoreFocusIfNecessary(_state.buttonElement)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const handleFocus = () => {
|
|
92
|
+
if (disabled) return _state.goToItem({ focus: Focus.Nothing })
|
|
93
|
+
_state.goToItem({ focus: Focus.Specific, id })
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const pointer = useTrackedPointer()
|
|
97
|
+
|
|
98
|
+
const handleEnter = (evt: PointerEvent) => {
|
|
99
|
+
pointer.update(evt)
|
|
100
|
+
if (disabled) return
|
|
101
|
+
if (active) return
|
|
102
|
+
_state.goToItem({ focus: Focus.Specific, id, trigger: ActivationTrigger.Pointer })
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const handleMove = (evt: PointerEvent) => {
|
|
106
|
+
if (!pointer.wasMoved(evt)) return
|
|
107
|
+
if (disabled) return
|
|
108
|
+
if (active) return
|
|
109
|
+
_state.goToItem({ focus: Focus.Specific, id, trigger: ActivationTrigger.Pointer })
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const handleLeave = (evt: PointerEvent) => {
|
|
113
|
+
if (!pointer.wasMoved(evt)) return
|
|
114
|
+
if (disabled) return
|
|
115
|
+
if (!active) return
|
|
116
|
+
_state.goToItem({ focus: Focus.Nothing })
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
const labelledby = useLabels()
|
|
120
|
+
const describedby = useDescriptions()
|
|
121
|
+
|
|
122
|
+
const slot = $derived({
|
|
123
|
+
active,
|
|
124
|
+
focus: active,
|
|
125
|
+
disabled,
|
|
126
|
+
close: _state.closeMenu,
|
|
127
|
+
} satisfies ItemRenderPropArg)
|
|
128
|
+
const ourProps = $derived(
|
|
129
|
+
mergeProps({
|
|
130
|
+
id,
|
|
131
|
+
role: "menuitem",
|
|
132
|
+
tabindex: disabled === true ? undefined : -1,
|
|
133
|
+
"aria-disabled": disabled === true ? true : undefined,
|
|
134
|
+
"aria-labelledby": labelledby.value,
|
|
135
|
+
"aria-describedby": describedby.value,
|
|
136
|
+
disabled: undefined, // Never forward the `disabled` prop
|
|
137
|
+
onclick: handleClick,
|
|
138
|
+
onfocus: handleFocus,
|
|
139
|
+
onpointerenter: handleEnter,
|
|
140
|
+
onmouseenter: handleEnter,
|
|
141
|
+
onpointermove: handleMove,
|
|
142
|
+
onmousemove: handleMove,
|
|
143
|
+
onpointerleave: handleLeave,
|
|
144
|
+
onmouseleave: handleLeave,
|
|
145
|
+
})
|
|
146
|
+
)
|
|
112
147
|
</script>
|
|
113
148
|
|
|
114
149
|
<ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_ITEM_TAG} name="MenuItem" bind:ref />
|
|
@@ -17,9 +17,8 @@ declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_ITEM_T
|
|
|
17
17
|
props(): {
|
|
18
18
|
as?: TTag | undefined;
|
|
19
19
|
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "disabled" | "id" | ItemPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
20
|
-
children?: import("svelte").Snippet<[{
|
|
21
|
-
|
|
22
|
-
props: Record<string, any>;
|
|
20
|
+
children?: import("svelte").Snippet<[ItemRenderPropArg & {
|
|
21
|
+
props?: Record<string, any>;
|
|
23
22
|
}]> | undefined;
|
|
24
23
|
class?: string | ((bag: ItemRenderPropArg) => string) | null | undefined;
|
|
25
24
|
ref?: HTMLElement;
|