@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
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import { dataAttr, filterDOMProps, useRenderProps } from "./utils.jsx";
|
|
2
|
+
import { createContext, createMemo, createSignal, splitProps, useContext } from "solid-js";
|
|
3
|
+
import { createDisclosure, createDisclosureGroup, createFocusRing, mergeProps as mergeProps$1 } from "@proyecto-viviana/solidaria";
|
|
4
|
+
import { createDisclosureGroupState, createDisclosureState } from "@proyecto-viviana/solid-stately";
|
|
5
|
+
//#region src/Disclosure.tsx
|
|
6
|
+
/**
|
|
7
|
+
* Disclosure and Accordion components for solidaria-components
|
|
8
|
+
*
|
|
9
|
+
* Disclosure is a widget that can be toggled to show or hide content.
|
|
10
|
+
* Accordion (DisclosureGroup) manages multiple disclosures with optional single-expand.
|
|
11
|
+
*
|
|
12
|
+
* Port of react-aria-components Disclosure.
|
|
13
|
+
*/
|
|
14
|
+
function assignRef(ref, el) {
|
|
15
|
+
if (!ref) return;
|
|
16
|
+
if (typeof ref === "function") ref(el);
|
|
17
|
+
else if (typeof ref === "object" && "current" in ref) ref.current = el;
|
|
18
|
+
}
|
|
19
|
+
const DisclosureContext = createContext(null);
|
|
20
|
+
const DisclosureStateContext = createContext(null);
|
|
21
|
+
function useDisclosureContext() {
|
|
22
|
+
return useContext(DisclosureContext);
|
|
23
|
+
}
|
|
24
|
+
const DisclosureGroupContext = createContext(null);
|
|
25
|
+
const DisclosureGroupStateContext = createContext(null);
|
|
26
|
+
function useDisclosureGroupContext() {
|
|
27
|
+
return useContext(DisclosureGroupContext);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* DisclosureGroup manages a group of Disclosure components.
|
|
31
|
+
* Use this to create an accordion where only one item can be expanded at a time.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```tsx
|
|
35
|
+
* <DisclosureGroup>
|
|
36
|
+
* <Disclosure id="item1">
|
|
37
|
+
* <DisclosureTrigger>Item 1</DisclosureTrigger>
|
|
38
|
+
* <DisclosurePanel>Content 1</DisclosurePanel>
|
|
39
|
+
* </Disclosure>
|
|
40
|
+
* <Disclosure id="item2">
|
|
41
|
+
* <DisclosureTrigger>Item 2</DisclosureTrigger>
|
|
42
|
+
* <DisclosurePanel>Content 2</DisclosurePanel>
|
|
43
|
+
* </Disclosure>
|
|
44
|
+
* </DisclosureGroup>
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
function DisclosureGroup(props) {
|
|
48
|
+
const [local, rest] = splitProps(props, [
|
|
49
|
+
"class",
|
|
50
|
+
"style",
|
|
51
|
+
"allowsMultipleExpanded",
|
|
52
|
+
"isDisabled",
|
|
53
|
+
"expandedKeys",
|
|
54
|
+
"defaultExpandedKeys",
|
|
55
|
+
"onExpandedChange",
|
|
56
|
+
"ref"
|
|
57
|
+
]);
|
|
58
|
+
const state = createDisclosureGroupState(() => ({
|
|
59
|
+
allowsMultipleExpanded: local.allowsMultipleExpanded,
|
|
60
|
+
isDisabled: local.isDisabled,
|
|
61
|
+
expandedKeys: local.expandedKeys,
|
|
62
|
+
defaultExpandedKeys: local.defaultExpandedKeys,
|
|
63
|
+
onExpandedChange: local.onExpandedChange
|
|
64
|
+
}));
|
|
65
|
+
const { groupProps } = createDisclosureGroup(() => ({ isDisabled: local.isDisabled }), state);
|
|
66
|
+
const renderValues = createMemo(() => ({ isDisabled: state.isDisabled }));
|
|
67
|
+
const renderProps = useRenderProps({
|
|
68
|
+
class: local.class,
|
|
69
|
+
style: local.style,
|
|
70
|
+
defaultClassName: "solidaria-DisclosureGroup"
|
|
71
|
+
}, renderValues);
|
|
72
|
+
const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
|
|
73
|
+
const contextValue = { state };
|
|
74
|
+
const { ref: _ref, ...cleanGroupProps } = groupProps;
|
|
75
|
+
return <DisclosureGroupStateContext.Provider value={state}>
|
|
76
|
+
<DisclosureGroupContext.Provider value={contextValue}>
|
|
77
|
+
<div ref={(el) => assignRef(local.ref, el)} {...domProps()} {...cleanGroupProps} class={renderProps.class()} style={renderProps.style()} data-disabled={dataAttr(state.isDisabled)}>
|
|
78
|
+
{props.children}
|
|
79
|
+
</div>
|
|
80
|
+
</DisclosureGroupContext.Provider>
|
|
81
|
+
</DisclosureGroupStateContext.Provider>;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Disclosure is a widget that can be toggled to show or hide content.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```tsx
|
|
88
|
+
* <Disclosure>
|
|
89
|
+
* <DisclosureTrigger>Show more</DisclosureTrigger>
|
|
90
|
+
* <DisclosurePanel>Hidden content here...</DisclosurePanel>
|
|
91
|
+
* </Disclosure>
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
function Disclosure(props) {
|
|
95
|
+
const [local, rest] = splitProps(props, [
|
|
96
|
+
"class",
|
|
97
|
+
"style",
|
|
98
|
+
"isDisabled",
|
|
99
|
+
"isExpanded",
|
|
100
|
+
"defaultExpanded",
|
|
101
|
+
"onExpandedChange",
|
|
102
|
+
"id",
|
|
103
|
+
"ref"
|
|
104
|
+
]);
|
|
105
|
+
const groupContext = useDisclosureGroupContext();
|
|
106
|
+
const state = createDisclosureState(() => {
|
|
107
|
+
const id = local.id;
|
|
108
|
+
if (groupContext && id) return {
|
|
109
|
+
isExpanded: groupContext.state.isExpanded(id),
|
|
110
|
+
onExpandedChange: (expanded) => {
|
|
111
|
+
if (expanded !== groupContext.state.isExpanded(id)) groupContext.state.toggleKey(id);
|
|
112
|
+
local.onExpandedChange?.(expanded);
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
isExpanded: local.isExpanded,
|
|
117
|
+
defaultExpanded: local.defaultExpanded,
|
|
118
|
+
onExpandedChange: local.onExpandedChange
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
const [panelRef, setPanelRefSignal] = createSignal(null);
|
|
122
|
+
const isDisabled = () => local.isDisabled || groupContext?.state.isDisabled || false;
|
|
123
|
+
const disclosureAria = createDisclosure(() => ({ isDisabled: isDisabled() }), state, panelRef);
|
|
124
|
+
const { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = createFocusRing({ within: true });
|
|
125
|
+
const renderValues = createMemo(() => ({
|
|
126
|
+
isExpanded: state.isExpanded(),
|
|
127
|
+
isFocusVisibleWithin: isFocusVisibleWithin(),
|
|
128
|
+
isDisabled: isDisabled(),
|
|
129
|
+
state
|
|
130
|
+
}));
|
|
131
|
+
const renderProps = useRenderProps({
|
|
132
|
+
class: local.class,
|
|
133
|
+
style: local.style,
|
|
134
|
+
defaultClassName: "solidaria-Disclosure"
|
|
135
|
+
}, renderValues);
|
|
136
|
+
const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
|
|
137
|
+
const contextValue = {
|
|
138
|
+
state,
|
|
139
|
+
isDisabled,
|
|
140
|
+
disclosureAria
|
|
141
|
+
};
|
|
142
|
+
const setPanelRef = (el) => {
|
|
143
|
+
setPanelRefSignal(el);
|
|
144
|
+
};
|
|
145
|
+
return <DisclosureStateContext.Provider value={state}>
|
|
146
|
+
<DisclosureContext.Provider value={contextValue}>
|
|
147
|
+
<DisclosurePanelRefContext.Provider value={setPanelRef}>
|
|
148
|
+
<div ref={(el) => assignRef(local.ref, el)} {...mergeProps$1(domProps(), focusWithinProps)} class={renderProps.class()} style={renderProps.style()} data-expanded={dataAttr(state.isExpanded())} data-disabled={dataAttr(isDisabled())} data-focus-visible-within={dataAttr(isFocusVisibleWithin())}>
|
|
149
|
+
{props.children}
|
|
150
|
+
</div>
|
|
151
|
+
</DisclosurePanelRefContext.Provider>
|
|
152
|
+
</DisclosureContext.Provider>
|
|
153
|
+
</DisclosureStateContext.Provider>;
|
|
154
|
+
}
|
|
155
|
+
const DisclosurePanelRefContext = createContext(null);
|
|
156
|
+
/**
|
|
157
|
+
* DisclosureTrigger is the button that toggles the disclosure.
|
|
158
|
+
* Pattern matches SelectTrigger for consistency.
|
|
159
|
+
*/
|
|
160
|
+
function DisclosureTrigger(props) {
|
|
161
|
+
const context = useContext(DisclosureContext);
|
|
162
|
+
if (!context) throw new Error("DisclosureTrigger must be used within a Disclosure");
|
|
163
|
+
const { state, disclosureAria, isDisabled } = context;
|
|
164
|
+
const isExpanded = () => state.isExpanded();
|
|
165
|
+
const getButtonProps = () => {
|
|
166
|
+
const { ref: _ref, ...rest } = disclosureAria.buttonProps;
|
|
167
|
+
return rest;
|
|
168
|
+
};
|
|
169
|
+
const { isFocused, isFocusVisible, focusProps } = createFocusRing();
|
|
170
|
+
const [local, rest] = splitProps(props, [
|
|
171
|
+
"children",
|
|
172
|
+
"class",
|
|
173
|
+
"style",
|
|
174
|
+
"ref"
|
|
175
|
+
]);
|
|
176
|
+
const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
|
|
177
|
+
const cleanFocusProps = () => {
|
|
178
|
+
const { ref: _ref, ...rest } = focusProps;
|
|
179
|
+
return rest;
|
|
180
|
+
};
|
|
181
|
+
return <button {...mergeProps$1(domProps(), getButtonProps(), cleanFocusProps())} ref={(el) => assignRef(local.ref, el)} type="button" class={local.class} style={local.style} data-expanded={dataAttr(isExpanded())} data-disabled={dataAttr(isDisabled())} data-pressed={dataAttr(disclosureAria.isPressed())} data-focused={dataAttr(isFocused())} data-focus-visible={dataAttr(isFocusVisible())}>
|
|
182
|
+
{local.children}
|
|
183
|
+
</button>;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* DisclosurePanel contains the content that is shown/hidden.
|
|
187
|
+
*/
|
|
188
|
+
function DisclosurePanel(props) {
|
|
189
|
+
const context = useContext(DisclosureContext);
|
|
190
|
+
if (!context) throw new Error("DisclosurePanel must be used within a Disclosure");
|
|
191
|
+
const panelRefSetter = useContext(DisclosurePanelRefContext);
|
|
192
|
+
const [local, rest] = splitProps(props, [
|
|
193
|
+
"class",
|
|
194
|
+
"style",
|
|
195
|
+
"role",
|
|
196
|
+
"ref"
|
|
197
|
+
]);
|
|
198
|
+
const { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = createFocusRing({ within: true });
|
|
199
|
+
const isExpanded = () => context.state.isExpanded();
|
|
200
|
+
const isDisabled = () => context.isDisabled();
|
|
201
|
+
const renderValues = createMemo(() => ({
|
|
202
|
+
isExpanded: isExpanded(),
|
|
203
|
+
isFocusVisibleWithin: isFocusVisibleWithin(),
|
|
204
|
+
isDisabled: isDisabled(),
|
|
205
|
+
state: context.state
|
|
206
|
+
}));
|
|
207
|
+
const renderProps = useRenderProps({
|
|
208
|
+
get children() {
|
|
209
|
+
return props.children;
|
|
210
|
+
},
|
|
211
|
+
class: local.class,
|
|
212
|
+
style: local.style,
|
|
213
|
+
defaultClassName: "solidaria-DisclosurePanel"
|
|
214
|
+
}, renderValues);
|
|
215
|
+
const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
|
|
216
|
+
const getPanelProps = () => {
|
|
217
|
+
const { ref: _ref, ...rest } = context.disclosureAria.panelProps;
|
|
218
|
+
return rest;
|
|
219
|
+
};
|
|
220
|
+
return <div {...mergeProps$1(domProps(), focusWithinProps)} {...getPanelProps()} ref={(el) => {
|
|
221
|
+
panelRefSetter?.(el);
|
|
222
|
+
assignRef(local.ref, el);
|
|
223
|
+
}} role={local.role ?? "group"} class={renderProps.class()} style={renderProps.style()} data-expanded={dataAttr(isExpanded())} data-focus-visible-within={dataAttr(isFocusVisibleWithin())}>
|
|
224
|
+
{renderProps.renderChildren()}
|
|
225
|
+
</div>;
|
|
226
|
+
}
|
|
227
|
+
//#endregion
|
|
228
|
+
export { Disclosure, DisclosureContext, DisclosureGroup, DisclosureGroupContext, DisclosureGroupStateContext, DisclosurePanel, DisclosureStateContext, DisclosureTrigger, useDisclosureContext, useDisclosureGroupContext };
|
|
229
|
+
|
|
230
|
+
//# sourceMappingURL=Disclosure.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Disclosure.jsx","names":["mergeProps"],"sources":["../src/Disclosure.tsx"],"sourcesContent":["/**\n * Disclosure and Accordion components for solidaria-components\n *\n * Disclosure is a widget that can be toggled to show or hide content.\n * Accordion (DisclosureGroup) manages multiple disclosures with optional single-expand.\n *\n * Port of react-aria-components Disclosure.\n */\n\nimport {\n type JSX,\n createContext,\n createMemo,\n createSignal,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport {\n createDisclosureState,\n createDisclosureGroupState,\n type DisclosureState,\n type DisclosureGroupState,\n type DisclosureStateProps,\n type DisclosureGroupStateProps,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n createDisclosure,\n createDisclosureGroup,\n createFocusRing,\n mergeProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n} from \"./utils\";\n\ntype RefLike<T> = T | ((el: T) => void) | { current?: T | null } | undefined;\n\nfunction assignRef<T>(ref: RefLike<T>, el: T): void {\n if (!ref) {\n return;\n }\n\n if (typeof ref === \"function\") {\n (ref as (el: T) => void)(el);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = el;\n }\n}\n\nexport interface DisclosureRenderProps {\n /** Whether the disclosure is expanded. */\n isExpanded: boolean;\n /** Whether the disclosure has keyboard focus within. */\n isFocusVisibleWithin: boolean;\n /** Whether the disclosure is disabled. */\n isDisabled: boolean;\n /** The disclosure state. */\n state: DisclosureState;\n}\n\nexport interface DisclosureGroupRenderProps {\n /** Whether all items are disabled. */\n isDisabled: boolean;\n}\n\nexport interface DisclosureProps extends DisclosureStateProps {\n /** The children of the component. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DisclosureRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DisclosureRenderProps>;\n /** Whether the disclosure is disabled. */\n isDisabled?: boolean;\n /** A unique identifier for the disclosure (used in groups). */\n id?: string;\n /** A ref for the disclosure root element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\nexport interface DisclosureGroupProps extends DisclosureGroupStateProps {\n /** The children of the component. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DisclosureGroupRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DisclosureGroupRenderProps>;\n /** A ref for the disclosure group root element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\nexport interface DisclosureTriggerProps extends Omit<\n JSX.ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"class\" | \"style\" | \"type\" | \"ref\"\n> {\n /** The children of the trigger. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: string;\n /** The inline style for the element. */\n style?: JSX.CSSProperties;\n /** A ref for the trigger button element. */\n ref?: RefLike<HTMLButtonElement>;\n}\n\nexport interface DisclosurePanelProps extends Omit<\n JSX.HTMLAttributes<HTMLElement>,\n \"children\" | \"class\" | \"style\" | \"role\" | \"ref\"\n> {\n /** The children of the panel. */\n children?: RenderChildren<DisclosureRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<DisclosureRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<DisclosureRenderProps>;\n /** The accessibility role for the disclosure panel. */\n role?: \"group\" | \"region\";\n /** A ref for the panel element. */\n ref?: RefLike<HTMLDivElement>;\n}\n\ninterface DisclosureContextValue {\n state: DisclosureState;\n isDisabled: () => boolean;\n /** The disclosure ARIA result object - access .buttonProps and .panelProps as getters */\n disclosureAria: {\n readonly buttonProps: JSX.ButtonHTMLAttributes<HTMLButtonElement>;\n readonly panelProps: JSX.HTMLAttributes<HTMLElement>;\n readonly isPressed: () => boolean;\n };\n}\n\nexport const DisclosureContext = createContext<DisclosureContextValue | null>(null);\nexport const DisclosureStateContext = createContext<DisclosureState | null>(null);\n\nexport function useDisclosureContext(): DisclosureContextValue | null {\n return useContext(DisclosureContext);\n}\n\ninterface DisclosureGroupContextValue {\n state: DisclosureGroupState;\n}\n\nexport const DisclosureGroupContext = createContext<DisclosureGroupContextValue | null>(null);\nexport const DisclosureGroupStateContext = createContext<DisclosureGroupState | null>(null);\n\nexport function useDisclosureGroupContext(): DisclosureGroupContextValue | null {\n return useContext(DisclosureGroupContext);\n}\n\n/**\n * DisclosureGroup manages a group of Disclosure components.\n * Use this to create an accordion where only one item can be expanded at a time.\n *\n * @example\n * ```tsx\n * <DisclosureGroup>\n * <Disclosure id=\"item1\">\n * <DisclosureTrigger>Item 1</DisclosureTrigger>\n * <DisclosurePanel>Content 1</DisclosurePanel>\n * </Disclosure>\n * <Disclosure id=\"item2\">\n * <DisclosureTrigger>Item 2</DisclosureTrigger>\n * <DisclosurePanel>Content 2</DisclosurePanel>\n * </Disclosure>\n * </DisclosureGroup>\n * ```\n */\nexport function DisclosureGroup(props: DisclosureGroupProps): JSX.Element {\n // IMPORTANT: Don't destructure or access props.children early!\n // In SolidJS, children are lazily evaluated. Accessing them before\n // the context provider renders causes them to evaluate outside the context.\n // See: https://github.com/solidjs/solid/issues/182\n const [local, rest] = splitProps(props, [\n \"class\",\n \"style\",\n \"allowsMultipleExpanded\",\n \"isDisabled\",\n \"expandedKeys\",\n \"defaultExpandedKeys\",\n \"onExpandedChange\",\n \"ref\",\n ]);\n\n // Create group state\n const state = createDisclosureGroupState(() => ({\n allowsMultipleExpanded: local.allowsMultipleExpanded,\n isDisabled: local.isDisabled,\n expandedKeys: local.expandedKeys,\n defaultExpandedKeys: local.defaultExpandedKeys,\n onExpandedChange: local.onExpandedChange,\n }));\n\n // Create group accessibility props\n const { groupProps } = createDisclosureGroup(() => ({ isDisabled: local.isDisabled }), state);\n\n const renderValues = createMemo<DisclosureGroupRenderProps>(() => ({\n isDisabled: state.isDisabled,\n }));\n\n // Resolve render props - don't pass children, we'll render props.children directly\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DisclosureGroup\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n const contextValue: DisclosureGroupContextValue = { state };\n\n // Extract ref from groupProps to avoid type conflicts\n const { ref: _ref, ...cleanGroupProps } = groupProps as Record<string, unknown>;\n\n return (\n <DisclosureGroupStateContext.Provider value={state}>\n <DisclosureGroupContext.Provider value={contextValue}>\n <div\n ref={(el) => assignRef(local.ref, el)}\n {...domProps()}\n {...cleanGroupProps}\n class={renderProps.class()}\n style={renderProps.style()}\n data-disabled={dataAttr(state.isDisabled)}\n >\n {props.children}\n </div>\n </DisclosureGroupContext.Provider>\n </DisclosureGroupStateContext.Provider>\n );\n}\n\n/**\n * Disclosure is a widget that can be toggled to show or hide content.\n *\n * @example\n * ```tsx\n * <Disclosure>\n * <DisclosureTrigger>Show more</DisclosureTrigger>\n * <DisclosurePanel>Hidden content here...</DisclosurePanel>\n * </Disclosure>\n * ```\n */\nexport function Disclosure(props: DisclosureProps): JSX.Element {\n // IMPORTANT: Don't destructure or access props.children early!\n // In SolidJS, children are lazily evaluated. Accessing them before\n // the context provider renders causes them to evaluate outside the context.\n // See: https://github.com/solidjs/solid/issues/182\n const [local, rest] = splitProps(props, [\n \"class\",\n \"style\",\n \"isDisabled\",\n \"isExpanded\",\n \"defaultExpanded\",\n \"onExpandedChange\",\n \"id\",\n \"ref\",\n ]);\n\n // Check if we're inside a DisclosureGroup\n const groupContext = useDisclosureGroupContext();\n\n // Create disclosure state\n // If in a group, sync with group state\n const state = createDisclosureState(() => {\n const id = local.id;\n if (groupContext && id) {\n return {\n isExpanded: groupContext.state.isExpanded(id),\n onExpandedChange: (expanded: boolean) => {\n if (expanded !== groupContext.state.isExpanded(id)) {\n groupContext.state.toggleKey(id);\n }\n local.onExpandedChange?.(expanded);\n },\n };\n }\n return {\n isExpanded: local.isExpanded,\n defaultExpanded: local.defaultExpanded,\n onExpandedChange: local.onExpandedChange,\n };\n });\n\n // Panel ref as a signal so the createEffect in createDisclosure can track it\n const [panelRef, setPanelRefSignal] = createSignal<HTMLElement | null>(null);\n\n // Determine if disabled (used in multiple places)\n const isDisabled = () => local.isDisabled || groupContext?.state.isDisabled || false;\n\n // Create disclosure accessibility props\n // Pass props as accessor function for reactivity\n // IMPORTANT: Don't destructure! The getters must be called fresh each render\n const disclosureAria = createDisclosure(\n () => ({ isDisabled: isDisabled() }),\n state,\n panelRef, // Pass the accessor directly\n );\n const { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = createFocusRing({\n within: true,\n });\n\n const renderValues = createMemo<DisclosureRenderProps>(() => ({\n isExpanded: state.isExpanded(),\n isFocusVisibleWithin: isFocusVisibleWithin(),\n isDisabled: isDisabled(),\n state,\n }));\n\n // Resolve render props - don't pass children, we'll render props.children directly\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-Disclosure\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n // Context value - pass the disclosureAria object with getters intact\n const contextValue: DisclosureContextValue = {\n state,\n isDisabled, // Pass the accessor function, not the value\n disclosureAria,\n };\n\n const setPanelRef = (el: HTMLElement | null) => {\n setPanelRefSignal(el);\n };\n\n return (\n <DisclosureStateContext.Provider value={state}>\n <DisclosureContext.Provider value={contextValue}>\n <DisclosurePanelRefContext.Provider value={setPanelRef}>\n <div\n ref={(el) => assignRef(local.ref, el)}\n {...mergeProps(\n domProps() as Record<string, unknown>,\n focusWithinProps as Record<string, unknown>,\n )}\n class={renderProps.class()}\n style={renderProps.style()}\n data-expanded={dataAttr(state.isExpanded())}\n data-disabled={dataAttr(isDisabled())}\n data-focus-visible-within={dataAttr(isFocusVisibleWithin())}\n >\n {props.children}\n </div>\n </DisclosurePanelRefContext.Provider>\n </DisclosureContext.Provider>\n </DisclosureStateContext.Provider>\n );\n}\n\n// Internal context to pass panel ref setter\nconst DisclosurePanelRefContext = createContext<((el: HTMLElement | null) => void) | null>(null);\n\n/**\n * DisclosureTrigger is the button that toggles the disclosure.\n * Pattern matches SelectTrigger for consistency.\n */\nexport function DisclosureTrigger(props: DisclosureTriggerProps): JSX.Element {\n // Get context - now safe because parent uses lazy children evaluation\n const context = useContext(DisclosureContext);\n if (!context) {\n throw new Error(\"DisclosureTrigger must be used within a Disclosure\");\n }\n\n const { state, disclosureAria, isDisabled } = context;\n\n // Reactive accessors\n const isExpanded = () => state.isExpanded();\n\n // Get buttonProps from the getter each time - this ensures reactivity\n // IMPORTANT: Call the getter fresh each render to get updated aria-expanded, etc.\n const getButtonProps = () => {\n const { ref: _ref, ...rest } = disclosureAria.buttonProps as Record<string, unknown>;\n return rest;\n };\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n const [local, rest] = splitProps(props, [\"children\", \"class\", \"style\", \"ref\"]);\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n\n return (\n <button\n {...mergeProps(domProps() as Record<string, unknown>, getButtonProps(), cleanFocusProps())}\n ref={(el) => assignRef(local.ref, el)}\n type=\"button\"\n class={local.class}\n style={local.style}\n data-expanded={dataAttr(isExpanded())}\n data-disabled={dataAttr(isDisabled())}\n data-pressed={dataAttr(disclosureAria.isPressed())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n >\n {local.children}\n </button>\n );\n}\n\n/**\n * DisclosurePanel contains the content that is shown/hidden.\n */\nexport function DisclosurePanel(props: DisclosurePanelProps): JSX.Element {\n // Get context - now safe because parent uses lazy children evaluation\n const context = useContext(DisclosureContext);\n if (!context) {\n throw new Error(\"DisclosurePanel must be used within a Disclosure\");\n }\n const panelRefSetter = useContext(DisclosurePanelRefContext);\n\n const [local, rest] = splitProps(props, [\"class\", \"style\", \"role\", \"ref\"]);\n const { isFocusVisible: isFocusVisibleWithin, focusProps: focusWithinProps } = createFocusRing({\n within: true,\n });\n\n // Reactive accessors\n const isExpanded = () => context.state.isExpanded();\n const isDisabled = () => context.isDisabled();\n\n const renderValues = createMemo<DisclosureRenderProps>(() => ({\n isExpanded: isExpanded(),\n isFocusVisibleWithin: isFocusVisibleWithin(),\n isDisabled: isDisabled(),\n state: context.state,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DisclosurePanel\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() =>\n filterDOMProps(rest as Record<string, unknown>, { global: true }),\n );\n\n // Get panelProps from the getter each time - this ensures reactivity\n // IMPORTANT: Call the getter fresh each render to get updated hidden attribute, etc.\n const getPanelProps = () => {\n const { ref: _ref, ...rest } = context.disclosureAria.panelProps as Record<string, unknown>;\n return rest;\n };\n\n return (\n <div\n {...mergeProps(\n domProps() as Record<string, unknown>,\n focusWithinProps as Record<string, unknown>,\n )}\n {...getPanelProps()}\n ref={(el) => {\n panelRefSetter?.(el);\n assignRef(local.ref, el);\n }}\n role={local.role ?? \"group\"}\n class={renderProps.class()}\n style={renderProps.style()}\n data-expanded={dataAttr(isExpanded())}\n data-focus-visible-within={dataAttr(isFocusVisibleWithin())}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n\nexport type { DisclosureState, DisclosureGroupState };\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragAndDrop.d.ts","sourceRoot":"","sources":["../src/DragAndDrop.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,QAAQ,EAAyC,MAAM,UAAU,CAAC;AAC1F,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,UAAU,EACV,cAAc,EACd,GAAG,EACJ,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,SAAS,EAGf,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC7C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;QAC3B,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;KAChD,CAAC;CACH;AAED,eAAO,MAAM,kBAAkB,qDAA6C,CAAC;AAE7E,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,wBAAwB,KAAK,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5E,KAAK,CAAC,EAAE,mBAAmB,CAAC,wBAAwB,CAAC,CAAC;IACtD,KAAK,CAAC,EAAE,eAAe,CAAC,wBAAwB,CAAC,CAAC;CACnD;AAED,UAAU,yBAAyB;IACjC,MAAM,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,GAAG,CAAC,OAAO,CAAC;CACpD;AAED,eAAO,MAAM,oBAAoB,8DAAwD,CAAC;
|
|
1
|
+
{"version":3,"file":"DragAndDrop.d.ts","sourceRoot":"","sources":["../src/DragAndDrop.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { dataAttr, useRenderProps } from "./utils.js";
|
|
2
|
+
import { className, createComponent, effect, getNextElement, insert, setAttribute, style, template } from "solid-js/web";
|
|
3
|
+
import { createContext, createMemo, useContext } from "solid-js";
|
|
4
|
+
//#region src/DragAndDrop.tsx
|
|
5
|
+
/**
|
|
6
|
+
* Drag and drop composition helpers for solidaria-components.
|
|
7
|
+
*
|
|
8
|
+
* Compatibility target: react-aria-components DragAndDrop exports.
|
|
9
|
+
*/
|
|
10
|
+
var _tmpl$ = /*#__PURE__*/ template(`<div role=option>`);
|
|
11
|
+
const DragAndDropContext = createContext({});
|
|
12
|
+
const DropIndicatorContext = createContext(null);
|
|
13
|
+
function DefaultDropIndicator(props) {
|
|
14
|
+
const dnd = useContext(DragAndDropContext);
|
|
15
|
+
const isDropTarget = createMemo(() => {
|
|
16
|
+
const target = props.target;
|
|
17
|
+
return dnd.dropState?.isDropTarget?.(target) ?? false;
|
|
18
|
+
});
|
|
19
|
+
const renderProps = useRenderProps({
|
|
20
|
+
get children() {
|
|
21
|
+
return props.children;
|
|
22
|
+
},
|
|
23
|
+
class: props.class,
|
|
24
|
+
style: props.style,
|
|
25
|
+
defaultClassName: "solidaria-DropIndicator"
|
|
26
|
+
}, () => ({ isDropTarget: isDropTarget() }));
|
|
27
|
+
return (() => {
|
|
28
|
+
var _el$ = getNextElement(_tmpl$);
|
|
29
|
+
setAttribute(_el$, "aria-disabled", true);
|
|
30
|
+
insert(_el$, () => renderProps.renderChildren());
|
|
31
|
+
effect((_p$) => {
|
|
32
|
+
var _v$ = renderProps.class(), _v$2 = renderProps.style(), _v$3 = dataAttr(isDropTarget());
|
|
33
|
+
_v$ !== _p$.e && className(_el$, _p$.e = _v$);
|
|
34
|
+
_p$.t = style(_el$, _v$2, _p$.t);
|
|
35
|
+
_v$3 !== _p$.a && setAttribute(_el$, "data-drop-target", _p$.a = _v$3);
|
|
36
|
+
return _p$;
|
|
37
|
+
}, {
|
|
38
|
+
e: void 0,
|
|
39
|
+
t: void 0,
|
|
40
|
+
a: void 0
|
|
41
|
+
});
|
|
42
|
+
return _el$;
|
|
43
|
+
})();
|
|
44
|
+
}
|
|
45
|
+
function DropIndicator(props) {
|
|
46
|
+
const context = useContext(DropIndicatorContext);
|
|
47
|
+
if (context) return context.render(props);
|
|
48
|
+
return createComponent(DefaultDropIndicator, props);
|
|
49
|
+
}
|
|
50
|
+
function useRenderDropIndicator(hooksOrDropState, maybeDropState) {
|
|
51
|
+
const looksLikeDropState = (value) => {
|
|
52
|
+
return Boolean(value && typeof value === "object" && ("isDropTarget" in value || "target" in value));
|
|
53
|
+
};
|
|
54
|
+
const dragAndDropHooks = looksLikeDropState(hooksOrDropState) ? void 0 : hooksOrDropState;
|
|
55
|
+
const dropState = looksLikeDropState(hooksOrDropState) ? hooksOrDropState : maybeDropState;
|
|
56
|
+
if (dragAndDropHooks && !dragAndDropHooks.useDropIndicator) return void 0;
|
|
57
|
+
if (!dropState && !dragAndDropHooks?.renderDropIndicator) return void 0;
|
|
58
|
+
const targetsEqual = (a, b) => {
|
|
59
|
+
if (!a) return false;
|
|
60
|
+
if (a.type !== b.type) return false;
|
|
61
|
+
if (a.type === "root" && b.type === "root") return true;
|
|
62
|
+
if (a.type !== "item" || b.type !== "item") return false;
|
|
63
|
+
return a.key === b.key && a.dropPosition === b.dropPosition;
|
|
64
|
+
};
|
|
65
|
+
return (target) => {
|
|
66
|
+
const stateIsDropTarget = dropState?.isDropTarget;
|
|
67
|
+
const isTarget = typeof stateIsDropTarget === "function" ? stateIsDropTarget(target) : stateIsDropTarget === true ? targetsEqual(dropState?.target, target) : false;
|
|
68
|
+
const isVirtualDragging = dragAndDropHooks?.isVirtualDragging?.() ?? false;
|
|
69
|
+
if (!isTarget && !isVirtualDragging) return void 0;
|
|
70
|
+
return dragAndDropHooks?.renderDropIndicator ? dragAndDropHooks.renderDropIndicator(target) : createComponent(DropIndicator, { target });
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function resolveKey(value) {
|
|
74
|
+
if (typeof value === "function") return value();
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
function getAfterDropNormalizedKey(target, collection) {
|
|
78
|
+
if (target.dropPosition !== "after" || !collection) return target.key;
|
|
79
|
+
let nextKey = collection.getKeyAfter(target.key);
|
|
80
|
+
let lastDescendantKey = null;
|
|
81
|
+
if (nextKey != null) {
|
|
82
|
+
const targetLevel = collection.getItem(target.key)?.level ?? 0;
|
|
83
|
+
while (nextKey != null) {
|
|
84
|
+
const node = collection.getItem(nextKey);
|
|
85
|
+
if (!node) break;
|
|
86
|
+
if (node.type && node.type !== "item") {
|
|
87
|
+
nextKey = collection.getKeyAfter(nextKey);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if ((node.level ?? 0) <= targetLevel) break;
|
|
91
|
+
lastDescendantKey = nextKey;
|
|
92
|
+
nextKey = collection.getKeyAfter(nextKey);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return nextKey ?? lastDescendantKey ?? target.key;
|
|
96
|
+
}
|
|
97
|
+
function getNormalizedDropTargetKey(target, collection) {
|
|
98
|
+
if (!target || target.type !== "item") return null;
|
|
99
|
+
return getAfterDropNormalizedKey(target, collection);
|
|
100
|
+
}
|
|
101
|
+
function useDndPersistedKeys(selectionManager, dragAndDropHooks, dropState, collection) {
|
|
102
|
+
return createMemo(() => {
|
|
103
|
+
const focusedKey = resolveKey(selectionManager?.focusedKey);
|
|
104
|
+
let dropTargetKey;
|
|
105
|
+
if (dragAndDropHooks?.isVirtualDragging?.() && dropState?.target?.type === "item") dropTargetKey = getNormalizedDropTargetKey(dropState.target, collection) ?? void 0;
|
|
106
|
+
const keys = /* @__PURE__ */ new Set();
|
|
107
|
+
if (focusedKey != null) keys.add(focusedKey);
|
|
108
|
+
if (dropTargetKey != null) keys.add(dropTargetKey);
|
|
109
|
+
return keys;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, itemCount, layoutInfoProvider, maxExtraItems = 60, options) {
|
|
113
|
+
const validPersistedIndexes = Array.from(new Set(persistedIndexes.filter((index) => index >= 0 && index < itemCount))).sort((a, b) => a - b);
|
|
114
|
+
const forceIndexes = Array.from(new Set((options?.forceIncludeIndexes ?? []).filter((index) => index >= 0 && index < itemCount)));
|
|
115
|
+
if (itemCount <= 0) return baseRange;
|
|
116
|
+
if (validPersistedIndexes.length === 0 && forceIndexes.length === 0) return baseRange;
|
|
117
|
+
const baseSpan = Math.max(1, baseRange.end - baseRange.start);
|
|
118
|
+
const maxSpan = Math.max(baseSpan, baseSpan + maxExtraItems);
|
|
119
|
+
let start = baseRange.start;
|
|
120
|
+
let end = baseRange.end;
|
|
121
|
+
const distanceToBaseRange = (index) => {
|
|
122
|
+
if (index < baseRange.start) return baseRange.start - index;
|
|
123
|
+
if (index >= baseRange.end) return index - (baseRange.end - 1);
|
|
124
|
+
return 0;
|
|
125
|
+
};
|
|
126
|
+
for (const index of validPersistedIndexes.sort((a, b) => distanceToBaseRange(a) - distanceToBaseRange(b))) {
|
|
127
|
+
const nextStart = Math.min(start, index);
|
|
128
|
+
const nextEnd = Math.max(end, index + 1);
|
|
129
|
+
if (nextEnd - nextStart <= maxSpan) {
|
|
130
|
+
start = nextStart;
|
|
131
|
+
end = nextEnd;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (forceIndexes.length > 0) {
|
|
135
|
+
const forceMaxSpan = Math.max(maxSpan, options?.forceIncludeMaxSpan ?? Math.max(maxSpan, 300));
|
|
136
|
+
for (const index of forceIndexes) {
|
|
137
|
+
const nextStart = Math.min(start, index);
|
|
138
|
+
const nextEnd = Math.max(end, index + 1);
|
|
139
|
+
if (nextEnd - nextStart <= forceMaxSpan) {
|
|
140
|
+
start = nextStart;
|
|
141
|
+
end = nextEnd;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (options?.fallbackToForcedWindow !== false) {
|
|
145
|
+
const missingForced = forceIndexes.filter((index) => index < start || index >= end);
|
|
146
|
+
if (missingForced.length > 0) {
|
|
147
|
+
const nearestForced = missingForced[0];
|
|
148
|
+
const forceMaxSpan = Math.max(maxSpan, options?.forceIncludeMaxSpan ?? Math.max(maxSpan, 300));
|
|
149
|
+
const windowSpan = Math.min(itemCount, Math.max(baseSpan, forceMaxSpan));
|
|
150
|
+
const centeredStart = Math.max(0, Math.min(itemCount - windowSpan, nearestForced - Math.floor(windowSpan / 2)));
|
|
151
|
+
start = centeredStart;
|
|
152
|
+
end = Math.min(itemCount, centeredStart + windowSpan);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (start === baseRange.start && end === baseRange.end) return baseRange;
|
|
157
|
+
const startRect = start > 0 ? layoutInfoProvider.getLayoutInfo(start).rect : {
|
|
158
|
+
y: 0,
|
|
159
|
+
height: 0
|
|
160
|
+
};
|
|
161
|
+
const lastRect = layoutInfoProvider.getLayoutInfo(itemCount - 1).rect;
|
|
162
|
+
const endRect = end > 0 ? layoutInfoProvider.getLayoutInfo(end - 1).rect : {
|
|
163
|
+
y: 0,
|
|
164
|
+
height: 0
|
|
165
|
+
};
|
|
166
|
+
return {
|
|
167
|
+
start,
|
|
168
|
+
end,
|
|
169
|
+
offsetTop: Math.max(0, startRect.y),
|
|
170
|
+
offsetBottom: Math.max(0, lastRect.y + lastRect.height - (endRect.y + endRect.height))
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//#endregion
|
|
174
|
+
export { DragAndDropContext, DropIndicator, DropIndicatorContext, getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator };
|
|
175
|
+
|
|
176
|
+
//# sourceMappingURL=DragAndDrop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DragAndDrop.js","names":["JSX","Accessor","createContext","createMemo","useContext","DragTypes","DropOperation","DropTarget","ItemDropTarget","Key","DragAndDropHooks","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","dataAttr","DragAndDropContextValue","dragAndDropHooks","dragState","dropState","target","isDropTarget","DragAndDropContext","DropIndicatorRenderProps","DropIndicatorProps","children","Element","props","class","style","DropIndicatorContextValue","render","DropIndicatorContext","DefaultDropIndicator","dnd","renderProps","defaultClassName","_el$","_$getNextElement","_tmpl$","_$setAttribute","_$insert","renderChildren","_$effect","_p$","_v$","_v$2","_v$3","e","_$className","t","_$style","a","undefined","DropIndicator","context","_$createComponent","useRenderDropIndicator","hooksOrDropState","Pick","maybeDropState","looksLikeDropState","value","Boolean","Record","useDropIndicator","renderDropIndicator","targetsEqual","b","type","key","dropPosition","stateIsDropTarget","isTarget","isVirtualDragging","KeyAccessor","SelectionManagerLike","focusedKey","CollectionLike","getKeyAfter","getItem","level","DroppableCollectionStateLike","VirtualRangeLike","start","end","offsetTop","offsetBottom","LayoutInfoProviderLike","getLayoutInfo","index","rect","y","height","resolveKey","getAfterDropNormalizedKey","collection","nextKey","lastDescendantKey","targetLevel","node","getNormalizedDropTargetKey","useDndPersistedKeys","selectionManager","Set","dropTargetKey","keys","add","mergePersistedKeysIntoVirtualRange","baseRange","persistedIndexes","itemCount","layoutInfoProvider","maxExtraItems","options","forceIncludeIndexes","forceIncludeMaxSpan","fallbackToForcedWindow","validPersistedIndexes","Array","from","filter","sort","forceIndexes","length","baseSpan","Math","max","maxSpan","distanceToBaseRange","nextStart","min","nextEnd","forceMaxSpan","missingForced","nearestForced","windowSpan","centeredStart","floor","startRect","lastRect","endRect","DropTargetDelegate","getDropTargetFromPoint","x","isValidDropTarget","getDropOperation","types","allowedOperations"],"sources":["../src/DragAndDrop.tsx"],"sourcesContent":["/**\n * Drag and drop composition helpers for solidaria-components.\n *\n * Compatibility target: react-aria-components DragAndDrop exports.\n */\n\nimport { type JSX, type Accessor, createContext, createMemo, useContext } from \"solid-js\";\nimport type {\n DragTypes,\n DropOperation,\n DropTarget,\n ItemDropTarget,\n Key,\n} from \"@proyecto-viviana/solid-stately\";\nimport type { DragAndDropHooks } from \"./useDragAndDrop\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n dataAttr,\n} from \"./utils\";\n\nexport interface DragAndDropContextValue {\n dragAndDropHooks?: DragAndDropHooks<unknown>;\n dragState?: unknown;\n dropState?: {\n target?: DropTarget | null;\n isDropTarget?: (target: DropTarget) => boolean;\n };\n}\n\nexport const DragAndDropContext = createContext<DragAndDropContextValue>({});\n\nexport interface DropIndicatorRenderProps {\n isDropTarget: boolean;\n}\n\nexport interface DropIndicatorProps extends SlotProps {\n target: ItemDropTarget;\n children?: JSX.Element | ((props: DropIndicatorRenderProps) => JSX.Element);\n class?: ClassNameOrFunction<DropIndicatorRenderProps>;\n style?: StyleOrFunction<DropIndicatorRenderProps>;\n}\n\ninterface DropIndicatorContextValue {\n render: (props: DropIndicatorProps) => JSX.Element;\n}\n\nexport const DropIndicatorContext = createContext<DropIndicatorContextValue | null>(null);\n\nfunction DefaultDropIndicator(props: DropIndicatorProps): JSX.Element {\n const dnd = useContext(DragAndDropContext);\n const isDropTarget = createMemo(() => {\n const target = props.target;\n return dnd.dropState?.isDropTarget?.(target) ?? false;\n });\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: props.class,\n style: props.style,\n defaultClassName: \"solidaria-DropIndicator\",\n },\n () => ({\n isDropTarget: isDropTarget(),\n }),\n );\n\n return (\n <div\n role=\"option\"\n aria-disabled={true}\n class={renderProps.class()}\n style={renderProps.style()}\n data-drop-target={dataAttr(isDropTarget())}\n >\n {renderProps.renderChildren()}\n </div>\n );\n}\n\nexport function DropIndicator(props: DropIndicatorProps): JSX.Element {\n const context = useContext(DropIndicatorContext);\n if (context) return context.render(props);\n return <DefaultDropIndicator {...props} />;\n}\n\nexport function useRenderDropIndicator(\n hooksOrDropState?:\n | Pick<\n DragAndDropHooks<unknown>,\n \"renderDropIndicator\" | \"isVirtualDragging\" | \"useDropIndicator\"\n >\n | {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n },\n maybeDropState?: {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n },\n): ((target: ItemDropTarget) => JSX.Element | undefined) | undefined {\n const looksLikeDropState = (\n value: unknown,\n ): value is {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n } => {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n (\"isDropTarget\" in (value as Record<string, unknown>) ||\n \"target\" in (value as Record<string, unknown>)),\n );\n };\n\n const dragAndDropHooks = looksLikeDropState(hooksOrDropState) ? undefined : hooksOrDropState;\n const dropState = looksLikeDropState(hooksOrDropState) ? hooksOrDropState : maybeDropState;\n\n // RAC only renders collection indicators when drop hooks are present.\n if (dragAndDropHooks && !dragAndDropHooks.useDropIndicator) return undefined;\n if (!dropState && !dragAndDropHooks?.renderDropIndicator) return undefined;\n\n const targetsEqual = (a: DropTarget | null | undefined, b: DropTarget): boolean => {\n if (!a) return false;\n if (a.type !== b.type) return false;\n if (a.type === \"root\" && b.type === \"root\") return true;\n if (a.type !== \"item\" || b.type !== \"item\") return false;\n return a.key === b.key && a.dropPosition === b.dropPosition;\n };\n\n return (target: ItemDropTarget) => {\n const stateIsDropTarget = dropState?.isDropTarget;\n const isTarget =\n typeof stateIsDropTarget === \"function\"\n ? stateIsDropTarget(target)\n : stateIsDropTarget === true\n ? targetsEqual(dropState?.target, target)\n : false;\n const isVirtualDragging = dragAndDropHooks?.isVirtualDragging?.() ?? false;\n if (!isTarget && !isVirtualDragging) return undefined;\n return dragAndDropHooks?.renderDropIndicator ? (\n dragAndDropHooks.renderDropIndicator(target)\n ) : (\n <DropIndicator target={target} />\n );\n };\n}\n\ntype KeyAccessor = Key | null | undefined | Accessor<Key | null | undefined>;\n\ninterface SelectionManagerLike {\n focusedKey?: KeyAccessor;\n}\n\ninterface CollectionLike {\n getKeyAfter: (key: Key) => Key | null;\n getItem: (key: Key) => { level?: number; type?: string } | null | undefined;\n}\n\ninterface DroppableCollectionStateLike {\n target?: DropTarget | null;\n}\n\nexport interface VirtualRangeLike {\n start: number;\n end: number;\n offsetTop: number;\n offsetBottom: number;\n}\n\nexport interface LayoutInfoProviderLike {\n getLayoutInfo: (index: number) => { rect: { y: number; height: number } };\n}\n\nfunction resolveKey(value: KeyAccessor): Key | null | undefined {\n if (typeof value === \"function\") {\n return (value as Accessor<Key | null | undefined>)();\n }\n return value;\n}\n\nfunction getAfterDropNormalizedKey(target: ItemDropTarget, collection?: CollectionLike): Key {\n if (target.dropPosition !== \"after\" || !collection) return target.key;\n\n let nextKey = collection.getKeyAfter(target.key);\n let lastDescendantKey: Key | null = null;\n\n if (nextKey != null) {\n const targetLevel = collection.getItem(target.key)?.level ?? 0;\n while (nextKey != null) {\n const node = collection.getItem(nextKey);\n if (!node) break;\n if (node.type && node.type !== \"item\") {\n nextKey = collection.getKeyAfter(nextKey);\n continue;\n }\n if ((node.level ?? 0) <= targetLevel) break;\n lastDescendantKey = nextKey;\n nextKey = collection.getKeyAfter(nextKey);\n }\n }\n\n return nextKey ?? lastDescendantKey ?? target.key;\n}\n\nexport function getNormalizedDropTargetKey(\n target: DropTarget | null | undefined,\n collection?: CollectionLike,\n): Key | null {\n if (!target || target.type !== \"item\") return null;\n return getAfterDropNormalizedKey(target, collection);\n}\n\nexport function useDndPersistedKeys(\n selectionManager: SelectionManagerLike | null | undefined,\n dragAndDropHooks?: Pick<DragAndDropHooks<unknown>, \"isVirtualDragging\">,\n dropState?: DroppableCollectionStateLike,\n collection?: CollectionLike,\n): Accessor<Set<Key>> {\n return createMemo(() => {\n const focusedKey = resolveKey(selectionManager?.focusedKey);\n let dropTargetKey: Key | null | undefined;\n\n if (dragAndDropHooks?.isVirtualDragging?.() && dropState?.target?.type === \"item\") {\n dropTargetKey = getNormalizedDropTargetKey(dropState.target, collection) ?? undefined;\n }\n\n const keys = new Set<Key>();\n if (focusedKey != null) keys.add(focusedKey);\n if (dropTargetKey != null) keys.add(dropTargetKey);\n return keys;\n });\n}\n\nexport function mergePersistedKeysIntoVirtualRange(\n baseRange: VirtualRangeLike,\n persistedIndexes: number[],\n itemCount: number,\n layoutInfoProvider: LayoutInfoProviderLike,\n maxExtraItems = 60,\n options?: {\n forceIncludeIndexes?: number[];\n forceIncludeMaxSpan?: number;\n fallbackToForcedWindow?: boolean;\n },\n): VirtualRangeLike {\n const validPersistedIndexes = Array.from(\n new Set(persistedIndexes.filter((index) => index >= 0 && index < itemCount)),\n ).sort((a, b) => a - b);\n const forceIndexes = Array.from(\n new Set(\n (options?.forceIncludeIndexes ?? []).filter((index) => index >= 0 && index < itemCount),\n ),\n );\n\n if (itemCount <= 0) return baseRange;\n if (validPersistedIndexes.length === 0 && forceIndexes.length === 0) return baseRange;\n\n const baseSpan = Math.max(1, baseRange.end - baseRange.start);\n const maxSpan = Math.max(baseSpan, baseSpan + maxExtraItems);\n\n let start = baseRange.start;\n let end = baseRange.end;\n\n const distanceToBaseRange = (index: number): number => {\n if (index < baseRange.start) return baseRange.start - index;\n if (index >= baseRange.end) return index - (baseRange.end - 1);\n return 0;\n };\n\n for (const index of validPersistedIndexes.sort(\n (a, b) => distanceToBaseRange(a) - distanceToBaseRange(b),\n )) {\n const nextStart = Math.min(start, index);\n const nextEnd = Math.max(end, index + 1);\n if (nextEnd - nextStart <= maxSpan) {\n start = nextStart;\n end = nextEnd;\n }\n }\n\n if (forceIndexes.length > 0) {\n const forceMaxSpan = Math.max(maxSpan, options?.forceIncludeMaxSpan ?? Math.max(maxSpan, 300));\n for (const index of forceIndexes) {\n const nextStart = Math.min(start, index);\n const nextEnd = Math.max(end, index + 1);\n if (nextEnd - nextStart <= forceMaxSpan) {\n start = nextStart;\n end = nextEnd;\n }\n }\n\n if (options?.fallbackToForcedWindow !== false) {\n const missingForced = forceIndexes.filter((index) => index < start || index >= end);\n if (missingForced.length > 0) {\n const nearestForced = missingForced[0];\n const forceMaxSpan = Math.max(\n maxSpan,\n options?.forceIncludeMaxSpan ?? Math.max(maxSpan, 300),\n );\n const windowSpan = Math.min(itemCount, Math.max(baseSpan, forceMaxSpan));\n const centeredStart = Math.max(\n 0,\n Math.min(itemCount - windowSpan, nearestForced - Math.floor(windowSpan / 2)),\n );\n start = centeredStart;\n end = Math.min(itemCount, centeredStart + windowSpan);\n }\n }\n }\n\n if (start === baseRange.start && end === baseRange.end) return baseRange;\n\n const startRect = start > 0 ? layoutInfoProvider.getLayoutInfo(start).rect : { y: 0, height: 0 };\n const lastRect = layoutInfoProvider.getLayoutInfo(itemCount - 1).rect;\n const endRect = end > 0 ? layoutInfoProvider.getLayoutInfo(end - 1).rect : { y: 0, height: 0 };\n\n return {\n start,\n end,\n offsetTop: Math.max(0, startRect.y),\n offsetBottom: Math.max(0, lastRect.y + lastRect.height - (endRect.y + endRect.height)),\n };\n}\n\nexport type DropTargetDelegate = {\n getDropTargetFromPoint: (\n x: number,\n y: number,\n isValidDropTarget: (target: DropTarget) => boolean,\n ) => DropTarget | null;\n getDropOperation: (\n target: DropTarget,\n types: DragTypes,\n allowedOperations: DropOperation[],\n ) => DropOperation;\n};\n"],"mappings":"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"}
|