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

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 (284) 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 +95 -63
  6. package/dist/checkbox/Checkbox.svelte.d.ts +43 -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 -17
  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 +325 -0
  40. package/dist/focus-trap/FocusTrap.svelte.d.ts +46 -0
  41. package/dist/focus-trap/FocusTrapFeatures.d.ts +14 -0
  42. package/dist/focus-trap/FocusTrapFeatures.js +15 -0
  43. package/dist/hooks/document-overflow/adjust-scrollbar-padding.d.ts +2 -0
  44. package/dist/hooks/document-overflow/adjust-scrollbar-padding.js +18 -0
  45. package/dist/hooks/document-overflow/handle-ios-locking.d.ts +6 -0
  46. package/dist/hooks/document-overflow/handle-ios-locking.js +134 -0
  47. package/dist/hooks/document-overflow/overflow-store.d.ts +19 -0
  48. package/dist/hooks/document-overflow/overflow-store.js +76 -0
  49. package/dist/hooks/document-overflow/prevent-scroll.d.ts +2 -0
  50. package/dist/hooks/document-overflow/prevent-scroll.js +7 -0
  51. package/dist/hooks/document-overflow/use-document-overflow.svelte.d.ts +7 -0
  52. package/dist/hooks/document-overflow/use-document-overflow.svelte.js +27 -0
  53. package/dist/hooks/use-active-press.svelte.d.ts +14 -0
  54. package/dist/{actions/activePress.svelte.js → hooks/use-active-press.svelte.js} +33 -39
  55. package/dist/hooks/use-by-comparator.d.ts +2 -0
  56. package/dist/hooks/use-by-comparator.js +15 -0
  57. package/dist/hooks/use-controllable.svelte.d.ts +6 -0
  58. package/dist/hooks/use-controllable.svelte.js +34 -0
  59. package/dist/hooks/use-did-element-move.svelte.d.ts +6 -0
  60. package/dist/hooks/use-did-element-move.svelte.js +27 -0
  61. package/dist/hooks/use-disabled.d.ts +3 -0
  62. package/dist/hooks/use-disabled.js +9 -0
  63. package/dist/hooks/use-element-size.svelte.d.ts +7 -0
  64. package/dist/hooks/use-element-size.svelte.js +36 -0
  65. package/dist/hooks/use-escape.svelte.d.ts +5 -0
  66. package/dist/hooks/use-escape.svelte.js +26 -0
  67. package/dist/hooks/use-event-listener.svelte.d.ts +6 -0
  68. package/dist/hooks/use-event-listener.svelte.js +12 -0
  69. package/dist/hooks/use-flags.svelte.d.ts +8 -0
  70. package/dist/hooks/use-flags.svelte.js +18 -0
  71. package/dist/hooks/use-focus-ring.svelte.d.ts +10 -0
  72. package/dist/hooks/use-focus-ring.svelte.js +24 -0
  73. package/dist/hooks/use-hover.svelte.d.ts +26 -0
  74. package/dist/hooks/use-hover.svelte.js +124 -0
  75. package/dist/hooks/use-id.d.ts +1 -0
  76. package/dist/hooks/use-id.js +1 -0
  77. package/dist/hooks/use-inert-others.svelte.d.ts +32 -0
  78. package/dist/hooks/use-inert-others.svelte.js +114 -0
  79. package/dist/hooks/use-is-mounted.svelte.d.ts +3 -0
  80. package/dist/hooks/use-is-mounted.svelte.js +14 -0
  81. package/dist/hooks/use-is-top-layer.svelte.d.ts +29 -0
  82. package/dist/hooks/use-is-top-layer.svelte.js +82 -0
  83. package/dist/hooks/use-is-touch-device.svelte.d.ts +3 -0
  84. package/dist/hooks/use-is-touch-device.svelte.js +20 -0
  85. package/dist/hooks/use-on-disappear.svelte.d.ts +12 -0
  86. package/dist/hooks/use-on-disappear.svelte.js +38 -0
  87. package/dist/hooks/use-outside-click.svelte.d.ts +10 -0
  88. package/dist/hooks/use-outside-click.svelte.js +150 -0
  89. package/dist/hooks/use-reducer.d.ts +4 -0
  90. package/dist/hooks/use-reducer.js +11 -0
  91. package/dist/hooks/use-resolve-button-type.svelte.d.ts +10 -0
  92. package/dist/hooks/use-resolve-button-type.svelte.js +19 -0
  93. package/dist/hooks/use-root-containers.svelte.d.ts +9 -0
  94. package/dist/hooks/use-root-containers.svelte.js +50 -0
  95. package/dist/hooks/use-scroll-lock.svelte.d.ts +5 -0
  96. package/dist/hooks/use-scroll-lock.svelte.js +24 -0
  97. package/dist/hooks/use-sync-refs.d.ts +7 -0
  98. package/dist/hooks/use-sync-refs.js +22 -0
  99. package/dist/hooks/use-tab-direction.svelte.d.ts +7 -0
  100. package/dist/hooks/use-tab-direction.svelte.js +25 -0
  101. package/dist/hooks/use-text-value.svelte.d.ts +3 -0
  102. package/dist/hooks/use-text-value.svelte.js +20 -0
  103. package/dist/hooks/use-tracked-pointer.d.ts +4 -0
  104. package/dist/hooks/use-tracked-pointer.js +26 -0
  105. package/dist/hooks/use-transition.svelte.d.ts +20 -0
  106. package/dist/hooks/use-transition.svelte.js +253 -0
  107. package/dist/hooks/use-tree-walker.svelte.d.ts +8 -0
  108. package/dist/hooks/use-tree-walker.svelte.js +19 -0
  109. package/dist/hooks/use-watch.svelte.d.ts +4 -0
  110. package/dist/hooks/use-watch.svelte.js +16 -0
  111. package/dist/hooks/use-window-event.svelte.d.ts +6 -0
  112. package/dist/hooks/use-window-event.svelte.js +12 -0
  113. package/dist/index.d.ts +14 -0
  114. package/dist/index.js +14 -0
  115. package/dist/input/Input.svelte +59 -0
  116. package/dist/input/Input.svelte.d.ts +50 -0
  117. package/dist/input/index.d.ts +1 -0
  118. package/dist/input/index.js +1 -0
  119. package/dist/internal/FocusSentinel.svelte +45 -0
  120. package/dist/internal/FocusSentinel.svelte.d.ts +20 -0
  121. package/dist/internal/ForcePortalRoot.svelte +6 -0
  122. package/dist/internal/ForcePortalRoot.svelte.d.ts +22 -0
  123. package/dist/internal/FormFields.svelte +2 -4
  124. package/dist/internal/FormFields.svelte.d.ts +9 -7
  125. package/dist/internal/FormResolver.svelte +11 -16
  126. package/dist/internal/FormResolver.svelte.d.ts +6 -4
  127. package/dist/internal/Hidden.svelte +6 -14
  128. package/dist/internal/Hidden.svelte.d.ts +36 -23
  129. package/dist/internal/HiddenFeatures.d.ts +5 -0
  130. package/dist/internal/HiddenFeatures.js +9 -0
  131. package/dist/internal/HoistFormFields.svelte.d.ts +5 -2
  132. package/dist/internal/MainTreeProvider.svelte +45 -0
  133. package/dist/internal/MainTreeProvider.svelte.d.ts +31 -0
  134. package/dist/internal/Portal.svelte.d.ts +5 -2
  135. package/dist/internal/close-provider.d.ts +7 -0
  136. package/dist/internal/close-provider.js +7 -0
  137. package/dist/internal/floating.svelte.d.ts +62 -0
  138. package/dist/internal/floating.svelte.js +488 -0
  139. package/dist/internal/frozen.svelte.d.ts +6 -0
  140. package/dist/internal/frozen.svelte.js +18 -0
  141. package/dist/internal/open-closed.d.ts +14 -0
  142. package/dist/internal/open-closed.js +17 -0
  143. package/dist/internal/portal-force-root.svelte.d.ts +6 -0
  144. package/dist/internal/portal-force-root.svelte.js +11 -0
  145. package/dist/label/Label.svelte +22 -49
  146. package/dist/label/Label.svelte.d.ts +19 -23
  147. package/dist/label/context.svelte.d.ts +17 -0
  148. package/dist/label/context.svelte.js +56 -0
  149. package/dist/legend/Legend.svelte +4 -3
  150. package/dist/legend/Legend.svelte.d.ts +33 -16
  151. package/dist/listbox/Listbox.svelte +434 -0
  152. package/dist/listbox/Listbox.svelte.d.ts +116 -0
  153. package/dist/listbox/ListboxButton.svelte +138 -0
  154. package/dist/listbox/ListboxButton.svelte.d.ts +50 -0
  155. package/dist/listbox/ListboxOption.svelte +135 -0
  156. package/dist/listbox/ListboxOption.svelte.d.ts +50 -0
  157. package/dist/listbox/ListboxOptions.svelte +268 -0
  158. package/dist/listbox/ListboxOptions.svelte.d.ts +55 -0
  159. package/dist/listbox/ListboxSelectedOption.svelte +33 -0
  160. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +40 -0
  161. package/dist/listbox/ListboxStates.d.ts +12 -0
  162. package/dist/listbox/ListboxStates.js +15 -0
  163. package/dist/listbox/index.d.ts +5 -0
  164. package/dist/listbox/index.js +5 -0
  165. package/dist/menu/Menu.svelte +235 -0
  166. package/dist/menu/Menu.svelte.d.ts +42 -0
  167. package/dist/menu/MenuButton.svelte +127 -0
  168. package/dist/menu/MenuButton.svelte.d.ts +52 -0
  169. package/dist/menu/MenuHeading.svelte +19 -0
  170. package/dist/menu/MenuHeading.svelte.d.ts +39 -0
  171. package/dist/menu/MenuItem.svelte +114 -0
  172. package/dist/menu/MenuItem.svelte.d.ts +49 -0
  173. package/dist/menu/MenuItems.svelte +244 -0
  174. package/dist/menu/MenuItems.svelte.d.ts +55 -0
  175. package/dist/menu/MenuSection.svelte +14 -0
  176. package/dist/menu/MenuSection.svelte.d.ts +35 -0
  177. package/dist/menu/MenuSeparator.svelte +9 -0
  178. package/dist/menu/MenuSeparator.svelte.d.ts +35 -0
  179. package/dist/menu/context.svelte.d.ts +47 -0
  180. package/dist/menu/context.svelte.js +21 -0
  181. package/dist/menu/index.d.ts +7 -0
  182. package/dist/menu/index.js +7 -0
  183. package/dist/portal/InternalPortal.svelte +97 -0
  184. package/dist/portal/InternalPortal.svelte.d.ts +43 -0
  185. package/dist/portal/Portal.svelte +7 -0
  186. package/dist/portal/Portal.svelte.d.ts +23 -0
  187. package/dist/portal/PortalGroup.svelte +14 -0
  188. package/dist/portal/PortalGroup.svelte.d.ts +40 -0
  189. package/dist/switch/Switch.svelte +153 -0
  190. package/dist/switch/Switch.svelte.d.ts +61 -0
  191. package/dist/switch/SwitchGroup.svelte +37 -0
  192. package/dist/switch/SwitchGroup.svelte.d.ts +34 -0
  193. package/dist/switch/index.d.ts +2 -0
  194. package/dist/switch/index.js +2 -0
  195. package/dist/tabs/Tab.svelte +156 -0
  196. package/dist/tabs/Tab.svelte.d.ts +48 -0
  197. package/dist/tabs/TabGroup.svelte +241 -0
  198. package/dist/tabs/TabGroup.svelte.d.ts +67 -0
  199. package/dist/tabs/TabList.svelte +16 -0
  200. package/dist/tabs/TabList.svelte.d.ts +35 -0
  201. package/dist/tabs/TabPanel.svelte +61 -0
  202. package/dist/tabs/TabPanel.svelte.d.ts +47 -0
  203. package/dist/tabs/TabPanels.svelte +12 -0
  204. package/dist/tabs/TabPanels.svelte.d.ts +34 -0
  205. package/dist/tabs/index.d.ts +5 -0
  206. package/dist/tabs/index.js +5 -0
  207. package/dist/test-utils/accessability-assertions.d.ts +271 -0
  208. package/dist/test-utils/accessability-assertions.js +1572 -0
  209. package/dist/test-utils/fake-pointer.d.ts +24 -0
  210. package/dist/test-utils/fake-pointer.js +48 -0
  211. package/dist/test-utils/interactions.d.ts +61 -0
  212. package/dist/test-utils/interactions.js +453 -0
  213. package/dist/test-utils/suppress-console-logs.d.ts +7 -0
  214. package/dist/test-utils/suppress-console-logs.js +17 -0
  215. package/dist/textarea/Textarea.svelte +67 -0
  216. package/dist/textarea/Textarea.svelte.d.ts +50 -0
  217. package/dist/textarea/index.d.ts +1 -0
  218. package/dist/textarea/index.js +1 -0
  219. package/dist/transition/InternalTransitionChild.svelte +178 -0
  220. package/dist/transition/InternalTransitionChild.svelte.d.ts +55 -0
  221. package/dist/transition/Transition.svelte +89 -0
  222. package/dist/transition/Transition.svelte.d.ts +42 -0
  223. package/dist/transition/TransitionChild.svelte +16 -0
  224. package/dist/transition/TransitionChild.svelte.d.ts +44 -0
  225. package/dist/transition/context.svelte.d.ts +64 -0
  226. package/dist/transition/context.svelte.js +120 -0
  227. package/dist/transition/index.d.ts +2 -0
  228. package/dist/transition/index.js +2 -0
  229. package/dist/utils/ElementOrComponent.svelte +26 -0
  230. package/dist/utils/ElementOrComponent.svelte.d.ts +56 -0
  231. package/dist/utils/Generic.svelte +44 -0
  232. package/dist/utils/Generic.svelte.d.ts +35 -0
  233. package/dist/utils/StableCollection.svelte +43 -0
  234. package/dist/utils/StableCollection.svelte.d.ts +22 -0
  235. package/dist/utils/active-element-history.d.ts +1 -0
  236. package/dist/utils/active-element-history.js +35 -0
  237. package/dist/utils/alternative-types.d.ts +21 -0
  238. package/dist/utils/alternative-types.js +1 -0
  239. package/dist/utils/calculate-active-index.d.ts +25 -0
  240. package/dist/utils/calculate-active-index.js +74 -0
  241. package/dist/utils/class-names.d.ts +1 -0
  242. package/dist/utils/class-names.js +10 -0
  243. package/dist/utils/default-map.d.ts +5 -0
  244. package/dist/utils/default-map.js +15 -0
  245. package/dist/utils/disposables.d.ts +14 -12
  246. package/dist/utils/disposables.js +13 -10
  247. package/dist/utils/dom.d.ts +0 -2
  248. package/dist/utils/dom.js +2 -4
  249. package/dist/utils/env.d.ts +17 -0
  250. package/dist/utils/env.js +39 -0
  251. package/dist/utils/focus-management.d.ts +45 -0
  252. package/dist/utils/focus-management.js +242 -0
  253. package/dist/utils/focusVisible.svelte.d.ts +3 -3
  254. package/dist/utils/focusVisible.svelte.js +52 -41
  255. package/dist/utils/get-text-value.d.ts +1 -0
  256. package/dist/utils/get-text-value.js +71 -0
  257. package/dist/utils/id.d.ts +2 -2
  258. package/dist/utils/id.js +1 -1
  259. package/dist/utils/match.d.ts +1 -0
  260. package/dist/utils/match.js +13 -0
  261. package/dist/utils/on-document-ready.d.ts +1 -0
  262. package/dist/utils/on-document-ready.js +12 -0
  263. package/dist/utils/once.d.ts +1 -0
  264. package/dist/utils/once.js +9 -0
  265. package/dist/utils/owner.d.ts +1 -0
  266. package/dist/utils/owner.js +8 -0
  267. package/dist/utils/platform.d.ts +2 -0
  268. package/dist/utils/platform.js +17 -0
  269. package/dist/utils/ref.svelte.d.ts +4 -0
  270. package/dist/utils/ref.svelte.js +4 -0
  271. package/dist/utils/render.d.ts +34 -0
  272. package/dist/utils/render.js +119 -0
  273. package/dist/utils/state.d.ts +7 -1
  274. package/dist/utils/state.js +10 -6
  275. package/dist/utils/store.d.ts +11 -0
  276. package/dist/utils/store.js +20 -0
  277. package/dist/utils/types.d.ts +24 -0
  278. package/dist/utils/types.js +1 -0
  279. package/package.json +37 -29
  280. package/dist/actions/activePress.svelte.d.ts +0 -8
  281. package/dist/actions/focusRing.svelte.d.ts +0 -9
  282. package/dist/actions/focusRing.svelte.js +0 -34
  283. package/dist/utils/disabled.d.ts +0 -3
  284. package/dist/utils/disabled.js +0 -2
