@pzerelles/headlessui-svelte 2.1.2-next.4 → 2.1.2-next.41
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 +15 -18
- package/dist/button/Button.svelte.d.ts +8 -36
- package/dist/button/index.d.ts +1 -1
- package/dist/button/index.js +1 -1
- package/dist/checkbox/Checkbox.svelte +30 -26
- package/dist/checkbox/Checkbox.svelte.d.ts +17 -38
- package/dist/checkbox/index.d.ts +1 -1
- package/dist/checkbox/index.js +1 -1
- package/dist/close-button/CloseButton.svelte +4 -7
- package/dist/close-button/CloseButton.svelte.d.ts +3 -46
- package/dist/close-button/index.d.ts +1 -0
- package/dist/close-button/index.js +1 -0
- package/dist/data-interactive/DataInteractive.svelte +6 -22
- package/dist/data-interactive/DataInteractive.svelte.d.ts +9 -34
- package/dist/data-interactive/index.d.ts +1 -1
- package/dist/data-interactive/index.js +1 -1
- package/dist/description/Description.svelte +28 -23
- package/dist/description/Description.svelte.d.ts +9 -30
- package/dist/description/context.svelte.js +14 -16
- package/dist/description/index.d.ts +1 -1
- package/dist/dialog/Dialog.svelte +315 -31
- package/dist/dialog/Dialog.svelte.d.ts +7 -45
- package/dist/dialog/DialogBackdrop.svelte +11 -14
- package/dist/dialog/DialogBackdrop.svelte.d.ts +8 -33
- package/dist/dialog/DialogPanel.svelte +23 -19
- package/dist/dialog/DialogPanel.svelte.d.ts +8 -34
- package/dist/dialog/DialogTitle.svelte +17 -8
- package/dist/dialog/DialogTitle.svelte.d.ts +9 -30
- package/dist/dialog/context.svelte.js +2 -2
- package/dist/dialog/index.d.ts +4 -4
- package/dist/dialog/index.js +4 -4
- package/dist/field/Field.svelte +27 -26
- package/dist/field/Field.svelte.d.ts +7 -34
- package/dist/field/index.d.ts +1 -1
- package/dist/fieldset/Fieldset.svelte +14 -20
- package/dist/fieldset/Fieldset.svelte.d.ts +8 -35
- package/dist/fieldset/index.d.ts +1 -1
- package/dist/focus-trap/FocusTrap.svelte +30 -54
- package/dist/focus-trap/FocusTrap.svelte.d.ts +10 -52
- package/dist/focus-trap/FocusTrapFeatures.d.ts +14 -0
- package/dist/focus-trap/FocusTrapFeatures.js +15 -0
- package/dist/hooks/use-controllable.svelte.js +2 -1
- package/dist/hooks/use-did-element-move.svelte.js +5 -10
- package/dist/hooks/use-disabled.d.ts +6 -1
- package/dist/hooks/use-disabled.js +10 -5
- package/dist/hooks/use-event-listener.svelte.d.ts +1 -1
- package/dist/hooks/use-event-listener.svelte.js +3 -1
- package/dist/hooks/use-inert-others.svelte.js +10 -10
- package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
- package/dist/hooks/use-root-containers.svelte.d.ts +2 -2
- package/dist/hooks/use-root-containers.svelte.js +5 -5
- package/dist/hooks/use-tab-direction.svelte.js +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +5 -2
- package/dist/input/Input.svelte +28 -21
- package/dist/input/Input.svelte.d.ts +16 -33
- package/dist/input/index.d.ts +1 -1
- package/dist/input/index.js +1 -1
- package/dist/internal/FloatingProvider.svelte +17 -0
- package/dist/internal/FloatingProvider.svelte.d.ts +8 -0
- package/dist/internal/FocusSentinel.svelte +33 -32
- package/dist/internal/FocusSentinel.svelte.d.ts +4 -18
- package/dist/internal/ForcePortalRoot.svelte.d.ts +4 -18
- package/dist/internal/FormFields.svelte +18 -13
- package/dist/internal/FormFields.svelte.d.ts +4 -18
- package/dist/internal/FormFieldsProvider.svelte +17 -0
- package/dist/internal/FormFieldsProvider.svelte.d.ts +7 -0
- package/dist/internal/FormResolver.svelte +6 -2
- package/dist/internal/FormResolver.svelte.d.ts +4 -18
- package/dist/internal/Hidden.svelte +10 -10
- package/dist/internal/Hidden.svelte.d.ts +6 -33
- package/dist/internal/MainTreeProvider.svelte +1 -1
- package/dist/internal/MainTreeProvider.svelte.d.ts +4 -18
- package/dist/internal/Portal.svelte.d.ts +4 -18
- package/dist/internal/floating-provider.svelte.d.ts +3 -0
- package/dist/internal/floating-provider.svelte.js +206 -0
- package/dist/internal/floating.svelte.d.ts +46 -22
- package/dist/internal/floating.svelte.js +90 -272
- package/dist/internal/form-fields.svelte.d.ts +10 -0
- package/dist/internal/form-fields.svelte.js +23 -0
- package/dist/label/Label.svelte +17 -13
- package/dist/label/Label.svelte.d.ts +8 -33
- package/dist/label/context.svelte.js +1 -1
- package/dist/label/index.d.ts +1 -1
- package/dist/legend/Legend.svelte +21 -15
- package/dist/legend/Legend.svelte.d.ts +9 -34
- package/dist/listbox/Listbox.svelte +79 -163
- package/dist/listbox/Listbox.svelte.d.ts +16 -101
- package/dist/listbox/ListboxButton.svelte +24 -29
- package/dist/listbox/ListboxButton.svelte.d.ts +8 -38
- package/dist/listbox/ListboxOption.svelte +33 -27
- package/dist/listbox/ListboxOption.svelte.d.ts +16 -32
- package/dist/listbox/ListboxOptions.svelte +126 -73
- package/dist/listbox/ListboxOptions.svelte.d.ts +8 -43
- package/dist/listbox/ListboxSelectedOption.svelte +24 -26
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +14 -39
- package/dist/listbox/context.svelte.d.ts +76 -0
- package/dist/listbox/context.svelte.js +36 -0
- package/dist/listbox/index.d.ts +5 -5
- package/dist/listbox/index.js +4 -4
- package/dist/menu/Menu.svelte +22 -266
- package/dist/menu/Menu.svelte.d.ts +7 -37
- package/dist/menu/MenuButton.svelte +22 -24
- package/dist/menu/MenuButton.svelte.d.ts +8 -39
- package/dist/menu/MenuHeading.svelte +12 -16
- package/dist/menu/MenuHeading.svelte.d.ts +7 -36
- package/dist/menu/MenuItem.svelte +18 -23
- package/dist/menu/MenuItem.svelte.d.ts +9 -39
- package/dist/menu/MenuItems.svelte +33 -34
- package/dist/menu/MenuItems.svelte.d.ts +8 -43
- package/dist/menu/MenuSection.svelte +9 -12
- package/dist/menu/MenuSection.svelte.d.ts +7 -33
- package/dist/menu/MenuSeparator.svelte +9 -12
- package/dist/menu/MenuSeparator.svelte.d.ts +7 -33
- package/dist/menu/context.svelte.d.ts +2 -1
- package/dist/menu/context.svelte.js +212 -2
- package/dist/menu/index.d.ts +7 -7
- package/dist/menu/index.js +3 -3
- package/dist/popover/Popover.svelte +225 -0
- package/dist/popover/Popover.svelte.d.ts +15 -0
- package/dist/popover/PopoverBackdrop.svelte +83 -0
- package/dist/popover/PopoverBackdrop.svelte.d.ts +17 -0
- package/dist/popover/PopoverButton.svelte +324 -0
- package/dist/popover/PopoverButton.svelte.d.ts +21 -0
- package/dist/popover/PopoverGroup.svelte +66 -0
- package/dist/popover/PopoverGroup.svelte.d.ts +9 -0
- package/dist/popover/PopoverPanel.svelte +359 -0
- package/dist/popover/PopoverPanel.svelte.d.ts +22 -0
- package/dist/popover/context.svelte.d.ts +51 -0
- package/dist/popover/context.svelte.js +108 -0
- package/dist/popover/index.d.ts +5 -0
- package/dist/popover/index.js +5 -0
- package/dist/portal/InternalPortal.svelte +17 -17
- package/dist/portal/InternalPortal.svelte.d.ts +6 -33
- package/dist/portal/Portal.svelte +7 -6
- package/dist/portal/Portal.svelte.d.ts +3 -22
- package/dist/portal/PortalGroup.svelte +6 -14
- package/dist/portal/PortalGroup.svelte.d.ts +5 -34
- package/dist/radio-group/Radio.svelte +135 -0
- package/dist/radio-group/Radio.svelte.d.ts +35 -0
- package/dist/radio-group/RadioGroup.svelte +223 -0
- package/dist/radio-group/RadioGroup.svelte.d.ts +34 -0
- package/dist/radio-group/RadioOption.svelte +138 -0
- package/dist/radio-group/RadioOption.svelte.d.ts +37 -0
- package/dist/radio-group/contest.svelte.d.ts +30 -0
- package/dist/radio-group/contest.svelte.js +40 -0
- package/dist/radio-group/index.d.ts +3 -0
- package/dist/radio-group/index.js +3 -0
- package/dist/select/Select.svelte +112 -0
- package/dist/select/Select.svelte.d.ts +21 -0
- package/dist/select/index.d.ts +1 -0
- package/dist/select/index.js +1 -0
- package/dist/switch/Switch.svelte +27 -28
- package/dist/switch/Switch.svelte.d.ts +9 -42
- package/dist/switch/SwitchGroup.svelte +5 -5
- package/dist/switch/SwitchGroup.svelte.d.ts +8 -30
- package/dist/switch/index.d.ts +1 -1
- package/dist/switch/index.js +1 -1
- package/dist/tabs/Tab.svelte +26 -29
- package/dist/tabs/Tab.svelte.d.ts +8 -36
- package/dist/tabs/TabGroup.svelte +42 -264
- package/dist/tabs/TabGroup.svelte.d.ts +7 -57
- package/dist/tabs/TabList.svelte +13 -16
- package/dist/tabs/TabList.svelte.d.ts +8 -31
- package/dist/tabs/TabPanel.svelte +19 -19
- package/dist/tabs/TabPanel.svelte.d.ts +8 -38
- package/dist/tabs/TabPanels.svelte +11 -9
- package/dist/tabs/TabPanels.svelte.d.ts +8 -30
- package/dist/tabs/context.svelte.d.ts +31 -0
- package/dist/tabs/context.svelte.js +134 -0
- package/dist/tabs/index.d.ts +5 -5
- package/dist/tabs/index.js +4 -4
- package/dist/textarea/Textarea.svelte +23 -19
- package/dist/textarea/Textarea.svelte.d.ts +18 -30
- package/dist/textarea/index.d.ts +1 -1
- package/dist/textarea/index.js +1 -1
- package/dist/transition/InternalTransitionChild.svelte +19 -12
- package/dist/transition/InternalTransitionChild.svelte.d.ts +4 -35
- package/dist/transition/Transition.svelte +16 -17
- package/dist/transition/Transition.svelte.d.ts +8 -38
- package/dist/transition/TransitionChild.svelte +13 -12
- package/dist/transition/TransitionChild.svelte.d.ts +11 -38
- package/dist/transition/context.svelte.js +9 -9
- package/dist/transition/index.d.ts +2 -2
- package/dist/transition/index.js +2 -2
- package/dist/utils/DisabledProvider.svelte +10 -0
- package/dist/utils/DisabledProvider.svelte.d.ts +8 -0
- package/dist/utils/ElementOrComponent.svelte +57 -14
- package/dist/utils/ElementOrComponent.svelte.d.ts +19 -29
- package/dist/utils/StableCollection.svelte.d.ts +4 -18
- package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +32 -0
- package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte.d.ts +8 -0
- package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +94 -0
- package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte.d.ts +26 -0
- package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.d.ts +6 -0
- package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.js +158 -0
- package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.d.ts +11 -0
- package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.js +53 -0
- package/dist/utils/floating-ui/svelte/hooks/useId.svelte.d.ts +9 -0
- package/dist/utils/floating-ui/svelte/hooks/useId.svelte.js +28 -0
- package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.d.ts +23 -0
- package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.js +72 -0
- package/dist/utils/floating-ui/svelte/index.d.ts +5 -0
- package/dist/utils/floating-ui/svelte/index.js +5 -0
- package/dist/utils/floating-ui/svelte/inner.svelte.d.ts +83 -0
- package/dist/utils/floating-ui/svelte/inner.svelte.js +178 -0
- package/dist/utils/floating-ui/svelte/types.d.ts +114 -0
- package/dist/utils/floating-ui/svelte/utils/createPubSub.d.ts +5 -0
- package/dist/utils/floating-ui/svelte/utils/createPubSub.js +14 -0
- package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.d.ts +2 -0
- package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.js +13 -0
- package/dist/utils/floating-ui/svelte/utils/log.d.ts +2 -0
- package/dist/utils/floating-ui/svelte/utils/log.js +19 -0
- package/dist/utils/floating-ui/svelte/utils.d.ts +19 -0
- package/dist/utils/floating-ui/svelte/utils.js +136 -0
- package/dist/utils/floating-ui/svelte-dom/arrow.d.ts +22 -0
- package/dist/utils/floating-ui/svelte-dom/arrow.js +29 -0
- package/dist/utils/floating-ui/svelte-dom/index.d.ts +2 -0
- package/dist/utils/floating-ui/svelte-dom/index.js +2 -0
- package/dist/utils/floating-ui/svelte-dom/types.d.ts +80 -0
- package/dist/utils/floating-ui/svelte-dom/types.js +3 -0
- package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.d.ts +6 -0
- package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.js +182 -0
- package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.d.ts +1 -0
- package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.js +50 -0
- package/dist/utils/floating-ui/svelte-dom/utils/getDPR.d.ts +1 -0
- package/dist/utils/floating-ui/svelte-dom/utils/getDPR.js +7 -0
- package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.d.ts +1 -0
- package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.js +5 -0
- package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.d.ts +4 -0
- package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.js +7 -0
- package/dist/utils/id.d.ts +1 -1
- package/dist/utils/id.js +1 -1
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/state.js +4 -4
- package/dist/utils/style.d.ts +2 -0
- package/dist/utils/style.js +6 -0
- package/dist/utils/types.d.ts +12 -18
- package/package.json +33 -32
- package/dist/combobox/Combobox.svelte +0 -53
- package/dist/combobox/Combobox.svelte.d.ts +0 -50
- package/dist/dialog/InternalDialog.svelte +0 -294
- package/dist/dialog/InternalDialog.svelte.d.ts +0 -42
- package/dist/internal/HoistFormFields.svelte +0 -14
- package/dist/internal/HoistFormFields.svelte.d.ts +0 -21
- package/dist/internal/id.d.ts +0 -8
- package/dist/internal/id.js +0 -11
- package/dist/utils/Generic.svelte +0 -56
- package/dist/utils/Generic.svelte.d.ts +0 -35
- package/dist/utils/alternative-types.d.ts +0 -21
- /package/dist/utils/{alternative-types.js → floating-ui/svelte/types.js} +0 -0
package/dist/listbox/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { default as Listbox, type ListboxProps, type
|
|
2
|
-
export { default as ListboxButton, type ListboxButtonProps, type
|
|
3
|
-
export { default as ListboxOption, type ListboxOptionProps, type
|
|
4
|
-
export { default as ListboxOptions, type ListboxOptionsProps, type
|
|
5
|
-
export { default as ListboxSelectedOption, type ListboxSelectedOptionProps } from "./ListboxSelectedOption.svelte";
|
|
1
|
+
export { default as Listbox, type ListboxProps, type ListboxRenderPropArg as ListboxSlot, type ListboxOwnProps, } from "./Listbox.svelte";
|
|
2
|
+
export { default as ListboxButton, type ListboxButtonProps, type ButtonRenderPropArg as ListboxButtonSlot, type ListboxButtonOwnProps, } from "./ListboxButton.svelte";
|
|
3
|
+
export { default as ListboxOption, type ListboxOptionProps, type OptionRenderPropArg as ListboxOptionSlot, type ListboxOptionOwnProps, } from "./ListboxOption.svelte";
|
|
4
|
+
export { default as ListboxOptions, type ListboxOptionsProps, type OptionsRenderPropArg as ListboxOptionsSlot, type ListboxOptionsOwnProps, } from "./ListboxOptions.svelte";
|
|
5
|
+
export { default as ListboxSelectedOption, type ListboxSelectedOptionProps, type SelectedOptionRenderPropArg as ListboxSelectedOptionSlot, type ListboxSelectedOptionOwnProps, } from "./ListboxSelectedOption.svelte";
|
package/dist/listbox/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { default as Listbox } from "./Listbox.svelte";
|
|
2
|
-
export { default as ListboxButton } from "./ListboxButton.svelte";
|
|
3
|
-
export { default as ListboxOption } from "./ListboxOption.svelte";
|
|
1
|
+
export { default as Listbox, } from "./Listbox.svelte";
|
|
2
|
+
export { default as ListboxButton, } from "./ListboxButton.svelte";
|
|
3
|
+
export { default as ListboxOption, } from "./ListboxOption.svelte";
|
|
4
4
|
export { default as ListboxOptions, } from "./ListboxOptions.svelte";
|
|
5
|
-
export { default as ListboxSelectedOption } from "./ListboxSelectedOption.svelte";
|
|
5
|
+
export { default as ListboxSelectedOption, } from "./ListboxSelectedOption.svelte";
|
package/dist/menu/Menu.svelte
CHANGED
|
@@ -1,275 +1,32 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import {
|
|
3
|
-
import { createFloatingContext } from "../internal/floating.svelte.js"
|
|
4
|
-
import { createOpenClosedContext, State } from "../internal/open-closed.js"
|
|
5
|
-
import { calculateActiveIndex, Focus } from "../utils/calculate-active-index.js"
|
|
6
|
-
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
7
|
-
import { FocusableMode, isFocusableElement, sortByDomNode } from "../utils/focus-management.js"
|
|
8
|
-
import { match } from "../utils/match.js"
|
|
9
|
-
import type { ElementType, Props } from "../utils/types.js"
|
|
10
|
-
import type { Snippet } from "svelte"
|
|
2
|
+
import type { PropsAsChild } from "../utils/types.js"
|
|
11
3
|
|
|
12
4
|
let DEFAULT_MENU_TAG = "svelte:fragment"
|
|
13
|
-
type MenuRenderPropArg = {
|
|
5
|
+
export type MenuRenderPropArg = {
|
|
14
6
|
open: boolean
|
|
15
7
|
close: () => void
|
|
16
8
|
}
|
|
17
9
|
type MenuPropsWeControl = never
|
|
18
10
|
|
|
19
|
-
export type
|
|
20
|
-
|
|
21
|
-
MenuRenderPropArg,
|
|
22
|
-
MenuPropsWeControl,
|
|
23
|
-
{
|
|
24
|
-
__demoMode?: boolean
|
|
25
|
-
}
|
|
26
|
-
>
|
|
27
|
-
|
|
28
|
-
export type MenuChildren<T> = Snippet<[MenuRenderPropArg]>
|
|
29
|
-
</script>
|
|
30
|
-
|
|
31
|
-
<script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_MENU_TAG">
|
|
32
|
-
import { setContext } from "svelte"
|
|
33
|
-
import {
|
|
34
|
-
ActivationTrigger,
|
|
35
|
-
MenuStates,
|
|
36
|
-
type MenuContext,
|
|
37
|
-
type MenuItemDataRef,
|
|
38
|
-
type StateDefinition,
|
|
39
|
-
} from "./context.svelte.js"
|
|
40
|
-
|
|
41
|
-
function adjustOrderedState(
|
|
42
|
-
state: StateDefinition,
|
|
43
|
-
adjustment: (items: StateDefinition["items"]) => StateDefinition["items"] = (i) => i
|
|
44
|
-
) {
|
|
45
|
-
let currentActiveItem = state.activeItemIndex !== null ? state.items[state.activeItemIndex] : null
|
|
46
|
-
|
|
47
|
-
let sortedItems = sortByDomNode(adjustment(state.items.slice()), (item) => item.dataRef.current.domRef.current)
|
|
48
|
-
|
|
49
|
-
// If we inserted an item before the current active item then the active item index
|
|
50
|
-
// would be wrong. To fix this, we will re-lookup the correct index.
|
|
51
|
-
let adjustedActiveItemIndex = currentActiveItem ? sortedItems.indexOf(currentActiveItem) : null
|
|
52
|
-
|
|
53
|
-
// Reset to `null` in case the currentActiveItem was removed.
|
|
54
|
-
if (adjustedActiveItemIndex === -1) {
|
|
55
|
-
adjustedActiveItemIndex = null
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
items: sortedItems,
|
|
60
|
-
activeItemIndex: adjustedActiveItemIndex,
|
|
61
|
-
}
|
|
11
|
+
export type MenuOwnProps = {
|
|
12
|
+
__demoMode?: boolean
|
|
62
13
|
}
|
|
63
14
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return {
|
|
67
|
-
get menuState() {
|
|
68
|
-
return _state.menuState
|
|
69
|
-
},
|
|
70
|
-
get buttonElement() {
|
|
71
|
-
return _state.buttonElement
|
|
72
|
-
},
|
|
73
|
-
get itemsElement() {
|
|
74
|
-
return _state.itemsElement
|
|
75
|
-
},
|
|
76
|
-
get items() {
|
|
77
|
-
return _state.items
|
|
78
|
-
},
|
|
79
|
-
get searchQuery() {
|
|
80
|
-
return _state.searchQuery
|
|
81
|
-
},
|
|
82
|
-
get activeItemIndex() {
|
|
83
|
-
return _state.activeItemIndex
|
|
84
|
-
},
|
|
85
|
-
get activationTrigger() {
|
|
86
|
-
return _state.activationTrigger
|
|
87
|
-
},
|
|
88
|
-
get __demoMode() {
|
|
89
|
-
return _state.__demoMode
|
|
90
|
-
},
|
|
91
|
-
closeMenu() {
|
|
92
|
-
if (_state.menuState === MenuStates.Closed) return _state
|
|
93
|
-
_state.activeItemIndex = null
|
|
94
|
-
_state.menuState = MenuStates.Closed
|
|
95
|
-
return _state
|
|
96
|
-
},
|
|
97
|
-
openMenu() {
|
|
98
|
-
if (_state.menuState === MenuStates.Open) return _state
|
|
99
|
-
/* We can turn off demo mode once we re-open the `Menu` */
|
|
100
|
-
_state.__demoMode = false
|
|
101
|
-
_state.menuState = MenuStates.Open
|
|
102
|
-
return _state
|
|
103
|
-
},
|
|
104
|
-
goToItem(
|
|
105
|
-
action:
|
|
106
|
-
| { focus: Focus.Specific; id: string; trigger?: ActivationTrigger }
|
|
107
|
-
| { focus: Exclude<Focus, Focus.Specific>; trigger?: ActivationTrigger }
|
|
108
|
-
) {
|
|
109
|
-
if (_state.menuState === MenuStates.Closed) return _state
|
|
110
|
-
|
|
111
|
-
_state.searchQuery = ""
|
|
112
|
-
_state.activationTrigger = action.trigger ?? ActivationTrigger.Other
|
|
113
|
-
_state.__demoMode = false
|
|
114
|
-
|
|
115
|
-
// Optimization:
|
|
116
|
-
//
|
|
117
|
-
// There is no need to sort the DOM nodes if we know that we don't want to focus anything
|
|
118
|
-
if (action.focus === Focus.Nothing) {
|
|
119
|
-
_state.activeItemIndex = null
|
|
120
|
-
return _state
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Optimization:
|
|
124
|
-
//
|
|
125
|
-
// There is no need to sort the DOM nodes if we know exactly where to go
|
|
126
|
-
if (action.focus === Focus.Specific) {
|
|
127
|
-
_state.activeItemIndex = _state.items.findIndex((o) => o.id === action.id)
|
|
128
|
-
return _state
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
// Optimization:
|
|
132
|
-
//
|
|
133
|
-
// If the current DOM node and the previous DOM node are next to each other,
|
|
134
|
-
// or if the previous DOM node is already the first DOM node, then we don't
|
|
135
|
-
// have to sort all the DOM nodes.
|
|
136
|
-
else if (action.focus === Focus.Previous) {
|
|
137
|
-
let activeItemIdx = _state.activeItemIndex
|
|
138
|
-
if (activeItemIdx !== null) {
|
|
139
|
-
let currentDom = _state.items[activeItemIdx].dataRef.current.domRef
|
|
140
|
-
let previousItemIndex = calculateActiveIndex(action, {
|
|
141
|
-
resolveItems: () => _state.items,
|
|
142
|
-
resolveActiveIndex: () => _state.activeItemIndex,
|
|
143
|
-
resolveId: (item) => item.id,
|
|
144
|
-
resolveDisabled: (item) => item.dataRef.current.disabled,
|
|
145
|
-
})
|
|
146
|
-
if (previousItemIndex !== null) {
|
|
147
|
-
let previousDom = _state.items[previousItemIndex].dataRef.current.domRef
|
|
148
|
-
if (
|
|
149
|
-
// Next to each other
|
|
150
|
-
currentDom.current?.previousElementSibling === previousDom.current ||
|
|
151
|
-
// Or already the first element
|
|
152
|
-
previousDom.current?.previousElementSibling === null
|
|
153
|
-
) {
|
|
154
|
-
_state.activeItemIndex = previousItemIndex
|
|
155
|
-
return _state
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
// Optimization:
|
|
162
|
-
//
|
|
163
|
-
// If the current DOM node and the next DOM node are next to each other, or
|
|
164
|
-
// if the next DOM node is already the last DOM node, then we don't have to
|
|
165
|
-
// sort all the DOM nodes.
|
|
166
|
-
else if (action.focus === Focus.Next) {
|
|
167
|
-
let activeItemIdx = _state.activeItemIndex
|
|
168
|
-
if (activeItemIdx !== null) {
|
|
169
|
-
let currentDom = _state.items[activeItemIdx].dataRef.current.domRef
|
|
170
|
-
let nextItemIndex = calculateActiveIndex(action, {
|
|
171
|
-
resolveItems: () => _state.items,
|
|
172
|
-
resolveActiveIndex: () => _state.activeItemIndex,
|
|
173
|
-
resolveId: (item) => item.id,
|
|
174
|
-
resolveDisabled: (item) => item.dataRef.current.disabled,
|
|
175
|
-
})
|
|
176
|
-
if (nextItemIndex !== null) {
|
|
177
|
-
let nextDom = _state.items[nextItemIndex].dataRef.current.domRef
|
|
178
|
-
if (
|
|
179
|
-
// Next to each other
|
|
180
|
-
currentDom.current?.nextElementSibling === nextDom.current ||
|
|
181
|
-
// Or already the last element
|
|
182
|
-
nextDom.current?.nextElementSibling === null
|
|
183
|
-
) {
|
|
184
|
-
_state.activeItemIndex = nextItemIndex
|
|
185
|
-
return _state
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Slow path:
|
|
192
|
-
//
|
|
193
|
-
// Ensure all the items are correctly sorted according to DOM position
|
|
194
|
-
let adjustedState = adjustOrderedState(_state)
|
|
195
|
-
let activeItemIndex = calculateActiveIndex(action, {
|
|
196
|
-
resolveItems: () => adjustedState.items,
|
|
197
|
-
resolveActiveIndex: () => adjustedState.activeItemIndex,
|
|
198
|
-
resolveId: (item) => item.id,
|
|
199
|
-
resolveDisabled: (item) => item.dataRef.current.disabled,
|
|
200
|
-
})
|
|
201
|
-
|
|
202
|
-
_state.items = adjustedState.items
|
|
203
|
-
_state.activeItemIndex = activeItemIndex
|
|
204
|
-
return _state
|
|
205
|
-
},
|
|
206
|
-
search(value: string) {
|
|
207
|
-
let wasAlreadySearching = _state.searchQuery !== ""
|
|
208
|
-
let offset = wasAlreadySearching ? 0 : 1
|
|
209
|
-
let searchQuery = _state.searchQuery + value.toLowerCase()
|
|
210
|
-
|
|
211
|
-
let reOrderedItems =
|
|
212
|
-
_state.activeItemIndex !== null
|
|
213
|
-
? _state.items
|
|
214
|
-
.slice(_state.activeItemIndex + offset)
|
|
215
|
-
.concat(_state.items.slice(0, _state.activeItemIndex + offset))
|
|
216
|
-
: _state.items
|
|
217
|
-
|
|
218
|
-
let matchingItem = reOrderedItems.find(
|
|
219
|
-
(item) => item.dataRef.current.textValue?.startsWith(searchQuery) && !item.dataRef.current.disabled
|
|
220
|
-
)
|
|
221
|
-
|
|
222
|
-
let matchIdx = matchingItem ? _state.items.indexOf(matchingItem) : -1
|
|
223
|
-
if (matchIdx === -1 || matchIdx === _state.activeItemIndex) {
|
|
224
|
-
_state.searchQuery = searchQuery
|
|
225
|
-
return _state
|
|
226
|
-
}
|
|
227
|
-
_state.searchQuery = searchQuery
|
|
228
|
-
_state.activeItemIndex = matchIdx
|
|
229
|
-
_state.activationTrigger = ActivationTrigger.Other
|
|
230
|
-
return _state
|
|
231
|
-
},
|
|
232
|
-
clearSearch() {
|
|
233
|
-
if (_state.searchQuery === "") return _state
|
|
234
|
-
_state.searchQuery = ""
|
|
235
|
-
return _state
|
|
236
|
-
},
|
|
237
|
-
registerItem(id: string, dataRef: MenuItemDataRef) {
|
|
238
|
-
let item = { id, dataRef }
|
|
239
|
-
let adjustedState = adjustOrderedState(_state, (items) => [...items, item])
|
|
240
|
-
|
|
241
|
-
_state.items = adjustedState.items
|
|
242
|
-
_state.activeItemIndex = adjustedState.activeItemIndex
|
|
243
|
-
return _state
|
|
244
|
-
},
|
|
245
|
-
unregisterItem(id: string) {
|
|
246
|
-
let adjustedState = adjustOrderedState(_state, (items) => {
|
|
247
|
-
let idx = items.findIndex((a) => a.id === id)
|
|
248
|
-
if (idx !== -1) items.splice(idx, 1)
|
|
249
|
-
return items
|
|
250
|
-
})
|
|
15
|
+
export type MenuProps = PropsAsChild<MenuRenderPropArg, MenuOwnProps>
|
|
16
|
+
</script>
|
|
251
17
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
return _state
|
|
261
|
-
},
|
|
262
|
-
setItemsElement(element: HTMLElement | null) {
|
|
263
|
-
if (_state.itemsElement === element) return _state
|
|
264
|
-
_state.itemsElement = element
|
|
265
|
-
return _state
|
|
266
|
-
},
|
|
267
|
-
}
|
|
268
|
-
}
|
|
18
|
+
<script lang="ts">
|
|
19
|
+
import { ActivationTrigger, createMenuContext, MenuStates, type StateDefinition } from "./context.svelte.js"
|
|
20
|
+
import { useOutsideClick } from "../hooks/use-outside-click.svelte.js"
|
|
21
|
+
import { useFloatingProvider } from "../internal/floating-provider.svelte.js"
|
|
22
|
+
import { createOpenClosedContext, State } from "../internal/open-closed.js"
|
|
23
|
+
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
24
|
+
import { FocusableMode, isFocusableElement } from "../utils/focus-management.js"
|
|
25
|
+
import { match } from "../utils/match.js"
|
|
269
26
|
|
|
270
|
-
let {
|
|
27
|
+
let { __demoMode = false, ...theirProps }: MenuProps = $props()
|
|
271
28
|
|
|
272
|
-
const
|
|
29
|
+
const context = createMenuContext({
|
|
273
30
|
__demoMode,
|
|
274
31
|
menuState: __demoMode ? MenuStates.Open : MenuStates.Closed,
|
|
275
32
|
buttonElement: null,
|
|
@@ -279,8 +36,7 @@
|
|
|
279
36
|
activeItemIndex: null,
|
|
280
37
|
activationTrigger: ActivationTrigger.Other,
|
|
281
38
|
} as StateDefinition)
|
|
282
|
-
const { menuState, itemsElement, buttonElement } = $derived(
|
|
283
|
-
setContext<MenuContext>("MenuContext", _state)
|
|
39
|
+
const { menuState, itemsElement, buttonElement } = $derived(context)
|
|
284
40
|
|
|
285
41
|
// Handle outside click
|
|
286
42
|
const outsideClickEnabled = $derived(menuState === MenuStates.Open)
|
|
@@ -292,7 +48,7 @@
|
|
|
292
48
|
return [buttonElement, itemsElement]
|
|
293
49
|
},
|
|
294
50
|
cb: (event, target) => {
|
|
295
|
-
|
|
51
|
+
context.closeMenu()
|
|
296
52
|
|
|
297
53
|
if (!isFocusableElement(target, FocusableMode.Loose)) {
|
|
298
54
|
event.preventDefault()
|
|
@@ -302,11 +58,11 @@
|
|
|
302
58
|
})
|
|
303
59
|
|
|
304
60
|
const slot = $derived({
|
|
305
|
-
open:
|
|
306
|
-
close:
|
|
61
|
+
open: context.menuState === MenuStates.Open,
|
|
62
|
+
close: context.closeMenu,
|
|
307
63
|
} satisfies MenuRenderPropArg)
|
|
308
64
|
|
|
309
|
-
|
|
65
|
+
useFloatingProvider()
|
|
310
66
|
|
|
311
67
|
const openClosed = $derived(
|
|
312
68
|
match(menuState, {
|
|
@@ -321,4 +77,4 @@
|
|
|
321
77
|
})
|
|
322
78
|
</script>
|
|
323
79
|
|
|
324
|
-
<ElementOrComponent {theirProps} {slot}
|
|
80
|
+
<ElementOrComponent {theirProps} {slot} name="Menu" />
|
|
@@ -1,42 +1,12 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
declare let DEFAULT_MENU_TAG: string;
|
|
4
|
-
type MenuRenderPropArg = {
|
|
1
|
+
import type { PropsAsChild } from "../utils/types.js";
|
|
2
|
+
export type MenuRenderPropArg = {
|
|
5
3
|
open: boolean;
|
|
6
4
|
close: () => void;
|
|
7
5
|
};
|
|
8
|
-
type
|
|
9
|
-
export type MenuProps<TTag extends ElementType = typeof DEFAULT_MENU_TAG> = Props<TTag, MenuRenderPropArg, MenuPropsWeControl, {
|
|
6
|
+
export type MenuOwnProps = {
|
|
10
7
|
__demoMode?: boolean;
|
|
11
|
-
}
|
|
12
|
-
export type
|
|
13
|
-
declare
|
|
14
|
-
|
|
15
|
-
as?: TTag | undefined;
|
|
16
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "__demoMode"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
17
|
-
children?: import("../utils/types.js").Children<MenuRenderPropArg> | undefined;
|
|
18
|
-
ref?: HTMLElement;
|
|
19
|
-
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
20
|
-
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: MenuRenderPropArg) => string) | undefined;
|
|
21
|
-
} : {}) & {
|
|
22
|
-
__demoMode?: boolean;
|
|
23
|
-
};
|
|
24
|
-
events(): {} & {
|
|
25
|
-
[evt: string]: CustomEvent<any>;
|
|
26
|
-
};
|
|
27
|
-
slots(): {};
|
|
28
|
-
bindings(): "ref";
|
|
29
|
-
exports(): {};
|
|
30
|
-
}
|
|
31
|
-
interface $$IsomorphicComponent {
|
|
32
|
-
new <TTag extends ElementType = typeof DEFAULT_MENU_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']>> & {
|
|
33
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
34
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
35
|
-
<TTag extends ElementType = typeof DEFAULT_MENU_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
36
|
-
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
37
|
-
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
38
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
39
|
-
}
|
|
40
|
-
declare const Menu: $$IsomorphicComponent;
|
|
41
|
-
type Menu<TTag extends ElementType = typeof DEFAULT_MENU_TAG> = InstanceType<typeof Menu<TTag>>;
|
|
8
|
+
};
|
|
9
|
+
export type MenuProps = PropsAsChild<MenuRenderPropArg, MenuOwnProps>;
|
|
10
|
+
declare const Menu: import("svelte").Component<MenuProps, {}, "">;
|
|
11
|
+
type Menu = ReturnType<typeof Menu>;
|
|
42
12
|
export default Menu;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import { tick
|
|
3
|
-
import type { Props
|
|
2
|
+
import { tick } from "svelte"
|
|
3
|
+
import type { Props } from "../utils/types.js"
|
|
4
4
|
|
|
5
5
|
const DEFAULT_BUTTON_TAG = "button" as const
|
|
6
|
-
type ButtonRenderPropArg = {
|
|
6
|
+
export type ButtonRenderPropArg = {
|
|
7
7
|
open: boolean
|
|
8
8
|
active: boolean
|
|
9
9
|
hover: boolean
|
|
@@ -13,28 +13,24 @@
|
|
|
13
13
|
}
|
|
14
14
|
type ButtonPropsWeControl = "aria-controls" | "aria-expanded" | "aria-haspopup"
|
|
15
15
|
|
|
16
|
-
export type
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
autofocus?: boolean
|
|
24
|
-
type?: string
|
|
25
|
-
}
|
|
26
|
-
>
|
|
16
|
+
export type MenuButtonOwnProps = {
|
|
17
|
+
element?: HTMLElement
|
|
18
|
+
id?: string
|
|
19
|
+
disabled?: boolean
|
|
20
|
+
autofocus?: boolean
|
|
21
|
+
type?: string
|
|
22
|
+
}
|
|
27
23
|
|
|
28
|
-
export type
|
|
24
|
+
export type MenuButtonProps = Props<typeof DEFAULT_BUTTON_TAG, ButtonRenderPropArg, MenuButtonOwnProps>
|
|
29
25
|
</script>
|
|
30
26
|
|
|
31
|
-
<script lang="ts"
|
|
27
|
+
<script lang="ts">
|
|
32
28
|
import { useId } from "../hooks/use-id.js"
|
|
33
29
|
import { Focus } from "../utils/calculate-active-index.js"
|
|
34
30
|
import { useFocusRing } from "../hooks/use-focus-ring.svelte.js"
|
|
35
31
|
import { useActivePress } from "../hooks/use-active-press.svelte.js"
|
|
36
32
|
import { useResolveButtonType } from "../hooks/use-resolve-button-type.svelte.js"
|
|
37
|
-
import {
|
|
33
|
+
import { useFloatingReference, useFloatingReferenceProps } from "../internal/floating.svelte.js"
|
|
38
34
|
import { useHover } from "../hooks/use-hover.svelte.js"
|
|
39
35
|
import { mergeProps } from "../utils/render.js"
|
|
40
36
|
import { MenuStates, useMenuContext } from "./context.svelte.js"
|
|
@@ -43,17 +39,19 @@
|
|
|
43
39
|
|
|
44
40
|
const internalId = useId()
|
|
45
41
|
let {
|
|
46
|
-
|
|
42
|
+
element = $bindable(),
|
|
47
43
|
id = `headlessui-menu-button-${internalId}`,
|
|
48
44
|
disabled = false,
|
|
49
45
|
autofocus = false,
|
|
50
46
|
...theirProps
|
|
51
|
-
}:
|
|
47
|
+
}: MenuButtonProps = $props()
|
|
52
48
|
const _state = useMenuContext("MenuButton")
|
|
53
|
-
const
|
|
49
|
+
const floatingReference = useFloatingReference()
|
|
50
|
+
const { setReference } = $derived(floatingReference)
|
|
51
|
+
const { getReferenceProps: getFloatingReferenceProps } = useFloatingReferenceProps()
|
|
54
52
|
$effect(() => {
|
|
55
|
-
untrack(() => _state.setButtonElement(
|
|
56
|
-
setReference(
|
|
53
|
+
untrack(() => _state.setButtonElement(element ? (element as HTMLButtonElement) : null))
|
|
54
|
+
setReference(element)
|
|
57
55
|
})
|
|
58
56
|
|
|
59
57
|
const handleKeyDown = async (event: KeyboardEvent) => {
|
|
@@ -137,7 +135,7 @@
|
|
|
137
135
|
|
|
138
136
|
const buttonType = useResolveButtonType({
|
|
139
137
|
get props() {
|
|
140
|
-
return { type: theirProps.type, as:
|
|
138
|
+
return { type: theirProps.type, as: DEFAULT_BUTTON_TAG }
|
|
141
139
|
},
|
|
142
140
|
get ref() {
|
|
143
141
|
return { current: _state.buttonElement }
|
|
@@ -166,4 +164,4 @@
|
|
|
166
164
|
)
|
|
167
165
|
</script>
|
|
168
166
|
|
|
169
|
-
<ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_BUTTON_TAG} name="MenuButton" bind:
|
|
167
|
+
<ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_BUTTON_TAG} name="MenuButton" bind:element />
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { Props, ElementType } from "../utils/types.js";
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
3
2
|
declare const DEFAULT_BUTTON_TAG: "button";
|
|
4
|
-
type ButtonRenderPropArg = {
|
|
3
|
+
export type ButtonRenderPropArg = {
|
|
5
4
|
open: boolean;
|
|
6
5
|
active: boolean;
|
|
7
6
|
hover: boolean;
|
|
@@ -9,44 +8,14 @@ type ButtonRenderPropArg = {
|
|
|
9
8
|
disabled: boolean;
|
|
10
9
|
autofocus: boolean;
|
|
11
10
|
};
|
|
12
|
-
type
|
|
13
|
-
|
|
11
|
+
export type MenuButtonOwnProps = {
|
|
12
|
+
element?: HTMLElement;
|
|
14
13
|
id?: string;
|
|
15
14
|
disabled?: boolean;
|
|
16
15
|
autofocus?: boolean;
|
|
17
16
|
type?: string;
|
|
18
|
-
}
|
|
19
|
-
export type
|
|
20
|
-
declare
|
|
21
|
-
|
|
22
|
-
as?: TTag | undefined;
|
|
23
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "disabled" | "autofocus" | "type" | "id" | ButtonPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
24
|
-
children?: import("../utils/types.js").Children<ButtonRenderPropArg> | undefined;
|
|
25
|
-
ref?: HTMLElement;
|
|
26
|
-
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
27
|
-
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: ButtonRenderPropArg) => string) | undefined;
|
|
28
|
-
} : {}) & {
|
|
29
|
-
id?: string;
|
|
30
|
-
disabled?: boolean;
|
|
31
|
-
autofocus?: boolean;
|
|
32
|
-
type?: string;
|
|
33
|
-
};
|
|
34
|
-
events(): {} & {
|
|
35
|
-
[evt: string]: CustomEvent<any>;
|
|
36
|
-
};
|
|
37
|
-
slots(): {};
|
|
38
|
-
bindings(): "ref";
|
|
39
|
-
exports(): {};
|
|
40
|
-
}
|
|
41
|
-
interface $$IsomorphicComponent {
|
|
42
|
-
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']>> & {
|
|
43
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
44
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
45
|
-
<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
46
|
-
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
47
|
-
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
48
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
49
|
-
}
|
|
50
|
-
declare const MenuButton: $$IsomorphicComponent;
|
|
51
|
-
type MenuButton<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = InstanceType<typeof MenuButton<TTag>>;
|
|
17
|
+
};
|
|
18
|
+
export type MenuButtonProps = Props<typeof DEFAULT_BUTTON_TAG, ButtonRenderPropArg, MenuButtonOwnProps>;
|
|
19
|
+
declare const MenuButton: import("svelte").Component<MenuButtonProps, {}, "element">;
|
|
20
|
+
type MenuButton = ReturnType<typeof MenuButton>;
|
|
52
21
|
export default MenuButton;
|
|
@@ -1,34 +1,30 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
import { onMount
|
|
3
|
-
import type {
|
|
2
|
+
import { onMount } from "svelte"
|
|
3
|
+
import type { Props } from "../utils/types.js"
|
|
4
4
|
|
|
5
5
|
const DEFAULT_HEADING_TAG = "header" as const
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
type HeadingPropsWeControl = "role"
|
|
8
8
|
|
|
9
|
-
export type
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
{
|
|
14
|
-
id?: string
|
|
15
|
-
}
|
|
16
|
-
>
|
|
9
|
+
export type MenuHeadingOwnProps = {
|
|
10
|
+
element?: HTMLElement
|
|
11
|
+
id?: string
|
|
12
|
+
}
|
|
17
13
|
|
|
18
|
-
export type
|
|
14
|
+
export type MenuHeadingProps = Props<typeof DEFAULT_HEADING_TAG, {}, MenuHeadingOwnProps>
|
|
19
15
|
</script>
|
|
20
16
|
|
|
21
|
-
<script lang="ts"
|
|
17
|
+
<script lang="ts">
|
|
22
18
|
import { useId } from "../hooks/use-id.js"
|
|
23
19
|
import { useLabelContext } from "../label/context.svelte.js"
|
|
24
20
|
import ElementOrComponent from "../utils/ElementOrComponent.svelte"
|
|
25
21
|
|
|
26
22
|
const internalId = useId()
|
|
27
23
|
let {
|
|
28
|
-
|
|
24
|
+
element = $bindable(),
|
|
29
25
|
id = `headlessui-menu-heading-${internalId}`,
|
|
30
26
|
...theirProps
|
|
31
|
-
}:
|
|
27
|
+
}: MenuHeadingProps = $props()
|
|
32
28
|
|
|
33
29
|
const context = useLabelContext()
|
|
34
30
|
onMount(() => context.register(id))
|
|
@@ -36,4 +32,4 @@
|
|
|
36
32
|
const ourProps = $derived({ id, role: "presentation", ...context.props })
|
|
37
33
|
</script>
|
|
38
34
|
|
|
39
|
-
<ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_HEADING_TAG} name="MenuItem" bind:
|
|
35
|
+
<ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_HEADING_TAG} name="MenuItem" bind:element />
|
|
@@ -1,39 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { ElementType, Props } from "../utils/types.js";
|
|
1
|
+
import type { Props } from "../utils/types.js";
|
|
3
2
|
declare const DEFAULT_HEADING_TAG: "header";
|
|
4
|
-
type
|
|
5
|
-
|
|
6
|
-
export type MenuHeadingProps<TTag extends ElementType = typeof DEFAULT_HEADING_TAG> = Props<TTag, HeadingRenderPropArg, HeadingPropsWeControl, {
|
|
3
|
+
export type MenuHeadingOwnProps = {
|
|
4
|
+
element?: HTMLElement;
|
|
7
5
|
id?: string;
|
|
8
|
-
}
|
|
9
|
-
export type
|
|
10
|
-
declare
|
|
11
|
-
|
|
12
|
-
as?: TTag | undefined;
|
|
13
|
-
} & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "id" | "role"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
|
|
14
|
-
children?: import("../utils/types.js").Children<HeadingRenderPropArg> | undefined;
|
|
15
|
-
ref?: HTMLElement;
|
|
16
|
-
} & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
|
|
17
|
-
class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: HeadingRenderPropArg) => string) | undefined;
|
|
18
|
-
} : {}) & {
|
|
19
|
-
id?: string;
|
|
20
|
-
};
|
|
21
|
-
events(): {} & {
|
|
22
|
-
[evt: string]: CustomEvent<any>;
|
|
23
|
-
};
|
|
24
|
-
slots(): {};
|
|
25
|
-
bindings(): "ref";
|
|
26
|
-
exports(): {};
|
|
27
|
-
}
|
|
28
|
-
interface $$IsomorphicComponent {
|
|
29
|
-
new <TTag extends ElementType = typeof DEFAULT_HEADING_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']>> & {
|
|
30
|
-
$$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
|
|
31
|
-
} & ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
32
|
-
<TTag extends ElementType = typeof DEFAULT_HEADING_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
|
|
33
|
-
$$events?: ReturnType<__sveltets_Render<TTag>['events']>;
|
|
34
|
-
}): ReturnType<__sveltets_Render<TTag>['exports']>;
|
|
35
|
-
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
36
|
-
}
|
|
37
|
-
declare const MenuHeading: $$IsomorphicComponent;
|
|
38
|
-
type MenuHeading<TTag extends ElementType = typeof DEFAULT_HEADING_TAG> = InstanceType<typeof MenuHeading<TTag>>;
|
|
6
|
+
};
|
|
7
|
+
export type MenuHeadingProps = Props<typeof DEFAULT_HEADING_TAG, {}, MenuHeadingOwnProps>;
|
|
8
|
+
declare const MenuHeading: import("svelte").Component<MenuHeadingProps, {}, "element">;
|
|
9
|
+
type MenuHeading = ReturnType<typeof MenuHeading>;
|
|
39
10
|
export default MenuHeading;
|