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

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 (123) hide show
  1. package/dist/button/Button.svelte +84 -55
  2. package/dist/button/Button.svelte.d.ts +4 -32
  3. package/dist/checkbox/Checkbox.svelte +177 -121
  4. package/dist/checkbox/Checkbox.svelte.d.ts +14 -32
  5. package/dist/close-button/CloseButton.svelte +10 -7
  6. package/dist/close-button/CloseButton.svelte.d.ts +2 -44
  7. package/dist/data-interactive/DataInteractive.svelte +49 -37
  8. package/dist/data-interactive/DataInteractive.svelte.d.ts +7 -30
  9. package/dist/description/Description.svelte +35 -22
  10. package/dist/description/Description.svelte.d.ts +7 -28
  11. package/dist/dialog/Dialog.svelte +326 -232
  12. package/dist/dialog/Dialog.svelte.d.ts +4 -42
  13. package/dist/dialog/DialogBackdrop.svelte +33 -16
  14. package/dist/dialog/DialogBackdrop.svelte.d.ts +4 -29
  15. package/dist/dialog/DialogPanel.svelte +60 -29
  16. package/dist/dialog/DialogPanel.svelte.d.ts +4 -30
  17. package/dist/dialog/DialogTitle.svelte +51 -24
  18. package/dist/dialog/DialogTitle.svelte.d.ts +6 -27
  19. package/dist/field/Field.svelte +44 -28
  20. package/dist/field/Field.svelte.d.ts +4 -30
  21. package/dist/fieldset/Fieldset.svelte +48 -30
  22. package/dist/fieldset/Fieldset.svelte.d.ts +5 -31
  23. package/dist/focus-trap/FocusTrap.svelte +430 -298
  24. package/dist/focus-trap/FocusTrap.svelte.d.ts +5 -34
  25. package/dist/hooks/use-inert-others.svelte.js +10 -10
  26. package/dist/hooks/use-resolve-button-type.svelte.js +0 -1
  27. package/dist/input/Input.svelte +95 -54
  28. package/dist/input/Input.svelte.d.ts +13 -27
  29. package/dist/internal/FloatingProvider.svelte +14 -9
  30. package/dist/internal/FocusSentinel.svelte +49 -40
  31. package/dist/internal/ForcePortalRoot.svelte +7 -3
  32. package/dist/internal/FormFields.svelte +47 -34
  33. package/dist/internal/FormFieldsProvider.svelte +9 -5
  34. package/dist/internal/FormResolver.svelte +25 -16
  35. package/dist/internal/Hidden.svelte +45 -38
  36. package/dist/internal/Hidden.svelte.d.ts +4 -30
  37. package/dist/internal/MainTreeProvider.svelte +90 -37
  38. package/dist/internal/Portal.svelte +18 -14
  39. package/dist/label/Label.svelte +100 -59
  40. package/dist/label/Label.svelte.d.ts +7 -32
  41. package/dist/legend/Legend.svelte +27 -4
  42. package/dist/legend/Legend.svelte.d.ts +4 -3
  43. package/dist/listbox/Listbox.svelte +518 -391
  44. package/dist/listbox/Listbox.svelte.d.ts +11 -35
  45. package/dist/listbox/ListboxButton.svelte +175 -128
  46. package/dist/listbox/ListboxButton.svelte.d.ts +5 -32
  47. package/dist/listbox/ListboxOption.svelte +171 -130
  48. package/dist/listbox/ListboxOption.svelte.d.ts +12 -26
  49. package/dist/listbox/ListboxOptions.svelte +403 -305
  50. package/dist/listbox/ListboxOptions.svelte.d.ts +4 -38
  51. package/dist/listbox/ListboxSelectedOption.svelte +40 -19
  52. package/dist/listbox/ListboxSelectedOption.svelte.d.ts +8 -33
  53. package/dist/menu/Menu.svelte +76 -52
  54. package/dist/menu/Menu.svelte.d.ts +3 -31
  55. package/dist/menu/MenuButton.svelte +158 -118
  56. package/dist/menu/MenuButton.svelte.d.ts +4 -34
  57. package/dist/menu/MenuHeading.svelte +34 -15
  58. package/dist/menu/MenuHeading.svelte.d.ts +4 -31
  59. package/dist/menu/MenuItem.svelte +143 -108
  60. package/dist/menu/MenuItem.svelte.d.ts +5 -32
  61. package/dist/menu/MenuItems.svelte +301 -230
  62. package/dist/menu/MenuItems.svelte.d.ts +4 -38
  63. package/dist/menu/MenuSection.svelte +26 -10
  64. package/dist/menu/MenuSection.svelte.d.ts +5 -29
  65. package/dist/menu/MenuSeparator.svelte +20 -5
  66. package/dist/menu/MenuSeparator.svelte.d.ts +5 -28
  67. package/dist/popover/Popover.svelte +217 -151
  68. package/dist/popover/Popover.svelte.d.ts +4 -30
  69. package/dist/popover/PopoverBackdrop.svelte +71 -42
  70. package/dist/popover/PopoverBackdrop.svelte.d.ts +6 -34
  71. package/dist/popover/PopoverButton.svelte +302 -222
  72. package/dist/popover/PopoverButton.svelte.d.ts +6 -29
  73. package/dist/popover/PopoverGroup.svelte +64 -36
  74. package/dist/popover/PopoverGroup.svelte.d.ts +5 -28
  75. package/dist/popover/PopoverPanel.svelte +335 -248
  76. package/dist/popover/PopoverPanel.svelte.d.ts +5 -36
  77. package/dist/popover/index.d.ts +1 -1
  78. package/dist/portal/InternalPortal.svelte +143 -86
  79. package/dist/portal/InternalPortal.svelte.d.ts +4 -30
  80. package/dist/portal/Portal.svelte +8 -4
  81. package/dist/portal/Portal.svelte.d.ts +2 -18
  82. package/dist/portal/PortalGroup.svelte +23 -10
  83. package/dist/portal/PortalGroup.svelte.d.ts +3 -31
  84. package/dist/select/Select.svelte +100 -69
  85. package/dist/select/Select.svelte.d.ts +5 -32
  86. package/dist/switch/Switch.svelte +181 -133
  87. package/dist/switch/Switch.svelte.d.ts +5 -38
  88. package/dist/switch/SwitchGroup.svelte +45 -32
  89. package/dist/switch/SwitchGroup.svelte.d.ts +7 -28
  90. package/dist/tabs/Tab.svelte +195 -143
  91. package/dist/tabs/Tab.svelte.d.ts +4 -32
  92. package/dist/tabs/TabGroup.svelte +87 -57
  93. package/dist/tabs/TabGroup.svelte.d.ts +4 -34
  94. package/dist/tabs/TabList.svelte +31 -12
  95. package/dist/tabs/TabList.svelte.d.ts +5 -28
  96. package/dist/tabs/TabPanel.svelte +69 -44
  97. package/dist/tabs/TabPanel.svelte.d.ts +4 -34
  98. package/dist/tabs/TabPanels.svelte +19 -8
  99. package/dist/tabs/TabPanels.svelte.d.ts +5 -27
  100. package/dist/textarea/Textarea.svelte +87 -54
  101. package/dist/textarea/Textarea.svelte.d.ts +13 -27
  102. package/dist/transition/InternalTransitionChild.svelte +267 -171
  103. package/dist/transition/InternalTransitionChild.svelte.d.ts +3 -33
  104. package/dist/transition/Transition.svelte +88 -67
  105. package/dist/transition/Transition.svelte.d.ts +3 -36
  106. package/dist/transition/TransitionChild.svelte +31 -12
  107. package/dist/transition/TransitionChild.svelte.d.ts +8 -35
  108. package/dist/transition/context.svelte.js +7 -7
  109. package/dist/utils/DisabledProvider.svelte +7 -3
  110. package/dist/utils/ElementOrComponent.svelte +88 -24
  111. package/dist/utils/ElementOrComponent.svelte.d.ts +32 -27
  112. package/dist/utils/StableCollection.svelte +54 -36
  113. package/dist/utils/floating-ui/svelte/components/FloatingNode.svelte +27 -12
  114. package/dist/utils/floating-ui/svelte/components/FloatingTree.svelte +88 -44
  115. package/dist/utils/state.js +4 -4
  116. package/dist/utils/types.d.ts +14 -12
  117. package/package.json +12 -12
  118. package/dist/combobox/Combobox.svelte +0 -6
  119. package/dist/combobox/Combobox.svelte.d.ts +0 -50
  120. package/dist/utils/Generic.svelte +0 -46
  121. package/dist/utils/Generic.svelte.d.ts +0 -32
  122. package/dist/utils/alternative-types.d.ts +0 -20
  123. package/dist/utils/alternative-types.js +0 -1
