@pzerelles/headlessui-svelte 2.1.2-next.29 → 2.1.2-next.30

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 (67) hide show
  1. package/dist/button/Button.svelte +54 -84
  2. package/dist/checkbox/Checkbox.svelte +120 -173
  3. package/dist/checkbox/Checkbox.svelte.d.ts +1 -1
  4. package/dist/close-button/CloseButton.svelte +6 -12
  5. package/dist/combobox/Combobox.svelte +3 -50
  6. package/dist/data-interactive/DataInteractive.svelte +29 -55
  7. package/dist/description/Description.svelte +21 -31
  8. package/dist/dialog/Dialog.svelte +228 -320
  9. package/dist/dialog/DialogBackdrop.svelte +12 -29
  10. package/dist/dialog/DialogPanel.svelte +25 -48
  11. package/dist/dialog/DialogTitle.svelte +23 -38
  12. package/dist/field/Field.svelte +25 -47
  13. package/dist/fieldset/Fieldset.svelte +29 -50
  14. package/dist/focus-trap/FocusTrap.svelte +283 -419
  15. package/dist/input/Input.svelte +53 -84
  16. package/dist/internal/FloatingProvider.svelte +9 -14
  17. package/dist/internal/FocusSentinel.svelte +8 -16
  18. package/dist/internal/ForcePortalRoot.svelte +3 -7
  19. package/dist/internal/FormFields.svelte +34 -47
  20. package/dist/internal/FormFieldsProvider.svelte +5 -9
  21. package/dist/internal/FormResolver.svelte +15 -20
  22. package/dist/internal/Hidden.svelte +29 -50
  23. package/dist/internal/MainTreeProvider.svelte +36 -89
  24. package/dist/internal/Portal.svelte +14 -18
  25. package/dist/label/Label.svelte +58 -93
  26. package/dist/legend/Legend.svelte +3 -12
  27. package/dist/listbox/Listbox.svelte +387 -525
  28. package/dist/listbox/Listbox.svelte.d.ts +1 -1
  29. package/dist/listbox/ListboxButton.svelte +127 -173
  30. package/dist/listbox/ListboxOption.svelte +129 -170
  31. package/dist/listbox/ListboxOptions.svelte +304 -400
  32. package/dist/listbox/ListboxSelectedOption.svelte +15 -38
  33. package/dist/menu/Menu.svelte +51 -78
  34. package/dist/menu/MenuButton.svelte +117 -157
  35. package/dist/menu/MenuHeading.svelte +14 -32
  36. package/dist/menu/MenuItem.svelte +107 -142
  37. package/dist/menu/MenuItems.svelte +229 -301
  38. package/dist/menu/MenuSection.svelte +9 -24
  39. package/dist/menu/MenuSeparator.svelte +4 -17
  40. package/dist/popover/Popover.svelte +150 -216
  41. package/dist/popover/PopoverBackdrop.svelte +41 -67
  42. package/dist/popover/PopoverButton.svelte +212 -292
  43. package/dist/popover/PopoverGroup.svelte +35 -62
  44. package/dist/popover/PopoverPanel.svelte +229 -311
  45. package/dist/portal/InternalPortal.svelte +85 -141
  46. package/dist/portal/Portal.svelte +2 -5
  47. package/dist/portal/PortalGroup.svelte +9 -30
  48. package/dist/select/Select.svelte +68 -98
  49. package/dist/switch/Switch.svelte +132 -179
  50. package/dist/switch/SwitchGroup.svelte +31 -44
  51. package/dist/tabs/Tab.svelte +142 -194
  52. package/dist/tabs/TabGroup.svelte +56 -86
  53. package/dist/tabs/TabGroup.svelte.d.ts +1 -1
  54. package/dist/tabs/TabList.svelte +11 -31
  55. package/dist/tabs/TabPanel.svelte +42 -67
  56. package/dist/tabs/TabPanels.svelte +7 -18
  57. package/dist/textarea/Textarea.svelte +53 -84
  58. package/dist/transition/InternalTransitionChild.svelte +170 -259
  59. package/dist/transition/Transition.svelte +66 -96
  60. package/dist/transition/TransitionChild.svelte +11 -31
  61. package/dist/utils/DisabledProvider.svelte +3 -7
  62. package/dist/utils/ElementOrComponent.svelte +23 -43
  63. package/dist/utils/Generic.svelte +16 -27
  64. package/dist/utils/StableCollection.svelte +36 -54
  65. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +12 -27
  66. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +44 -88
  67. package/package.json +4 -4
