@pzerelles/headlessui-svelte 2.1.2-next.5 → 2.1.2-next.51

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 (267) hide show
  1. package/dist/button/Button.svelte +16 -19
  2. package/dist/button/Button.svelte.d.ts +8 -36
  3. package/dist/button/index.d.ts +1 -1
  4. package/dist/button/index.js +1 -1
  5. package/dist/checkbox/Checkbox.svelte +31 -27
  6. package/dist/checkbox/Checkbox.svelte.d.ts +17 -38
  7. package/dist/checkbox/index.d.ts +1 -1
  8. package/dist/checkbox/index.js +1 -1
  9. package/dist/close-button/CloseButton.svelte +4 -7
  10. package/dist/close-button/CloseButton.svelte.d.ts +3 -46
  11. package/dist/close-button/index.d.ts +1 -0
  12. package/dist/close-button/index.js +1 -0
  13. package/dist/data-interactive/DataInteractive.svelte +6 -22
  14. package/dist/data-interactive/DataInteractive.svelte.d.ts +9 -34
  15. package/dist/data-interactive/index.d.ts +1 -1
  16. package/dist/data-interactive/index.js +1 -1
  17. package/dist/description/Description.svelte +29 -24
  18. package/dist/description/Description.svelte.d.ts +9 -30
  19. package/dist/description/context.svelte.js +14 -16
  20. package/dist/description/index.d.ts +1 -1
  21. package/dist/dialog/Dialog.svelte +315 -31
  22. package/dist/dialog/Dialog.svelte.d.ts +7 -45
  23. package/dist/dialog/DialogBackdrop.svelte +11 -14
  24. package/dist/dialog/DialogBackdrop.svelte.d.ts +8 -33
  25. package/dist/dialog/DialogPanel.svelte +23 -19
  26. package/dist/dialog/DialogPanel.svelte.d.ts +8 -34
  27. package/dist/dialog/DialogTitle.svelte +17 -8
  28. package/dist/dialog/DialogTitle.svelte.d.ts +9 -30
  29. package/dist/dialog/context.svelte.js +2 -2
  30. package/dist/dialog/index.d.ts +4 -4
  31. package/dist/dialog/index.js +4 -4
  32. package/dist/disclosure/Disclosure.svelte +61 -0
  33. package/dist/disclosure/Disclosure.svelte.d.ts +14 -0
  34. package/dist/disclosure/DisclosureButton.svelte +191 -0
  35. package/dist/disclosure/DisclosureButton.svelte.d.ts +19 -0
  36. package/dist/disclosure/DisclosurePanel.svelte +96 -0
  37. package/dist/disclosure/DisclosurePanel.svelte.d.ts +16 -0
  38. package/dist/disclosure/context.svelte.d.ts +32 -0
  39. package/dist/disclosure/context.svelte.js +94 -0
  40. package/dist/disclosure/index.d.ts +3 -0
  41. package/dist/disclosure/index.js +3 -0
  42. package/dist/field/Field.svelte +27 -26
  43. package/dist/field/Field.svelte.d.ts +7 -34
  44. package/dist/field/index.d.ts +1 -1
  45. package/dist/fieldset/Fieldset.svelte +21 -20
  46. package/dist/fieldset/Fieldset.svelte.d.ts +8 -35
  47. package/dist/fieldset/index.d.ts +1 -1
  48. package/dist/focus-trap/FocusTrap.svelte +29 -36
  49. package/dist/focus-trap/FocusTrap.svelte.d.ts +8 -38
  50. package/dist/hooks/use-controllable.svelte.js +3 -2
  51. package/dist/hooks/use-did-element-move.svelte.js +5 -10
  52. package/dist/hooks/use-disabled.d.ts +6 -1
  53. package/dist/hooks/use-disabled.js +10 -5
  54. package/dist/hooks/use-element-size.svelte.js +1 -1
  55. package/dist/hooks/use-event-listener.svelte.d.ts +1 -1
  56. package/dist/hooks/use-event-listener.svelte.js +3 -1
  57. package/dist/hooks/use-focus-ring.svelte.js +1 -1
  58. package/dist/hooks/use-inert-others.svelte.js +10 -10
  59. package/dist/hooks/use-is-top-layer.svelte.js +2 -2
  60. package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
  61. package/dist/hooks/use-root-containers.svelte.d.ts +2 -2
  62. package/dist/hooks/use-root-containers.svelte.js +5 -5
  63. package/dist/hooks/use-tab-direction.svelte.js +1 -1
  64. package/dist/hooks/use-transition.svelte.js +29 -4
  65. package/dist/index.d.ts +6 -2
  66. package/dist/index.js +6 -2
  67. package/dist/input/Input.svelte +28 -21
  68. package/dist/input/Input.svelte.d.ts +16 -33
  69. package/dist/input/index.d.ts +1 -1
  70. package/dist/input/index.js +1 -1
  71. package/dist/internal/FloatingProvider.svelte +17 -0
  72. package/dist/internal/FloatingProvider.svelte.d.ts +8 -0
  73. package/dist/internal/FocusSentinel.svelte +33 -32
  74. package/dist/internal/FocusSentinel.svelte.d.ts +4 -18
  75. package/dist/internal/ForcePortalRoot.svelte.d.ts +4 -18
  76. package/dist/internal/FormFields.svelte +18 -13
  77. package/dist/internal/FormFields.svelte.d.ts +4 -18
  78. package/dist/internal/FormFieldsProvider.svelte +17 -0
  79. package/dist/internal/FormFieldsProvider.svelte.d.ts +7 -0
  80. package/dist/internal/FormResolver.svelte +6 -2
  81. package/dist/internal/FormResolver.svelte.d.ts +4 -18
  82. package/dist/internal/Hidden.svelte +10 -10
  83. package/dist/internal/Hidden.svelte.d.ts +6 -33
  84. package/dist/internal/MainTreeProvider.svelte +1 -1
  85. package/dist/internal/MainTreeProvider.svelte.d.ts +4 -18
  86. package/dist/internal/Portal.svelte.d.ts +4 -18
  87. package/dist/internal/floating-provider.svelte.d.ts +3 -0
  88. package/dist/internal/floating-provider.svelte.js +206 -0
  89. package/dist/internal/floating.svelte.d.ts +46 -22
  90. package/dist/internal/floating.svelte.js +90 -272
  91. package/dist/internal/form-fields.svelte.d.ts +10 -0
  92. package/dist/internal/form-fields.svelte.js +23 -0
  93. package/dist/internal/frozen.svelte.js +1 -1
  94. package/dist/label/Label.svelte +17 -13
  95. package/dist/label/Label.svelte.d.ts +8 -33
  96. package/dist/label/context.svelte.js +1 -1
  97. package/dist/label/index.d.ts +1 -1
  98. package/dist/legend/Legend.svelte +22 -15
  99. package/dist/legend/Legend.svelte.d.ts +10 -34
  100. package/dist/listbox/Listbox.svelte +79 -151
  101. package/dist/listbox/Listbox.svelte.d.ts +16 -91
  102. package/dist/listbox/ListboxButton.svelte +31 -29
  103. package/dist/listbox/ListboxButton.svelte.d.ts +8 -38
  104. package/dist/listbox/ListboxOption.svelte +40 -27
  105. package/dist/listbox/ListboxOption.svelte.d.ts +16 -32
  106. package/dist/listbox/ListboxOptions.svelte +126 -72
  107. package/dist/listbox/ListboxOptions.svelte.d.ts +8 -43
  108. package/dist/listbox/ListboxSelectedOption.svelte +24 -26
  109. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +14 -39
  110. package/dist/listbox/context.svelte.d.ts +76 -0
  111. package/dist/listbox/context.svelte.js +36 -0
  112. package/dist/listbox/index.d.ts +5 -5
  113. package/dist/listbox/index.js +4 -4
  114. package/dist/menu/Menu.svelte +22 -266
  115. package/dist/menu/Menu.svelte.d.ts +7 -37
  116. package/dist/menu/MenuButton.svelte +29 -24
  117. package/dist/menu/MenuButton.svelte.d.ts +8 -39
  118. package/dist/menu/MenuHeading.svelte +12 -16
  119. package/dist/menu/MenuHeading.svelte.d.ts +7 -36
  120. package/dist/menu/MenuItem.svelte +18 -23
  121. package/dist/menu/MenuItem.svelte.d.ts +9 -39
  122. package/dist/menu/MenuItems.svelte +33 -34
  123. package/dist/menu/MenuItems.svelte.d.ts +8 -43
  124. package/dist/menu/MenuSection.svelte +9 -12
  125. package/dist/menu/MenuSection.svelte.d.ts +7 -33
  126. package/dist/menu/MenuSeparator.svelte +9 -12
  127. package/dist/menu/MenuSeparator.svelte.d.ts +7 -33
  128. package/dist/menu/context.svelte.d.ts +2 -1
  129. package/dist/menu/context.svelte.js +212 -2
  130. package/dist/menu/index.d.ts +7 -7
  131. package/dist/menu/index.js +3 -3
  132. package/dist/popover/Popover.svelte +228 -0
  133. package/dist/popover/Popover.svelte.d.ts +15 -0
  134. package/dist/popover/PopoverBackdrop.svelte +83 -0
  135. package/dist/popover/PopoverBackdrop.svelte.d.ts +17 -0
  136. package/dist/popover/PopoverButton.svelte +324 -0
  137. package/dist/popover/PopoverButton.svelte.d.ts +21 -0
  138. package/dist/popover/PopoverGroup.svelte +66 -0
  139. package/dist/popover/PopoverGroup.svelte.d.ts +9 -0
  140. package/dist/popover/PopoverPanel.svelte +359 -0
  141. package/dist/popover/PopoverPanel.svelte.d.ts +22 -0
  142. package/dist/popover/context.svelte.d.ts +51 -0
  143. package/dist/popover/context.svelte.js +108 -0
  144. package/dist/popover/index.d.ts +5 -0
  145. package/dist/popover/index.js +5 -0
  146. package/dist/portal/InternalPortal.svelte +17 -17
  147. package/dist/portal/InternalPortal.svelte.d.ts +6 -33
  148. package/dist/portal/Portal.svelte +7 -6
  149. package/dist/portal/Portal.svelte.d.ts +3 -22
  150. package/dist/portal/PortalGroup.svelte +6 -14
  151. package/dist/portal/PortalGroup.svelte.d.ts +5 -34
  152. package/dist/radio-group/Radio.svelte +142 -0
  153. package/dist/radio-group/Radio.svelte.d.ts +35 -0
  154. package/dist/radio-group/RadioGroup.svelte +222 -0
  155. package/dist/radio-group/RadioGroup.svelte.d.ts +34 -0
  156. package/dist/radio-group/RadioOption.svelte +145 -0
  157. package/dist/radio-group/RadioOption.svelte.d.ts +37 -0
  158. package/dist/radio-group/contest.svelte.d.ts +30 -0
  159. package/dist/radio-group/contest.svelte.js +40 -0
  160. package/dist/radio-group/index.d.ts +3 -0
  161. package/dist/radio-group/index.js +3 -0
  162. package/dist/select/Select.svelte +112 -0
  163. package/dist/select/Select.svelte.d.ts +21 -0
  164. package/dist/select/index.d.ts +1 -0
  165. package/dist/select/index.js +1 -0
  166. package/dist/switch/Switch.svelte +27 -28
  167. package/dist/switch/Switch.svelte.d.ts +9 -42
  168. package/dist/switch/SwitchGroup.svelte +5 -5
  169. package/dist/switch/SwitchGroup.svelte.d.ts +8 -30
  170. package/dist/switch/index.d.ts +1 -1
  171. package/dist/switch/index.js +1 -1
  172. package/dist/tabs/Tab.svelte +28 -31
  173. package/dist/tabs/Tab.svelte.d.ts +8 -36
  174. package/dist/tabs/TabGroup.svelte +42 -264
  175. package/dist/tabs/TabGroup.svelte.d.ts +7 -57
  176. package/dist/tabs/TabList.svelte +13 -16
  177. package/dist/tabs/TabList.svelte.d.ts +8 -31
  178. package/dist/tabs/TabPanel.svelte +20 -20
  179. package/dist/tabs/TabPanel.svelte.d.ts +8 -38
  180. package/dist/tabs/TabPanels.svelte +11 -9
  181. package/dist/tabs/TabPanels.svelte.d.ts +8 -30
  182. package/dist/tabs/context.svelte.d.ts +31 -0
  183. package/dist/tabs/context.svelte.js +134 -0
  184. package/dist/tabs/index.d.ts +5 -5
  185. package/dist/tabs/index.js +4 -4
  186. package/dist/textarea/Textarea.svelte +24 -20
  187. package/dist/textarea/Textarea.svelte.d.ts +18 -30
  188. package/dist/textarea/index.d.ts +1 -1
  189. package/dist/textarea/index.js +1 -1
  190. package/dist/transition/InternalTransitionChild.svelte +36 -22
  191. package/dist/transition/InternalTransitionChild.svelte.d.ts +6 -37
  192. package/dist/transition/Transition.svelte +16 -17
  193. package/dist/transition/Transition.svelte.d.ts +8 -38
  194. package/dist/transition/TransitionChild.svelte +13 -12
  195. package/dist/transition/TransitionChild.svelte.d.ts +11 -38
  196. package/dist/transition/context.svelte.js +11 -11
  197. package/dist/transition/index.d.ts +2 -2
  198. package/dist/transition/index.js +2 -2
  199. package/dist/utils/DisabledProvider.svelte +10 -0
  200. package/dist/utils/DisabledProvider.svelte.d.ts +8 -0
  201. package/dist/utils/ElementOrComponent.svelte +58 -17
  202. package/dist/utils/ElementOrComponent.svelte.d.ts +19 -30
  203. package/dist/utils/StableCollection.svelte.d.ts +4 -18
  204. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +32 -0
  205. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte.d.ts +8 -0
  206. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +94 -0
  207. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte.d.ts +26 -0
  208. package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.d.ts +6 -0
  209. package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.js +158 -0
  210. package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.d.ts +11 -0
  211. package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.js +53 -0
  212. package/dist/utils/floating-ui/svelte/hooks/useId.svelte.d.ts +9 -0
  213. package/dist/utils/floating-ui/svelte/hooks/useId.svelte.js +28 -0
  214. package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.d.ts +23 -0
  215. package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.js +72 -0
  216. package/dist/utils/floating-ui/svelte/index.d.ts +5 -0
  217. package/dist/utils/floating-ui/svelte/index.js +5 -0
  218. package/dist/utils/floating-ui/svelte/inner.svelte.d.ts +83 -0
  219. package/dist/utils/floating-ui/svelte/inner.svelte.js +178 -0
  220. package/dist/utils/floating-ui/svelte/types.d.ts +114 -0
  221. package/dist/utils/floating-ui/svelte/utils/createPubSub.d.ts +5 -0
  222. package/dist/utils/floating-ui/svelte/utils/createPubSub.js +14 -0
  223. package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.d.ts +2 -0
  224. package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.js +13 -0
  225. package/dist/utils/floating-ui/svelte/utils/log.d.ts +2 -0
  226. package/dist/utils/floating-ui/svelte/utils/log.js +19 -0
  227. package/dist/utils/floating-ui/svelte/utils.d.ts +19 -0
  228. package/dist/utils/floating-ui/svelte/utils.js +136 -0
  229. package/dist/utils/floating-ui/svelte-dom/arrow.d.ts +22 -0
  230. package/dist/utils/floating-ui/svelte-dom/arrow.js +29 -0
  231. package/dist/utils/floating-ui/svelte-dom/index.d.ts +2 -0
  232. package/dist/utils/floating-ui/svelte-dom/index.js +2 -0
  233. package/dist/utils/floating-ui/svelte-dom/types.d.ts +80 -0
  234. package/dist/utils/floating-ui/svelte-dom/types.js +3 -0
  235. package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.d.ts +6 -0
  236. package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.js +183 -0
  237. package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.d.ts +1 -0
  238. package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.js +50 -0
  239. package/dist/utils/floating-ui/svelte-dom/utils/getDPR.d.ts +1 -0
  240. package/dist/utils/floating-ui/svelte-dom/utils/getDPR.js +7 -0
  241. package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.d.ts +1 -0
  242. package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.js +5 -0
  243. package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.d.ts +4 -0
  244. package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.js +7 -0
  245. package/dist/utils/id.d.ts +1 -1
  246. package/dist/utils/id.js +1 -1
  247. package/dist/utils/index.d.ts +3 -0
  248. package/dist/utils/index.js +3 -0
  249. package/dist/utils/state.js +4 -4
  250. package/dist/utils/style.d.ts +2 -0
  251. package/dist/utils/style.js +6 -0
  252. package/dist/utils/types.d.ts +13 -19
  253. package/package.json +54 -53
  254. package/dist/combobox/Combobox.svelte +0 -53
  255. package/dist/combobox/Combobox.svelte.d.ts +0 -50
  256. package/dist/dialog/InternalDialog.svelte +0 -294
  257. package/dist/dialog/InternalDialog.svelte.d.ts +0 -42
  258. package/dist/internal/HoistFormFields.svelte +0 -14
  259. package/dist/internal/HoistFormFields.svelte.d.ts +0 -21
  260. package/dist/internal/id.d.ts +0 -8
  261. package/dist/internal/id.js +0 -11
  262. package/dist/listbox/ListboxStates.d.ts +0 -12
  263. package/dist/listbox/ListboxStates.js +0 -15
  264. package/dist/utils/Generic.svelte +0 -56
  265. package/dist/utils/Generic.svelte.d.ts +0 -35
  266. package/dist/utils/alternative-types.d.ts +0 -21
  267. /package/dist/utils/{alternative-types.js → floating-ui/svelte/types.js} +0 -0