@@ -0,0 +1,4 @@
1
+ export type MutableRefObject<T> = {
2
+ current: T;
3
+ };
4
+ export declare const useRef: <T>(current: T) => MutableRefObject<T>;
@@ -0,0 +1,4 @@
1
+ export const useRef = (current) => {
2
+ const ref = $state({ current });
3
+ return ref;
4
+ };
@@ -0,0 +1,34 @@
1
+ import type { Props } from "./types.js";
2
+ export declare enum RenderFeatures {
3
+ /** No features at all */
4
+ None = 0,
5
+ /**
6
+ * When used, this will allow us to use one of the render strategies.
7
+ *
8
+ * **The render strategies are:**
9
+ * - **Unmount** _(Will unmount the component.)_
10
+ * - **Hidden** _(Will hide the component using the [hidden] attribute.)_
11
+ */
12
+ RenderStrategy = 1,
13
+ /**
14
+ * When used, this will allow the user of our component to be in control. This can be used when
15
+ * you want to transition based on some state.
16
+ */
17
+ Static = 2
18
+ }
19
+ export declare enum RenderStrategy {
20
+ Unmount = 0,
21
+ Hidden = 1
22
+ }
23
+ type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never;
24
+ type PropsForFeature<TPassedInFeatures extends RenderFeatures, TForFeature extends RenderFeatures, TProps> = TPassedInFeatures extends TForFeature ? TProps : {};
25
+ export type PropsForFeatures<T extends RenderFeatures> = Expand<UnionToIntersection<PropsForFeature<T, RenderFeatures.Static, {
26
+ static?: boolean;
27
+ }> | PropsForFeature<T, RenderFeatures.RenderStrategy, {
28
+ unmount?: boolean;
29
+ }>>>;
30
+ export declare function mergeProps<T extends Props<any, any>[]>(...listOfProps: T): Props<any, any>;
31
+ export declare function mergePropsAdvanced(...listOfProps: Props<any, any>[]): Props<any, any>;
32
+ export declare function compact<T extends Record<any, any>>(object: T): {} & T;
33
+ export declare function omit<T extends Record<any, any>>(object: T, keysToOmit?: string[]): T;
34
+ export {};
@@ -0,0 +1,119 @@
1
+ export var RenderFeatures;
2
+ (function (RenderFeatures) {
3
+ /** No features at all */
4
+ RenderFeatures[RenderFeatures["None"] = 0] = "None";
5
+ /**
6
+ * When used, this will allow us to use one of the render strategies.
7
+ *
8
+ * **The render strategies are:**
9
+ * - **Unmount** _(Will unmount the component.)_
10
+ * - **Hidden** _(Will hide the component using the [hidden] attribute.)_
11
+ */
12
+ RenderFeatures[RenderFeatures["RenderStrategy"] = 1] = "RenderStrategy";
13
+ /**
14
+ * When used, this will allow the user of our component to be in control. This can be used when
15
+ * you want to transition based on some state.
16
+ */
17
+ RenderFeatures[RenderFeatures["Static"] = 2] = "Static";
18
+ })(RenderFeatures || (RenderFeatures = {}));
19
+ export var RenderStrategy;
20
+ (function (RenderStrategy) {
21
+ RenderStrategy[RenderStrategy["Unmount"] = 0] = "Unmount";
22
+ RenderStrategy[RenderStrategy["Hidden"] = 1] = "Hidden";
23
+ })(RenderStrategy || (RenderStrategy = {}));
24
+ export function mergeProps(...listOfProps) {
25
+ if (listOfProps.length === 0)
26
+ return {};
27
+ if (listOfProps.length === 1)
28
+ return listOfProps[0];
29
+ let target = {};
30
+ let eventHandlers = {};
31
+ for (let props of listOfProps) {
32
+ for (let prop in props) {
33
+ // Merge event listeners
34
+ if (prop.startsWith("on") && typeof props[prop] === "function") {
35
+ eventHandlers[prop] ??= [];
36
+ eventHandlers[prop].push(props[prop]);
37
+ }
38
+ else {
39
+ // Override incoming prop
40
+ target[prop] = props[prop];
41
+ }
42
+ }
43
+ }
44
+ // Merge event handlers
45
+ for (let eventName in eventHandlers) {
46
+ Object.assign(target, {
47
+ [eventName](...args) {
48
+ let handlers = eventHandlers[eventName];
49
+ for (let handler of handlers) {
50
+ handler?.(...args);
51
+ }
52
+ },
53
+ });
54
+ }
55
+ return target;
56
+ }
57
+ // A more complex example fo the `mergeProps` function, this one also cancels subsequent event
58
+ // listeners if the event has already been `preventDefault`ed.
59
+ export function mergePropsAdvanced(...listOfProps) {
60
+ if (listOfProps.length === 0)
61
+ return {};
62
+ if (listOfProps.length === 1)
63
+ return listOfProps[0];
64
+ let target = {};
65
+ let eventHandlers = {};
66
+ for (let props of listOfProps) {
67
+ for (let prop in props) {
68
+ // Collect event handlers
69
+ if (prop.startsWith("on") && typeof props[prop] === "function") {
70
+ eventHandlers[prop] ??= [];
71
+ eventHandlers[prop].push(props[prop]);
72
+ }
73
+ else {
74
+ // Override incoming prop
75
+ target[prop] = props[prop];
76
+ }
77
+ }
78
+ }
79
+ // Ensure event listeners are not called if `disabled` or `aria-disabled` is true
80
+ if (target.disabled || target["aria-disabled"]) {
81
+ for (let eventName in eventHandlers) {
82
+ // Prevent default events for `onclick`, `onmousedown`, `onkeydown`, etc.
83
+ if (/^(on(?:click|pointer|mouse|key)(?:down|up|press)?)$/.test(eventName)) {
84
+ eventHandlers[eventName] = [(e) => e?.preventDefault?.()];
85
+ }
86
+ }
87
+ }
88
+ // Merge event handlers
89
+ for (let eventName in eventHandlers) {
90
+ Object.assign(target, {
91
+ [eventName](event, ...args) {
92
+ let handlers = eventHandlers[eventName];
93
+ for (let handler of handlers) {
94
+ if ((event instanceof Event || event?.nativeEvent instanceof Event) && event.defaultPrevented) {
95
+ return;
96
+ }
97
+ handler(event, ...args);
98
+ }
99
+ },
100
+ });
101
+ }
102
+ return target;
103
+ }
104
+ export function compact(object) {
105
+ let clone = Object.assign({}, object);
106
+ for (let key in clone) {
107
+ if (clone[key] === undefined)
108
+ delete clone[key];
109
+ }
110
+ return clone;
111
+ }
112
+ export function omit(object, keysToOmit = []) {
113
+ let clone = Object.assign({}, object);
114
+ for (let key of keysToOmit) {
115
+ if (key in clone)
116
+ delete clone[key];
117
+ }
118
+ return clone;
119
+ }
@@ -1 +1,7 @@
1
- export declare const stateFromSlot: <TSlot extends Record<string, any>>(slot?: TSlot) => Record<string, string>;
1
+ export type SlotStateProps<TSlot> = {
2
+ [Property in keyof TSlot as TSlot[Property] extends boolean ? `data-${string & Property}` : never]?: string;
3
+ };
4
+ export type StateProps<TSlot> = SlotStateProps<TSlot> & {
5
+ "data-headlessui-state"?: string;
6
+ };
7
+ export declare const stateFromSlot: <TSlot>(slot?: TSlot) => StateProps<TSlot>;
@@ -1,4 +1,6 @@
1
1
  export const stateFromSlot = (slot = {}) => {
2
+ if (typeof slot !== "object")
3
+ return {};
2
4
  let dataAttributes = {};
3
5
  let exposeState = false;
4
6
  let states = [];
@@ -10,11 +12,13 @@ export const stateFromSlot = (slot = {}) => {
10
12
  states.push(k.replace(/([A-Z])/g, (m) => `-${m.toLowerCase()}`));
11
13
  }
12
14
  }
