@pzerelles/headlessui-svelte 2.0.0-next.1 → 2.1.1-next.1
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.
- package/dist/button/Button.svelte +65 -0
- package/dist/button/Button.svelte.d.ts +39 -0
- package/dist/button/index.d.ts +1 -0
- package/dist/button/index.js +1 -0
- package/dist/checkbox/Checkbox.svelte +60 -46
- package/dist/checkbox/Checkbox.svelte.d.ts +1 -1
- package/dist/close-button/CloseButton.svelte +10 -0
- package/dist/close-button/CloseButton.svelte.d.ts +25 -0
- package/dist/close-button/index.d.ts +1 -0
- package/dist/close-button/index.js +1 -0
- package/dist/combobox/Combobox.svelte +6 -0
- package/dist/combobox/Combobox.svelte.d.ts +50 -0
- package/dist/description/Description.svelte +50 -32
- package/dist/description/Description.svelte.d.ts +14 -5
- package/dist/field/Field.svelte +9 -9
- package/dist/fieldset/Fieldset.svelte +9 -9
- package/dist/hooks/document-overflow/adjust-scrollbar-padding.d.ts +2 -0
- package/dist/hooks/document-overflow/adjust-scrollbar-padding.js +18 -0
- package/dist/hooks/document-overflow/handle-ios-locking.d.ts +6 -0
- package/dist/hooks/document-overflow/handle-ios-locking.js +134 -0
- package/dist/hooks/document-overflow/overflow-store.d.ts +19 -0
- package/dist/hooks/document-overflow/overflow-store.js +76 -0
- package/dist/hooks/document-overflow/prevent-scroll.d.ts +2 -0
- package/dist/hooks/document-overflow/prevent-scroll.js +7 -0
- package/dist/hooks/document-overflow/use-document-overflow.svelte.d.ts +7 -0
- package/dist/hooks/document-overflow/use-document-overflow.svelte.js +27 -0
- package/dist/hooks/use-active-press.svelte.d.ts +14 -0
- package/dist/{actions/activePress.svelte.js → hooks/use-active-press.svelte.js} +33 -39
- package/dist/hooks/use-by-comparator.d.ts +2 -0
- package/dist/hooks/use-by-comparator.js +15 -0
- package/dist/hooks/use-controllable.svelte.d.ts +6 -0
- package/dist/hooks/use-controllable.svelte.js +34 -0
- package/dist/hooks/use-did-element-move.svelte.d.ts +6 -0
- package/dist/hooks/use-did-element-move.svelte.js +27 -0
- package/dist/hooks/use-disabled.d.ts +3 -0
- package/dist/hooks/use-disabled.js +9 -0
- package/dist/hooks/use-element-size.svelte.d.ts +7 -0
- package/dist/hooks/use-element-size.svelte.js +36 -0
- package/dist/hooks/use-flags.svelte.d.ts +8 -0
- package/dist/hooks/use-flags.svelte.js +18 -0
- package/dist/hooks/use-focus-ring.svelte.d.ts +10 -0
- package/dist/hooks/use-focus-ring.svelte.js +24 -0
- package/dist/hooks/use-hover.svelte.d.ts +26 -0
- package/dist/hooks/use-hover.svelte.js +124 -0
- package/dist/hooks/use-id.d.ts +1 -0
- package/dist/hooks/use-id.js +1 -0
- package/dist/hooks/use-inert-others.svelte.d.ts +32 -0
- package/dist/hooks/use-inert-others.svelte.js +114 -0
- package/dist/hooks/use-is-top-layer.svelte.d.ts +29 -0
- package/dist/hooks/use-is-top-layer.svelte.js +82 -0
- package/dist/hooks/use-on-disappear.svelte.d.ts +12 -0
- package/dist/hooks/use-on-disappear.svelte.js +38 -0
- package/dist/hooks/use-outside-click.svelte.d.ts +10 -0
- package/dist/hooks/use-outside-click.svelte.js +150 -0
- package/dist/hooks/use-reducer.d.ts +4 -0
- package/dist/hooks/use-reducer.js +11 -0
- package/dist/hooks/use-resolve-button-type.svelte.d.ts +10 -0
- package/dist/hooks/use-resolve-button-type.svelte.js +19 -0
- package/dist/hooks/use-scroll-lock.svelte.d.ts +5 -0
- package/dist/hooks/use-scroll-lock.svelte.js +24 -0
- package/dist/hooks/use-sync-refs.d.ts +7 -0
- package/dist/hooks/use-sync-refs.js +22 -0
- package/dist/hooks/use-text-value.svelte.d.ts +3 -0
- package/dist/hooks/use-text-value.svelte.js +20 -0
- package/dist/hooks/use-tracked-pointer.d.ts +4 -0
- package/dist/hooks/use-tracked-pointer.js +26 -0
- package/dist/hooks/use-transition.svelte.d.ts +20 -0
- package/dist/hooks/use-transition.svelte.js +252 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/internal/FocusSentinel.svelte +45 -0
- package/dist/internal/FocusSentinel.svelte.d.ts +17 -0
- package/dist/internal/FormFields.svelte +2 -4
- package/dist/internal/FormFields.svelte.d.ts +5 -6
- package/dist/internal/FormResolver.svelte +11 -16
- package/dist/internal/FormResolver.svelte.d.ts +2 -3
- package/dist/internal/Hidden.svelte +8 -8
- package/dist/internal/Hidden.svelte.d.ts +28 -19
- package/dist/internal/HoistFormFields.svelte.d.ts +1 -1
- package/dist/internal/Portal.svelte.d.ts +1 -1
- package/dist/internal/floating.svelte.d.ts +57 -0
- package/dist/internal/floating.svelte.js +477 -0
- package/dist/internal/frozen.svelte.d.ts +6 -0
- package/dist/internal/frozen.svelte.js +18 -0
- package/dist/internal/id.d.ts +8 -0
- package/dist/internal/id.js +11 -0
- package/dist/internal/open-closed.d.ts +14 -0
- package/dist/internal/open-closed.js +17 -0
- package/dist/internal/portal-force-root.svelte.d.ts +6 -0
- package/dist/internal/portal-force-root.svelte.js +11 -0
- package/dist/label/Label.svelte +53 -32
- package/dist/label/Label.svelte.d.ts +14 -5
- package/dist/legend/Legend.svelte.d.ts +1 -2
- package/dist/listbox/Listbox.svelte +451 -0
- package/dist/listbox/Listbox.svelte.d.ts +107 -0
- package/dist/listbox/ListboxButton.svelte +141 -0
- package/dist/listbox/ListboxButton.svelte.d.ts +41 -0
- package/dist/listbox/ListboxOption.svelte +138 -0
- package/dist/listbox/ListboxOption.svelte.d.ts +39 -0
- package/dist/listbox/ListboxOptions.svelte +267 -0
- package/dist/listbox/ListboxOptions.svelte.d.ts +39 -0
- package/dist/listbox/ListboxSelectedOption.svelte +25 -0
- package/dist/listbox/ListboxSelectedOption.svelte.d.ts +30 -0
- package/dist/listbox/index.d.ts +5 -0
- package/dist/listbox/index.js +5 -0
- package/dist/portal/InternalPortal.svelte +108 -0
- package/dist/portal/InternalPortal.svelte.d.ts +34 -0
- package/dist/portal/Portal.svelte +11 -0
- package/dist/portal/Portal.svelte.d.ts +23 -0
- package/dist/portal/PortalGroup.svelte +15 -0
- package/dist/portal/PortalGroup.svelte.d.ts +31 -0
- package/dist/switch/Switch.svelte +149 -0
- package/dist/switch/Switch.svelte.d.ts +44 -0
- package/dist/switch/SwitchGroup.svelte +38 -0
- package/dist/switch/SwitchGroup.svelte.d.ts +27 -0
- package/dist/switch/index.d.ts +2 -0
- package/dist/switch/index.js +2 -0
- package/dist/tabs/Button.svelte +65 -0
- package/dist/tabs/Button.svelte.d.ts +39 -0
- package/dist/tabs/Tab.svelte +161 -0
- package/dist/tabs/Tab.svelte.d.ts +36 -0
- package/dist/tabs/TabGroup.svelte +244 -0
- package/dist/tabs/TabGroup.svelte.d.ts +54 -0
- package/dist/tabs/TabList.svelte +18 -0
- package/dist/tabs/TabList.svelte.d.ts +28 -0
- package/dist/tabs/TabPanel.svelte +63 -0
- package/dist/tabs/TabPanel.svelte.d.ts +34 -0
- package/dist/tabs/TabPanels.svelte +13 -0
- package/dist/tabs/TabPanels.svelte.d.ts +27 -0
- package/dist/tabs/index.d.ts +5 -0
- package/dist/tabs/index.js +5 -0
- package/dist/test-utils/accessability-assertions.d.ts +271 -0
- package/dist/test-utils/accessability-assertions.js +1572 -0
- package/dist/test-utils/fake-pointer.d.ts +24 -0
- package/dist/test-utils/fake-pointer.js +48 -0
- package/dist/test-utils/interactions.d.ts +61 -0
- package/dist/test-utils/interactions.js +453 -0
- package/dist/test-utils/suppress-console-logs.d.ts +7 -0
- package/dist/test-utils/suppress-console-logs.js +17 -0
- package/dist/utils/StableCollection.svelte +43 -0
- package/dist/utils/StableCollection.svelte.d.ts +19 -0
- package/dist/utils/calculate-active-index.d.ts +25 -0
- package/dist/utils/calculate-active-index.js +74 -0
- package/dist/utils/close.d.ts +2 -0
- package/dist/utils/close.js +3 -0
- package/dist/utils/default-map.d.ts +5 -0
- package/dist/utils/default-map.js +15 -0
- package/dist/utils/disposables.d.ts +14 -12
- package/dist/utils/disposables.js +13 -10
- package/dist/utils/dom.d.ts +0 -2
- package/dist/utils/dom.js +2 -4
- package/dist/utils/env.d.ts +17 -0
- package/dist/utils/env.js +39 -0
- package/dist/utils/focus-management.d.ts +44 -0
- package/dist/utils/focus-management.js +242 -0
- package/dist/utils/focusVisible.svelte.d.ts +3 -3
- package/dist/utils/focusVisible.svelte.js +52 -41
- package/dist/utils/get-text-value.d.ts +1 -0
- package/dist/utils/get-text-value.js +71 -0
- package/dist/utils/id.d.ts +1 -1
- package/dist/utils/match.d.ts +1 -0
- package/dist/utils/match.js +13 -0
- package/dist/utils/once.d.ts +1 -0
- package/dist/utils/once.js +9 -0
- package/dist/utils/owner.d.ts +1 -0
- package/dist/utils/owner.js +8 -0
- package/dist/utils/platform.d.ts +2 -0
- package/dist/utils/platform.js +17 -0
- package/dist/utils/ref.svelte.d.ts +4 -0
- package/dist/utils/ref.svelte.js +4 -0
- package/dist/utils/render.d.ts +31 -0
- package/dist/utils/render.js +56 -0
- package/dist/utils/store.d.ts +11 -0
- package/dist/utils/store.js +20 -0
- package/dist/utils/types.d.ts +27 -0
- package/dist/utils/types.js +6 -0
- package/package.json +28 -21
- package/dist/actions/activePress.svelte.d.ts +0 -8
- package/dist/actions/focusRing.svelte.d.ts +0 -9
- package/dist/actions/focusRing.svelte.js +0 -34
- package/dist/utils/disabled.d.ts +0 -3
- package/dist/utils/disabled.js +0 -2
|
@@ -0,0 +1,65 @@
|
|
|
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 ourProps = $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} {...ourProps} {...theirProps}>
|
|
64
|
+
{#if children}{@render children(slot)}{/if}
|
|
65
|
+
</svelte:element>
|
|
@@ -0,0 +1,39 @@
|
|
|
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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Button, type ButtonProps } from "./Button.svelte";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Button } from "./Button.svelte";
|
|
@@ -2,18 +2,20 @@
|
|
|
2
2
|
</script>
|
|
3
3
|
|
|
4
4
|
<script lang="ts" generics="TTag extends keyof SvelteHTMLElements, TType">import { tick } from "svelte";
|
|
5
|
-
import { createHover } from "svelte-interactions";
|
|
6
5
|
import { attemptSubmit } from "../utils/form.js";
|
|
7
6
|
import { getIdContext, htmlid } from "../utils/id.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
7
|
+
import { useActivePress } from "../hooks/use-active-press.svelte.js";
|
|
8
|
+
import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
|
|
10
9
|
import FormFields from "../internal/FormFields.svelte";
|
|
11
|
-
import {
|
|
12
|
-
import { getDisabledContext } from "../utils/disabled.js";
|
|
10
|
+
import { useDisabled } from "../hooks/use-disabled.js";
|
|
13
11
|
import { stateFromSlot } from "../utils/state.js";
|
|
12
|
+
import { useLabelledBy } from "../label/Label.svelte";
|
|
13
|
+
import { useDescribedBy } from "../description/Description.svelte";
|
|
14
|
+
import { useHover } from "../hooks/use-hover.svelte.js";
|
|
15
|
+
import { mergeProps } from "../utils/render.js";
|
|
14
16
|
const internalId = htmlid();
|
|
15
17
|
const providedId = getIdContext();
|
|
16
|
-
const providedDisabled =
|
|
18
|
+
const providedDisabled = useDisabled();
|
|
17
19
|
let {
|
|
18
20
|
id = providedId || `headlessui-checkbox-${internalId}`,
|
|
19
21
|
as,
|
|
@@ -22,19 +24,37 @@ let {
|
|
|
22
24
|
indeterminate = false,
|
|
23
25
|
defaultChecked,
|
|
24
26
|
checked = $bindable(defaultChecked ?? false),
|
|
25
|
-
|
|
27
|
+
autofocus,
|
|
26
28
|
form,
|
|
27
29
|
name,
|
|
28
30
|
onchange,
|
|
29
31
|
children,
|
|
30
32
|
...theirProps
|
|
31
33
|
} = $props();
|
|
32
|
-
const disabled = $derived(providedDisabled
|
|
33
|
-
const {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const disabled = $derived(providedDisabled.value || ownDisabled);
|
|
35
|
+
const { isHovered: hover, hoverProps } = $derived(
|
|
36
|
+
useHover({
|
|
37
|
+
get disabled() {
|
|
38
|
+
return disabled;
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
);
|
|
42
|
+
const { pressed: active, pressProps } = $derived(
|
|
43
|
+
useActivePress({
|
|
44
|
+
get disabled() {
|
|
45
|
+
return disabled;
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
);
|
|
49
|
+
const { isFocusVisible: focus, focusProps } = $derived(
|
|
50
|
+
useFocusRing({
|
|
51
|
+
get autofocus() {
|
|
52
|
+
return autofocus;
|
|
53
|
+
}
|
|
54
|
+
})
|
|
55
|
+
);
|
|
56
|
+
const labelledBy = useLabelledBy();
|
|
57
|
+
const describedBy = useDescribedBy();
|
|
38
58
|
let changing = $state(false);
|
|
39
59
|
const toggle = () => {
|
|
40
60
|
changing = true;
|
|
@@ -45,8 +65,7 @@ const toggle = () => {
|
|
|
45
65
|
});
|
|
46
66
|
};
|
|
47
67
|
const handleClick = (event) => {
|
|
48
|
-
if (disabled)
|
|
49
|
-
return event.preventDefault();
|
|
68
|
+
if (disabled) return event.preventDefault();
|
|
50
69
|
event.preventDefault();
|
|
51
70
|
toggle();
|
|
52
71
|
};
|
|
@@ -55,40 +74,42 @@ const handleKeyUp = (event) => {
|
|
|
55
74
|
event.preventDefault();
|
|
56
75
|
toggle();
|
|
57
76
|
} else if (event.key === "Enter") {
|
|
58
|
-
if (event.currentTarget)
|
|
59
|
-
attemptSubmit(event.currentTarget);
|
|
77
|
+
if (event.currentTarget) attemptSubmit(event.currentTarget);
|
|
60
78
|
}
|
|
61
79
|
};
|
|
62
80
|
const handleKeyPress = (event) => event.preventDefault();
|
|
63
81
|
const slot = $derived({
|
|
64
82
|
checked,
|
|
65
83
|
changing,
|
|
66
|
-
focus
|
|
67
|
-
active
|
|
68
|
-
hover
|
|
69
|
-
autofocus:
|
|
84
|
+
focus,
|
|
85
|
+
active,
|
|
86
|
+
hover,
|
|
87
|
+
autofocus: autofocus ?? false,
|
|
70
88
|
disabled,
|
|
71
89
|
indeterminate
|
|
72
90
|
});
|
|
73
|
-
const
|
|
74
|
-
|
|
91
|
+
const ownProps = $derived(
|
|
92
|
+
mergeProps(
|
|
93
|
+
{
|
|
94
|
+
id,
|
|
95
|
+
role: "checkbox",
|
|
96
|
+
"aria-checked": indeterminate ? "mixed" : checked ? true : false,
|
|
97
|
+
"aria-labelledby": labelledBy.value,
|
|
98
|
+
"aria-describedby": describedBy.value,
|
|
99
|
+
"aria-disabled": disabled ? true : void 0,
|
|
100
|
+
tabindex: disabled ? void 0 : 0,
|
|
101
|
+
onkeyup: disabled ? void 0 : handleKeyUp,
|
|
102
|
+
onkeypress: disabled ? void 0 : handleKeyPress,
|
|
103
|
+
onclick: disabled ? void 0 : handleClick
|
|
104
|
+
},
|
|
105
|
+
focusProps,
|
|
106
|
+
hoverProps,
|
|
107
|
+
pressProps,
|
|
108
|
+
stateFromSlot(slot)
|
|
109
|
+
)
|
|
75
110
|
);
|
|
76
|
-
const ownProps = $derived({
|
|
77
|
-
id,
|
|
78
|
-
role: "checkbox",
|
|
79
|
-
"aria-checked": indeterminate ? "mixed" : checked ? true : false,
|
|
80
|
-
"aria-labelledby": labelledBy,
|
|
81
|
-
"aria-describedby": void 0,
|
|
82
|
-
"aria-disabled": disabled ? true : void 0,
|
|
83
|
-
tabindex: disabled ? void 0 : 0,
|
|
84
|
-
onkeyup: disabled ? void 0 : handleKeyUp,
|
|
85
|
-
onkeypress: disabled ? void 0 : handleKeyPress,
|
|
86
|
-
onclick: disabled ? void 0 : handleClick,
|
|
87
|
-
...stateFromSlot(slot)
|
|
88
|
-
});
|
|
89
111
|
const reset = $derived(() => {
|
|
90
|
-
if (defaultChecked === void 0)
|
|
91
|
-
return;
|
|
112
|
+
if (defaultChecked === void 0) return;
|
|
92
113
|
return onchange?.(defaultChecked);
|
|
93
114
|
});
|
|
94
115
|
</script>
|
|
@@ -102,13 +123,6 @@ const reset = $derived(() => {
|
|
|
102
123
|
onReset={reset}
|
|
103
124
|
/>
|
|
104
125
|
{/if}
|
|
105
|
-
<svelte:element
|
|
106
|
-
this={as ?? DEFAULT_CHECKBOX_TAG}
|
|
107
|
-
use:hover
|
|
108
|
-
use:ap.activePressAction
|
|
109
|
-
use:fr.focusRingAction
|
|
110
|
-
{...ownProps}
|
|
111
|
-
{...theirProps}
|
|
112
|
-
>
|
|
126
|
+
<svelte:element this={as ?? DEFAULT_CHECKBOX_TAG} {...ownProps} {...theirProps}>
|
|
113
127
|
{#if children}{@render children(slot)}{/if}
|
|
114
128
|
</svelte:element>
|
|
@@ -6,7 +6,7 @@ export type CheckboxProps<TType = string, TTag extends keyof SvelteHTMLElements
|
|
|
6
6
|
indeterminate?: boolean;
|
|
7
7
|
checked?: boolean;
|
|
8
8
|
defaultChecked?: boolean;
|
|
9
|
-
|
|
9
|
+
autofocus?: boolean;
|
|
10
10
|
form?: string;
|
|
11
11
|
name?: string;
|
|
12
12
|
onchange?: (checked: boolean) => void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<script lang="ts" context="module">import Button, {} from "../button/Button.svelte";
|
|
2
|
+
import { getCloseContext } from "../utils/close.js";
|
|
3
|
+
const DEFAULT_BUTTON_TAG = "button";
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<script lang="ts" generics="TTag extends keyof SvelteHTMLElements, TType">const close = getCloseContext();
|
|
7
|
+
let { ...props } = $props();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<Button onclick={close} {...props} />
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SvelteHTMLElements } from "svelte/elements";
|
|
2
|
+
import { type ButtonProps } from "../button/Button.svelte";
|
|
3
|
+
export type CloseButtonProps<TTag extends keyof SvelteHTMLElements = typeof DEFAULT_BUTTON_TAG> = ButtonProps<TTag>;
|
|
4
|
+
declare const DEFAULT_BUTTON_TAG: "button";
|
|
5
|
+
declare class __sveltets_Render<TTag extends keyof SvelteHTMLElements, TType> {
|
|
6
|
+
props(): CloseButtonProps<TTag>;
|
|
7
|
+
events(): {} & {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots(): {};
|
|
11
|
+
bindings(): "";
|
|
12
|
+
exports(): {};
|
|
13
|
+
}
|
|
14
|
+
interface $$IsomorphicComponent {
|
|
15
|
+
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']>> & {
|
|
16
|
+
$$bindings?: ReturnType<__sveltets_Render<TTag, TType>['bindings']>;
|
|
17
|
+
} & ReturnType<__sveltets_Render<TTag, TType>['exports']>;
|
|
18
|
+
<TTag extends keyof SvelteHTMLElements, TType>(internal: unknown, props: ReturnType<__sveltets_Render<TTag, TType>['props']> & {
|
|
19
|
+
$$events?: ReturnType<__sveltets_Render<TTag, TType>['events']>;
|
|
20
|
+
}): ReturnType<__sveltets_Render<TTag, TType>['exports']>;
|
|
21
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
22
|
+
}
|
|
23
|
+
declare const CloseButton: $$IsomorphicComponent;
|
|
24
|
+
type CloseButton<TTag extends keyof SvelteHTMLElements, TType> = InstanceType<typeof CloseButton<TTag, TType>>;
|
|
25
|
+
export default CloseButton;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as CloseButton, type CloseButtonProps } from "./CloseButton.svelte";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as CloseButton } from "./CloseButton.svelte";
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ElementType, EnsureArray, Props } from "../utils/types.js";
|
|
2
|
+
import type { ByComparator } from "../hooks/use-by-comparator.js";
|
|
3
|
+
declare const DEFAULT_COMBOBOX_TAG: "svelte:fragment";
|
|
4
|
+
type ComboboxRenderPropArg<TValue, TActive = TValue> = {
|
|
5
|
+
open: boolean;
|
|
6
|
+
disabled: boolean;
|
|
7
|
+
activeIndex: number | null;
|
|
8
|
+
activeOption: TActive | null;
|
|
9
|
+
value: TValue;
|
|
10
|
+
};
|
|
11
|
+
export type CheckboxProps<TValue, TMultiple extends boolean | undefined, TTag extends ElementType = typeof DEFAULT_COMBOBOX_TAG> = Props<TTag, ComboboxRenderPropArg<NoInfer<TValue>>, "value" | "defaultValue" | "multiple" | "onChange" | "by", {
|
|
12
|
+
value?: TMultiple extends true ? EnsureArray<TValue> : TValue;
|
|
13
|
+
defaultValue?: TMultiple extends true ? EnsureArray<NoInfer<TValue>> : NoInfer<TValue>;
|
|
14
|
+
onChange?(value: TMultiple extends true ? EnsureArray<NoInfer<TValue>> : NoInfer<TValue> | null): void;
|
|
15
|
+
by?: ByComparator<TMultiple extends true ? EnsureArray<NoInfer<TValue>>[number] : NoInfer<TValue>>;
|
|
16
|
+
/** @deprecated The `<Combobox />` is now nullable default */
|
|
17
|
+
nullable?: boolean;
|
|
18
|
+
multiple?: TMultiple;
|
|
19
|
+
disabled?: boolean;
|
|
20
|
+
form?: string;
|
|
21
|
+
name?: string;
|
|
22
|
+
immediate?: boolean;
|
|
23
|
+
virtual?: {
|
|
24
|
+
options: NoInfer<TValue>[];
|
|
25
|
+
disabled?: (value: NoInfer<TValue>) => boolean;
|
|
26
|
+
} | null;
|
|
27
|
+
onClose?(): void;
|
|
28
|
+
__demoMode?: boolean;
|
|
29
|
+
}>;
|
|
30
|
+
declare class __sveltets_Render<TTag extends ElementType, TType> {
|
|
31
|
+
props(): Record<string, never>;
|
|
32
|
+
events(): {} & {
|
|
33
|
+
[evt: string]: CustomEvent<any>;
|
|
34
|
+
};
|
|
35
|
+
slots(): {};
|
|
36
|
+
bindings(): string;
|
|
37
|
+
exports(): {};
|
|
38
|
+
}
|
|
39
|
+
interface $$IsomorphicComponent {
|
|
40
|
+
new <TTag extends ElementType, 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']>> & {
|
|
41
|
+
$$bindings?: ReturnType<__sveltets_Render<TTag, TType>['bindings']>;
|
|
42
|
+
} & ReturnType<__sveltets_Render<TTag, TType>['exports']>;
|
|
43
|
+
<TTag extends ElementType, TType>(internal: unknown, props: {
|
|
44
|
+
$$events?: ReturnType<__sveltets_Render<TTag, TType>['events']>;
|
|
45
|
+
}): ReturnType<__sveltets_Render<TTag, TType>['exports']>;
|
|
46
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
|
|
47
|
+
}
|
|
48
|
+
declare const Combobox: $$IsomorphicComponent;
|
|
49
|
+
type Combobox<TTag extends ElementType, TType> = InstanceType<typeof Combobox<TTag, TType>>;
|
|
50
|
+
export default Combobox;
|
|
@@ -1,49 +1,67 @@
|
|
|
1
|
-
<script lang="ts" context="module">import { getContext, setContext
|
|
1
|
+
<script lang="ts" context="module">import { getContext, setContext } from "svelte";
|
|
2
2
|
const DEFAULT_DESCRIPTION_TAG = "p";
|
|
3
|
-
export
|
|
4
|
-
let
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
export function useDescriptionContext() {
|
|
4
|
+
let context = getContext("DescriptionContext");
|
|
5
|
+
if (context === null) {
|
|
6
|
+
let err = new Error("You used a <Description /> component, but it is not inside a relevant parent.");
|
|
7
|
+
if (Error.captureStackTrace) Error.captureStackTrace(err, useDescriptionContext);
|
|
8
|
+
throw err;
|
|
9
|
+
}
|
|
10
|
+
return context;
|
|
11
|
+
}
|
|
12
|
+
export function useDescribedBy() {
|
|
13
|
+
const context = getContext("DescriptionContext");
|
|
14
|
+
return {
|
|
15
|
+
get value() {
|
|
16
|
+
return context?.value;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export const useDescriptions = (options = {}) => {
|
|
21
|
+
const { slot, name, props, inherit } = $derived(options);
|
|
22
|
+
let descriptionIds = $state([]);
|
|
23
|
+
const value = $derived(descriptionIds.length > 0 ? descriptionIds.join(" ") : void 0);
|
|
24
|
+
const context = {
|
|
25
|
+
get slot() {
|
|
26
|
+
return slot;
|
|
27
|
+
},
|
|
28
|
+
get name() {
|
|
29
|
+
return name;
|
|
8
30
|
},
|
|
9
|
-
|
|
10
|
-
|
|
31
|
+
get props() {
|
|
32
|
+
return props;
|
|
11
33
|
},
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
34
|
+
get value() {
|
|
35
|
+
return value;
|
|
36
|
+
},
|
|
37
|
+
register(value2) {
|
|
38
|
+
descriptionIds.push(value2);
|
|
39
|
+
return () => {
|
|
40
|
+
const clone = descriptionIds.slice();
|
|
41
|
+
const idx = clone.indexOf(value2);
|
|
42
|
+
if (idx !== -1) clone.splice(idx, 1);
|
|
43
|
+
descriptionIds = clone;
|
|
44
|
+
return descriptionIds;
|
|
45
|
+
};
|
|
16
46
|
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export const getDescriptionContext = () => getContext("Description");
|
|
20
|
-
const validateDescriptionContext = () => {
|
|
21
|
-
const context = getDescriptionContext();
|
|
22
|
-
if (context === void 0) {
|
|
23
|
-
const err = new Error("You used a <Description /> component, but it is not inside a relevant parent.");
|
|
24
|
-
if (Error.captureStackTrace)
|
|
25
|
-
Error.captureStackTrace(err, validateDescriptionContext);
|
|
26
|
-
throw err;
|
|
27
|
-
}
|
|
47
|
+
};
|
|
48
|
+
setContext("DescriptionContext", context);
|
|
28
49
|
return context;
|
|
29
50
|
};
|
|
30
51
|
</script>
|
|
31
52
|
|
|
32
53
|
<script lang="ts" generics="TTag extends keyof SvelteHTMLElements">import { htmlid } from "../utils/id.js";
|
|
33
54
|
import { stateFromSlot } from "../utils/state.js";
|
|
34
|
-
import {
|
|
55
|
+
import { useDisabled } from "../hooks/use-disabled.js";
|
|
56
|
+
import { onMount } from "svelte";
|
|
35
57
|
const internalId = htmlid();
|
|
36
|
-
const providedDisabled =
|
|
58
|
+
const providedDisabled = useDisabled();
|
|
37
59
|
let { as, id = `headlessui-description-${internalId}`, children, ...theirProps } = $props();
|
|
38
|
-
const context =
|
|
39
|
-
|
|
60
|
+
const context = useDescriptionContext();
|
|
61
|
+
onMount(() => {
|
|
40
62
|
context.register(id);
|
|
41
|
-
const registeredId = id;
|
|
42
|
-
return () => {
|
|
43
|
-
context.unregister(registeredId);
|
|
44
|
-
};
|
|
45
63
|
});
|
|
46
|
-
const disabled = $derived(providedDisabled
|
|
64
|
+
const disabled = $derived(providedDisabled.value || false);
|
|
47
65
|
const slot = $derived({ disabled });
|
|
48
66
|
const ourProps = $derived({ id, ...stateFromSlot(slot) });
|
|
49
67
|
</script>
|
|
@@ -9,13 +9,22 @@ export type DescriptionProps<TTag extends keyof SvelteHTMLElements = typeof DEFA
|
|
|
9
9
|
]>;
|
|
10
10
|
};
|
|
11
11
|
declare const DEFAULT_DESCRIPTION_TAG: "p";
|
|
12
|
+
interface SharedData {
|
|
13
|
+
slot?: {};
|
|
14
|
+
name?: string;
|
|
15
|
+
props?: Record<string, any>;
|
|
16
|
+
}
|
|
12
17
|
export type DescriptionContext = {
|
|
13
|
-
|
|
14
|
-
register
|
|
15
|
-
|
|
18
|
+
value: string | undefined;
|
|
19
|
+
register(value: string): () => void;
|
|
20
|
+
} & SharedData;
|
|
21
|
+
export declare function useDescriptionContext(): DescriptionContext;
|
|
22
|
+
export declare function useDescribedBy(): {
|
|
23
|
+
readonly value: string | undefined;
|
|
16
24
|
};
|
|
17
|
-
export declare const
|
|
18
|
-
|
|
25
|
+
export declare const useDescriptions: (options?: SharedData & {
|
|
26
|
+
inherit?: boolean;
|
|
27
|
+
}) => DescriptionContext;
|
|
19
28
|
declare class __sveltets_Render<TTag extends keyof SvelteHTMLElements> {
|
|
20
29
|
props(): DescriptionProps<TTag>;
|
|
21
30
|
events(): {} & {
|
package/dist/field/Field.svelte
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
<script lang="ts" context="module">const DEFAULT_FIELD_TAG = "div";
|
|
2
2
|
</script>
|
|
3
3
|
|
|
4
|
-
<script lang="ts" generics="TTag extends keyof SvelteHTMLElements">import {
|
|
5
|
-
import { createLabelContext } from "../label/Label.svelte";
|
|
6
|
-
import { getDisabledContext } from "../utils/disabled.js";
|
|
4
|
+
<script lang="ts" generics="TTag extends keyof SvelteHTMLElements">import { useDisabled } from "../hooks/use-disabled.js";
|
|
7
5
|
import { createIdContext } from "../utils/id.js";
|
|
8
6
|
import { stateFromSlot } from "../utils/state.js";
|
|
9
7
|
import { nanoid } from "nanoid";
|
|
10
8
|
import { setContext } from "svelte";
|
|
9
|
+
import { useLabels } from "../label/Label.svelte";
|
|
10
|
+
import { useDescriptions } from "../description/Description.svelte";
|
|
11
11
|
let { as, disabled: ownDisabled = false, children, ...theirProps } = $props();
|
|
12
12
|
const inputId = `headlessui-control-${nanoid(8)}`;
|
|
13
13
|
createIdContext(inputId);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const providedDisabled =
|
|
17
|
-
const disabled = $derived(providedDisabled
|
|
18
|
-
setContext("
|
|
19
|
-
get
|
|
14
|
+
useLabels();
|
|
15
|
+
useDescriptions();
|
|
16
|
+
const providedDisabled = useDisabled();
|
|
17
|
+
const disabled = $derived(providedDisabled.value || ownDisabled);
|
|
18
|
+
setContext("DisabledContext", {
|
|
19
|
+
get value() {
|
|
20
20
|
return disabled;
|
|
21
21
|
}
|
|
22
22
|
});
|
|
@@ -2,26 +2,26 @@
|
|
|
2
2
|
</script>
|
|
3
3
|
|
|
4
4
|
<script lang="ts" generics="TTag extends keyof SvelteHTMLElements">import { setContext } from "svelte";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
5
|
+
import { useDisabled } from "../hooks/use-disabled.js";
|
|
6
|
+
import { useLabels } from "../label/Label.svelte";
|
|
7
7
|
let { as, disabled: ownDisabled = false, children, ...theirProps } = $props();
|
|
8
|
-
const providedDisabled =
|
|
9
|
-
const disabled = $derived(providedDisabled
|
|
10
|
-
setContext("
|
|
11
|
-
get
|
|
8
|
+
const providedDisabled = useDisabled();
|
|
9
|
+
const disabled = $derived(providedDisabled.value || ownDisabled);
|
|
10
|
+
setContext("DisabledContext", {
|
|
11
|
+
get value() {
|
|
12
12
|
return disabled;
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
15
|
const tag = $state(as ?? DEFAULT_FIELDSET_TAG);
|
|
16
|
-
const
|
|
16
|
+
const labelledBy = useLabels();
|
|
17
17
|
const slot = $derived({ disabled });
|
|
18
18
|
const ourProps = $derived(
|
|
19
19
|
tag === "fieldset" ? {
|
|
20
|
-
"aria-labelledby":
|
|
20
|
+
"aria-labelledby": labelledBy.value,
|
|
21
21
|
disabled: disabled || void 0
|
|
22
22
|
} : {
|
|
23
23
|
role: "group",
|
|
24
|
-
"aria-labelledby":
|
|
24
|
+
"aria-labelledby": labelledBy.value,
|
|
25
25
|
"aria-disabled": disabled || void 0
|
|
26
26
|
}
|
|
27
27
|
);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function adjustScrollbarPadding() {
|
|
2
|
+
let scrollbarWidthBefore;
|
|
3
|
+
return {
|
|
4
|
+
before({ doc }) {
|
|
5
|
+
let documentElement = doc.documentElement;
|
|
6
|
+
let ownerWindow = doc.defaultView ?? window;
|
|
7
|
+
scrollbarWidthBefore = Math.max(0, ownerWindow.innerWidth - documentElement.clientWidth);
|
|
8
|
+
},
|
|
9
|
+
after({ doc, d }) {
|
|
10
|
+
let documentElement = doc.documentElement;
|
|
11
|
+
// Account for the change in scrollbar width
|
|
12
|
+
// NOTE: This is a bit of a hack, but it's the only way to do this
|
|
13
|
+
let scrollbarWidthAfter = Math.max(0, documentElement.clientWidth - documentElement.offsetWidth);
|
|
14
|
+
let scrollbarWidth = Math.max(0, scrollbarWidthBefore - scrollbarWidthAfter);
|
|
15
|
+
d.style(documentElement, "paddingRight", `${scrollbarWidth}px`);
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
}
|