@pzerelles/headlessui-svelte 2.1.2-next.6 → 2.1.2-next.60

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 (270) 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 +25 -30
  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 +30 -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/InternalDialog.svelte +38 -34
  30. package/dist/dialog/InternalDialog.svelte.d.ts +3 -41
  31. package/dist/dialog/context.svelte.js +2 -2
  32. package/dist/dialog/index.d.ts +4 -4
  33. package/dist/dialog/index.js +4 -4
  34. package/dist/disclosure/Disclosure.svelte +61 -0
  35. package/dist/disclosure/Disclosure.svelte.d.ts +14 -0
  36. package/dist/disclosure/DisclosureButton.svelte +191 -0
  37. package/dist/disclosure/DisclosureButton.svelte.d.ts +19 -0
  38. package/dist/disclosure/DisclosurePanel.svelte +99 -0
  39. package/dist/disclosure/DisclosurePanel.svelte.d.ts +16 -0
  40. package/dist/disclosure/context.svelte.d.ts +32 -0
  41. package/dist/disclosure/context.svelte.js +94 -0
  42. package/dist/disclosure/index.d.ts +3 -0
  43. package/dist/disclosure/index.js +3 -0
  44. package/dist/field/Field.svelte +27 -26
  45. package/dist/field/Field.svelte.d.ts +7 -34
  46. package/dist/field/index.d.ts +1 -1
  47. package/dist/fieldset/Fieldset.svelte +21 -20
  48. package/dist/fieldset/Fieldset.svelte.d.ts +8 -35
  49. package/dist/fieldset/index.d.ts +1 -1
  50. package/dist/focus-trap/FocusTrap.svelte +29 -36
  51. package/dist/focus-trap/FocusTrap.svelte.d.ts +8 -38
  52. package/dist/hooks/use-controllable.svelte.js +3 -2
  53. package/dist/hooks/use-did-element-move.svelte.js +5 -10
  54. package/dist/hooks/use-disabled.d.ts +6 -1
  55. package/dist/hooks/use-disabled.js +10 -5
  56. package/dist/hooks/use-element-size.svelte.js +1 -1
  57. package/dist/hooks/use-event-listener.svelte.d.ts +1 -1
  58. package/dist/hooks/use-event-listener.svelte.js +3 -1
  59. package/dist/hooks/use-focus-ring.svelte.js +1 -1
  60. package/dist/hooks/use-inert-others.svelte.js +10 -10
  61. package/dist/hooks/use-is-top-layer.svelte.js +2 -2
  62. package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
  63. package/dist/hooks/use-root-containers.svelte.d.ts +2 -2
  64. package/dist/hooks/use-root-containers.svelte.js +7 -6
  65. package/dist/hooks/use-tab-direction.svelte.js +1 -1
  66. package/dist/hooks/use-transition.svelte.d.ts +1 -0
  67. package/dist/hooks/use-transition.svelte.js +32 -7
  68. package/dist/index.d.ts +11 -2
  69. package/dist/index.js +11 -2
  70. package/dist/input/Input.svelte +28 -21
  71. package/dist/input/Input.svelte.d.ts +16 -33
  72. package/dist/input/index.d.ts +1 -1
  73. package/dist/input/index.js +1 -1
  74. package/dist/internal/FloatingProvider.svelte +17 -0
  75. package/dist/internal/FloatingProvider.svelte.d.ts +8 -0
  76. package/dist/internal/FocusSentinel.svelte +33 -32
  77. package/dist/internal/FocusSentinel.svelte.d.ts +4 -18
  78. package/dist/internal/ForcePortalRoot.svelte.d.ts +4 -18
  79. package/dist/internal/FormFields.svelte +18 -13
  80. package/dist/internal/FormFields.svelte.d.ts +4 -18
  81. package/dist/internal/FormFieldsProvider.svelte +17 -0
  82. package/dist/internal/FormFieldsProvider.svelte.d.ts +7 -0
  83. package/dist/internal/FormResolver.svelte +6 -2
  84. package/dist/internal/FormResolver.svelte.d.ts +4 -18
  85. package/dist/internal/Hidden.svelte +10 -10
  86. package/dist/internal/Hidden.svelte.d.ts +6 -33
  87. package/dist/internal/MainTreeProvider.svelte +2 -2
  88. package/dist/internal/MainTreeProvider.svelte.d.ts +4 -18
  89. package/dist/internal/Portal.svelte.d.ts +4 -18
  90. package/dist/internal/floating-provider.svelte.d.ts +3 -0
  91. package/dist/internal/floating-provider.svelte.js +206 -0
  92. package/dist/internal/floating.svelte.d.ts +47 -23
  93. package/dist/internal/floating.svelte.js +90 -272
  94. package/dist/internal/form-fields.svelte.d.ts +10 -0
  95. package/dist/internal/form-fields.svelte.js +23 -0
  96. package/dist/internal/frozen.svelte.js +1 -1
  97. package/dist/label/Label.svelte +15 -11
  98. package/dist/label/Label.svelte.d.ts +8 -33
  99. package/dist/label/context.svelte.js +1 -1
  100. package/dist/label/index.d.ts +1 -1
  101. package/dist/legend/Legend.svelte +22 -15
  102. package/dist/legend/Legend.svelte.d.ts +10 -34
  103. package/dist/listbox/Listbox.svelte +79 -151
  104. package/dist/listbox/Listbox.svelte.d.ts +16 -91
  105. package/dist/listbox/ListboxButton.svelte +31 -29
  106. package/dist/listbox/ListboxButton.svelte.d.ts +8 -38
  107. package/dist/listbox/ListboxOption.svelte +40 -27
  108. package/dist/listbox/ListboxOption.svelte.d.ts +16 -32
  109. package/dist/listbox/ListboxOptions.svelte +126 -72
  110. package/dist/listbox/ListboxOptions.svelte.d.ts +8 -43
  111. package/dist/listbox/ListboxSelectedOption.svelte +24 -26
  112. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +14 -39
  113. package/dist/listbox/context.svelte.d.ts +76 -0
  114. package/dist/listbox/context.svelte.js +36 -0
  115. package/dist/listbox/index.d.ts +5 -5
  116. package/dist/listbox/index.js +4 -4
  117. package/dist/menu/Menu.svelte +22 -266
  118. package/dist/menu/Menu.svelte.d.ts +7 -37
  119. package/dist/menu/MenuButton.svelte +29 -24
  120. package/dist/menu/MenuButton.svelte.d.ts +8 -39
  121. package/dist/menu/MenuHeading.svelte +12 -16
  122. package/dist/menu/MenuHeading.svelte.d.ts +7 -36
  123. package/dist/menu/MenuItem.svelte +18 -23
  124. package/dist/menu/MenuItem.svelte.d.ts +9 -39
  125. package/dist/menu/MenuItems.svelte +33 -34
  126. package/dist/menu/MenuItems.svelte.d.ts +8 -43
  127. package/dist/menu/MenuSection.svelte +9 -12
  128. package/dist/menu/MenuSection.svelte.d.ts +7 -33
  129. package/dist/menu/MenuSeparator.svelte +9 -12
  130. package/dist/menu/MenuSeparator.svelte.d.ts +7 -33
  131. package/dist/menu/context.svelte.d.ts +2 -1
  132. package/dist/menu/context.svelte.js +212 -2
  133. package/dist/menu/index.d.ts +7 -7
  134. package/dist/menu/index.js +3 -3
  135. package/dist/popover/Popover.svelte +231 -0
  136. package/dist/popover/Popover.svelte.d.ts +15 -0
  137. package/dist/popover/PopoverBackdrop.svelte +83 -0
  138. package/dist/popover/PopoverBackdrop.svelte.d.ts +17 -0
  139. package/dist/popover/PopoverButton.svelte +324 -0
  140. package/dist/popover/PopoverButton.svelte.d.ts +21 -0
  141. package/dist/popover/PopoverGroup.svelte +66 -0
  142. package/dist/popover/PopoverGroup.svelte.d.ts +9 -0
  143. package/dist/popover/PopoverPanel.svelte +359 -0
  144. package/dist/popover/PopoverPanel.svelte.d.ts +22 -0
  145. package/dist/popover/context.svelte.d.ts +51 -0
  146. package/dist/popover/context.svelte.js +108 -0
  147. package/dist/popover/index.d.ts +5 -0
  148. package/dist/popover/index.js +5 -0
  149. package/dist/portal/InternalPortal.svelte +18 -19
  150. package/dist/portal/InternalPortal.svelte.d.ts +7 -34
  151. package/dist/portal/Portal.svelte +7 -6
  152. package/dist/portal/Portal.svelte.d.ts +3 -22
  153. package/dist/portal/PortalGroup.svelte +6 -14
  154. package/dist/portal/PortalGroup.svelte.d.ts +5 -34
  155. package/dist/portal/PortalWrapper.svelte +10 -0
  156. package/dist/portal/PortalWrapper.svelte.d.ts +9 -0
  157. package/dist/radio-group/Radio.svelte +142 -0
  158. package/dist/radio-group/Radio.svelte.d.ts +35 -0
  159. package/dist/radio-group/RadioGroup.svelte +222 -0
  160. package/dist/radio-group/RadioGroup.svelte.d.ts +34 -0
  161. package/dist/radio-group/RadioOption.svelte +145 -0
  162. package/dist/radio-group/RadioOption.svelte.d.ts +37 -0
  163. package/dist/radio-group/contest.svelte.d.ts +30 -0
  164. package/dist/radio-group/contest.svelte.js +40 -0
  165. package/dist/radio-group/index.d.ts +3 -0
  166. package/dist/radio-group/index.js +3 -0
  167. package/dist/select/Select.svelte +112 -0
  168. package/dist/select/Select.svelte.d.ts +21 -0
  169. package/dist/select/index.d.ts +1 -0
  170. package/dist/select/index.js +1 -0
  171. package/dist/switch/Switch.svelte +27 -28
  172. package/dist/switch/Switch.svelte.d.ts +9 -42
  173. package/dist/switch/SwitchGroup.svelte +5 -5
  174. package/dist/switch/SwitchGroup.svelte.d.ts +8 -30
  175. package/dist/switch/index.d.ts +1 -1
  176. package/dist/switch/index.js +1 -1
  177. package/dist/tabs/Tab.svelte +28 -31
  178. package/dist/tabs/Tab.svelte.d.ts +8 -36
  179. package/dist/tabs/TabGroup.svelte +42 -264
  180. package/dist/tabs/TabGroup.svelte.d.ts +7 -57
  181. package/dist/tabs/TabList.svelte +13 -16
  182. package/dist/tabs/TabList.svelte.d.ts +8 -31
  183. package/dist/tabs/TabPanel.svelte +20 -20
  184. package/dist/tabs/TabPanel.svelte.d.ts +8 -38
  185. package/dist/tabs/TabPanels.svelte +11 -9
  186. package/dist/tabs/TabPanels.svelte.d.ts +8 -30
  187. package/dist/tabs/context.svelte.d.ts +31 -0
  188. package/dist/tabs/context.svelte.js +134 -0
  189. package/dist/tabs/index.d.ts +5 -5
  190. package/dist/tabs/index.js +4 -4
  191. package/dist/textarea/Textarea.svelte +24 -20
  192. package/dist/textarea/Textarea.svelte.d.ts +17 -29
  193. package/dist/textarea/index.d.ts +1 -1
  194. package/dist/textarea/index.js +1 -1
  195. package/dist/transition/InternalTransitionChild.svelte +36 -22
  196. package/dist/transition/InternalTransitionChild.svelte.d.ts +6 -37
  197. package/dist/transition/Transition.svelte +16 -17
  198. package/dist/transition/Transition.svelte.d.ts +8 -38
  199. package/dist/transition/TransitionChild.svelte +13 -12
  200. package/dist/transition/TransitionChild.svelte.d.ts +11 -38
  201. package/dist/transition/context.svelte.js +11 -11
  202. package/dist/transition/index.d.ts +2 -2
  203. package/dist/transition/index.js +2 -2
  204. package/dist/utils/DisabledProvider.svelte +10 -0
  205. package/dist/utils/DisabledProvider.svelte.d.ts +8 -0
  206. package/dist/utils/ElementOrComponent.svelte +58 -17
  207. package/dist/utils/ElementOrComponent.svelte.d.ts +19 -30
  208. package/dist/utils/StableCollection.svelte.d.ts +4 -18
  209. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +32 -0
  210. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte.d.ts +8 -0
  211. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +94 -0
  212. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte.d.ts +26 -0
  213. package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.d.ts +6 -0
  214. package/dist/utils/floating-ui/svelte/hooks/useFloating.svelte.js +158 -0
  215. package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.d.ts +11 -0
  216. package/dist/utils/floating-ui/svelte/hooks/useFloatingRootContext.svelte.js +53 -0
  217. package/dist/utils/floating-ui/svelte/hooks/useId.svelte.d.ts +9 -0
  218. package/dist/utils/floating-ui/svelte/hooks/useId.svelte.js +28 -0
  219. package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.d.ts +23 -0
  220. package/dist/utils/floating-ui/svelte/hooks/useInteractions.svelte.js +72 -0
  221. package/dist/utils/floating-ui/svelte/index.d.ts +5 -0
  222. package/dist/utils/floating-ui/svelte/index.js +5 -0
  223. package/dist/utils/floating-ui/svelte/inner.svelte.d.ts +83 -0
  224. package/dist/utils/floating-ui/svelte/inner.svelte.js +178 -0
  225. package/dist/utils/floating-ui/svelte/types.d.ts +114 -0
  226. package/dist/utils/floating-ui/svelte/utils/createPubSub.d.ts +5 -0
  227. package/dist/utils/floating-ui/svelte/utils/createPubSub.js +14 -0
  228. package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.d.ts +2 -0
  229. package/dist/utils/floating-ui/svelte/utils/getFloatingFocusElement.js +13 -0
  230. package/dist/utils/floating-ui/svelte/utils/log.d.ts +2 -0
  231. package/dist/utils/floating-ui/svelte/utils/log.js +19 -0
  232. package/dist/utils/floating-ui/svelte/utils.d.ts +19 -0
  233. package/dist/utils/floating-ui/svelte/utils.js +136 -0
  234. package/dist/utils/floating-ui/svelte-dom/arrow.d.ts +22 -0
  235. package/dist/utils/floating-ui/svelte-dom/arrow.js +29 -0
  236. package/dist/utils/floating-ui/svelte-dom/index.d.ts +2 -0
  237. package/dist/utils/floating-ui/svelte-dom/index.js +2 -0
  238. package/dist/utils/floating-ui/svelte-dom/types.d.ts +80 -0
  239. package/dist/utils/floating-ui/svelte-dom/types.js +3 -0
  240. package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.d.ts +6 -0
  241. package/dist/utils/floating-ui/svelte-dom/useFloating.svelte.js +183 -0
  242. package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.d.ts +1 -0
  243. package/dist/utils/floating-ui/svelte-dom/utils/deepEqual.js +50 -0
  244. package/dist/utils/floating-ui/svelte-dom/utils/getDPR.d.ts +1 -0
  245. package/dist/utils/floating-ui/svelte-dom/utils/getDPR.js +7 -0
  246. package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.d.ts +1 -0
  247. package/dist/utils/floating-ui/svelte-dom/utils/roundByDPR.js +5 -0
  248. package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.d.ts +4 -0
  249. package/dist/utils/floating-ui/svelte-dom/utils/useLatestRef.js +7 -0
  250. package/dist/utils/id.d.ts +1 -1
  251. package/dist/utils/id.js +1 -1
  252. package/dist/utils/index.d.ts +3 -0
  253. package/dist/utils/index.js +3 -0
  254. package/dist/utils/state.js +4 -4
  255. package/dist/utils/style.d.ts +2 -0
  256. package/dist/utils/style.js +6 -0
  257. package/dist/utils/types.d.ts +13 -19
  258. package/package.json +53 -53
  259. package/dist/combobox/Combobox.svelte +0 -53
  260. package/dist/combobox/Combobox.svelte.d.ts +0 -50
  261. package/dist/internal/HoistFormFields.svelte +0 -14
  262. package/dist/internal/HoistFormFields.svelte.d.ts +0 -21
  263. package/dist/internal/id.d.ts +0 -8
  264. package/dist/internal/id.js +0 -11
  265. package/dist/listbox/ListboxStates.d.ts +0 -12
  266. package/dist/listbox/ListboxStates.js +0 -15
  267. package/dist/utils/Generic.svelte +0 -56
  268. package/dist/utils/Generic.svelte.d.ts +0 -35
  269. package/dist/utils/alternative-types.d.ts +0 -21
  270. /package/dist/utils/{alternative-types.js → floating-ui/svelte/types.js} +0 -0