@@ -0,0 +1,80 @@
1
+ import type { MutableRefObject } from "../../ref.svelte.js";
2
+ import type { ComputePositionConfig, ComputePositionReturn, VirtualElement } from "@floating-ui/dom";
3
+ export type { ArrowOptions } from "./arrow.js";
4
+ export { arrow } from "./arrow.js";
5
+ export { useFloating } from "./useFloating.svelte.js";
6
+ export type { AlignedPlacement, Alignment, AutoPlacementOptions, AutoUpdateOptions, Axis, Boundary, ClientRectObject, ComputePositionConfig, ComputePositionReturn, Coords, Derivable, DetectOverflowOptions, Dimensions, ElementContext, ElementRects, Elements, FlipOptions, FloatingElement, HideOptions, InlineOptions, Length, Middleware, MiddlewareArguments, MiddlewareData, MiddlewareReturn, MiddlewareState, NodeScroll, OffsetOptions, Padding, Placement, Platform, Rect, ReferenceElement, RootBoundary, ShiftOptions, Side, SideObject, SizeOptions, Strategy, VirtualElement, } from "@floating-ui/dom";
7
+ export { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size, } from "@floating-ui/dom";
8
+ type Prettify<T> = {
9
+ [K in keyof T]: T[K];
10
+ } & {};
11
+ export type UseFloatingData = Prettify<ComputePositionReturn & {
12
+ isPositioned: boolean;
13
+ }>;
14
+ export type ReferenceType = Element | VirtualElement;
15
+ export type UseFloatingReturn<RT extends ReferenceType = ReferenceType> = Prettify<UseFloatingData & {
16
+ /**
17
+ * Update the position of the floating element, re-rendering the component
18
+ * if required.
19
+ */
20
+ update: () => void;
21
+ /**
22
+ * Pre-configured positioning styles to apply to the floating element.
23
+ */
24
+ floatingStyles: string;
25
+ /**
26
+ * Object containing the reference and floating refs and reactive setters.
27
+ */
28
+ refs: {
29
+ /**
30
+ * A React ref to the reference element.
31
+ */
32
+ reference: MutableRefObject<RT | null>;
33
+ /**
34
+ * A React ref to the floating element.
35
+ */
36
+ floating: MutableRefObject<HTMLElement | null>;
37
+ /**
38
+ * A callback to set the reference element (reactive).
39
+ */
40
+ setReference: (node: RT | null | undefined) => void;
41
+ /**
42
+ * A callback to set the floating element (reactive).
43
+ */
44
+ setFloating: (node: HTMLElement | null | undefined) => void;
45
+ };
46
+ /**
47
+ * Object containing the reference and floating elements.
48
+ */
49
+ elements: {
50
+ reference: RT | null;
51
+ floating: HTMLElement | null;
52
+ };
53
+ }>;
54
+ export type UseFloatingOptions<RT extends ReferenceType = ReferenceType> = Prettify<Partial<ComputePositionConfig> & {
55
+ /**
56
+ * A callback invoked when both the reference and floating elements are
57
+ * mounted, and cleaned up when either is unmounted. This is useful for
58
+ * setting up event listeners (e.g. pass `autoUpdate`).
59
+ */
60
+ whileElementsMounted?: (reference: RT, floating: HTMLElement, update: () => void) => () => void;
61
+ /**
62
+ * Object containing the reference and floating elements.
63
+ */
64
+ elements?: {
65
+ reference?: RT | null;
66
+ floating?: HTMLElement | null;
67
+ };
68
+ /**
69
+ * The `open` state of the floating element to synchronize with the
70
+ * `isPositioned` value.
71
+ * @default false
72
+ */
73
+ open?: boolean;
74
+ /**
75
+ * Whether to use `transform` for positioning instead of `top` and `left`
76
+ * (layout) in the `floatingStyles` object.
77
+ * @default false
78
+ */
79
+ transform?: boolean;
80
+ }>;
@@ -0,0 +1,3 @@
1
+ export { arrow } from "./arrow.js";
2
+ export { useFloating } from "./useFloating.svelte.js";
3
+ export { autoPlacement, autoUpdate, computePosition, detectOverflow, flip, getOverflowAncestors, hide, inline, limitShift, offset, platform, shift, size, } from "@floating-ui/dom";
@@ -0,0 +1,6 @@
1
+ import type { ReferenceType, UseFloatingOptions, UseFloatingReturn } from "./types.js";
2
+ /**
3
+ * Provides data to position a floating element.
4
+ * @see https://floating-ui.com/docs/useFloating
5
+ */
6
+ export declare function useFloating<RT extends ReferenceType = ReferenceType>(options?: UseFloatingOptions): UseFloatingReturn<RT>;
@@ -0,0 +1,183 @@
1
+ import { computePosition } from "@floating-ui/dom";
2
+ import { deepEqual } from "./utils/deepEqual.js";
3
+ import { getDPR } from "./utils/getDPR.js";
4
+ import { roundByDPR } from "./utils/roundByDPR.js";
5
+ import { useLatestRef } from "./utils/useLatestRef.js";
6
+ import { tick, untrack } from "svelte";
7
+ import { stylePropsToString } from "../../style.js";
8
+ /**
9
+ * Provides data to position a floating element.
10
+ * @see https://floating-ui.com/docs/useFloating
11
+ */
12
+ export function useFloating(options = {}) {
13
+ const { placement = "bottom", strategy = "absolute", middleware = [], platform, elements: externalElements = {}, transform = true, whileElementsMounted, open, } = $derived(options);
14
+ const { reference: externalReference, floating: externalFloating } = $derived(externalElements);
15
+ let data = $state((() => ({
16
+ x: 0,
17
+ y: 0,
18
+ strategy,
19
+ placement,
20
+ middlewareData: {},
21
+ isPositioned: false,
22
+ }))());
23
+ const setData = (value) => (data = value);
24
+ let latestMiddleware = $state((() => middleware)());
25
+ $effect(() => {
26
+ if (!deepEqual(latestMiddleware, middleware)) {
27
+ latestMiddleware = middleware;
28
+ }
29
+ });
30
+ let _reference = $state(null);
31
+ let _floating = $state(null);
32
+ const setReference = (node) => {
33
+ if ((node ?? null) !== referenceRef.current) {
34
+ referenceRef.current = node ?? null;
35
+ _reference = node ?? null;
36
+ }
37
+ };
38
+ const setFloating = (node) => {
39
+ if ((node ?? null) !== floatingRef.current) {
40
+ floatingRef.current = node ?? null;
41
+ _floating = node ?? null;
42
+ }
43
+ };
44
+ const referenceEl = $derived((externalReference || _reference));
45
+ const floatingEl = $derived(externalFloating || _floating);
46
+ const referenceRef = $state({ current: null });
47
+ const floatingRef = $state({ current: null });
48
+ const dataRef = $state((() => ({ current: data }))());
49
+ const hasWhileElementsMounted = $derived(whileElementsMounted != null);
50
+ const whileElementsMountedRef = useLatestRef({
51
+ get value() {
52
+ return whileElementsMounted;
53
+ },
54
+ });
55
+ const platformRef = useLatestRef({
56
+ get value() {
57
+ return platform;
58
+ },
59
+ });
60
+ const openRef = useLatestRef({
61
+ get value() {
62
+ return open;
63
+ },
64
+ });
65
+ const update = () => {
66
+ if (!referenceRef.current || !floatingRef.current) {
67
+ return;
68
+ }
69
+ const config = {
70
+ placement,
71
+ strategy,
72
+ middleware: latestMiddleware,
73
+ };
74
+ if (platformRef.current) {
75
+ config.platform = platformRef.current;
76
+ }
77
+ computePosition(referenceRef.current, floatingRef.current, config).then(async (data) => {
78
+ const fullData = {
79
+ ...data,
80
+ // The floating element's position may be recomputed while it's closed
81
+ // but still mounted (such as when transitioning out). To ensure
82
+ // `isPositioned` will be `false` initially on the next open, avoid
83
+ // setting it to `true` when `open === false` (must be specified).
84
+ isPositioned: openRef.current !== false,
85
+ };
86
+ if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {
87
+ dataRef.current = fullData;
88
+ setData(fullData);
89
+ await tick();
90
+ }
91
+ });
92
+ };
93
+ $effect(() => {
94
+ open;
95
+ untrack(() => {
96
+ if (open === false && dataRef.current.isPositioned) {
97
+ dataRef.current.isPositioned = false;
98
+ data.isPositioned = false;
99
+ }
100
+ });
101
+ });
102
+ const isMountedRef = $state({ current: false });
103
+ $effect(() => {
104
+ isMountedRef.current = true;
105
+ return () => {
106
+ isMountedRef.current = false;
107
+ };
108
+ });
109
+ $effect(() => {
110
+ hasWhileElementsMounted;
111
+ if (referenceEl)
112
+ referenceRef.current = referenceEl;
113
+ if (floatingEl)
114
+ floatingRef.current = floatingEl;
115
+ if (referenceEl && floatingEl) {
116
+ if (whileElementsMountedRef.current) {
117
+ return whileElementsMountedRef.current(referenceEl, floatingEl, update);
118
+ }
119
+ update();
120
+ }
121
+ }); //, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted])
122
+ const refs = $derived({
123
+ reference: referenceRef,
124
+ floating: floatingRef,
125
+ setReference,
126
+ setFloating,
127
+ });
128
+ const elements = $derived({ reference: referenceEl, floating: floatingEl });
129
+ const floatingStyles = $derived.by(() => {
130
+ const initialStyles = {
131
+ position: strategy,
132
+ left: 0,
133
+ top: 0,
134
+ };
135
+ if (!elements.floating) {
136
+ return stylePropsToString(initialStyles);
137
+ }
138
+ const x = roundByDPR(elements.floating, data.x);
139
+ const y = roundByDPR(elements.floating, data.y);
140
+ if (transform) {
141
+ return stylePropsToString({
142
+ ...initialStyles,
143
+ transform: `translate(${x}px, ${y}px)`,
144
+ ...(getDPR(elements.floating) >= 1.5 && { "will-change": "transform" }),
145
+ });
146
+ }
147
+ return stylePropsToString({
148
+ position: strategy,
149
+ left: x,
150
+ top: y,
151
+ });
152
+ });
153
+ return {
154
+ get placement() {
155
+ return data.placement;
156
+ },
157
+ get strategy() {
158
+ return data.strategy;
159
+ },
160
+ get middlewareData() {
161
+ return data.middlewareData;
162
+ },
163
+ get x() {
164
+ return data.x;
165
+ },
166
+ get y() {
167
+ return data.y;
168
+ },
169
+ get isPositioned() {
170
+ return data.isPositioned;
171
+ },
172
+ update,
173
+ get refs() {
174
+ return refs;
175
+ },
176
+ get elements() {
177
+ return elements;
178
+ },
179
+ get floatingStyles() {
180
+ return floatingStyles;
181
+ },
182
+ };
183
+ }
@@ -0,0 +1 @@
1
+ export declare function deepEqual(a: any, b: any): boolean;
@@ -0,0 +1,50 @@
1
+ // Fork of `fast-deep-equal` that only does the comparisons we need and compares
2
+ // functions
3
+ export function deepEqual(a, b) {
4
+ if (a === b) {
5
+ return true;
6
+ }
7
+ if (typeof a !== typeof b) {
8
+ return false;
9
+ }
10
+ if (typeof a === "function" && a.toString() === b.toString()) {
11
+ return true;
12
+ }
13
+ let length;
14
+ let i;
15
+ let keys;
16
+ if (a && b && typeof a === "object") {
17
+ if (Array.isArray(a)) {
18
+ length = a.length;
19
+ if (length !== b.length)
20
+ return false;
21
+ for (i = length; i-- !== 0;) {
22
+ if (!deepEqual(a[i], b[i])) {
23
+ return false;
24
+ }
25
+ }
26
+ return true;
27
+ }
28
+ keys = Object.keys(a);
29
+ length = keys.length;
30
+ if (length !== Object.keys(b).length) {
31
+ return false;
32
+ }
33
+ for (i = length; i-- !== 0;) {
34
+ if (!{}.hasOwnProperty.call(b, keys[i])) {
35
+ return false;
36
+ }
37
+ }
38
+ for (i = length; i-- !== 0;) {
39
+ const key = keys[i];
40
+ if (key === "_owner" && a.$$typeof) {
41
+ continue;
42
+ }
43
+ if (!deepEqual(a[key], b[key])) {
44
+ return false;
45
+ }
46
+ }
47
+ return true;
48
+ }
49
+ return a !== a && b !== b;
50
+ }
@@ -0,0 +1 @@
1
+ export declare function getDPR(element: Element): number;
@@ -0,0 +1,7 @@
1
+ export function getDPR(element) {
2
+ if (typeof window === "undefined") {
3
+ return 1;
4
+ }
5
+ const win = element.ownerDocument.defaultView || window;
6
+ return win.devicePixelRatio || 1;
7
+ }
@@ -0,0 +1 @@
1
+ export declare function roundByDPR(element: Element, value: number): number;
@@ -0,0 +1,5 @@
1
+ import { getDPR } from "./getDPR.js";
2
+ export function roundByDPR(element, value) {
3
+ const dpr = getDPR(element);
4
+ return Math.round(value * dpr) / dpr;
5
+ }
@@ -0,0 +1,4 @@
1
+ import type { MutableRefObject } from "../../../ref.svelte.js";
2
+ export declare function useLatestRef<T>(options: {
3
+ value: T;
4
+ }): MutableRefObject<T>;
@@ -0,0 +1,7 @@
1
+ export function useLatestRef(options) {
2
+ return {
3
+ get current() {
4
+ return options.value;
5
+ },
6
+ };
7
+ }
@@ -1,4 +1,4 @@
1
1
  export declare const alphaid: (size?: number) => string;
