@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,140 +1,181 @@
1
- <script lang="ts" module>const DEFAULT_OPTION_TAG = "div";
1
+ <script lang="ts" module>
2
+ import type { Props } from "../utils/types.js"
3
+
4
+ const DEFAULT_OPTION_TAG = "div" as const
5
+ type OptionRenderPropArg = {
6
+ /** @deprecated use `focus` instead */
7
+ active: boolean
8
+ focus: boolean
9
+ selected: boolean
10
+ disabled: boolean
11
+
12
+ selectedOption: boolean
13
+ }
14
+ type OptionPropsWeControl = "aria-disabled" | "aria-selected" | "role" | "tabIndex"
15
+
16
+ export type ListboxOptionProps<TType = string> = Props<
17
+ typeof DEFAULT_OPTION_TAG,
18
+ OptionRenderPropArg,
19
+ {
20
+ element?: HTMLElement
21
+ id?: string
22
+ disabled?: boolean
23
+ value: TType
24
+ }
25
+ >
2
26
  </script>
3
27
 
4
- <script lang="ts" generics="TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG">import { useId } from "../hooks/use-id.js";
5
- import {
6
- ActivationTrigger,
7
- ListboxStates,
8
- useActions,
9
- useData,
10
- ValueMode
11
- } from "./Listbox.svelte";
12
- import { disposables } from "../utils/disposables.js";
13
- import { Focus } from "../utils/calculate-active-index.js";
14
- import { getContext, onMount } from "svelte";
15
- import { useTextValue } from "../hooks/use-text-value.svelte.js";
16
- import { useTrackedPointer } from "../hooks/use-tracked-pointer.js";
17
- import { stateFromSlot } from "../utils/state.js";
18
- import ElementOrComponent from "../utils/ElementOrComponent.svelte";
19
- const internalId = useId();
20
- let {
21
- ref = $bindable(),
22
- id = `headlessui-listbox-option-${internalId}`,
23
- disabled = false,
24
- value,
25
- ...theirProps
26
- } = $props();
27
- const usedInSelectedOption = getContext("SelectedOptionContext") === true;
28
- const data = useData("ListboxOption");
29
- const actions = useActions("ListboxOption");
30
- const { activeOptionIndex, options } = $derived(data);
31
- const active = $derived(activeOptionIndex !== null ? options[activeOptionIndex].id === id : false);
32
- const selected = $derived(data.isSelected(value));
33
- const getTextValue = useTextValue({
34
- get element() {
35
- return ref;
28
+ <script lang="ts" generics="TType">
29
+ import { useId } from "../hooks/use-id.js"
30
+ import {
31
+ ActivationTrigger,
32
+ ListboxStates,
33
+ useActions,
34
+ useData,
35
+ ValueMode,
36
+ type ListboxOptionDataRef,
37
+ } from "./Listbox.svelte"
38
+ import { disposables } from "../utils/disposables.js"
39
+ import { Focus } from "../utils/calculate-active-index.js"
40
+ import { getContext, onMount } from "svelte"
41
+ import { useTextValue } from "../hooks/use-text-value.svelte.js"
42
+ import { useTrackedPointer } from "../hooks/use-tracked-pointer.js"
43
+ import { stateFromSlot } from "../utils/state.js"
44
+ import ElementOrComponent from "../utils/ElementOrComponent.svelte"
45
+
46
+ const internalId = useId()
47
+ let {
48
+ element = $bindable(),
49
+ id = `headlessui-listbox-option-${internalId}`,
50
+ disabled = false,
51
+ value,
52
+ ...theirProps
53
+ }: ListboxOptionProps<TType> = $props()
54
+ const usedInSelectedOption = getContext<boolean>("SelectedOptionContext") === true
55
+ const data = useData("ListboxOption")
56
+ const actions = useActions("ListboxOption")
57
+
58
+ const { activeOptionIndex, options } = $derived(data)
59
+
60
+ const active = $derived(activeOptionIndex !== null ? options[activeOptionIndex].id === id : false)
61
+
62
+ const selected = $derived(data.isSelected(value))
63
+ const getTextValue = useTextValue({
64
+ get element() {
65
+ return element as HTMLElement
66
+ },
67
+ })
68
+ const bag: ListboxOptionDataRef<TType>["current"] = $derived({
69
+ disabled,
70
+ value,
71
+ domRef: { current: element || null },
72
+ get textValue() {
73
+ return getTextValue()
74
+ },
75
+ })
76
+
77
+ $effect(() => {
78
+ if (usedInSelectedOption) return
79
+ if (!element) {
80
+ data.listElements.delete(id)
81
+ } else {
82
+ data.listElements.set(id, element)
83
+ }
84
+
85
+ return () => {
86
+ if (element) data.listElements.delete(id)
87
+ }
88
+ })
89
+
90
+ $effect(() => {
91
+ if (data.__demoMode) return
92
+ if (data.listboxState !== ListboxStates.Open) return
93
+ if (!active) return
94
+ if (data.activationTrigger === ActivationTrigger.Pointer) return
95
+ return disposables().requestAnimationFrame(() => {
96
+ ;(element as HTMLElement)?.scrollIntoView?.({ block: "nearest" })
97
+ })
98
+ })
99
+
100
+ onMount(() => {
101
+ if (usedInSelectedOption) return
102
+ return actions.registerOption(id, {
103
+ get current() {
104
+ return bag
105
+ },
106
+ })
107
+ })
108
+
109
+ const handleClick = (event: { preventDefault: Function }) => {
110
+ if (disabled) return event.preventDefault()
111
+ actions.onChange(value)
112
+ if (data.closeOnSelect === true || (data.closeOnSelect === undefined && data.mode === ValueMode.Single)) {
113
+ actions.closeListbox()
114
+ data.buttonElement?.focus({ preventScroll: true })
115
+ }
116
+ }
117
+
118
+ const handleFocus = () => {
119
+ if (disabled) return actions.goToOption(Focus.Nothing)
120
+ actions.goToOption(Focus.Specific, id)
36
121
  }
37
- });
38
- const bag = $derived({
39
- disabled,
40
- value,
41
- domRef: { current: ref || null },
42
- get textValue() {
43
- return getTextValue();
122
+
123
+ const pointer = useTrackedPointer()
124
+
125
+ const handleEnter = (evt: PointerEvent) => {
126
+ pointer.update(evt)
127
+ if (disabled) return
128
+ if (active) return
129
+ actions.goToOption(Focus.Specific, id, ActivationTrigger.Pointer)
44
130
  }
45
- });
46
- $effect(() => {
47
- if (usedInSelectedOption) return;
48
- if (!ref) {
49
- data.listElements.delete(id);
50
- } else {
51
- data.listElements.set(id, ref);
131
+
132
+ const handleMove = (evt: PointerEvent) => {
133
+ if (!pointer.wasMoved(evt)) return
134
+ if (disabled) return
135
+ if (active) return
136
+ actions.goToOption(Focus.Specific, id, ActivationTrigger.Pointer)
52
137
  }
53
- return () => {
54
- if (ref) data.listElements.delete(id);
55
- };
56
- });
57
- $effect(() => {
58
- if (data.__demoMode) return;
59
- if (data.listboxState !== ListboxStates.Open) return;
60
- if (!active) return;
61
- if (data.activationTrigger === ActivationTrigger.Pointer) return;
62
- return disposables().requestAnimationFrame(() => {
63
- ;
64
- ref?.scrollIntoView?.({ block: "nearest" });
65
- });
66
- });
67
- onMount(() => {
68
- if (usedInSelectedOption) return;
69
- return actions.registerOption(id, {
70
- get current() {
71
- return bag;
72
- }
73
- });
74
- });
75
- const handleClick = (event) => {
76
- if (disabled) return event.preventDefault();
77
- actions.onChange(value);
78
- if (data.closeOnSelect === true || data.closeOnSelect === void 0 && data.mode === ValueMode.Single) {
79
- actions.closeListbox();
80
- data.buttonElement?.focus({ preventScroll: true });
138
+
139
+ const handleLeave = (evt: PointerEvent) => {
140
+ if (!pointer.wasMoved(evt)) return
141
+ if (disabled) return
142
+ if (!active) return
143
+ actions.goToOption(Focus.Nothing)
81
144
  }
82
- };
83
- const handleFocus = () => {
84
- if (disabled) return actions.goToOption(Focus.Nothing);
85
- actions.goToOption(Focus.Specific, id);
86
- };
87
- const pointer = useTrackedPointer();
88
- const handleEnter = (evt) => {
89
- pointer.update(evt);
90
- if (disabled) return;
91
- if (active) return;
92
- actions.goToOption(Focus.Specific, id, ActivationTrigger.Pointer);
93
- };
94
- const handleMove = (evt) => {
95
- if (!pointer.wasMoved(evt)) return;
96
- if (disabled) return;
97
- if (active) return;
98
- actions.goToOption(Focus.Specific, id, ActivationTrigger.Pointer);
99
- };
100
- const handleLeave = (evt) => {
101
- if (!pointer.wasMoved(evt)) return;
102
- if (disabled) return;
103
- if (!active) return;
104
- actions.goToOption(Focus.Nothing);
105
- };
106
- const slot = $derived({
107
- active,
108
- focus: active,
109
- selected,
110
- disabled,
111
- selectedOption: selected && usedInSelectedOption
112
- });
113
- const ourProps = $derived(
114
- !usedInSelectedOption ? {
115
- id,
116
- role: "option",
117
- tabIndex: disabled === true ? void 0 : -1,
118
- "aria-disabled": disabled === true ? true : void 0,
119
- // According to the WAI-ARIA best practices, we should use aria-checked for
120
- // multi-select,but Voice-Over disagrees. So we use aria-checked instead for
121
- // both single and multi-select.
122
- "aria-selected": selected,
123
- disabled: void 0,
124
- // Never forward the `disabled` prop
125
- onclick: handleClick,
126
- onfocus: handleFocus,
127
- onpointerenter: handleEnter,
128
- onmouseenter: handleEnter,
129
- onpointermove: handleMove,
130
- onmousemove: handleMove,
131
- onpointerleave: handleLeave,
132
- onmouseleave: handleLeave,
133
- ...stateFromSlot(slot)
134
- } : {}
135
- );
145
+
146
+ const slot = $derived({
147
+ active,
148
+ focus: active,
149
+ selected,
150
+ disabled,
151
+ selectedOption: selected && usedInSelectedOption,
152
+ } satisfies OptionRenderPropArg)
153
+ const ourProps = $derived(
154
+ !usedInSelectedOption
155
+ ? {
156
+ id,
157
+ role: "option",
158
+ tabIndex: disabled === true ? undefined : -1,
159
+ "aria-disabled": disabled === true ? true : undefined,
160
+ // According to the WAI-ARIA best practices, we should use aria-checked for
161
+ // multi-select,but Voice-Over disagrees. So we use aria-checked instead for
162
+ // both single and multi-select.
163
+ "aria-selected": selected,
164
+ disabled: undefined, // Never forward the `disabled` prop
165
+ onclick: handleClick,
166
+ onfocus: handleFocus,
167
+ onpointerenter: handleEnter,
168
+ onmouseenter: handleEnter,
169
+ onpointermove: handleMove,
170
+ onmousemove: handleMove,
171
+ onpointerleave: handleLeave,
172
+ onmouseleave: handleLeave,
173
+ ...stateFromSlot(slot),
174
+ }
175
+ : {}
176
+ )
136
177
  </script>
137
178
 
138
179
  {#if selected || !usedInSelectedOption}
139
- <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_OPTION_TAG} name="Listbox" bind:ref />
180
+ <ElementOrComponent {ourProps} {theirProps} {slot} defaultTag={DEFAULT_OPTION_TAG} name="Listbox" bind:element />
140
181
  {/if}
@@ -1,4 +1,4 @@
1
- import type { ElementType, Props } from "../utils/types.js";
1
+ import type { Props } from "../utils/types.js";
2
2
  declare const DEFAULT_OPTION_TAG: "div";
3
3
  type OptionRenderPropArg = {
4
4
  /** @deprecated use `focus` instead */
@@ -8,40 +8,26 @@ type OptionRenderPropArg = {
8
8
  disabled: boolean;
9
9
  selectedOption: boolean;
10
10
  };
11
- type OptionPropsWeControl = "aria-disabled" | "aria-selected" | "role" | "tabIndex";
12
- export type ListboxOptionProps<TTag extends ElementType = typeof DEFAULT_OPTION_TAG, TType = string> = Props<TTag, OptionRenderPropArg, OptionPropsWeControl, {
11
+ export type ListboxOptionProps<TType = string> = Props<typeof DEFAULT_OPTION_TAG, OptionRenderPropArg, {
12
+ element?: HTMLElement;
13
13
  id?: string;
14
14
  disabled?: boolean;
15
15
  value: TType;
16
16
  }>;
17
- import { type Snippet } from "svelte";
18
- declare class __sveltets_Render<TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG> {
19
- props(): {
20
- as?: TTag | undefined;
21
- } & (Exclude<keyof import("../utils/types.js").PropsOf<TTag>, ("slot" | "as" | "children" | "class" | "ref") | "disabled" | "value" | "id" | OptionPropsWeControl> extends infer T extends keyof import("../utils/types.js").PropsOf<TTag> ? { [P in T]: import("../utils/types.js").PropsOf<TTag>[P]; } : never) & {
22
- children?: Snippet<[{
23
- slot: OptionRenderPropArg;
24
- props: Record<string, any>;
25
- }]> | undefined;
26
- class?: string | ((bag: OptionRenderPropArg) => string) | null | undefined;
27
- ref?: HTMLElement;
28
- } & {
29
- id?: string;
30
- disabled?: boolean;
31
- value: TType;
32
- };
17
+ declare class __sveltets_Render<TType> {
18
+ props(): ListboxOptionProps<TType>;
33
19
  events(): {};
34
20
  slots(): {};
35
- bindings(): "ref";
21
+ bindings(): "element";
36
22
  exports(): {};
37
23
  }
38
24
  interface $$IsomorphicComponent {
39
- new <TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TType, TTag>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TType, TTag>['props']>, ReturnType<__sveltets_Render<TType, TTag>['events']>, ReturnType<__sveltets_Render<TType, TTag>['slots']>> & {
40
- $$bindings?: ReturnType<__sveltets_Render<TType, TTag>['bindings']>;
41
- } & ReturnType<__sveltets_Render<TType, TTag>['exports']>;
42
- <TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG>(internal: unknown, props: ReturnType<__sveltets_Render<TType, TTag>['props']> & {}): ReturnType<__sveltets_Render<TType, TTag>['exports']>;
43
- z_$$bindings?: ReturnType<__sveltets_Render<any, any>['bindings']>;
25
+ new <TType>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<TType>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<TType>['props']>, ReturnType<__sveltets_Render<TType>['events']>, ReturnType<__sveltets_Render<TType>['slots']>> & {
26
+ $$bindings?: ReturnType<__sveltets_Render<TType>['bindings']>;
27
+ } & ReturnType<__sveltets_Render<TType>['exports']>;
28
+ <TType>(internal: unknown, props: ReturnType<__sveltets_Render<TType>['props']> & {}): ReturnType<__sveltets_Render<TType>['exports']>;
29
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
44
30
  }
45
31
  declare const ListboxOption: $$IsomorphicComponent;
46
- type ListboxOption<TType, TTag extends ElementType = typeof DEFAULT_OPTION_TAG> = InstanceType<typeof ListboxOption<TType, TTag>>;
32
+ type ListboxOption<TType> = InstanceType<typeof ListboxOption<TType>>;
47
33
  export default ListboxOption;