@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/DragAndDrop.jsx
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
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.jsx";
|
|
2
14
|
import { createContext, createMemo, useContext } from "solid-js";
|
|
3
15
|
//#region src/DragAndDrop.tsx
|
|
4
16
|
/**
|
|
5
17
|
* Drag and drop composition helpers for solidaria-components.
|
|
6
18
|
*
|
|
7
|
-
*
|
|
19
|
+
* Based on packages/react-aria-components/src/DragAndDrop.tsx.
|
|
8
20
|
*/
|
|
9
21
|
const DragAndDropContext = createContext({});
|
|
10
22
|
const DropIndicatorContext = createContext(null);
|
|
@@ -22,7 +34,7 @@ function DefaultDropIndicator(props) {
|
|
|
22
34
|
style: props.style,
|
|
23
35
|
defaultClassName: "solidaria-DropIndicator"
|
|
24
36
|
}, () => ({ isDropTarget: isDropTarget() }));
|
|
25
|
-
return <div role="option" aria-disabled=
|
|
37
|
+
return <div role="option" aria-disabled="true" class={renderProps.class()} style={renderProps.style()} data-drop-target={dataAttr(isDropTarget())}>
|
|
26
38
|
{renderProps.renderChildren()}
|
|
27
39
|
</div>;
|
|
28
40
|
}
|
|
@@ -48,7 +60,7 @@ function useRenderDropIndicator(hooksOrDropState, maybeDropState) {
|
|
|
48
60
|
};
|
|
49
61
|
return (target) => {
|
|
50
62
|
const stateIsDropTarget = dropState?.isDropTarget;
|
|
51
|
-
const isTarget = typeof
|
|
63
|
+
const isTarget = (typeof dropState?.isDropTargetFor === "function" ? dropState.isDropTargetFor(target) : typeof stateIsDropTarget === "function" ? Boolean(stateIsDropTarget(target)) : false) || targetsEqual(dropState?.target, target);
|
|
52
64
|
const isVirtualDragging = dragAndDropHooks?.isVirtualDragging?.() ?? false;
|
|
53
65
|
if (!isTarget && !isVirtualDragging) return void 0;
|
|
54
66
|
return dragAndDropHooks?.renderDropIndicator ? dragAndDropHooks.renderDropIndicator(target) : <DropIndicator target={target} />;
|
|
@@ -154,7 +166,11 @@ function mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, itemCou
|
|
|
154
166
|
offsetBottom: Math.max(0, lastRect.y + lastRect.height - (endRect.y + endRect.height))
|
|
155
167
|
};
|
|
156
168
|
}
|
|
169
|
+
/** Indexes that must stay mounted off-screen without expanding the in-flow window. */
|
|
170
|
+
function indexesOutsideRange(range, indexes) {
|
|
171
|
+
return indexes.filter((index) => index < range.start || index >= range.end);
|
|
172
|
+
}
|
|
157
173
|
//#endregion
|
|
158
|
-
export { DragAndDropContext, DropIndicator, DropIndicatorContext, getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator };
|
|
174
|
+
export { DragAndDropContext, DropIndicator, DropIndicatorContext, getNormalizedDropTargetKey, indexesOutsideRange, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator };
|
|
159
175
|
|
|
160
176
|
//# sourceMappingURL=DragAndDrop.jsx.map
|
package/dist/DragAndDrop.jsx.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragAndDrop.jsx","names":[],"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.jsx","names":[],"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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"}
|
package/dist/DragPreview.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragPreview.d.ts","sourceRoot":"","sources":["../src/DragPreview.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DragPreview.d.ts","sourceRoot":"","sources":["../src/DragPreview.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAErF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9C,QAAQ,EAAE,CACR,KAAK,EAAE,QAAQ,EAAE,KACd,GAAG,CAAC,OAAO,GAAG;QAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;CACxF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAoChE"}
|
package/dist/DropZone.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* DropZone primitive for solidaria-components.
|
|
3
|
-
*
|
|
4
|
-
* A drop target area for drag and drop operations.
|
|
5
|
-
* Parity target: react-aria-components/src/DropZone.tsx
|
|
6
|
-
*/
|
|
7
|
-
import { type JSX } from "solid-js";
|
|
1
|
+
import type { JSX } from "@solidjs/web";
|
|
8
2
|
import { type HoverEvents, type AriaDropOptions } from "@proyecto-viviana/solidaria";
|
|
9
3
|
import { type ClassNameOrFunction, type StyleOrFunction, type RenderChildren, type SlotProps } from "./utils";
|
|
10
4
|
export interface DropZoneRenderProps {
|
package/dist/DropZone.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropZone.d.ts","sourceRoot":"","sources":["../src/DropZone.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DropZone.d.ts","sourceRoot":"","sources":["../src/DropZone.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,eAAe,EAGrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,SAAS,EAIf,MAAM,SAAS,CAAC;AAKjB,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aACf,SACE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC,EACnF,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,EACtC,WAAW,EACX,SAAS;IACX,QAAQ,CAAC,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;CAC9C;AAED,eAAO,MAAM,eAAe,kDAA4C,CAAC;AAezE;;GAEG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,GAAG,CAAC,OAAO,CAqK1D"}
|
package/dist/DropZone.js
CHANGED
|
@@ -1,18 +1,32 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 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/DropZone.tsx
|
|
13
|
+
import { dataAttr, filterDOMProps, useRenderProps } from "./utils.js";
|
|
2
14
|
import { VisuallyHidden } from "./VisuallyHidden.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
15
|
+
import { t as racIntlStrings } from "./intl.js";
|
|
16
|
+
import { createComponent, getNextElement, getNextMarker, insert, ref, runHydrationEvents, scope, spread, template } from "@solidjs/web";
|
|
17
|
+
import { createContext, createMemo, createSignal, useContext } from "solid-js";
|
|
18
|
+
import { createDrop, createFocusRing, createHover, createStringFormatter, mergeProps as mergeProps$1, readFromDataTransfer } from "@proyecto-viviana/solidaria";
|
|
19
|
+
import { splitProps } from "@proyecto-viviana/solidaria/utils";
|
|
6
20
|
//#region src/DropZone.tsx
|
|
7
21
|
/**
|
|
8
22
|
* DropZone primitive for solidaria-components.
|
|
9
23
|
*
|
|
10
24
|
* A drop target area for drag and drop operations.
|
|
11
|
-
*
|
|
25
|
+
* Based on packages/react-aria-components/src/DropZone.tsx.
|
|
12
26
|
*/
|
|
13
|
-
var _tmpl$ =
|
|
27
|
+
var _tmpl$ = /* @__PURE__ */ template(`<button>`);
|
|
28
|
+
var _tmpl$2 = /* @__PURE__ */ template(`<div><!$><!/><!$><!/>`);
|
|
14
29
|
const DropZoneContext = createContext(null);
|
|
15
|
-
const DEFAULT_DROPZONE_LABEL = "Drop files";
|
|
16
30
|
const FOCUSABLE_SELECTOR = [
|
|
17
31
|
"a[href]",
|
|
18
32
|
"button:not([disabled])",
|
|
@@ -29,7 +43,9 @@ function isFocusableElement(target) {
|
|
|
29
43
|
* A drop zone is an area into which one or multiple objects can be dropped.
|
|
30
44
|
*/
|
|
31
45
|
function DropZone(props) {
|
|
32
|
-
const
|
|
46
|
+
const contextProps = useContext(DropZoneContext);
|
|
47
|
+
const mergedProps = mergeProps$1(contextProps ?? {}, props);
|
|
48
|
+
const [local, dropProps, hoverEventProps, domProps] = splitProps(mergedProps, [
|
|
33
49
|
"children",
|
|
34
50
|
"class",
|
|
35
51
|
"style",
|
|
@@ -50,6 +66,7 @@ function DropZone(props) {
|
|
|
50
66
|
"onHoverEnd",
|
|
51
67
|
"onHoverChange"
|
|
52
68
|
]);
|
|
69
|
+
const stringFormatter = createStringFormatter(racIntlStrings, "react-aria-components");
|
|
53
70
|
const [dropZoneRef, setDropZoneRef] = createSignal(null);
|
|
54
71
|
const [dropButtonRef, setDropButtonRef] = createSignal(null);
|
|
55
72
|
const dropAria = createDrop(() => ({
|
|
@@ -132,13 +149,22 @@ function DropZone(props) {
|
|
|
132
149
|
dropOperation: "copy"
|
|
133
150
|
});
|
|
134
151
|
};
|
|
135
|
-
const dropButtonAriaLabel = createMemo(() => local["aria-label"] ?? (!local["aria-labelledby"] ?
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
152
|
+
const dropButtonAriaLabel = createMemo(() => local["aria-label"] ?? (!local["aria-labelledby"] ? stringFormatter().format("dropzoneLabel") : void 0));
|
|
153
|
+
var _el$ = getNextElement(_tmpl$2);
|
|
154
|
+
var _el$3 = _el$.firstChild;
|
|
155
|
+
var [_el$4, _el$5] = getNextMarker(_el$3.nextSibling);
|
|
156
|
+
var _el$6 = _el$4.nextSibling;
|
|
157
|
+
var [_el$7, _el$8] = getNextMarker(_el$6.nextSibling);
|
|
158
|
+
ref(() => {
|
|
159
|
+
return setDropZoneRef;
|
|
160
|
+
}, _el$);
|
|
161
|
+
spread(_el$, [
|
|
162
|
+
filteredDomProps,
|
|
163
|
+
cleanDropProps,
|
|
164
|
+
cleanHoverProps,
|
|
165
|
+
{
|
|
166
|
+
onClick: onRootClick,
|
|
167
|
+
get "class"() {
|
|
142
168
|
return renderProps.class();
|
|
143
169
|
},
|
|
144
170
|
get style() {
|
|
@@ -147,41 +173,49 @@ function DropZone(props) {
|
|
|
147
173
|
get slot() {
|
|
148
174
|
return local.slot;
|
|
149
175
|
},
|
|
150
|
-
get
|
|
151
|
-
return isHovered()
|
|
176
|
+
get "data-hovered"() {
|
|
177
|
+
return dataAttr(isHovered());
|
|
152
178
|
},
|
|
153
|
-
get
|
|
154
|
-
return isFocused()
|
|
179
|
+
get "data-focused"() {
|
|
180
|
+
return dataAttr(isFocused());
|
|
155
181
|
},
|
|
156
|
-
get
|
|
157
|
-
return isFocusVisible()
|
|
182
|
+
get "data-focus-visible"() {
|
|
183
|
+
return dataAttr(isFocusVisible());
|
|
158
184
|
},
|
|
159
|
-
get
|
|
160
|
-
return dropAria.isDropTarget
|
|
185
|
+
get "data-drop-target"() {
|
|
186
|
+
return dataAttr(dropAria.isDropTarget);
|
|
161
187
|
},
|
|
162
|
-
get
|
|
163
|
-
return dropProps.isDisabled
|
|
188
|
+
get "data-disabled"() {
|
|
189
|
+
return dataAttr(dropProps.isDisabled);
|
|
164
190
|
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
191
|
+
}
|
|
192
|
+
], true);
|
|
193
|
+
insert(_el$, createComponent(VisuallyHidden, { get children() {
|
|
194
|
+
var _el$2 = getNextElement(_tmpl$);
|
|
195
|
+
ref(() => {
|
|
196
|
+
return setDropButtonRef;
|
|
197
|
+
}, _el$2);
|
|
198
|
+
spread(_el$2, [
|
|
199
|
+
cleanDropButtonProps,
|
|
200
|
+
cleanFocusProps,
|
|
201
|
+
{
|
|
202
|
+
get "aria-label"() {
|
|
171
203
|
return dropButtonAriaLabel();
|
|
172
204
|
},
|
|
173
|
-
get
|
|
205
|
+
get "aria-labelledby"() {
|
|
174
206
|
return local["aria-labelledby"];
|
|
175
207
|
},
|
|
176
|
-
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
return _el$2;
|
|
180
|
-
} }), _el$4, _co$);
|
|
181
|
-
insert(_el$, () => renderProps.renderChildren(), _el$6, _co$2);
|
|
208
|
+
onPaste: onHiddenButtonPaste
|
|
209
|
+
}
|
|
210
|
+
], false);
|
|
182
211
|
runHydrationEvents();
|
|
183
|
-
return _el
|
|
184
|
-
})
|
|
212
|
+
return _el$2;
|
|
213
|
+
} }), _el$4, _el$5);
|
|
214
|
+
insert(_el$, scope(() => {
|
|
215
|
+
return renderProps.renderChildren();
|
|
216
|
+
}), _el$7, _el$8);
|
|
217
|
+
runHydrationEvents();
|
|
218
|
+
return _el$;
|
|
185
219
|
}
|
|
186
220
|
//#endregion
|
|
187
221
|
export { DropZone, DropZoneContext };
|
package/dist/DropZone.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropZone.js","names":["JSX","createContext","createMemo","createSignal","mergeProps","splitProps","useContext","createDrop","createFocusRing","createHover","readFromDataTransfer","HoverEvents","AriaDropOptions","ClassNameOrFunction","StyleOrFunction","RenderChildren","SlotProps","useRenderProps","filterDOMProps","VisuallyHidden","DropZoneRenderProps","isHovered","isFocused","isFocusVisible","isDropTarget","isDisabled","DropZoneProps","Omit","HTMLAttributes","HTMLDivElement","children","class","style","DropZoneContext","DEFAULT_DROPZONE_LABEL","FOCUSABLE_SELECTOR","join","isFocusableElement","target","Element","HTMLElement","matches","DropZone","props","contextProps","mergedProps","local","dropProps","hoverEventProps","domProps","dropZoneRef","setDropZoneRef","dropButtonRef","setDropButtonRef","HTMLButtonElement","dropAria","getDropOperation","getDropOperationForPoint","onDropEnter","onDropMove","onDropActivate","onDropExit","onDrop","hasDropButton","hoverProps","onHoverStart","onHoverEnd","onHoverChange","focusProps","renderValues","renderProps","defaultClassName","filteredDomProps","global","cleanDropProps","ref","_ref","rest","Record","cleanHoverProps","cleanFocusProps","cleanDropButtonProps","dropButtonProps","onRootClick","EventHandler","MouseEvent","e","onClick","defaultPrevented","root","hiddenButton","contains","focus","parentElement","onHiddenButtonPaste","ClipboardEvent","clipboardData","items","length","preventDefault","type","x","y","dropOperation","dropButtonAriaLabel","undefined","_el$","_$getNextElement","_tmpl$2","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","_$use","_$spread","_$mergeProps","slot","data-hovered","data-focused","data-focus-visible","data-drop-target","data-disabled","_$insert","_$createComponent","_el$2","_tmpl$","aria-label","aria-labelledby","_$runHydrationEvents","renderChildren"],"sources":["../src/DropZone.tsx"],"sourcesContent":["/**\n * DropZone primitive for solidaria-components.\n *\n * A drop target area for drag and drop operations.\n * Parity target: react-aria-components/src/DropZone.tsx\n */\n\nimport {\n type JSX,\n createContext,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport {\n createDrop,\n createFocusRing,\n createHover,\n readFromDataTransfer,\n type HoverEvents,\n type AriaDropOptions,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\n\nexport interface DropZoneRenderProps {\n isHovered: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDropTarget: boolean;\n isDisabled: boolean;\n}\n\nexport interface DropZoneProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onDrop\">,\n Omit<AriaDropOptions, \"hasDropButton\">,\n HoverEvents,\n SlotProps {\n children?: RenderChildren<DropZoneRenderProps>;\n class?: ClassNameOrFunction<DropZoneRenderProps>;\n style?: StyleOrFunction<DropZoneRenderProps>;\n}\n\nexport const DropZoneContext = createContext<DropZoneProps | null>(null);\nconst DEFAULT_DROPZONE_LABEL = \"Drop files\";\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n 'input:not([disabled]):not([type=\"hidden\"])',\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(\",\");\n\nfunction isFocusableElement(target: Element): boolean {\n return target instanceof HTMLElement && target.matches(FOCUSABLE_SELECTOR);\n}\n\n/**\n * A drop zone is an area into which one or multiple objects can be dropped.\n */\nexport function DropZone(props: DropZoneProps): JSX.Element {\n const contextProps = useContext(DropZoneContext);\n const mergedProps = mergeProps(contextProps ?? {}, props);\n const [local, dropProps, hoverEventProps, domProps] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"aria-label\", \"aria-labelledby\"],\n [\n \"getDropOperation\",\n \"getDropOperationForPoint\",\n \"onDropEnter\",\n \"onDropMove\",\n \"onDropActivate\",\n \"onDropExit\",\n \"onDrop\",\n \"isDisabled\",\n ],\n [\"onHoverStart\", \"onHoverEnd\", \"onHoverChange\"],\n );\n\n const [dropZoneRef, setDropZoneRef] = createSignal<HTMLDivElement | null>(null);\n const [dropButtonRef, setDropButtonRef] = createSignal<HTMLButtonElement | null>(null);\n\n const dropAria = createDrop(() => ({\n getDropOperation: dropProps.getDropOperation,\n getDropOperationForPoint: dropProps.getDropOperationForPoint,\n onDropEnter: dropProps.onDropEnter,\n onDropMove: dropProps.onDropMove,\n onDropActivate: dropProps.onDropActivate,\n onDropExit: dropProps.onDropExit,\n onDrop: dropProps.onDrop,\n hasDropButton: true,\n isDisabled: dropProps.isDisabled,\n }));\n\n const { isHovered, hoverProps } = createHover(() => ({\n isDisabled: dropProps.isDisabled,\n onHoverStart: hoverEventProps.onHoverStart,\n onHoverEnd: hoverEventProps.onHoverEnd,\n onHoverChange: hoverEventProps.onHoverChange,\n }));\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<DropZoneRenderProps>(() => ({\n isHovered: isHovered(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDropTarget: dropAria.isDropTarget,\n isDisabled: !!dropProps.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DropZone\",\n },\n renderValues,\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n const cleanDropProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanDropButtonProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropButtonProps as Record<string, unknown>;\n return rest;\n };\n\n const onRootClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n const onClick = (filteredDomProps() as JSX.HTMLAttributes<HTMLDivElement>).onClick as\n | JSX.EventHandler<HTMLDivElement, MouseEvent>\n | undefined;\n onClick?.(e);\n if (e.defaultPrevented || dropProps.isDisabled) {\n return;\n }\n\n const root = dropZoneRef();\n const hiddenButton = dropButtonRef();\n if (!root || !hiddenButton) {\n return;\n }\n\n let target: Element | null = e.target instanceof Element ? e.target : root;\n while (target && root.contains(target)) {\n if (isFocusableElement(target)) {\n return;\n }\n if (target === root) {\n hiddenButton.focus();\n return;\n }\n target = target.parentElement;\n }\n };\n\n const onHiddenButtonPaste: JSX.EventHandler<HTMLButtonElement, ClipboardEvent> = (e) => {\n if (dropProps.isDisabled || !e.clipboardData) {\n return;\n }\n\n const items = readFromDataTransfer(e.clipboardData);\n if (items.length === 0) {\n return;\n }\n\n e.preventDefault();\n dropProps.onDrop?.({\n type: \"drop\",\n x: 0,\n y: 0,\n items,\n dropOperation: \"copy\",\n });\n };\n\n const dropButtonAriaLabel = createMemo(\n () => local[\"aria-label\"] ?? (!local[\"aria-labelledby\"] ? DEFAULT_DROPZONE_LABEL : undefined),\n );\n\n return (\n <div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={isHovered() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-drop-target={dropAria.isDropTarget || undefined}\n data-disabled={dropProps.isDisabled || undefined}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropZone.js","names":["ref={setDropZoneRef}","onClick={onRootClick}","<VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>","ref={setDropButtonRef}","onPaste={onHiddenButtonPaste}","<button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />","<div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={dataAttr(isHovered())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n data-drop-target={dataAttr(dropAria.isDropTarget)}\n data-disabled={dataAttr(dropProps.isDisabled)}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>","{renderProps.renderChildren()}"],"sources":["../src/DropZone.tsx"],"sourcesContent":["/*\n * Copyright 2023 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/DropZone.tsx\n\n/**\n * DropZone primitive for solidaria-components.\n *\n * A drop target area for drag and drop operations.\n * Based on packages/react-aria-components/src/DropZone.tsx.\n */\n\nimport { createContext, createMemo, createSignal, useContext } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport {\n createDrop,\n createFocusRing,\n createHover,\n readFromDataTransfer,\n type HoverEvents,\n type AriaDropOptions,\n createStringFormatter,\n mergeProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\nimport { racIntlStrings } from \"./intl\";\nimport { splitProps } from \"@proyecto-viviana/solidaria/utils\";\n\nexport interface DropZoneRenderProps {\n isHovered: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDropTarget: boolean;\n isDisabled: boolean;\n}\n\nexport interface DropZoneProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onDrop\">,\n Omit<AriaDropOptions, \"hasDropButton\">,\n HoverEvents,\n SlotProps {\n children?: RenderChildren<DropZoneRenderProps>;\n class?: ClassNameOrFunction<DropZoneRenderProps>;\n style?: StyleOrFunction<DropZoneRenderProps>;\n}\n\nexport const DropZoneContext = createContext<DropZoneProps | null>(null);\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n 'input:not([disabled]):not([type=\"hidden\"])',\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(\",\");\n\nfunction isFocusableElement(target: Element): boolean {\n return target instanceof HTMLElement && target.matches(FOCUSABLE_SELECTOR);\n}\n\n/**\n * A drop zone is an area into which one or multiple objects can be dropped.\n */\nexport function DropZone(props: DropZoneProps): JSX.Element {\n const contextProps = useContext(DropZoneContext);\n const mergedProps = mergeProps<DropZoneProps>(contextProps ?? {}, props);\n const [local, dropProps, hoverEventProps, domProps] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"aria-label\", \"aria-labelledby\"],\n [\n \"getDropOperation\",\n \"getDropOperationForPoint\",\n \"onDropEnter\",\n \"onDropMove\",\n \"onDropActivate\",\n \"onDropExit\",\n \"onDrop\",\n \"isDisabled\",\n ],\n [\"onHoverStart\", \"onHoverEnd\", \"onHoverChange\"],\n );\n\n const stringFormatter = createStringFormatter(racIntlStrings, \"react-aria-components\");\n const [dropZoneRef, setDropZoneRef] = createSignal<HTMLDivElement | null>(null);\n const [dropButtonRef, setDropButtonRef] = createSignal<HTMLButtonElement | null>(null);\n\n const dropAria = createDrop(() => ({\n getDropOperation: dropProps.getDropOperation,\n getDropOperationForPoint: dropProps.getDropOperationForPoint,\n onDropEnter: dropProps.onDropEnter,\n onDropMove: dropProps.onDropMove,\n onDropActivate: dropProps.onDropActivate,\n onDropExit: dropProps.onDropExit,\n onDrop: dropProps.onDrop,\n hasDropButton: true,\n isDisabled: dropProps.isDisabled,\n }));\n\n const { isHovered, hoverProps } = createHover(() => ({\n isDisabled: dropProps.isDisabled,\n onHoverStart: hoverEventProps.onHoverStart,\n onHoverEnd: hoverEventProps.onHoverEnd,\n onHoverChange: hoverEventProps.onHoverChange,\n }));\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<DropZoneRenderProps>(() => ({\n isHovered: isHovered(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDropTarget: dropAria.isDropTarget,\n isDisabled: !!dropProps.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DropZone\",\n },\n renderValues,\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n const cleanDropProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanDropButtonProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropButtonProps as Record<string, unknown>;\n return rest;\n };\n\n const onRootClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n const onClick = (filteredDomProps() as JSX.HTMLAttributes<HTMLDivElement>).onClick as\n | JSX.EventHandler<HTMLDivElement, MouseEvent>\n | undefined;\n onClick?.(e);\n if (e.defaultPrevented || dropProps.isDisabled) {\n return;\n }\n\n const root = dropZoneRef();\n const hiddenButton = dropButtonRef();\n if (!root || !hiddenButton) {\n return;\n }\n\n let target: Element | null = e.target instanceof Element ? e.target : root;\n while (target && root.contains(target)) {\n if (isFocusableElement(target)) {\n return;\n }\n if (target === root) {\n hiddenButton.focus();\n return;\n }\n target = target.parentElement;\n }\n };\n\n const onHiddenButtonPaste: JSX.EventHandler<HTMLButtonElement, ClipboardEvent> = (e) => {\n if (dropProps.isDisabled || !e.clipboardData) {\n return;\n }\n\n const items = readFromDataTransfer(e.clipboardData);\n if (items.length === 0) {\n return;\n }\n\n e.preventDefault();\n dropProps.onDrop?.({\n type: \"drop\",\n x: 0,\n y: 0,\n items,\n dropOperation: \"copy\",\n });\n };\n\n const dropButtonAriaLabel = createMemo(\n () =>\n local[\"aria-label\"] ??\n (!local[\"aria-labelledby\"] ? stringFormatter().format(\"dropzoneLabel\") : undefined),\n );\n\n return (\n <div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={dataAttr(isHovered())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n data-drop-target={dataAttr(dropAria.isDropTarget)}\n data-disabled={dataAttr(dropProps.isDisabled)}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":"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"}
|
package/dist/DropZone.jsx
CHANGED
|
@@ -1,16 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2023 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/DropZone.tsx
|
|
13
|
+
import { dataAttr, filterDOMProps, useRenderProps } from "./utils.jsx";
|
|
2
14
|
import { VisuallyHidden } from "./VisuallyHidden.jsx";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
15
|
+
import { t as racIntlStrings } from "./intl.jsx";
|
|
16
|
+
import { createContext, createMemo, createSignal, useContext } from "solid-js";
|
|
17
|
+
import { createDrop, createFocusRing, createHover, createStringFormatter, mergeProps, readFromDataTransfer } from "@proyecto-viviana/solidaria";
|
|
18
|
+
import { splitProps } from "@proyecto-viviana/solidaria/utils";
|
|
5
19
|
//#region src/DropZone.tsx
|
|
6
20
|
/**
|
|
7
21
|
* DropZone primitive for solidaria-components.
|
|
8
22
|
*
|
|
9
23
|
* A drop target area for drag and drop operations.
|
|
10
|
-
*
|
|
24
|
+
* Based on packages/react-aria-components/src/DropZone.tsx.
|
|
11
25
|
*/
|
|
12
26
|
const DropZoneContext = createContext(null);
|
|
13
|
-
const DEFAULT_DROPZONE_LABEL = "Drop files";
|
|
14
27
|
const FOCUSABLE_SELECTOR = [
|
|
15
28
|
"a[href]",
|
|
16
29
|
"button:not([disabled])",
|
|
@@ -27,7 +40,9 @@ function isFocusableElement(target) {
|
|
|
27
40
|
* A drop zone is an area into which one or multiple objects can be dropped.
|
|
28
41
|
*/
|
|
29
42
|
function DropZone(props) {
|
|
30
|
-
const
|
|
43
|
+
const contextProps = useContext(DropZoneContext);
|
|
44
|
+
const mergedProps = mergeProps(contextProps ?? {}, props);
|
|
45
|
+
const [local, dropProps, hoverEventProps, domProps] = splitProps(mergedProps, [
|
|
31
46
|
"children",
|
|
32
47
|
"class",
|
|
33
48
|
"style",
|
|
@@ -48,6 +63,7 @@ function DropZone(props) {
|
|
|
48
63
|
"onHoverEnd",
|
|
49
64
|
"onHoverChange"
|
|
50
65
|
]);
|
|
66
|
+
const stringFormatter = createStringFormatter(racIntlStrings, "react-aria-components");
|
|
51
67
|
const [dropZoneRef, setDropZoneRef] = createSignal(null);
|
|
52
68
|
const [dropButtonRef, setDropButtonRef] = createSignal(null);
|
|
53
69
|
const dropAria = createDrop(() => ({
|
|
@@ -130,8 +146,8 @@ function DropZone(props) {
|
|
|
130
146
|
dropOperation: "copy"
|
|
131
147
|
});
|
|
132
148
|
};
|
|
133
|
-
const dropButtonAriaLabel = createMemo(() => local["aria-label"] ?? (!local["aria-labelledby"] ?
|
|
134
|
-
return <div ref={setDropZoneRef} {...filteredDomProps()} {...cleanDropProps()} {...cleanHoverProps()} onClick={onRootClick} class={renderProps.class()} style={renderProps.style()} slot={local.slot} data-hovered={isHovered()
|
|
149
|
+
const dropButtonAriaLabel = createMemo(() => local["aria-label"] ?? (!local["aria-labelledby"] ? stringFormatter().format("dropzoneLabel") : void 0));
|
|
150
|
+
return <div ref={setDropZoneRef} {...filteredDomProps()} {...cleanDropProps()} {...cleanHoverProps()} onClick={onRootClick} class={renderProps.class()} style={renderProps.style()} slot={local.slot} data-hovered={dataAttr(isHovered())} data-focused={dataAttr(isFocused())} data-focus-visible={dataAttr(isFocusVisible())} data-drop-target={dataAttr(dropAria.isDropTarget)} data-disabled={dataAttr(dropProps.isDisabled)}>
|
|
135
151
|
<VisuallyHidden>
|
|
136
152
|
<button ref={setDropButtonRef} {...cleanDropButtonProps()} {...cleanFocusProps()} aria-label={dropButtonAriaLabel()} aria-labelledby={local["aria-labelledby"]} onPaste={onHiddenButtonPaste} />
|
|
137
153
|
</VisuallyHidden>
|
package/dist/DropZone.jsx.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropZone.jsx","names":[],"sources":["../src/DropZone.tsx"],"sourcesContent":["/**\n * DropZone primitive for solidaria-components.\n *\n * A drop target area for drag and drop operations.\n * Parity target: react-aria-components/src/DropZone.tsx\n */\n\nimport {\n type JSX,\n createContext,\n createMemo,\n createSignal,\n mergeProps,\n splitProps,\n useContext,\n} from \"solid-js\";\nimport {\n createDrop,\n createFocusRing,\n createHover,\n readFromDataTransfer,\n type HoverEvents,\n type AriaDropOptions,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\n\nexport interface DropZoneRenderProps {\n isHovered: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDropTarget: boolean;\n isDisabled: boolean;\n}\n\nexport interface DropZoneProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onDrop\">,\n Omit<AriaDropOptions, \"hasDropButton\">,\n HoverEvents,\n SlotProps {\n children?: RenderChildren<DropZoneRenderProps>;\n class?: ClassNameOrFunction<DropZoneRenderProps>;\n style?: StyleOrFunction<DropZoneRenderProps>;\n}\n\nexport const DropZoneContext = createContext<DropZoneProps | null>(null);\nconst DEFAULT_DROPZONE_LABEL = \"Drop files\";\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n 'input:not([disabled]):not([type=\"hidden\"])',\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(\",\");\n\nfunction isFocusableElement(target: Element): boolean {\n return target instanceof HTMLElement && target.matches(FOCUSABLE_SELECTOR);\n}\n\n/**\n * A drop zone is an area into which one or multiple objects can be dropped.\n */\nexport function DropZone(props: DropZoneProps): JSX.Element {\n const contextProps = useContext(DropZoneContext);\n const mergedProps = mergeProps(contextProps ?? {}, props);\n const [local, dropProps, hoverEventProps, domProps] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"aria-label\", \"aria-labelledby\"],\n [\n \"getDropOperation\",\n \"getDropOperationForPoint\",\n \"onDropEnter\",\n \"onDropMove\",\n \"onDropActivate\",\n \"onDropExit\",\n \"onDrop\",\n \"isDisabled\",\n ],\n [\"onHoverStart\", \"onHoverEnd\", \"onHoverChange\"],\n );\n\n const [dropZoneRef, setDropZoneRef] = createSignal<HTMLDivElement | null>(null);\n const [dropButtonRef, setDropButtonRef] = createSignal<HTMLButtonElement | null>(null);\n\n const dropAria = createDrop(() => ({\n getDropOperation: dropProps.getDropOperation,\n getDropOperationForPoint: dropProps.getDropOperationForPoint,\n onDropEnter: dropProps.onDropEnter,\n onDropMove: dropProps.onDropMove,\n onDropActivate: dropProps.onDropActivate,\n onDropExit: dropProps.onDropExit,\n onDrop: dropProps.onDrop,\n hasDropButton: true,\n isDisabled: dropProps.isDisabled,\n }));\n\n const { isHovered, hoverProps } = createHover(() => ({\n isDisabled: dropProps.isDisabled,\n onHoverStart: hoverEventProps.onHoverStart,\n onHoverEnd: hoverEventProps.onHoverEnd,\n onHoverChange: hoverEventProps.onHoverChange,\n }));\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<DropZoneRenderProps>(() => ({\n isHovered: isHovered(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDropTarget: dropAria.isDropTarget,\n isDisabled: !!dropProps.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DropZone\",\n },\n renderValues,\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n const cleanDropProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanDropButtonProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropButtonProps as Record<string, unknown>;\n return rest;\n };\n\n const onRootClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n const onClick = (filteredDomProps() as JSX.HTMLAttributes<HTMLDivElement>).onClick as\n | JSX.EventHandler<HTMLDivElement, MouseEvent>\n | undefined;\n onClick?.(e);\n if (e.defaultPrevented || dropProps.isDisabled) {\n return;\n }\n\n const root = dropZoneRef();\n const hiddenButton = dropButtonRef();\n if (!root || !hiddenButton) {\n return;\n }\n\n let target: Element | null = e.target instanceof Element ? e.target : root;\n while (target && root.contains(target)) {\n if (isFocusableElement(target)) {\n return;\n }\n if (target === root) {\n hiddenButton.focus();\n return;\n }\n target = target.parentElement;\n }\n };\n\n const onHiddenButtonPaste: JSX.EventHandler<HTMLButtonElement, ClipboardEvent> = (e) => {\n if (dropProps.isDisabled || !e.clipboardData) {\n return;\n }\n\n const items = readFromDataTransfer(e.clipboardData);\n if (items.length === 0) {\n return;\n }\n\n e.preventDefault();\n dropProps.onDrop?.({\n type: \"drop\",\n x: 0,\n y: 0,\n items,\n dropOperation: \"copy\",\n });\n };\n\n const dropButtonAriaLabel = createMemo(\n () => local[\"aria-label\"] ?? (!local[\"aria-labelledby\"] ? DEFAULT_DROPZONE_LABEL : undefined),\n );\n\n return (\n <div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={isHovered() || undefined}\n data-focused={isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-drop-target={dropAria.isDropTarget || undefined}\n data-disabled={dropProps.isDisabled || undefined}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropZone.jsx","names":[],"sources":["../src/DropZone.tsx"],"sourcesContent":["/*\n * Copyright 2023 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/DropZone.tsx\n\n/**\n * DropZone primitive for solidaria-components.\n *\n * A drop target area for drag and drop operations.\n * Based on packages/react-aria-components/src/DropZone.tsx.\n */\n\nimport { createContext, createMemo, createSignal, useContext } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport {\n createDrop,\n createFocusRing,\n createHover,\n readFromDataTransfer,\n type HoverEvents,\n type AriaDropOptions,\n createStringFormatter,\n mergeProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n type ClassNameOrFunction,\n type StyleOrFunction,\n type RenderChildren,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n dataAttr,\n} from \"./utils\";\nimport { VisuallyHidden } from \"./VisuallyHidden\";\nimport { racIntlStrings } from \"./intl\";\nimport { splitProps } from \"@proyecto-viviana/solidaria/utils\";\n\nexport interface DropZoneRenderProps {\n isHovered: boolean;\n isFocused: boolean;\n isFocusVisible: boolean;\n isDropTarget: boolean;\n isDisabled: boolean;\n}\n\nexport interface DropZoneProps\n extends\n Omit<JSX.HTMLAttributes<HTMLDivElement>, \"children\" | \"class\" | \"style\" | \"onDrop\">,\n Omit<AriaDropOptions, \"hasDropButton\">,\n HoverEvents,\n SlotProps {\n children?: RenderChildren<DropZoneRenderProps>;\n class?: ClassNameOrFunction<DropZoneRenderProps>;\n style?: StyleOrFunction<DropZoneRenderProps>;\n}\n\nexport const DropZoneContext = createContext<DropZoneProps | null>(null);\nconst FOCUSABLE_SELECTOR = [\n \"a[href]\",\n \"button:not([disabled])\",\n 'input:not([disabled]):not([type=\"hidden\"])',\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(\",\");\n\nfunction isFocusableElement(target: Element): boolean {\n return target instanceof HTMLElement && target.matches(FOCUSABLE_SELECTOR);\n}\n\n/**\n * A drop zone is an area into which one or multiple objects can be dropped.\n */\nexport function DropZone(props: DropZoneProps): JSX.Element {\n const contextProps = useContext(DropZoneContext);\n const mergedProps = mergeProps<DropZoneProps>(contextProps ?? {}, props);\n const [local, dropProps, hoverEventProps, domProps] = splitProps(\n mergedProps,\n [\"children\", \"class\", \"style\", \"slot\", \"aria-label\", \"aria-labelledby\"],\n [\n \"getDropOperation\",\n \"getDropOperationForPoint\",\n \"onDropEnter\",\n \"onDropMove\",\n \"onDropActivate\",\n \"onDropExit\",\n \"onDrop\",\n \"isDisabled\",\n ],\n [\"onHoverStart\", \"onHoverEnd\", \"onHoverChange\"],\n );\n\n const stringFormatter = createStringFormatter(racIntlStrings, \"react-aria-components\");\n const [dropZoneRef, setDropZoneRef] = createSignal<HTMLDivElement | null>(null);\n const [dropButtonRef, setDropButtonRef] = createSignal<HTMLButtonElement | null>(null);\n\n const dropAria = createDrop(() => ({\n getDropOperation: dropProps.getDropOperation,\n getDropOperationForPoint: dropProps.getDropOperationForPoint,\n onDropEnter: dropProps.onDropEnter,\n onDropMove: dropProps.onDropMove,\n onDropActivate: dropProps.onDropActivate,\n onDropExit: dropProps.onDropExit,\n onDrop: dropProps.onDrop,\n hasDropButton: true,\n isDisabled: dropProps.isDisabled,\n }));\n\n const { isHovered, hoverProps } = createHover(() => ({\n isDisabled: dropProps.isDisabled,\n onHoverStart: hoverEventProps.onHoverStart,\n onHoverEnd: hoverEventProps.onHoverEnd,\n onHoverChange: hoverEventProps.onHoverChange,\n }));\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<DropZoneRenderProps>(() => ({\n isHovered: isHovered(),\n isFocused: isFocused(),\n isFocusVisible: isFocusVisible(),\n isDropTarget: dropAria.isDropTarget,\n isDisabled: !!dropProps.isDisabled,\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return local.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-DropZone\",\n },\n renderValues,\n );\n\n const filteredDomProps = createMemo(() => filterDOMProps(domProps, { global: true }));\n\n const cleanDropProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropProps as Record<string, unknown>;\n return rest;\n };\n const cleanHoverProps = () => {\n const { ref: _ref, ...rest } = hoverProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanDropButtonProps = () => {\n const { ref: _ref, ...rest } = dropAria.dropButtonProps as Record<string, unknown>;\n return rest;\n };\n\n const onRootClick: JSX.EventHandler<HTMLDivElement, MouseEvent> = (e) => {\n const onClick = (filteredDomProps() as JSX.HTMLAttributes<HTMLDivElement>).onClick as\n | JSX.EventHandler<HTMLDivElement, MouseEvent>\n | undefined;\n onClick?.(e);\n if (e.defaultPrevented || dropProps.isDisabled) {\n return;\n }\n\n const root = dropZoneRef();\n const hiddenButton = dropButtonRef();\n if (!root || !hiddenButton) {\n return;\n }\n\n let target: Element | null = e.target instanceof Element ? e.target : root;\n while (target && root.contains(target)) {\n if (isFocusableElement(target)) {\n return;\n }\n if (target === root) {\n hiddenButton.focus();\n return;\n }\n target = target.parentElement;\n }\n };\n\n const onHiddenButtonPaste: JSX.EventHandler<HTMLButtonElement, ClipboardEvent> = (e) => {\n if (dropProps.isDisabled || !e.clipboardData) {\n return;\n }\n\n const items = readFromDataTransfer(e.clipboardData);\n if (items.length === 0) {\n return;\n }\n\n e.preventDefault();\n dropProps.onDrop?.({\n type: \"drop\",\n x: 0,\n y: 0,\n items,\n dropOperation: \"copy\",\n });\n };\n\n const dropButtonAriaLabel = createMemo(\n () =>\n local[\"aria-label\"] ??\n (!local[\"aria-labelledby\"] ? stringFormatter().format(\"dropzoneLabel\") : undefined),\n );\n\n return (\n <div\n ref={setDropZoneRef}\n {...filteredDomProps()}\n {...cleanDropProps()}\n {...cleanHoverProps()}\n onClick={onRootClick}\n class={renderProps.class()}\n style={renderProps.style()}\n slot={local.slot}\n data-hovered={dataAttr(isHovered())}\n data-focused={dataAttr(isFocused())}\n data-focus-visible={dataAttr(isFocusVisible())}\n data-drop-target={dataAttr(dropAria.isDropTarget)}\n data-disabled={dataAttr(dropProps.isDisabled)}\n >\n <VisuallyHidden>\n <button\n ref={setDropButtonRef}\n {...cleanDropButtonProps()}\n {...cleanFocusProps()}\n aria-label={dropButtonAriaLabel()}\n aria-labelledby={local[\"aria-labelledby\"]}\n onPaste={onHiddenButtonPaste}\n />\n </VisuallyHidden>\n {renderProps.renderChildren()}\n </div>\n );\n}\n"],"mappings":"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"}
|
package/dist/ElementTag.d.ts
CHANGED
|
@@ -1,29 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Local Solid helper for reactive HTML tags across SSR, hydration, and updates.
|
|
3
|
+
* The pinned React Aria Components source has no ElementTag counterpart.
|
|
4
|
+
*/
|
|
5
|
+
import type { JSX } from "@solidjs/web";
|
|
2
6
|
export interface ElementTagProps extends Record<string, unknown> {
|
|
3
7
|
/** The HTML tag name to render. */
|
|
4
8
|
tag: string;
|
|
5
9
|
children?: JSX.Element;
|
|
6
10
|
}
|
|
7
11
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* string branch calls `getNextElement()` with **no** `template` argument
|
|
13
|
-
* (solid-js 1.9.14, `web/dist/dev.js:771`). `getNextElement(template)` only
|
|
14
|
-
* reaches the registry while `isHydrating()` holds; once `sharedConfig.done` is
|
|
15
|
-
* set — hydration finished, but `sharedConfig.context` still live — it falls
|
|
16
|
-
* through to `return template()` and throws `TypeError: template is not a
|
|
17
|
-
* function`. Any deferred child lands on exactly that path: a `<Show>` that
|
|
18
|
-
* flips, a Suspense resolution, a portal, a container that defers its children.
|
|
19
|
-
*
|
|
20
|
-
* Each branch below is real JSX, so the compiler emits a `template()` of its own
|
|
21
|
-
* and hands it to `getNextElement(template)` — which adopts the SSR node from the
|
|
22
|
-
* registry during hydration and clones the template afterwards. Both phases work.
|
|
23
|
-
*
|
|
24
|
-
* Props other than `tag` are spread through untouched, `children` included, so
|
|
25
|
-
* this matches `<Dynamic>`'s behaviour exactly (`Dynamic` likewise splits only
|
|
26
|
-
* `component` and spreads the rest onto the element).
|
|
12
|
+
* Solid 2's native dynamic helper adopts SSR elements during hydration and
|
|
13
|
+
* creates new elements after it settles. Its separate tag-source memo keeps
|
|
14
|
+
* unrelated reactive spread updates from replacing the element. Only `tag`
|
|
15
|
+
* selects the element; all other props, including children, are forwarded.
|
|
27
16
|
*/
|
|
28
17
|
export declare function ElementTag(props: ElementTagProps): JSX.Element;
|
|
29
18
|
//# sourceMappingURL=ElementTag.d.ts.map
|
package/dist/ElementTag.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ElementTag.d.ts","sourceRoot":"","sources":["../src/ElementTag.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ElementTag.d.ts","sourceRoot":"","sources":["../src/ElementTag.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAIxC,MAAM,WAAW,eAAgB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC9D,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CAI9D"}
|