@@ -0,0 +1,32 @@
1
+ export declare enum DisclosureStates {
2
+ Open = 0,
3
+ Closed = 1
4
+ }
5
+ export interface StateDefinition {
6
+ disclosureState: DisclosureStates;
7
+ buttonElement?: HTMLButtonElement;
8
+ panelElement?: HTMLElement;
9
+ buttonId?: string;
10
+ panelId?: string;
11
+ }
12
+ export interface StateActions {
13
+ toggleDisclosure(): void;
14
+ closeDisclosure(): void;
15
+ setButtonId(buttonId: string | undefined): void;
16
+ setPanelId(panelId: string | undefined): void;
17
+ setButtonElement(element: HTMLButtonElement | undefined): void;
18
+ setPanelElement(element: HTMLElement | undefined): void;
19
+ }
20
+ export type DisclosureContext = StateDefinition & StateActions;
21
+ export declare function createDisclosureContext(defaultOpen: boolean): DisclosureContext;
22
+ export declare function useDisclosureContext(component: string): DisclosureContext;
23
+ export interface DisclosureAPIContext {
24
+ close: (focusableElement?: HTMLElement) => void;
25
+ }
26
+ export declare function createDisclosureAPIContext(close: (focusableElement?: HTMLElement) => void): DisclosureAPIContext;
27
+ export declare function useDisclosureAPIContext(component: string): DisclosureAPIContext;
28
+ export interface DisclosurePanelContext {
29
+ panelId: string | undefined;
30
+ }
31
+ export declare function createDisclosurePanelContext(panelId: () => string | undefined): DisclosurePanelContext;
32
+ export declare function useDisclosurePanelContext(): DisclosurePanelContext | undefined;
@@ -0,0 +1,94 @@
1
+ import { getContext, setContext } from "svelte";
2
+ export var DisclosureStates;
3
+ (function (DisclosureStates) {
4
+ DisclosureStates[DisclosureStates["Open"] = 0] = "Open";
5
+ DisclosureStates[DisclosureStates["Closed"] = 1] = "Closed";
6
+ })(DisclosureStates || (DisclosureStates = {}));
7
+ export function createDisclosureContext(defaultOpen) {
8
+ let disclosureState = $state(defaultOpen ? DisclosureStates.Open : DisclosureStates.Closed);
9
+ let buttonElement = $state();
10
+ let panelElement = $state();
11
+ let buttonId = $state();
12
+ let panelId = $state();
13
+ const context = {
14
+ get disclosureState() {
15
+ return disclosureState;
16
+ },
17
+ get buttonElement() {
18
+ return buttonElement;
19
+ },
20
+ get panelElement() {
21
+ return panelElement;
22
+ },
23
+ get buttonId() {
24
+ return buttonId;
25
+ },
26
+ get panelId() {
27
+ return panelId;
28
+ },
29
+ toggleDisclosure() {
30
+ disclosureState = disclosureState === DisclosureStates.Open ? DisclosureStates.Closed : DisclosureStates.Open;
31
+ },
32
+ closeDisclosure() {
33
+ if (disclosureState !== DisclosureStates.Closed)
34
+ disclosureState = DisclosureStates.Closed;
35
+ },
36
+ setButtonId(id) {
37
+ if (id !== buttonId)
38
+ buttonId = id;
39
+ },
40
+ setPanelId(id) {
41
+ if (id !== panelId)
42
+ panelId = id;
43
+ },
44
+ setButtonElement(element) {
45
+ if (element !== buttonElement)
46
+ buttonElement = element;
47
+ },
48
+ setPanelElement(element) {
49
+ if (element !== panelElement)
50
+ panelElement = element;
51
+ },
52
+ };
53
+ setContext("DisclosureContext", context);
54
+ return context;
55
+ }
56
+ export function useDisclosureContext(component) {
57
+ const context = getContext("DisclosureContext");
58
+ if (!context) {
59
+ const err = new Error(`<${component} /> is missing a parent <Disclosure /> component.`);
60
+ if (Error.captureStackTrace)
61
+ Error.captureStackTrace(err, useDisclosureContext);
62
+ throw err;
63
+ }
64
+ return context;
65
+ }
66
+ export function createDisclosureAPIContext(close) {
67
+ const context = {
68
+ close,
69
+ };
70
+ setContext("DisclosureAPIContext", context);
71
+ return context;
72
+ }
73
+ export function useDisclosureAPIContext(component) {
74
+ const context = getContext("DisclosureAPIContext");
75
+ if (!context) {
76
+ const err = new Error(`<${component} /> is missing a parent <Disclosure /> component.`);
77
+ if (Error.captureStackTrace)
78
+ Error.captureStackTrace(err, useDisclosureAPIContext);
79
+ throw err;
80
+ }
81
+ return context;
82
+ }
83
+ export function createDisclosurePanelContext(panelId) {
84
+ const context = {
85
+ get panelId() {
86
+ return panelId();
87
+ },
88
+ };
89
+ setContext("DisclosurePanelContext", context);
90
+ return context;
91
+ }
92
+ export function useDisclosurePanelContext() {
93
+ return getContext("DisclosurePanelContext");
94
+ }
@@ -0,0 +1,3 @@
1
+ export { default as Disclosure, type DisclosureProps, type DisclosureRenderPropArg as DisclosureSlot, type DisclosureOwnProps, } from "./Disclosure.svelte";
2
+ export { default as DisclosureButton, type DisclosureButtonProps, type ButtonRenderPropArg as DisclosureButtonSlot, type DisclosureButtonOwnProps, } from "./DisclosureButton.svelte";
3
+ export { default as DisclosurePanel, type DisclosurePanelProps, type PanelRenderPropArg as DisclosurePanelSlot, type DisclosurePanelOwnProps, } from "./DisclosurePanel.svelte";
@@ -0,0 +1,3 @@
1
+ export { default as Disclosure, } from "./Disclosure.svelte";
2
+ export { default as DisclosureButton, } from "./DisclosureButton.svelte";
3
+ export { default as DisclosurePanel, } from "./DisclosurePanel.svelte";
@@ -1,32 +1,26 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
2
+ import type { Props } from "../utils/types.js"
3
3
 
