@pzerelles/headlessui-svelte 2.1.2-next.31 → 2.1.2-next.32

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 (113) hide show
  1. package/dist/button/Button.svelte +84 -54
  2. package/dist/button/Button.svelte.d.ts +2 -3
  3. package/dist/checkbox/Checkbox.svelte +173 -120
  4. package/dist/checkbox/Checkbox.svelte.d.ts +2 -3
  5. package/dist/close-button/CloseButton.svelte +12 -6
  6. package/dist/close-button/CloseButton.svelte.d.ts +7 -8
  7. package/dist/combobox/Combobox.svelte +50 -3
  8. package/dist/data-interactive/DataInteractive.svelte +55 -29
  9. package/dist/data-interactive/DataInteractive.svelte.d.ts +2 -3
  10. package/dist/description/Description.svelte +31 -21
  11. package/dist/description/Description.svelte.d.ts +1 -2
  12. package/dist/dialog/Dialog.svelte +320 -228
  13. package/dist/dialog/Dialog.svelte.d.ts +2 -3
  14. package/dist/dialog/DialogBackdrop.svelte +30 -13
  15. package/dist/dialog/DialogBackdrop.svelte.d.ts +2 -3
  16. package/dist/dialog/DialogPanel.svelte +49 -26
  17. package/dist/dialog/DialogPanel.svelte.d.ts +2 -3
  18. package/dist/dialog/DialogTitle.svelte +38 -23
  19. package/dist/dialog/DialogTitle.svelte.d.ts +2 -3
  20. package/dist/field/Field.svelte +47 -25
  21. package/dist/field/Field.svelte.d.ts +1 -2
  22. package/dist/fieldset/Fieldset.svelte +50 -29
  23. package/dist/fieldset/Fieldset.svelte.d.ts +1 -2
  24. package/dist/focus-trap/FocusTrap.svelte +419 -283
  25. package/dist/focus-trap/FocusTrap.svelte.d.ts +1 -2
  26. package/dist/input/Input.svelte +84 -53
  27. package/dist/input/Input.svelte.d.ts +2 -3
  28. package/dist/internal/FloatingProvider.svelte +14 -9
  29. package/dist/internal/FocusSentinel.svelte +16 -8
  30. package/dist/internal/ForcePortalRoot.svelte +7 -3
  31. package/dist/internal/FormFields.svelte +47 -34
  32. package/dist/internal/FormFieldsProvider.svelte +9 -5
  33. package/dist/internal/FormResolver.svelte +20 -15
  34. package/dist/internal/Hidden.svelte +50 -29
  35. package/dist/internal/Hidden.svelte.d.ts +1 -2
  36. package/dist/internal/MainTreeProvider.svelte +89 -36
  37. package/dist/internal/Portal.svelte +18 -14
  38. package/dist/label/Label.svelte +93 -58
  39. package/dist/label/Label.svelte.d.ts +1 -2
  40. package/dist/legend/Legend.svelte +12 -3
  41. package/dist/listbox/Listbox.svelte +525 -387
  42. package/dist/listbox/Listbox.svelte.d.ts +2 -3
  43. package/dist/listbox/ListboxButton.svelte +173 -127
  44. package/dist/listbox/ListboxButton.svelte.d.ts +2 -3
  45. package/dist/listbox/ListboxOption.svelte +170 -129
  46. package/dist/listbox/ListboxOption.svelte.d.ts +2 -3
  47. package/dist/listbox/ListboxOptions.svelte +400 -304
  48. package/dist/listbox/ListboxOptions.svelte.d.ts +2 -3
  49. package/dist/listbox/ListboxSelectedOption.svelte +38 -15
  50. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +1 -2
  51. package/dist/menu/Menu.svelte +77 -51
  52. package/dist/menu/Menu.svelte.d.ts +2 -3
  53. package/dist/menu/MenuButton.svelte +157 -117
  54. package/dist/menu/MenuButton.svelte.d.ts +2 -3
  55. package/dist/menu/MenuHeading.svelte +32 -14
  56. package/dist/menu/MenuHeading.svelte.d.ts +1 -2
  57. package/dist/menu/MenuItem.svelte +142 -107
  58. package/dist/menu/MenuItem.svelte.d.ts +2 -3
  59. package/dist/menu/MenuItems.svelte +301 -229
  60. package/dist/menu/MenuItems.svelte.d.ts +2 -3
  61. package/dist/menu/MenuSection.svelte +24 -9
  62. package/dist/menu/MenuSection.svelte.d.ts +1 -2
  63. package/dist/menu/MenuSeparator.svelte +17 -4
  64. package/dist/menu/MenuSeparator.svelte.d.ts +1 -2
  65. package/dist/popover/Popover.svelte +216 -150
  66. package/dist/popover/Popover.svelte.d.ts +2 -3
  67. package/dist/popover/PopoverBackdrop.svelte +67 -41
  68. package/dist/popover/PopoverBackdrop.svelte.d.ts +2 -3
  69. package/dist/popover/PopoverButton.svelte +292 -212
  70. package/dist/popover/PopoverButton.svelte.d.ts +2 -3
  71. package/dist/popover/PopoverGroup.svelte +62 -35
  72. package/dist/popover/PopoverGroup.svelte.d.ts +1 -2
  73. package/dist/popover/PopoverPanel.svelte +311 -229
  74. package/dist/popover/PopoverPanel.svelte.d.ts +2 -3
  75. package/dist/portal/InternalPortal.svelte +141 -85
  76. package/dist/portal/InternalPortal.svelte.d.ts +1 -2
  77. package/dist/portal/Portal.svelte +5 -2
  78. package/dist/portal/PortalGroup.svelte +30 -9
  79. package/dist/portal/PortalGroup.svelte.d.ts +1 -2
  80. package/dist/select/Select.svelte +98 -68
  81. package/dist/select/Select.svelte.d.ts +2 -3
  82. package/dist/switch/Switch.svelte +179 -132
  83. package/dist/switch/Switch.svelte.d.ts +2 -3
  84. package/dist/switch/SwitchGroup.svelte +44 -31
  85. package/dist/switch/SwitchGroup.svelte.d.ts +1 -2
  86. package/dist/tabs/Tab.svelte +194 -142
  87. package/dist/tabs/Tab.svelte.d.ts +2 -3
  88. package/dist/tabs/TabGroup.svelte +86 -56
  89. package/dist/tabs/TabGroup.svelte.d.ts +2 -3
  90. package/dist/tabs/TabList.svelte +31 -11
  91. package/dist/tabs/TabList.svelte.d.ts +2 -3
  92. package/dist/tabs/TabPanel.svelte +67 -42
  93. package/dist/tabs/TabPanel.svelte.d.ts +2 -3
  94. package/dist/tabs/TabPanels.svelte +18 -7
  95. package/dist/tabs/TabPanels.svelte.d.ts +2 -3
  96. package/dist/textarea/Textarea.svelte +84 -53
  97. package/dist/textarea/Textarea.svelte.d.ts +2 -3
  98. package/dist/transition/InternalTransitionChild.svelte +259 -170
  99. package/dist/transition/InternalTransitionChild.svelte.d.ts +2 -3
  100. package/dist/transition/Transition.svelte +96 -66
  101. package/dist/transition/Transition.svelte.d.ts +2 -3
  102. package/dist/transition/TransitionChild.svelte +31 -11
  103. package/dist/transition/TransitionChild.svelte.d.ts +2 -3
  104. package/dist/utils/DisabledProvider.svelte +7 -3
  105. package/dist/utils/ElementOrComponent.svelte +46 -23
  106. package/dist/utils/ElementOrComponent.svelte.d.ts +8 -10
  107. package/dist/utils/Generic.svelte +30 -19
  108. package/dist/utils/Generic.svelte.d.ts +6 -7
  109. package/dist/utils/StableCollection.svelte +54 -36
  110. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +27 -12
  111. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +88 -44
  112. package/dist/utils/types.d.ts +4 -5
  113. package/package.json +1 -1
