@pzerelles/headlessui-svelte 2.1.1-next.1 → 2.1.2-next.11

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 (238) hide show
  1. package/dist/button/Button.svelte +6 -10
  2. package/dist/button/Button.svelte.d.ts +34 -26
  3. package/dist/checkbox/Checkbox.svelte +43 -25
  4. package/dist/checkbox/Checkbox.svelte.d.ts +42 -28
  5. package/dist/close-button/CloseButton.svelte +5 -4
  6. package/dist/close-button/CloseButton.svelte.d.ts +36 -13
  7. package/dist/combobox/Combobox.svelte +2 -2
  8. package/dist/combobox/Combobox.svelte.d.ts +9 -9
  9. package/dist/data-interactive/DataInteractive.svelte +41 -0
  10. package/dist/data-interactive/DataInteractive.svelte.d.ts +39 -0
  11. package/dist/data-interactive/index.d.ts +1 -0
  12. package/dist/data-interactive/index.js +1 -0
  13. package/dist/description/Description.svelte +10 -53
  14. package/dist/description/Description.svelte.d.ts +15 -32
  15. package/dist/description/context.svelte.d.ts +17 -0
  16. package/dist/description/context.svelte.js +51 -0
  17. package/dist/dialog/Dialog.svelte +51 -0
  18. package/dist/dialog/Dialog.svelte.d.ts +60 -0
  19. package/dist/dialog/DialogBackdrop.svelte +39 -0
  20. package/dist/dialog/DialogBackdrop.svelte.d.ts +38 -0
  21. package/dist/dialog/DialogPanel.svelte +46 -0
  22. package/dist/dialog/DialogPanel.svelte.d.ts +40 -0
  23. package/dist/dialog/DialogTitle.svelte +29 -0
  24. package/dist/dialog/DialogTitle.svelte.d.ts +34 -0
  25. package/dist/dialog/InternalDialog.svelte +233 -0
  26. package/dist/dialog/InternalDialog.svelte.d.ts +42 -0
  27. package/dist/dialog/context.svelte.d.ts +15 -0
  28. package/dist/dialog/context.svelte.js +16 -0
  29. package/dist/dialog/index.d.ts +4 -0
  30. package/dist/dialog/index.js +4 -0
  31. package/dist/field/Field.svelte +8 -11
  32. package/dist/field/Field.svelte.d.ts +21 -17
  33. package/dist/fieldset/Fieldset.svelte +11 -9
  34. package/dist/fieldset/Fieldset.svelte.d.ts +21 -17
  35. package/dist/focus-trap/FocusTrap.svelte +325 -0
  36. package/dist/focus-trap/FocusTrap.svelte.d.ts +46 -0
  37. package/dist/focus-trap/FocusTrapFeatures.d.ts +14 -0
  38. package/dist/focus-trap/FocusTrapFeatures.js +15 -0
  39. package/dist/hooks/use-controllable.svelte.d.ts +1 -1
  40. package/dist/hooks/use-controllable.svelte.js +3 -3
  41. package/dist/hooks/use-did-element-move.svelte.js +5 -10
  42. package/dist/hooks/use-escape.svelte.d.ts +5 -0
  43. package/dist/hooks/use-escape.svelte.js +26 -0
  44. package/dist/hooks/use-event-listener.svelte.d.ts +6 -0
  45. package/dist/hooks/use-event-listener.svelte.js +12 -0
  46. package/dist/hooks/use-inert-others.svelte.d.ts +2 -2
  47. package/dist/hooks/use-inert-others.svelte.js +3 -3
  48. package/dist/hooks/use-is-mounted.svelte.d.ts +3 -0
  49. package/dist/hooks/use-is-mounted.svelte.js +14 -0
  50. package/dist/hooks/use-is-touch-device.svelte.d.ts +3 -0
  51. package/dist/hooks/use-is-touch-device.svelte.js +20 -0
  52. package/dist/hooks/use-root-containers.svelte.d.ts +9 -0
  53. package/dist/hooks/use-root-containers.svelte.js +50 -0
  54. package/dist/hooks/use-tab-direction.svelte.d.ts +7 -0
  55. package/dist/hooks/use-tab-direction.svelte.js +25 -0
  56. package/dist/hooks/use-transition.svelte.js +14 -13
  57. package/dist/hooks/use-tree-walker.svelte.d.ts +8 -0
  58. package/dist/hooks/use-tree-walker.svelte.js +19 -0
  59. package/dist/hooks/use-watch.svelte.d.ts +4 -0
  60. package/dist/hooks/use-watch.svelte.js +16 -0
  61. package/dist/hooks/use-window-event.svelte.d.ts +6 -0
  62. package/dist/hooks/use-window-event.svelte.js +12 -0
  63. package/dist/index.d.ts +10 -0
  64. package/dist/index.js +10 -0
  65. package/dist/input/Input.svelte +59 -0
  66. package/dist/input/Input.svelte.d.ts +50 -0
  67. package/dist/input/index.d.ts +1 -0
  68. package/dist/input/index.js +1 -0
  69. package/dist/internal/FloatingProvider.svelte +12 -0
  70. package/dist/internal/FloatingProvider.svelte.d.ts +22 -0
  71. package/dist/internal/FocusSentinel.svelte.d.ts +4 -1
  72. package/dist/internal/ForcePortalRoot.svelte +6 -0
  73. package/dist/internal/ForcePortalRoot.svelte.d.ts +22 -0
  74. package/dist/internal/FormFields.svelte.d.ts +4 -1
  75. package/dist/internal/FormResolver.svelte.d.ts +4 -1
  76. package/dist/internal/Hidden.svelte +6 -14
  77. package/dist/internal/Hidden.svelte.d.ts +19 -15
  78. package/dist/internal/HiddenFeatures.d.ts +5 -0
  79. package/dist/internal/HiddenFeatures.js +9 -0
  80. package/dist/internal/HoistFormFields.svelte.d.ts +4 -1
  81. package/dist/internal/MainTreeProvider.svelte +45 -0
  82. package/dist/internal/MainTreeProvider.svelte.d.ts +31 -0
  83. package/dist/internal/Portal.svelte.d.ts +4 -1
  84. package/dist/internal/close-provider.d.ts +7 -0
  85. package/dist/internal/close-provider.js +7 -0
  86. package/dist/internal/floating-provider.svelte.d.ts +3 -0
  87. package/dist/internal/floating-provider.svelte.js +206 -0
  88. package/dist/internal/floating.svelte.d.ts +50 -20
  89. package/dist/internal/floating.svelte.js +100 -271
  90. package/dist/internal/inner.svelte.d.ts +91 -0
  91. package/dist/internal/inner.svelte.js +202 -0
  92. package/dist/internal/open-closed.d.ts +1 -1
  93. package/dist/internal/open-closed.js +1 -1
  94. package/dist/label/Label.svelte +17 -65
  95. package/dist/label/Label.svelte.d.ts +19 -32
  96. package/dist/label/context.svelte.d.ts +17 -0
  97. package/dist/label/context.svelte.js +56 -0
  98. package/dist/legend/Legend.svelte +4 -3
  99. package/dist/legend/Legend.svelte.d.ts +33 -15
  100. package/dist/listbox/Listbox.svelte +40 -74
  101. package/dist/listbox/Listbox.svelte.d.ts +30 -72
  102. package/dist/listbox/ListboxButton.svelte +16 -18
  103. package/dist/listbox/ListboxButton.svelte.d.ts +16 -7
  104. package/dist/listbox/ListboxOption.svelte +10 -10
  105. package/dist/listbox/ListboxOption.svelte.d.ts +22 -11
  106. package/dist/listbox/ListboxOptions.svelte +62 -60
  107. package/dist/listbox/ListboxOptions.svelte.d.ts +23 -7
  108. package/dist/listbox/ListboxSelectedOption.svelte +15 -7
  109. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +24 -14
  110. package/dist/listbox/context.svelte.d.ts +75 -0
  111. package/dist/listbox/context.svelte.js +36 -0
  112. package/dist/menu/Menu.svelte +235 -0
  113. package/dist/menu/Menu.svelte.d.ts +42 -0
  114. package/dist/menu/MenuButton.svelte +129 -0
  115. package/dist/menu/MenuButton.svelte.d.ts +52 -0
  116. package/dist/menu/MenuHeading.svelte +19 -0
  117. package/dist/menu/MenuHeading.svelte.d.ts +39 -0
  118. package/dist/menu/MenuItem.svelte +114 -0
  119. package/dist/menu/MenuItem.svelte.d.ts +49 -0
  120. package/dist/menu/MenuItems.svelte +248 -0
  121. package/dist/menu/MenuItems.svelte.d.ts +55 -0
  122. package/dist/menu/MenuSection.svelte +14 -0
  123. package/dist/menu/MenuSection.svelte.d.ts +35 -0
  124. package/dist/menu/MenuSeparator.svelte +9 -0
  125. package/dist/menu/MenuSeparator.svelte.d.ts +35 -0
  126. package/dist/menu/context.svelte.d.ts +47 -0
  127. package/dist/menu/context.svelte.js +21 -0
  128. package/dist/menu/index.d.ts +7 -0
  129. package/dist/menu/index.js +7 -0
  130. package/dist/portal/InternalPortal.svelte +22 -33
  131. package/dist/portal/InternalPortal.svelte.d.ts +16 -7
  132. package/dist/portal/Portal.svelte +4 -8
  133. package/dist/portal/Portal.svelte.d.ts +6 -6
  134. package/dist/portal/PortalGroup.svelte +5 -6
  135. package/dist/portal/PortalGroup.svelte.d.ts +16 -7
  136. package/dist/switch/Switch.svelte +41 -37
  137. package/dist/switch/Switch.svelte.d.ts +24 -7
  138. package/dist/switch/SwitchGroup.svelte +7 -8
  139. package/dist/switch/SwitchGroup.svelte.d.ts +14 -7
  140. package/dist/tabs/Tab.svelte +9 -14
  141. package/dist/tabs/Tab.svelte.d.ts +18 -6
  142. package/dist/tabs/TabGroup.svelte +20 -23
  143. package/dist/tabs/TabGroup.svelte.d.ts +19 -6
  144. package/dist/tabs/TabList.svelte +5 -7
  145. package/dist/tabs/TabList.svelte.d.ts +13 -6
  146. package/dist/tabs/TabPanel.svelte +30 -32
  147. package/dist/tabs/TabPanel.svelte.d.ts +19 -6
  148. package/dist/tabs/TabPanels.svelte +5 -6
  149. package/dist/tabs/TabPanels.svelte.d.ts +13 -6
  150. package/dist/textarea/Textarea.svelte +67 -0
  151. package/dist/textarea/Textarea.svelte.d.ts +50 -0
  152. package/dist/textarea/index.d.ts +1 -0
  153. package/dist/textarea/index.js +1 -0
  154. package/dist/transition/InternalTransitionChild.svelte +178 -0
  155. package/dist/transition/InternalTransitionChild.svelte.d.ts +55 -0
  156. package/dist/transition/Transition.svelte +89 -0
  157. package/dist/transition/Transition.svelte.d.ts +42 -0
  158. package/dist/transition/TransitionChild.svelte +16 -0
  159. package/dist/transition/TransitionChild.svelte.d.ts +44 -0
  160. package/dist/transition/context.svelte.d.ts +64 -0
  161. package/dist/transition/context.svelte.js +120 -0
  162. package/dist/transition/index.d.ts +2 -0
  163. package/dist/transition/index.js +2 -0
  164. package/dist/utils/ElementOrComponent.svelte +26 -0
  165. package/dist/utils/ElementOrComponent.svelte.d.ts +56 -0
  166. package/dist/utils/Generic.svelte +44 -0
  167. package/dist/utils/Generic.svelte.d.ts +35 -0
  168. package/dist/utils/StableCollection.svelte +1 -1
  169. package/dist/utils/StableCollection.svelte.d.ts +4 -1
  170. package/dist/utils/active-element-history.d.ts +1 -0
  171. package/dist/utils/active-element-history.js +35 -0
  172. package/dist/utils/alternative-types.d.ts +21 -0
  173. package/dist/utils/alternative-types.js +1 -0
  174. package/dist/utils/class-names.d.ts +1 -0
  175. package/dist/utils/class-names.js +10 -0
  176. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +17 -0
  177. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte.d.ts +23 -0
  178. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +50 -0
  179. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte.d.ts +41 -0
  180. package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.d.ts +6 -0
  181. package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.js +158 -0
  182. package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.d.ts +11 -0
  183. package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.js +53 -0
  184. package/dist/utils/floating-ui/svelte/hooks/useId.svelte.d.ts +9 -0
  185. package/dist/utils/floating-ui/svelte/hooks/useId.svelte.js +28 -0
  186. package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.d.ts +23 -0
  187. package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.js +72 -0
  188. package/dist/utils/floating-ui/svelte/index.d.ts +5 -0
  189. package/dist/utils/floating-ui/svelte/index.js +5 -0
  190. package/dist/utils/floating-ui/svelte/inner.svelte.d.ts +83 -0
  191. package/dist/utils/floating-ui/svelte/inner.svelte.js +178 -0
  192. package/dist/utils/floating-ui/svelte/types.d.ts +114 -0
  193. package/dist/utils/floating-ui/svelte/types.js +1 -0
  194. package/dist/utils/floating-ui/svelte/utils/createPubSub.d.ts +5 -0
  195. package/dist/utils/floating-ui/svelte/utils/createPubSub.js +14 -0
  196. package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.d.ts +2 -0
  197. package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.js +13 -0
  198. package/dist/utils/floating-ui/svelte/utils/log.d.ts +2 -0
  199. package/dist/utils/floating-ui/svelte/utils/log.js +19 -0
  200. package/dist/utils/floating-ui/svelte/utils.d.ts +19 -0
  201. package/dist/utils/floating-ui/svelte/utils.js +136 -0
  202. package/dist/utils/floating-ui/svelte-dom/arrow.d.ts +22 -0
  203. package/dist/utils/floating-ui/svelte-dom/arrow.js +29 -0
  204. package/dist/utils/floating-ui/svelte-dom/index.d.ts +2 -0
  205. package/dist/utils/floating-ui/svelte-dom/index.js +2 -0
  206. package/dist/utils/floating-ui/svelte-dom/types.d.ts +80 -0
  207. package/dist/utils/floating-ui/svelte-dom/types.js +3 -0
  208. package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.d.ts +6 -0
  209. package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.js +183 -0
  210. package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.d.ts +1 -0
  211. package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.js +50 -0
  212. package/dist/utils/floating-ui/svelte-dom/utils/getDPR.d.ts +1 -0
  213. package/dist/utils/floating-ui/svelte-dom/utils/getDPR.js +7 -0
  214. package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.d.ts +1 -0
  215. package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.js +5 -0
  216. package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.d.ts +4 -0
  217. package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.js +7 -0
  218. package/dist/utils/focus-management.d.ts +2 -1
  219. package/dist/utils/focus-management.js +13 -13
  220. package/dist/utils/id.d.ts +1 -1
  221. package/dist/utils/id.js +1 -1
  222. package/dist/utils/on-document-ready.d.ts +1 -0
  223. package/dist/utils/on-document-ready.js +12 -0
  224. package/dist/utils/render.d.ts +3 -0
  225. package/dist/utils/render.js +63 -0
  226. package/dist/utils/state.d.ts +7 -1
  227. package/dist/utils/state.js +10 -6
  228. package/dist/utils/style.d.ts +2 -0
  229. package/dist/utils/style.js +6 -0
  230. package/dist/utils/types.d.ts +14 -17
  231. package/dist/utils/types.js +0 -5
  232. package/package.json +33 -31
  233. package/dist/internal/id.d.ts +0 -8
  234. package/dist/internal/id.js +0 -11
  235. package/dist/tabs/Button.svelte +0 -65
  236. package/dist/tabs/Button.svelte.d.ts +0 -39
  237. package/dist/utils/close.d.ts +0 -2
  238. package/dist/utils/close.js +0 -3
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 @@
1
+ export declare function onDocumentReady(cb: () => void): void;
@@ -0,0 +1,12 @@
1
+ export function onDocumentReady(cb) {
2
+ function check() {
3
+ if (document.readyState === "loading")
4
+ return;
5
+ cb();
6
+ document.removeEventListener("DOMContentLoaded", check);
7
+ }
8
+ if (typeof window !== "undefined" && typeof document !== "undefined") {
9
+ document.addEventListener("DOMContentLoaded", check);
10
+ check();
11
+ }
12
+ }
@@ -28,4 +28,7 @@ export type PropsForFeatures<T extends RenderFeatures> = Expand<UnionToIntersect
28
28
  unmount?: boolean;