4
4
  let DEFAULT_FIELD_TAG = "div" as const
5
5
 
6
- type FieldRenderPropArg = {}
7
- type FieldPropsWeControl = never
8
-
9
- export type FieldProps<TTag extends ElementType = typeof DEFAULT_FIELD_TAG> = Props<
10
- TTag,
11
- FieldRenderPropArg,
12
- FieldPropsWeControl,
13
- {
14
- disabled?: boolean
15
- }
16
- >
6
+ export type FieldOwnProps = {
7
+ element?: HTMLElement
8
+ disabled?: boolean
9
+ }
10
+
11
+ export type FieldProps = Props<typeof DEFAULT_FIELD_TAG, {}, FieldOwnProps>
17
12
  </script>
18
13
 
19
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_FIELD_TAG">
20
- import { useDisabled } from "../hooks/use-disabled.js"
14
+ <script lang="ts">
15
+ import { provideDisabled } from "../hooks/use-disabled.js"
21
16
  import { createIdContext } from "../utils/id.js"
22
- import { stateFromSlot } from "../utils/state.js"
23
17
  import { nanoid } from "nanoid"
24
- import { setContext, type Snippet } from "svelte"
25
18
  import { useLabels } from "../label/context.svelte.js"
26
19
  import { useDescriptions } from "../description/context.svelte.js"