@@ -1,66 +1,101 @@
1
- <script lang="ts" module>let DEFAULT_LABEL_TAG = "label";
2
- </script>
1
+ <script lang="ts" module>
2
+ import type { ElementType, Props, PropsOf } from "../utils/types.js"
3
+
4
+ let DEFAULT_LABEL_TAG = "label" as const
3
5
 
4
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_LABEL_TAG">import { onMount } from "svelte";
5
- import { useProvidedId, htmlid } from "../utils/id.js";
6
- import { useDisabled } from "../hooks/use-disabled.js";
7
- import { stateFromSlot } from "../utils/state.js";
8
- import ElementOrComponent from "../utils/ElementOrComponent.svelte";
9
- import { useLabelContext } from "./context.svelte.js";
10
- const internalId = htmlid();
11
- const context = useLabelContext();
12
- const providedHtmlFor = useProvidedId();
13
- const providedDisabled = useDisabled();
14
- let {
15
- ref = $bindable(),
16
- id = `headlessui-label-${internalId}`,
17
- htmlFor = providedHtmlFor,
18
- passive = false,
19
- ...theirOriginalProps
20
- } = $props();
21
- onMount(() => {
22
- context.register(id);
23
- });
24
- let handleClick = (e) => {
25
- let current = e.currentTarget;
26
- if (current instanceof HTMLLabelElement) {
27
- e.preventDefault();
6
+ export type LabelProps<TTag extends ElementType = typeof DEFAULT_LABEL_TAG> = Props<TTag> & {
7
+ passive?: boolean
8
+ htmlFor?: string
28
9
  }
29
- console.log("click", providedHtmlFor);
30
- if (current instanceof HTMLLabelElement) {
31
- let target = document.getElementById(current.getAttribute("for") ?? "");
32
- if (target) {
33
- let actuallyDisabled = target.getAttribute("disabled");
34
- if (actuallyDisabled === "true" || actuallyDisabled === "") {
35
- return;
36
- }
37
- let ariaDisabled = target.getAttribute("aria-disabled");
38
- if (ariaDisabled === "true" || ariaDisabled === "") {
39
- return;
40
- }
41
- if (target instanceof HTMLInputElement && (target.type === "radio" || target.type === "checkbox") || target.role === "radio" || target.role === "checkbox" || target.role === "switch") {
42
- target.click();
10
+ </script>
11
+
12
+ <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_LABEL_TAG">
13
+ import { onMount } from "svelte"
14
+ import { useProvidedId, htmlid } from "../utils/id.js"
15
+ import { useDisabled } from "../hooks/use-disabled.js"
16
+ import { stateFromSlot } from "../utils/state.js"
17
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte"
18
+ import { useLabelContext } from "./context.svelte.js"
19
+
20
+ const internalId = htmlid()
21
+ const context = useLabelContext()
22
+ const providedHtmlFor = useProvidedId()
23
+ const providedDisabled = useDisabled()
24
+
25
+ let {
26
+ ref = $bindable(),
27
+ id = `headlessui-label-${internalId}` as PropsOf<TTag>["id"],
28
+ htmlFor = providedHtmlFor,
29
+ passive = false,
30
+ ...theirOriginalProps
31
+ }: { as?: TTag } & LabelProps<TTag> = $props()
32
+
33
+ onMount(() => {
34
+ context.register(id)
35
+ })
36
+
37
+ let handleClick = (e: MouseEvent) => {
38
+ let current = e.currentTarget
39
+
40
+ // Labels connected to 'real' controls will already click the element. But we don't know that
41
+ // ahead of time. This will prevent the default click, such that only a single click happens
42
+ // instead of two. Otherwise this results in a visual no-op.
43
+ if (current instanceof HTMLLabelElement) {
44
+ e.preventDefault()
45
+ }
46
+
47
+ console.log("click", providedHtmlFor)
48
+
49
+ if (current instanceof HTMLLabelElement) {
50
+ let target = document.getElementById(current.getAttribute("for") ?? "")
51
+ if (target) {
52
+ // Bail if the target element is disabled
53
+ let actuallyDisabled = target.getAttribute("disabled")
54
+ if (actuallyDisabled === "true" || actuallyDisabled === "") {
55
+ return
56
+ }
57
+
58
+ let ariaDisabled = target.getAttribute("aria-disabled")
59
+ if (ariaDisabled === "true" || ariaDisabled === "") {
60
+ return
61
+ }
62
+
63
+ // Ensure we click the element this label is bound to. This is necessary for elements that
64
+ // immediately require state changes, e.g.: Radio & Checkbox inputs need to be checked (or
65
+ // unchecked).
66
+ if (
67
+ (target instanceof HTMLInputElement && (target.type === "radio" || target.type === "checkbox")) ||
68
+ target.role === "radio" ||
69
+ target.role === "checkbox" ||
70
+ target.role === "switch"
71
+ ) {
72
+ target.click()
73
+ }
74
+
75
+ // Move focus to the element, this allows you to start using keyboard shortcuts since the
76
+ // bound element is now focused.
77
+ target.focus({ preventScroll: true })
43
78
  }
44
- target.focus({ preventScroll: true });
45
79
  }
46
80
  }
47
- };
48
- const disabled = $derived(providedDisabled.current ?? false);
49
- const slot = $derived({ disabled });
50
- const ourProps = $derived({
51
- id,
52
- for: passive ? void 0 : htmlFor,
53
- onclick: passive ? void 0 : handleClick,
54
- ...stateFromSlot(slot)
55
- });
56
- const theirProps = $derived.by(() => {
57
- if (passive) {
58
- const { onclick: _, ...props } = theirOriginalProps;
59
- return props;
60
- } else {
61
- return theirOriginalProps;
62
- }
63
- });
81
+
82
+ const disabled = $derived(providedDisabled.current ?? false)
83
+ const slot = $derived({ disabled })
84
+ const ourProps = $derived({
85
+ id,
86
+ for: passive ? undefined : htmlFor,
87
+ onclick: passive ? undefined : handleClick,
88
+ ...stateFromSlot(slot),
89
+ })
90
+
91
+ const theirProps = $derived.by(() => {
92
+ if (passive) {
93
+ const { onclick: _, ...props } = theirOriginalProps
94
+ return props
95
+ } else {
96
+ return theirOriginalProps
97
+ }
98
+ })
64
99
  </script>
65
100
 
66
101
  <ElementOrComponent
@@ -9,8 +9,7 @@ declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_LABEL_
9
9
  as?: TTag | undefined;
10
10
  } & (Exclude<keyof PropsOf<TTag>, "slot" | "as" | "children" | "class" | "ref"> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
11
11
  children?: import("svelte").Snippet<[{
12
- slot: {};
13
- props: Record<string, any>;
12
+ props?: Record<string, any>;
14
13
  }]> | undefined;
15
14
  class?: string | ((bag: {}) => string) | null | undefined;
16
15
  ref?: HTMLElement;
@@ -1,8 +1,17 @@
1
- <script lang="ts" module>import { Label } from "../index.js";
2
- const DEFAULT_LEGEND_TAG = "div";
1
+ <script lang="ts" module>
2
+ import { Label } from "../index.js"
3
+ import type { Props } from "../utils/types.js"
4
+
5
+ const DEFAULT_LEGEND_TAG = "div" as const
6
+
7
+ type LegendRenderPropArg = {}
8
+ type LegendPropsWeControl = never
9
+
10
+ export type LegendProps = Props<typeof DEFAULT_LEGEND_TAG, LegendRenderPropArg, LegendPropsWeControl, {}>
3
11
  </script>
4
12
 
5
- <script lang="ts">let { ...props } = $props();
13
+ <script lang="ts">
14
+ let { ...props }: LegendProps = $props()
6
15
  </script>
7
16
 
8
17
  <Label as="div" {...props} />