@@ -1,44 +1,15 @@
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
6
  type FocusTrapRenderPropArg = {};
7
- type FocusTrapPropsWeControl = never;
8
- export type FocusTrapProps<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG> = Props<TTag, FocusTrapRenderPropArg, FocusTrapPropsWeControl, {
7
+ export type FocusTrapProps = Props<typeof DEFAULT_FOCUS_TRAP_TAG, FocusTrapRenderPropArg, {
8
+ element?: HTMLElement;
9
9
  initialFocus?: HTMLElement;
10
10
  initialFocusFallback?: HTMLElement;
11
11
  features?: FocusTrapFeatures;
12
12
  containers?: Containers;
13
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>, ("slot" | "as" | "children" | "class" | "ref") | "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("svelte").Snippet<[{
19
- slot: FocusTrapRenderPropArg;
20
- props: Record<string, any>;
21
- }]> | undefined;
22
- class?: string | ((bag: FocusTrapRenderPropArg) => string) | null | undefined;
23
- ref?: HTMLElement;
24
- } & {
25
- initialFocus?: HTMLElement;
26
- initialFocusFallback?: HTMLElement;
27
- features?: FocusTrapFeatures;
28
- containers?: Containers;
29
- };
30
- events(): {};
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']> & {}): ReturnType<__sveltets_Render<TTag>['exports']>;
40
- z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
41
- }
42
- declare const FocusTrap: $$IsomorphicComponent;
43
- type FocusTrap<TTag extends ElementType = typeof DEFAULT_FOCUS_TRAP_TAG> = InstanceType<typeof FocusTrap<TTag>>;
14
+ declare const FocusTrap: import("svelte").Component<FocusTrapProps, {}, "element">;
44
15
  export default FocusTrap;