27
20
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
21
+ import FormFieldsProvider from "../internal/FormFieldsProvider.svelte"
28
22
 
29
- let { ref = $bindable(), disabled: ownDisabled = false, ...theirProps }: { as?: TTag } & FieldProps<TTag> = $props()
23
+ let { element = $bindable(), disabled: ownDisabled = false, children, ...theirProps }: FieldProps = $props()
30
24
 
31
25
  const inputId = `headlessui-control-${nanoid(8)}`
32
26
  createIdContext(inputId)
@@ -34,14 +28,8 @@
34
28
  useLabels()
35
29
  useDescriptions()
36
30
 
37
- const providedDisabled = useDisabled()
38
- const disabled = $derived(providedDisabled.value || ownDisabled)
39
-
40
- setContext("DisabledContext", {
41
- get value() {
42
- return disabled
43
- },
44
- })
31
+ const disabledContext = provideDisabled(() => ownDisabled)
32
+ const { current: disabled } = $derived(disabledContext)
45
33
 
46
34
  const slot = $derived({ disabled })
47
35
 
@@ -51,4 +39,17 @@
51
39
  })
52
40
  </script>
53
41
 
54
- <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_FIELD_TAG} name="Field" bind:ref />
42
+ {#snippet wrapper(args: { props: Record<string, any> })}
43
+ <FormFieldsProvider>
44
+ {@render children?.(args)}
45
+ </FormFieldsProvider>
46
+ {/snippet}
47
+
48
+ <ElementOrComponent
49
+ {ourProps}
50
+ theirProps={{ ...theirProps, children: wrapper }}
51
+ slots={slot}
52
+ defaultTag={DEFAULT_FIELD_TAG}
53
+ name="Field"
54
+ bind:element
55
+ />
@@ -1,37 +1,10 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare let DEFAULT_FIELD_TAG: "div";
3
- type FieldRenderPropArg = {};
4
- type FieldPropsWeControl = never;
5
- export type FieldProps<TTag extends ElementType = typeof DEFAULT_FIELD_TAG> = Props<TTag, FieldRenderPropArg, FieldPropsWeControl, {
3
+ export type FieldOwnProps = {
4
+ element?: HTMLElement;
6
5
  disabled?: boolean;
7
- }>;
8
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_FIELD_TAG> {
9
- props(): {
10
- as?: TTag | undefined;
11
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "disabled"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
12
- children?: import("../utils/types.js").Children<FieldRenderPropArg> | undefined;
13
- ref?: HTMLElement;
14
- } & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
15
- class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: FieldRenderPropArg) => string) | undefined;
16
- } : {}) & {
17
- disabled?: boolean;
18
- };
19
- events(): {} & {
20
- [evt: string]: CustomEvent<any>;
21
- };
22
- slots(): {};
23
- bindings(): "ref";
24
- exports(): {};
25
- }
26
- interface $$IsomorphicComponent {
27
- new <TTag extends ElementType = typeof DEFAULT_FIELD_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
28
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
29
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
30
- <TTag extends ElementType = typeof DEFAULT_FIELD_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
31
- $$events?: ReturnType<__sveltets_Render<TTag>['events']>;
32
- }): ReturnType<__sveltets_Render<TTag>['exports']>;
33
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
34
- }
35
- declare const Field: $$IsomorphicComponent;
36
- type Field<TTag extends ElementType = typeof DEFAULT_FIELD_TAG> = InstanceType<typeof Field<TTag>>;
6
+ };
7
+ export type FieldProps = Props<typeof DEFAULT_FIELD_TAG, {}, FieldOwnProps>;
8
+ declare const Field: import("svelte").Component<FieldProps, {}, "element">;
9
+ type Field = ReturnType<typeof Field>;
37
10
  export default Field;
