@proyecto-viviana/solidaria-components 0.3.2 → 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 +4 -4
- 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 +6 -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 -23932
- package/dist/index.jsx +70 -18337
- 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 +22 -2
- 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 +50 -6
- package/src/DateField.tsx +20 -2
- package/src/DatePicker.tsx +57 -5
- 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 +252 -128
- package/src/Meter.tsx +3 -1
- package/src/Modal.tsx +100 -52
- package/src/NumberField.tsx +51 -8
- package/src/Popover.tsx +40 -10
- 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 +3 -1
- package/src/Text.tsx +31 -10
- package/src/TextField.tsx +43 -5
- 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 +3 -1
- 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/GridList.js
ADDED
|
@@ -0,0 +1,723 @@
|
|
|
1
|
+
import { filterDOMProps, useRenderProps } from "./utils.js";
|
|
2
|
+
import { SharedElementTransition } from "./SharedElementTransition.js";
|
|
3
|
+
import { CollectionRendererContext, useCollectionRenderer } from "./Collection.js";
|
|
4
|
+
import { r as useVirtualizerContext } from "./Virtualizer2.js";
|
|
5
|
+
import { getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator } from "./DragAndDrop.js";
|
|
6
|
+
import { className, createComponent, effect, getNextElement, getNextMarker, insert, memo, mergeProps, runHydrationEvents, setAttribute, spread, style, template, use } from "solid-js/web";
|
|
7
|
+
import { For, createContext, createEffect, createMemo, createSignal, onCleanup, splitProps, useContext } from "solid-js";
|
|
8
|
+
import { createFocusRing, createGridList, createGridListItem, createGridListSection, createGridListSelectionCheckbox, createHover, mergeProps as mergeProps$2 } from "@proyecto-viviana/solidaria";
|
|
9
|
+
import { createGridState } from "@proyecto-viviana/solid-stately";
|
|
10
|
+
//#region src/GridList.tsx
|
|
11
|
+
/**
|
|
12
|
+
* GridList component for solidaria-components
|
|
13
|
+
*
|
|
14
|
+
* A pre-wired headless grid list that combines state + aria hooks.
|
|
15
|
+
* Based on react-aria-components/src/GridList.tsx
|
|
16
|
+
*
|
|
17
|
+
* GridList is similar to ListBox but supports interactive elements within items
|
|
18
|
+
* and uses grid keyboard navigation.
|
|
19
|
+
*/
|
|
20
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div><!$><!/><!$><!/>`), _tmpl$2 = /*#__PURE__*/ template(`<div role=presentation aria-hidden=true data-virtualizer-spacer=top>`), _tmpl$3 = /*#__PURE__*/ template(`<div role=presentation aria-hidden=true data-virtualizer-spacer=bottom>`), _tmpl$4 = /*#__PURE__*/ template(`<div><div>`), _tmpl$5 = /*#__PURE__*/ template(`<input>`), _tmpl$6 = /*#__PURE__*/ template(`<div inert style=position:relative;width:0;height:0;overflow:hidden><div style=position:absolute;height:1px;width:1px>`), _tmpl$7 = /*#__PURE__*/ template(`<div role=row tabindex=0>`), _tmpl$8 = /*#__PURE__*/ template(`<div>`);
|
|
21
|
+
function assignRef(ref, el) {
|
|
22
|
+
if (!ref) return;
|
|
23
|
+
if (typeof ref === "function") ref(el);
|
|
24
|
+
else ref.current = el;
|
|
25
|
+
}
|
|
26
|
+
const GridListContext = createContext(null);
|
|
27
|
+
const GridListStateContext = createContext(null);
|
|
28
|
+
/** Carries the section header's outer (row) props to {@link GridListHeader}. */
|
|
29
|
+
const GridListHeaderContext = createContext(null);
|
|
30
|
+
/** Carries the section header's inner (rowheader) props to {@link GridListHeader}. */
|
|
31
|
+
const GridListHeaderInnerContext = createContext(null);
|
|
32
|
+
function buildGridCollection(items, getKey, getTextValue, getDisabled) {
|
|
33
|
+
const nodes = items.map((item, index) => {
|
|
34
|
+
const key = getKey?.(item) ?? index;
|
|
35
|
+
return {
|
|
36
|
+
type: "item",
|
|
37
|
+
key,
|
|
38
|
+
value: item,
|
|
39
|
+
textValue: getTextValue?.(item) ?? String(key),
|
|
40
|
+
level: 0,
|
|
41
|
+
index,
|
|
42
|
+
hasChildNodes: false,
|
|
43
|
+
childNodes: [],
|
|
44
|
+
isDisabled: getDisabled?.(item)
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
const keyMap = /* @__PURE__ */ new Map();
|
|
48
|
+
nodes.forEach((node) => keyMap.set(node.key, node));
|
|
49
|
+
return {
|
|
50
|
+
rows: nodes,
|
|
51
|
+
columns: [],
|
|
52
|
+
headerRows: [],
|
|
53
|
+
get rowCount() {
|
|
54
|
+
return nodes.length;
|
|
55
|
+
},
|
|
56
|
+
get columnCount() {
|
|
57
|
+
return 1;
|
|
58
|
+
},
|
|
59
|
+
get size() {
|
|
60
|
+
return nodes.length;
|
|
61
|
+
},
|
|
62
|
+
getKeys() {
|
|
63
|
+
return nodes.map((n) => n.key);
|
|
64
|
+
},
|
|
65
|
+
getItem(key) {
|
|
66
|
+
return keyMap.get(key) ?? null;
|
|
67
|
+
},
|
|
68
|
+
at(index) {
|
|
69
|
+
return nodes[index] ?? null;
|
|
70
|
+
},
|
|
71
|
+
getKeyBefore(key) {
|
|
72
|
+
const node = keyMap.get(key);
|
|
73
|
+
if (!node) return null;
|
|
74
|
+
return node.index > 0 ? nodes[node.index - 1].key : null;
|
|
75
|
+
},
|
|
76
|
+
getKeyAfter(key) {
|
|
77
|
+
const node = keyMap.get(key);
|
|
78
|
+
if (!node) return null;
|
|
79
|
+
return node.index < nodes.length - 1 ? nodes[node.index + 1].key : null;
|
|
80
|
+
},
|
|
81
|
+
getFirstKey() {
|
|
82
|
+
return nodes[0]?.key ?? null;
|
|
83
|
+
},
|
|
84
|
+
getLastKey() {
|
|
85
|
+
return nodes[nodes.length - 1]?.key ?? null;
|
|
86
|
+
},
|
|
87
|
+
getChildren(_key) {
|
|
88
|
+
return [];
|
|
89
|
+
},
|
|
90
|
+
getTextValue(key) {
|
|
91
|
+
return keyMap.get(key)?.textValue ?? "";
|
|
92
|
+
},
|
|
93
|
+
getCell(_rowKey, _columnKey) {
|
|
94
|
+
return null;
|
|
95
|
+
},
|
|
96
|
+
[Symbol.iterator]() {
|
|
97
|
+
return nodes[Symbol.iterator]();
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* A grid list displays a list of interactive items, with support for
|
|
103
|
+
* keyboard navigation, single or multiple selection, and row actions.
|
|
104
|
+
*/
|
|
105
|
+
function GridList(props) {
|
|
106
|
+
const [local, stateProps, ariaProps] = splitProps(props, [
|
|
107
|
+
"children",
|
|
108
|
+
"class",
|
|
109
|
+
"style",
|
|
110
|
+
"ref",
|
|
111
|
+
"slot",
|
|
112
|
+
"renderEmptyState",
|
|
113
|
+
"hasMore",
|
|
114
|
+
"isLoading",
|
|
115
|
+
"onLoadMore",
|
|
116
|
+
"dragAndDropHooks",
|
|
117
|
+
"orientation"
|
|
118
|
+
], [
|
|
119
|
+
"items",
|
|
120
|
+
"getKey",
|
|
121
|
+
"getTextValue",
|
|
122
|
+
"getDisabled",
|
|
123
|
+
"disabledKeys",
|
|
124
|
+
"disabledBehavior",
|
|
125
|
+
"selectionMode",
|
|
126
|
+
"selectedKeys",
|
|
127
|
+
"defaultSelectedKeys",
|
|
128
|
+
"onSelectionChange",
|
|
129
|
+
"selectionBehavior"
|
|
130
|
+
]);
|
|
131
|
+
const [ref, setRef] = createSignal(null);
|
|
132
|
+
const collection = createMemo(() => buildGridCollection(stateProps.items, stateProps.getKey, stateProps.getTextValue, stateProps.getDisabled));
|
|
133
|
+
const allDisabledKeys = createMemo(() => {
|
|
134
|
+
const keys = /* @__PURE__ */ new Set();
|
|
135
|
+
if (stateProps.disabledKeys) for (const key of stateProps.disabledKeys) keys.add(key);
|
|
136
|
+
for (const node of collection().rows) if (node.isDisabled) keys.add(node.key);
|
|
137
|
+
return keys;
|
|
138
|
+
});
|
|
139
|
+
const orientation = () => local.orientation ?? "vertical";
|
|
140
|
+
const resolveDirection = () => {
|
|
141
|
+
const el = ref();
|
|
142
|
+
if (el && typeof window !== "undefined" && typeof window.getComputedStyle === "function") {
|
|
143
|
+
if (window.getComputedStyle(el).direction === "rtl") return "rtl";
|
|
144
|
+
}
|
|
145
|
+
return typeof document !== "undefined" && document.dir === "rtl" ? "rtl" : "ltr";
|
|
146
|
+
};
|
|
147
|
+
const state = createGridState(() => ({
|
|
148
|
+
collection: collection(),
|
|
149
|
+
disabledKeys: allDisabledKeys(),
|
|
150
|
+
disabledBehavior: stateProps.disabledBehavior,
|
|
151
|
+
selectionMode: stateProps.selectionMode,
|
|
152
|
+
selectionBehavior: stateProps.selectionBehavior ?? "replace",
|
|
153
|
+
selectedKeys: stateProps.selectedKeys,
|
|
154
|
+
defaultSelectedKeys: stateProps.defaultSelectedKeys,
|
|
155
|
+
onSelectionChange: stateProps.onSelectionChange
|
|
156
|
+
}));
|
|
157
|
+
const { gridProps } = createGridList(() => ({
|
|
158
|
+
id: ariaProps.id,
|
|
159
|
+
"aria-label": ariaProps["aria-label"],
|
|
160
|
+
"aria-labelledby": ariaProps["aria-labelledby"],
|
|
161
|
+
"aria-describedby": ariaProps["aria-describedby"],
|
|
162
|
+
isVirtualized: ariaProps.isVirtualized,
|
|
163
|
+
onAction: ariaProps.onAction,
|
|
164
|
+
isDisabled: ariaProps.isDisabled,
|
|
165
|
+
selectionBehavior: state.selectionBehavior,
|
|
166
|
+
keyboardNavigationBehavior: ariaProps.keyboardNavigationBehavior,
|
|
167
|
+
orientation: orientation(),
|
|
168
|
+
direction: resolveDirection()
|
|
169
|
+
}), () => state, ref);
|
|
170
|
+
const { isFocused, isFocusVisible, focusProps } = createFocusRing();
|
|
171
|
+
const renderValues = createMemo(() => ({
|
|
172
|
+
isFocused: state.isFocused || isFocused(),
|
|
173
|
+
isFocusVisible: isFocusVisible(),
|
|
174
|
+
isDisabled: ariaProps.isDisabled ?? false,
|
|
175
|
+
isEmpty: stateProps.items.length === 0,
|
|
176
|
+
orientation: orientation()
|
|
177
|
+
}));
|
|
178
|
+
const renderProps = useRenderProps({
|
|
179
|
+
class: local.class,
|
|
180
|
+
style: local.style,
|
|
181
|
+
defaultClassName: "solidaria-GridList"
|
|
182
|
+
}, renderValues);
|
|
183
|
+
const domProps = createMemo(() => {
|
|
184
|
+
return filterDOMProps(ariaProps, { global: true });
|
|
185
|
+
});
|
|
186
|
+
const cleanGridProps = () => {
|
|
187
|
+
const { ref: _ref1, ...rest } = gridProps;
|
|
188
|
+
return rest;
|
|
189
|
+
};
|
|
190
|
+
const cleanFocusProps = () => {
|
|
191
|
+
const { ref: _ref2, ...rest } = focusProps;
|
|
192
|
+
return rest;
|
|
193
|
+
};
|
|
194
|
+
const isEmpty = () => stateProps.items.length === 0;
|
|
195
|
+
const virtualizer = useVirtualizerContext();
|
|
196
|
+
const parentCollectionRenderer = useCollectionRenderer();
|
|
197
|
+
const getItemNodes = createMemo(() => Array.from(state.collection).filter((node) => node.type === "item"));
|
|
198
|
+
const getDropTargetByIndex = (index, position) => {
|
|
199
|
+
const node = getItemNodes()[index];
|
|
200
|
+
if (!node) return null;
|
|
201
|
+
return {
|
|
202
|
+
type: "item",
|
|
203
|
+
key: node.key,
|
|
204
|
+
dropPosition: position
|
|
205
|
+
};
|
|
206
|
+
};
|
|
207
|
+
const hasDroppableDnd = createMemo(() => {
|
|
208
|
+
const hooks = local.dragAndDropHooks;
|
|
209
|
+
return Boolean(hooks?.useDroppableCollectionState && hooks.useDroppableCollection && (hooks.dropTargetDelegate || parentCollectionRenderer?.dropTargetDelegate || hooks.ListDropTargetDelegate));
|
|
210
|
+
});
|
|
211
|
+
const hasDraggableDnd = createMemo(() => {
|
|
212
|
+
const hooks = local.dragAndDropHooks;
|
|
213
|
+
return Boolean(hooks?.useDraggableCollectionState && hooks.useDraggableCollection);
|
|
214
|
+
});
|
|
215
|
+
const dragState = createMemo(() => {
|
|
216
|
+
if (!hasDraggableDnd()) return void 0;
|
|
217
|
+
return local.dragAndDropHooks?.useDraggableCollectionState?.({ items: stateProps.items });
|
|
218
|
+
});
|
|
219
|
+
const dropState = createMemo(() => {
|
|
220
|
+
if (!hasDroppableDnd()) return void 0;
|
|
221
|
+
return local.dragAndDropHooks?.useDroppableCollectionState?.({});
|
|
222
|
+
});
|
|
223
|
+
createEffect(() => {
|
|
224
|
+
if (!hasDraggableDnd()) return;
|
|
225
|
+
const hooks = local.dragAndDropHooks;
|
|
226
|
+
const activeDragState = dragState();
|
|
227
|
+
if (!hooks?.useDraggableCollection || !activeDragState) return;
|
|
228
|
+
hooks.useDraggableCollection({}, activeDragState, () => ref());
|
|
229
|
+
});
|
|
230
|
+
const droppableCollection = createMemo(() => {
|
|
231
|
+
if (!hasDroppableDnd()) return void 0;
|
|
232
|
+
const hooks = local.dragAndDropHooks;
|
|
233
|
+
const activeDropState = dropState();
|
|
234
|
+
if (!hooks?.useDroppableCollection || !activeDropState) return void 0;
|
|
235
|
+
const dropTargetDelegate = hooks.dropTargetDelegate ?? parentCollectionRenderer?.dropTargetDelegate ?? (hooks.ListDropTargetDelegate ? new hooks.ListDropTargetDelegate(() => state.collection, () => ref(), {
|
|
236
|
+
layout: "grid",
|
|
237
|
+
orientation: orientation(),
|
|
238
|
+
direction: resolveDirection()
|
|
239
|
+
}) : void 0);
|
|
240
|
+
if (!dropTargetDelegate) return void 0;
|
|
241
|
+
return hooks.useDroppableCollection({
|
|
242
|
+
dropTargetDelegate,
|
|
243
|
+
keyboardDelegate: {
|
|
244
|
+
getFirstKey: () => state.collection.getFirstKey?.() ?? null,
|
|
245
|
+
getLastKey: () => state.collection.getLastKey?.() ?? null,
|
|
246
|
+
getKeyBelow: (key) => state.collection.getKeyAfter?.(key) ?? null,
|
|
247
|
+
getKeyAbove: (key) => state.collection.getKeyBefore?.(key) ?? null,
|
|
248
|
+
getKeyLeftOf: (key) => resolveDirection() === "rtl" ? state.collection.getKeyAfter?.(key) ?? null : state.collection.getKeyBefore?.(key) ?? null,
|
|
249
|
+
getKeyRightOf: (key) => resolveDirection() === "rtl" ? state.collection.getKeyBefore?.(key) ?? null : state.collection.getKeyAfter?.(key) ?? null,
|
|
250
|
+
getKeyPageBelow: (key) => state.collection.getKeyAfter?.(key) ?? null,
|
|
251
|
+
getKeyPageAbove: (key) => state.collection.getKeyBefore?.(key) ?? null
|
|
252
|
+
}
|
|
253
|
+
}, activeDropState, () => ref());
|
|
254
|
+
});
|
|
255
|
+
const isRootDropTarget = createMemo(() => {
|
|
256
|
+
return Boolean(dropState()?.target?.type === "root");
|
|
257
|
+
});
|
|
258
|
+
const dndRenderDropIndicator = createMemo(() => useRenderDropIndicator(local.dragAndDropHooks, dropState()));
|
|
259
|
+
const dndDropIndicator = (index, position) => {
|
|
260
|
+
const target = getDropTargetByIndex(index, position);
|
|
261
|
+
if (!target || target.type !== "item") return void 0;
|
|
262
|
+
return dndRenderDropIndicator()?.(target);
|
|
263
|
+
};
|
|
264
|
+
const persistedKeys = useDndPersistedKeys({ focusedKey: () => state.focusedKey }, local.dragAndDropHooks, dropState(), state.collection);
|
|
265
|
+
const virtualRange = createMemo(() => {
|
|
266
|
+
if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return null;
|
|
267
|
+
const baseRange = virtualizer.getVisibleRange(stateProps.items.length);
|
|
268
|
+
const itemNodes = getItemNodes();
|
|
269
|
+
const persistedIndexes = Array.from(persistedKeys()).map((key) => itemNodes.findIndex((node) => node.key === key)).filter((index) => index >= 0);
|
|
270
|
+
const dropTarget = dropState()?.target;
|
|
271
|
+
const normalizedDropKey = getNormalizedDropTargetKey(dropTarget, state.collection);
|
|
272
|
+
const focusedKey = state.focusedKey;
|
|
273
|
+
const focusedIndex = focusedKey != null ? itemNodes.findIndex((node) => node.key === focusedKey) : -1;
|
|
274
|
+
const forceIncludeIndexes = [
|
|
275
|
+
dropTarget?.type === "item" ? itemNodes.findIndex((node) => node.key === dropTarget.key) : -1,
|
|
276
|
+
normalizedDropKey != null ? itemNodes.findIndex((node) => node.key === normalizedDropKey) : -1,
|
|
277
|
+
dropTarget?.type === "item" ? -1 : focusedIndex
|
|
278
|
+
].filter((index) => index >= 0);
|
|
279
|
+
return mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, stateProps.items.length, virtualizer, 80, {
|
|
280
|
+
forceIncludeIndexes,
|
|
281
|
+
forceIncludeMaxSpan: 320
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
createEffect(() => {
|
|
285
|
+
if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return;
|
|
286
|
+
virtualizer.setDropTargetItemCountResolver(() => state.collection.size);
|
|
287
|
+
virtualizer.setDropTargetIndexResolver((key) => {
|
|
288
|
+
const index = Array.from(state.collection).findIndex((node) => node.key === key);
|
|
289
|
+
return index >= 0 ? index : null;
|
|
290
|
+
});
|
|
291
|
+
virtualizer.setDropTargetResolver((target) => {
|
|
292
|
+
const node = Array.from(state.collection)[target.index];
|
|
293
|
+
if (!node) return target;
|
|
294
|
+
return {
|
|
295
|
+
...target,
|
|
296
|
+
key: typeof node.key === "string" || typeof node.key === "number" ? node.key : void 0
|
|
297
|
+
};
|
|
298
|
+
});
|
|
299
|
+
onCleanup(() => {
|
|
300
|
+
virtualizer.setDropTargetIndexResolver(void 0);
|
|
301
|
+
virtualizer.setDropTargetItemCountResolver(void 0);
|
|
302
|
+
virtualizer.setDropTargetResolver(void 0);
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
const visibleItems = createMemo(() => {
|
|
306
|
+
const range = virtualRange();
|
|
307
|
+
if (!range) return stateProps.items;
|
|
308
|
+
return stateProps.items.slice(range.start, range.end);
|
|
309
|
+
});
|
|
310
|
+
const virtualSpacerStyle = (size) => virtualizer?.orientation === "horizontal" ? { width: `${size}px` } : { height: `${size}px` };
|
|
311
|
+
const contextValue = createMemo(() => ({
|
|
312
|
+
state,
|
|
313
|
+
collection: collection(),
|
|
314
|
+
isDisabled: ariaProps.isDisabled ?? false,
|
|
315
|
+
selectionBehavior: state.selectionBehavior,
|
|
316
|
+
dragAndDropHooks: local.dragAndDropHooks,
|
|
317
|
+
dragState: dragState(),
|
|
318
|
+
dropState: dropState()
|
|
319
|
+
}));
|
|
320
|
+
const collectionRenderer = createMemo(() => ({
|
|
321
|
+
...parentCollectionRenderer,
|
|
322
|
+
renderItem: (item) => props.children(item),
|
|
323
|
+
renderDropIndicator: (index, position) => dndDropIndicator(index, position) ?? parentCollectionRenderer?.renderDropIndicator?.(index, position)
|
|
324
|
+
}));
|
|
325
|
+
return createComponent(GridListContext.Provider, {
|
|
326
|
+
get value() {
|
|
327
|
+
return contextValue();
|
|
328
|
+
},
|
|
329
|
+
get children() {
|
|
330
|
+
return createComponent(GridListStateContext.Provider, {
|
|
331
|
+
value: state,
|
|
332
|
+
get children() {
|
|
333
|
+
return createComponent(CollectionRendererContext.Provider, {
|
|
334
|
+
get value() {
|
|
335
|
+
return collectionRenderer();
|
|
336
|
+
},
|
|
337
|
+
get children() {
|
|
338
|
+
var _el$ = getNextElement(_tmpl$), _el$2 = _el$.firstChild, [_el$3, _co$] = getNextMarker(_el$2.nextSibling), _el$4 = _el$3.nextSibling, [_el$5, _co$2] = getNextMarker(_el$4.nextSibling);
|
|
339
|
+
use((element) => {
|
|
340
|
+
setRef(element);
|
|
341
|
+
assignRef(local.ref, element);
|
|
342
|
+
}, _el$);
|
|
343
|
+
spread(_el$, mergeProps(() => mergeProps$2(domProps(), cleanGridProps(), cleanFocusProps(), droppableCollection()?.collectionProps ?? {}), {
|
|
344
|
+
get ["class"]() {
|
|
345
|
+
return renderProps.class();
|
|
346
|
+
},
|
|
347
|
+
get style() {
|
|
348
|
+
return renderProps.style();
|
|
349
|
+
},
|
|
350
|
+
get ["data-focused"]() {
|
|
351
|
+
return state.isFocused || void 0;
|
|
352
|
+
},
|
|
353
|
+
get ["data-focus-visible"]() {
|
|
354
|
+
return isFocusVisible() || void 0;
|
|
355
|
+
},
|
|
356
|
+
get ["data-disabled"]() {
|
|
357
|
+
return ariaProps.isDisabled || void 0;
|
|
358
|
+
},
|
|
359
|
+
get ["data-empty"]() {
|
|
360
|
+
return isEmpty() || void 0;
|
|
361
|
+
},
|
|
362
|
+
get ["data-drop-target"]() {
|
|
363
|
+
return isRootDropTarget() || void 0;
|
|
364
|
+
},
|
|
365
|
+
get ["data-orientation"]() {
|
|
366
|
+
return orientation();
|
|
367
|
+
}
|
|
368
|
+
}), false, true);
|
|
369
|
+
insert(_el$, createComponent(SharedElementTransition, { get children() {
|
|
370
|
+
return memo(() => !!(isEmpty() && local.renderEmptyState))() ? local.renderEmptyState() : [
|
|
371
|
+
memo(() => memo(() => !!virtualRange()?.offsetTop)() ? (() => {
|
|
372
|
+
var _el$6 = getNextElement(_tmpl$2);
|
|
373
|
+
effect((_$p) => style(_el$6, virtualSpacerStyle(virtualRange().offsetTop), _$p));
|
|
374
|
+
return _el$6;
|
|
375
|
+
})() : null),
|
|
376
|
+
createComponent(For, {
|
|
377
|
+
get each() {
|
|
378
|
+
return visibleItems();
|
|
379
|
+
},
|
|
380
|
+
children: (item, index) => {
|
|
381
|
+
const itemIndex = () => (virtualRange()?.start ?? 0) + index();
|
|
382
|
+
const beforeIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "before");
|
|
383
|
+
const onIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "on");
|
|
384
|
+
const afterIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "after");
|
|
385
|
+
return [
|
|
386
|
+
memo(beforeIndicator),
|
|
387
|
+
memo(onIndicator),
|
|
388
|
+
memo(() => props.children(item)),
|
|
389
|
+
memo(afterIndicator)
|
|
390
|
+
];
|
|
391
|
+
}
|
|
392
|
+
}),
|
|
393
|
+
memo(() => memo(() => !!virtualRange()?.offsetBottom)() ? (() => {
|
|
394
|
+
var _el$7 = getNextElement(_tmpl$3);
|
|
395
|
+
effect((_$p) => style(_el$7, virtualSpacerStyle(virtualRange().offsetBottom), _$p));
|
|
396
|
+
return _el$7;
|
|
397
|
+
})() : null)
|
|
398
|
+
];
|
|
399
|
+
} }), _el$3, _co$);
|
|
400
|
+
insert(_el$, (() => {
|
|
401
|
+
var _c$ = memo(() => !!(local.hasMore && local.onLoadMore));
|
|
402
|
+
return () => _c$() && createComponent(GridListLoadMoreItem, {
|
|
403
|
+
get onLoadMore() {
|
|
404
|
+
return local.onLoadMore;
|
|
405
|
+
},
|
|
406
|
+
get isLoading() {
|
|
407
|
+
return local.isLoading;
|
|
408
|
+
}
|
|
409
|
+
});
|
|
410
|
+
})(), _el$5, _co$2);
|
|
411
|
+
runHydrationEvents();
|
|
412
|
+
return _el$;
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* An item in a grid list.
|
|
422
|
+
*/
|
|
423
|
+
function GridListItem(props) {
|
|
424
|
+
const [local, domProps] = splitProps(props, [
|
|
425
|
+
"class",
|
|
426
|
+
"style",
|
|
427
|
+
"slot",
|
|
428
|
+
"id",
|
|
429
|
+
"item",
|
|
430
|
+
"textValue",
|
|
431
|
+
"onAction",
|
|
432
|
+
"children",
|
|
433
|
+
"ref"
|
|
434
|
+
]);
|
|
435
|
+
const context = useContext(GridListStateContext);
|
|
436
|
+
if (!context) throw new Error("GridListItem must be used within a GridList");
|
|
437
|
+
const state = context;
|
|
438
|
+
const listContext = useContext(GridListContext);
|
|
439
|
+
const [ref, setRef] = createSignal(null);
|
|
440
|
+
const itemNode = createMemo(() => {
|
|
441
|
+
const node = state.collection.getItem(local.id);
|
|
442
|
+
if (!node) return {
|
|
443
|
+
type: "item",
|
|
444
|
+
key: local.id,
|
|
445
|
+
value: local.item ?? null,
|
|
446
|
+
textValue: local.textValue ?? String(local.id),
|
|
447
|
+
level: 0,
|
|
448
|
+
index: 0,
|
|
449
|
+
hasChildNodes: false,
|
|
450
|
+
childNodes: []
|
|
451
|
+
};
|
|
452
|
+
return node;
|
|
453
|
+
});
|
|
454
|
+
const itemAria = createGridListItem(() => ({
|
|
455
|
+
node: itemNode(),
|
|
456
|
+
onAction: local.onAction,
|
|
457
|
+
selectionBehavior: listContext?.selectionBehavior ?? "replace"
|
|
458
|
+
}), () => state, ref);
|
|
459
|
+
const isSelected = () => itemAria.isSelected;
|
|
460
|
+
const isDisabled = () => itemAria.isDisabled;
|
|
461
|
+
const isPressed = () => itemAria.isPressed;
|
|
462
|
+
const { isHovered, hoverProps } = createHover({ get isDisabled() {
|
|
463
|
+
return isDisabled();
|
|
464
|
+
} });
|
|
465
|
+
const { isFocusVisible, focusProps } = createFocusRing();
|
|
466
|
+
const isFocused = createMemo(() => state.focusedKey === local.id);
|
|
467
|
+
const draggableItem = createMemo(() => {
|
|
468
|
+
if (!listContext?.dragAndDropHooks?.useDraggableItem || !listContext.dragState) return void 0;
|
|
469
|
+
return listContext.dragAndDropHooks.useDraggableItem({ key: local.id }, listContext.dragState);
|
|
470
|
+
});
|
|
471
|
+
const droppableItem = createMemo(() => {
|
|
472
|
+
if (!listContext?.dragAndDropHooks?.useDroppableItem || !listContext.dropState) return void 0;
|
|
473
|
+
return listContext.dragAndDropHooks.useDroppableItem({ key: local.id }, listContext.dropState, () => ref());
|
|
474
|
+
});
|
|
475
|
+
const renderValues = createMemo(() => ({
|
|
476
|
+
isSelected: isSelected(),
|
|
477
|
+
isFocused: isFocused(),
|
|
478
|
+
isFocusVisible: isFocusVisible() && isFocused(),
|
|
479
|
+
isPressed: isPressed(),
|
|
480
|
+
isHovered: isHovered(),
|
|
481
|
+
isDisabled: isDisabled(),
|
|
482
|
+
selectionMode: state.selectionMode,
|
|
483
|
+
selectionBehavior: listContext?.selectionBehavior ?? "replace"
|
|
484
|
+
}));
|
|
485
|
+
const renderProps = useRenderProps({
|
|
486
|
+
get children() {
|
|
487
|
+
return props.children;
|
|
488
|
+
},
|
|
489
|
+
class: local.class,
|
|
490
|
+
style: local.style,
|
|
491
|
+
defaultClassName: "solidaria-GridList-item"
|
|
492
|
+
}, renderValues);
|
|
493
|
+
const cleanRowProps = () => {
|
|
494
|
+
const { ref: _ref1, ...rest } = itemAria.rowProps;
|
|
495
|
+
return rest;
|
|
496
|
+
};
|
|
497
|
+
const cleanHoverProps = () => {
|
|
498
|
+
const { ref: _ref2, ...rest } = hoverProps;
|
|
499
|
+
return rest;
|
|
500
|
+
};
|
|
501
|
+
const cleanFocusProps = () => {
|
|
502
|
+
const { ref: _ref3, ...rest } = focusProps;
|
|
503
|
+
return rest;
|
|
504
|
+
};
|
|
505
|
+
return (() => {
|
|
506
|
+
var _el$8 = getNextElement(_tmpl$4), _el$9 = _el$8.firstChild;
|
|
507
|
+
use((element) => {
|
|
508
|
+
setRef(element);
|
|
509
|
+
assignRef(local.ref, element);
|
|
510
|
+
}, _el$8);
|
|
511
|
+
spread(_el$8, mergeProps(domProps, () => mergeProps$2(cleanRowProps(), cleanHoverProps(), cleanFocusProps(), draggableItem()?.dragProps ?? {}, droppableItem()?.dropProps ?? {}), {
|
|
512
|
+
get ["class"]() {
|
|
513
|
+
return renderProps.class();
|
|
514
|
+
},
|
|
515
|
+
get style() {
|
|
516
|
+
return renderProps.style();
|
|
517
|
+
},
|
|
518
|
+
get ["data-key"]() {
|
|
519
|
+
return local.id;
|
|
520
|
+
},
|
|
521
|
+
get ["data-selected"]() {
|
|
522
|
+
return isSelected() || void 0;
|
|
523
|
+
},
|
|
524
|
+
get ["data-focused"]() {
|
|
525
|
+
return isFocused() || void 0;
|
|
526
|
+
},
|
|
527
|
+
get ["data-focus-visible"]() {
|
|
528
|
+
return memo(() => !!isFocusVisible())() && isFocused() || void 0;
|
|
529
|
+
},
|
|
530
|
+
get ["data-pressed"]() {
|
|
531
|
+
return isPressed() || void 0;
|
|
532
|
+
},
|
|
533
|
+
get ["data-hovered"]() {
|
|
534
|
+
return isHovered() || void 0;
|
|
535
|
+
},
|
|
536
|
+
get ["data-disabled"]() {
|
|
537
|
+
return isDisabled() || void 0;
|
|
538
|
+
},
|
|
539
|
+
get ["data-dragging"]() {
|
|
540
|
+
return draggableItem()?.isDragging || void 0;
|
|
541
|
+
},
|
|
542
|
+
get ["data-drop-target"]() {
|
|
543
|
+
return droppableItem()?.isDropTarget || void 0;
|
|
544
|
+
}
|
|
545
|
+
}), false, true);
|
|
546
|
+
spread(_el$9, mergeProps(() => itemAria.gridCellProps), false, true);
|
|
547
|
+
insert(_el$9, () => renderProps.renderChildren());
|
|
548
|
+
runHydrationEvents();
|
|
549
|
+
return _el$8;
|
|
550
|
+
})();
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* A checkbox for item selection in a grid list.
|
|
554
|
+
*/
|
|
555
|
+
function GridListSelectionCheckbox(props) {
|
|
556
|
+
const context = useContext(GridListStateContext);
|
|
557
|
+
if (!context) throw new Error("GridListSelectionCheckbox must be used within a GridList");
|
|
558
|
+
const state = context;
|
|
559
|
+
const checkboxAria = createGridListSelectionCheckbox(() => ({ key: props.itemKey }), () => state);
|
|
560
|
+
return (() => {
|
|
561
|
+
var _el$0 = getNextElement(_tmpl$5);
|
|
562
|
+
spread(_el$0, mergeProps(() => checkboxAria.checkboxProps, {
|
|
563
|
+
get ["class"]() {
|
|
564
|
+
return props.class;
|
|
565
|
+
},
|
|
566
|
+
get style() {
|
|
567
|
+
return props.style;
|
|
568
|
+
},
|
|
569
|
+
get tabIndex() {
|
|
570
|
+
return props.excludeFromTabOrder ? -1 : void 0;
|
|
571
|
+
},
|
|
572
|
+
get ["aria-label"]() {
|
|
573
|
+
return props["aria-label"] ?? "Select";
|
|
574
|
+
}
|
|
575
|
+
}), false, false);
|
|
576
|
+
runHydrationEvents();
|
|
577
|
+
return _el$0;
|
|
578
|
+
})();
|
|
579
|
+
}
|
|
580
|
+
function GridListLoadMoreItem(props) {
|
|
581
|
+
let sentinelRef;
|
|
582
|
+
const [isPending, setIsPending] = createSignal(false);
|
|
583
|
+
const isLoading = () => !!props.isLoading || isPending();
|
|
584
|
+
const triggerLoadMore = async () => {
|
|
585
|
+
if (isLoading()) return;
|
|
586
|
+
setIsPending(true);
|
|
587
|
+
try {
|
|
588
|
+
await props.onLoadMore();
|
|
589
|
+
} finally {
|
|
590
|
+
setIsPending(false);
|
|
591
|
+
}
|
|
592
|
+
};
|
|
593
|
+
createEffect(() => {
|
|
594
|
+
if (!sentinelRef || typeof IntersectionObserver !== "function") return;
|
|
595
|
+
const margin = `0px 0px ${100 * (props.scrollOffset ?? 1)}% 0px`;
|
|
596
|
+
const observer = new IntersectionObserver((entries) => {
|
|
597
|
+
if (entries[0]?.isIntersecting) triggerLoadMore();
|
|
598
|
+
}, { rootMargin: margin });
|
|
599
|
+
observer.observe(sentinelRef);
|
|
600
|
+
return () => observer.disconnect();
|
|
601
|
+
});
|
|
602
|
+
const renderProps = useRenderProps({
|
|
603
|
+
get children() {
|
|
604
|
+
return props.children ?? (() => isLoading() ? "Loading more..." : "Load more");
|
|
605
|
+
},
|
|
606
|
+
class: props.class,
|
|
607
|
+
style: props.style,
|
|
608
|
+
defaultClassName: "solidaria-GridList-loadMore"
|
|
609
|
+
}, () => ({ isLoading: isLoading() }));
|
|
610
|
+
return [(() => {
|
|
611
|
+
var _el$1 = getNextElement(_tmpl$6), _el$10 = _el$1.firstChild;
|
|
612
|
+
var _ref$ = sentinelRef;
|
|
613
|
+
typeof _ref$ === "function" ? use(_ref$, _el$10) : sentinelRef = _el$10;
|
|
614
|
+
return _el$1;
|
|
615
|
+
})(), (() => {
|
|
616
|
+
var _el$11 = getNextElement(_tmpl$7);
|
|
617
|
+
_el$11.addEventListener("focus", () => {
|
|
618
|
+
triggerLoadMore();
|
|
619
|
+
});
|
|
620
|
+
insert(_el$11, () => renderProps.renderChildren());
|
|
621
|
+
effect((_p$) => {
|
|
622
|
+
var _v$ = renderProps.class(), _v$2 = renderProps.style(), _v$3 = isLoading() || void 0;
|
|
623
|
+
_v$ !== _p$.e && className(_el$11, _p$.e = _v$);
|
|
624
|
+
_p$.t = style(_el$11, _v$2, _p$.t);
|
|
625
|
+
_v$3 !== _p$.a && setAttribute(_el$11, "data-loading", _p$.a = _v$3);
|
|
626
|
+
return _p$;
|
|
627
|
+
}, {
|
|
628
|
+
e: void 0,
|
|
629
|
+
t: void 0,
|
|
630
|
+
a: void 0
|
|
631
|
+
});
|
|
632
|
+
return _el$11;
|
|
633
|
+
})()];
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* The header of a {@link GridListSection}. Renders as `role="row"` wrapping a
|
|
637
|
+
* `role="rowheader"` whose id labels the section (mirrors upstream
|
|
638
|
+
* `GridListHeader`). The row/rowheader props are supplied by the enclosing
|
|
639
|
+
* section through context.
|
|
640
|
+
*/
|
|
641
|
+
function GridListHeader(props) {
|
|
642
|
+
const rowProps = useContext(GridListHeaderContext);
|
|
643
|
+
const rowHeaderProps = useContext(GridListHeaderInnerContext);
|
|
644
|
+
return (() => {
|
|
645
|
+
var _el$12 = getNextElement(_tmpl$4), _el$13 = _el$12.firstChild;
|
|
646
|
+
spread(_el$12, mergeProps({
|
|
647
|
+
get ["class"]() {
|
|
648
|
+
return props.class ?? "solidaria-GridListHeader";
|
|
649
|
+
},
|
|
650
|
+
get style() {
|
|
651
|
+
return props.style;
|
|
652
|
+
}
|
|
653
|
+
}, rowProps ?? {}), false, true);
|
|
654
|
+
spread(_el$13, mergeProps(rowHeaderProps ?? {}, { "style": { display: "contents" } }), false, true);
|
|
655
|
+
insert(_el$13, () => props.children);
|
|
656
|
+
runHydrationEvents();
|
|
657
|
+
return _el$12;
|
|
658
|
+
})();
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* A section within a GridList. Renders as `role="rowgroup"` and supplies its
|
|
662
|
+
* optional {@link GridListHeader} with the row/rowheader props that wire up the
|
|
663
|
+
* section's `aria-labelledby` (mirrors upstream `GridListSection`).
|
|
664
|
+
*/
|
|
665
|
+
function GridListSection(props) {
|
|
666
|
+
const [local, domProps] = splitProps(props, [
|
|
667
|
+
"children",
|
|
668
|
+
"class",
|
|
669
|
+
"style",
|
|
670
|
+
"slot",
|
|
671
|
+
"ref"
|
|
672
|
+
]);
|
|
673
|
+
const section = createGridListSection({ get "aria-label"() {
|
|
674
|
+
return domProps["aria-label"];
|
|
675
|
+
} });
|
|
676
|
+
const renderProps = useRenderProps({
|
|
677
|
+
children: void 0,
|
|
678
|
+
class: local.class,
|
|
679
|
+
style: local.style,
|
|
680
|
+
defaultClassName: "solidaria-GridListSection"
|
|
681
|
+
}, () => ({ hasChildren: true }));
|
|
682
|
+
const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));
|
|
683
|
+
return (() => {
|
|
684
|
+
var _el$14 = getNextElement(_tmpl$8);
|
|
685
|
+
use((el) => assignRef(local.ref, el), _el$14);
|
|
686
|
+
spread(_el$14, mergeProps(filteredDomProps, () => section.rowGroupProps, {
|
|
687
|
+
get ["class"]() {
|
|
688
|
+
return renderProps.class();
|
|
689
|
+
},
|
|
690
|
+
get style() {
|
|
691
|
+
return renderProps.style();
|
|
692
|
+
},
|
|
693
|
+
get slot() {
|
|
694
|
+
return local.slot;
|
|
695
|
+
},
|
|
696
|
+
"data-section": ""
|
|
697
|
+
}), false, true);
|
|
698
|
+
insert(_el$14, createComponent(GridListHeaderContext.Provider, {
|
|
699
|
+
get value() {
|
|
700
|
+
return section.rowProps;
|
|
701
|
+
},
|
|
702
|
+
get children() {
|
|
703
|
+
return createComponent(GridListHeaderInnerContext.Provider, {
|
|
704
|
+
get value() {
|
|
705
|
+
return section.rowHeaderProps;
|
|
706
|
+
},
|
|
707
|
+
get children() {
|
|
708
|
+
return local.children;
|
|
709
|
+
}
|
|
710
|
+
});
|
|
711
|
+
}
|
|
712
|
+
}));
|
|
713
|
+
runHydrationEvents();
|
|
714
|
+
return _el$14;
|
|
715
|
+
})();
|
|
716
|
+
}
|
|
717
|
+
GridList.Item = GridListItem;
|
|
718
|
+
GridList.SelectionCheckbox = GridListSelectionCheckbox;
|
|
719
|
+
GridList.LoadMoreItem = GridListLoadMoreItem;
|
|
720
|
+
//#endregion
|
|
721
|
+
export { GridList, GridListContext, GridListHeader, GridListHeaderContext, GridListHeaderInnerContext, GridListItem, GridListLoadMoreItem, GridListSection, GridListSelectionCheckbox, GridListStateContext };
|
|
722
|
+
|
|
723
|
+
//# sourceMappingURL=GridList.js.map
|