2
2
  export declare const htmlid: (size?: number) => string;
3
- export declare const getIdContext: () => string | undefined;
3
+ export declare const useProvidedId: () => string | undefined;
4
4
  export declare const createIdContext: (id: string) => string | undefined;
package/dist/utils/id.js CHANGED
@@ -2,5 +2,5 @@ import { nanoid, customAlphabet } from "nanoid";
2
2
  import { getContext, setContext } from "svelte";
3
3
  export const alphaid = customAlphabet("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
4
4
  export const htmlid = (size = 10) => alphaid(1) + nanoid(size - 1);
5
- export const getIdContext = () => getContext("Id");
5
+ export const useProvidedId = () => getContext("Id");
6
6
  export const createIdContext = (id) => setContext("Id", id);
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export { mergeProps } from "./render.js";
3
+ export { default as DisabledProvider } from "./DisabledProvider.svelte";
@@ -0,0 +1,3 @@
1
+ export * from "./types.js";
2
+ export { mergeProps } from "./render.js";
3
+ export { default as DisabledProvider } from "./DisabledProvider.svelte";
@@ -1,10 +1,10 @@
1
1
  export const stateFromSlot = (slot = {}) => {
2
2
  if (typeof slot !== "object")
3
3
  return {};
4
- let dataAttributes = {};
4
+ const dataAttributes = {};
5
5
  let exposeState = false;
6
- let states = [];
7
- for (let [k, v] of Object.entries(slot)) {
6
+ const states = [];
7
+ for (const [k, v] of Object.entries(slot)) {
8
8
  if (typeof v === "boolean") {
9
9
  exposeState = true;
10
10
  }
@@ -14,7 +14,7 @@ export const stateFromSlot = (slot = {}) => {
14
14
  }
15
15
  if (!exposeState)
16
16
  return {};
17
- for (let s of states) {
17
+ for (const s of states) {
18
18
  dataAttributes[`data-${s}`] = "";
19
19
  }
20
20
  return {
@@ -0,0 +1,2 @@
1
+ export declare const camelToKebab: (s: string) => string;
2
+ export declare const stylePropsToString: (props: Record<string, unknown>) => string;
@@ -0,0 +1,6 @@
1
+ export const camelToKebab = (s) => s.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);
2
+ export const stylePropsToString = (props) => {
3
+ return Object.entries(props)
4
+ .map(([key, value]) => `${camelToKebab(key)}: ${typeof value === "number" ? `${value}px` : value}`)
5
+ .join(";");
6
+ };
@@ -1,24 +1,18 @@
1
1
  import type { Snippet } from "svelte";
2
- import type { SvelteHTMLElements } from "svelte/elements";
3
- export interface SvelteHTMLProps extends SvelteHTMLElements {
4
- "svelte:fragment": {};
5
- }
6
- export type ElementType = keyof SvelteHTMLProps;
2
+ import type { ClassValue, SvelteHTMLElements } from "svelte/elements";
7
3
  export type Expand<T> = T extends infer O ? {
8
4
  [K in keyof O]: O[K];
9
5
  } : never;
10
- export type PropsOf<TTag extends ElementType> = SvelteHTMLProps[TTag];
11
- export type Children<TSlot> = Snippet | Snippet<[TSlot, Record<string, any>]>;
12
- type PropsWeControl = "as" | "children" | "refName" | "class";
13
- type CleanProps<TTag extends ElementType, TOmittableProps extends PropertyKey = never> = Omit<PropsOf<TTag>, TOmittableProps | PropsWeControl>;
14
- type OurProps<TSlot> = {
15
- children?: Children<TSlot>;
16
- ref?: HTMLElement;
17
- };
18
- type HasProperty<T extends object, K extends PropertyKey> = T extends never ? never : K extends keyof T ? true : never;
19
- type ClassNameOverride<TTag extends ElementType, TSlot = {}> = true extends HasProperty<PropsOf<TTag>, "class"> ? {
20
- class?: PropsOf<TTag>["class"] | ((bag: TSlot) => string);
21
- } : {};
22
- export type Props<TTag extends ElementType, TSlot = {}, TOmittableProps extends PropertyKey = never, Overrides = {}> = CleanProps<TTag, TOmittableProps | keyof Overrides> & OurProps<TSlot> & ClassNameOverride<TTag, TSlot> & Overrides;
6
+ export type Props<TTag extends string | Record<string, any>, TSlot extends Record<string, any> = {}, Overrides = {}> = Omit<TTag extends string ? SvelteHTMLElements[TTag] : TTag, "asChild" | "children" | "class" | keyof Overrides> & {
7
+ asChild?: boolean;
8
+ children?: Snippet<[TSlot & {
9
+ props?: Record<string, any>;
10
+ }]>;
11
+ class?: ClassValue | null | ((bag: TSlot) => string);
12
+ } & Overrides;
13
+ export type PropsAsChild<TSlot extends Record<string, any> = {}, Overrides = {}> = {
14
+ children?: Snippet<[TSlot & {
15
+ props?: Record<string, any>;
16
+ }]>;
17
+ } & Overrides;
23
18
  export type EnsureArray<T> = T extends any[] ? T : Expand<T>[];
24
- export {};
package/package.json CHANGED
@@ -1,6 +1,22 @@
1
1
  {
2
2
  "name": "@pzerelles/headlessui-svelte",
3
- "version": "2.1.2-next.5",
3
+ "version": "2.1.2-next.51",
4
+ "scripts": {
5
+ "dev": "vite dev",
6
+ "build": "vite build && npm run package",
7
+ "preview": "vite preview",
8
+ "package": "svelte-kit sync && svelte-package && publint",
9
+ "package:watch": "svelte-package --watch",
10
+ "prepublishOnly": "bun run package",
11
+ "test": "bun run test:integration && npm run test:unit",
12
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
13
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
14
+ "lint": "prettier --check . && eslint .",
15
+ "format": "prettier --write .",
16
+ "test:integration": "playwright test",
17
+ "test:unit": "vitest",
18
+ "release": "bun run package && changeset publish"
19
+ },
4
20
  "exports": {
5
21
  ".": {
6
22
  "types": "./dist/index.d.ts",
@@ -13,65 +29,50 @@
13
29
  "!dist/**/*.spec.*"
14
30
  ],
15
31
  "peerDependencies": {
16
- "svelte": "^5.0.0-next.242"
32
+ "svelte": "^5.16.0"
17
33
  },
18
34
  "devDependencies": {
19
- "@changesets/cli": "^2.27.7",
20
- "@changesets/types": "^6.0.0",
21
- "@playwright/test": "^1.46.1",
22
- "@pzerelles/heroicons-svelte": "^2.1.5",
23
- "@sveltejs/adapter-auto": "^3.2.4",
24
- "@sveltejs/kit": "^2.5.25",
25
- "@sveltejs/package": "^2.3.4",
26
- "@sveltejs/vite-plugin-svelte": "4.0.0-next.6",
27
- "@testing-library/jest-dom": "^6.5.0",
28
- "@testing-library/svelte": "^5.2.1",
35
+ "@changesets/cli": "^2.28.1",
36
+ "@changesets/types": "^6.1.0",
37
+ "@playwright/test": "^1.51.1",
38
+ "@pzerelles/heroicons-svelte": "^2.2.0",
39
+ "@sveltejs/adapter-auto": "^3.3.1",
40
+ "@sveltejs/kit": "^2.20.1",
41
+ "@sveltejs/package": "^2.3.10",
42
+ "@sveltejs/vite-plugin-svelte": "^5.0.3",
43
+ "@testing-library/jest-dom": "^6.6.3",
44
+ "@testing-library/svelte": "^5.2.7",
29
45
  "@types/eslint": "^9.6.1",
30
- "@types/node": "^20.16.1",
31
- "autoprefixer": "^10.4.20",
32
- "eslint": "^9.9.1",
46
+ "@types/node": "^22.13.10",
47
+ "autoprefixer": "^10.4.21",
48
+ "eslint": "^9.22.0",
33
49
  "eslint-config-prettier": "^9.1.0",
34
- "eslint-plugin-svelte": "^2.43.0",
35
- "globals": "^15.9.0",
36
- "jsdom": "^24.1.3",
50
+ "eslint-plugin-svelte": "^2.46.1",
51
+ "globals": "^16.0.0",
52
+ "jsdom": "^25.0.1",
37
53
  "outdent": "^0.8.0",
38
- "postcss": "^8.4.41",
39
- "prettier": "^3.3.3",
40
- "prettier-plugin-svelte": "^3.2.6",
41
- "prettier-plugin-tailwindcss": "^0.6.6",
42
- "publint": "^0.2.10",
43
- "svelte": "^5.0.0-next.242",
44
- "svelte-check": "^3.8.6",
45
- "tailwindcss": "^3.4.10",
46
- "tslib": "^2.7.0",
47
- "typescript": "^5.5.4",
48
- "typescript-eslint": "^8.3.0",
49
- "vite": "^5.4.2",
50
- "vitest": "^2.0.5"
54
+ "postcss": "^8.5.3",
55
+ "prettier": "^3.5.3",
56
+ "prettier-plugin-svelte": "^3.3.3",
57
+ "prettier-plugin-tailwindcss": "^0.6.11",
58
+ "publint": "^0.3.9",
59
+ "svelte": "^5.23.2",
60
+ "svelte-check": "^4.1.5",
61
+ "tailwindcss": "^3.4.17",
62
+ "tslib": "^2.8.1",
63
+ "typescript": "^5.8.2",
64
+ "typescript-eslint": "^8.26.1",
65
+ "vite": "^6.2.2",
66
+ "vitest": "^3.0.9"
51
67
  },
52
68
  "dependencies": {
53
- "@floating-ui/core": "^1.6.7",
54
- "@floating-ui/dom": "^1.6.10",
55
- "clsx": "^2.1.1",
56
- "esm-env": "^1.0.0",
57
- "nanoid": "^5.0.7"
69
+ "@floating-ui/core": "^1.6.9",
70
+ "@floating-ui/dom": "^1.6.13",
71
+ "@floating-ui/utils": "^0.2.9",
72
+ "esm-env": "^1.2.2",
73
+ "nanoid": "^5.1.5"
58
74
  },
59
75
  "svelte": "./dist/index.js",
60
76
  "types": "./dist/index.d.ts",
61
- "type": "module",
62
- "scripts": {
63
- "dev": "vite dev",
64
- "build": "vite build && npm run package",
65
- "preview": "vite preview",
66
- "package": "svelte-kit sync && svelte-package && publint",
67
- "package:watch": "svelte-package --watch",
68
- "test": "npm run test:integration && npm run test:unit",
69
- "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
70
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
71
- "lint": "prettier --check . && eslint .",
72
- "format": "prettier --write .",
73
- "test:integration": "playwright test",
74
- "test:unit": "vitest",
75
- "release": "pnpm package && changeset publish"
76
- }
77
- }
77
+ "type": "module"
78
+ }
@@ -1,53 +0,0 @@
1
- <script lang="ts" module>
2
- import type { ElementType, EnsureArray, Props } from "../utils/types.js"
3
- import type { ByComparator } from "../hooks/use-by-comparator.js"
4
-
5
- const DEFAULT_COMBOBOX_TAG = "svelte:fragment" as const
6
- type ComboboxRenderPropArg<TValue, TActive = TValue> = {
7
- open: boolean
8
- disabled: boolean
9
- activeIndex: number | null
10
- activeOption: TActive | null
11
- value: TValue
12
- }
13
-
14
- export type CheckboxProps<
15
- TValue,
16
- TMultiple extends boolean | undefined,
17
- TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG,
18
- > = Props<
19
- TTag,
20
- ComboboxRenderPropArg<NoInfer<TValue>>,
21
- "value" | "defaultValue" | "multiple" | "onChange" | "by",
22
- {
23
- value?: TMultiple extends true ? EnsureArray<TValue> : TValue
24
- defaultValue?: TMultiple extends true ? EnsureArray<NoInfer<TValue>> : NoInfer<TValue>
25
-
26
- onChange?(value: TMultiple extends true ? EnsureArray<NoInfer<TValue>> : NoInfer<TValue> | null): void
27
- by?: ByComparator<TMultiple extends true ? EnsureArray<NoInfer<TValue>>[number] : NoInfer<TValue>>
28
-
29
- /** @deprecated The `<Combobox />` is now nullable default */
30
- nullable?: boolean
31
-
32
- multiple?: TMultiple
33
- disabled?: boolean
34
- form?: string
35
- name?: string
36
- immediate?: boolean
37
- virtual?: {
38
- options: NoInfer<TValue>[]
39
- disabled?: (value: NoInfer<TValue>) => boolean
40
- } | null
41
-
42
- onclose?(): void
43
-
44
- __demoMode?: boolean
45
- }
46
- >
47
- </script>
48
-
49
- <script lang="ts" generics="TType, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG">
50
- import { useDisabled } from "../hooks/use-disabled.js"
51
-
52
- const providedDisabled = useDisabled()
53
- </script>