@@ -1 +1 @@
1
- export { default as Field, type FieldProps } from "./Field.svelte";
1
+ export { default as Field, type FieldProps, type FieldOwnProps } from "./Field.svelte";
@@ -1,34 +1,28 @@
1
1
  <script lang="ts" module>
2
- import type { ElementType, Props } from "../utils/types.js"
3
- let DEFAULT_FIELDSET_TAG = "fieldset" as const
2
+ import type { Props } from "../utils/types.js"
3
+
4
+ const DEFAULT_FIELDSET_TAG = "fieldset" as const
4
5
 
5
- type FieldsetRenderPropArg = {}
6
6
  type FieldsetPropsWeControl = "aria-labelledby" | "aria-disabled" | "role"
7
7
 
8
- export type FieldsetProps<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> = Props<
9
- TTag,
10
- FieldsetRenderPropArg,
11
- FieldsetPropsWeControl,
12
- {
13
- disabled?: boolean
14
- }
15
- >
8
+ export type FieldsetOwnProps = {
9
+ element?: HTMLElement
10
+ disabled?: boolean
11
+ }
12
+
13
+ export type FieldsetProps = Props<typeof DEFAULT_FIELDSET_TAG, {}, FieldsetOwnProps>
16
14
  </script>
17
15
 
18
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG">
16
+ <script lang="ts">
19
17
  import { setContext } from "svelte"