13
- if (exposeState) {
14
- dataAttributes["data-headlessui-state"] = states.join(" ");
15
- for (let s of states) {
16
- dataAttributes[`data-${s}`] = "";
17
- }
15
+ if (!exposeState)
16
+ return {};
17
+ for (let s of states) {
18
+ dataAttributes[`data-${s}`] = "";
18
19
  }
19
- return dataAttributes;
20
+ return {
21
+ "data-headlessui-state": states.join(" "),
22
+ ...dataAttributes,
23
+ };
20
24
  };
@@ -0,0 +1,11 @@
1
+ type ChangeFn = () => void;
2
+ type UnsubscribeFn = () => void;
3
+ type ActionFn<T> = (this: T, ...args: any[]) => T | void;
4
+ type StoreActions<Key extends string, T> = Record<Key, ActionFn<T>>;
5
+ export interface Store<T, ActionKey extends string> {
6
+ getSnapshot(): T;
7
+ subscribe(onChange: ChangeFn): UnsubscribeFn;
8
+ dispatch(action: ActionKey, ...args: any[]): void;
9
+ }
10
+ export declare function createStore<T, ActionKey extends string>(initial: () => T, actions: StoreActions<ActionKey, T>): Store<T, ActionKey>;
11
+ export {};
@@ -0,0 +1,20 @@
1
+ export function createStore(initial, actions) {
2
+ let state = initial();
3
+ let listeners = new Set();
4
+ return {
5
+ getSnapshot() {
6
+ return state;
7
+ },
8
+ subscribe(onChange) {
9
+ listeners.add(onChange);
10
+ return () => listeners.delete(onChange);
11
+ },
12
+ dispatch(key, ...args) {
13
+ let newState = actions[key].call(state, ...args);
14
+ if (newState) {
15
+ state = newState;
16
+ listeners.forEach((listener) => listener());
17
+ }
18
+ },
19
+ };
20
+ }
@@ -0,0 +1,24 @@
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;
7
+ export type Expand<T> = T extends infer O ? {
8
+ [K in keyof O]: O[K];
9
+ } : 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;
23
+ export type EnsureArray<T> = T extends any[] ? T : Expand<T>[];
24
+ export {};
@@ -0,0 +1 @@
1
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pzerelles/headlessui-svelte",
3
- "version": "2.0.0-next.1",
3
+ "version": "2.1.2-next.10",
4
4
  "exports": {
5
5
  ".": {
6
6
  "types": "./dist/index.d.ts",
@@ -13,41 +13,48 @@
13
13
  "!dist/**/*.spec.*"
14
14
  ],
15
15
  "peerDependencies": {
16
- "svelte": "^5.0.0-next.1"
16
+ "svelte": "^5.0.0-next.244"
17
17
  },
18
18
  "devDependencies": {
19
- "@changesets/cli": "^2.27.5",
19
+ "@changesets/cli": "^2.27.8",
20
20
  "@changesets/types": "^6.0.0",
21
- "@playwright/test": "^1.44.1",
22
- "@sveltejs/adapter-auto": "^3.2.1",
23
- "@sveltejs/kit": "^2.5.10",
24
- "@sveltejs/package": "^2.3.1",
25
- "@sveltejs/vite-plugin-svelte": "^3.1.1",
26
- "@types/eslint": "^8.56.10",
27
- "@types/node": "^20.14.2",
28
- "autoprefixer": "^10.4.19",
29
- "eslint": "^9.4.0",
21
+ "@playwright/test": "^1.47.0",
22
+ "@pzerelles/heroicons-svelte": "^2.1.5",
23
+ "@sveltejs/adapter-auto": "^3.2.4",
24
+ "@sveltejs/kit": "^2.5.26",
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",
29
+ "@types/eslint": "^9.6.1",
30
+ "@types/node": "^20.16.5",
31
+ "autoprefixer": "^10.4.20",
32
+ "eslint": "^9.10.0",
30
33
  "eslint-config-prettier": "^9.1.0",
31
- "eslint-plugin-svelte": "^2.39.0",
32
- "globals": "^15.3.0",
34
+ "eslint-plugin-svelte": "^2.43.0",
35
+ "globals": "^15.9.0",
36
+ "jsdom": "^24.1.3",
33
37
  "outdent": "^0.8.0",
34
- "postcss": "^8.4.38",
35
- "prettier": "^3.3.1",
36
- "prettier-plugin-svelte": "^3.2.3",
37
- "prettier-plugin-tailwindcss": "^0.5.14",
38
- "publint": "^0.1.16",
39
- "svelte": "5.0.0-next.150",
40
- "svelte-check": "^3.8.0",
41
- "tailwindcss": "^3.4.4",
42
- "tslib": "^2.6.3",
43
- "typescript": "^5.4.5",
44
- "typescript-eslint": "8.0.0-alpha.28",
45
- "vite": "^5.2.12",
46
- "vitest": "^1.6.0"
38
+ "postcss": "^8.4.45",
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.244",
44
+ "svelte-check": "^3.8.6",
45
+ "tailwindcss": "^3.4.10",
46
+ "tslib": "^2.7.0",
47
+ "typescript": "^5.6.2",
48
+ "typescript-eslint": "^8.5.0",
49
+ "vite": "^5.4.4",
50
+ "vitest": "^2.0.5"
47
51
  },
48
52
  "dependencies": {
49
- "nanoid": "^5.0.7",
50
- "svelte-interactions": "^0.2.0"
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"
51
58
  },
52
59
  "svelte": "./dist/index.js",
53
60
  "types": "./dist/index.d.ts",
@@ -57,6 +64,7 @@
57
64
  "build": "vite build && npm run package",
58
65
  "preview": "vite preview",
59
66
  "package": "svelte-kit sync && svelte-package && publint",
67
+ "package:watch": "svelte-package --watch",
60
68
  "test": "npm run test:integration && npm run test:unit",
61
69
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
62
70
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
@@ -1,8 +0,0 @@
1
- /// <reference types="svelte" />
2
- import type { Action } from "svelte/action";
3
- export declare const createActivePress: ({ disabled }: {
4
- disabled?: boolean;
5
- }) => {
6
- activePressAction: Action<HTMLElement, undefined, Record<never, any>>;
7
- readonly pressed: boolean;
8
- };
@@ -1,9 +0,0 @@
1
- /// <reference types="svelte" />
2
- import type { Action } from "svelte/action";
3
- export declare const createFocusRing: ({ autoFocus, within }?: {
4
- autoFocus?: boolean;
5
- within?: boolean;
6
- }) => {
7
- focusRingAction: Action<HTMLElement, undefined, Record<never, any>>;
8
- readonly focusVisible: boolean;
9
- };
@@ -1,34 +0,0 @@
1
- import { isFocusVisible, useFocusVisibleListener } from "../utils/focusVisible.svelte.js";
2
- export const createFocusRing = ({ autoFocus = false, within } = {}) => {
3
- let focused = $state(false);
4
- let focusVisible = $state(autoFocus || isFocusVisible());
5
- useFocusVisibleListener((isFocusVisible) => {
6
- focusVisible = isFocusVisible;
7
- });
8
- const focusRingAction = (node) => {
9
- const handleFocus = (e) => {
10
- focused = true;
11
- };
12
- const handleBlur = (e) => {
13
- focused = false;
14
- };
15
- if (!within) {
16
- node.addEventListener("focus", handleFocus);
17
- node.addEventListener("blur", handleBlur);
18
- }
19
- return {
20
- destroy: () => {
21
- if (!within) {
22
- node.removeEventListener("focus", handleFocus);
23
- node.removeEventListener("blur", handleBlur);
24
- }
25
- },
26
- };
27
- };
28
- return {
29
- focusRingAction,
30
- get focusVisible() {
31
- return focusVisible && focused;
32
- },
33
- };
34
- };
@@ -1,3 +0,0 @@
1
- export declare const getDisabledContext: () => {
2
- readonly disabled: boolean;
3
- } | undefined;
@@ -1,2 +0,0 @@
1
- import { getContext } from "svelte";
2
- export const getDisabledContext = () => getContext("Disabled");