@pzerelles/headlessui-svelte 2.0.0-next.1 → 2.1.2-next.2

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 (275) hide show
  1. package/dist/button/Button.svelte +61 -0
  2. package/dist/button/Button.svelte.d.ts +47 -0
  3. package/dist/button/index.d.ts +1 -0
  4. package/dist/button/index.js +1 -0
  5. package/dist/checkbox/Checkbox.svelte +93 -61
  6. package/dist/checkbox/Checkbox.svelte.d.ts +45 -29
  7. package/dist/close-button/CloseButton.svelte +11 -0
  8. package/dist/close-button/CloseButton.svelte.d.ts +48 -0
  9. package/dist/close-button/index.d.ts +1 -0
  10. package/dist/close-button/index.js +1 -0
  11. package/dist/combobox/Combobox.svelte +6 -0
  12. package/dist/combobox/Combobox.svelte.d.ts +50 -0
  13. package/dist/data-interactive/DataInteractive.svelte +41 -0
  14. package/dist/data-interactive/DataInteractive.svelte.d.ts +39 -0
  15. package/dist/data-interactive/index.d.ts +1 -0
  16. package/dist/data-interactive/index.js +1 -0
  17. package/dist/description/Description.svelte +16 -41
  18. package/dist/description/Description.svelte.d.ts +15 -23
  19. package/dist/description/context.svelte.d.ts +17 -0
  20. package/dist/description/context.svelte.js +51 -0
  21. package/dist/dialog/Dialog.svelte +51 -0
  22. package/dist/dialog/Dialog.svelte.d.ts +60 -0
  23. package/dist/dialog/DialogBackdrop.svelte +39 -0
  24. package/dist/dialog/DialogBackdrop.svelte.d.ts +38 -0
  25. package/dist/dialog/DialogPanel.svelte +46 -0
  26. package/dist/dialog/DialogPanel.svelte.d.ts +40 -0
  27. package/dist/dialog/DialogTitle.svelte +29 -0
  28. package/dist/dialog/DialogTitle.svelte.d.ts +34 -0
  29. package/dist/dialog/InternalDialog.svelte +233 -0
  30. package/dist/dialog/InternalDialog.svelte.d.ts +42 -0
  31. package/dist/dialog/context.svelte.d.ts +15 -0
  32. package/dist/dialog/context.svelte.js +16 -0
  33. package/dist/dialog/index.d.ts +4 -0
  34. package/dist/dialog/index.js +4 -0
  35. package/dist/field/Field.svelte +14 -16
  36. package/dist/field/Field.svelte.d.ts +21 -17
  37. package/dist/fieldset/Fieldset.svelte +19 -17
  38. package/dist/fieldset/Fieldset.svelte.d.ts +21 -17
  39. package/dist/focus-trap/FocusTrap.svelte +332 -0
  40. package/dist/focus-trap/FocusTrap.svelte.d.ts +58 -0
  41. package/dist/hooks/document-overflow/adjust-scrollbar-padding.d.ts +2 -0
  42. package/dist/hooks/document-overflow/adjust-scrollbar-padding.js +18 -0
  43. package/dist/hooks/document-overflow/handle-ios-locking.d.ts +6 -0
  44. package/dist/hooks/document-overflow/handle-ios-locking.js +134 -0
  45. package/dist/hooks/document-overflow/overflow-store.d.ts +19 -0
  46. package/dist/hooks/document-overflow/overflow-store.js +76 -0
  47. package/dist/hooks/document-overflow/prevent-scroll.d.ts +2 -0
  48. package/dist/hooks/document-overflow/prevent-scroll.js +7 -0
  49. package/dist/hooks/document-overflow/use-document-overflow.svelte.d.ts +7 -0
  50. package/dist/hooks/document-overflow/use-document-overflow.svelte.js +27 -0
  51. package/dist/hooks/use-active-press.svelte.d.ts +14 -0
  52. package/dist/{actions/activePress.svelte.js → hooks/use-active-press.svelte.js} +33 -39
  53. package/dist/hooks/use-by-comparator.d.ts +2 -0
  54. package/dist/hooks/use-by-comparator.js +15 -0
  55. package/dist/hooks/use-controllable.svelte.d.ts +6 -0
  56. package/dist/hooks/use-controllable.svelte.js +34 -0
  57. package/dist/hooks/use-did-element-move.svelte.d.ts +6 -0
  58. package/dist/hooks/use-did-element-move.svelte.js +27 -0
  59. package/dist/hooks/use-disabled.d.ts +3 -0
  60. package/dist/hooks/use-disabled.js +9 -0
  61. package/dist/hooks/use-element-size.svelte.d.ts +7 -0
  62. package/dist/hooks/use-element-size.svelte.js +36 -0
  63. package/dist/hooks/use-escape.svelte.d.ts +5 -0
  64. package/dist/hooks/use-escape.svelte.js +26 -0
  65. package/dist/hooks/use-event-listener.svelte.d.ts +6 -0
  66. package/dist/hooks/use-event-listener.svelte.js +12 -0
  67. package/dist/hooks/use-flags.svelte.d.ts +8 -0
  68. package/dist/hooks/use-flags.svelte.js +18 -0
  69. package/dist/hooks/use-focus-ring.svelte.d.ts +10 -0
  70. package/dist/hooks/use-focus-ring.svelte.js +24 -0
  71. package/dist/hooks/use-hover.svelte.d.ts +26 -0
  72. package/dist/hooks/use-hover.svelte.js +124 -0
  73. package/dist/hooks/use-id.d.ts +1 -0
  74. package/dist/hooks/use-id.js +1 -0
  75. package/dist/hooks/use-inert-others.svelte.d.ts +32 -0
  76. package/dist/hooks/use-inert-others.svelte.js +114 -0
  77. package/dist/hooks/use-is-mounted.svelte.d.ts +3 -0
  78. package/dist/hooks/use-is-mounted.svelte.js +14 -0
  79. package/dist/hooks/use-is-top-layer.svelte.d.ts +29 -0
  80. package/dist/hooks/use-is-top-layer.svelte.js +82 -0
  81. package/dist/hooks/use-is-touch-device.svelte.d.ts +3 -0
  82. package/dist/hooks/use-is-touch-device.svelte.js +20 -0
  83. package/dist/hooks/use-on-disappear.svelte.d.ts +12 -0
  84. package/dist/hooks/use-on-disappear.svelte.js +38 -0
  85. package/dist/hooks/use-outside-click.svelte.d.ts +10 -0
  86. package/dist/hooks/use-outside-click.svelte.js +150 -0
  87. package/dist/hooks/use-reducer.d.ts +4 -0
  88. package/dist/hooks/use-reducer.js +11 -0
  89. package/dist/hooks/use-resolve-button-type.svelte.d.ts +10 -0
  90. package/dist/hooks/use-resolve-button-type.svelte.js +19 -0
  91. package/dist/hooks/use-root-containers.svelte.d.ts +9 -0
  92. package/dist/hooks/use-root-containers.svelte.js +50 -0
  93. package/dist/hooks/use-scroll-lock.svelte.d.ts +5 -0
  94. package/dist/hooks/use-scroll-lock.svelte.js +24 -0
  95. package/dist/hooks/use-sync-refs.d.ts +7 -0
  96. package/dist/hooks/use-sync-refs.js +22 -0
  97. package/dist/hooks/use-tab-direction.svelte.d.ts +7 -0
  98. package/dist/hooks/use-tab-direction.svelte.js +25 -0
  99. package/dist/hooks/use-text-value.svelte.d.ts +3 -0
  100. package/dist/hooks/use-text-value.svelte.js +20 -0
  101. package/dist/hooks/use-tracked-pointer.d.ts +4 -0
  102. package/dist/hooks/use-tracked-pointer.js +26 -0
  103. package/dist/hooks/use-transition.svelte.d.ts +20 -0
  104. package/dist/hooks/use-transition.svelte.js +253 -0
  105. package/dist/hooks/use-tree-walker.svelte.d.ts +8 -0
  106. package/dist/hooks/use-tree-walker.svelte.js +19 -0
  107. package/dist/hooks/use-watch.svelte.d.ts +4 -0
  108. package/dist/hooks/use-watch.svelte.js +16 -0
  109. package/dist/hooks/use-window-event.svelte.d.ts +6 -0
  110. package/dist/hooks/use-window-event.svelte.js +12 -0
  111. package/dist/index.d.ts +13 -0
  112. package/dist/index.js +13 -0
  113. package/dist/input/Input.svelte +59 -0
  114. package/dist/input/Input.svelte.d.ts +52 -0
  115. package/dist/input/index.d.ts +1 -0
  116. package/dist/input/index.js +1 -0
  117. package/dist/internal/FocusSentinel.svelte +45 -0
  118. package/dist/internal/FocusSentinel.svelte.d.ts +20 -0
  119. package/dist/internal/ForcePortalRoot.svelte +6 -0
  120. package/dist/internal/ForcePortalRoot.svelte.d.ts +22 -0
  121. package/dist/internal/FormFields.svelte +2 -4
  122. package/dist/internal/FormFields.svelte.d.ts +9 -7
  123. package/dist/internal/FormResolver.svelte +11 -16
  124. package/dist/internal/FormResolver.svelte.d.ts +6 -4
  125. package/dist/internal/Hidden.svelte +5 -9
  126. package/dist/internal/Hidden.svelte.d.ts +35 -19
  127. package/dist/internal/HoistFormFields.svelte.d.ts +5 -2
  128. package/dist/internal/MainTreeProvider.svelte +45 -0
  129. package/dist/internal/MainTreeProvider.svelte.d.ts +31 -0
  130. package/dist/internal/Portal.svelte.d.ts +5 -2
  131. package/dist/internal/close-provider.d.ts +7 -0
  132. package/dist/internal/close-provider.js +7 -0
  133. package/dist/internal/floating.svelte.d.ts +62 -0
  134. package/dist/internal/floating.svelte.js +488 -0
  135. package/dist/internal/frozen.svelte.d.ts +6 -0
  136. package/dist/internal/frozen.svelte.js +18 -0
  137. package/dist/internal/id.d.ts +8 -0
  138. package/dist/internal/id.js +11 -0
  139. package/dist/internal/open-closed.d.ts +14 -0
  140. package/dist/internal/open-closed.js +17 -0
  141. package/dist/internal/portal-force-root.svelte.d.ts +6 -0
  142. package/dist/internal/portal-force-root.svelte.js +11 -0
  143. package/dist/label/Label.svelte +17 -45
  144. package/dist/label/Label.svelte.d.ts +19 -23
  145. package/dist/label/context.svelte.d.ts +17 -0
  146. package/dist/label/context.svelte.js +56 -0
  147. package/dist/legend/Legend.svelte +4 -3
  148. package/dist/legend/Legend.svelte.d.ts +33 -16
  149. package/dist/listbox/Listbox.svelte +448 -0
  150. package/dist/listbox/Listbox.svelte.d.ts +126 -0
  151. package/dist/listbox/ListboxButton.svelte +139 -0
  152. package/dist/listbox/ListboxButton.svelte.d.ts +52 -0
  153. package/dist/listbox/ListboxOption.svelte +136 -0
  154. package/dist/listbox/ListboxOption.svelte.d.ts +50 -0
  155. package/dist/listbox/ListboxOptions.svelte +269 -0
  156. package/dist/listbox/ListboxOptions.svelte.d.ts +55 -0
  157. package/dist/listbox/ListboxSelectedOption.svelte +35 -0
  158. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +40 -0
  159. package/dist/listbox/index.d.ts +5 -0
  160. package/dist/listbox/index.js +5 -0
  161. package/dist/menu/Menu.svelte +235 -0
  162. package/dist/menu/Menu.svelte.d.ts +42 -0
  163. package/dist/menu/MenuButton.svelte +127 -0
  164. package/dist/menu/MenuButton.svelte.d.ts +52 -0
  165. package/dist/menu/MenuHeading.svelte +19 -0
  166. package/dist/menu/MenuHeading.svelte.d.ts +39 -0
  167. package/dist/menu/MenuItem.svelte +114 -0
  168. package/dist/menu/MenuItem.svelte.d.ts +49 -0
  169. package/dist/menu/MenuItems.svelte +244 -0
  170. package/dist/menu/MenuItems.svelte.d.ts +55 -0
  171. package/dist/menu/MenuSection.svelte +14 -0
  172. package/dist/menu/MenuSection.svelte.d.ts +35 -0
  173. package/dist/menu/MenuSeparator.svelte +9 -0
  174. package/dist/menu/MenuSeparator.svelte.d.ts +35 -0
  175. package/dist/menu/context.svelte.d.ts +47 -0
  176. package/dist/menu/context.svelte.js +21 -0
  177. package/dist/menu/index.d.ts +7 -0
  178. package/dist/menu/index.js +7 -0
  179. package/dist/portal/InternalPortal.svelte +97 -0
  180. package/dist/portal/InternalPortal.svelte.d.ts +43 -0
  181. package/dist/portal/Portal.svelte +7 -0
  182. package/dist/portal/Portal.svelte.d.ts +23 -0
  183. package/dist/portal/PortalGroup.svelte +14 -0
  184. package/dist/portal/PortalGroup.svelte.d.ts +40 -0
  185. package/dist/switch/Switch.svelte +143 -0
  186. package/dist/switch/Switch.svelte.d.ts +61 -0
  187. package/dist/switch/SwitchGroup.svelte +37 -0
  188. package/dist/switch/SwitchGroup.svelte.d.ts +34 -0
  189. package/dist/switch/index.d.ts +2 -0
  190. package/dist/switch/index.js +2 -0
  191. package/dist/tabs/Tab.svelte +156 -0
  192. package/dist/tabs/Tab.svelte.d.ts +48 -0
  193. package/dist/tabs/TabGroup.svelte +241 -0
  194. package/dist/tabs/TabGroup.svelte.d.ts +67 -0
  195. package/dist/tabs/TabList.svelte +16 -0
  196. package/dist/tabs/TabList.svelte.d.ts +35 -0
  197. package/dist/tabs/TabPanel.svelte +61 -0
  198. package/dist/tabs/TabPanel.svelte.d.ts +47 -0
  199. package/dist/tabs/TabPanels.svelte +12 -0
  200. package/dist/tabs/TabPanels.svelte.d.ts +34 -0
  201. package/dist/tabs/index.d.ts +5 -0
  202. package/dist/tabs/index.js +5 -0
  203. package/dist/test-utils/accessability-assertions.d.ts +271 -0
  204. package/dist/test-utils/accessability-assertions.js +1572 -0
  205. package/dist/test-utils/fake-pointer.d.ts +24 -0
  206. package/dist/test-utils/fake-pointer.js +48 -0
  207. package/dist/test-utils/interactions.d.ts +61 -0
  208. package/dist/test-utils/interactions.js +453 -0
  209. package/dist/test-utils/suppress-console-logs.d.ts +7 -0
  210. package/dist/test-utils/suppress-console-logs.js +17 -0
  211. package/dist/transition/InternalTransitionChild.svelte +178 -0
  212. package/dist/transition/InternalTransitionChild.svelte.d.ts +55 -0
  213. package/dist/transition/Transition.svelte +89 -0
  214. package/dist/transition/Transition.svelte.d.ts +42 -0
  215. package/dist/transition/TransitionChild.svelte +16 -0
  216. package/dist/transition/TransitionChild.svelte.d.ts +44 -0
  217. package/dist/transition/context.svelte.d.ts +64 -0
  218. package/dist/transition/context.svelte.js +120 -0
  219. package/dist/transition/index.d.ts +2 -0
  220. package/dist/transition/index.js +2 -0
  221. package/dist/utils/ElementOrComponent.svelte +26 -0
  222. package/dist/utils/ElementOrComponent.svelte.d.ts +56 -0
  223. package/dist/utils/Generic.svelte +44 -0
  224. package/dist/utils/Generic.svelte.d.ts +35 -0
  225. package/dist/utils/StableCollection.svelte +43 -0
  226. package/dist/utils/StableCollection.svelte.d.ts +22 -0
  227. package/dist/utils/active-element-history.d.ts +1 -0
  228. package/dist/utils/active-element-history.js +35 -0
  229. package/dist/utils/alternative-types.d.ts +21 -0
  230. package/dist/utils/alternative-types.js +1 -0
  231. package/dist/utils/calculate-active-index.d.ts +25 -0
  232. package/dist/utils/calculate-active-index.js +74 -0
  233. package/dist/utils/class-names.d.ts +1 -0
  234. package/dist/utils/class-names.js +10 -0
  235. package/dist/utils/default-map.d.ts +5 -0
  236. package/dist/utils/default-map.js +15 -0
  237. package/dist/utils/disposables.d.ts +14 -12
  238. package/dist/utils/disposables.js +13 -10
  239. package/dist/utils/dom.d.ts +0 -2
  240. package/dist/utils/dom.js +2 -4
  241. package/dist/utils/env.d.ts +17 -0
  242. package/dist/utils/env.js +39 -0
  243. package/dist/utils/focus-management.d.ts +45 -0
  244. package/dist/utils/focus-management.js +242 -0
  245. package/dist/utils/focusVisible.svelte.d.ts +3 -3
  246. package/dist/utils/focusVisible.svelte.js +52 -41
  247. package/dist/utils/get-text-value.d.ts +1 -0
  248. package/dist/utils/get-text-value.js +71 -0
  249. package/dist/utils/id.d.ts +1 -1
  250. package/dist/utils/match.d.ts +1 -0
  251. package/dist/utils/match.js +13 -0
  252. package/dist/utils/on-document-ready.d.ts +1 -0
  253. package/dist/utils/on-document-ready.js +12 -0
  254. package/dist/utils/once.d.ts +1 -0
  255. package/dist/utils/once.js +9 -0
  256. package/dist/utils/owner.d.ts +1 -0
  257. package/dist/utils/owner.js +8 -0
  258. package/dist/utils/platform.d.ts +2 -0
  259. package/dist/utils/platform.js +17 -0
  260. package/dist/utils/ref.svelte.d.ts +4 -0
  261. package/dist/utils/ref.svelte.js +4 -0
  262. package/dist/utils/render.d.ts +34 -0
  263. package/dist/utils/render.js +119 -0
  264. package/dist/utils/state.d.ts +7 -1
  265. package/dist/utils/state.js +10 -6
  266. package/dist/utils/store.d.ts +11 -0
  267. package/dist/utils/store.js +20 -0
  268. package/dist/utils/types.d.ts +24 -0
  269. package/dist/utils/types.js +1 -0
  270. package/package.json +33 -25
  271. package/dist/actions/activePress.svelte.d.ts +0 -8
  272. package/dist/actions/focusRing.svelte.d.ts +0 -9
  273. package/dist/actions/focusRing.svelte.js +0 -34
  274. package/dist/utils/disabled.d.ts +0 -3
  275. package/dist/utils/disabled.js +0 -2