20
18
  import { useDisabled } from "../hooks/use-disabled.js"
21
19
  import { useLabels } from "../label/context.svelte.js"
22
20
  import ElementOrComponent from "../utils/ElementOrComponent.svelte"
23
21
 
24
- let {
25
- ref = $bindable(),
26
- disabled: ownDisabled = false,
27
- ...theirProps
28
- }: { as?: TTag } & FieldsetProps<TTag> = $props()
22
+ let { element = $bindable(), disabled: ownDisabled = false, ...theirProps }: FieldsetProps = $props()
29
23
 
30
24
  const providedDisabled = useDisabled()
31
- const disabled = $derived(providedDisabled.value || ownDisabled)
25
+ const disabled = $derived(providedDisabled.current || ownDisabled)
32
26
 
33
27
  setContext("DisabledContext", {
34
28
  get value() {
@@ -39,7 +33,7 @@
39
33
  const labelledBy = useLabels()
40
34
  const slot = $derived({ disabled })
41
35
  const ourProps = $derived(
42
- (theirProps.as ?? DEFAULT_FIELDSET_TAG) === "fieldset"
36
+ !theirProps.asChild
43
37
  ? {
44
38
  "aria-labelledby": labelledBy.value,
45
39
  disabled: disabled || undefined,
@@ -52,4 +46,11 @@
52
46
  )
53
47
  </script>
54
48
 
55
- <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_FIELDSET_TAG} name="Fieldset" bind:ref />
49
+ <ElementOrComponent
50
+ {ourProps}
51
+ {theirProps}
52
+ slots={slot}
53
+ defaultTag={DEFAULT_FIELDSET_TAG}
54
+ name="Fieldset"
55
+ bind:element
56
+ />
@@ -1,37 +1,10 @@
1
- import type { ElementType, Props } from "../utils/types.js";
2
- declare let DEFAULT_FIELDSET_TAG: "fieldset";
3
- type FieldsetRenderPropArg = {};
4
- type FieldsetPropsWeControl = "aria-labelledby" | "aria-disabled" | "role";
5
- export type FieldsetProps<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> = Props<TTag, FieldsetRenderPropArg, FieldsetPropsWeControl, {
1
+ import type { Props } from "../utils/types.js";
2
+ declare const DEFAULT_FIELDSET_TAG: "fieldset";
3
+ export type FieldsetOwnProps = {
4
+ element?: HTMLElement;
6
5
  disabled?: boolean;
7
- }>;
8
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> {
9
- props(): {
10
- as?: TTag | undefined;
11
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "disabled" | FieldsetPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
12
- children?: import("../utils/types.js").Children<FieldsetRenderPropArg> | undefined;
13
- ref?: HTMLElement;
14
- } & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
15
- class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: FieldsetRenderPropArg) => string) | undefined;
16
- } : {}) & {
17
- disabled?: boolean;
18
- };
19
- events(): {} & {
20
- [evt: string]: CustomEvent<any>;
21
- };
22
- slots(): {};
23
- bindings(): "ref";
24
- exports(): {};
25
- }
26
- interface $$IsomorphicComponent {
27
- new <TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
28
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
29
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
30
- <TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
31
- $$events?: ReturnType<__sveltets_Render<TTag>['events']>;
32
- }): ReturnType<__sveltets_Render<TTag>['exports']>;
33
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
34
- }
35
- declare const Fieldset: $$IsomorphicComponent;
36
- type Fieldset<TTag extends ElementType = typeof DEFAULT_FIELDSET_TAG> = InstanceType<typeof Fieldset<TTag>>;
6
+ };
7
+ export type FieldsetProps = Props<typeof DEFAULT_FIELDSET_TAG, {}, FieldsetOwnProps>;
8
+ declare const Fieldset: import("svelte").Component<FieldsetProps, {}, "element">;
9
+ type Fieldset = ReturnType<typeof Fieldset>;
37
10
  export default Fieldset;
@@ -1 +1 @@
1
- export { default as Fieldset, type FieldsetProps } from "./Fieldset.svelte";
1
+ export { default as Fieldset, type FieldsetProps, type FieldsetOwnProps } from "./Fieldset.svelte";
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" module>
2
2
  import { getOwnerDocument } from "../utils/owner.js"
3
- import type { ElementType, Props } from "../utils/types.js"
3
+ import type { Props } from "../utils/types.js"
4
4
  import { history } from "../utils/active-element-history.js"
5
5
  import { useWatch } from "../hooks/use-watch.svelte.js"
