@fluixi-ui/listbox 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Fluixi
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,72 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/fluixi/assets/main/logos/128x128.png" alt="Fluixi" width="120" height="120" />
3
+ </p>
4
+
5
+ # @fluixi-ui/listbox
6
+
7
+ **Single/multi-select listbox with typeahead, search and virtualisation.**
8
+
9
+ [![License: MIT](https://img.shields.io/badge/License-MIT-22c55e.svg)](../../LICENSE)
10
+ ![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178c6?logo=typescript&logoColor=white)
11
+ ![Registry](https://img.shields.io/badge/registry-GitHub%20Packages-181717?logo=github)
12
+ ![Framework](https://img.shields.io/badge/framework-Fluixi%20%F0%9F%AB%96-ff6b35)
13
+
14
+ ---
15
+
16
+ A full-featured listbox following the WAI-ARIA listbox pattern. Supports both
17
+ declarative `<ListboxOption>` children and a data-driven `VirtualListbox` for
18
+ large lists.
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ pnpm add @fluixi-ui/listbox
24
+ ```
25
+
26
+ ## Usage
27
+
28
+ ### Declarative
29
+
30
+ ```tsx
31
+ import { Listbox, ListboxOption, ListboxGroup, ListboxGroupLabel, ListboxSearch } from '@fluixi-ui/listbox';
32
+
33
+ <Listbox selectionMode="multiple" defaultValue={['a']} onValuesChange={setValues}>
34
+ <ListboxSearch placeholder="Filter…" />
35
+ <ListboxGroup>
36
+ <ListboxGroupLabel>Fruits</ListboxGroupLabel>
37
+ <ListboxOption value="a">Apple</ListboxOption>
38
+ <ListboxOption value="b">Banana</ListboxOption>
39
+ <ListboxOption value="c" disabled>Cherry</ListboxOption>
40
+ </ListboxGroup>
41
+ </Listbox>
42
+ ```
43
+
44
+ ### Virtualised (large lists)
45
+
46
+ ```tsx
47
+ import { VirtualListbox } from '@fluixi-ui/listbox';
48
+
49
+ <VirtualListbox
50
+ options={items}
51
+ selectionMode="single"
52
+ value={selected()}
53
+ onChange={setSelected}
54
+ rowHeight={32}
55
+ height={240}
56
+ />
57
+ ```
58
+
59
+ ## Parts
60
+
61
+ | Part | Description |
62
+ |---|---|
63
+ | `Listbox` | Root. `selectionMode` (`single` \| `multiple`); controlled `value`/`defaultValue`/`onChange`/`onValuesChange`. |
64
+ | `ListboxOption` | A single option. `value`, `disabled`, `textValue` for typeahead. |
65
+ | `ListboxGroup` | Groups options under a label. |
66
+ | `ListboxGroupLabel` | Heading for a group. |
67
+ | `ListboxSearch` | Filter input; items register only when they match the query. |
68
+ | `VirtualListbox` | Data-driven virtualized list. `options: {value,label?,disabled?}[]`, fixed `rowHeight`. |
69
+
70
+ ---
71
+
72
+ Part of the [Fluixi UI](../../README.md) component library. Made with ☕ by the Fluixi team.
@@ -0,0 +1,5 @@
1
+ import '@fluixi-ui/tokens/css/base.css';
2
+ import '@fluixi-ui/tokens/css/parts/listbox.css';
3
+ export * from './listbox.js';
4
+ export * from './virtual-listbox.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,gCAAgC,CAAC;AACxC,OAAO,yCAAyC,CAAC;AAEjD,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ import "@fluixi-ui/tokens/css/base.css";
2
+ import "@fluixi-ui/tokens/css/parts/listbox.css";
3
+ import { Listbox, ListboxGroup, ListboxGroupLabel, ListboxOption, ListboxSearch, useListboxContext } from "./listbox.js";
4
+ import { VirtualListbox } from "./virtual-listbox.js";
5
+ export {
6
+ Listbox,
7
+ ListboxGroup,
8
+ ListboxGroupLabel,
9
+ ListboxOption,
10
+ ListboxSearch,
11
+ VirtualListbox,
12
+ useListboxContext
13
+ };
@@ -0,0 +1,75 @@
1
+ import { type Accessor } from '@fluixi/reactive/signal';
2
+ import { type Collection, type CollectionItem, type SelectionManager, type SelectionMode } from '@fluixi-ui/primitives';
3
+ import type { JSX } from '@fluixi/jsx';
4
+ interface ListboxContextValue {
5
+ selection: SelectionManager;
6
+ collection: Collection<CollectionItem>;
7
+ activeKey: Accessor<string | undefined>;
8
+ setActiveKey: (key: string | undefined) => void;
9
+ optionId: (key: string) => string;
10
+ isDisabled: Accessor<boolean>;
11
+ onOptionPress: (key: string) => void;
12
+ query: Accessor<string>;
13
+ setQuery: (query: string) => void;
14
+ }
15
+ declare const useListboxContext: () => ListboxContextValue;
16
+ export { useListboxContext };
17
+ export interface ListboxProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onChange'> {
18
+ selectionMode?: SelectionMode;
19
+ value?: string | string[] | null;
20
+ defaultValue?: string | string[];
21
+ onChange?: (value: string[]) => void;
22
+ disabled?: boolean;
23
+ disallowEmptySelection?: boolean;
24
+ }
25
+ /**
26
+ * A selectable list of options using the active-descendant model (focus stays
27
+ * on the listbox; the active option is tracked via `aria-activedescendant`).
28
+ * Supports `single` or `multiple` selection, arrow-key navigation that skips
29
+ * disabled options, Home/End, and type-ahead.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * import { Listbox, ListboxOption } from '@fluixi-ui/listbox';
34
+ *
35
+ * <Listbox selectionMode="single" defaultValue="apple" onChange={setFruit}>
36
+ * <ListboxOption value="apple">Apple</ListboxOption>
37
+ * <ListboxOption value="banana">Banana</ListboxOption>
38
+ * <ListboxOption value="cherry" disabled>Cherry</ListboxOption>
39
+ * </Listbox>
40
+ * ```
41
+ */
42
+ export declare function Listbox(props: ListboxProps): JSX.Element;
43
+ export interface ListboxOptionProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onClick'> {
44
+ value: string;
45
+ textValue?: string;
46
+ disabled?: boolean;
47
+ onClick?: (event: MouseEvent) => void;
48
+ }
49
+ /** A selectable option within a {@link Listbox}, identified by `value`. */
50
+ export declare function ListboxOption(props: ListboxOptionProps): JSX.Element;
51
+ export interface ListboxGroupProps extends JSX.HTMLAttributes<HTMLDivElement> {
52
+ }
53
+ /** Groups related options under a shared {@link ListboxGroupLabel}. */
54
+ export declare function ListboxGroup(props: ListboxGroupProps): JSX.Element;
55
+ export interface ListboxSearchProps extends Omit<JSX.InputHTMLAttributes<HTMLInputElement>, 'value' | 'onInput'> {
56
+ }
57
+ /**
58
+ * A search box that filters the {@link Listbox}'s options by their text. Options
59
+ * that don't match are hidden and skipped by keyboard navigation. Place it above
60
+ * the options.
61
+ *
62
+ * @example
63
+ * ```tsx
64
+ * <Listbox>
65
+ * <ListboxSearch placeholder="Search…" />
66
+ * <ListboxOption value="apple">Apple</ListboxOption>
67
+ * </Listbox>
68
+ * ```
69
+ */
70
+ export declare function ListboxSearch(props: ListboxSearchProps): JSX.Element;
71
+ export interface ListboxGroupLabelProps extends JSX.HTMLAttributes<HTMLDivElement> {
72
+ }
73
+ /** The heading for a {@link ListboxGroup}, linked via `aria-labelledby`. */
74
+ export declare function ListboxGroupLabel(props: ListboxGroupLabelProps): JSX.Element;
75
+ //# sourceMappingURL=listbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listbox.d.ts","sourceRoot":"","sources":["../src/listbox.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,QAAQ,EAA6D,MAAM,yBAAyB,CAAC;AASnH,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,UAAU,mBAAmB;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IACvC,SAAS,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IAChD,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAClC,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAED,QAAA,MAAwB,iBAAiB,2BAAqD,CAAC;AAE/F,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAO7B,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACxF,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,GAAG,CAAC,OAAO,CAyKxD;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CACvC;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAsEpE;AAED,MAAM,WAAW,iBAAkB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAEhF,uEAAuE;AACvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,GAAG,CAAC,OAAO,CAclE;AAID,MAAM,WAAW,kBACf,SAAQ,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CAAG;AAEjF;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAYpE;AAED,MAAM,WAAW,sBAAuB,SAAQ,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC;CAAG;AAErF,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,GAAG,CAAC,OAAO,CAQ5E"}
@@ -0,0 +1,272 @@
1
+ import { delegateEvents, splitProps, createComponent, createNativeElement, spread, mergeProps, handleRef, insert } from "@fluixi/dom";
2
+ import { createSignal, createEffect, createMemo, createRenderEffect, onCleanup } from "@fluixi/reactive/signal";
3
+ import { createSafeContext, createId, composeEventHandlers, dataAttr, composeId } from "@fluixi-ui/kit";
4
+ import { createCollection, createSelectionManager, createTypeahead, getNextEnabledIndex } from "@fluixi-ui/primitives";
5
+ delegateEvents(["keydown", "focus", "click", "input"]);
6
+ const [ListboxProvider, useListboxContext] = createSafeContext("Listbox");
7
+ function toKeys(value) {
8
+ if (value == null) return [];
9
+ return Array.isArray(value) ? value : [value];
10
+ }
11
+ function Listbox(props) {
12
+ const [local, others] = splitProps(props, ["selectionMode", "value", "defaultValue", "onChange", "disabled", "disallowEmptySelection", "ref", "children", "onKeyDown", "onFocus"]);
13
+ const baseId = createId("listbox");
14
+ const mode = () => local.selectionMode ?? "single";
15
+ const isDisabled = () => local.disabled ?? false;
16
+ const collection = createCollection();
17
+ const selection = createSelectionManager({
18
+ mode: local.selectionMode ?? "single",
19
+ selectedKeys: local.value !== void 0 ? () => toKeys(local.value) : void 0,
20
+ defaultSelectedKeys: toKeys(local.defaultValue),
21
+ disallowEmptySelection: local.disallowEmptySelection,
22
+ onSelectionChange: (keys) => local.onChange?.([...keys])
23
+ });
24
+ const [activeKey, setActiveKey] = createSignal(void 0);
25
+ const [query, setQuery] = createSignal("");
26
+ const optionId = (key) => composeId(baseId, `option-${key}`);
27
+ const activeIndex = () => collection.items().findIndex((item) => item.value === activeKey());
28
+ const move = (action) => {
29
+ const items = collection.items();
30
+ const next = getNextEnabledIndex(items, activeIndex(), action, true);
31
+ if (next !== -1) setActiveKey(items[next].value);
32
+ };
33
+ const firstMeaningfulKey = () => {
34
+ const selected = selection.firstSelectedKey();
35
+ if (selected !== void 0) return selected;
36
+ const first = collection.items().find((item) => !item.disabled);
37
+ return first?.value;
38
+ };
39
+ const pressActive = () => {
40
+ const key = activeKey();
41
+ if (key !== void 0) selection.toggle(key);
42
+ };
43
+ const onOptionPress = (key) => {
44
+ setActiveKey(key);
45
+ selection.toggle(key);
46
+ };
47
+ const typeahead = createTypeahead({
48
+ getItems: () => collection.items().map((item) => ({
49
+ textValue: item.textValue ?? item.ref.textContent ?? "",
50
+ disabled: item.disabled
51
+ })),
52
+ getActiveIndex: () => activeIndex(),
53
+ onMatch: (index) => {
54
+ const item = collection.items()[index];
55
+ if (item) setActiveKey(item.value);
56
+ }
57
+ });
58
+ const onKeyDown = (event) => {
59
+ switch (event.key) {
60
+ case "ArrowDown":
61
+ event.preventDefault();
62
+ move(activeKey() === void 0 ? "first" : "next");
63
+ break;
64
+ case "ArrowUp":
65
+ event.preventDefault();
66
+ move(activeKey() === void 0 ? "last" : "previous");
67
+ break;
68
+ case "Home":
69
+ event.preventDefault();
70
+ move("first");
71
+ break;
72
+ case "End":
73
+ event.preventDefault();
74
+ move("last");
75
+ break;
76
+ case "Enter":
77
+ event.preventDefault();
78
+ pressActive();
79
+ break;
80
+ case " ":
81
+ if (typeahead.buffer() === "") {
82
+ event.preventDefault();
83
+ pressActive();
84
+ } else {
85
+ typeahead.onKeyDown(event);
86
+ }
87
+ break;
88
+ default:
89
+ typeahead.onKeyDown(event);
90
+ }
91
+ };
92
+ const onFocus = () => {
93
+ if (activeKey() === void 0) setActiveKey(firstMeaningfulKey());
94
+ };
95
+ createEffect(() => {
96
+ const key = activeKey();
97
+ if (key === void 0) return;
98
+ const item = collection.items().find((entry) => entry.value === key);
99
+ item?.ref.scrollIntoView?.({
100
+ block: "nearest"
101
+ });
102
+ });
103
+ const context = {
104
+ selection,
105
+ collection,
106
+ activeKey,
107
+ setActiveKey,
108
+ optionId,
109
+ isDisabled,
110
+ onOptionPress,
111
+ query,
112
+ setQuery
113
+ };
114
+ createEffect(() => {
115
+ query();
116
+ const key = activeKey();
117
+ if (key === void 0) return;
118
+ const items = collection.items();
119
+ if (!items.some((item) => item.value === key)) {
120
+ setActiveKey(items.find((item) => !item.disabled)?.value);
121
+ }
122
+ });
123
+ return createMemo(() => createComponent(ListboxProvider, {
124
+ get value() {
125
+ return context;
126
+ },
127
+ get children() {
128
+ return (() => {
129
+ const _el$ = createNativeElement("div");
130
+ spread({
131
+ element: _el$,
132
+ props: mergeProps(others, {
133
+ ref: (node) => handleRef(local.ref, node),
134
+ role: "listbox",
135
+ id: baseId,
136
+ tabindex: () => isDisabled() ? -1 : 0,
137
+ "aria-multiselectable": () => mode() === "multiple" ? "true" : void 0,
138
+ "aria-disabled": () => isDisabled() ? "true" : void 0,
139
+ "aria-activedescendant": () => activeKey() !== void 0 ? optionId(activeKey()) : void 0,
140
+ "data-disabled": () => dataAttr(isDisabled()),
141
+ onKeyDown: composeEventHandlers([local.onKeyDown, (event) => {
142
+ if (!isDisabled()) onKeyDown(event);
143
+ }]),
144
+ onFocus: composeEventHandlers([local.onFocus, onFocus])
145
+ })
146
+ });
147
+ insert(_el$, local.children);
148
+ return _el$;
149
+ })();
150
+ }
151
+ }));
152
+ }
153
+ function ListboxOption(props) {
154
+ const ctx = useListboxContext();
155
+ const [local, others] = splitProps(props, ["value", "textValue", "disabled", "onClick", "ref", "children"]);
156
+ const isDisabled = () => local.disabled ?? false;
157
+ const isSelected = () => ctx.selection.isSelected(local.value);
158
+ const isActive = () => ctx.activeKey() === local.value;
159
+ const [node, setNode] = createSignal(void 0);
160
+ const label = () => local.textValue ?? (typeof local.children === "string" ? local.children : void 0) ?? node()?.textContent ?? local.value;
161
+ const isMatch = () => {
162
+ const q = ctx.query().trim().toLowerCase();
163
+ return q === "" || label().toLowerCase().includes(q);
164
+ };
165
+ const setRef = (element) => {
166
+ setNode(element);
167
+ handleRef(local.ref, element);
168
+ };
169
+ createRenderEffect(() => {
170
+ const element = node();
171
+ if (!element || !isMatch()) return;
172
+ const remove = ctx.collection.register({
173
+ ref: element,
174
+ value: local.value,
175
+ textValue: local.textValue,
176
+ disabled: local.disabled
177
+ });
178
+ onCleanup(remove);
179
+ });
180
+ return (() => {
181
+ const _el$ = createNativeElement("div");
182
+ spread({
183
+ element: _el$,
184
+ props: mergeProps(others, {
185
+ ref: setRef,
186
+ role: "option",
187
+ id: () => ctx.optionId(local.value),
188
+ hidden: () => !isMatch(),
189
+ "aria-selected": () => isSelected() ? "true" : "false",
190
+ "aria-disabled": () => isDisabled() ? "true" : void 0,
191
+ "data-selected": () => dataAttr(isSelected()),
192
+ "data-active": () => dataAttr(isActive()),
193
+ "data-disabled": () => dataAttr(isDisabled()),
194
+ onClick: composeEventHandlers([local.onClick, () => {
195
+ if (!isDisabled()) ctx.onOptionPress(local.value);
196
+ }]),
197
+ onPointerMove: () => {
198
+ if (!isDisabled()) ctx.setActiveKey(local.value);
199
+ }
200
+ })
201
+ });
202
+ insert(_el$, local.children);
203
+ return _el$;
204
+ })();
205
+ }
206
+ function ListboxGroup(props) {
207
+ const [local, others] = splitProps(props, ["ref", "children"]);
208
+ const groupId = createId("listbox-group");
209
+ return (() => {
210
+ const _el$ = createNativeElement("div");
211
+ spread({
212
+ element: _el$,
213
+ props: mergeProps(others, {
214
+ ref: (node) => handleRef(local.ref, node),
215
+ role: "group",
216
+ "aria-labelledby": () => composeId(groupId, "label"),
217
+ "data-listbox-group": ""
218
+ })
219
+ });
220
+ insert(_el$, createMemo(() => createComponent(ListboxGroupIdProvider, {
221
+ get value() {
222
+ return groupId;
223
+ },
224
+ get children() {
225
+ return local.children;
226
+ }
227
+ })), null);
228
+ return _el$;
229
+ })();
230
+ }
231
+ const [ListboxGroupIdProvider, useListboxGroupId] = createSafeContext("ListboxGroup");
232
+ function ListboxSearch(props) {
233
+ const ctx = useListboxContext();
234
+ return (() => {
235
+ const _el$ = createNativeElement("input");
236
+ spread({
237
+ element: _el$,
238
+ props: mergeProps(props, {
239
+ type: "text",
240
+ "data-listbox-search": "",
241
+ "aria-label": "Search options",
242
+ value: () => ctx.query(),
243
+ onInput: (event) => ctx.setQuery(event.target.value)
244
+ })
245
+ });
246
+ return _el$;
247
+ })();
248
+ }
249
+ function ListboxGroupLabel(props) {
250
+ const groupId = useListboxGroupId();
251
+ const [local, others] = splitProps(props, ["children"]);
252
+ return (() => {
253
+ const _el$ = createNativeElement("div");
254
+ spread({
255
+ element: _el$,
256
+ props: mergeProps(others, {
257
+ id: () => composeId(groupId, "label"),
258
+ "data-listbox-group-label": ""
259
+ })
260
+ });
261
+ insert(_el$, local.children);
262
+ return _el$;
263
+ })();
264
+ }
265
+ export {
266
+ Listbox,
267
+ ListboxGroup,
268
+ ListboxGroupLabel,
269
+ ListboxOption,
270
+ ListboxSearch,
271
+ useListboxContext
272
+ };
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.8.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.d.ts","../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/modules/index.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/css-tag.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-controller.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-element.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/directive.d.ts","../../../node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/lit-html.d.ts","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/development/lit-element.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/is-server.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/index.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/observable/types.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/observable/subscription.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/observable/observable.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/detect.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/derived.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/runtime.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/compat.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/children.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/ssr-hooks.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/signal.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/list.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/resource.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/suspense.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/error-boundary.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/core.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/index.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/graph/signal-next.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/index.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/directive.d.ts","../../../node_modules/.pnpm/@fluixi+jsx@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/jsx/dist/lib/jsx.d.ts","../../../node_modules/.pnpm/@fluixi+jsx@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/jsx/dist/lib/jsx-runtime.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/utils.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/runtime.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/observable/index.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/subject.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/types/basic.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/types/advanced.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/types/negative.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/types/operations.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/types/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/constants.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/guards.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/fn/basic.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/fn/advanced.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/fn/vector.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/fn/complex.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/fn/trigo.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/fn/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/formatter.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/random.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/parser.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/maths/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/string/string.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/string/types.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/string/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/boolean/types.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/boolean/boolean.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/boolean/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/date/types.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/date/date.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/date/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/types.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/primitive/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/types.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/object.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/diff.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/selector.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/merge.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/clone.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/getter-setter.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/omit.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/transform.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/reconcile.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/sort.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/utils.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/object/index.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/store/setter.types.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/store/types.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/store/store.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/store/utils.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/store/index.d.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/index.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/types.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/integration.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/server/host.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/island.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/hydration.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/hydration-state.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/index.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/shared/types.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/component/modifiers.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/component/index.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/show.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/for.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/index-flow.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/switch.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/dynamic.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/portal.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/error-boundary.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/class-map.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/style-map.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/flow/index.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/server/nodes.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/server/serialize.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/server/fx-data.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/server/request-context.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/server/render.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/dom/server/index.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/lib/index.d.ts","../../../node_modules/.pnpm/@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/dom/dist/index.d.ts","../../kit/src/lib/types/index.ts","../../kit/src/lib/cleanup/index.ts","../../kit/src/lib/platform/index.ts","../../kit/src/lib/dom/index.ts","../../kit/src/lib/id/index.ts","../../kit/src/lib/ref/index.ts","../../kit/src/lib/events/index.ts","../../kit/src/lib/keyboard/index.ts","../../kit/src/lib/pointer/index.ts","../../kit/src/lib/a11y/index.ts","../../kit/src/lib/reactive/index.ts","../../../node_modules/.pnpm/@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/reactive/dist/lib/signal/utilities.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/render/component.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/render/suspense.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/render/lazy.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/render/index.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/context/context.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/context/index.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/isomorphic.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/env/index.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/theme/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/array/array.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/array/utils.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/array/advanced.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/array/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/dom/events.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/dom/utils.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/dom/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/crypto/hash.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/crypto/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/functions/functions.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/functions/types.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/functions/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/helpers.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/lib/index.d.ts","../../../node_modules/.pnpm/@fluixi+utils@1.0.0-alpha.53/node_modules/@fluixi/utils/dist/index.d.ts","../../../node_modules/.pnpm/@fluixi+router@0.1.2-alpha.1/node_modules/@fluixi/router/dist/lib/types.d.ts","../../../node_modules/.pnpm/@fluixi+router@0.1.2-alpha.1/node_modules/@fluixi/router/dist/lib/match.d.ts","../../../node_modules/.pnpm/@fluixi+router@0.1.2-alpha.1/node_modules/@fluixi/router/dist/lib/history.d.ts","../../../node_modules/.pnpm/@fluixi+router@0.1.2-alpha.1/node_modules/@fluixi/router/dist/lib/router.d.ts","../../../node_modules/.pnpm/@fluixi+router@0.1.2-alpha.1/node_modules/@fluixi/router/dist/index.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/router-next/data.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/router-next/index.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/control-flow.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/classMap.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/styleMap.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/ifDefined.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/live.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/ref.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/directives/repeat.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/directives/repeat.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/repeat.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/unsafeHTML.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/unsafeSVG.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/async-directive.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/async-directive.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/async-append.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/suspense.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/litrx.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/reactiveAttr.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/utils.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/directives/index.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/templates/index.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/control-flow/for.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/control-flow/each.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/control-flow/index-flow.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/control-flow/show.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/control-flow/switch.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/control-flow/dynamic.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/control-flow/portal.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/control-flow/index.d.ts","../../../node_modules/.pnpm/@fluixi+lit@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/lit/dist/index.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/lib/core.d.ts","../../../node_modules/.pnpm/@fluixi+core@1.0.0-alpha.53_rollup@4.62.2_vite@6.4.3_@types+node@18.16.9_jiti@2.4.2_yaml@2.9.0_/node_modules/@fluixi/core/dist/src/index.d.ts","../../kit/src/lib/context/index.ts","../../kit/src/lib/props/index.ts","../../kit/src/index.ts","../../primitives/src/lib/layer-stack/index.ts","../../primitives/src/lib/escape-key/index.ts","../../primitives/src/lib/outside-interaction/index.ts","../../primitives/src/lib/dismissable-layer/index.ts","../../primitives/src/lib/presence/index.ts","../../primitives/src/lib/scroll-lock/index.ts","../../primitives/src/lib/focus-scope/index.ts","../../primitives/src/lib/keyboard-navigation/index.ts","../../primitives/src/lib/collection/index.ts","../../primitives/src/lib/roving-focus/index.ts","../../primitives/src/lib/typeahead/index.ts","../../primitives/src/lib/selection-manager/index.ts","../../primitives/src/lib/press/index.ts","../../primitives/src/lib/hover/index.ts","../../primitives/src/lib/long-press/index.ts","../../primitives/src/lib/resize-observer/index.ts","../../primitives/src/lib/intersection-observer/index.ts","../../primitives/src/lib/form-control/index.ts","../../primitives/src/lib/visually-hidden/index.ts","../../primitives/src/lib/portal/index.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","../../primitives/src/lib/floating-layer/index.ts","../../primitives/src/lib/virtualizer/index.ts","../../primitives/src/index.ts","../../../node_modules/.pnpm/@fluixi+jsx@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/jsx/dist/lib/jsx-dev-runtime.d.ts","../../../node_modules/.pnpm/@fluixi+jsx@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/jsx/dist/lib/index.d.ts","../../../node_modules/.pnpm/@fluixi+jsx@1.0.0-alpha.53_@fluixi+dom@1.0.0-alpha.53_@fluixi+reactive@1.0.0-alpha.53__@fluixi+reactive@1.0.0-alpha.53/node_modules/@fluixi/jsx/dist/index.d.ts","../src/listbox.tsx","../src/virtual-listbox.tsx","../src/index.ts"],"fileIdsList":[[268],[269,270],[243],[88,170],[187],[170],[88,141,170,182,186,188,189,190,191,206,213,214,242],[88],[183,184,185],[88,123,136,185,211,212],[169],[151],[92,93,143,144,145,146,147,148],[143],[145,163,164,165,166,167],[145],[166],[142],[88,153,154,155,156,157,158,159,160,161],[143,144,149,150,152,162,168],[70],[276],[90,91,170,275],[91],[70,90],[70,88,89],[70,142,170],[89],[70,88,170],[234,235,236,237,238,239,240],[89,226],[70,89],[215,216,217,218,219,222,223,224,227,228,229,230,231],[221],[226],[89,142],[232,233,241],[88,94,95,141],[71,72,73],[72],[71],[77],[76],[80],[85],[74,75,76,77,78,79,80,81,82,83,84,86],[87],[73,74,75,78,79],[73,80],[138,139,140],[136],[73,88,137,138],[138],[94],[207,208,209,210],[207],[207,209],[205],[124],[192,193,194],[199],[196,197],[201,202],[123],[195,198,200,203,204],[97],[96],[103,104,105,106,107],[100],[100,101,102,108,109,110,111],[96,97,99],[96,98],[124,125,126,127,128,129,130,131,132,133,134,135],[112,123],[123,124],[116],[116,117],[119],[119,120],[115,118,121,122],[113,114],[62,63],[64,67],[65,67],[67],[65,66],[225],[65],[220],[64,67,68,69],[60],[61,171,172,173,174,175,176,177,178,179,180,181,245,246],[61,171],[61],[61,88,244],[61,173],[61,170],[61,88,171,172],[61,88],[61,91,278,279],[61,88,91,170,247,274,277],[61,88,91,170,244,247,274,277],[61,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,272,273],[61,88,248,249,250],[61,88,247],[61,88,250,271],[61,88,247,250],[61,88,250],[61,247],[61,244],[61,88,247,255,256]],"fileInfos":[{"version":"69684132aeb9b5642cbcd9e22dff7818ff0ee1aa831728af0ecf97d3364d5546","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"092c2bfe125ce69dbb1223c85d68d4d2397d7d8411867b5cc03cec902c233763","affectsGlobalScope":true,"impliedFormat":1},{"version":"07f073f19d67f74d732b1adea08e1dc66b1b58d77cb5b43931dee3d798a2fd53","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"936e80ad36a2ee83fc3caf008e7c4c5afe45b3cf3d5c24408f039c1d47bdc1df","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"fef8cfad2e2dc5f5b3d97a6f4f2e92848eb1b88e897bb7318cef0e2820bceaab","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"b5ce7a470bc3628408429040c4e3a53a27755022a32fd05e2cb694e7015386c7","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6a5253138c5432c68a1510c70fe78a644fe2e632111ba778e1978010d6edfec","impliedFormat":1},{"version":"b8f34dd1757f68e03262b1ca3ddfa668a855b872f8bdd5224d6f993a7b37dc2c","impliedFormat":99},{"version":"74012d464fbc5354ca3a7d5e71bee43b17da01a853c8ff10971bbe3680c76f40","impliedFormat":99},{"version":"5e30131b6a5587fe666926ad1d9807e733c0a597ed12d682669fcaa331aea576","impliedFormat":99},{"version":"a0f82d2f9450bd147a8c137798d9501bd49b7c9e118f75b07b76709ff39b6b55","affectsGlobalScope":true,"impliedFormat":99},{"version":"00cb63103f9670f8094c238a4a7e252c8b4c06ba371fea5c44add7e41b7247e4","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"e09db3291e6b440f7debed2227d8357e80c95987a0d0d67ac17521d8f7b11bdb","impliedFormat":99},{"version":"9a318e3a8900672b85cd3c8c3a5acf51b88049557a3ae897ccdcf2b85a8f61f9","impliedFormat":99},{"version":"1bcd560deed90a43c51b08aa18f7f55229f2e30974ab5ed1b7bb5721be379013","impliedFormat":99},{"version":"dc08fe04e50bc24d1baded4f33e942222bbdd5d77d6341a93cfe6e4e4586a3be","impliedFormat":99},{"version":"e592cf1b998ce8043e72ca38e2f40c5631e65e937e3102223f7086140bf979a3","impliedFormat":99},{"version":"0ceea501c52cdf869e3562ea96fca2785a3394a9e1e446afb5e11092ad2dc7fc","impliedFormat":99},{"version":"ebe92631232ee90bd0cd2668b349a8ecf869a42f94aa5a80505aaf7833be6819","impliedFormat":99},{"version":"892323d83df6c419a9f961e7156e70184b4a27638de72f7b92931ab3c165298e","impliedFormat":99},{"version":"ed51ea7ddcddfe0523b5a8d3112c55f8494f3f419ad6b830a1aac7dfe499a8ab","impliedFormat":99},{"version":"f930ceeb25ec3a15c78ff12771c202a67164e232a5b588635c89603c6c961928","impliedFormat":99},{"version":"96e415a91946f00ac400e74dfeb26b575aade405169df35621a822e6b4d5abf0","impliedFormat":99},{"version":"e8be3e24c3b98c301590ee0fefc462accc9a0f1fa674f62a3b63be9786ef9a99","impliedFormat":99},{"version":"e08f70018aeffb92654e466522e4b194b712da2091b20bdb0922c8441f2a43b7","impliedFormat":99},{"version":"97b4ab5a8db570e67a3a764a456486d97b8808b658e0e0a3eb9e38b63270d086","impliedFormat":99},{"version":"1f33d92b487c119aee6f7cf04ac95c0dab317c228b388fead9d7d87540f8adf7","impliedFormat":99},{"version":"e972de4985925f07d08dfb7eb73a400506f75b3596cac60591fab948eade26b7","impliedFormat":99},{"version":"c03135439ad665f4a011a75586bf96098f6fe0b0716e78afc8cdf651bcc8f879","impliedFormat":99},{"version":"290111961dc134d534be036cd591c09a0e65ceed2fcf9aa9666ae2bcdac7034f","impliedFormat":99},{"version":"ac292cffbb31f9c76b09f7b0c630cfc2b9c7e5070dfc4472cfc60023ec447bd2","impliedFormat":99},{"version":"ac23329299d15c989ebe7e62bb1858a58de39aa3cd4fb1265e93ddc6d9631b07","impliedFormat":99},{"version":"16b49126ba492eb0b4abc93a518addf8ca7e850bed2fc56c111ffa768d23113e","impliedFormat":99},{"version":"1122b4ca26147813c76ac7a2f38911854cb2bd5cf0af003f578175f3db1c3aee","impliedFormat":99},{"version":"25d5a8f05e1c4225f718beca2610465a2f4d317d3f1344dceb342a29af57a1eb","impliedFormat":99},{"version":"9b165cadfb3dc80ca5f0c3a6d9f1755701d3f60831215e6a8ca68b1a9d59be82","affectsGlobalScope":true,"impliedFormat":99},{"version":"5a3e50403388f202593b3214e0d072335e1cba5eeb8176c4d19a437686349ce5","impliedFormat":99},{"version":"8fe10058c65480f8667d1099d1ca25c75f07091ae303f287eda65bb622d7e1d5","impliedFormat":99},{"version":"13bb96268e358a7e2a50476df6db22b4258ec01edbd3f9de3ed2fafffed11e1d","impliedFormat":99},{"version":"e6597aaf78157a53337c8794d2f7eee5eecef77a6ec0c60480c74a936811fa36","impliedFormat":99},{"version":"7112073e38bc7d171cbc5530734f550065ecbc76eb302319c5e8a06105dae5bb","impliedFormat":99},{"version":"631287e5e4a8a6ff2348789b7d2d00944c0f09ff3fed60cc3642323a1ff0ed4a","impliedFormat":99},{"version":"4f24eafbd6e05dd55f4597c6d286171fbe5066785625c482ab5c5cbba2fc7487","impliedFormat":99},{"version":"e9ad8fb60df94fd4f929f944a12d496271d6523e69d5ad4de20fc080a0a30711","impliedFormat":99},{"version":"a928f91a183425984c472e4d2763f7649e8d63c92c74a2fa59482ad8905bc664","impliedFormat":99},{"version":"c323e45a420e39e384e86db3e4470969016e8f507e04a9ceff1f073d8e5efeff","impliedFormat":99},{"version":"120b522225d94dea3356d056952f0ca9c626a4643a7734fbff1b031f16a0cb65","impliedFormat":99},{"version":"52a743346fe3f9758188a0ba974989e2ec948d8bb145539b6b6d6058204f2612","impliedFormat":99},{"version":"b19bb5d1b4f1ed34aad8e57dc096f7f333dc2fccb0a86633b9c8405c4797b190","impliedFormat":99},{"version":"fde9c3aaca2fb4f489fe2c25d3d0a5d56c145272cf92c6fd1f39f41589d9d0b1","impliedFormat":99},{"version":"2289a9520455d5a74bff1f23ddf0bee2593baedb8b9cda9c3e8720ca66338f65","impliedFormat":99},{"version":"1ff7de3d6cb03553a07592092fcd7a0ed61a88c6be9f5344239ac247be712cfd","impliedFormat":99},{"version":"b071dcadeb17235e2a1116231ca370bac5c97ec090fc73b3736791cb0a2aa91d","impliedFormat":99},{"version":"b4ed0f4d07ca274437eb9d49400de8c81659760e59507f08b94442873eb49a25","impliedFormat":99},{"version":"88978beb444b1d65c0f48d1099717d2a935ce74d9e3e1411bcaa1fe497910ab6","impliedFormat":99},{"version":"712fdf289306e77c2c097843e29560d99ff83bd336da277498ea18ca8cd999f0","impliedFormat":99},{"version":"ceb05e55219637c8dcb77490777c52e537363adc0a060af39cc95d46310f2128","impliedFormat":99},{"version":"a1b05ca68a811afb49605cf1346a53efadc4ec6269caf9e19d97bee4543f1479","impliedFormat":99},{"version":"4e454ae8246e2b13c51c12adaccda8d0fe8e36e120d4e5bbc554021244240fdb","impliedFormat":99},{"version":"4edc87837b7285fe2141b92b492ecc6428a5fc152d7d013af9d0e7017e78befa","impliedFormat":99},{"version":"20e3c2b6bfdfbde9073c6309992943094ab954bd50954c2561daa4d377c78bbc","impliedFormat":99},{"version":"de969e2fcf0e6bfe70c844762f81e47e713dfdf3f1b8ed89378ff3865e78f16d","impliedFormat":99},{"version":"7349d52ef2d997de63d4298417883a9ae8d94ad2d6b0a1ad4a11971fbf01ec3d","impliedFormat":99},{"version":"1673bc6ee9b15e4bc9e4de777b1497bd1ec544d6939061ce7a25de9a0c09565d","impliedFormat":99},{"version":"73eae9a32499f88a8c73cedd49a43ecf441116bb55c7a150f346e333b35c687b","impliedFormat":99},{"version":"9b1c12fce85d708544c70e12e0d8ca6c4a9b27690a27448577b9f4053c49908d","impliedFormat":99},{"version":"68e1a72149e6384295c078bdb945bc3238afcaeb850be14f3ba0571661addf82","impliedFormat":99},{"version":"abc4efc89e29e107946fd0a40b96c4c862d4d340c4c26dd7647183568c3e33c3","impliedFormat":99},{"version":"e1cb7303d3d49535d39fac5d8ded4b5e5e430526eb8a44411cfec3694eae6223","impliedFormat":99},{"version":"1fb68873fd2a769163972685c0516cb3f88fcedd57409f285dfe7c71be13cbbd","impliedFormat":99},{"version":"6685db351c23e0cb6cec2426ea1680a41d29c1633d722c7d7621207c55f6491e","impliedFormat":99},{"version":"cc74864af16373ee02499f7e65758f13f903d37aa1e13e7ad5598facc70dc274","impliedFormat":99},{"version":"71830cf6fc186afa64f4d6d015eed23c78a3af68bd8dc770ffa4d5cee77744b3","impliedFormat":99},{"version":"72ff78881cb1d71790e047eba022ce05845b7dd05e94ba64267dc478ce1457f1","impliedFormat":99},{"version":"fdf1008f43e52d69c62571db0aaa782604dca7e7c2206825a9f46ada5154b610","impliedFormat":99},{"version":"9b3b063cf484aa4088728e28f73f98c7b8fa267debd6f289acec4d70f5977253","impliedFormat":99},{"version":"fe21672b2e8f8ad092ba5ca8ecc4c83f3952dd5144e459f1f001dfdac2f9e7a5","impliedFormat":99},{"version":"95b067197bb5c2f7ca7ee0ede9be77c4724aa09687b75d6e8cacf0904ff565f9","impliedFormat":99},{"version":"3ab7a86cdb01a3f6d3845a82add1feee0ec6b0620fde0224ada4ab929f459b61","impliedFormat":99},{"version":"0c40740c1cb8ae5f8a74182579c5a392f7e0ce20826d1a4907417e6929e20666","impliedFormat":99},{"version":"ea7a689828afde6f1565f81d9a675c48daa0b91c36020aaeef7193b8769cccf9","impliedFormat":99},{"version":"4c362ca187c7fc9d6a986d33da9966cac1738dc14f8da9f1315b0703214f7be5","impliedFormat":99},{"version":"45d0b9f6985725909f26094b518f6e5017ecc9fff784fb71792addb7c90c70bf","impliedFormat":99},{"version":"62512a36ef5e3ed8dca2f7ac0800e2d3bd461025c7b4ae5539cd871258dcd00c","impliedFormat":99},{"version":"f431bb373494e78c5e01546c80fc41921ca9b24386c388da802a2afbe9705392","impliedFormat":99},{"version":"07a2317b33ba403c06f14a9c8cf0ed93a83d85d22ffc64cab4452327a1e08e24","impliedFormat":99},{"version":"415f940ff9853f2e98ac9864385e88ac819ae9dda1a1ca69c8cdb170054b2820","impliedFormat":99},{"version":"f6e6e7e47824c8366b0cad7f6582ac611143a12bac48ecff2f6b88ff78187d68","impliedFormat":99},{"version":"3f06e42c5281bc88f1de705b90b69da10d106a09296ae2bda90e62b5cc0e8cc8","impliedFormat":99},{"version":"73f3a592934d6163184e94890ac9c369ff8d4338e57cdad77a1b775830a06642","impliedFormat":99},{"version":"9dbe39e850dcc9124b71341467f46bb1a0f34e0e15066291bd8f98ec15c03280","impliedFormat":99},{"version":"746a5c6e2eb8982e2b0cd37bab36ff773d1e9f84abd8244a598f9af0d2ecfe9f","impliedFormat":99},{"version":"9f41d91eeb174fefed6f6317fe406b39be79e87f7c4de3388e6657ea797e8b8c","impliedFormat":99},{"version":"4c0bfb5426c29cbb62fef9241e667b70a7350086ac62b64c3dc94a7985af4c72","impliedFormat":99},{"version":"d211c8d3dbf70442d54e6b5ea5bbfb3e394001d8c802b842a7ced12c1c7d536c","impliedFormat":99},{"version":"35b2e19d086f311343f1ffae8a1bd1f0fd4f70de2f49d9605241c4f74b53ddc2","impliedFormat":99},{"version":"5a2fad844d16083a48af5d82bffb196e7bdd6f44e46e80f552e16b170c4a8f71","impliedFormat":99},{"version":"c6650df9082a55ae635b96b371b9957d8eafbc12ffdbc0e0b77f0b002fdd8e7f","impliedFormat":99},{"version":"326daff479c598c3230df94051092329abffd458689dc3cce3f21b767b499d99","impliedFormat":99},{"version":"9291566976678663eb96b938d284bf09d2139043d0d7d0976cffbdcbe44f0d0e","impliedFormat":99},{"version":"213b1ac213e38d56741eee5e31ca39ee579d7489084e7c30486fe3b3b9684028","impliedFormat":99},{"version":"0e416bf225e5eb5ec5b58e890d34d9c645feb834b95b73bd767d9a1526e58fbf","impliedFormat":99},{"version":"44b89266a40c97f4d533e43a64342d12b7f03c818b0ea0b5ed3314f27a5ea3c1","impliedFormat":99},{"version":"9c44147ff2f963a6a6430664b8073eba81fe22adfdceefe5d4b94c58a1744247","impliedFormat":99},{"version":"1e46f8f10c9d81c3c36accfe6076d8abd35e6218d28e3f7deadd08e2cf99857a","impliedFormat":99},{"version":"91ef71cd917ce22fd4a3f7fac1094bd492dcc85e7e4646af6a982268fbb5f89b","impliedFormat":99},{"version":"04353aa31b2939f6ff9a67ad4937896b2ff275852248d2549731e05fc9ea3fe0","impliedFormat":99},{"version":"f3209b787ae8fb62327ebc904a12ee79ae0638a3c423d66b4f5186ff08b891a0","impliedFormat":99},{"version":"8da735bbcdf3eef496c20933a969c898c45abf151d6ef9f1a3f719eb54495e59","impliedFormat":99},{"version":"cca8d9f11c7209da2e992525500746ff81ccb0e74597dc482338b56bbca43977","impliedFormat":99},{"version":"09eea8ae8576e45b470e9506ef332fc71e07dca2dd3c8b4da89fc9ef9d3cc0b0","impliedFormat":99},{"version":"e9e4b5e403d534250d1ae0cfc12a3b14b975a106886ddcafc4c1b44fe362000a","impliedFormat":99},{"version":"963c208c61e15b6a1226512b80a2a63aa80d9195956b0a087e6fe382eeb7b3ba","impliedFormat":99},{"version":"4b6a4593207c56d2da0a64f8f5ce34c54b7af90754c9e5964f696e72f0037530","impliedFormat":99},{"version":"30295332c8cc2b18f1691fb3f9785e48ea3b7d7b544c915b666b8963a414162d","impliedFormat":99},{"version":"73cbc0a2e4774f7128943e055cdce1195b4a66587d8f00e5b7ce64fd5423584a","impliedFormat":99},{"version":"e54bc1b4aded8ed35e58b74f48adcbdb10139f9ed759698115d2aef84d83e365","impliedFormat":99},{"version":"cb103f5b0ec314e2f770223c760255fb41cbf9f3d0e3e379e993bd250eb2352f","impliedFormat":99},{"version":"a8e17d0c93b745bbeba218a070e4055a8d07a3e5afed16c7c7b4918f7684505e","impliedFormat":99},{"version":"eba6d3b9345acd47204d59021f22dc95d2d9bc98b481e05a69b87844345b0942","impliedFormat":99},{"version":"320cb0b5d055c48705ba1e35e4ec79fff47c99ad526d7f64de27b85f7e0cc4da","impliedFormat":99},{"version":"c6d20b57d670c46bc1484f65ba347901d7294078c1949d01bc4007a82e379517","impliedFormat":99},{"version":"b54c18485a7e91dc3e6c45e46aff2864ac8ae5ed4dca7a2d79ff53e43b4a1dde","impliedFormat":99},{"version":"4c6fd253eaa59c668a2577f1fd802f0c0f65793bb329947d452d728d76031458","impliedFormat":99},{"version":"cb8deab1772bfd2faadef103ac97154238d292cb7923296b0f45309d89befb04","impliedFormat":99},{"version":"13484c4cfd03e527490e618ca318ff77fcf8d421d9926c6723e54c4548271fd1","impliedFormat":99},{"version":"a2ce5822b78b08dd5d6e3598757fa11c09e6274558415e75a634110e85abe604","impliedFormat":99},{"version":"2dce570f3d8917cca7d605dc74f96d74ec8af5c590b68fccb4bfaf939a297bf6","impliedFormat":99},{"version":"d061f0776c8bedf6ec233e421154a196b83228dfc1260c107e7ebb4efbccd7cf","impliedFormat":99},{"version":"137a896ad9dd6c91df545f023a5e4f3cb1d18694724771e0137afbf82d207de5","impliedFormat":99},{"version":"af74cb86213e1c274ab4ff70f6a471764de959ccedc3e916018bd60f44f656b4","impliedFormat":99},{"version":"5a98a22cc9a5b50c804b350b8b870a40d5474bfde18731dee0ef50129b0fa91f","impliedFormat":99},{"version":"002effc00f23bd8cf9ba1d75309e8f213be4147c1bd2a5b4a4fd6763f7063692","impliedFormat":99},{"version":"cb4d2b44b2e9aa0bfbaa47fbf54c1558d0d77387a3e405644fc1d44f182520a5","impliedFormat":99},{"version":"78536d7cbddfbab8163267ce61d0005be870b0bd49a9435d58952a27504d90e7","impliedFormat":99},{"version":"d16aedbdca35dbc65b0b000a334b29a2b1dd40e6a5d9c135fac28cd05cac355d","impliedFormat":99},{"version":"a23795b931d9e0a3d84bf02dc06e6c2afa3c37ac5e077b96dffb3006cfbe52a7","impliedFormat":99},{"version":"f15921cf5d9640e2c54c35fc6a3c36e8a4c0061f78dce854724413127338c7e9","impliedFormat":99},{"version":"93b0f0fe75bafd0c0d384e2de7ef7358098653416740881a5aff042703bcb97a","impliedFormat":99},{"version":"1765fca10cad95f2ddb420591e089b4ed74639eb1085f52ab81283642fbcbaa3","impliedFormat":99},{"version":"e71869ee1e7ffb064578d3010aa8f364ba7d992dde650dc2561a718cd48d3a10","impliedFormat":99},{"version":"0f6f1ed13d6924402359ace5d0fb77bdfd3b80beaf87318df3cc9d44a50b925b","impliedFormat":99},{"version":"db0123abae93f8141f9fc417ff13feeb368ec0ba7296d5745efd35a5ce79f52b","impliedFormat":99},{"version":"f23a7c9fe54c8a623696aa9a8b13225b4b926fae0d98d592748d635c2603723f","impliedFormat":99},{"version":"ed28747437d5c4ab842ac70bba457a89ef867a7bf50864e3a1e333378b531ddc","impliedFormat":99},{"version":"064c05ad917a300e188b8374d95ae3360794fd9c0b91110c967f79c00c9413da","impliedFormat":99},{"version":"8af0262b31af8ba340a2c3f1ed31b1199b3271cadedf8ef41d9faeb1e259332e","impliedFormat":99},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":99},{"version":"bfb5e43efed96b73d2a8018a84353efbbd8ddd0569bab3e172b7a21ca3e9c451","impliedFormat":99},{"version":"11a574d9d2ffd0d34deb5b3ba9f1e36d5797072cb8974365e2dc9fa8428a8856","impliedFormat":99},{"version":"9f4166bc2e232d9f8c9500751a9e9be0438f6d9a76c76cc990e110a3276f7dec","impliedFormat":99},{"version":"9a6c3e2900643e20e37b47f712af6420048e737db80c1975707cfde23681b2c9","impliedFormat":99},{"version":"4d19aa2a9bf11f03350f885799abb2a399e49308ff23582f0bfc7ca3de1ef964","impliedFormat":99},{"version":"3206bc8f6c9cf553a7bdd45999e405e7e95524558b6516359bd552ad49e02edb","impliedFormat":99},{"version":"d06367c35e944d602fec4a3bfe3cb00ca44fab949354392add4d6386c620d294","impliedFormat":99},{"version":"f0c0df41d93b49b7a7fc3c69f9f2b2f6cfb58e59d8e0869f6bf7bd6a3003b7dd","impliedFormat":99},{"version":"a4766338e78a77ceb79b55f54ad3b9d6d9f0aa3ecea6d6097bbbb671020594a1","impliedFormat":99},{"version":"5a54a9ae40b3a00ecfa95c3f70d349ee537cef18a681ac7e8138d5e7d1a6b155","impliedFormat":99},{"version":"18ffeb24e3dbb7cb3b407703454ff84120c8357917f7d494de45afce811b1ff0","impliedFormat":99},{"version":"0f06c3d71d0e686261997eba0eef8e8b4b0837d69c10ac841858ac793f2ad2ae","impliedFormat":99},{"version":"2a172abe1478bd65206bff70aff82ca71fb7128bbf02717bb3dcfd9646bde351","impliedFormat":99},{"version":"ce82849d142b991369a34d14c0c7635df527dd2a16c6c02fa108be8169a87c0d","impliedFormat":99},{"version":"89c8d4b261417a769f262a097eb07b104389bc1c8487620aaf4fe0617dd5857e","impliedFormat":99},{"version":"a02dc067ef5b75deab2f5486ce388526390cba8eff1689eb69a997f668f71f17","impliedFormat":99},{"version":"e9c326f6d1638102b8fd1fbd64c7a5d1c3c5b28e3fce944e4836a2b9e275f887","impliedFormat":99},{"version":"a4bbe05f59182f4ce279bf92b2fcf9ce52fe1a9feba61867aa97e11eaa1912aa","impliedFormat":99},{"version":"1b9d0b8dbfe4d820b52271376daab06fde5205e840010c63c7b0f53458ece5bc","impliedFormat":99},{"version":"c955a20bfebe856f4c2f2696c496a53005de11bca7492ce6bd15581de3a20039","impliedFormat":99},{"version":"ff7644a69b155764f45cffceeebf7f817273bf4d77cd19aca433bb0a509cfb37","impliedFormat":99},{"version":"a0226f43a8bd8493122d61bf6fe01cd57a2d09037c775e6e269998d6a16e6dfb","impliedFormat":99},{"version":"c42f9b18f5f559b133cf9b409f678afb30df9c6498865aae9a1abad0f1e727a8","impliedFormat":99},{"version":"eabff483c855b848eefb979dbfb64c8858444c56a2f3ea0e59de026ef03fd089","impliedFormat":99},{"version":"85aa06bd38cf2d7fe53f2adf608136b80aa0004cc1186ec684ec9f17f58eab76","impliedFormat":99},{"version":"4058d0875b427fb53accb102c254afa8274821316d024960a336e3ac3ab0b39f","impliedFormat":99},{"version":"2fc203df885f75b6e2286b0cecafac52f6afabdb39656a61eed68ef6bb25db6c","impliedFormat":99},{"version":"02264596562a8bb62b6f044adcbe5ef60dc7954feca93a2faca23a93c51320e0","impliedFormat":99},{"version":"8e4772e8a1119a61458be078b24758952b2af898599b44bc50fb9fe7de22a464","impliedFormat":99},{"version":"f004c4c4005fadfff56786bc1e5d987a45d3b4f81f64ad7a416e8b865998e887","impliedFormat":99},{"version":"fc9bebf4be86621c39191eae6259a5510cdf4c820bb655f5568ba7aad21af18c","impliedFormat":99},{"version":"950da1bb01e156d02581a5acc24c3f639d3b3ef6ce8f2e752d314c2170e96a25","impliedFormat":99},{"version":"907358a13c2e757d2db30306df44eea79012b01b645d49cc869c3cbbd3c1c761","impliedFormat":99},{"version":"f95753a22340d6e32bdf3264888a95b63b0cc16c9fb198f696b2ea0f9ef7e209","impliedFormat":99},{"version":"b4c759ab69629cba0201435880cde35e62df058a676620a03f8dda998e8f14eb","impliedFormat":99},{"version":"1e055dac94e15a36e63ec72615e06653fa11acbfae0a0351d282b915a21c582e","impliedFormat":99},{"version":"b7bc2afdcb5d05c02f7421be9a705db407db295bcd7927df3548851f20ab3f29","impliedFormat":99},{"version":"8372927a8f37d0a8ba7bb694143f016225953f621b8c4709666a680892676c5d","impliedFormat":99},{"version":"7260a53873f59b8da4ad4ecab85a6649931e5f894c2bb8d066a162c9ba2e10f7","impliedFormat":99},{"version":"825964f3ced37213188a17f06a62118d9d4472967b505429267cd6d7950e1e6d","impliedFormat":99},{"version":"a6fdd29c5d849eb1e954575bc49e4ee299c6f6d7463c03ff2cdf3a56a36a3f58","impliedFormat":99},{"version":"b55d64662ed325e2b3de133ed6b304d0608580e73fe51f6d36b6777b2920e0e2","impliedFormat":99},{"version":"7625298bf5ff4738d94feeddd373cd68be33620063349425e98c075af4b0d3f1","impliedFormat":99},{"version":"2ae45c7764a1b9d3b4495c0a777beb0b49942f38349996814e65d166ceba0c81","impliedFormat":99},{"version":"f8c433ceb64ed73f5df30073584470a5657fb43263062d0b70c674d8d098ea03","impliedFormat":99},{"version":"bf54384ce70c58dc9aa7045d18d3c8f6a34825e9c69d162a17ee091aa92f59f7","impliedFormat":99},{"version":"d7c6e8bfd42ad676694510db8c691954c7b55916c439efa7f49df82b345d39ff","impliedFormat":99},{"version":"1e80ccaf4580824283a52f24d0ae50815f3fe14acd4bd1b88976d0b9121af2d3","impliedFormat":99},{"version":"409ef3786f9646ca7ae0dbc581572a3f96a03cfbbf8effae0dda04e97a8c7dc6","impliedFormat":99},{"version":"acdc60d4c26b8753f3a0c0fa3728ae301869b5e62366bcbb6d8cb432bbfae1f5","impliedFormat":99},{"version":"196bc1624163c5672f88131a0d350aeed813e9c74195ed3ce751c659e55d7673","impliedFormat":99},{"version":"b0fa608c4f46c943175aad0bcaee431b76aae2c6faa298aa11c17249635c5235","impliedFormat":99},{"version":"61ac42c3943911c1fa670c8a366251e1ee2bacd3fb50d05be2211db467f368d6","impliedFormat":99},{"version":"52704c3ec89cee11aeaece27851de17f4245ea07f66e19cc9a5bc52296b1db0e","impliedFormat":99},{"version":"6a4ea3071c8bcce4f9e467d7126298829b7d53a99d24edf51bda13ad9df40287","impliedFormat":99},{"version":"b20c04f3f66db6941a5edecce33261f72c6b5da7a7325446854f36ce1a2b7028","impliedFormat":99},{"version":"e054890fbaaf6e9e3e947c455dbba822e913c178cc985827886f81ca2718b741","impliedFormat":99},{"version":"a75c4521bfba4b32679a92ae04f60fd42b75a138e85472dc978545661b19d109","impliedFormat":99},{"version":"4feafa93b47de1fa6bc74d575224aebd7626b5d8dd8a00ab693d9f91bec7c847","impliedFormat":99},{"version":"f402846d1792466c6eda6caf002665c658f79e97adb619e624b74d99f61679d2","impliedFormat":99},{"version":"b9d120909599db6ca305a9fce6e0f1d76de1e81b01fb1f35f7ce999c4903bbb9","impliedFormat":99},{"version":"4413f7f066728af927942750e01b30de1a3b676ac5d18b47aabe75db9a0ea9dd","impliedFormat":99},{"version":"8772a37357fe831c6bd973a20282ada1b671122f318f98efe7daee760d1e58fa","impliedFormat":99},{"version":"964e983d573ab5ad2896511780a017de3f963c221984cf43af42ed8c8c5eacd3","impliedFormat":99},{"version":"f5e1bf24f2f035c15c7983ee03b5bb9e88372a574230b44e97e3c97b25d32192","impliedFormat":99},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"c6f3105a75264bbe3acd6a2d170c0c624d835c780db3c6d56c7c0148ce2dcfda","impliedFormat":99},{"version":"2c076e8b54801dd4ab8a3468446f049a1a15ab1ef14bab7d4f2c950e6d55f70f","impliedFormat":99},{"version":"47668494da229e5ec4a0d6d7274137bdc61c69b5593451c0bd395e23658a7a82","impliedFormat":99},{"version":"1ee391f23df48b306ca4633f76a5c60012b98f66c12a114fb4c2d06cdd9db3f1","impliedFormat":99},{"version":"0d594ca17de310dfbb2fdff1e9dd54b6083a61680677a90bddf3cbd5e2b64aad","impliedFormat":99},{"version":"9a6c3e2900643e20e37b47f712af6420048e737db80c1975707cfde23681b2c9","impliedFormat":99},{"version":"8305ccce8f60719683dd96bfc34257658c47bebe13b709c1c7af5bc66ff54358","signature":"cb7b4100695c5d03edd82f27b7e04fb6fc960ca905fbf3366eabbba796ab0a9b","impliedFormat":99},{"version":"e0b13997a5b3fe5eb955bb04a3943ad0688f61508a11e76eaaf99b67dd145406","signature":"083e5e1d252ae0f1774d0573f53fe453a841f8ed7a160c064873b401917e7934","impliedFormat":99},{"version":"ab95fa461a766335a3a08bf1f96940946556d3812f8f8ce565b157023350313a","signature":"874cb1a434a275c7434530a1a0c1218de1f29b5aa50718aca8475ecd2e8a31ce","impliedFormat":99}],"root":[[278,280]],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"importHelpers":true,"jsx":1,"jsxImportSource":"@fluixi/jsx","module":199,"noEmitOnError":true,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noImplicitReturns":true,"noUnusedLocals":true,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":9,"tsBuildInfoFile":"./tsconfig.lib.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[269,1],[271,2],[244,3],[187,4],[188,5],[214,6],[243,7],[189,8],[183,4],[186,9],[185,6],[212,8],[213,10],[191,8],[170,11],[152,12],[149,13],[144,14],[168,15],[163,16],[167,17],[143,18],[160,8],[157,8],[159,8],[154,8],[155,8],[162,19],[153,8],[161,8],[156,8],[169,20],[150,21],[277,22],[276,23],[275,24],[91,25],[90,26],[239,27],[235,28],[234,29],[236,27],[241,30],[240,29],[237,4],[238,27],[227,31],[215,32],[217,32],[232,33],[229,26],[218,28],[230,28],[219,32],[222,34],[216,32],[228,35],[223,28],[224,28],[231,36],[242,37],[233,21],[142,38],[94,39],[73,40],[72,41],[71,40],[78,42],[77,43],[75,44],[74,44],[84,43],[86,45],[87,46],[83,43],[88,47],[81,42],[80,48],[182,49],[141,50],[137,51],[139,52],[140,53],[95,54],[211,55],[209,56],[208,56],[210,57],[206,58],[194,59],[195,60],[193,51],[200,61],[198,62],[203,63],[204,64],[205,65],[104,66],[103,67],[106,66],[108,68],[107,67],[105,66],[102,69],[112,70],[97,67],[100,71],[99,72],[126,59],[130,59],[136,73],[128,59],[125,59],[131,59],[127,59],[134,59],[132,59],[124,74],[135,75],[117,76],[118,77],[120,78],[121,79],[123,80],[115,81],[64,82],[68,83],[225,84],[65,85],[220,84],[67,86],[226,87],[89,88],[221,89],[70,90],[61,91],[247,92],[180,93],[172,94],[245,95],[174,96],[177,94],[175,94],[178,94],[173,94],[179,94],[246,97],[181,98],[176,94],[171,99],[280,100],[278,101],[279,102],[274,103],[256,99],[251,104],[249,105],[272,106],[254,107],[265,105],[261,108],[264,107],[255,109],[248,99],[262,107],[250,105],[267,110],[252,99],[260,107],[263,107],[257,111],[253,105],[259,105],[258,99],[273,99],[266,109]],"latestChangedDtsFile":"./index.d.ts","version":"5.8.3"}
@@ -0,0 +1,47 @@
1
+ import { type SelectionMode } from '@fluixi-ui/primitives';
2
+ import type { JSX } from '@fluixi/jsx';
3
+ export interface VirtualListboxOption {
4
+ value: string;
5
+ /** Display text; defaults to `value`. Also used for typeahead + search. */
6
+ label?: string;
7
+ disabled?: boolean;
8
+ }
9
+ export interface VirtualOptionState {
10
+ active: boolean;
11
+ selected: boolean;
12
+ disabled: boolean;
13
+ }
14
+ export interface VirtualListboxProps extends Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onChange' | 'children'> {
15
+ /** The full option list — only the visible window is rendered. */
16
+ options: VirtualListboxOption[];
17
+ selectionMode?: SelectionMode;
18
+ value?: string | string[] | null;
19
+ defaultValue?: string | string[];
20
+ onChange?: (value: string) => void;
21
+ onValuesChange?: (values: string[]) => void;
22
+ disabled?: boolean;
23
+ /** Fixed row height in px (rows must be uniform to virtualize). Default 32. */
24
+ rowHeight?: number;
25
+ /** Visible viewport height in px. Default 240. */
26
+ height?: number;
27
+ overscan?: number;
28
+ /** Custom option content; defaults to the option's label/value. */
29
+ children?: (option: VirtualListboxOption, state: VirtualOptionState) => JSX.Element;
30
+ }
31
+ /**
32
+ * A listbox that virtualizes a large `options` array — only the rows in view are
33
+ * in the DOM, while keyboard navigation, typeahead and active-descendant operate
34
+ * over the full data (the active row is scrolled into view). Single or multiple
35
+ * selection. Uniform `rowHeight` is required so offsets are computable.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * <VirtualListbox
40
+ * options={items} // [{ value, label }, …] — thousands is fine
41
+ * selectionMode="multiple"
42
+ * onValuesChange={setSelected}
43
+ * />
44
+ * ```
45
+ */
46
+ export declare function VirtualListbox(props: VirtualListboxProps): JSX.Element;
47
+ //# sourceMappingURL=virtual-listbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-listbox.d.ts","sourceRoot":"","sources":["../src/virtual-listbox.tsx"],"names":[],"mappings":"AAIA,OAAO,EAKL,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACzE,kEAAkE;IAClE,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,kBAAkB,KAAK,GAAG,CAAC,OAAO,CAAC;CACrF;AAOD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,GAAG,CAAC,OAAO,CA0LtE"}
@@ -0,0 +1,197 @@
1
+ import { splitProps, createNativeElement, spread, mergeProps, insert, createComponent, handleRef, delegateEvents } from "@fluixi/dom";
2
+ import { createSignal, createMemo } from "@fluixi/reactive/signal";
3
+ import { For } from "@fluixi/core";
4
+ import { createId, composeEventHandlers, dataAttr, composeId } from "@fluixi-ui/kit";
5
+ import { createSelectionManager, createVirtualizer, createTypeahead, getNextEnabledIndex } from "@fluixi-ui/primitives";
6
+ delegateEvents(["keydown", "focus", "click"]);
7
+ function toKeys(value) {
8
+ if (value == null) return [];
9
+ return Array.isArray(value) ? value : [value];
10
+ }
11
+ function VirtualListbox(props) {
12
+ const [local, others] = splitProps(props, ["options", "selectionMode", "value", "defaultValue", "onChange", "onValuesChange", "disabled", "rowHeight", "height", "overscan", "children", "ref", "onKeyDown", "style"]);
13
+ const baseId = createId("vlistbox");
14
+ const selectionMode = local.selectionMode ?? "single";
15
+ const multiple = selectionMode === "multiple";
16
+ const rowHeight = () => local.rowHeight ?? 32;
17
+ const isDisabled = () => local.disabled ?? false;
18
+ const options = () => local.options;
19
+ const optionId = (index) => composeId(baseId, `option-${index}`);
20
+ const selection = createSelectionManager({
21
+ mode: selectionMode,
22
+ selectedKeys: local.value !== void 0 ? () => toKeys(local.value) : void 0,
23
+ defaultSelectedKeys: toKeys(local.defaultValue),
24
+ disallowEmptySelection: !multiple,
25
+ onSelectionChange: (keys) => {
26
+ const list = [...keys];
27
+ if (multiple) local.onValuesChange?.(list);
28
+ else local.onChange?.(list[0] ?? "");
29
+ }
30
+ });
31
+ const [activeIndex, setActiveIndex] = createSignal(-1);
32
+ const [scrollEl, setScrollEl] = createSignal(void 0);
33
+ const virtualizer = createVirtualizer({
34
+ count: () => options().length,
35
+ estimateSize: () => rowHeight(),
36
+ overscan: local.overscan ?? 6
37
+ });
38
+ const scrollIntoView = (index) => {
39
+ const el = scrollEl();
40
+ if (!el || index < 0) return;
41
+ const top = index * rowHeight();
42
+ const bottom = top + rowHeight();
43
+ if (top < el.scrollTop) el.scrollTop = top;
44
+ else if (bottom > el.scrollTop + el.clientHeight) el.scrollTop = bottom - el.clientHeight;
45
+ };
46
+ const move = (action) => {
47
+ const next = getNextEnabledIndex(options(), activeIndex(), action, true);
48
+ if (next !== -1) {
49
+ setActiveIndex(next);
50
+ scrollIntoView(next);
51
+ }
52
+ };
53
+ const typeahead = createTypeahead({
54
+ getItems: () => options().map((option) => ({
55
+ textValue: option.label ?? option.value,
56
+ disabled: option.disabled
57
+ })),
58
+ getActiveIndex: () => activeIndex(),
59
+ onMatch: (index) => {
60
+ setActiveIndex(index);
61
+ scrollIntoView(index);
62
+ }
63
+ });
64
+ const pressOption = (index) => {
65
+ const option = options()[index];
66
+ if (!option || option.disabled || isDisabled()) return;
67
+ setActiveIndex(index);
68
+ if (multiple) selection.toggle(option.value);
69
+ else selection.select(option.value);
70
+ };
71
+ const onKeyDown = (event) => {
72
+ if (isDisabled()) return;
73
+ switch (event.key) {
74
+ case "ArrowDown":
75
+ event.preventDefault();
76
+ move(activeIndex() === -1 ? "first" : "next");
77
+ break;
78
+ case "ArrowUp":
79
+ event.preventDefault();
80
+ move(activeIndex() === -1 ? "last" : "previous");
81
+ break;
82
+ case "Home":
83
+ event.preventDefault();
84
+ move("first");
85
+ break;
86
+ case "End":
87
+ event.preventDefault();
88
+ move("last");
89
+ break;
90
+ case "Enter":
91
+ case " ": {
92
+ if (event.key === " " && typeahead.buffer() !== "") {
93
+ typeahead.onKeyDown(event);
94
+ break;
95
+ }
96
+ event.preventDefault();
97
+ if (activeIndex() !== -1) pressOption(activeIndex());
98
+ break;
99
+ }
100
+ default:
101
+ typeahead.onKeyDown(event);
102
+ }
103
+ };
104
+ const onFocus = () => {
105
+ if (activeIndex() === -1) move("first");
106
+ };
107
+ const setRef = (node) => {
108
+ virtualizer.scrollRef(node);
109
+ setScrollEl(node);
110
+ handleRef(local.ref, node);
111
+ };
112
+ const activeId = () => activeIndex() !== -1 ? optionId(activeIndex()) : void 0;
113
+ return (() => {
114
+ const _el$ = createNativeElement("div");
115
+ spread({
116
+ element: _el$,
117
+ props: mergeProps(others, {
118
+ ref: setRef,
119
+ role: "listbox",
120
+ id: baseId,
121
+ tabindex: () => isDisabled() ? -1 : 0,
122
+ "aria-multiselectable": () => multiple ? "true" : void 0,
123
+ "aria-disabled": () => isDisabled() ? "true" : void 0,
124
+ "aria-activedescendant": activeId,
125
+ "data-virtual-listbox": "",
126
+ "data-mode": selectionMode,
127
+ style: () => `overflow:auto;height:${local.height ?? 240}px;${typeof local.style === "string" ? local.style : ""}`,
128
+ onKeyDown: composeEventHandlers([local.onKeyDown, onKeyDown]),
129
+ onFocus
130
+ })
131
+ });
132
+ insert(_el$, (() => {
133
+ const _el$2 = createNativeElement("div");
134
+ spread({
135
+ element: _el$2,
136
+ props: {
137
+ style: () => `position:relative;height:${virtualizer.getTotalSize()}px`
138
+ }
139
+ });
140
+ insert(_el$2, createMemo(() => createComponent(For, {
141
+ get each() {
142
+ return virtualizer.getVirtualItems;
143
+ },
144
+ get children() {
145
+ return (item) => {
146
+ const option = () => options()[item.index];
147
+ const active = () => activeIndex() === item.index;
148
+ const selected = () => selection.isSelected(option().value);
149
+ const disabled = () => option().disabled ?? false;
150
+ return (() => {
151
+ const _el$3 = createNativeElement("div");
152
+ spread({
153
+ element: _el$3,
154
+ props: {
155
+ role: "option",
156
+ id: () => optionId(item.index),
157
+ "aria-selected": () => selected() ? "true" : "false",
158
+ "aria-disabled": () => disabled() ? "true" : void 0,
159
+ "data-selected": () => dataAttr(selected()),
160
+ "data-active": () => dataAttr(active()),
161
+ "data-disabled": () => dataAttr(disabled()),
162
+ style: () => `position:absolute;top:${item.start}px;left:0;width:100%;height:${item.size}px;box-sizing:border-box`,
163
+ onClick: () => pressOption(item.index),
164
+ onPointerMove: () => {
165
+ if (!disabled()) setActiveIndex(item.index);
166
+ }
167
+ }
168
+ });
169
+ insert(_el$3, (() => {
170
+ const _el$4 = createNativeElement("span");
171
+ spread({
172
+ element: _el$4,
173
+ props: {
174
+ "data-select-item-indicator": "",
175
+ "aria-hidden": "true"
176
+ }
177
+ });
178
+ return _el$4;
179
+ })());
180
+ insert(_el$3, createMemo(() => local.children ? local.children(option(), {
181
+ active: active(),
182
+ selected: selected(),
183
+ disabled: disabled()
184
+ }) : option().label ?? option().value), null);
185
+ return _el$3;
186
+ })();
187
+ };
188
+ }
189
+ })), null);
190
+ return _el$2;
191
+ })());
192
+ return _el$;
193
+ })();
194
+ }
195
+ export {
196
+ VirtualListbox
197
+ };
package/package.json ADDED
@@ -0,0 +1,62 @@
1
+ {
2
+ "name": "@fluixi-ui/listbox",
3
+ "version": "0.1.1",
4
+ "description": "Headless listbox for the Fluixi UI ecosystem",
5
+ "license": "MIT",
6
+ "private": false,
7
+ "type": "module",
8
+ "publishConfig": {
9
+ "registry": "https://registry.npmjs.org/",
10
+ "access": "public"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/fluixi/ui.git",
15
+ "directory": "packages/listbox"
16
+ },
17
+ "sideEffects": [
18
+ "**/*.css",
19
+ "./src/index.ts",
20
+ "./dist/index.js"
21
+ ],
22
+ "main": "./dist/index.js",
23
+ "module": "./dist/index.js",
24
+ "types": "./dist/index.d.ts",
25
+ "files": [
26
+ "dist",
27
+ "README.md",
28
+ "LICENSE"
29
+ ],
30
+ "exports": {
31
+ "./package.json": "./package.json",
32
+ ".": {
33
+ "types": "./dist/index.d.ts",
34
+ "import": "./dist/index.js",
35
+ "default": "./dist/index.js"
36
+ }
37
+ },
38
+ "peerDependencies": {
39
+ "@fluixi/core": ">=1.0.0-alpha.41",
40
+ "@fluixi/jsx": ">=1.0.0-alpha.41",
41
+ "@fluixi/dom": ">=1.0.0-alpha.41",
42
+ "@fluixi/reactive": ">=1.0.0-alpha.41"
43
+ },
44
+ "dependencies": {
45
+ "@fluixi-ui/kit": "0.1.0",
46
+ "@fluixi-ui/primitives": "0.1.0",
47
+ "@fluixi-ui/tokens": "0.3.0"
48
+ },
49
+ "devDependencies": {
50
+ "@fluixi/core": "alpha",
51
+ "@fluixi/jsx": "alpha",
52
+ "@fluixi/dom": "alpha",
53
+ "@fluixi/vite-plugin": "alpha",
54
+ "vite": "^6.0.0",
55
+ "@fluixi/reactive": "alpha"
56
+ },
57
+ "scripts": {
58
+ "build": "vite build && tsc -p tsconfig.lib.json",
59
+ "test": "vitest run",
60
+ "test:watch": "vitest"
61
+ }
62
+ }