@@ -5,7 +5,7 @@ const originals = new Map();
5
5
  const counts = new Map();
6
6
  function markInert(element) {
7
7
  // Increase count
8
- let count = counts.get(element) ?? 0;
8
+ const count = counts.get(element) ?? 0;
9
9
  counts.set(element, count + 1);
10
10
  // Already marked as inert, no need to do it again
11
11
  if (count !== 0)
@@ -22,7 +22,7 @@ function markInert(element) {
22
22
  }
23
23
  function markNotInert(element) {
24
24
  // Decrease counts
25
- let count = counts.get(element) ?? 1; // Should always exist
25
+ const count = counts.get(element) ?? 1; // Should always exist
26
26
  if (count === 1)
27
27
  counts.delete(element); // We are the last one, so we can delete the count
28
28
  else
@@ -30,7 +30,7 @@ function markNotInert(element) {
30
30
  // Not the last one, so we don't restore the original values (yet)
31
31
  if (count !== 1)
32
32
  return;
33
- let original = originals.get(element);
33
+ const original = originals.get(element);
34
34
  if (!original)
35
35
  return; // Should never happen
36
36
  // Restore original values
@@ -70,7 +70,7 @@ function markNotInert(element) {
70
70
  export function useInertOthers(options) {
71
71
  const { enabled, elements } = $derived(options);
72
72
  const { allowed, disallowed } = $derived(elements ?? {});
73
- let isTopLayer = useIsTopLayer({
73
+ const isTopLayer = useIsTopLayer({
74
74
  get enabled() {
75
75
  return enabled;
76
76
  },
@@ -79,25 +79,25 @@ export function useInertOthers(options) {
79
79
  $effect(() => {
80
80
  if (!isTopLayer.value)
81
81
  return;
82
- let d = disposables();
82
+ const d = disposables();
83
83
  // Mark all disallowed elements as inert
84
- for (let element of disallowed ?? []) {
84
+ for (const element of disallowed ?? []) {
85
85
  if (!element)
86
86
  continue;
87
87
  d.add(markInert(element));
88
88
  }
89
89
  // Mark all siblings of allowed elements (and parents) as inert
90
- let allowedElements = allowed ?? [];
91
- for (let element of allowedElements) {
90
+ const allowedElements = allowed ?? [];
91
+ for (const element of allowedElements) {
92
92
  if (!element)
93
93
  continue;
94
- let ownerDocument = getOwnerDocument(element);
94
+ const ownerDocument = getOwnerDocument(element);
95
95
  if (!ownerDocument)
96
96
  continue;
97
97
  let parent = element.parentElement;
98
98
  while (parent && parent !== ownerDocument.body) {
99
99
  // Mark all siblings as inert
100
- for (let node of parent.children) {
100
+ for (const node of parent.children) {
101
101
  // If the node contains any of the elements we should not mark it as inert
102
102
  // because it would make the elements unreachable.
103
103
  if (node.tagName.toLowerCase() === "svelte:fragment" || allowedElements.some((el) => node.contains(el)))
@@ -1,4 +1,3 @@
1
- import { untrack } from "svelte";
2
1
  function resolveType(props) {
3
2
  if (props.type)
4
3
  return props.type;
@@ -1,59 +1,100 @@
1
- <script lang="ts" module>const DEFAULT_INPUT_TAG = "input";
2
- </script>
1
+ <script lang="ts" module>
2
+ import type { Props } from "../utils/types.js"
3
+ import type { SvelteHTMLElements } from "svelte/elements"
3
4
 
4
- <script lang="ts" generics="TTag extends ElementType = typeof DEFAULT_INPUT_TAG, TValue = string">import { htmlid } from "../utils/id.js";
5
- import { useDisabled } from "../hooks/use-disabled.js";
6
- import { useProvidedId } from "../utils/id.js";
7
- import { useLabelledBy } from "../label/context.svelte.js";
8
- import { useDescribedBy } from "../description/context.svelte.js";
9
- import { useHover } from "../hooks/use-hover.svelte.js";
10
- import { useFocusRing } from "../hooks/use-focus-ring.svelte.js";
11
- import { mergeProps } from "../utils/render.js";
12
- import ElementOrComponent from "../utils/ElementOrComponent.svelte";
13
- const internalId = htmlid();
14
- const providedId = useProvidedId();
15
- const providedDisabled = useDisabled();
16
- let {
17
- ref = $bindable(),
18
- value = $bindable(),
19
- id = providedId || `headlessui-input-${internalId}`,
20
- disabled: theirDisabled = false,
21
- autofocus = false,
22
- invalid = false,
23
- ...theirProps
24
- } = $props();
25
- const disabled = $derived(providedDisabled.current || theirDisabled);
26
- const labelledBy = useLabelledBy();
27
- const describedBy = useDescribedBy();
28
- const { isHovered: hover, hoverProps } = $derived(
29
- useHover({
30
- get disabled() {
31
- return disabled;
32
- }
33
- })
34
- );
35
- const { isFocusVisible: focus, focusProps } = $derived(
36
- useFocusRing({
37
- get autofocus() {
38
- return autofocus;
39
- }
40
- })
41
- );
42
- const ourProps = $derived(
43
- mergeProps(
5
+ const DEFAULT_INPUT_TAG = "input" as const
6
+
7
+ type InputRenderPropArg = {
8
+ disabled: boolean
9
+ hover: boolean
10
+ focus: boolean
11
+ autofocus: boolean
12
+ invalid: boolean
13
+ }
14
+ type InputPropsWeControl = "aria-labelledby" | "aria-describedby"
15
+
16
+ export type InputProps<TValue = string> = Props<
17
+ typeof DEFAULT_INPUT_TAG,
18
+ InputRenderPropArg,
44
19
  {
45
- id,
46
- "aria-labelledby": labelledBy?.value,
47
- "aria-describedby": describedBy?.value,
48
- "aria-invalid": invalid ? "" : void 0,
49
- disabled: disabled || void 0,
50
- autofocus
51
- },
52
- focusProps,
53
- hoverProps
20
+ element?: HTMLElement
21
+ id?: string
22
+ value?: TValue
23
+ disabled?: boolean
24
+ invalid?: boolean
25
+ autofocus?: boolean
26
+ }
27
+ >
28
+ </script>
29
+
30
+ <script lang="ts" generics="TValue = string">
31
+ import { htmlid } from "../utils/id.js"
32
+ import { useDisabled } from "../hooks/use-disabled.js"
33
+ import { useProvidedId } from "../utils/id.js"
34
+ import { useLabelledBy } from "../label/context.svelte.js"
35
+ import { useDescribedBy } from "../description/context.svelte.js"
36
+ import { useHover } from "../hooks/use-hover.svelte.js"
37
+ import { useFocusRing } from "../hooks/use-focus-ring.svelte.js"
38
+ import { mergeProps } from "../utils/render.js"
39
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte"
40
+
41
+ const internalId = htmlid()
42
+ const providedId = useProvidedId()
43
+ const providedDisabled = useDisabled()
44
+
45
+ let {
46
+ element = $bindable(),
47
+ value = $bindable(),
48
+ id = providedId || `headlessui-input-${internalId}`,
49
+ disabled: theirDisabled = false,
50
+ autofocus = false,
51
+ invalid = false,
52
+ ...theirProps
53
+ }: InputProps<TValue> = $props()
54
+ const disabled = $derived(providedDisabled.current || theirDisabled)
55
+
56
+ const labelledBy = useLabelledBy()
57
+ const describedBy = useDescribedBy()
58
+
59
+ const { isHovered: hover, hoverProps } = $derived(
60
+ useHover({
61
+ get disabled() {
62
+ return disabled
63
+ },
64
+ })
54
65
  )
55
- );
56
- const slot = $derived({ disabled, invalid, hover, focus, autofocus });
66
+ const { isFocusVisible: focus, focusProps } = $derived(
67
+ useFocusRing({
68
+ get autofocus() {
69
+ return autofocus
70
+ },
71
+ })
72
+ )
73
+
74
+ const ourProps = $derived(
75
+ mergeProps(
76
+ {
77
+ id,
78
+ "aria-labelledby": labelledBy?.value,
79
+ "aria-describedby": describedBy?.value,
80
+ "aria-invalid": invalid ? "" : undefined,
81
+ disabled: disabled || undefined,
82
+ autofocus,
83
+ },
84
+ focusProps,
85
+ hoverProps
86
+ )
87
+ )
88
+
89
+ const slot = $derived({ disabled, invalid, hover, focus, autofocus } satisfies InputRenderPropArg)
57
90
  </script>
58
91
 
59
- <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_INPUT_TAG} name="Input" bind:ref bind:value />
92
+ <ElementOrComponent
93
+ {ourProps}
94
+ {theirProps}
95
+ {slot}
96
+ defaultTag={DEFAULT_INPUT_TAG}
97
+ name="Input"
98
+ bind:element
99
+ bind:value
100
+ />
@@ -1,4 +1,4 @@
1
- import type { ElementType, Props, PropsOf } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare const DEFAULT_INPUT_TAG: "input";
3
3
  type InputRenderPropArg = {
4
4
  disabled: boolean;
@@ -7,42 +7,28 @@ type InputRenderPropArg = {
7
7
  autofocus: boolean;
8
8
  invalid: boolean;
9
9
  };
10
- type InputPropsWeControl = "aria-labelledby" | "aria-describedby";
11
- export type InputProps<TTag extends ElementType = typeof DEFAULT_INPUT_TAG, TValue = string> = Props<TTag, InputRenderPropArg, InputPropsWeControl, {
10
+ export type InputProps<TValue = string> = Props<typeof DEFAULT_INPUT_TAG, InputRenderPropArg, {
11
+ element?: HTMLElement;
12
+ id?: string;
12
13
  value?: TValue;
13
14
  disabled?: boolean;
14
15
  invalid?: boolean;
15
16
  autofocus?: boolean;
16
17
  }>;
17
- declare class __sveltets_Render<TTag extends ElementType = typeof DEFAULT_INPUT_TAG, TValue = string> {
18
- props(): {
19
- as?: TTag | undefined;
20
- value?: TValue | undefined;
21
- } & (Exclude<keyof PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "invalid" | "disabled" | "autofocus" | "value" | InputPropsWeControl> extends infer T extends keyof PropsOf<TTag> ? { [P in T]: PropsOf<TTag>[P]; } : never) & {
22
- children?: import("svelte").Snippet<[{
23
- slot: InputRenderPropArg;
24
- props: Record<string, any>;
25
- }]> | undefined;
26
- class?: string | ((bag: InputRenderPropArg) => string) | null | undefined;
27
- ref?: HTMLElement;
28
- } & {
29
- value?: TValue | undefined;
30
- disabled?: boolean;
31
- invalid?: boolean;
32
- autofocus?: boolean;
33
- };
18
+ declare class __sveltets_Render<TValue = string> {
19
+ props(): InputProps<TValue>;
34
20
  events(): {};
35
21
  slots(): {};
36
- bindings(): "ref" | "value";
22
+ bindings(): "element" | "value";
37
23
  exports(): {};
38
24
  }
39
25
  interface $$IsomorphicComponent {
40
- new <TTag extends ElementType = typeof DEFAULT_INPUT_TAG, TValue = string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TTag, TValue>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TTag, TValue>['props']>, ReturnType<__sveltets_Render<TTag, TValue>['events']>, ReturnType<__sveltets_Render<TTag, TValue>['slots']>> & {
41
- $$bindings?: ReturnType<__sveltets_Render<TTag, TValue>['bindings']>;
42
- } & ReturnType<__sveltets_Render<TTag, TValue>['exports']>;
43
- <TTag extends ElementType = typeof DEFAULT_INPUT_TAG, TValue = string>(internal: unknown, props: ReturnType<__sveltets_Render<TTag, TValue>['props']> & {}): ReturnType<__sveltets_Render<TTag, TValue>['exports']>;
44
- z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
26
+ new <TValue = string>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TValue>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TValue>['props']>, ReturnType<__sveltets_Render<TValue>['events']>, ReturnType<__sveltets_Render<TValue>['slots']>> & {
27
+ $$bindings?: ReturnType<__sveltets_Render<TValue>['bindings']>;
28
+ } & ReturnType<__sveltets_Render<TValue>['exports']>;
29
+ <TValue = string>(internal: unknown, props: ReturnType<__sveltets_Render<TValue>['props']> & {}): ReturnType<__sveltets_Render<TValue>['exports']>;
30
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
45
31
  }
46
32
  declare const Input: $$IsomorphicComponent;
47
- type Input<TTag extends ElementType = typeof DEFAULT_INPUT_TAG, TValue = string> = InstanceType<typeof Input<TTag, TValue>>;
33
+ type Input<TValue = string> = InstanceType<typeof Input<TValue>>;
48
34
  export default Input;
@@ -1,12 +1,17 @@
1
- <script lang="ts" module></script>
2
-
3
- <script lang="ts">import { useFloatingProvider } from "./floating-provider.svelte.js";
4
- const { children, enabled = true } = $props();
5
- useFloatingProvider({
6
- get enabled() {
7
- return enabled;
8
- }
9
- });
1
+ <script lang="ts" module>
2
+ </script>
3
+
4
+ <script lang="ts">
5
+ import type { Snippet } from "svelte"
6
+ import { useFloatingProvider } from "./floating-provider.svelte.js"
7
+
8
+ const { children, enabled = true }: { children: Snippet; enabled?: boolean } = $props()
9
+
10
+ useFloatingProvider({
11
+ get enabled() {
12
+ return enabled
13
+ },
14
+ })
10
15
  </script>
11
16
 
12
17
  {#if children}{@render children()}{/if}
@@ -1,45 +1,54 @@
1
- <script lang="ts">import { onMount } from "svelte";
2
- import Hidden, { HiddenFeatures } from "./Hidden.svelte";
3
- let { onfocus } = $props();
4
- let enabled = $state(true);
5
- let mounted = $state(false);
6
- onMount(() => {
7
- mounted = true;
8
- });
9
- </script>
1
+ <script lang="ts">
2
+ import { onMount } from "svelte"
3
+ import Hidden, { HiddenFeatures } from "./Hidden.svelte"
10
4
 
11
- {#if enabled}
12
- <Hidden
13
- as="button"
14
- type="button"
15
- features={HiddenFeatures.Focusable}
16
- onfocus={(event: FocusEvent) => {
17
- event.preventDefault()
18
- let frame: ReturnType<typeof requestAnimationFrame>
19
-
20
- let tries = 50
21
- function forwardFocus() {
22
- // Prevent infinite loops
23
- if (tries-- <= 0) {
24
- if (frame) cancelAnimationFrame(frame)
25
- return
26
- }
27
-
28
- // Try to move focus to the correct element. This depends on the implementation
29
- // of `onFocus` of course since it would be different for each place we use it in.
30
- if (onfocus?.()) {
31
- cancelAnimationFrame(frame)
32
- if (!mounted) return
33
-
34
- enabled = false
35
- return
36
- }
37
-
38
- // Retry
39
- frame = requestAnimationFrame(forwardFocus)
5
+ interface FocusSentinelProps {
6
+ onfocus: () => boolean
7
+ }
8
+
9
+ let { onfocus }: FocusSentinelProps = $props()
10
+
11
+ let enabled = $state(true)
12
+ let mounted = $state(false)
13
+
14
+ onMount(() => {
15
+ mounted = true
16
+ })
17
+
18
+ const handleFocus = (event: FocusEvent) => {
19
+ event.preventDefault()
20
+ let frame: ReturnType<typeof requestAnimationFrame>
21
+
22
+ let tries = 50
23
+ function forwardFocus() {
24
+ // Prevent infinite loops
25
+ if (tries-- <= 0) {
26
+ if (frame) cancelAnimationFrame(frame)
27
+ return
40
28
  }
41
29
 
30
+ // Try to move focus to the correct element. This depends on the implementation
31
+ // of `onFocus` of course since it would be different for each place we use it in.
32
+ if (onfocus?.()) {
33
+ cancelAnimationFrame(frame)
34
+ if (!mounted) return
35
+
36
+ enabled = false
37
+ return
38
+ }
39
+
40
+ // Retry
42
41
  frame = requestAnimationFrame(forwardFocus)
43
- }}
44
- />
42
+ }
43
+
44
+ frame = requestAnimationFrame(forwardFocus)
45
+ }
46
+ </script>
47
+
48
+ {#if enabled}
49
+ <Hidden asChild features={HiddenFeatures.Focusable}>
50
+ {#snippet children({ props })}
51
+ <button {...props} type="button" onfocus={handleFocus}>&zwnj;</button>
52
+ {/snippet}
53
+ </Hidden>
45
54
  {/if}
@@ -1,6 +1,10 @@
1
- <script lang="ts">import { createPortalRoot } from "./portal-force-root.svelte.js";
2
- let { force, children } = $props();
3
- createPortalRoot({ force });
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte"
3
+ import { createPortalRoot } from "./portal-force-root.svelte.js"
4
+
5
+ let { force, children }: { force: boolean; children: Snippet } = $props()
6
+
7
+ createPortalRoot({ force })
4
8
  </script>
5
9
 
6
10
  {#if children}{@render children()}{/if}
@@ -1,38 +1,51 @@
1
- <script lang="ts">import { disposables } from "../utils/disposables.js";
2
- import { objectToFormEntries } from "../utils/form.js";
3
- import FormResolver from "./FormResolver.svelte";
4
- import { hoistFormFields } from "./form-fields.svelte.js";
5
- import Hidden, { HiddenFeatures } from "./Hidden.svelte";
6
- import { compact } from "../utils/object.js";
7
- let {
8
- data,
9
- form: formId,
10
- disabled,
11
- onReset,
12
- overrides
13
- } = $props();
14
- let form = $state(null);
15
- const d = disposables();
16
- $effect(() => {
17
- if (!onReset) return;
18
- if (!form) return;
19
- return d.addEventListener(form, "reset", onReset);
20
- });
21
- const fields = $derived(
22
- objectToFormEntries(data).map(
23
- ([name, value]) => compact({
24
- key: name,
25
- as: "input",
26
- type: "hidden",
27
- form: formId,
28
- disabled,
29
- name,
30
- value,
31
- ...overrides
32
- })
1
+ <script lang="ts">
2
+ import { disposables } from "../utils/disposables.js"
3
+ import { objectToFormEntries } from "../utils/form.js"
4
+ import FormResolver from "./FormResolver.svelte"
5
+ import { hoistFormFields } from "./form-fields.svelte.js"
6
+ import Hidden, { HiddenFeatures } from "./Hidden.svelte"
7
+ import { compact } from "../utils/object.js"
8
+
9
+ let {
10
+ data,
11
+ form: formId,
12
+ disabled,
13
+ onReset,
14
+ overrides,
15
+ }: {
16
+ data: Record<string, any>
17
+ overrides?: Record<string, any>
18
+ form?: string
19
+ disabled?: boolean
20
+ onReset?: (e: Event) => void
21
+ } = $props()
22
+
23
+ let form = $state<HTMLFormElement | null>(null)
24
+ const d = disposables()
25
+
26
+ $effect(() => {
27
+ if (!onReset) return
28
+ if (!form) return
29
+
30
+ return d.addEventListener(form, "reset", onReset)
31
+ })
32
+
33
+ const fields = $derived(
34
+ objectToFormEntries(data).map(([name, value]) =>
35
+ compact({
36
+ key: name,
37
+ as: "input",
38
+ type: "hidden",
39
+ form: formId,
40
+ disabled,
41
+ name,
42
+ value,
43
+ ...overrides,
44
+ })
45
+ )
33
46
  )
34
- );
35
- const hoisted = hoistFormFields(formFields);
47
+
48
+ const hoisted = hoistFormFields(formFields)
36
49
  </script>
37
50
 
38
51
  {#snippet formFields()}
@@ -1,8 +1,12 @@
1
- <script lang="ts">import Hidden, { HiddenFeatures } from "./Hidden.svelte";
2
- import { createFormFieldsContext } from "./form-fields.svelte.js";
3
- const { children } = $props();
4
- const context = createFormFieldsContext();
5
- const { fields } = $derived(context);
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte"
3
+ import Hidden, { HiddenFeatures } from "./Hidden.svelte"
4
+ import { createFormFieldsContext } from "./form-fields.svelte.js"
5
+
6
+ const { children }: { children?: Snippet } = $props()
7
+
8
+ const context = createFormFieldsContext()
9
+ const { fields } = $derived(context)
6
10
  </script>
7
11
 
8
12
  {#if children}{@render children()}{/if}
@@ -1,20 +1,29 @@
1
- <script lang="ts">import { onMount } from "svelte";
2
- import Hidden, { HiddenFeatures } from "./Hidden.svelte";
3
- let { setForm, formId } = $props();
4
- $effect(() => {
5
- if (formId) {
6
- const resolvedForm = document.getElementById(formId);
7
- if (resolvedForm) setForm(resolvedForm);
8
- }
9
- });
10
- let element = $state();
11
- onMount(() => {
12
- if (!element) return;
13
- const resolvedForm = element.closest("form");
14
- if (resolvedForm) setForm(resolvedForm);
15
- });
1
+ <script lang="ts">
2
+ import { onMount } from "svelte"
3
+ import Hidden, { HiddenFeatures } from "./Hidden.svelte"
4
+
5
+ let { setForm, formId }: { setForm: (form: HTMLFormElement) => void; formId?: string } = $props()
6
+
7
+ $effect(() => {
8
+ if (formId) {
9
+ const resolvedForm = document.getElementById(formId) as HTMLFormElement
10
+ if (resolvedForm) setForm(resolvedForm)
11
+ }
12
+ })
13
+
14
+ let element = $state<HTMLElement>()
15
+
16
+ onMount(() => {
17
+ if (!element) return
18
+ const resolvedForm = element.closest("form")
19
+ if (resolvedForm) setForm(resolvedForm)
20
+ })
16
21
  </script>
17
22
 
18
23
  {#if !formId}
19
- <Hidden features={HiddenFeatures.Hidden} as="input" type="hidden" hidden readonly bind:ref={element} />
24
+ <Hidden asChild features={HiddenFeatures.Hidden}>
25
+ {#snippet children({ props })}
26
+ <input {...props} type="hidden" hidden readonly bind:this={element} />
27
+ {/snippet}
28
+ </Hidden>
20
29
  {/if}