6
6
  import { microTask } from "../utils/microTask.js"
@@ -35,27 +35,24 @@
35
35
  return all
36
36
  }
37
37
 
38
- let DEFAULT_FOCUS_TRAP_TAG = "div" as const
38
+ const DEFAULT_FOCUS_TRAP_TAG = "div" as const
39
39
 
40
40
  export * from "./FocusTrapFeatures.js"
41
41
 
42
- type FocusTrapRenderPropArg = {}
43
42
  type FocusTrapPropsWeControl = never
44
43
 
45
- export type FocusTrapProps<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG> = Props<
46
- TTag,
47
- FocusTrapRenderPropArg,
48
- FocusTrapPropsWeControl,
49
- {
50
- initialFocus?: HTMLElement
51
- // A fallback element to focus, but this element will be skipped when tabbing around. This is
52
- // only done for focusing a fallback parent container (e.g.: A `Dialog`, but you want to tab
53
- // *inside* the dialog excluding the dialog itself).
54
- initialFocusFallback?: HTMLElement
55
- features?: FocusTrapFeatures
56
- containers?: Containers
57
- }
58
- >
44
+ export type FocusTrapOwnProps = {
45
+ element?: HTMLElement
46
+ initialFocus?: HTMLElement
47
+ // A fallback element to focus, but this element will be skipped when tabbing around. This is
48
+ // only done for focusing a fallback parent container (e.g.: A `Dialog`, but you want to tab
49
+ // *inside* the dialog excluding the dialog itself).
50
+ initialFocusFallback?: HTMLElement
51
+ features?: FocusTrapFeatures
52
+ containers?: Containers
53
+ }
54
+
55
+ export type FocusTrapProps = Props<typeof DEFAULT_FOCUS_TRAP_TAG, {}, FocusTrapOwnProps>
59
56
 
60
57
  function useRestoreElement(options?: { enabled: boolean }) {
61
58
  const { enabled } = $derived(options ?? { enabled: true })
@@ -293,10 +290,10 @@
293
290
  }
294
291
  </script>
295
292
 
296
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG">
293
+ <script lang="ts">
297
294
  let container = $state<HTMLElement | null>(null)
298
295
  let {
299
- ref = $bindable(),
296
+ element = $bindable(),
300
297
  initialFocus,
301
298
  initialFocusFallback,
302
299
  containers,
@@ -305,13 +302,13 @@
305
302
  FocusTrapFeatures.FocusLock |
306
303
  FocusTrapFeatures.RestoreFocus,
307
304
  ...theirProps
308
- }: { as?: TTag } & FocusTrapProps<TTag> = $props()
305
+ }: FocusTrapProps = $props()
309
306
 
310
307
  /*if (!useServerHandoffComplete()) {
311
308
  features = FocusTrapFeatures.None
312
309
  }*/
313
310
 
314
- const ownerDocument = $derived(getOwnerDocument(ref))
311
+ const ownerDocument = $derived(getOwnerDocument(element))
315
312
 
