@proyecto-viviana/solidaria-components 0.5.0 → 0.7.0-rc.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/LICENSE-APACHE-2.0 +201 -0
- package/NOTICE +91 -0
- package/README.md +4 -7
- package/dist/ActionBar.d.ts +2 -10
- package/dist/ActionBar.d.ts.map +1 -1
- package/dist/ActionBar.js +95 -59
- package/dist/ActionBar.js.map +1 -1
- package/dist/ActionBar.jsx +42 -15
- package/dist/ActionBar.jsx.map +1 -1
- package/dist/ActionGroup.d.ts +1 -12
- package/dist/ActionGroup.d.ts.map +1 -1
- package/dist/ActionGroup.js +66 -44
- package/dist/ActionGroup.js.map +1 -1
- package/dist/ActionGroup.jsx +25 -10
- package/dist/ActionGroup.jsx.map +1 -1
- package/dist/Alert.d.ts +4 -1
- package/dist/Alert.d.ts.map +1 -1
- package/dist/Alert.js +25 -17
- package/dist/Alert.js.map +1 -1
- package/dist/Alert.jsx +9 -5
- package/dist/Alert.jsx.map +1 -1
- package/dist/Autocomplete.d.ts +2 -9
- package/dist/Autocomplete.d.ts.map +1 -1
- package/dist/Autocomplete.js +18 -5
- package/dist/Autocomplete.js.map +1 -1
- package/dist/Autocomplete.jsx +20 -7
- package/dist/Autocomplete.jsx.map +1 -1
- package/dist/Breadcrumbs.d.ts +2 -7
- package/dist/Breadcrumbs.d.ts.map +1 -1
- package/dist/Breadcrumbs.js +71 -51
- package/dist/Breadcrumbs.js.map +1 -1
- package/dist/Breadcrumbs.jsx +25 -12
- package/dist/Breadcrumbs.jsx.map +1 -1
- package/dist/Button.d.ts +1 -7
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +125 -72
- package/dist/Button.js.map +1 -1
- package/dist/Button.jsx +105 -43
- package/dist/Button.jsx.map +1 -1
- package/dist/Calendar.d.ts +1 -7
- package/dist/Calendar.d.ts.map +1 -1
- package/dist/Calendar.js +297 -221
- package/dist/Calendar.js.map +1 -1
- package/dist/Calendar.jsx +52 -32
- package/dist/Calendar.jsx.map +1 -1
- package/dist/CalendarPicker.d.ts +1 -10
- package/dist/CalendarPicker.d.ts.map +1 -1
- package/dist/CalendarPicker.js +12 -0
- package/dist/CalendarPicker.js.map +1 -1
- package/dist/CalendarPicker.jsx +12 -0
- package/dist/CalendarPicker.jsx.map +1 -1
- package/dist/Checkbox.d.ts +2 -7
- package/dist/Checkbox.d.ts.map +1 -1
- package/dist/Checkbox.js +332 -270
- package/dist/Checkbox.js.map +1 -1
- package/dist/Checkbox.jsx +70 -77
- package/dist/Checkbox.jsx.map +1 -1
- package/dist/Collection.d.ts +33 -7
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +128 -74
- package/dist/Collection.js.map +1 -1
- package/dist/Collection.jsx +46 -7
- package/dist/Collection.jsx.map +1 -1
- package/dist/Color.d.ts +15 -20
- package/dist/Color.d.ts.map +1 -1
- package/dist/Color.js +572 -334
- package/dist/Color.js.map +1 -1
- package/dist/Color.jsx +205 -85
- package/dist/Color.jsx.map +1 -1
- package/dist/ColorEditor.d.ts +3 -1
- package/dist/ColorEditor.d.ts.map +1 -1
- package/dist/ColorEditor.js +147 -124
- package/dist/ColorEditor.js.map +1 -1
- package/dist/ColorEditor.jsx +4 -1
- package/dist/ColorEditor.jsx.map +1 -1
- package/dist/ComboBox.d.ts +31 -10
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +539 -274
- package/dist/ComboBox.js.map +1 -1
- package/dist/ComboBox.jsx +213 -70
- package/dist/ComboBox.jsx.map +1 -1
- package/dist/ContextualHelpTrigger.d.ts +1 -7
- package/dist/ContextualHelpTrigger.d.ts.map +1 -1
- package/dist/ContextualHelpTrigger.js +102 -72
- package/dist/ContextualHelpTrigger.js.map +1 -1
- package/dist/ContextualHelpTrigger.jsx +36 -16
- package/dist/ContextualHelpTrigger.jsx.map +1 -1
- package/dist/DateField.d.ts +2 -7
- package/dist/DateField.d.ts.map +1 -1
- package/dist/DateField.js +0 -2
- package/dist/DateField.jsx +0 -2
- package/dist/DateField2.js +194 -179
- package/dist/DateField2.js.map +1 -1
- package/dist/DateField2.jsx +58 -55
- package/dist/DateField2.jsx.map +1 -1
- package/dist/DatePicker.d.ts +7 -7
- package/dist/DatePicker.d.ts.map +1 -1
- package/dist/DatePicker.js +2 -2
- package/dist/DatePicker.jsx +2 -2
- package/dist/DatePicker2.js +357 -435
- package/dist/DatePicker2.js.map +1 -1
- package/dist/DatePicker2.jsx +109 -178
- package/dist/DatePicker2.jsx.map +1 -1
- package/dist/DateRangePickerContext.d.ts +7 -0
- package/dist/DateRangePickerContext.d.ts.map +1 -1
- package/dist/Dialog.d.ts +4 -9
- package/dist/Dialog.d.ts.map +1 -1
- package/dist/Dialog.js +168 -101
- package/dist/Dialog.js.map +1 -1
- package/dist/Dialog.jsx +75 -27
- package/dist/Dialog.jsx.map +1 -1
- package/dist/Disclosure.d.ts +1 -9
- package/dist/Disclosure.d.ts.map +1 -1
- package/dist/Disclosure.js +121 -79
- package/dist/Disclosure.js.map +1 -1
- package/dist/Disclosure.jsx +32 -19
- package/dist/Disclosure.jsx.map +1 -1
- package/dist/DragAndDrop.d.ts +9 -6
- package/dist/DragAndDrop.d.ts.map +1 -1
- package/dist/DragAndDrop.js +37 -22
- package/dist/DragAndDrop.js.map +1 -1
- package/dist/DragAndDrop.jsx +20 -4
- package/dist/DragAndDrop.jsx.map +1 -1
- package/dist/DragPreview.d.ts +1 -1
- package/dist/DragPreview.d.ts.map +1 -1
- package/dist/DropZone.d.ts +1 -7
- package/dist/DropZone.d.ts.map +1 -1
- package/dist/DropZone.js +74 -40
- package/dist/DropZone.js.map +1 -1
- package/dist/DropZone.jsx +24 -8
- package/dist/DropZone.jsx.map +1 -1
- package/dist/ElementTag.d.ts +9 -20
- package/dist/ElementTag.d.ts.map +1 -1
- package/dist/ElementTag.js +8 -210
- package/dist/ElementTag.js.map +1 -1
- package/dist/ElementTag.jsx +8 -57
- package/dist/ElementTag.jsx.map +1 -1
- package/dist/FieldError.d.ts +8 -7
- package/dist/FieldError.d.ts.map +1 -1
- package/dist/FieldError.js +33 -13
- package/dist/FieldError.js.map +1 -1
- package/dist/FieldError.jsx +20 -5
- package/dist/FieldError.jsx.map +1 -1
- package/dist/FileTrigger.d.ts +1 -7
- package/dist/FileTrigger.d.ts.map +1 -1
- package/dist/FileTrigger.js +30 -12
- package/dist/FileTrigger.js.map +1 -1
- package/dist/FileTrigger.jsx +15 -2
- package/dist/FileTrigger.jsx.map +1 -1
- package/dist/Focusable.d.ts +2 -8
- package/dist/Focusable.d.ts.map +1 -1
- package/dist/Focusable.js +23 -6
- package/dist/Focusable.js.map +1 -1
- package/dist/Focusable.jsx +22 -5
- package/dist/Focusable.jsx.map +1 -1
- package/dist/Form.d.ts +9 -8
- package/dist/Form.d.ts.map +1 -1
- package/dist/Form.js +66 -43
- package/dist/Form.js.map +1 -1
- package/dist/Form.jsx +36 -16
- package/dist/Form.jsx.map +1 -1
- package/dist/GridList.d.ts +5 -10
- package/dist/GridList.d.ts.map +1 -1
- package/dist/GridList.js +372 -243
- package/dist/GridList.js.map +1 -1
- package/dist/GridList.jsx +177 -99
- package/dist/GridList.jsx.map +1 -1
- package/dist/HiddenDateInput.d.ts +1 -7
- package/dist/HiddenDateInput.d.ts.map +1 -1
- package/dist/Icon.d.ts +4 -1
- package/dist/Icon.d.ts.map +1 -1
- package/dist/Icon.js +41 -37
- package/dist/Icon.js.map +1 -1
- package/dist/Icon.jsx +7 -3
- package/dist/Icon.jsx.map +1 -1
- package/dist/Keyboard.d.ts +1 -7
- package/dist/Keyboard.d.ts.map +1 -1
- package/dist/Keyboard.js +24 -11
- package/dist/Keyboard.js.map +1 -1
- package/dist/Keyboard.jsx +15 -2
- package/dist/Keyboard.jsx.map +1 -1
- package/dist/Label.d.ts +20 -0
- package/dist/Label.d.ts.map +1 -0
- package/dist/Label.js +60 -0
- package/dist/Label.js.map +1 -0
- package/dist/Label.jsx +47 -0
- package/dist/Label.jsx.map +1 -0
- package/dist/Landmark.d.ts +4 -1
- package/dist/Landmark.d.ts.map +1 -1
- package/dist/Landmark.js +10 -4
- package/dist/Landmark.js.map +1 -1
- package/dist/Landmark.jsx +5 -1
- package/dist/Landmark.jsx.map +1 -1
- package/dist/Link.d.ts +2 -7
- package/dist/Link.d.ts.map +1 -1
- package/dist/Link.js +56 -36
- package/dist/Link.js.map +1 -1
- package/dist/Link.jsx +52 -10
- package/dist/Link.jsx.map +1 -1
- package/dist/ListBox.d.ts +17 -13
- package/dist/ListBox.d.ts.map +1 -1
- package/dist/ListBox.js +647 -348
- package/dist/ListBox.js.map +1 -1
- package/dist/ListBox.jsx +339 -236
- package/dist/ListBox.jsx.map +1 -1
- package/dist/ListDropTargetDelegate.d.ts +3 -0
- package/dist/ListDropTargetDelegate.d.ts.map +1 -1
- package/dist/Menu.d.ts +39 -30
- package/dist/Menu.d.ts.map +1 -1
- package/dist/Menu.js +547 -368
- package/dist/Menu.js.map +1 -1
- package/dist/Menu.jsx +328 -230
- package/dist/Menu.jsx.map +1 -1
- package/dist/Meter.d.ts +6 -13
- package/dist/Meter.d.ts.map +1 -1
- package/dist/Meter.js +55 -18
- package/dist/Meter.js.map +1 -1
- package/dist/Meter.jsx +33 -8
- package/dist/Meter.jsx.map +1 -1
- package/dist/Modal.d.ts +1 -7
- package/dist/Modal.d.ts.map +1 -1
- package/dist/Modal.js +104 -56
- package/dist/Modal.js.map +1 -1
- package/dist/Modal.jsx +68 -38
- package/dist/Modal.jsx.map +1 -1
- package/dist/NumberField.d.ts +4 -7
- package/dist/NumberField.d.ts.map +1 -1
- package/dist/NumberField.js +243 -124
- package/dist/NumberField.js.map +1 -1
- package/dist/NumberField.jsx +115 -26
- package/dist/NumberField.jsx.map +1 -1
- package/dist/Popover.d.ts +15 -7
- package/dist/Popover.d.ts.map +1 -1
- package/dist/Popover.js +370 -181
- package/dist/Popover.js.map +1 -1
- package/dist/Popover.jsx +215 -82
- package/dist/Popover.jsx.map +1 -1
- package/dist/Pressable.d.ts +2 -8
- package/dist/Pressable.d.ts.map +1 -1
- package/dist/Pressable.js +23 -6
- package/dist/Pressable.js.map +1 -1
- package/dist/Pressable.jsx +22 -5
- package/dist/Pressable.jsx.map +1 -1
- package/dist/PreviewTrigger.d.ts +24 -0
- package/dist/PreviewTrigger.d.ts.map +1 -0
- package/dist/PreviewTrigger.js +128 -0
- package/dist/PreviewTrigger.js.map +1 -0
- package/dist/PreviewTrigger.jsx +117 -0
- package/dist/PreviewTrigger.jsx.map +1 -0
- package/dist/ProgressBar.d.ts +1 -7
- package/dist/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar.js +34 -14
- package/dist/ProgressBar.js.map +1 -1
- package/dist/ProgressBar.jsx +17 -3
- package/dist/ProgressBar.jsx.map +1 -1
- package/dist/RadioGroup.d.ts +2 -7
- package/dist/RadioGroup.d.ts.map +1 -1
- package/dist/RadioGroup.js +388 -269
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RadioGroup.jsx +110 -99
- package/dist/RadioGroup.jsx.map +1 -1
- package/dist/RangeCalendar.d.ts +3 -7
- package/dist/RangeCalendar.d.ts.map +1 -1
- package/dist/RangeCalendar.js +271 -202
- package/dist/RangeCalendar.js.map +1 -1
- package/dist/RangeCalendar.jsx +56 -37
- package/dist/RangeCalendar.jsx.map +1 -1
- package/dist/RouterProvider.d.ts +3 -9
- package/dist/RouterProvider.d.ts.map +1 -1
- package/dist/RouterProvider.js +15 -14
- package/dist/RouterProvider.js.map +1 -1
- package/dist/RouterProvider.jsx +14 -13
- package/dist/RouterProvider.jsx.map +1 -1
- package/dist/SearchField.d.ts +4 -7
- package/dist/SearchField.d.ts.map +1 -1
- package/dist/SearchField.js +191 -164
- package/dist/SearchField.js.map +1 -1
- package/dist/SearchField.jsx +69 -62
- package/dist/SearchField.jsx.map +1 -1
- package/dist/Select.d.ts +5 -10
- package/dist/Select.d.ts.map +1 -1
- package/dist/Select.js +565 -359
- package/dist/Select.js.map +1 -1
- package/dist/Select.jsx +281 -161
- package/dist/Select.jsx.map +1 -1
- package/dist/SelectionIndicator.d.ts +1 -4
- package/dist/SelectionIndicator.d.ts.map +1 -1
- package/dist/SelectionIndicator.js +29 -13
- package/dist/SelectionIndicator.js.map +1 -1
- package/dist/SelectionIndicator.jsx +18 -4
- package/dist/SelectionIndicator.jsx.map +1 -1
- package/dist/Separator.d.ts +1 -7
- package/dist/Separator.d.ts.map +1 -1
- package/dist/Separator.js +22 -6
- package/dist/Separator.js.map +1 -1
- package/dist/Separator.jsx +16 -3
- package/dist/Separator.jsx.map +1 -1
- package/dist/SharedElementTransition.d.ts +1 -10
- package/dist/SharedElementTransition.d.ts.map +1 -1
- package/dist/SharedElementTransition.js +68 -40
- package/dist/SharedElementTransition.js.map +1 -1
- package/dist/SharedElementTransition.jsx +49 -25
- package/dist/SharedElementTransition.jsx.map +1 -1
- package/dist/Slider.d.ts +2 -8
- package/dist/Slider.d.ts.map +1 -1
- package/dist/Slider.js +155 -97
- package/dist/Slider.js.map +1 -1
- package/dist/Slider.jsx +25 -12
- package/dist/Slider.jsx.map +1 -1
- package/dist/StepList.d.ts +1 -7
- package/dist/StepList.d.ts.map +1 -1
- package/dist/StepList.js +112 -68
- package/dist/StepList.js.map +1 -1
- package/dist/StepList.jsx +58 -20
- package/dist/StepList.jsx.map +1 -1
- package/dist/Switch.d.ts +2 -9
- package/dist/Switch.d.ts.map +1 -1
- package/dist/Switch.js +164 -114
- package/dist/Switch.js.map +1 -1
- package/dist/Switch.jsx +26 -13
- package/dist/Switch.jsx.map +1 -1
- package/dist/Table.d.ts +2 -1
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +689 -592
- package/dist/Table.js.map +1 -1
- package/dist/Table.jsx +317 -237
- package/dist/Table.jsx.map +1 -1
- package/dist/Tabs.d.ts +2 -7
- package/dist/Tabs.d.ts.map +1 -1
- package/dist/Tabs.js +278 -293
- package/dist/Tabs.js.map +1 -1
- package/dist/Tabs.jsx +68 -66
- package/dist/Tabs.jsx.map +1 -1
- package/dist/TagGroup.d.ts +4 -11
- package/dist/TagGroup.d.ts.map +1 -1
- package/dist/TagGroup.js +153 -115
- package/dist/TagGroup.js.map +1 -1
- package/dist/TagGroup.jsx +37 -24
- package/dist/TagGroup.jsx.map +1 -1
- package/dist/Text.d.ts +3 -3
- package/dist/Text.d.ts.map +1 -1
- package/dist/Text.js +24 -7
- package/dist/Text.js.map +1 -1
- package/dist/Text.jsx +17 -5
- package/dist/Text.jsx.map +1 -1
- package/dist/TextField.d.ts +3 -16
- package/dist/TextField.d.ts.map +1 -1
- package/dist/TextField.js +104 -129
- package/dist/TextField.js.map +1 -1
- package/dist/TextField.jsx +76 -102
- package/dist/TextField.jsx.map +1 -1
- package/dist/TimeField.d.ts +2 -15
- package/dist/TimeField.d.ts.map +1 -1
- package/dist/TimeField.js +86 -102
- package/dist/TimeField.js.map +1 -1
- package/dist/TimeField.jsx +32 -49
- package/dist/TimeField.jsx.map +1 -1
- package/dist/Toast.d.ts +10 -13
- package/dist/Toast.d.ts.map +1 -1
- package/dist/Toast.js +209 -108
- package/dist/Toast.js.map +1 -1
- package/dist/Toast.jsx +127 -22
- package/dist/Toast.jsx.map +1 -1
- package/dist/ToggleButton.d.ts +1 -7
- package/dist/ToggleButton.d.ts.map +1 -1
- package/dist/ToggleButton.js +57 -35
- package/dist/ToggleButton.js.map +1 -1
- package/dist/ToggleButton.jsx +26 -12
- package/dist/ToggleButton.jsx.map +1 -1
- package/dist/ToggleButtonGroup.d.ts +1 -7
- package/dist/ToggleButtonGroup.d.ts.map +1 -1
- package/dist/ToggleButtonGroup.js +59 -44
- package/dist/ToggleButtonGroup.js.map +1 -1
- package/dist/ToggleButtonGroup.jsx +25 -12
- package/dist/ToggleButtonGroup.jsx.map +1 -1
- package/dist/TokenField.d.ts +52 -0
- package/dist/TokenField.d.ts.map +1 -0
- package/dist/TokenField.js +301 -0
- package/dist/TokenField.js.map +1 -0
- package/dist/TokenField.jsx +197 -0
- package/dist/TokenField.jsx.map +1 -0
- package/dist/Toolbar.d.ts +2 -7
- package/dist/Toolbar.d.ts.map +1 -1
- package/dist/Toolbar.js +35 -16
- package/dist/Toolbar.js.map +1 -1
- package/dist/Toolbar.jsx +15 -2
- package/dist/Toolbar.jsx.map +1 -1
- package/dist/Tooltip.d.ts +2 -7
- package/dist/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip.js +105 -68
- package/dist/Tooltip.js.map +1 -1
- package/dist/Tooltip.jsx +60 -36
- package/dist/Tooltip.jsx.map +1 -1
- package/dist/Tree.d.ts +8 -11
- package/dist/Tree.d.ts.map +1 -1
- package/dist/Tree.js +486 -339
- package/dist/Tree.js.map +1 -1
- package/dist/Tree.jsx +155 -107
- package/dist/Tree.jsx.map +1 -1
- package/dist/Virtualizer.d.ts +39 -9
- package/dist/Virtualizer.d.ts.map +1 -1
- package/dist/Virtualizer.js +2 -2
- package/dist/Virtualizer.jsx +2 -2
- package/dist/Virtualizer2.js +491 -136
- package/dist/Virtualizer2.js.map +1 -1
- package/dist/Virtualizer2.jsx +455 -122
- package/dist/Virtualizer2.jsx.map +1 -1
- package/dist/VirtualizerLayouts.d.ts +55 -2
- package/dist/VirtualizerLayouts.d.ts.map +1 -1
- package/dist/VisuallyHidden.d.ts +4 -3
- package/dist/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden.js +18 -11
- package/dist/VisuallyHidden.js.map +1 -1
- package/dist/VisuallyHidden.jsx +15 -9
- package/dist/VisuallyHidden.jsx.map +1 -1
- package/dist/contexts.d.ts +25 -0
- package/dist/contexts.d.ts.map +1 -1
- package/dist/contexts.js +3 -0
- package/dist/contexts.js.map +1 -1
- package/dist/contexts.jsx +3 -0
- package/dist/contexts.jsx.map +1 -1
- package/dist/index.d.ts +11 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -11
- package/dist/index.jsx +14 -11
- package/dist/intl/index.d.ts +16 -0
- package/dist/intl/index.d.ts.map +1 -0
- package/dist/intl.js +212 -0
- package/dist/intl.js.map +1 -0
- package/dist/intl.jsx +212 -0
- package/dist/intl.jsx.map +1 -0
- package/dist/useDragAndDrop.d.ts +4 -2
- package/dist/useDragAndDrop.d.ts.map +1 -1
- package/dist/useDragAndDrop2.js +39 -21
- package/dist/useDragAndDrop2.js.map +1 -1
- package/dist/useDragAndDrop2.jsx +39 -21
- package/dist/useDragAndDrop2.jsx.map +1 -1
- package/dist/utils.d.ts +28 -9
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +96 -24
- package/dist/utils.js.map +1 -1
- package/dist/utils.jsx +81 -24
- package/dist/utils.jsx.map +1 -1
- package/dist/virtualizer/Layout.d.ts +9 -0
- package/dist/virtualizer/Layout.d.ts.map +1 -1
- package/dist/virtualizer/Layout.js +23 -2
- package/dist/virtualizer/Layout.js.map +1 -1
- package/dist/virtualizer/Layout.jsx +23 -2
- package/dist/virtualizer/Layout.jsx.map +1 -1
- package/package.json +29 -10
- package/src/ActionBar.tsx +50 -24
- package/src/ActionGroup.tsx +31 -19
- package/src/Alert.tsx +10 -4
- package/src/Autocomplete.tsx +24 -15
- package/src/Breadcrumbs.tsx +32 -16
- package/src/Button.tsx +182 -67
- package/src/Calendar.tsx +65 -47
- package/src/CalendarPicker.tsx +16 -1
- package/src/Checkbox.tsx +84 -116
- package/src/Collection.tsx +84 -3
- package/src/Color.tsx +282 -104
- package/src/ColorEditor.tsx +5 -1
- package/src/ComboBox.tsx +384 -109
- package/src/ContextualHelpTrigger.tsx +47 -41
- package/src/DateField.tsx +74 -106
- package/src/DatePicker.tsx +156 -352
- package/src/DateRangePickerContext.tsx +8 -0
- package/src/Dialog.tsx +105 -38
- package/src/Disclosure.tsx +29 -19
- package/src/DragAndDrop.tsx +43 -8
- package/src/DragPreview.tsx +20 -1
- package/src/DropZone.tsx +32 -18
- package/src/ElementTag.tsx +14 -104
- package/src/FieldError.tsx +39 -7
- package/src/FileTrigger.tsx +18 -3
- package/src/Focusable.tsx +27 -6
- package/src/Form.tsx +57 -11
- package/src/GridList.tsx +233 -141
- package/src/HiddenDateInput.tsx +19 -3
- package/src/Icon.tsx +8 -2
- package/src/Keyboard.tsx +18 -2
- package/src/Label.tsx +77 -0
- package/src/Landmark.tsx +6 -1
- package/src/Link.tsx +65 -19
- package/src/ListBox.tsx +645 -468
- package/src/ListDropTargetDelegate.ts +4 -0
- package/src/Menu.tsx +512 -349
- package/src/Meter.tsx +42 -8
- package/src/Modal.tsx +85 -42
- package/src/NumberField.tsx +161 -48
- package/src/Popover.tsx +424 -148
- package/src/Pressable.tsx +27 -6
- package/src/PreviewTrigger.tsx +171 -0
- package/src/ProgressBar.tsx +25 -3
- package/src/RadioGroup.tsx +230 -161
- package/src/RangeCalendar.tsx +75 -63
- package/src/RouterProvider.tsx +24 -14
- package/src/SearchField.tsx +118 -121
- package/src/Select.tsx +454 -274
- package/src/SelectionIndicator.tsx +21 -3
- package/src/Separator.tsx +17 -1
- package/src/SharedElementTransition.tsx +115 -97
- package/src/Slider.tsx +35 -17
- package/src/StepList.tsx +71 -32
- package/src/Switch.tsx +45 -29
- package/src/Table.tsx +446 -380
- package/src/Tabs.tsx +132 -155
- package/src/TagGroup.tsx +53 -40
- package/src/Text.tsx +23 -6
- package/src/TextField.tsx +118 -159
- package/src/TimeField.tsx +34 -95
- package/src/Toast.tsx +141 -67
- package/src/ToggleButton.tsx +33 -15
- package/src/ToggleButtonGroup.tsx +27 -9
- package/src/TokenField.tsx +379 -0
- package/src/Toolbar.tsx +19 -9
- package/src/Tooltip.tsx +126 -84
- package/src/Tree.tsx +233 -173
- package/src/Virtualizer.tsx +400 -138
- package/src/VirtualizerLayouts.ts +211 -26
- package/src/VisuallyHidden.tsx +22 -8
- package/src/contexts.ts +13 -0
- package/src/index.ts +32 -11
- package/src/intl/ar-AE.json +6 -0
- package/src/intl/bg-BG.json +6 -0
- package/src/intl/cs-CZ.json +6 -0
- package/src/intl/da-DK.json +6 -0
- package/src/intl/de-DE.json +6 -0
- package/src/intl/el-GR.json +6 -0
- package/src/intl/en-US.json +6 -0
- package/src/intl/es-ES.json +6 -0
- package/src/intl/et-EE.json +6 -0
- package/src/intl/fi-FI.json +6 -0
- package/src/intl/fr-FR.json +6 -0
- package/src/intl/he-IL.json +6 -0
- package/src/intl/hr-HR.json +6 -0
- package/src/intl/hu-HU.json +6 -0
- package/src/intl/index.ts +125 -0
- package/src/intl/it-IT.json +6 -0
- package/src/intl/ja-JP.json +6 -0
- package/src/intl/ko-KR.json +6 -0
- package/src/intl/lt-LT.json +6 -0
- package/src/intl/lv-LV.json +6 -0
- package/src/intl/nb-NO.json +6 -0
- package/src/intl/nl-NL.json +6 -0
- package/src/intl/pl-PL.json +6 -0
- package/src/intl/pt-BR.json +6 -0
- package/src/intl/pt-PT.json +6 -0
- package/src/intl/ro-RO.json +6 -0
- package/src/intl/ru-RU.json +6 -0
- package/src/intl/sk-SK.json +6 -0
- package/src/intl/sl-SI.json +6 -0
- package/src/intl/sr-SP.json +6 -0
- package/src/intl/sv-SE.json +6 -0
- package/src/intl/tr-TR.json +6 -0
- package/src/intl/uk-UA.json +6 -0
- package/src/intl/zh-CN.json +6 -0
- package/src/intl/zh-TW.json +6 -0
- package/src/useDragAndDrop.ts +30 -32
- package/src/utils.tsx +124 -68
- package/src/virtualizer/Layout.ts +29 -0
package/dist/Disclosure.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Disclosure.js","names":["JSX","createContext","createMemo","createSignal","splitProps","useContext","createDisclosureState","createDisclosureGroupState","DisclosureState","DisclosureGroupState","DisclosureStateProps","DisclosureGroupStateProps","createDisclosure","createDisclosureGroup","createFocusRing","mergeProps","RenderChildren","ClassNameOrFunction","StyleOrFunction","useRenderProps","filterDOMProps","dataAttr","RefLike","T","el","current","assignRef","ref","DisclosureRenderProps","isExpanded","isFocusVisibleWithin","isDisabled","state","DisclosureGroupRenderProps","DisclosureProps","children","Element","class","style","id","HTMLDivElement","DisclosureGroupProps","DisclosureTriggerProps","Omit","ButtonHTMLAttributes","HTMLButtonElement","CSSProperties","DisclosurePanelProps","HTMLAttributes","HTMLElement","role","DisclosureContextValue","disclosureAria","buttonProps","panelProps","isPressed","DisclosureContext","DisclosureStateContext","useDisclosureContext","DisclosureGroupContextValue","DisclosureGroupContext","DisclosureGroupStateContext","useDisclosureGroupContext","DisclosureGroup","props","local","rest","allowsMultipleExpanded","expandedKeys","defaultExpandedKeys","onExpandedChange","groupProps","renderValues","renderProps","defaultClassName","domProps","Record","global","contextValue","_ref","cleanGroupProps","_$createComponent","Provider","value","_el$","_$getNextElement","_tmpl$","_$use","_$spread","_$mergeProps","data-disabled","_$insert","_$runHydrationEvents","Disclosure","groupContext","expanded","toggleKey","defaultExpanded","panelRef","setPanelRefSignal","isFocusVisible","focusProps","focusWithinProps","within","setPanelRef","DisclosurePanelRefContext","_el$2","data-expanded","data-focus-visible-within","DisclosureTrigger","context","Error","getButtonProps","isFocused","cleanFocusProps","_el$3","_tmpl$2","tabindex","undefined","data-pressed","data-focused","data-focus-visible","DisclosurePanel","panelRefSetter","getPanelProps","_el$4","renderChildren"],"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 // Mirror react-aria's `useFocusable` (useFocusable.tsx:114-118): always emit\n // an explicit tabIndex so the native trigger is a real, discoverable tab stop\n // (Safari won't focus a native button otherwise). Disabled → attribute absent.\n tabindex={isDisabled() ? undefined : 0}\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
|
+
{"version":3,"file":"Disclosure.js","names":["<DisclosureGroupStateContext value={state}>\n <DisclosureGroupContext 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>\n </DisclosureGroupStateContext>","value={state}","<DisclosureGroupContext 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>","value={contextValue}","ref={(el) => assignRef(local.ref, el)}","{props.children}","<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>","<DisclosureStateContext value={state}>\n <DisclosureContext value={contextValue}>\n <DisclosurePanelRefContext 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>\n </DisclosureContext>\n </DisclosureStateContext>","<DisclosureContext value={contextValue}>\n <DisclosurePanelRefContext 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>\n </DisclosureContext>","<DisclosurePanelRefContext 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>","value={setPanelRef}","<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>","type=\"button\"","{local.children}","<button\n {...mergeProps(domProps() as Record<string, unknown>, getButtonProps(), cleanFocusProps())}\n ref={(el) => assignRef(local.ref, el)}\n type=\"button\"\n // Mirror react-aria's `useFocusable` (useFocusable.tsx:114-118): always emit\n // an explicit tabIndex so the native trigger is a real, discoverable tab stop\n // (Safari won't focus a native button otherwise). Disabled → attribute absent.\n tabindex={isDisabled() ? undefined : 0}\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>","ref={(el) => {\n panelRefSetter?.(el);\n assignRef(local.ref, el);\n }}","{renderProps.renderChildren()}","<div\n {...mergeProps(\n domProps() as Record<string, unknown>,\n focusWithinProps as Record<string, unknown>,\n )}\n {...coerceDomRecord(getPanelProps() as Record<string, unknown>)}\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>"],"sources":["../src/Disclosure.tsx"],"sourcesContent":["/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Disclosure.tsx\n\n/**\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 { createContext, createMemo, createSignal, useContext } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\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 { splitProps } from \"@proyecto-viviana/solidaria/utils\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n coerceDomRecord,\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 value={state}>\n <DisclosureGroupContext 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>\n </DisclosureGroupStateContext>\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 value={state}>\n <DisclosureContext value={contextValue}>\n <DisclosurePanelRefContext 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>\n </DisclosureContext>\n </DisclosureStateContext>\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 // Mirror react-aria's `useFocusable` (useFocusable.tsx:114-118): always emit\n // an explicit tabIndex so the native trigger is a real, discoverable tab stop\n // (Safari won't focus a native button otherwise). Disabled → attribute absent.\n tabindex={isDisabled() ? undefined : 0}\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 {...coerceDomRecord(getPanelProps() as Record<string, unknown>)}\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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"}
|
package/dist/Disclosure.jsx
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Disclosure.tsx
|
|
13
|
+
import { coerceDomRecord, dataAttr, filterDOMProps, useRenderProps } from "./utils.jsx";
|
|
14
|
+
import { createContext, createMemo, createSignal, useContext } from "solid-js";
|
|
15
|
+
import { createDisclosure, createDisclosureGroup, createFocusRing, mergeProps } from "@proyecto-viviana/solidaria";
|
|
16
|
+
import { splitProps } from "@proyecto-viviana/solidaria/utils";
|
|
4
17
|
import { createDisclosureGroupState, createDisclosureState } from "@proyecto-viviana/solid-stately";
|
|
5
18
|
//#region src/Disclosure.tsx
|
|
6
19
|
/**
|
|
@@ -11,7 +24,7 @@ import { createDisclosureGroupState, createDisclosureState } from "@proyecto-viv
|
|
|
11
24
|
*
|
|
12
25
|
* Port of react-aria-components Disclosure.
|
|
13
26
|
*/
|
|
14
|
-
function assignRef(ref, el) {
|
|
27
|
+
function assignRef$1(ref, el) {
|
|
15
28
|
if (!ref) return;
|
|
16
29
|
if (typeof ref === "function") ref(el);
|
|
17
30
|
else if (typeof ref === "object" && "current" in ref) ref.current = el;
|
|
@@ -72,13 +85,13 @@ function DisclosureGroup(props) {
|
|
|
72
85
|
const domProps = createMemo(() => filterDOMProps(rest, { global: true }));
|
|
73
86
|
const contextValue = { state };
|
|
74
87
|
const { ref: _ref, ...cleanGroupProps } = groupProps;
|
|
75
|
-
return <DisclosureGroupStateContext
|
|
76
|
-
<DisclosureGroupContext
|
|
77
|
-
<div ref={(el) => assignRef(local.ref, el)} {...domProps()} {...cleanGroupProps} class={renderProps.class()} style={renderProps.style()} data-disabled={dataAttr(state.isDisabled)}>
|
|
88
|
+
return <DisclosureGroupStateContext value={state}>
|
|
89
|
+
<DisclosureGroupContext value={contextValue}>
|
|
90
|
+
<div ref={(el) => assignRef$1(local.ref, el)} {...domProps()} {...cleanGroupProps} class={renderProps.class()} style={renderProps.style()} data-disabled={dataAttr(state.isDisabled)}>
|
|
78
91
|
{props.children}
|
|
79
92
|
</div>
|
|
80
|
-
</DisclosureGroupContext
|
|
81
|
-
</DisclosureGroupStateContext
|
|
93
|
+
</DisclosureGroupContext>
|
|
94
|
+
</DisclosureGroupStateContext>;
|
|
82
95
|
}
|
|
83
96
|
/**
|
|
84
97
|
* Disclosure is a widget that can be toggled to show or hide content.
|
|
@@ -142,15 +155,15 @@ function Disclosure(props) {
|
|
|
142
155
|
const setPanelRef = (el) => {
|
|
143
156
|
setPanelRefSignal(el);
|
|
144
157
|
};
|
|
145
|
-
return <DisclosureStateContext
|
|
146
|
-
<DisclosureContext
|
|
147
|
-
<DisclosurePanelRefContext
|
|
148
|
-
<div ref={(el) => assignRef(local.ref, el)} {...mergeProps
|
|
158
|
+
return <DisclosureStateContext value={state}>
|
|
159
|
+
<DisclosureContext value={contextValue}>
|
|
160
|
+
<DisclosurePanelRefContext value={setPanelRef}>
|
|
161
|
+
<div ref={(el) => assignRef$1(local.ref, el)} {...mergeProps(domProps(), focusWithinProps)} class={renderProps.class()} style={renderProps.style()} data-expanded={dataAttr(state.isExpanded())} data-disabled={dataAttr(isDisabled())} data-focus-visible-within={dataAttr(isFocusVisibleWithin())}>
|
|
149
162
|
{props.children}
|
|
150
163
|
</div>
|
|
151
|
-
</DisclosurePanelRefContext
|
|
152
|
-
</DisclosureContext
|
|
153
|
-
</DisclosureStateContext
|
|
164
|
+
</DisclosurePanelRefContext>
|
|
165
|
+
</DisclosureContext>
|
|
166
|
+
</DisclosureStateContext>;
|
|
154
167
|
}
|
|
155
168
|
const DisclosurePanelRefContext = createContext(null);
|
|
156
169
|
/**
|
|
@@ -178,7 +191,7 @@ function DisclosureTrigger(props) {
|
|
|
178
191
|
const { ref: _ref, ...rest } = focusProps;
|
|
179
192
|
return rest;
|
|
180
193
|
};
|
|
181
|
-
return <button {...mergeProps
|
|
194
|
+
return <button {...mergeProps(domProps(), getButtonProps(), cleanFocusProps())} ref={(el) => assignRef$1(local.ref, el)} type="button" tabindex={isDisabled() ? void 0 : 0} 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
195
|
{local.children}
|
|
183
196
|
</button>;
|
|
184
197
|
}
|
|
@@ -217,9 +230,9 @@ function DisclosurePanel(props) {
|
|
|
217
230
|
const { ref: _ref, ...rest } = context.disclosureAria.panelProps;
|
|
218
231
|
return rest;
|
|
219
232
|
};
|
|
220
|
-
return <div {...mergeProps
|
|
233
|
+
return <div {...mergeProps(domProps(), focusWithinProps)} {...coerceDomRecord(getPanelProps())} ref={(el) => {
|
|
221
234
|
panelRefSetter?.(el);
|
|
222
|
-
assignRef(local.ref, el);
|
|
235
|
+
assignRef$1(local.ref, el);
|
|
223
236
|
}} role={local.role ?? "group"} class={renderProps.class()} style={renderProps.style()} data-expanded={dataAttr(isExpanded())} data-focus-visible-within={dataAttr(isFocusVisibleWithin())}>
|
|
224
237
|
{renderProps.renderChildren()}
|
|
225
238
|
</div>;
|
package/dist/Disclosure.jsx.map
CHANGED
|
@@ -1 +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 // Mirror react-aria's `useFocusable` (useFocusable.tsx:114-118): always emit\n // an explicit tabIndex so the native trigger is a real, discoverable tab stop\n // (Safari won't focus a native button otherwise). Disabled → attribute absent.\n tabindex={isDisabled() ? undefined : 0}\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
|
+
{"version":3,"file":"Disclosure.jsx","names":["assignRef"],"sources":["../src/Disclosure.tsx"],"sourcesContent":["/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Disclosure.tsx\n\n/**\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 { createContext, createMemo, createSignal, useContext } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\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 { splitProps } from \"@proyecto-viviana/solidaria/utils\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n coerceDomRecord,\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 value={state}>\n <DisclosureGroupContext 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>\n </DisclosureGroupStateContext>\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 value={state}>\n <DisclosureContext value={contextValue}>\n <DisclosurePanelRefContext 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>\n </DisclosureContext>\n </DisclosureStateContext>\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 // Mirror react-aria's `useFocusable` (useFocusable.tsx:114-118): always emit\n // an explicit tabIndex so the native trigger is a real, discoverable tab stop\n // (Safari won't focus a native button otherwise). Disabled → attribute absent.\n tabindex={isDisabled() ? undefined : 0}\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 {...coerceDomRecord(getPanelProps() as Record<string, unknown>)}\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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"}
|
package/dist/DragAndDrop.d.ts
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Compatibility target: react-aria-components DragAndDrop exports.
|
|
5
|
-
*/
|
|
6
|
-
import { type JSX, type Accessor } from "solid-js";
|
|
1
|
+
import type { Accessor } from "solid-js";
|
|
2
|
+
import type { JSX } from "@solidjs/web";
|
|
7
3
|
import type { DragTypes, DropOperation, DropTarget, ItemDropTarget, Key } from "@proyecto-viviana/solid-stately";
|
|
8
4
|
import type { DragAndDropHooks } from "./useDragAndDrop";
|
|
9
5
|
import { type ClassNameOrFunction, type StyleOrFunction, type SlotProps } from "./utils";
|
|
@@ -33,9 +29,11 @@ export declare function DropIndicator(props: DropIndicatorProps): JSX.Element;
|
|
|
33
29
|
export declare function useRenderDropIndicator(hooksOrDropState?: Pick<DragAndDropHooks<unknown>, "renderDropIndicator" | "isVirtualDragging" | "useDropIndicator"> | {
|
|
34
30
|
target?: DropTarget | null;
|
|
35
31
|
isDropTarget?: ((target: DropTarget) => boolean) | boolean;
|
|
32
|
+
isDropTargetFor?: (target: DropTarget | null) => boolean;
|
|
36
33
|
}, maybeDropState?: {
|
|
37
34
|
target?: DropTarget | null;
|
|
38
35
|
isDropTarget?: ((target: DropTarget) => boolean) | boolean;
|
|
36
|
+
isDropTargetFor?: (target: DropTarget | null) => boolean;
|
|
39
37
|
}): ((target: ItemDropTarget) => JSX.Element | undefined) | undefined;
|
|
40
38
|
type KeyAccessor = Key | null | undefined | Accessor<Key | null | undefined>;
|
|
41
39
|
interface SelectionManagerLike {
|
|
@@ -72,6 +70,11 @@ export declare function mergePersistedKeysIntoVirtualRange(baseRange: VirtualRan
|
|
|
72
70
|
forceIncludeMaxSpan?: number;
|
|
73
71
|
fallbackToForcedWindow?: boolean;
|
|
74
72
|
}): VirtualRangeLike;
|
|
73
|
+
/** Indexes that must stay mounted off-screen without expanding the in-flow window. */
|
|
74
|
+
export declare function indexesOutsideRange(range: {
|
|
75
|
+
start: number;
|
|
76
|
+
end: number;
|
|
77
|
+
}, indexes: number[]): number[];
|
|
75
78
|
export type DropTargetDelegate = {
|
|
76
79
|
getDropTargetFromPoint: (x: number, y: number, isValidDropTarget: (target: DropTarget) => boolean) => DropTarget | null;
|
|
77
80
|
getDropOperation: (target: DropTarget, types: DragTypes, allowedOperations: DropOperation[]) => DropOperation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragAndDrop.d.ts","sourceRoot":"","sources":["../src/DragAndDrop.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DragAndDrop.d.ts","sourceRoot":"","sources":["../src/DragAndDrop.tsx"],"names":[],"mappings":"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"}
|
package/dist/DragAndDrop.js
CHANGED
|
@@ -1,13 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2024 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/DragAndDrop.tsx
|
|
1
13
|
import { dataAttr, useRenderProps } from "./utils.js";
|
|
2
|
-
import { className, createComponent, effect, getNextElement, insert, setAttribute, style, template } from "
|
|
14
|
+
import { className, createComponent, effect, getNextElement, insert, readShallow, scope, setAttribute, style, template } from "@solidjs/web";
|
|
3
15
|
import { createContext, createMemo, useContext } from "solid-js";
|
|
4
16
|
//#region src/DragAndDrop.tsx
|
|
5
17
|
/**
|
|
6
18
|
* Drag and drop composition helpers for solidaria-components.
|
|
7
19
|
*
|
|
8
|
-
*
|
|
20
|
+
* Based on packages/react-aria-components/src/DragAndDrop.tsx.
|
|
9
21
|
*/
|
|
10
|
-
var _tmpl$ =
|
|
22
|
+
var _tmpl$ = /* @__PURE__ */ template(`<div role=option aria-disabled=true>`);
|
|
11
23
|
const DragAndDropContext = createContext({});
|
|
12
24
|
const DropIndicatorContext = createContext(null);
|
|
13
25
|
function DefaultDropIndicator(props) {
|
|
@@ -24,23 +36,22 @@ function DefaultDropIndicator(props) {
|
|
|
24
36
|
style: props.style,
|
|
25
37
|
defaultClassName: "solidaria-DropIndicator"
|
|
26
38
|
}, () => ({ isDropTarget: isDropTarget() }));
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
})();
|
|
39
|
+
var _el$ = getNextElement(_tmpl$);
|
|
40
|
+
insert(_el$, scope(() => {
|
|
41
|
+
return renderProps.renderChildren();
|
|
42
|
+
}));
|
|
43
|
+
effect(() => {
|
|
44
|
+
return {
|
|
45
|
+
e: readShallow(renderProps.class()),
|
|
46
|
+
t: readShallow(renderProps.style()),
|
|
47
|
+
a: dataAttr(isDropTarget())
|
|
48
|
+
};
|
|
49
|
+
}, ({ e, t, a }, _p$) => {
|
|
50
|
+
className(_el$, e, _p$?.e);
|
|
51
|
+
style(_el$, t, _p$?.t);
|
|
52
|
+
a !== _p$?.a && setAttribute(_el$, "data-drop-target", a);
|
|
53
|
+
});
|
|
54
|
+
return _el$;
|
|
44
55
|
}
|
|
45
56
|
function DropIndicator(props) {
|
|
46
57
|
const context = useContext(DropIndicatorContext);
|
|
@@ -64,7 +75,7 @@ function useRenderDropIndicator(hooksOrDropState, maybeDropState) {
|
|
|
64
75
|
};
|
|
65
76
|
return (target) => {
|
|
66
77
|
const stateIsDropTarget = dropState?.isDropTarget;
|
|
67
|
-
const isTarget = typeof
|
|
78
|
+
const isTarget = (typeof dropState?.isDropTargetFor === "function" ? dropState.isDropTargetFor(target) : typeof stateIsDropTarget === "function" ? Boolean(stateIsDropTarget(target)) : false) || targetsEqual(dropState?.target, target);
|
|
68
79
|
const isVirtualDragging = dragAndDropHooks?.isVirtualDragging?.() ?? false;
|
|
69
80
|
if (!isTarget && !isVirtualDragging) return void 0;
|
|
70
81
|
return dragAndDropHooks?.renderDropIndicator ? dragAndDropHooks.renderDropIndicator(target) : createComponent(DropIndicator, { target });
|
|
@@ -170,7 +181,11 @@ function mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, itemCou
|
|
|
170
181
|
offsetBottom: Math.max(0, lastRect.y + lastRect.height - (endRect.y + endRect.height))
|
|
171
182
|
};
|
|
172
183
|
}
|
|
184
|
+
/** Indexes that must stay mounted off-screen without expanding the in-flow window. */
|
|
185
|
+
function indexesOutsideRange(range, indexes) {
|
|
186
|
+
return indexes.filter((index) => index < range.start || index >= range.end);
|
|
187
|
+
}
|
|
173
188
|
//#endregion
|
|
174
|
-
export { DragAndDropContext, DropIndicator, DropIndicatorContext, getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator };
|
|
189
|
+
export { DragAndDropContext, DropIndicator, DropIndicatorContext, getNormalizedDropTargetKey, indexesOutsideRange, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator };
|
|
175
190
|
|
|
176
191
|
//# sourceMappingURL=DragAndDrop.js.map
|
package/dist/DragAndDrop.js.map
CHANGED
|
@@ -1 +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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"}
|
|
1
|
+
{"version":3,"file":"DragAndDrop.js","names":["{renderProps.renderChildren()}","style={renderProps.style()}","data-drop-target={dataAttr(isDropTarget())}","<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>","<DefaultDropIndicator {...props} />","<DropIndicator target={target} />"],"sources":["../src/DragAndDrop.tsx"],"sourcesContent":["/*\n * Copyright 2024 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/DragAndDrop.tsx\n\n/**\n * Drag and drop composition helpers for solidaria-components.\n *\n * Based on packages/react-aria-components/src/DragAndDrop.tsx.\n */\n\nimport { createContext, createMemo, useContext } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\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 isDropTargetFor?: (target: DropTarget | null) => boolean;\n },\n maybeDropState?: {\n target?: DropTarget | null;\n isDropTarget?: ((target: DropTarget) => boolean) | boolean;\n isDropTargetFor?: (target: DropTarget | null) => 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 isDropTargetFor?: (target: DropTarget | null) => 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 // RAC `useDroppableCollectionState.ts:207` `isDropTarget(target)` is a\n // per-target predicate. The port exposes `isDropTarget` as a collection-\n // level boolean (`createDroppableCollectionState.ts:458`) that keyboard\n // `setTarget` (`createDroppableCollection.ts` `onDropEnter`, RAC `:561`)\n // never flips. Match `state.target` so the active indicator still mounts\n // — otherwise Enter pickup leaves DOM focus on the collection\n // (`listbox:Permissions`) instead of `option:Insert between Read and Write`.\n const isTargetFromFn =\n typeof dropState?.isDropTargetFor === \"function\"\n ? dropState.isDropTargetFor(target)\n : typeof stateIsDropTarget === \"function\"\n ? Boolean(stateIsDropTarget(target))\n : false;\n const isTarget = isTargetFromFn || targetsEqual(dropState?.target, target);\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\n/** Indexes that must stay mounted off-screen without expanding the in-flow window. */\nexport function indexesOutsideRange(\n range: { start: number; end: number },\n indexes: number[],\n): number[] {\n return indexes.filter((index) => index < range.start || index >= range.end);\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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"}
|