@proyecto-viviana/solidaria-components 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ActionBar.js +184 -0
- package/dist/ActionBar.js.map +1 -0
- package/dist/ActionBar.jsx +128 -0
- package/dist/ActionBar.jsx.map +1 -0
- package/dist/ActionGroup.js +179 -0
- package/dist/ActionGroup.js.map +1 -0
- package/dist/ActionGroup.jsx +129 -0
- package/dist/ActionGroup.jsx.map +1 -0
- package/dist/Alert.js +111 -0
- package/dist/Alert.js.map +1 -0
- package/dist/Alert.jsx +82 -0
- package/dist/Alert.jsx.map +1 -0
- package/dist/Autocomplete.js +130 -0
- package/dist/Autocomplete.js.map +1 -0
- package/dist/Autocomplete.jsx +116 -0
- package/dist/Autocomplete.jsx.map +1 -0
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs.js +334 -0
- package/dist/Breadcrumbs.js.map +1 -0
- package/dist/Breadcrumbs.jsx +266 -0
- package/dist/Breadcrumbs.jsx.map +1 -0
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +348 -0
- package/dist/Button.js.map +1 -0
- package/dist/Button.jsx +314 -0
- package/dist/Button.jsx.map +1 -0
- package/dist/Calendar.d.ts +4 -4
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Calendar.js +538 -0
- package/dist/Calendar.js.map +1 -0
- package/dist/Calendar.jsx +333 -0
- package/dist/Calendar.jsx.map +1 -0
- package/dist/CalendarPicker.d.ts +33 -0
- package/dist/CalendarPicker.d.ts.map +1 -0
- package/dist/CalendarPicker.js +44 -0
- package/dist/CalendarPicker.js.map +1 -0
- package/dist/CalendarPicker.jsx +44 -0
- package/dist/CalendarPicker.jsx.map +1 -0
- package/dist/Checkbox.d.ts +83 -4
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +923 -0
- package/dist/Checkbox.js.map +1 -0
- package/dist/Checkbox.jsx +707 -0
- package/dist/Checkbox.jsx.map +1 -0
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +202 -0
- package/dist/Collection.js.map +1 -0
- package/dist/Collection.jsx +152 -0
- package/dist/Collection.jsx.map +1 -0
- package/dist/Color.d.ts.map +1 -1
- package/dist/Color.js +1720 -0
- package/dist/Color.js.map +1 -0
- package/dist/Color.jsx +1344 -0
- package/dist/Color.jsx.map +1 -0
- package/dist/ColorEditor.js +208 -0
- package/dist/ColorEditor.js.map +1 -0
- package/dist/ColorEditor.jsx +120 -0
- package/dist/ColorEditor.jsx.map +1 -0
- package/dist/ComboBox.d.ts +8 -5
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +992 -0
- package/dist/ComboBox.js.map +1 -0
- package/dist/ComboBox.jsx +714 -0
- package/dist/ComboBox.jsx.map +1 -0
- package/dist/ContextualHelpTrigger.js +146 -0
- package/dist/ContextualHelpTrigger.js.map +1 -0
- package/dist/ContextualHelpTrigger.jsx +109 -0
- package/dist/ContextualHelpTrigger.jsx.map +1 -0
- package/dist/DateField.d.ts +3 -3
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DateField.js +4 -0
- package/dist/DateField.jsx +4 -0
- package/dist/DateField2.js +499 -0
- package/dist/DateField2.js.map +1 -0
- package/dist/DateField2.jsx +317 -0
- package/dist/DateField2.jsx.map +1 -0
- package/dist/DatePicker.d.ts +4 -4
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker.js +991 -0
- package/dist/DatePicker.js.map +1 -0
- package/dist/DatePicker.jsx +682 -0
- package/dist/DatePicker.jsx.map +1 -0
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Dialog.js +337 -0
- package/dist/Dialog.js.map +1 -0
- package/dist/Dialog.jsx +192 -0
- package/dist/Dialog.jsx.map +1 -0
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/Disclosure.js +328 -0
- package/dist/Disclosure.js.map +1 -0
- package/dist/Disclosure.jsx +230 -0
- package/dist/Disclosure.jsx.map +1 -0
- package/dist/DragAndDrop.d.ts.map +1 -1
- package/dist/DragAndDrop.js +176 -0
- package/dist/DragAndDrop.js.map +1 -0
- package/dist/DragAndDrop.jsx +160 -0
- package/dist/DragAndDrop.jsx.map +1 -0
- package/dist/DropZone.d.ts.map +1 -1
- package/dist/DropZone.js +189 -0
- package/dist/DropZone.js.map +1 -0
- package/dist/DropZone.jsx +144 -0
- package/dist/DropZone.jsx.map +1 -0
- package/dist/FieldError.js +66 -0
- package/dist/FieldError.js.map +1 -0
- package/dist/FieldError.jsx +47 -0
- package/dist/FieldError.jsx.map +1 -0
- package/dist/FileTrigger.js +79 -0
- package/dist/FileTrigger.js.map +1 -0
- package/dist/FileTrigger.jsx +49 -0
- package/dist/FileTrigger.jsx.map +1 -0
- package/dist/Focusable.js +70 -0
- package/dist/Focusable.js.map +1 -0
- package/dist/Focusable.jsx +69 -0
- package/dist/Focusable.jsx.map +1 -0
- package/dist/Form.js +99 -0
- package/dist/Form.js.map +1 -0
- package/dist/Form.jsx +73 -0
- package/dist/Form.jsx.map +1 -0
- package/dist/GridList.d.ts +34 -2
- package/dist/GridList.d.ts.map +1 -1
- package/dist/GridList.js +723 -0
- package/dist/GridList.js.map +1 -0
- package/dist/GridList.jsx +552 -0
- package/dist/GridList.jsx.map +1 -0
- package/dist/HiddenTimeInput.js +104 -0
- package/dist/HiddenTimeInput.js.map +1 -0
- package/dist/HiddenTimeInput.jsx +69 -0
- package/dist/HiddenTimeInput.jsx.map +1 -0
- package/dist/Icon.d.ts.map +1 -1
- package/dist/Icon.js +127 -0
- package/dist/Icon.js.map +1 -0
- package/dist/Icon.jsx +72 -0
- package/dist/Icon.jsx.map +1 -0
- package/dist/Keyboard.js +30 -0
- package/dist/Keyboard.js.map +1 -0
- package/dist/Keyboard.jsx +24 -0
- package/dist/Keyboard.jsx.map +1 -0
- package/dist/Landmark.js +134 -0
- package/dist/Landmark.js.map +1 -0
- package/dist/Landmark.jsx +118 -0
- package/dist/Landmark.jsx.map +1 -0
- package/dist/Link.d.ts.map +1 -1
- package/dist/Link.js +219 -0
- package/dist/Link.js.map +1 -0
- package/dist/Link.jsx +189 -0
- package/dist/Link.jsx.map +1 -0
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListBox.js +670 -0
- package/dist/ListBox.js.map +1 -0
- package/dist/ListBox.jsx +508 -0
- package/dist/ListBox.jsx.map +1 -0
- package/dist/Menu.d.ts +27 -9
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Menu.js +1254 -0
- package/dist/Menu.js.map +1 -0
- package/dist/Menu.jsx +1042 -0
- package/dist/Menu.jsx.map +1 -0
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Meter.js +123 -0
- package/dist/Meter.js.map +1 -0
- package/dist/Meter.jsx +107 -0
- package/dist/Meter.jsx.map +1 -0
- package/dist/Modal.d.ts.map +1 -1
- package/dist/Modal.js +380 -0
- package/dist/Modal.js.map +1 -0
- package/dist/Modal.jsx +314 -0
- package/dist/Modal.jsx.map +1 -0
- package/dist/NumberField.d.ts +3 -3
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/NumberField.js +573 -0
- package/dist/NumberField.js.map +1 -0
- package/dist/NumberField.jsx +443 -0
- package/dist/NumberField.jsx.map +1 -0
- package/dist/Popover.d.ts +10 -2
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Popover.js +464 -0
- package/dist/Popover.js.map +1 -0
- package/dist/Popover.jsx +333 -0
- package/dist/Popover.jsx.map +1 -0
- package/dist/Pressable.js +69 -0
- package/dist/Pressable.js.map +1 -0
- package/dist/Pressable.jsx +68 -0
- package/dist/Pressable.jsx.map +1 -0
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar.js +130 -0
- package/dist/ProgressBar.js.map +1 -0
- package/dist/ProgressBar.jsx +114 -0
- package/dist/ProgressBar.jsx.map +1 -0
- package/dist/RadioGroup.d.ts +82 -4
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +931 -0
- package/dist/RadioGroup.js.map +1 -0
- package/dist/RadioGroup.jsx +681 -0
- package/dist/RadioGroup.jsx.map +1 -0
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RangeCalendar.js +410 -0
- package/dist/RangeCalendar.js.map +1 -0
- package/dist/RangeCalendar.jsx +253 -0
- package/dist/RangeCalendar.jsx.map +1 -0
- package/dist/RouterProvider.js +118 -0
- package/dist/RouterProvider.js.map +1 -0
- package/dist/RouterProvider.jsx +112 -0
- package/dist/RouterProvider.jsx.map +1 -0
- package/dist/SearchField.d.ts +2 -2
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/SearchField.js +643 -0
- package/dist/SearchField.js.map +1 -0
- package/dist/SearchField.jsx +526 -0
- package/dist/SearchField.jsx.map +1 -0
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +1031 -0
- package/dist/Select.js.map +1 -0
- package/dist/Select.jsx +744 -0
- package/dist/Select.jsx.map +1 -0
- package/dist/SelectionIndicator.d.ts.map +1 -1
- package/dist/SelectionIndicator.js +86 -0
- package/dist/SelectionIndicator.js.map +1 -0
- package/dist/SelectionIndicator.jsx +50 -0
- package/dist/SelectionIndicator.jsx.map +1 -0
- package/dist/Separator.js +97 -0
- package/dist/Separator.js.map +1 -0
- package/dist/Separator.jsx +85 -0
- package/dist/Separator.jsx.map +1 -0
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/SharedElementTransition.js +165 -0
- package/dist/SharedElementTransition.js.map +1 -0
- package/dist/SharedElementTransition.jsx +138 -0
- package/dist/SharedElementTransition.jsx.map +1 -0
- package/dist/Slider.d.ts +33 -1
- package/dist/Slider.d.ts.map +1 -1
- package/dist/Slider.js +515 -0
- package/dist/Slider.js.map +1 -0
- package/dist/Slider.jsx +403 -0
- package/dist/Slider.jsx.map +1 -0
- package/dist/StepList.js +198 -0
- package/dist/StepList.js.map +1 -0
- package/dist/StepList.jsx +141 -0
- package/dist/StepList.jsx.map +1 -0
- package/dist/Switch.d.ts +65 -2
- package/dist/Switch.d.ts.map +1 -1
- package/dist/Switch.js +534 -0
- package/dist/Switch.js.map +1 -0
- package/dist/Switch.jsx +393 -0
- package/dist/Switch.jsx.map +1 -0
- package/dist/Table.d.ts +48 -0
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +1759 -0
- package/dist/Table.js.map +1 -0
- package/dist/Table.jsx +1348 -0
- package/dist/Table.jsx.map +1 -0
- package/dist/Tabs.d.ts +0 -4
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/Tabs.js +595 -0
- package/dist/Tabs.js.map +1 -0
- package/dist/Tabs.jsx +367 -0
- package/dist/Tabs.jsx.map +1 -0
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/TagGroup.js +378 -0
- package/dist/TagGroup.js.map +1 -0
- package/dist/TagGroup.jsx +270 -0
- package/dist/TagGroup.jsx.map +1 -0
- package/dist/Text.d.ts +18 -6
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +42 -0
- package/dist/Text.js.map +1 -0
- package/dist/Text.jsx +35 -0
- package/dist/Text.jsx.map +1 -0
- package/dist/TextField.d.ts +7 -6
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TextField.js +436 -0
- package/dist/TextField.js.map +1 -0
- package/dist/TextField.jsx +403 -0
- package/dist/TextField.jsx.map +1 -0
- package/dist/TimeField.d.ts +3 -3
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/TimeField.js +372 -0
- package/dist/TimeField.js.map +1 -0
- package/dist/TimeField.jsx +224 -0
- package/dist/TimeField.jsx.map +1 -0
- package/dist/Toast.d.ts +14 -0
- package/dist/Toast.d.ts.map +1 -1
- package/dist/Toast.js +551 -0
- package/dist/Toast.js.map +1 -0
- package/dist/Toast.jsx +361 -0
- package/dist/Toast.jsx.map +1 -0
- package/dist/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton.js +123 -0
- package/dist/ToggleButton.js.map +1 -0
- package/dist/ToggleButton.jsx +88 -0
- package/dist/ToggleButton.jsx.map +1 -0
- package/dist/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButtonGroup.js +114 -0
- package/dist/ToggleButtonGroup.js.map +1 -0
- package/dist/ToggleButtonGroup.jsx +85 -0
- package/dist/ToggleButtonGroup.jsx.map +1 -0
- package/dist/Toolbar.js +112 -0
- package/dist/Toolbar.js.map +1 -0
- package/dist/Toolbar.jsx +92 -0
- package/dist/Toolbar.jsx.map +1 -0
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip.js +539 -0
- package/dist/Tooltip.js.map +1 -0
- package/dist/Tooltip.jsx +465 -0
- package/dist/Tooltip.jsx.map +1 -0
- package/dist/Tree.d.ts +14 -2
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Tree.js +1424 -0
- package/dist/Tree.js.map +1 -0
- package/dist/Tree.jsx +1172 -0
- package/dist/Tree.jsx.map +1 -0
- package/dist/Virtualizer.d.ts +16 -2
- package/dist/Virtualizer.d.ts.map +1 -1
- package/dist/Virtualizer.js +2 -0
- package/dist/Virtualizer.jsx +2 -0
- package/dist/Virtualizer2.js +751 -0
- package/dist/Virtualizer2.js.map +1 -0
- package/dist/Virtualizer2.jsx +730 -0
- package/dist/Virtualizer2.jsx.map +1 -0
- package/dist/VirtualizerLayouts.d.ts +18 -0
- package/dist/VirtualizerLayouts.d.ts.map +1 -1
- package/dist/VisuallyHidden.js +42 -0
- package/dist/VisuallyHidden.js.map +1 -0
- package/dist/VisuallyHidden.jsx +35 -0
- package/dist/VisuallyHidden.jsx.map +1 -0
- package/dist/contexts.js +33 -0
- package/dist/contexts.js.map +1 -0
- package/dist/contexts.jsx +33 -0
- package/dist/contexts.jsx.map +1 -0
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +70 -23711
- package/dist/index.jsx +70 -18116
- package/dist/useDragAndDrop.js +2 -0
- package/dist/useDragAndDrop.jsx +2 -0
- package/dist/useDragAndDrop2.js +395 -0
- package/dist/useDragAndDrop2.js.map +1 -0
- package/dist/useDragAndDrop2.jsx +395 -0
- package/dist/useDragAndDrop2.jsx.map +1 -0
- package/dist/utils.d.ts +83 -11
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +285 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.jsx +277 -0
- package/dist/utils.jsx.map +1 -0
- package/dist/virtualizer/Layout.js +144 -0
- package/dist/virtualizer/Layout.js.map +1 -0
- package/dist/virtualizer/Layout.jsx +144 -0
- package/dist/virtualizer/Layout.jsx.map +1 -0
- package/package.json +401 -4
- package/src/Breadcrumbs.tsx +3 -1
- package/src/Button.tsx +90 -23
- package/src/Calendar.tsx +27 -10
- package/src/CalendarPicker.tsx +73 -0
- package/src/Checkbox.tsx +539 -3
- package/src/Collection.tsx +9 -3
- package/src/Color.tsx +42 -14
- package/src/ComboBox.tsx +126 -14
- package/src/DateField.tsx +20 -2
- package/src/DatePicker.tsx +117 -10
- package/src/Dialog.tsx +13 -5
- package/src/Disclosure.tsx +3 -1
- package/src/DragAndDrop.tsx +3 -1
- package/src/DropZone.tsx +3 -1
- package/src/GridList.tsx +125 -24
- package/src/Icon.tsx +3 -1
- package/src/Link.tsx +3 -1
- package/src/ListBox.tsx +31 -4
- package/src/Menu.tsx +298 -131
- package/src/Meter.tsx +3 -1
- package/src/Modal.tsx +100 -52
- package/src/NumberField.tsx +73 -10
- package/src/Popover.tsx +49 -11
- package/src/ProgressBar.tsx +3 -1
- package/src/RadioGroup.tsx +468 -4
- package/src/RangeCalendar.tsx +3 -1
- package/src/SearchField.tsx +27 -3
- package/src/Select.tsx +22 -7
- package/src/SelectionIndicator.tsx +3 -1
- package/src/SharedElementTransition.tsx +3 -1
- package/src/Slider.tsx +159 -13
- package/src/Switch.tsx +395 -2
- package/src/Table.tsx +409 -95
- package/src/Tabs.tsx +16 -45
- package/src/TagGroup.tsx +4 -1
- package/src/Text.tsx +31 -10
- package/src/TextField.tsx +73 -10
- package/src/TimeField.tsx +20 -2
- package/src/Toast.tsx +79 -14
- package/src/ToggleButton.tsx +3 -1
- package/src/ToggleButtonGroup.tsx +3 -1
- package/src/Tooltip.tsx +55 -8
- package/src/Tree.tsx +77 -9
- package/src/Virtualizer.tsx +180 -31
- package/src/VirtualizerLayouts.ts +45 -10
- package/src/index.ts +50 -0
- package/src/utils.tsx +243 -27
- package/dist/index.js.map +0 -1
- package/dist/index.jsx.map +0 -1
package/dist/ListBox.js
ADDED
|
@@ -0,0 +1,670 @@
|
|
|
1
|
+
import { filterDOMProps, useRenderProps } from "./utils.js";
|
|
2
|
+
import { SharedElementTransition } from "./SharedElementTransition.js";
|
|
3
|
+
import { SelectionIndicatorContext } from "./SelectionIndicator.js";
|
|
4
|
+
import { CollectionRendererContext, Group, Header, Section, flattenCollectionEntries, isCollectionSection, useCollectionRenderer } from "./Collection.js";
|
|
5
|
+
import { r as useVirtualizerContext } from "./Virtualizer2.js";
|
|
6
|
+
import { getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator } from "./DragAndDrop.js";
|
|
7
|
+
import { className, createComponent, effect, getNextElement, getNextMarker, insert, memo, mergeProps, runHydrationEvents, setAttribute, spread, style, template, use } from "solid-js/web";
|
|
8
|
+
import { For, Show, createContext, createEffect, createMemo, createSignal, onCleanup, splitProps, useContext } from "solid-js";
|
|
9
|
+
import { createFocusRing, createListBox, createOption, createScrollIntoViewOnFocus, mergeProps as mergeProps$2, useLocale } from "@proyecto-viviana/solidaria";
|
|
10
|
+
import { createListState } from "@proyecto-viviana/solid-stately";
|
|
11
|
+
//#region src/ListBox.tsx
|
|
12
|
+
/**
|
|
13
|
+
* ListBox component for solidaria-components
|
|
14
|
+
*
|
|
15
|
+
* A pre-wired headless listbox that combines state + aria hooks.
|
|
16
|
+
* Port of react-aria-components/src/ListBox.tsx
|
|
17
|
+
*/
|
|
18
|
+
var _tmpl$ = /*#__PURE__*/ template(`<span>`), _tmpl$2 = /*#__PURE__*/ template(`<ul><!$><!/><!$><!/>`), _tmpl$3 = /*#__PURE__*/ template(`<li role=option data-empty-state style=display:contents>`), _tmpl$4 = /*#__PURE__*/ template(`<ul role=group>`), _tmpl$5 = /*#__PURE__*/ template(`<li role=presentation data-section-wrapper>`), _tmpl$6 = /*#__PURE__*/ template(`<li role=presentation aria-hidden=true data-virtualizer-spacer=top>`), _tmpl$7 = /*#__PURE__*/ template(`<li role=presentation aria-hidden=true data-virtualizer-spacer=bottom>`), _tmpl$8 = /*#__PURE__*/ template(`<li>`), _tmpl$9 = /*#__PURE__*/ template(`<li inert style=position:relative;width:0;height:0;overflow:hidden><div style=position:absolute;height:1px;width:1px>`), _tmpl$0 = /*#__PURE__*/ template(`<li role=option tabindex=0>`);
|
|
19
|
+
function assignRef(ref, el) {
|
|
20
|
+
if (!ref) return;
|
|
21
|
+
if (typeof ref === "function") ref(el);
|
|
22
|
+
else ref.current = el;
|
|
23
|
+
}
|
|
24
|
+
const ListBoxContext = createContext(null);
|
|
25
|
+
const ListBoxStateContext = createContext(null);
|
|
26
|
+
const ListStateContext = ListBoxStateContext;
|
|
27
|
+
/**
|
|
28
|
+
* A listbox displays a list of options and allows a user to select one or more of them.
|
|
29
|
+
*/
|
|
30
|
+
function ListBox(props) {
|
|
31
|
+
const contextSlotProps = useContext(ListBoxContext)?.slots?.[props.slot ?? "default"];
|
|
32
|
+
const [local, stateProps, ariaProps] = splitProps(contextSlotProps ? mergeProps$2(contextSlotProps, props) : props, [
|
|
33
|
+
"children",
|
|
34
|
+
"class",
|
|
35
|
+
"style",
|
|
36
|
+
"slot",
|
|
37
|
+
"renderEmptyState",
|
|
38
|
+
"hasMore",
|
|
39
|
+
"isLoading",
|
|
40
|
+
"onLoadMore",
|
|
41
|
+
"dragAndDropHooks",
|
|
42
|
+
"slots",
|
|
43
|
+
"ref"
|
|
44
|
+
], [
|
|
45
|
+
"items",
|
|
46
|
+
"getKey",
|
|
47
|
+
"getTextValue",
|
|
48
|
+
"getDisabled",
|
|
49
|
+
"disabledKeys",
|
|
50
|
+
"disabledBehavior",
|
|
51
|
+
"selectionMode",
|
|
52
|
+
"selectionBehavior",
|
|
53
|
+
"selectedKeys",
|
|
54
|
+
"defaultSelectedKeys",
|
|
55
|
+
"onSelectionChange",
|
|
56
|
+
"layout",
|
|
57
|
+
"orientation"
|
|
58
|
+
]);
|
|
59
|
+
const flatItems = createMemo(() => {
|
|
60
|
+
return flattenCollectionEntries(stateProps.items);
|
|
61
|
+
});
|
|
62
|
+
const hasSections = createMemo(() => stateProps.items.some((item) => isCollectionSection(item)));
|
|
63
|
+
const state = createListState({
|
|
64
|
+
get items() {
|
|
65
|
+
return flatItems();
|
|
66
|
+
},
|
|
67
|
+
get getKey() {
|
|
68
|
+
return stateProps.getKey;
|
|
69
|
+
},
|
|
70
|
+
get getTextValue() {
|
|
71
|
+
return stateProps.getTextValue;
|
|
72
|
+
},
|
|
73
|
+
get getDisabled() {
|
|
74
|
+
return stateProps.getDisabled;
|
|
75
|
+
},
|
|
76
|
+
get disabledKeys() {
|
|
77
|
+
return stateProps.disabledKeys;
|
|
78
|
+
},
|
|
79
|
+
get selectionMode() {
|
|
80
|
+
return stateProps.selectionMode;
|
|
81
|
+
},
|
|
82
|
+
get selectionBehavior() {
|
|
83
|
+
return stateProps.selectionBehavior;
|
|
84
|
+
},
|
|
85
|
+
get disabledBehavior() {
|
|
86
|
+
return stateProps.disabledBehavior;
|
|
87
|
+
},
|
|
88
|
+
get selectedKeys() {
|
|
89
|
+
return stateProps.selectedKeys;
|
|
90
|
+
},
|
|
91
|
+
get defaultSelectedKeys() {
|
|
92
|
+
return stateProps.defaultSelectedKeys;
|
|
93
|
+
},
|
|
94
|
+
get onSelectionChange() {
|
|
95
|
+
return stateProps.onSelectionChange;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
const resolveDisabled = () => {
|
|
99
|
+
const disabled = ariaProps.isDisabled;
|
|
100
|
+
if (typeof disabled === "function") return disabled();
|
|
101
|
+
return !!disabled;
|
|
102
|
+
};
|
|
103
|
+
const locale = useLocale();
|
|
104
|
+
const listBoxAria = createListBox({
|
|
105
|
+
...ariaProps,
|
|
106
|
+
get isDisabled() {
|
|
107
|
+
return resolveDisabled();
|
|
108
|
+
},
|
|
109
|
+
get orientation() {
|
|
110
|
+
return stateProps.orientation ?? "vertical";
|
|
111
|
+
},
|
|
112
|
+
get direction() {
|
|
113
|
+
return locale().direction;
|
|
114
|
+
}
|
|
115
|
+
}, state, () => listRef());
|
|
116
|
+
const { isFocused, isFocusVisible, focusProps } = createFocusRing();
|
|
117
|
+
const renderValues = createMemo(() => ({
|
|
118
|
+
isFocused: state.isFocused() || isFocused(),
|
|
119
|
+
isFocusVisible: isFocusVisible(),
|
|
120
|
+
isDisabled: resolveDisabled(),
|
|
121
|
+
isEmpty: state.collection().size === 0
|
|
122
|
+
}));
|
|
123
|
+
const renderProps = useRenderProps({
|
|
124
|
+
class: local.class,
|
|
125
|
+
style: local.style,
|
|
126
|
+
defaultClassName: "solidaria-ListBox"
|
|
127
|
+
}, renderValues);
|
|
128
|
+
const domProps = createMemo(() => {
|
|
129
|
+
return filterDOMProps(ariaProps, { global: true });
|
|
130
|
+
});
|
|
131
|
+
const cleanListBoxProps = () => {
|
|
132
|
+
const { ref: _ref1, ...rest } = listBoxAria.listBoxProps;
|
|
133
|
+
return rest;
|
|
134
|
+
};
|
|
135
|
+
const cleanFocusProps = () => {
|
|
136
|
+
const { ref: _ref2, ...rest } = focusProps;
|
|
137
|
+
return rest;
|
|
138
|
+
};
|
|
139
|
+
const cleanLabelProps = () => {
|
|
140
|
+
const { ref: _ref3, ...rest } = listBoxAria.labelProps;
|
|
141
|
+
return rest;
|
|
142
|
+
};
|
|
143
|
+
const [listRef, setListRef] = createSignal(null);
|
|
144
|
+
createScrollIntoViewOnFocus({
|
|
145
|
+
focusedKey: () => state.focusedKey(),
|
|
146
|
+
isActive: () => state.isFocused(),
|
|
147
|
+
ref: () => listRef()
|
|
148
|
+
});
|
|
149
|
+
const isEmpty = () => stateProps.items.length === 0;
|
|
150
|
+
const parentCollectionRenderer = useCollectionRenderer();
|
|
151
|
+
const getItemNodes = createMemo(() => Array.from(state.collection()).filter((node) => node.type === "item"));
|
|
152
|
+
const getDropTargetByIndex = (index, position) => {
|
|
153
|
+
const node = getItemNodes()[index];
|
|
154
|
+
if (!node) return null;
|
|
155
|
+
return {
|
|
156
|
+
type: "item",
|
|
157
|
+
key: node.key,
|
|
158
|
+
dropPosition: position
|
|
159
|
+
};
|
|
160
|
+
};
|
|
161
|
+
const hasDroppableDnd = createMemo(() => {
|
|
162
|
+
const hooks = local.dragAndDropHooks;
|
|
163
|
+
return Boolean(hooks?.useDroppableCollectionState && hooks.useDroppableCollection && (hooks.dropTargetDelegate || parentCollectionRenderer?.dropTargetDelegate || hooks.ListDropTargetDelegate));
|
|
164
|
+
});
|
|
165
|
+
const dropState = createMemo(() => {
|
|
166
|
+
if (!hasDroppableDnd()) return void 0;
|
|
167
|
+
return local.dragAndDropHooks?.useDroppableCollectionState?.({});
|
|
168
|
+
});
|
|
169
|
+
const hasDraggableDnd = createMemo(() => {
|
|
170
|
+
const hooks = local.dragAndDropHooks;
|
|
171
|
+
return Boolean(hooks?.useDraggableCollectionState && hooks.useDraggableCollection);
|
|
172
|
+
});
|
|
173
|
+
const dragState = createMemo(() => {
|
|
174
|
+
if (!hasDraggableDnd()) return void 0;
|
|
175
|
+
return local.dragAndDropHooks?.useDraggableCollectionState?.({ items: flatItems() });
|
|
176
|
+
});
|
|
177
|
+
createEffect(() => {
|
|
178
|
+
if (!hasDraggableDnd()) return;
|
|
179
|
+
const hooks = local.dragAndDropHooks;
|
|
180
|
+
const activeDragState = dragState();
|
|
181
|
+
if (!hooks?.useDraggableCollection || !activeDragState) return;
|
|
182
|
+
hooks.useDraggableCollection({}, activeDragState, () => listRef());
|
|
183
|
+
});
|
|
184
|
+
const droppableCollection = createMemo(() => {
|
|
185
|
+
if (!hasDroppableDnd()) return void 0;
|
|
186
|
+
const hooks = local.dragAndDropHooks;
|
|
187
|
+
const activeDropState = dropState();
|
|
188
|
+
if (!hooks?.useDroppableCollection || !activeDropState) return void 0;
|
|
189
|
+
const resolveDirection = () => {
|
|
190
|
+
const el = listRef();
|
|
191
|
+
if (el && typeof window !== "undefined" && typeof window.getComputedStyle === "function") {
|
|
192
|
+
if (window.getComputedStyle(el).direction === "rtl") return "rtl";
|
|
193
|
+
}
|
|
194
|
+
return typeof document !== "undefined" && document.dir === "rtl" ? "rtl" : "ltr";
|
|
195
|
+
};
|
|
196
|
+
const dropTargetDelegate = hooks.dropTargetDelegate ?? parentCollectionRenderer?.dropTargetDelegate ?? (hooks.ListDropTargetDelegate ? new hooks.ListDropTargetDelegate(() => state.collection(), () => listRef(), {
|
|
197
|
+
layout: "stack",
|
|
198
|
+
orientation: "vertical",
|
|
199
|
+
direction: resolveDirection()
|
|
200
|
+
}) : void 0);
|
|
201
|
+
if (!dropTargetDelegate) return void 0;
|
|
202
|
+
return hooks.useDroppableCollection({
|
|
203
|
+
dropTargetDelegate,
|
|
204
|
+
keyboardDelegate: {
|
|
205
|
+
getFirstKey: () => state.collection().getFirstKey(),
|
|
206
|
+
getLastKey: () => state.collection().getLastKey(),
|
|
207
|
+
getKeyBelow: (key) => state.collection().getKeyAfter(key),
|
|
208
|
+
getKeyAbove: (key) => state.collection().getKeyBefore(key),
|
|
209
|
+
getKeyPageBelow: (key) => state.collection().getKeyAfter(key),
|
|
210
|
+
getKeyPageAbove: (key) => state.collection().getKeyBefore(key)
|
|
211
|
+
}
|
|
212
|
+
}, activeDropState, () => listRef());
|
|
213
|
+
});
|
|
214
|
+
const isRootDropTarget = createMemo(() => {
|
|
215
|
+
return Boolean(dropState()?.target?.type === "root");
|
|
216
|
+
});
|
|
217
|
+
const dndRenderDropIndicator = createMemo(() => useRenderDropIndicator(local.dragAndDropHooks, dropState()));
|
|
218
|
+
const dndDropIndicator = (index, position) => {
|
|
219
|
+
const target = getDropTargetByIndex(index, position);
|
|
220
|
+
if (!target || target.type !== "item") return void 0;
|
|
221
|
+
return dndRenderDropIndicator()?.(target);
|
|
222
|
+
};
|
|
223
|
+
const virtualizer = useVirtualizerContext();
|
|
224
|
+
const persistedKeys = useDndPersistedKeys({ focusedKey: state.focusedKey }, local.dragAndDropHooks, dropState(), state.collection());
|
|
225
|
+
const virtualRange = createMemo(() => {
|
|
226
|
+
if (!virtualizer || !parentCollectionRenderer?.isVirtualized || hasSections()) return null;
|
|
227
|
+
const baseRange = virtualizer.getVisibleRange(stateProps.items.length);
|
|
228
|
+
const itemNodes = getItemNodes();
|
|
229
|
+
const persistedIndexes = Array.from(persistedKeys()).map((key) => itemNodes.findIndex((node) => node.key === key)).filter((index) => index >= 0);
|
|
230
|
+
const dropTarget = dropState()?.target;
|
|
231
|
+
const normalizedDropKey = getNormalizedDropTargetKey(dropTarget, state.collection());
|
|
232
|
+
const focusedKey = state.focusedKey();
|
|
233
|
+
const focusedIndex = focusedKey != null ? itemNodes.findIndex((node) => node.key === focusedKey) : -1;
|
|
234
|
+
const forceIncludeIndexes = [
|
|
235
|
+
dropTarget?.type === "item" ? itemNodes.findIndex((node) => node.key === dropTarget.key) : -1,
|
|
236
|
+
normalizedDropKey != null ? itemNodes.findIndex((node) => node.key === normalizedDropKey) : -1,
|
|
237
|
+
dropTarget?.type === "item" ? -1 : focusedIndex
|
|
238
|
+
].filter((index) => index >= 0);
|
|
239
|
+
return mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, stateProps.items.length, virtualizer, 80, {
|
|
240
|
+
forceIncludeIndexes,
|
|
241
|
+
forceIncludeMaxSpan: 320
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
createEffect(() => {
|
|
245
|
+
if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return;
|
|
246
|
+
const getItemNodes = () => Array.from(state.collection()).filter((node) => node.type === "item");
|
|
247
|
+
virtualizer.setDropTargetItemCountResolver(() => getItemNodes().length);
|
|
248
|
+
virtualizer.setDropTargetIndexResolver((key) => {
|
|
249
|
+
const index = getItemNodes().findIndex((node) => node.key === key);
|
|
250
|
+
return index >= 0 ? index : null;
|
|
251
|
+
});
|
|
252
|
+
virtualizer.setDropTargetResolver((target) => {
|
|
253
|
+
const node = getItemNodes()[target.index];
|
|
254
|
+
if (!node) return target;
|
|
255
|
+
return {
|
|
256
|
+
...target,
|
|
257
|
+
key: typeof node.key === "string" || typeof node.key === "number" ? node.key : void 0
|
|
258
|
+
};
|
|
259
|
+
});
|
|
260
|
+
onCleanup(() => {
|
|
261
|
+
virtualizer.setDropTargetIndexResolver(void 0);
|
|
262
|
+
virtualizer.setDropTargetItemCountResolver(void 0);
|
|
263
|
+
virtualizer.setDropTargetResolver(void 0);
|
|
264
|
+
});
|
|
265
|
+
});
|
|
266
|
+
const visibleItems = createMemo(() => {
|
|
267
|
+
const range = virtualRange();
|
|
268
|
+
if (!range) return stateProps.items;
|
|
269
|
+
return stateProps.items.slice(range.start, range.end);
|
|
270
|
+
});
|
|
271
|
+
const virtualSpacerStyle = (size) => virtualizer?.orientation === "horizontal" ? { width: `${size}px` } : { height: `${size}px` };
|
|
272
|
+
const sectionedRenderEntries = createMemo(() => {
|
|
273
|
+
let globalIndex = 0;
|
|
274
|
+
return stateProps.items.map((entry) => {
|
|
275
|
+
if (isCollectionSection(entry)) return {
|
|
276
|
+
type: "section",
|
|
277
|
+
section: entry,
|
|
278
|
+
items: entry.items.map((item) => ({
|
|
279
|
+
item,
|
|
280
|
+
index: globalIndex++
|
|
281
|
+
}))
|
|
282
|
+
};
|
|
283
|
+
return {
|
|
284
|
+
type: "item",
|
|
285
|
+
item: {
|
|
286
|
+
item: entry,
|
|
287
|
+
index: globalIndex++
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
});
|
|
291
|
+
});
|
|
292
|
+
const collectionRenderer = createMemo(() => ({
|
|
293
|
+
...parentCollectionRenderer,
|
|
294
|
+
renderItem: (item) => local.children(item),
|
|
295
|
+
renderDropIndicator: (index, position) => dndDropIndicator(index, position) ?? parentCollectionRenderer?.renderDropIndicator?.(index, position)
|
|
296
|
+
}));
|
|
297
|
+
return createComponent(ListBoxContext.Provider, {
|
|
298
|
+
get value() {
|
|
299
|
+
return {
|
|
300
|
+
state,
|
|
301
|
+
isDisabled: resolveDisabled,
|
|
302
|
+
dragAndDropHooks: local.dragAndDropHooks,
|
|
303
|
+
dragState: dragState(),
|
|
304
|
+
dropState: dropState(),
|
|
305
|
+
slots: local.slots
|
|
306
|
+
};
|
|
307
|
+
},
|
|
308
|
+
get children() {
|
|
309
|
+
return createComponent(ListBoxStateContext.Provider, {
|
|
310
|
+
value: state,
|
|
311
|
+
get children() {
|
|
312
|
+
return createComponent(CollectionRendererContext.Provider, {
|
|
313
|
+
get value() {
|
|
314
|
+
return collectionRenderer();
|
|
315
|
+
},
|
|
316
|
+
get children() {
|
|
317
|
+
return [createComponent(Show, {
|
|
318
|
+
get when() {
|
|
319
|
+
return ariaProps.label;
|
|
320
|
+
},
|
|
321
|
+
get children() {
|
|
322
|
+
var _el$ = getNextElement(_tmpl$);
|
|
323
|
+
spread(_el$, mergeProps(cleanLabelProps), false, true);
|
|
324
|
+
insert(_el$, () => ariaProps.label);
|
|
325
|
+
runHydrationEvents();
|
|
326
|
+
return _el$;
|
|
327
|
+
}
|
|
328
|
+
}), (() => {
|
|
329
|
+
var _el$2 = getNextElement(_tmpl$2), _el$3 = _el$2.firstChild, [_el$4, _co$] = getNextMarker(_el$3.nextSibling), _el$5 = _el$4.nextSibling, [_el$6, _co$2] = getNextMarker(_el$5.nextSibling);
|
|
330
|
+
use((el) => {
|
|
331
|
+
setListRef(el);
|
|
332
|
+
assignRef(local.ref, el);
|
|
333
|
+
}, _el$2);
|
|
334
|
+
spread(_el$2, mergeProps(() => mergeProps$2(domProps(), cleanListBoxProps(), cleanFocusProps(), droppableCollection()?.collectionProps ?? {}), {
|
|
335
|
+
get ["class"]() {
|
|
336
|
+
return renderProps.class();
|
|
337
|
+
},
|
|
338
|
+
get style() {
|
|
339
|
+
return renderProps.style();
|
|
340
|
+
},
|
|
341
|
+
get ["data-focused"]() {
|
|
342
|
+
return state.isFocused() || void 0;
|
|
343
|
+
},
|
|
344
|
+
get ["data-focus-visible"]() {
|
|
345
|
+
return isFocusVisible() || void 0;
|
|
346
|
+
},
|
|
347
|
+
get ["data-disabled"]() {
|
|
348
|
+
return resolveDisabled() || void 0;
|
|
349
|
+
},
|
|
350
|
+
get ["data-empty"]() {
|
|
351
|
+
return isEmpty() || void 0;
|
|
352
|
+
},
|
|
353
|
+
get ["data-layout"]() {
|
|
354
|
+
return stateProps.layout;
|
|
355
|
+
},
|
|
356
|
+
get ["data-orientation"]() {
|
|
357
|
+
return stateProps.orientation;
|
|
358
|
+
},
|
|
359
|
+
get ["data-drop-target"]() {
|
|
360
|
+
return isRootDropTarget() || void 0;
|
|
361
|
+
},
|
|
362
|
+
get slot() {
|
|
363
|
+
return local.slot;
|
|
364
|
+
}
|
|
365
|
+
}), false, true);
|
|
366
|
+
insert(_el$2, createComponent(SharedElementTransition, { get children() {
|
|
367
|
+
return memo(() => !!(isEmpty() && local.renderEmptyState))() ? (() => {
|
|
368
|
+
var _el$7 = getNextElement(_tmpl$3);
|
|
369
|
+
insert(_el$7, () => local.renderEmptyState());
|
|
370
|
+
return _el$7;
|
|
371
|
+
})() : memo(() => !!hasSections())() ? createComponent(For, {
|
|
372
|
+
get each() {
|
|
373
|
+
return sectionedRenderEntries();
|
|
374
|
+
},
|
|
375
|
+
children: (entry) => entry.type === "section" ? (() => {
|
|
376
|
+
var _el$8 = getNextElement(_tmpl$5);
|
|
377
|
+
insert(_el$8, createComponent(Section, {
|
|
378
|
+
"class": "solidaria-ListBox-section",
|
|
379
|
+
get children() {
|
|
380
|
+
return [memo(() => memo(() => entry.section.title != null)() && createComponent(Header, {
|
|
381
|
+
"class": "solidaria-ListBox-sectionHeader",
|
|
382
|
+
get children() {
|
|
383
|
+
return entry.section.title;
|
|
384
|
+
}
|
|
385
|
+
})), createComponent(Group, {
|
|
386
|
+
"class": "solidaria-ListBox-sectionGroup",
|
|
387
|
+
get children() {
|
|
388
|
+
var _el$9 = getNextElement(_tmpl$4);
|
|
389
|
+
insert(_el$9, createComponent(For, {
|
|
390
|
+
get each() {
|
|
391
|
+
return entry.items;
|
|
392
|
+
},
|
|
393
|
+
children: (indexedItem) => [
|
|
394
|
+
memo(() => collectionRenderer().renderDropIndicator?.(indexedItem.index, "before")),
|
|
395
|
+
memo(() => collectionRenderer().renderDropIndicator?.(indexedItem.index, "on")),
|
|
396
|
+
memo(() => local.children(indexedItem.item)),
|
|
397
|
+
memo(() => collectionRenderer().renderDropIndicator?.(indexedItem.index, "after"))
|
|
398
|
+
]
|
|
399
|
+
}));
|
|
400
|
+
effect(() => setAttribute(_el$9, "aria-label", entry.section["aria-label"]));
|
|
401
|
+
return _el$9;
|
|
402
|
+
}
|
|
403
|
+
})];
|
|
404
|
+
}
|
|
405
|
+
}));
|
|
406
|
+
return _el$8;
|
|
407
|
+
})() : [
|
|
408
|
+
memo(() => collectionRenderer().renderDropIndicator?.(entry.item.index, "before")),
|
|
409
|
+
memo(() => collectionRenderer().renderDropIndicator?.(entry.item.index, "on")),
|
|
410
|
+
memo(() => local.children(entry.item.item)),
|
|
411
|
+
memo(() => collectionRenderer().renderDropIndicator?.(entry.item.index, "after"))
|
|
412
|
+
]
|
|
413
|
+
}) : [
|
|
414
|
+
memo(() => memo(() => !!virtualRange()?.offsetTop)() ? (() => {
|
|
415
|
+
var _el$0 = getNextElement(_tmpl$6);
|
|
416
|
+
effect((_$p) => style(_el$0, virtualSpacerStyle(virtualRange().offsetTop), _$p));
|
|
417
|
+
return _el$0;
|
|
418
|
+
})() : null),
|
|
419
|
+
createComponent(For, {
|
|
420
|
+
get each() {
|
|
421
|
+
return visibleItems();
|
|
422
|
+
},
|
|
423
|
+
children: (item, index) => {
|
|
424
|
+
const itemIndex = () => (virtualRange()?.start ?? 0) + index();
|
|
425
|
+
const beforeIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "before");
|
|
426
|
+
const onIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "on");
|
|
427
|
+
const afterIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "after");
|
|
428
|
+
return [
|
|
429
|
+
memo(beforeIndicator),
|
|
430
|
+
memo(onIndicator),
|
|
431
|
+
memo(() => local.children(item)),
|
|
432
|
+
memo(afterIndicator)
|
|
433
|
+
];
|
|
434
|
+
}
|
|
435
|
+
}),
|
|
436
|
+
memo(() => memo(() => !!virtualRange()?.offsetBottom)() ? (() => {
|
|
437
|
+
var _el$1 = getNextElement(_tmpl$7);
|
|
438
|
+
effect((_$p) => style(_el$1, virtualSpacerStyle(virtualRange().offsetBottom), _$p));
|
|
439
|
+
return _el$1;
|
|
440
|
+
})() : null)
|
|
441
|
+
];
|
|
442
|
+
} }), _el$4, _co$);
|
|
443
|
+
insert(_el$2, (() => {
|
|
444
|
+
var _c$ = memo(() => !!(local.hasMore && local.onLoadMore));
|
|
445
|
+
return () => _c$() && createComponent(ListBoxLoadMoreItem, {
|
|
446
|
+
get onLoadMore() {
|
|
447
|
+
return local.onLoadMore;
|
|
448
|
+
},
|
|
449
|
+
get isLoading() {
|
|
450
|
+
return local.isLoading;
|
|
451
|
+
}
|
|
452
|
+
});
|
|
453
|
+
})(), _el$6, _co$2);
|
|
454
|
+
runHydrationEvents();
|
|
455
|
+
return _el$2;
|
|
456
|
+
})()];
|
|
457
|
+
}
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* An option in a listbox.
|
|
466
|
+
*/
|
|
467
|
+
function ListBoxOption(props) {
|
|
468
|
+
const [local, ariaProps] = splitProps(props, [
|
|
469
|
+
"class",
|
|
470
|
+
"style",
|
|
471
|
+
"slot",
|
|
472
|
+
"id",
|
|
473
|
+
"item",
|
|
474
|
+
"textValue",
|
|
475
|
+
"ref"
|
|
476
|
+
]);
|
|
477
|
+
const context = useContext(ListBoxStateContext);
|
|
478
|
+
if (!context) throw new Error("ListBoxOption must be used within a ListBox");
|
|
479
|
+
const state = context;
|
|
480
|
+
const listContext = useContext(ListBoxContext);
|
|
481
|
+
const [ref, setRef] = createSignal(null);
|
|
482
|
+
const optionAria = createOption({
|
|
483
|
+
key: local.id,
|
|
484
|
+
get isDisabled() {
|
|
485
|
+
return Boolean(ariaProps.isDisabled || listContext?.isDisabled());
|
|
486
|
+
},
|
|
487
|
+
get "aria-label"() {
|
|
488
|
+
return ariaProps["aria-label"] ?? local.textValue;
|
|
489
|
+
},
|
|
490
|
+
get shouldSelectOnPressUp() {
|
|
491
|
+
return ariaProps.shouldSelectOnPressUp;
|
|
492
|
+
},
|
|
493
|
+
get shouldFocusOnHover() {
|
|
494
|
+
return ariaProps.shouldFocusOnHover;
|
|
495
|
+
},
|
|
496
|
+
get onHoverStart() {
|
|
497
|
+
return ariaProps.onHoverStart;
|
|
498
|
+
},
|
|
499
|
+
get onHoverEnd() {
|
|
500
|
+
return ariaProps.onHoverEnd;
|
|
501
|
+
},
|
|
502
|
+
get onHoverChange() {
|
|
503
|
+
return ariaProps.onHoverChange;
|
|
504
|
+
}
|
|
505
|
+
}, state);
|
|
506
|
+
const renderValues = createMemo(() => ({
|
|
507
|
+
isSelected: optionAria.isSelected(),
|
|
508
|
+
isFocused: optionAria.isFocused(),
|
|
509
|
+
isFocusVisible: optionAria.isFocusVisible(),
|
|
510
|
+
isPressed: optionAria.isPressed(),
|
|
511
|
+
isHovered: optionAria.isHovered(),
|
|
512
|
+
isDisabled: optionAria.isDisabled()
|
|
513
|
+
}));
|
|
514
|
+
const renderProps = useRenderProps({
|
|
515
|
+
get children() {
|
|
516
|
+
return props.children;
|
|
517
|
+
},
|
|
518
|
+
class: local.class,
|
|
519
|
+
style: local.style,
|
|
520
|
+
defaultClassName: "solidaria-ListBox-option"
|
|
521
|
+
}, renderValues);
|
|
522
|
+
const hasPrimitiveLabel = () => {
|
|
523
|
+
return typeof props.children === "string" || typeof props.children === "number";
|
|
524
|
+
};
|
|
525
|
+
const selectionIndicatorContext = createMemo(() => ({ isSelected: optionAria.isSelected }));
|
|
526
|
+
const draggableItem = createMemo(() => {
|
|
527
|
+
if (!listContext?.dragAndDropHooks?.useDraggableItem || !listContext.dragState) return void 0;
|
|
528
|
+
return listContext.dragAndDropHooks.useDraggableItem({ key: local.id }, listContext.dragState);
|
|
529
|
+
});
|
|
530
|
+
const droppableItem = createMemo(() => {
|
|
531
|
+
if (!listContext?.dragAndDropHooks?.useDroppableItem || !listContext.dropState) return void 0;
|
|
532
|
+
return listContext.dragAndDropHooks.useDroppableItem({ key: local.id }, listContext.dropState, () => ref());
|
|
533
|
+
});
|
|
534
|
+
const cleanOptionProps = () => {
|
|
535
|
+
const { ref: _ref1, "aria-describedby": _ariaDescribedby, ...rest } = optionAria.optionProps;
|
|
536
|
+
if (!hasPrimitiveLabel() && rest["aria-label"] == null) delete rest["aria-labelledby"];
|
|
537
|
+
return rest;
|
|
538
|
+
};
|
|
539
|
+
const domProps = () => filterDOMProps(ariaProps, { global: true });
|
|
540
|
+
return createComponent(SelectionIndicatorContext.Provider, {
|
|
541
|
+
get value() {
|
|
542
|
+
return selectionIndicatorContext();
|
|
543
|
+
},
|
|
544
|
+
get children() {
|
|
545
|
+
var _el$10 = getNextElement(_tmpl$8);
|
|
546
|
+
use((el) => {
|
|
547
|
+
setRef(el);
|
|
548
|
+
assignRef(local.ref, el);
|
|
549
|
+
}, _el$10);
|
|
550
|
+
spread(_el$10, mergeProps(() => mergeProps$2(domProps(), cleanOptionProps(), draggableItem()?.dragProps ?? {}, droppableItem()?.dropProps ?? {}), {
|
|
551
|
+
get ["class"]() {
|
|
552
|
+
return renderProps.class();
|
|
553
|
+
},
|
|
554
|
+
get style() {
|
|
555
|
+
return renderProps.style();
|
|
556
|
+
},
|
|
557
|
+
get ["data-selected"]() {
|
|
558
|
+
return optionAria.isSelected() || void 0;
|
|
559
|
+
},
|
|
560
|
+
get ["data-focused"]() {
|
|
561
|
+
return optionAria.isFocused() || void 0;
|
|
562
|
+
},
|
|
563
|
+
get ["data-focus-visible"]() {
|
|
564
|
+
return optionAria.isFocusVisible() || void 0;
|
|
565
|
+
},
|
|
566
|
+
get ["data-pressed"]() {
|
|
567
|
+
return optionAria.isPressed() || void 0;
|
|
568
|
+
},
|
|
569
|
+
get ["data-hovered"]() {
|
|
570
|
+
return optionAria.isHovered() || void 0;
|
|
571
|
+
},
|
|
572
|
+
get ["data-disabled"]() {
|
|
573
|
+
return optionAria.isDisabled() || void 0;
|
|
574
|
+
},
|
|
575
|
+
get ["data-dragging"]() {
|
|
576
|
+
return draggableItem()?.isDragging || void 0;
|
|
577
|
+
},
|
|
578
|
+
get ["data-drop-target"]() {
|
|
579
|
+
return droppableItem()?.isDropTarget || void 0;
|
|
580
|
+
},
|
|
581
|
+
get slot() {
|
|
582
|
+
return local.slot;
|
|
583
|
+
}
|
|
584
|
+
}), false, true);
|
|
585
|
+
insert(_el$10, (() => {
|
|
586
|
+
var _c$2 = memo(() => !!hasPrimitiveLabel());
|
|
587
|
+
return () => _c$2() ? (() => {
|
|
588
|
+
var _el$11 = getNextElement(_tmpl$);
|
|
589
|
+
spread(_el$11, mergeProps(() => optionAria.labelProps), false, true);
|
|
590
|
+
insert(_el$11, () => renderProps.renderChildren());
|
|
591
|
+
runHydrationEvents();
|
|
592
|
+
return _el$11;
|
|
593
|
+
})() : renderProps.renderChildren();
|
|
594
|
+
})());
|
|
595
|
+
runHydrationEvents();
|
|
596
|
+
return _el$10;
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
}
|
|
600
|
+
/**
|
|
601
|
+
* Load more sentinel item for listbox collections.
|
|
602
|
+
*/
|
|
603
|
+
function ListBoxLoadMoreItem(props) {
|
|
604
|
+
let sentinelRef;
|
|
605
|
+
const [isPending, setIsPending] = createSignal(false);
|
|
606
|
+
const isLoading = () => !!props.isLoading || isPending();
|
|
607
|
+
const triggerLoadMore = async () => {
|
|
608
|
+
if (isLoading()) return;
|
|
609
|
+
setIsPending(true);
|
|
610
|
+
try {
|
|
611
|
+
await props.onLoadMore();
|
|
612
|
+
} finally {
|
|
613
|
+
setIsPending(false);
|
|
614
|
+
}
|
|
615
|
+
};
|
|
616
|
+
createEffect(() => {
|
|
617
|
+
if (!sentinelRef || typeof IntersectionObserver !== "function") return;
|
|
618
|
+
const margin = `0px 0px ${100 * (props.scrollOffset ?? 1)}% 0px`;
|
|
619
|
+
const observer = new IntersectionObserver((entries) => {
|
|
620
|
+
if (entries[0]?.isIntersecting) triggerLoadMore();
|
|
621
|
+
}, { rootMargin: margin });
|
|
622
|
+
observer.observe(sentinelRef);
|
|
623
|
+
return () => observer.disconnect();
|
|
624
|
+
});
|
|
625
|
+
const renderProps = useRenderProps({
|
|
626
|
+
get children() {
|
|
627
|
+
return props.children ?? (() => isLoading() ? "Loading more..." : "Load more");
|
|
628
|
+
},
|
|
629
|
+
class: props.class,
|
|
630
|
+
style: props.style,
|
|
631
|
+
defaultClassName: "solidaria-ListBox-loadMore"
|
|
632
|
+
}, () => ({ isLoading: isLoading() }));
|
|
633
|
+
return [(() => {
|
|
634
|
+
var _el$12 = getNextElement(_tmpl$9), _el$13 = _el$12.firstChild;
|
|
635
|
+
var _ref$ = sentinelRef;
|
|
636
|
+
typeof _ref$ === "function" ? use(_ref$, _el$13) : sentinelRef = _el$13;
|
|
637
|
+
return _el$12;
|
|
638
|
+
})(), (() => {
|
|
639
|
+
var _el$14 = getNextElement(_tmpl$0);
|
|
640
|
+
_el$14.addEventListener("focus", () => {
|
|
641
|
+
triggerLoadMore();
|
|
642
|
+
});
|
|
643
|
+
setAttribute(_el$14, "aria-disabled", true);
|
|
644
|
+
insert(_el$14, () => renderProps.renderChildren());
|
|
645
|
+
effect((_p$) => {
|
|
646
|
+
var _v$ = renderProps.class(), _v$2 = renderProps.style(), _v$3 = isLoading() || void 0;
|
|
647
|
+
_v$ !== _p$.e && className(_el$14, _p$.e = _v$);
|
|
648
|
+
_p$.t = style(_el$14, _v$2, _p$.t);
|
|
649
|
+
_v$3 !== _p$.a && setAttribute(_el$14, "data-loading", _p$.a = _v$3);
|
|
650
|
+
return _p$;
|
|
651
|
+
}, {
|
|
652
|
+
e: void 0,
|
|
653
|
+
t: void 0,
|
|
654
|
+
a: void 0
|
|
655
|
+
});
|
|
656
|
+
return _el$14;
|
|
657
|
+
})()];
|
|
658
|
+
}
|
|
659
|
+
/**
|
|
660
|
+
* Section primitive alias for ListBox composition parity.
|
|
661
|
+
*/
|
|
662
|
+
function ListBoxSection(props) {
|
|
663
|
+
return createComponent(Section, props);
|
|
664
|
+
}
|
|
665
|
+
ListBox.Option = ListBoxOption;
|
|
666
|
+
ListBox.LoadMoreItem = ListBoxLoadMoreItem;
|
|
667
|
+
//#endregion
|
|
668
|
+
export { ListBox, ListBoxContext, ListBoxLoadMoreItem, ListBoxOption, ListBoxSection, ListBoxStateContext, ListStateContext };
|
|
669
|
+
|
|
670
|
+
//# sourceMappingURL=ListBox.js.map
|