@@ -0,0 +1,126 @@
1
+ import { type ByComparator } from "../hooks/use-by-comparator.js";
2
+ import { Focus } from "../utils/calculate-active-index.js";
3
+ import { type MutableRefObject } from "../utils/ref.svelte.js";
4
+ import type { ElementType, Props } from "../utils/types.js";
5
+ import { type Snippet } from "svelte";
6
+ declare let DEFAULT_LISTBOX_TAG: string;
7
+ type ListboxRenderPropArg<T> = {
8
+ open: boolean;
9
+ disabled: boolean;
10
+ invalid: boolean;
11
+ value: T;
12
+ };
13
+ export type ListboxProps<TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG, TType = string, TActualType = TType extends (infer U)[] ? U : TType> = Props<TTag, ListboxRenderPropArg<TType>, "value" | "defaultValue" | "onchange" | "by" | "disabled" | "horizontal" | "name" | "multiple", {
14
+ value?: TType;
15
+ defaultValue?: TType;
16
+ onchange?: (value: TType) => void;
17
+ by?: ByComparator<TActualType>;
18
+ disabled?: boolean;
19
+ invalid?: boolean;
20
+ horizontal?: boolean;
21
+ form?: string;
22
+ name?: string;
23
+ multiple?: boolean;
24
+ __demoMode?: boolean;
25
+ }>;
26
+ export type ListboxChildren<T> = Snippet<[ListboxRenderPropArg<T>]>;
27
+ export declare enum ListboxStates {
28
+ Open = 0,
29
+ Closed = 1
30
+ }
31
+ export declare enum ValueMode {
32
+ Single = 0,
33
+ Multi = 1
34
+ }
35
+ export declare enum ActivationTrigger {
36
+ Pointer = 0,
37
+ Other = 1
38
+ }
39
+ export type ListboxOptionDataRef<T> = MutableRefObject<{
40
+ textValue?: string;
41
+ disabled: boolean;
42
+ value: T;
43
+ domRef: MutableRefObject<HTMLElement | null>;
44
+ }>;
45
+ interface StateDefinition<T> {
46
+ listboxState: ListboxStates;
47
+ options: {
48
+ id: string;
49
+ dataRef: ListboxOptionDataRef<T>;
50
+ }[];
51
+ searchQuery: string;
52
+ activeOptionIndex: number | null;
53
+ activationTrigger: ActivationTrigger;
54
+ __demoMode: boolean;
55
+ }
56
+ type ListboxActionsContext = {
57
+ openListbox(): void;
58
+ closeListbox(): void;
59
+ registerOption(id: string, dataRef: ListboxOptionDataRef<unknown>): () => void;
60
+ goToOption(focus: Focus.Specific, id: string, trigger?: ActivationTrigger): void;
61
+ goToOption(focus: Focus, id?: string, trigger?: ActivationTrigger): void;
62
+ selectOption(id: string): void;
63
+ selectActiveOption(): void;
64
+ onChange(value: unknown): void;
65
+ search(query: string): void;
66
+ clearSearch(): void;
67
+ };
68
+ export declare function useActions(component: string): ListboxActionsContext;
69
+ export type ListboxDataContext = {
70
+ value: unknown;
71
+ disabled: boolean;
72
+ invalid: boolean;
73
+ mode: ValueMode;
74
+ orientation: "horizontal" | "vertical";
75
+ activeOptionIndex: number | null;
76
+ compare(a: unknown, z: unknown): boolean;
77
+ isSelected(value: unknown): boolean;
78
+ optionsPropsRef: MutableRefObject<{
79
+ static: boolean;
80
+ hold: boolean;
81
+ }>;
82
+ listRef: MutableRefObject<Map<string, HTMLElement | null>>;
83
+ buttonRef: MutableRefObject<HTMLElement | null>;
84
+ optionsRef: MutableRefObject<HTMLElement | null>;
85
+ } & Omit<StateDefinition<unknown>, "dataRef">;
86
+ export declare function useData(component: string): ListboxDataContext;
87
+ declare class __sveltets_Render<TType, TActualType, TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG> {
88
+ props(): {
89
+ as?: TTag | undefined;
90
+ } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, "form" | ("as" | "children" | "refName" | "class") | "invalid" | "disabled" | "name" | "value" | "onchange" | "multiple" | "__demoMode" | "defaultValue" | "by" | "horizontal"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
91
+ children?: import("../utils/types.js").Children<ListboxRenderPropArg<TType>> | undefined;
92
+ ref?: HTMLElement;
93
+ } & (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) ? {
94
+ class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: ListboxRenderPropArg<TType>) => string) | undefined;
95
+ } : {}) & {
96
+ value?: TType | undefined;
97
+ defaultValue?: TType | undefined;
98
+ onchange?: ((value: TType) => void) | undefined;
99
+ by?: ByComparator<TActualType> | undefined;
100
+ disabled?: boolean;
101
+ invalid?: boolean;
102
+ horizontal?: boolean;
103
+ form?: string;
104
+ name?: string;
105
+ multiple?: boolean;
106
+ __demoMode?: boolean;
107
+ };
108
+ events(): {} & {
109
+ [evt: string]: CustomEvent<any>;
110
+ };
111
+ slots(): {};
112
+ bindings(): "ref";
113
+ exports(): {};
114
+ }
115
+ interface $$IsomorphicComponent {
116
+ new <TType, TActualType, TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TType, TActualType, TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TType, TActualType, TTag>['props']>, ReturnType<__sveltets_Render<TType, TActualType, TTag>['events']>, ReturnType<__sveltets_Render<TType, TActualType, TTag>['slots']>> & {
117
+ $$bindings?: ReturnType<__sveltets_Render<TType, TActualType, TTag>['bindings']>;
118
+ } & ReturnType<__sveltets_Render<TType, TActualType, TTag>['exports']>;
119
+ <TType, TActualType, TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TType, TActualType, TTag>['props']> & {
120
+ $$events?: ReturnType<__sveltets_Render<TType, TActualType, TTag>['events']>;
121
+ }): ReturnType<__sveltets_Render<TType, TActualType, TTag>['exports']>;
122
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any, any>['bindings']>;
123
+ }
124
+ declare const Listbox: $$IsomorphicComponent;
125
+ type Listbox<TType, TActualType, TTag extends ElementType = typeof DEFAULT_LISTBOX_TAG> = InstanceType<typeof Listbox<TType, TActualType, TTag>>;
126
+ export default Listbox;
@@ -0,0 +1,139 @@
1
+ <script lang="ts" module>import { useId } from "../hooks/use-id.js";
2
+ import { getIdContext } from "../utils/id.js";
3
+ import { ListboxStates, useActions, useData } from "./Listbox.svelte";
4
+ import { attemptSubmit } from "../utils/form.js";
5
+ import { Focus } from "../utils/calculate-active-index.js";
6
+ import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
7
+ import { useActivePress } from "../hooks/use-active-press.svelte.js";
8
+ import { useResolveButtonType } from "../hooks/use-resolve-button-type.svelte.js";
9
+ import { useFloating } from "../internal/floating.svelte.js";
10
+ import { stateFromSlot } from "../utils/state.js";
11
+ import { useLabelledBy } from "../label/context.svelte.js";
12
+ import { useDescribedBy } from "../description/context.svelte.js";
13
+ import { useHover } from "../hooks/use-hover.svelte.js";
14
+ import { mergeProps } from "../utils/render.js";
15
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte";
16
+ const DEFAULT_BUTTON_TAG = "button";
17
+ </script>
18
+
19
+ <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_BUTTON_TAG">const data = useData("ListboxButton");
20
+ const actions = useActions("ListboxButton");
21
+ const internalId = useId();
22
+ const providedId = getIdContext();
23
+ let {
24
+ as = DEFAULT_BUTTON_TAG,
25
+ ref = $bindable(),
26
+ id = providedId || `headlessui-listbox-button-${internalId}`,
27
+ disabled: ownDisabled = false,
28
+ autofocus = false,
29
+ ...theirProps
30
+ } = $props();
31
+ const { setReference, getReferenceProps: getFloatingReferenceProps } = useFloating();
32
+ $effect(() => {
33
+ data.buttonRef.current = 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;
60
+ }
61
+ };
62
+ const handleClick = (event) => {
63
+ if (data.listboxState === ListboxStates.Open) {
64
+ actions.closeListbox();
65
+ data.buttonRef.current?.focus({ preventScroll: true });
66
+ } else {
67
+ event.preventDefault();
68
+ actions.openListbox();
69
+ }
70
+ };
71
+ const handleKeyPress = (event) => event.preventDefault();
72
+ const labelledBy = useLabelledBy();
73
+ const describedBy = useDescribedBy();
74
+ const { isHovered: hover, hoverProps } = $derived(
75
+ useHover({
76
+ get disabled() {
77
+ return disabled;
78
+ }
79
+ })
80
+ );
81
+ const { pressed: active, pressProps } = $derived(
82
+ useActivePress({
83
+ get disabled() {
84
+ return disabled;
85
+ }
86
+ })
87
+ );
88
+ const { isFocusVisible: focus, focusProps } = $derived(
89
+ useFocusRing({
90
+ get autofocus() {
91
+ return autofocus;
92
+ }
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 };
108
+ },
109
+ get ref() {
110
+ return data.buttonRef;
111
+ }
112
+ });
113
+ const ourProps = $derived(
114
+ mergeProps(
115
+ {
116
+ ...getFloatingReferenceProps(),
117
+ id,
118
+ type: buttonType.type,
119
+ "aria-haspopup": "listbox",
120
+ "aria-controls": data.optionsRef.current?.id,
121
+ "aria-expanded": data.listboxState === ListboxStates.Open,
122
+ "aria-labelledby": labelledBy.value,
123
+ "aria-describedby": describedBy.value,
124
+ disabled: disabled || void 0,
125
+ autofocus,
126
+ onkeydown: handleKeyDown,
127
+ onkeyup: handleKeyUp,
128
+ onkeypress: handleKeyPress,
129
+ onclick: handleClick
130
+ },
131
+ focusProps,
132
+ hoverProps,
133
+ pressProps,
134
+ stateFromSlot(slot)
135
+ )
136
+ );
137
+ </script>
138
+
139
+ <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_BUTTON_TAG} name="ListboxButton" bind:ref />
@@ -0,0 +1,52 @@
1
+ import type { ElementType, Props } from "../utils/types.js";
2
+ import type { Snippet } from "svelte";
3
+ declare const DEFAULT_BUTTON_TAG: "button";
4
+ type ButtonRenderPropArg = {
5
+ disabled: boolean;
6
+ invalid: boolean;
7
+ hover: boolean;
8
+ focus: boolean;
9
+ autofocus: boolean;
10
+ open: boolean;
11
+ active: boolean;
12
+ value: any;
13
+ };
14
+ type ButtonPropsWeControl = "aria-controls" | "aria-expanded" | "aria-haspopup" | "aria-labelledby" | "disabled";
15
+ export type ListboxButtonProps<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = Props<TTag, ButtonRenderPropArg, ButtonPropsWeControl, {
16
+ id?: string;
17
+ autofocus?: boolean;
18
+ disabled?: boolean;
19
+ }>;
20
+ export type ListboxButtonChildren = Snippet<[ButtonRenderPropArg]>;
21
+ declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> {
22
+ props(): {
23
+ as?: TTag | undefined;
24
+ } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "autofocus" | "id" | ButtonPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
25
+ children?: import("../utils/types.js").Children<ButtonRenderPropArg> | undefined;
26
+ ref?: HTMLElement;
27
+ } & (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) ? {
28
+ class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: ButtonRenderPropArg) => string) | undefined;
29
+ } : {}) & {
30
+ id?: string;
31
+ autofocus?: boolean;
32
+ disabled?: boolean;
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 ListboxButton: $$IsomorphicComponent;
51
+ type ListboxButton<TTag extends ElementType = typeof DEFAULT_BUTTON_TAG> = InstanceType<typeof ListboxButton<TTag>>;
52
+ export default ListboxButton;
@@ -0,0 +1,136 @@
1
+ <script lang="ts" module>const DEFAULT_OPTION_TAG = "div";
2
+ </script>
3
+
4
+ <script lang="ts" generics="TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG">import { useId } from "../hooks/use-id.js";
5
+ import {
6
+ ActivationTrigger,
7
+ ListboxStates,
8
+ useActions,
9
+ useData,
10
+ ValueMode
11
+ } from "./Listbox.svelte";
12
+ import { disposables } from "../utils/disposables.js";
13
+ import { Focus } from "../utils/calculate-active-index.js";
14
+ import { getContext, onMount } from "svelte";
15
+ import { useTextValue } from "../hooks/use-text-value.svelte.js";
16
+ import { useTrackedPointer } from "../hooks/use-tracked-pointer.js";
17
+ import { stateFromSlot } from "../utils/state.js";
18
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte";
19
+ const internalId = useId();
20
+ let {
21
+ as = DEFAULT_OPTION_TAG,
22
+ ref = $bindable(),
23
+ id = `headlessui-listbox-option-${internalId}`,
24
+ disabled = false,
25
+ value,
26
+ ...theirProps
27
+ } = $props();
28
+ const usedInSelectedOption = getContext("SelectedOptionContext") === true;
29
+ const data = useData("ListboxOption");
30
+ const actions = useActions("ListboxOption");
31
+ const active = $derived(data.activeOptionIndex !== null ? data.options[data.activeOptionIndex].id === id : false);
32
+ const selected = $derived(data.isSelected(value));
33
+ const getTextValue = useTextValue({
34
+ get element() {
35
+ return ref;
36
+ }
37
+ });
38
+ const bag = $derived({
39
+ disabled,
40
+ value,
41
+ domRef: { current: ref || null },
42
+ get textValue() {
43
+ return getTextValue();
44
+ }
45
+ });
46
+ $effect(() => {
47
+ if (!ref) {
48
+ data.listRef.current.delete(id);
49
+ } else {
50
+ data.listRef.current.set(id, ref);
51
+ }
52
+ });
53
+ $effect(() => {
54
+ if (data.__demoMode) return;
55
+ if (data.listboxState !== ListboxStates.Open) return;
56
+ if (!active) return;
57
+ if (data.activationTrigger === ActivationTrigger.Pointer) return;
58
+ return disposables().requestAnimationFrame(() => {
59
+ ;
60
+ ref?.scrollIntoView?.({ block: "nearest" });
61
+ });
62
+ });
63
+ onMount(() => {
64
+ if (usedInSelectedOption) return;
65
+ return actions.registerOption(id, {
66
+ get current() {
67
+ return bag;
68
+ }
69
+ });
70
+ });
71
+ const handleClick = (event) => {
72
+ if (disabled) return event.preventDefault();
73
+ actions.onChange(value);
74
+ if (data.mode === ValueMode.Single) {
75
+ actions.closeListbox();
76
+ data.buttonRef.current?.focus({ preventScroll: true });
77
+ }
78
+ };
79
+ const handleFocus = () => {
80
+ if (disabled) return actions.goToOption(Focus.Nothing);
81
+ actions.goToOption(Focus.Specific, id);
82
+ };
83
+ const pointer = useTrackedPointer();
84
+ const handleEnter = (evt) => {
85
+ pointer.update(evt);
86
+ if (disabled) return;
87
+ if (active) return;
88
+ actions.goToOption(Focus.Specific, id, ActivationTrigger.Pointer);
89
+ };
90
+ const handleMove = (evt) => {
91
+ if (!pointer.wasMoved(evt)) return;
92
+ if (disabled) return;
93
+ if (active) return;
94
+ actions.goToOption(Focus.Specific, id, ActivationTrigger.Pointer);
95
+ };
96
+ const handleLeave = (evt) => {
97
+ if (!pointer.wasMoved(evt)) return;
98
+ if (disabled) return;
99
+ if (!active) return;
100
+ actions.goToOption(Focus.Nothing);
101
+ };
102
+ const slot = $derived({
103
+ active,
104
+ focus: active,
105
+ selected,
106
+ disabled,
107
+ selectedOption: selected && usedInSelectedOption
108
+ });
109
+ const ourProps = $derived(
110
+ !usedInSelectedOption ? {
111
+ id,
112
+ role: "option",
113
+ tabIndex: disabled === true ? void 0 : -1,
114
+ "aria-disabled": disabled === true ? true : void 0,
115
+ // According to the WAI-ARIA best practices, we should use aria-checked for
116
+ // multi-select,but Voice-Over disagrees. So we use aria-checked instead for
117
+ // both single and multi-select.
118
+ "aria-selected": selected,
119
+ disabled: void 0,
120
+ // Never forward the `disabled` prop
121
+ onclick: handleClick,
122
+ onfocus: handleFocus,
123
+ onpointerenter: handleEnter,
124
+ onmouseenter: handleEnter,
125
+ onpointermove: handleMove,
126
+ onmousemove: handleMove,
127
+ onpointerleave: handleLeave,
128
+ onmouseleave: handleLeave,
129
+ ...stateFromSlot(slot)
130
+ } : {}
131
+ );
132
+ </script>
133
+
134
+ {#if selected || !usedInSelectedOption}
135
+ <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_OPTION_TAG} name="Listbox" bind:ref />
136
+ {/if}
@@ -0,0 +1,50 @@
1
+ import type { ElementType, Props } from "../utils/types.js";
2
+ declare const DEFAULT_OPTION_TAG: "div";
3
+ type OptionRenderPropArg = {
4
+ /** @deprecated use `focus` instead */
5
+ active: boolean;
6
+ focus: boolean;
7
+ selected: boolean;
8
+ disabled: boolean;
9
+ selectedOption: boolean;
10
+ };
11
+ type OptionPropsWeControl = "aria-disabled" | "aria-selected" | "role" | "tabIndex";
12
+ export type ListboxOptionProps<TTag extends ElementType = typeof DEFAULT_OPTION_TAG, TType = string> = Props<TTag, OptionRenderPropArg, OptionPropsWeControl, {
13
+ id?: string;
14
+ disabled?: boolean;
15
+ value: TType;
16
+ }>;
17
+ export type ListboxOptionChildren = Snippet<[OptionRenderPropArg]>;
18
+ import { type Snippet } from "svelte";
19
+ declare class __sveltets_Render<TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG> {
20
+ props(): {
21
+ as?: TTag | undefined;
22
+ } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "disabled" | "value" | "id" | OptionPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
23
+ children?: import("../utils/types.js").Children<OptionRenderPropArg> | undefined;
24
+ ref?: HTMLElement;
25
+ } & (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) ? {
26
+ class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: OptionRenderPropArg) => string) | undefined;
27
+ } : {}) & {
28
+ id?: string;
29
+ disabled?: boolean;
30
+ value: TType;
31
+ };
32
+ events(): {} & {
33
+ [evt: string]: CustomEvent<any>;
34
+ };
35
+ slots(): {};
36
+ bindings(): "ref";
37
+ exports(): {};
38
+ }
39
+ interface $$IsomorphicComponent {
40
+ new <TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TType, TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TType, TTag>['props']>, ReturnType<__sveltets_Render<TType, TTag>['events']>, ReturnType<__sveltets_Render<TType, TTag>['slots']>> & {
41
+ $$bindings?: ReturnType<__sveltets_Render<TType, TTag>['bindings']>;
42
+ } & ReturnType<__sveltets_Render<TType, TTag>['exports']>;
43
+ <TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TType, TTag>['props']> & {
44
+ $$events?: ReturnType<__sveltets_Render<TType, TTag>['events']>;
45
+ }): ReturnType<__sveltets_Render<TType, TTag>['exports']>;
46
+ z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
47
+ }
48
+ declare const ListboxOption: $$IsomorphicComponent;
49
+ type ListboxOption<TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG> = InstanceType<typeof ListboxOption<TType, TTag>>;
50
+ export default ListboxOption;