316
313
  useRestoreFocus({
317
314
  get features() {
@@ -441,21 +438,17 @@
441
438
  </script>
442
439
 
443
440
  {#if tabLockEnabled}
444
- <Hidden
445
- as="button"
446
- type="button"
447
- data-headlessui-focus-guard
448
- onfocus={handleFocus}
449
- features={HiddenFeatures.Focusable}
450
- />
441
+ <Hidden asChild features={HiddenFeatures.Focusable}>
442
+ {#snippet children({ props })}
443
+ <button {...props} type="button" data-headlessui-focus-guard onfocus={handleFocus}>&zwnj;</button>
444
+ {/snippet}
445
+ </Hidden>
451
446
  {/if}
452
- <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_FOCUS_TRAP_TAG} name="FocusTrap" bind:ref />
447
+ <ElementOrComponent {ourProps} {theirProps} defaultTag={DEFAULT_FOCUS_TRAP_TAG} name="FocusTrap" bind:element />
453
448
  {#if tabLockEnabled}
454
- <Hidden
455
- as="button"
456
- type="button"
457
- data-headlessui-focus-guard
458
- onfocus={handleFocus}
459
- features={HiddenFeatures.Focusable}
460
- />
449
+ <Hidden asChild features={HiddenFeatures.Focusable}>
450
+ {#snippet children({ props })}
451
+ <button {...props} type="button" data-headlessui-focus-guard onfocus={handleFocus}>&zwnj;</button>
452
+ {/snippet}
453
+ </Hidden>
461
454
  {/if}
@@ -1,46 +1,16 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  import { FocusTrapFeatures } from "./FocusTrapFeatures.js";
3
3
  type Containers = (() => Iterable<HTMLElement>) | Iterable<HTMLElement>;
4
- declare let DEFAULT_FOCUS_TRAP_TAG: "div";
4
+ declare const DEFAULT_FOCUS_TRAP_TAG: "div";
5
5
  export * from "./FocusTrapFeatures.js";
6
- type FocusTrapRenderPropArg = {};
7
- type FocusTrapPropsWeControl = never;
8
- export type FocusTrapProps<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG> = Props<TTag, FocusTrapRenderPropArg, FocusTrapPropsWeControl, {
6
+ export type FocusTrapOwnProps = {
7
+ element?: HTMLElement;
9
8
  initialFocus?: HTMLElement;
10
9
  initialFocusFallback?: HTMLElement;
11
10
  features?: FocusTrapFeatures;
12
11
  containers?: Containers;
13
- }>;
14
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG> {
15
- props(): {
16
- as?: TTag | undefined;
17
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("as" | "children" | "refName" | "class") | "features" | "containers" | "initialFocus" | "initialFocusFallback"> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
18
- children?: import("../utils/types.js").Children<FocusTrapRenderPropArg> | undefined;
19
- ref?: HTMLElement;
20
- } & (true extends (import("../utils/types.js").PropsOf<TTag> extends infer T_1 ? T_1 extends import("../utils/types.js").PropsOf<TTag> ? T_1 extends never ? never : "class" extends infer T_2 ? T_2 extends "class" ? T_2 extends keyof T_1 ? true : never : never : never : never : never) ? {
21
- class?: import("../utils/types.js").PropsOf<TTag>["class"] | ((bag: FocusTrapRenderPropArg) => string) | undefined;
22
- } : {}) & {
23
- initialFocus?: HTMLElement;
24
- initialFocusFallback?: HTMLElement;
25
- features?: FocusTrapFeatures;
26
- containers?: Containers;
27
- };
28
- events(): {} & {
29
- [evt: string]: CustomEvent<any>;
30
- };
31
- slots(): {};
32
- bindings(): "ref";
33
- exports(): {};
34
- }
35
- interface $$IsomorphicComponent {
36
- new <TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag>['props']>, ReturnType<__sveltets_Render<TTag>['events']>, ReturnType<__sveltets_Render<TTag>['slots']>> & {
37
- $$bindings?: ReturnType<__sveltets_Render<TTag>['bindings']>;
38
- } & ReturnType<__sveltets_Render<TTag>['exports']>;
39
- <TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TTag>['props']> & {
40
- $$events?: ReturnType<__sveltets_Render<TTag>['events']>;
41
- }): ReturnType<__sveltets_Render<TTag>['exports']>;
42
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
43
- }
44
- declare const FocusTrap: $$IsomorphicComponent;
45
- type FocusTrap<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG> = InstanceType<typeof FocusTrap<TTag>>;
12
+ };
13
+ export type FocusTrapProps = Props<typeof DEFAULT_FOCUS_TRAP_TAG, {}, FocusTrapOwnProps>;
14
+ declare const FocusTrap: import("svelte").Component<FocusTrapProps, {}, "element">;
15
+ type FocusTrap = ReturnType<typeof FocusTrap>;
46
16
  export default FocusTrap;
@@ -1,7 +1,7 @@
1
1
  export function useControllable(input, onchange, defaultValue) {
2
2
  let internalValue = $state(defaultValue);
3
3
  const isControlled = $derived(input.controlledValue !== undefined);
4
- let wasControlled = isControlled;
4
+ let wasControlled = (() => isControlled)();
5
5
  let didWarnOnUncontrolledToControlled = false;
6
6
  let didWarnOnControlledToUncontrolled = false;
7
7
  $effect(() => {
@@ -27,7 +27,8 @@ export function useControllable(input, onchange, defaultValue) {
27
27
  }
28
28
  else {
29
29
  internalValue = value;
30
- input.controlledValue = value;
30
+ if (isControlled)
31
+ input.controlledValue = value;
31
32
  }
32
33
  },
33
34
  };
@@ -1,23 +1,18 @@
1
1
  export function useDidElementMove(options) {
2
2
  const { enabled, element } = $derived(options);
3
- let elementPosition = $state({ left: 0, top: 0 });
3
+ let elementPosition = $state();
4
4
  $effect(() => {
5
5
  if (!element)
6
6
  return;
7
- let DOMRect = element.getBoundingClientRect();
7
+ const DOMRect = element.getBoundingClientRect();
8
8
  if (DOMRect)
9
9
  elementPosition = DOMRect;
10
10
  });
11
11
  const value = $derived.by(() => {
12
- if (element == null)
12
+ if (element == null || !enabled || element === document.activeElement || elementPosition === undefined)
13
13
  return false;
14
- if (!enabled)
15
- return false;
16
- if (element === document.activeElement)
17
- return false;
18
- let buttonRect = element.getBoundingClientRect();
19
- let didElementMove = buttonRect.top !== elementPosition.top || buttonRect.left !== elementPosition.left;
20
- return didElementMove;
14
+ const buttonRect = element.getBoundingClientRect();
15
+ return buttonRect.top !== elementPosition.top || buttonRect.left !== elementPosition.left;
21
16
  });
22
17
  return {
23
18
  get value() {
@@ -1,3 +1,8 @@
1
1
  export declare const useDisabled: () => {
2
- readonly value: boolean;
2
+ readonly current: boolean;
3
+ };
4
+ export declare const provideDisabled: (disabled: () => boolean, options?: {
5
+ ignoreParent?: boolean;
6
+ }) => {
7
+ readonly current: boolean;
3
8
  };
@@ -1,9 +1,14 @@
1
- import { getContext } from "svelte";
1
+ import { getContext, setContext } from "svelte";
2
2
  export const useDisabled = () => {
3
- const context = getContext("DisabledContext");
4
- return {
5
- get value() {
6
- return context?.value ?? false;
3
+ return getContext("DisabledContext") ?? { current: false };
4
+ };
5
+ export const provideDisabled = (disabled, options) => {
6
+ const parentDisabled = options?.ignoreParent ? { current: false } : useDisabled();
7
+ const context = {
8
+ get current() {
9
+ return disabled() || parentDisabled.current;
7
10
  },
8
11
  };
12
+ setContext("DisabledContext", context);
13
+ return context;
9
14
  };
@@ -10,7 +10,7 @@ export function useElementSize(options) {
10
10
  // compute the correct size as soon as possible. However, once the element is
11
11
  // stable, we also want to watch for changes to the element. The `identity`
12
12
  // state can be used to recompute the size.
13
- let size = $state(computeSize(element));
13
+ let size = $state((() => computeSize(element))());
14
14
  const observeSize = (element) => {
15
15
  if (!element)
16
16
  return;