@@ -1,149 +1,114 @@
1
- <script lang="ts" module>
2
- import type { Props, ElementType } from "../utils/types.js"
3
- import { onMount } from "svelte"
4
-
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>
13
- }
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
23
- }
24
- >
1
+ <script lang="ts" module>import { onMount } from "svelte";
2
+ const DEFAULT_ITEM_TAG = "svelte:fragment";
25
3
  </script>
26
4
 
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)
83
- })
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 })
5
+ <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_ITEM_TAG">import { useId } from "../hooks/use-id.js";
6
+ import { ActivationTrigger, MenuStates, useMenuContext } from "./context.svelte.js";
7
+ import { disposables } from "../utils/disposables.js";
8
+ import { useTextValue } from "../hooks/use-text-value.svelte.js";
9
+ import { restoreFocusIfNecessary } from "../utils/focus-management.js";
10
+ import { Focus } from "../utils/calculate-active-index.js";
11
+ import { useTrackedPointer } from "../hooks/use-tracked-pointer.js";
12
+ import { useLabels } from "../label/context.svelte.js";
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;
94
39
  }
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 })
40
+ });
41
+ const bag = $derived({
42
+ disabled,
43
+ domRef: { current: ref || null },
44
+ get textValue() {
45
+ return getTextValue();
110
46
  }
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
- )
47
+ });
48
+ onMount(() => {
49
+ _state.registerItem(id, {
50
+ get current() {
51
+ return bag;
52
+ }
53
+ });
54
+ return () => _state.unregisterItem(id);
55
+ });
56
+ const handleClick = (event) => {
57
+ if (disabled) return event.preventDefault();
58
+ _state.closeMenu();
59
+ restoreFocusIfNecessary(_state.buttonElement);
60
+ };
61
+ const handleFocus = () => {
62
+ if (disabled) return _state.goToItem({ focus: Focus.Nothing });
63
+ _state.goToItem({ focus: Focus.Specific, id });
64
+ };
65
+ const pointer = useTrackedPointer();
66
+ const handleEnter = (evt) => {
67
+ pointer.update(evt);
68
+ if (disabled) return;
69
+ if (active) return;
70
+ _state.goToItem({ focus: Focus.Specific, id, trigger: ActivationTrigger.Pointer });
71
+ };
72
+ const handleMove = (evt) => {
73
+ if (!pointer.wasMoved(evt)) return;
74
+ if (disabled) return;
75
+ if (active) return;
76
+ _state.goToItem({ focus: Focus.Specific, id, trigger: ActivationTrigger.Pointer });
77
+ };
78
+ const handleLeave = (evt) => {
79
+ if (!pointer.wasMoved(evt)) return;
80
+ if (disabled) return;
81
+ if (!active) return;
82
+ _state.goToItem({ focus: Focus.Nothing });
83
+ };
84
+ const labelledby = useLabels();
85
+ const describedby = useDescriptions();
86
+ const slot = $derived({
87
+ active,
88
+ focus: active,
89
+ disabled,
90
+ close: _state.closeMenu
91
+ });
92
+ const ourProps = $derived(
93
+ mergeProps({
94
+ id,
95
+ role: "menuitem",
96
+ tabindex: disabled === true ? void 0 : -1,
97
+ "aria-disabled": disabled === true ? true : void 0,
98
+ "aria-labelledby": labelledby.value,
99
+ "aria-describedby": describedby.value,
100
+ disabled: void 0,
101
+ // Never forward the `disabled` prop
102
+ onclick: handleClick,
103
+ onfocus: handleFocus,
104
+ onpointerenter: handleEnter,
105
+ onmouseenter: handleEnter,
106
+ onpointermove: handleMove,
107
+ onmousemove: handleMove,
108
+ onpointerleave: handleLeave,
109
+ onmouseleave: handleLeave
110
+ })
111
+ );
147
112
  </script>
148
113
 
149
114
  <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_ITEM_TAG} name="MenuItem" bind:ref />