29
29
  }>>>;
30
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;
31
34
  export {};
@@ -54,3 +54,66 @@ export function mergeProps(...listOfProps) {
54
54
  }
55
55
  return target;
56
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,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,27 +1,24 @@
1
1
  import type { Snippet } from "svelte";
2
- import type { HTMLAttributes, SvelteHTMLElements } from "svelte/elements";
3
- declare const __: "1D45E01E-AF44-47C4-988A-19A94EBAF55C";
4
- export type __ = typeof __;
5
- export type ElementType = keyof SvelteHTMLElements;
6
- export type HTMLElementType<T extends keyof SvelteHTMLElements> = SvelteHTMLElements[T] extends HTMLAttributes<infer U> ? (U extends HTMLElement ? U : never) : never;
2
+ import type { SvelteHTMLElements } from "svelte/elements";
3
+ export interface SvelteHTMLProps extends SvelteHTMLElements {
4
+ "svelte:fragment": {};
5
+ }
6
+ export type ElementType = keyof SvelteHTMLProps;
7
7
  export type Expand<T> = T extends infer O ? {
8
8
  [K in keyof O]: O[K];
9
9
  } : never;
10
- export type PropsOf<TTag extends keyof SvelteHTMLElements> = TTag extends keyof SvelteHTMLElements ? SvelteHTMLElements[TTag] : never;
11
- type PropsWeControl = "as" | "children" | "class";
12
- type CleanProps<TTag extends keyof SvelteHTMLElements, TOmittableProps extends PropertyKey = never> = Omit<SvelteHTMLElements[TTag], TOmittableProps | PropsWeControl>;
13
- type OurProps<TTag extends keyof SvelteHTMLElements, TSlot> = {
14
- as?: TTag;
15
- children?: Snippet<[TSlot]>;
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;
16
17
  };
17
18
  type HasProperty<T extends object, K extends PropertyKey> = T extends never ? never : K extends keyof T ? true : never;
18
- type ClassNameOverride<TTag extends keyof SvelteHTMLElements, TSlot = {}> = true extends HasProperty<PropsOf<TTag>, "class"> ? {
19
+ type ClassNameOverride<TTag extends ElementType, TSlot = {}> = true extends HasProperty<PropsOf<TTag>, "class"> ? {
19
20
  class?: PropsOf<TTag>["class"] | ((bag: TSlot) => string);
20
21
  } : {};
21
- export type Props<TTag extends keyof SvelteHTMLElements, TSlot = {}, TOmittableProps extends PropertyKey = never, Overrides = {}> = CleanProps<TTag, TOmittableProps | keyof Overrides> & OurProps<TTag, TSlot> & ClassNameOverride<TTag, TSlot> & Overrides;
22
- type Without<T, U> = {
23
- [P in Exclude<keyof T, keyof U>]?: never;
24
- };
25
- export type XOR<T, U> = T | U extends __ ? never : T extends __ ? U : U extends __ ? T : T | U extends object ? (Without<T, U> & U) | (Without<U, T> & T) : T | U;
22
+ export type Props<TTag extends ElementType, TSlot = {}, TOmittableProps extends PropertyKey = never, Overrides = {}> = CleanProps<TTag, TOmittableProps | keyof Overrides> & OurProps<TSlot> & ClassNameOverride<TTag, TSlot> & Overrides;
26
23
  export type EnsureArray<T> = T extends any[] ? T : Expand<T>[];
27
24
  export {};
@@ -1,6 +1 @@
1
- /* eslint-disable @typescript-eslint/no-empty-object-type */
2
- // A unique placeholder we can use as a default. This is nice because we can use this instead of
3
- // defaulting to null / never / ... and possibly collide with actual data.
4
- // Ideally we use a unique symbol here.
5
- const __ = "1D45E01E-AF44-47C4-988A-19A94EBAF55C";
6
1
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pzerelles/headlessui-svelte",
3
- "version": "2.1.1-next.1",
3
+ "version": "2.1.2-next.11",
4
4
  "exports": {
5
5
  ".": {
6
6
  "types": "./dist/index.d.ts",
@@ -13,45 +13,47 @@
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.7",
19
+ "@changesets/cli": "^2.27.8",
20
20
  "@changesets/types": "^6.0.0",
21
- "@playwright/test": "^1.45.2",
21
+ "@playwright/test": "^1.47.0",
22
22
  "@pzerelles/heroicons-svelte": "^2.1.5",
23
- "@sveltejs/adapter-auto": "^3.2.2",
24
- "@sveltejs/kit": "^2.5.18",
25
- "@sveltejs/package": "^2.3.2",
26
- "@sveltejs/vite-plugin-svelte": "^3.1.1",
27
- "@testing-library/jest-dom": "^6.4.6",
28
- "@testing-library/svelte": "^5.2.0",
29
- "@types/eslint": "^8.56.10",
30
- "@types/node": "^20.14.10",
31
- "autoprefixer": "^10.4.19",
32
- "clsx": "^2.1.1",
33
- "eslint": "^9.7.0",
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",
34
33
  "eslint-config-prettier": "^9.1.0",
35
- "eslint-plugin-svelte": "^2.42.0",
36
- "globals": "^15.8.0",
37
- "jsdom": "^24.1.0",
34
+ "eslint-plugin-svelte": "^2.43.0",
35
+ "globals": "^15.9.0",
36
+ "jsdom": "^24.1.3",
38
37
  "outdent": "^0.8.0",
39
- "postcss": "^8.4.39",
38
+ "postcss": "^8.4.45",
40
39
  "prettier": "^3.3.3",
41
- "prettier-plugin-svelte": "^3.2.5",
42
- "prettier-plugin-tailwindcss": "^0.5.14",
43
- "publint": "^0.1.16",
44
- "svelte": "5.0.0-next.184",
45
- "svelte-check": "^3.8.4",
46
- "tailwindcss": "^3.4.5",
47
- "tslib": "^2.6.3",
48
- "typescript": "^5.5.3",
49
- "typescript-eslint": "8.0.0-alpha.28",
50
- "vite": "^5.3.4",
51
- "vitest": "^2.0.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.11",
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"
52
51
  },
53
52
  "dependencies": {
54
- "@skeletonlabs/floating-ui-svelte": "^0.3.1",
53
+ "@floating-ui/core": "^1.6.7",
54
+ "@floating-ui/dom": "^1.6.10",
55
+ "@floating-ui/utils": "^0.2.7",
56
+ "clsx": "^2.1.1",
55
57
  "esm-env": "^1.0.0",
56
58
  "nanoid": "^5.0.7"
57
59
  },
@@ -1,8 +0,0 @@
1
- type IdContext = {
2
- value?: string;
3
- };
4
- export declare function useProvidedId(): IdContext;
5
- export declare function useIdContext(options: {
6
- id?: string;
7
- }): void;
8
- export {};
@@ -1,11 +0,0 @@
1
- import { getContext, setContext } from "svelte";
2
- export function useProvidedId() {
3
- return getContext("IdContext");
4
- }
5
- export function useIdContext(options) {
6
- setContext("IdContext", {
7
- get value() {
8
- return options.id;
9
- },
10
- });
11
- }
@@ -1,65 +0,0 @@
1
- <script lang="ts" context="module">const DEFAULT_BUTTON_TAG = "button";
2
- </script>
3
-
4
- <script lang="ts" generics="TTag extends keyof SvelteHTMLElements, TType">import { useActivePress } from "../hooks/use-active-press.svelte.js";
5
- import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
6
- import { useDisabled } from "../hooks/use-disabled.js";
7
- import { stateFromSlot } from "../utils/state.js";
8
- import { useHover } from "../hooks/use-hover.svelte.js";
9
- import { mergeProps } from "../utils/render.js";
10
- const providedDisabled = useDisabled();
11
- let {
12
- as,
13
- disabled: ownDisabled = false,
14
- autofocus = false,
15
- type = "button",
16
- children,
17
- ...theirProps
18
- } = $props();
19
- const disabled = $derived(providedDisabled.value || ownDisabled);
20
- const { isHovered: hover, hoverProps } = $derived(
21
- useHover({
22
- get disabled() {
23
- return disabled;
24
- }
25
- })
26
- );
27
- const { pressed: active, pressProps } = $derived(
28
- useActivePress({
29
- get disabled() {
30
- return disabled;
31
- }
32
- })
33
- );
34
- const { isFocusVisible: focus, focusProps } = $derived(
35
- useFocusRing({
36
- get autofocus() {
37
- return autofocus;
38
- }
39
- })
40
- );
41
- const slot = $derived({
42
- disabled,
43
- hover,
44
- focus,
45
- active,
46
- autofocus
47
- });
48
- const ownProps = $derived(
49
- mergeProps(
50
- {
51
- type,
52
- disabled: disabled || void 0,
53
- autofocus
54
- },
55
- focusProps,
56
- hoverProps,
57
- pressProps,
58
- stateFromSlot(slot)
59
- )
60
- );
61
- </script>
62
-
63
- <svelte:element this={as ?? DEFAULT_BUTTON_TAG} {...ownProps} {...theirProps}>
64
- {#if children}{@render children(slot)}{/if}
65
- </svelte:element>
@@ -1,39 +0,0 @@
1
- import type { SvelteHTMLElements } from "svelte/elements";
2
- export type ButtonProps<TTag extends keyof SvelteHTMLElements = typeof DEFAULT_BUTTON_TAG> = SvelteHTMLElements[TTag] & {
3
- as?: TTag;
4
- disabled?: boolean;
5
- autofocus?: boolean;
6
- type?: "button" | "submit" | "reset";
7
- children?: Snippet<[
8
- {
9
- disabled: boolean;
10
- hover: boolean;
11
- focus: boolean;
12
- active: boolean;
13
- autofocus: boolean;
14
- }
15
- ]>;
16
- };
17
- declare const DEFAULT_BUTTON_TAG: "button";
18
- import type { Snippet } from "svelte";
19
- declare class __sveltets_Render<TTag extends keyof SvelteHTMLElements, TType> {
20
- props(): ButtonProps<TTag>;
21
- events(): {} & {
22
- [evt: string]: CustomEvent<any>;
23
- };
24
- slots(): {};
25
- bindings(): "";
26
- exports(): {};
27
- }
28
- interface $$IsomorphicComponent {
29
- new <TTag extends keyof SvelteHTMLElements, TType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag, TType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag, TType>['props']>, ReturnType<__sveltets_Render<TTag, TType>['events']>, ReturnType<__sveltets_Render<TTag, TType>['slots']>> & {
30
- $$bindings?: ReturnType<__sveltets_Render<TTag, TType>['bindings']>;
31
- } & ReturnType<__sveltets_Render<TTag, TType>['exports']>;
32
- <TTag extends keyof SvelteHTMLElements, TType>(internal: unknown, props: ReturnType<__sveltets_Render<TTag, TType>['props']> & {
33
- $$events?: ReturnType<__sveltets_Render<TTag, TType>['events']>;
34
- }): ReturnType<__sveltets_Render<TTag, TType>['exports']>;
35
- z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
36
- }
37
- declare const Button: $$IsomorphicComponent;
38
- type Button<TTag extends keyof SvelteHTMLElements, TType> = InstanceType<typeof Button<TTag, TType>>;
39
- export default Button;
@@ -1,2 +0,0 @@
1
- export declare const createCloseContext: (close: () => void) => () => void;
2
- export declare const getCloseContext: () => (() => void) | undefined;
@@ -1,3 +0,0 @@
1
- import { getContext, setContext } from "svelte";
2
- export const createCloseContext = (close) => setContext("Close", close);
3
- export const getCloseContext = () => getContext("Close");