@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/src/Virtualizer.tsx
CHANGED
|
@@ -1,34 +1,73 @@
|
|
|
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
|
+
|
|
13
|
+
/*
|
|
14
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
15
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
16
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
17
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
*
|
|
19
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
20
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
21
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
22
|
+
* governing permissions and limitations under the License.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria-components/src/Virtualizer.tsx
|
|
26
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/virtualizer/ScrollView.tsx
|
|
27
|
+
|
|
1
28
|
/**
|
|
2
29
|
* Virtualizer primitive for solidaria-components.
|
|
3
30
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
31
|
+
* Provides the React Aria Components API and the React Aria scroll-view
|
|
32
|
+
* behavior. Based on:
|
|
33
|
+
* - packages/react-aria-components/src/Virtualizer.tsx
|
|
34
|
+
* - packages/react-aria/src/virtualizer/ScrollView.tsx
|
|
6
35
|
*/
|
|
7
36
|
|
|
8
37
|
import {
|
|
9
|
-
type JSX,
|
|
10
38
|
createContext,
|
|
39
|
+
createEffect,
|
|
11
40
|
createMemo,
|
|
12
41
|
createSignal,
|
|
13
42
|
onCleanup,
|
|
14
|
-
onMount,
|
|
15
|
-
splitProps,
|
|
16
43
|
useContext,
|
|
44
|
+
createTrackedEffect,
|
|
17
45
|
} from "solid-js";
|
|
46
|
+
import type { Accessor } from "solid-js";
|
|
47
|
+
import type { JSX } from "@solidjs/web";
|
|
18
48
|
import type {
|
|
19
49
|
DragTypes,
|
|
20
50
|
DropOperation,
|
|
21
51
|
DropTarget,
|
|
22
52
|
ItemDropTarget,
|
|
23
53
|
} from "@proyecto-viviana/solid-stately";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
54
|
+
import { createScrollView, useLocale } from "@proyecto-viviana/solidaria";
|
|
55
|
+
import { isElementVisible } from "@proyecto-viviana/solidaria/utils";
|
|
56
|
+
import {
|
|
57
|
+
CollectionRendererContext,
|
|
58
|
+
DefaultCollectionRenderer,
|
|
59
|
+
type CollectionRendererContextValue,
|
|
60
|
+
type CollectionRootProps,
|
|
61
|
+
type CollectionBranchProps,
|
|
62
|
+
} from "./Collection";
|
|
63
|
+
import { splitProps } from "@proyecto-viviana/solidaria/utils";
|
|
26
64
|
import {
|
|
27
65
|
GridLayout,
|
|
28
66
|
ListLayout,
|
|
29
67
|
TableLayout,
|
|
30
68
|
WaterfallLayout,
|
|
31
69
|
calculateLinearVisibleRange,
|
|
70
|
+
resolveListRowSize,
|
|
32
71
|
type DefaultVirtualizerLayoutOptions,
|
|
33
72
|
type GridLayoutOptions,
|
|
34
73
|
type LayoutInfo,
|
|
@@ -50,6 +89,8 @@ export interface LayoutOptionsDelegate<O> {
|
|
|
50
89
|
export interface VirtualizerLayout<O = unknown> extends LayoutOptionsDelegate<O> {
|
|
51
90
|
getVisibleRange?(context: VirtualizerRangeContext, options?: O): VirtualizerVisibleRange;
|
|
52
91
|
getLayoutInfo?(index: number, context: VirtualizerLayoutInfoContext, options?: O): LayoutInfo;
|
|
92
|
+
getContentSize?(itemCount: number, context: VirtualizerLayoutInfoContext, options?: O): Size;
|
|
93
|
+
updateItemSize?(index: number, mainSize: number): boolean;
|
|
53
94
|
getDropTargetFromPoint?(
|
|
54
95
|
point: Point,
|
|
55
96
|
itemCount: number,
|
|
@@ -80,6 +121,8 @@ export interface VirtualizerContextValue<O = unknown> {
|
|
|
80
121
|
orientation: Orientation;
|
|
81
122
|
getVisibleRange: (itemCount: number) => VirtualizerVisibleRange;
|
|
82
123
|
getLayoutInfo: (index: number) => LayoutInfo;
|
|
124
|
+
getContentSize: (itemCount: number) => Size;
|
|
125
|
+
updateItemSize: (index: number, mainSize: number) => boolean;
|
|
83
126
|
getDropTargetFromPoint: (point: Point, itemCount: number) => VirtualizerDropTarget | null;
|
|
84
127
|
setDropTargetResolver: (resolver: VirtualizerDropTargetResolver | undefined) => void;
|
|
85
128
|
setDropTargetItemCountResolver: (resolver: (() => number) | undefined) => void;
|
|
@@ -104,6 +147,27 @@ export type VirtualizerDropOperationResolver = (
|
|
|
104
147
|
|
|
105
148
|
export const VirtualizerContext = createContext<VirtualizerContextValue<unknown> | null>(null);
|
|
106
149
|
|
|
150
|
+
interface VirtualizerOptionsContextValue {
|
|
151
|
+
layout: VirtualizerLayout<unknown>;
|
|
152
|
+
layoutOptions?: unknown;
|
|
153
|
+
shouldObserveItemSize?: boolean;
|
|
154
|
+
allowsWindowScrolling: boolean;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const VirtualizerOptionsContext = createContext<VirtualizerOptionsContextValue | null>(null);
|
|
158
|
+
|
|
159
|
+
interface VirtualizerScrollRuntime {
|
|
160
|
+
setScrollOffset: (value: number) => void;
|
|
161
|
+
setScrollOffsetX: (value: number) => void;
|
|
162
|
+
setViewportOffset: (value: number) => void;
|
|
163
|
+
setWindowViewportSize: (value: number) => void;
|
|
164
|
+
setMeasuredViewportSize: (value: number) => void;
|
|
165
|
+
setMeasuredViewportWidth: (value: number) => void;
|
|
166
|
+
allowsWindowScrolling: () => boolean;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const VirtualizerScrollRuntimeContext = createContext<VirtualizerScrollRuntime | null>(null);
|
|
170
|
+
|
|
107
171
|
export function useVirtualizerContext<O>(): VirtualizerContextValue<O> | null {
|
|
108
172
|
return useContext(VirtualizerContext) as VirtualizerContextValue<O> | null;
|
|
109
173
|
}
|
|
@@ -118,6 +182,12 @@ export interface VirtualizerProps<O> extends Omit<
|
|
|
118
182
|
layout: VirtualizerLayoutClass<O> | VirtualizerLayout<O>;
|
|
119
183
|
/** Layout options consumed by the layout implementation. */
|
|
120
184
|
layoutOptions?: O;
|
|
185
|
+
/**
|
|
186
|
+
* Whether to observe each item's size with a ResizeObserver and re-measure
|
|
187
|
+
* when it changes. RAC `VirtualizerProps.shouldObserveItemSize`. Estimated
|
|
188
|
+
* rows still measure once even when this is false.
|
|
189
|
+
*/
|
|
190
|
+
shouldObserveItemSize?: boolean;
|
|
121
191
|
/** Optional renderer for collection drop indicators in virtualized flows. */
|
|
122
192
|
renderDropIndicator?: (
|
|
123
193
|
index: number,
|
|
@@ -132,8 +202,6 @@ export interface VirtualizerProps<O> extends Omit<
|
|
|
132
202
|
* so a virtualizer with unbounded height still virtualizes as the page scrolls.
|
|
133
203
|
*/
|
|
134
204
|
allowsWindowScrolling?: boolean;
|
|
135
|
-
class?: string;
|
|
136
|
-
style?: string | JSX.CSSProperties;
|
|
137
205
|
}
|
|
138
206
|
|
|
139
207
|
function getObjectValue<T extends object, K extends keyof T>(
|
|
@@ -159,7 +227,8 @@ function isSameLayoutInfo(a: LayoutInfo, b: LayoutInfo): boolean {
|
|
|
159
227
|
a.rect.x === b.rect.x &&
|
|
160
228
|
a.rect.y === b.rect.y &&
|
|
161
229
|
a.rect.width === b.rect.width &&
|
|
162
|
-
a.rect.height === b.rect.height
|
|
230
|
+
a.rect.height === b.rect.height &&
|
|
231
|
+
a.estimatedSize === b.estimatedSize
|
|
163
232
|
);
|
|
164
233
|
}
|
|
165
234
|
|
|
@@ -172,50 +241,44 @@ export function Virtualizer<O>(props: VirtualizerProps<O>): JSX.Element {
|
|
|
172
241
|
"children",
|
|
173
242
|
"layout",
|
|
174
243
|
"layoutOptions",
|
|
244
|
+
"shouldObserveItemSize",
|
|
175
245
|
"renderDropIndicator",
|
|
176
246
|
"getDropOperation",
|
|
177
247
|
"allowsWindowScrolling",
|
|
178
|
-
"class",
|
|
179
|
-
"style",
|
|
180
248
|
]);
|
|
181
249
|
// The scroll view's own scroll position (its scrollTop).
|
|
182
|
-
const [scrollOffset, setScrollOffset] = createSignal(0);
|
|
250
|
+
const [scrollOffset, setScrollOffset] = createSignal(0, { ownedWrite: true });
|
|
183
251
|
// The scroll view's horizontal scroll position (its scrollLeft), used as the
|
|
184
252
|
// primary scroll axis when the layout's orientation is horizontal.
|
|
185
|
-
const [scrollOffsetX, setScrollOffsetX] = createSignal(0);
|
|
253
|
+
const [scrollOffsetX, setScrollOffsetX] = createSignal(0, { ownedWrite: true });
|
|
186
254
|
// How far the scroll view's top edge is above the window viewport, due to the
|
|
187
255
|
// page (or an ancestor) being scrolled. Mirrors upstream ScrollView.viewportOffset.
|
|
188
|
-
const [viewportOffset, setViewportOffset] = createSignal(0);
|
|
256
|
+
const [viewportOffset, setViewportOffset] = createSignal(0, { ownedWrite: true });
|
|
189
257
|
// The window viewport height, used as the visible height cap when window scrolling.
|
|
190
|
-
const [windowViewportSize, setWindowViewportSize] = createSignal(0);
|
|
258
|
+
const [windowViewportSize, setWindowViewportSize] = createSignal(0, { ownedWrite: true });
|
|
191
259
|
// The scroll view's own measured size (clientHeight/clientWidth).
|
|
192
|
-
const [measuredViewportSize, setMeasuredViewportSize] = createSignal(0);
|
|
193
|
-
const [measuredViewportWidth, setMeasuredViewportWidth] = createSignal(0);
|
|
260
|
+
const [measuredViewportSize, setMeasuredViewportSize] = createSignal(0, { ownedWrite: true });
|
|
261
|
+
const [measuredViewportWidth, setMeasuredViewportWidth] = createSignal(0, { ownedWrite: true });
|
|
194
262
|
const allowsWindowScrolling = createMemo(() => local.allowsWindowScrolling ?? true);
|
|
195
|
-
// Whether the scroll view is actively scrolling. Mirrors upstream ScrollView's
|
|
196
|
-
// `isScrolling`: while scrolling, the content gets `pointer-events: none` so pointer
|
|
197
|
-
// events don't hit rows recycling under a stationary cursor (avoiding hover-state
|
|
198
|
-
// flicker and needless hit-testing). It flips back 300ms after the last scroll.
|
|
199
|
-
const [isScrolling, setIsScrolling] = createSignal(false);
|
|
200
263
|
const [dropTargetResolver, setDropTargetResolver] = createSignal<
|
|
201
264
|
VirtualizerDropTargetResolver | undefined
|
|
202
|
-
>(undefined);
|
|
265
|
+
>(undefined, { ownedWrite: true });
|
|
203
266
|
const [dropTargetItemCountResolver, setDropTargetItemCountResolver] = createSignal<
|
|
204
267
|
(() => number) | undefined
|
|
205
|
-
>(undefined);
|
|
268
|
+
>(undefined, { ownedWrite: true });
|
|
206
269
|
const [dropTargetIndexResolver, setDropTargetIndexResolver] = createSignal<
|
|
207
270
|
((key: string | number) => number | null) | undefined
|
|
208
|
-
>(undefined);
|
|
271
|
+
>(undefined, { ownedWrite: true });
|
|
209
272
|
const [dropOperationResolver, setDropOperationResolver] = createSignal<
|
|
210
273
|
VirtualizerDropOperationResolver | undefined
|
|
211
|
-
>(undefined);
|
|
274
|
+
>(undefined, { ownedWrite: true });
|
|
212
275
|
const [keyboardNavigationOverride, setKeyboardNavigationOverride] = createSignal<
|
|
213
276
|
VirtualizerKeyboardNavigationOverride | undefined
|
|
214
|
-
>(undefined);
|
|
215
|
-
let containerRef: HTMLDivElement | undefined;
|
|
277
|
+
>(undefined, { ownedWrite: true });
|
|
216
278
|
const fallbackLayout = new ListLayout();
|
|
217
279
|
const visibleRangeCache = new Map<number, VirtualizerVisibleRange>();
|
|
218
280
|
const layoutInfoCache = new Map<number, LayoutInfo>();
|
|
281
|
+
const [layoutEpoch, setLayoutEpoch] = createSignal(0);
|
|
219
282
|
|
|
220
283
|
const layout = createMemo<VirtualizerLayout<O>>(() => {
|
|
221
284
|
if (typeof local.layout === "function") {
|
|
@@ -248,7 +311,7 @@ export function Virtualizer<O>(props: VirtualizerProps<O>): JSX.Element {
|
|
|
248
311
|
}
|
|
249
312
|
return { viewportWidth: measuredViewportWidth() } as O;
|
|
250
313
|
});
|
|
251
|
-
const itemSize = createMemo(() =>
|
|
314
|
+
const itemSize = createMemo(() => resolveListRowSize(virtualOptions()));
|
|
252
315
|
const overscan = createMemo(() => getObjectValue(virtualOptions(), "overscan") ?? 2);
|
|
253
316
|
const orientation = createMemo<Orientation>(
|
|
254
317
|
() => getObjectValue(virtualOptions(), "orientation") ?? "vertical",
|
|
@@ -309,6 +372,7 @@ export function Virtualizer<O>(props: VirtualizerProps<O>): JSX.Element {
|
|
|
309
372
|
return nextRange;
|
|
310
373
|
};
|
|
311
374
|
const getLayoutInfo = (index: number): LayoutInfo => {
|
|
375
|
+
layoutEpoch();
|
|
312
376
|
const ctx: VirtualizerLayoutInfoContext = {
|
|
313
377
|
viewportWidth: measuredViewportWidth(),
|
|
314
378
|
viewportHeight: measuredViewportSize(),
|
|
@@ -344,6 +408,35 @@ export function Virtualizer<O>(props: VirtualizerProps<O>): JSX.Element {
|
|
|
344
408
|
layoutInfoCache.set(index, nextInfo);
|
|
345
409
|
return nextInfo;
|
|
346
410
|
};
|
|
411
|
+
const getContentSize = (itemCount: number): Size => {
|
|
412
|
+
layoutEpoch();
|
|
413
|
+
const ctx: VirtualizerLayoutInfoContext = {
|
|
414
|
+
viewportWidth: measuredViewportWidth(),
|
|
415
|
+
viewportHeight: measuredViewportSize(),
|
|
416
|
+
};
|
|
417
|
+
const fromLayout = resolvedLayout().getContentSize?.(
|
|
418
|
+
itemCount,
|
|
419
|
+
ctx,
|
|
420
|
+
layoutOptionsWithViewport(),
|
|
421
|
+
);
|
|
422
|
+
if (fromLayout) return fromLayout;
|
|
423
|
+
const range = getVisibleRange(itemCount);
|
|
424
|
+
const visible = Math.max(0, range.end - range.start);
|
|
425
|
+
const main = range.offsetTop + visible * itemSize() + range.offsetBottom;
|
|
426
|
+
if (orientation() === "horizontal") {
|
|
427
|
+
return { width: main, height: Math.max(0, measuredViewportSize()) };
|
|
428
|
+
}
|
|
429
|
+
return { width: Math.max(0, measuredViewportWidth()), height: main };
|
|
430
|
+
};
|
|
431
|
+
const updateItemSize = (index: number, mainSize: number): boolean => {
|
|
432
|
+
const changed = resolvedLayout().updateItemSize?.(index, mainSize) ?? false;
|
|
433
|
+
if (changed) {
|
|
434
|
+
layoutInfoCache.clear();
|
|
435
|
+
visibleRangeCache.clear();
|
|
436
|
+
setLayoutEpoch((epoch) => epoch + 1);
|
|
437
|
+
}
|
|
438
|
+
return changed;
|
|
439
|
+
};
|
|
347
440
|
const getDropTargetFromPoint = (
|
|
348
441
|
point: Point,
|
|
349
442
|
itemCount: number,
|
|
@@ -711,6 +804,8 @@ export function Virtualizer<O>(props: VirtualizerProps<O>): JSX.Element {
|
|
|
711
804
|
orientation: orientation(),
|
|
712
805
|
getVisibleRange,
|
|
713
806
|
getLayoutInfo,
|
|
807
|
+
getContentSize,
|
|
808
|
+
updateItemSize,
|
|
714
809
|
getDropTargetFromPoint,
|
|
715
810
|
setDropTargetResolver: assignDropTargetResolver,
|
|
716
811
|
setDropTargetItemCountResolver: assignDropTargetItemCountResolver,
|
|
@@ -730,135 +825,302 @@ export function Virtualizer<O>(props: VirtualizerProps<O>): JSX.Element {
|
|
|
730
825
|
getKeyboardPageNavigationTarget,
|
|
731
826
|
},
|
|
732
827
|
renderDropIndicator: local.renderDropIndicator,
|
|
828
|
+
CollectionRoot,
|
|
829
|
+
CollectionBranch,
|
|
733
830
|
}));
|
|
734
831
|
|
|
735
|
-
const
|
|
832
|
+
const scrollRuntime: VirtualizerScrollRuntime = {
|
|
833
|
+
setScrollOffset,
|
|
834
|
+
setScrollOffsetX,
|
|
835
|
+
setViewportOffset,
|
|
836
|
+
setWindowViewportSize,
|
|
837
|
+
setMeasuredViewportSize,
|
|
838
|
+
setMeasuredViewportWidth,
|
|
839
|
+
allowsWindowScrolling,
|
|
840
|
+
};
|
|
841
|
+
|
|
842
|
+
// RAC `Virtualizer.tsx:71-96`: context-only — no DOM. The collection element
|
|
843
|
+
// is the scroller; CollectionRoot owns useScrollView against that ref.
|
|
844
|
+
return (
|
|
845
|
+
<CollectionRendererContext value={collectionRenderer()}>
|
|
846
|
+
<VirtualizerContext value={contextValue()}>
|
|
847
|
+
<VirtualizerOptionsContext
|
|
848
|
+
value={{
|
|
849
|
+
layout: resolvedLayout() as VirtualizerLayout<unknown>,
|
|
850
|
+
layoutOptions: resolvedLayoutOptions(),
|
|
851
|
+
shouldObserveItemSize: local.shouldObserveItemSize,
|
|
852
|
+
allowsWindowScrolling: allowsWindowScrolling(),
|
|
853
|
+
}}
|
|
854
|
+
>
|
|
855
|
+
<VirtualizerScrollRuntimeContext value={scrollRuntime}>
|
|
856
|
+
{local.children}
|
|
857
|
+
</VirtualizerScrollRuntimeContext>
|
|
858
|
+
</VirtualizerOptionsContext>
|
|
859
|
+
</VirtualizerContext>
|
|
860
|
+
</CollectionRendererContext>
|
|
861
|
+
);
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
function resolveScrollRef(
|
|
865
|
+
scrollRef: CollectionRootProps<unknown>["scrollRef"],
|
|
866
|
+
): HTMLElement | null {
|
|
867
|
+
if (!scrollRef) return null;
|
|
868
|
+
return scrollRef() ?? null;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
/**
|
|
872
|
+
* RAC `Virtualizer.tsx:99-151` CollectionRoot: owns virtualizer scroll against
|
|
873
|
+
* `scrollRef` (the collection element) and renders the single content div.
|
|
874
|
+
*/
|
|
875
|
+
function CollectionRoot<T>(props: CollectionRootProps<T>): JSX.Element {
|
|
876
|
+
const virtualizer = useVirtualizerContext();
|
|
877
|
+
const runtime = useContext(VirtualizerScrollRuntimeContext);
|
|
878
|
+
|
|
879
|
+
const scrollView = createScrollView({
|
|
880
|
+
getScrollElement: () => resolveScrollRef(props.scrollRef),
|
|
881
|
+
allowsWindowScrolling: () => runtime?.allowsWindowScrolling() ?? true,
|
|
882
|
+
onScrollPositionChange: (position) => {
|
|
883
|
+
runtime?.setScrollOffset(position.y);
|
|
884
|
+
runtime?.setScrollOffsetX(position.x);
|
|
885
|
+
},
|
|
886
|
+
onViewportOffsetChange: (offset) => runtime?.setViewportOffset(offset),
|
|
887
|
+
onSizeChange: (size) => {
|
|
888
|
+
runtime?.setMeasuredViewportSize(size.height);
|
|
889
|
+
runtime?.setMeasuredViewportWidth(size.width);
|
|
890
|
+
},
|
|
891
|
+
onWindowViewportChange: (height) => runtime?.setWindowViewportSize(height),
|
|
892
|
+
});
|
|
736
893
|
|
|
737
|
-
const
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
894
|
+
const itemCount = () => {
|
|
895
|
+
try {
|
|
896
|
+
return Array.from(props.collection ?? []).length;
|
|
897
|
+
} catch {
|
|
898
|
+
return 0;
|
|
899
|
+
}
|
|
743
900
|
};
|
|
744
901
|
|
|
745
|
-
const
|
|
746
|
-
if (
|
|
747
|
-
const
|
|
748
|
-
if (
|
|
902
|
+
const range = createMemo(() => {
|
|
903
|
+
if (!virtualizer) return null;
|
|
904
|
+
const count = itemCount();
|
|
905
|
+
if (count <= 0) return null;
|
|
906
|
+
// Geometry window only. Persisted focused keys render as absolutely
|
|
907
|
+
// positioned extras (PersistedVirtualItem) so scrollHeight stays the
|
|
908
|
+
// content extent. RAC VirtualizerItem does the same with layoutInfo.
|
|
909
|
+
return virtualizer.getVisibleRange(count);
|
|
910
|
+
});
|
|
911
|
+
|
|
912
|
+
// Keep collection getter allocations in a stable owner, independent of the
|
|
913
|
+
// wrapper's hydration-key order.
|
|
914
|
+
const contentProps = createMemo<JSX.HTMLAttributes<HTMLDivElement>>(() => {
|
|
915
|
+
const base = scrollView.contentProps();
|
|
916
|
+
const nextRange = range();
|
|
917
|
+
const count = itemCount();
|
|
918
|
+
const size = virtualizer && count > 0 ? virtualizer.getContentSize(count) : null;
|
|
919
|
+
const horizontal = virtualizer?.orientation === "horizontal";
|
|
920
|
+
const padStart = nextRange?.offsetTop ?? 0;
|
|
921
|
+
const padEnd = nextRange?.offsetBottom ?? 0;
|
|
922
|
+
// RAC `useScrollView` sizes the content div from `contentSize`. Windowing
|
|
923
|
+
// spacers stay so in-flow collections (GridList) still skip scrolled-off
|
|
924
|
+
// rows; `box-sizing: border-box` keeps that padding inside contentSize so
|
|
925
|
+
// absolute VirtualizerItem coordinates and the scroll extent agree.
|
|
926
|
+
return {
|
|
927
|
+
...base,
|
|
928
|
+
style: {
|
|
929
|
+
...(base.style as JSX.CSSProperties | undefined),
|
|
930
|
+
position: "relative",
|
|
931
|
+
"box-sizing": "border-box",
|
|
932
|
+
...(size && size.width > 0 ? { width: `${size.width}px` } : null),
|
|
933
|
+
...(size && size.height > 0 ? { height: `${size.height}px` } : null),
|
|
934
|
+
...(horizontal
|
|
935
|
+
? { "padding-left": `${padStart}px`, "padding-right": `${padEnd}px` }
|
|
936
|
+
: { "padding-top": `${padStart}px`, "padding-bottom": `${padEnd}px` }),
|
|
937
|
+
},
|
|
938
|
+
};
|
|
939
|
+
});
|
|
940
|
+
|
|
941
|
+
return (
|
|
942
|
+
<div {...contentProps()}>
|
|
943
|
+
{props.children ??
|
|
944
|
+
DefaultCollectionRenderer.CollectionRoot({
|
|
945
|
+
collection: props.collection,
|
|
946
|
+
renderDropIndicator: props.renderDropIndicator,
|
|
947
|
+
})}
|
|
948
|
+
</div>
|
|
949
|
+
);
|
|
950
|
+
}
|
|
951
|
+
|
|
952
|
+
function CollectionBranch<T>(props: CollectionBranchProps<T>): JSX.Element {
|
|
953
|
+
return DefaultCollectionRenderer.CollectionBranch(props);
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
/**
|
|
957
|
+
* RAC `layoutInfoToStyle` (`react-aria/src/virtualizer/VirtualizerItem.tsx`).
|
|
958
|
+
* ListLayout sets `allowOverflow`, so overflow stays visible.
|
|
959
|
+
*/
|
|
960
|
+
export function layoutInfoToStyle(layoutInfo: LayoutInfo, dir: "ltr" | "rtl"): JSX.CSSProperties {
|
|
961
|
+
const xProperty = dir === "rtl" ? "right" : "left";
|
|
962
|
+
return {
|
|
963
|
+
position: "absolute",
|
|
964
|
+
overflow: "visible",
|
|
965
|
+
contain: "size layout style",
|
|
966
|
+
"z-index": 0,
|
|
967
|
+
top: `${layoutInfo.rect.y}px`,
|
|
968
|
+
[xProperty]: `${layoutInfo.rect.x}px`,
|
|
969
|
+
width: `${layoutInfo.rect.width}px`,
|
|
970
|
+
height: `${layoutInfo.rect.height}px`,
|
|
749
971
|
};
|
|
972
|
+
}
|
|
750
973
|
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
974
|
+
/**
|
|
975
|
+
* RAC VirtualizerItem (`react-aria/src/virtualizer/VirtualizerItem.tsx` +
|
|
976
|
+
* `layoutInfoToStyle`) wraps every visible view in `role="presentation"` with
|
|
977
|
+
* `contain: size layout style` and a definite width/height from layoutInfo.
|
|
978
|
+
* Pass `index` so the item is absolutely positioned; without it the wrapper
|
|
979
|
+
* stays in-flow (GridList still windows with CollectionRoot padding spacers).
|
|
980
|
+
* jsdom reports 0 for unstyled offsetHeight; skip containment then so
|
|
981
|
+
* collection tests keep seeing the children.
|
|
982
|
+
*/
|
|
983
|
+
export function VirtualizerItem(props: {
|
|
984
|
+
children: JSX.Element;
|
|
985
|
+
index?: number | Accessor<number>;
|
|
986
|
+
}): JSX.Element {
|
|
987
|
+
const virtualizer = useVirtualizerContext();
|
|
988
|
+
const options = useContext(VirtualizerOptionsContext);
|
|
989
|
+
const locale = useLocale();
|
|
990
|
+
const [box, setBox] = createSignal<{ width: number; height: number } | null>(null);
|
|
991
|
+
const [el, setEl] = createSignal<HTMLDivElement | null>(null);
|
|
992
|
+
const resolvedIndex = (): number | null => {
|
|
993
|
+
const value = props.index;
|
|
994
|
+
if (value == null) return null;
|
|
995
|
+
return typeof value === "function" ? value() : value;
|
|
996
|
+
};
|
|
997
|
+
const layout = (): LayoutInfo | null => {
|
|
998
|
+
const index = resolvedIndex();
|
|
999
|
+
if (index == null || !virtualizer) return null;
|
|
1000
|
+
return virtualizer.getLayoutInfo(index);
|
|
759
1001
|
};
|
|
760
1002
|
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
let scrollEndTimeout: ReturnType<typeof setTimeout> | undefined;
|
|
764
|
-
onCleanup(() => {
|
|
765
|
-
if (scrollFrame != null) cancelAnimationFrame(scrollFrame);
|
|
766
|
-
if (scrollEndTimeout != null) clearTimeout(scrollEndTimeout);
|
|
767
|
-
});
|
|
1003
|
+
createTrackedEffect(() => {
|
|
1004
|
+
const _s2Cleanups: Array<() => void> = [];
|
|
768
1005
|
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
1006
|
+
const node = el();
|
|
1007
|
+
if (!node) return;
|
|
1008
|
+
const info = layout();
|
|
1009
|
+
const index = resolvedIndex();
|
|
773
1010
|
|
|
774
|
-
const
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
1011
|
+
const measureIndexed = () => {
|
|
1012
|
+
if (info == null || index == null || !virtualizer) return;
|
|
1013
|
+
// RAC useVirtualizerItem.ts:37-42 — a hidden collection reports 0 and
|
|
1014
|
+
// then never recovers when shown. Skip the write.
|
|
1015
|
+
if (!isElementVisible(node)) return;
|
|
1016
|
+
if (!info.estimatedSize && !options?.shouldObserveItemSize) return;
|
|
1017
|
+
const prevHeight = node.style.height;
|
|
1018
|
+
const prevWidth = node.style.width;
|
|
1019
|
+
const prevContain = node.style.contain;
|
|
1020
|
+
node.style.contain = "";
|
|
1021
|
+
node.style.height = "";
|
|
1022
|
+
node.style.width = "";
|
|
1023
|
+
const width = node.scrollWidth;
|
|
1024
|
+
const height = node.scrollHeight;
|
|
1025
|
+
node.style.height = prevHeight;
|
|
1026
|
+
node.style.width = prevWidth;
|
|
1027
|
+
node.style.contain = prevContain;
|
|
1028
|
+
if (height <= 0 || width <= 0) return;
|
|
1029
|
+
const main = virtualizer.orientation === "horizontal" ? width : height;
|
|
1030
|
+
virtualizer.updateItemSize(index, main);
|
|
778
1031
|
};
|
|
779
|
-
window.addEventListener("resize", handleResize);
|
|
780
1032
|
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
1033
|
+
if (info != null && index != null && virtualizer) {
|
|
1034
|
+
// RAC layout effect: estimated rows measure once even when observation
|
|
1035
|
+
// is off. Two rAFs cover jsdom's first 0-height layout.
|
|
1036
|
+
if (info.estimatedSize) {
|
|
1037
|
+
measureIndexed();
|
|
1038
|
+
const frame = requestAnimationFrame(() => {
|
|
1039
|
+
measureIndexed();
|
|
1040
|
+
requestAnimationFrame(measureIndexed);
|
|
1041
|
+
});
|
|
1042
|
+
_s2Cleanups.push(() => cancelAnimationFrame(frame));
|
|
1043
|
+
}
|
|
1044
|
+
// RAC ResizeObserver on the wrapper's direct children, not the wrapper
|
|
1045
|
+
// (`useVirtualizerItem.ts:63-87`). The wrapper height is layout-fixed.
|
|
1046
|
+
if (options?.shouldObserveItemSize && typeof ResizeObserver !== "undefined") {
|
|
1047
|
+
const resizeObserver = new ResizeObserver(() => measureIndexed());
|
|
1048
|
+
for (const child of node.children) {
|
|
1049
|
+
resizeObserver.observe(child);
|
|
1050
|
+
}
|
|
1051
|
+
_s2Cleanups.push(() => resizeObserver.disconnect());
|
|
1052
|
+
}
|
|
1053
|
+
// A tracked effect's cleanup is its return value; a bare return here
|
|
1054
|
+
// would strand the frame and the observer registered above.
|
|
1055
|
+
return () => {
|
|
1056
|
+
for (const c of _s2Cleanups) c();
|
|
1057
|
+
};
|
|
785
1058
|
}
|
|
786
1059
|
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
if (
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
target === document ||
|
|
796
|
-
target === (window as unknown as Node) ||
|
|
797
|
-
(target instanceof Node && target.contains(containerRef));
|
|
798
|
-
if (!isContainer && !isAncestor) return;
|
|
799
|
-
// An ancestor/page scroll only matters when the collection scrolls with the page.
|
|
800
|
-
if (!isContainer && !allowsWindowScrolling()) return;
|
|
801
|
-
|
|
802
|
-
// Flag active scrolling and (re)arm the reset for 300ms after the last scroll.
|
|
803
|
-
// Our handler is already rAF-throttled, so a plain clear/reset debounce matches
|
|
804
|
-
// upstream's scrollEndTime bookkeeping without the extra accounting.
|
|
805
|
-
if (!isScrolling()) setIsScrolling(true);
|
|
806
|
-
if (scrollEndTimeout != null) clearTimeout(scrollEndTimeout);
|
|
807
|
-
scrollEndTimeout = setTimeout(() => {
|
|
808
|
-
scrollEndTimeout = undefined;
|
|
809
|
-
setIsScrolling(false);
|
|
810
|
-
}, 300);
|
|
811
|
-
|
|
812
|
-
if (scrollFrame != null) cancelAnimationFrame(scrollFrame);
|
|
813
|
-
scrollFrame = requestAnimationFrame(() => {
|
|
814
|
-
scrollFrame = undefined;
|
|
815
|
-
if (isContainer) {
|
|
816
|
-
const next = Math.max(0, containerRef!.scrollTop);
|
|
817
|
-
if (next !== scrollOffset()) setScrollOffset(next);
|
|
818
|
-
const nextX = Math.max(0, containerRef!.scrollLeft);
|
|
819
|
-
if (nextX !== scrollOffsetX()) setScrollOffsetX(nextX);
|
|
820
|
-
} else {
|
|
821
|
-
updateViewportOffset();
|
|
822
|
-
}
|
|
823
|
-
updateViewportSize();
|
|
1060
|
+
const readBox = () => {
|
|
1061
|
+
const child = node.firstElementChild as HTMLElement | null;
|
|
1062
|
+
const height = child?.offsetHeight ?? 0;
|
|
1063
|
+
const width = node.clientWidth;
|
|
1064
|
+
if (height <= 0 || width <= 0) return;
|
|
1065
|
+
setBox((current) => {
|
|
1066
|
+
if (current?.width === width && current.height === height) return current;
|
|
1067
|
+
return { width, height };
|
|
824
1068
|
});
|
|
825
1069
|
};
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
resizeObserver?.disconnect();
|
|
831
|
-
document.removeEventListener("scroll", handleDocumentScroll, true);
|
|
1070
|
+
readBox();
|
|
1071
|
+
const frame = requestAnimationFrame(() => {
|
|
1072
|
+
readBox();
|
|
1073
|
+
requestAnimationFrame(readBox);
|
|
832
1074
|
});
|
|
1075
|
+
_s2Cleanups.push(() => cancelAnimationFrame(frame));
|
|
1076
|
+
|
|
1077
|
+
return () => {
|
|
1078
|
+
for (const c of _s2Cleanups) c();
|
|
1079
|
+
};
|
|
833
1080
|
});
|
|
834
1081
|
|
|
1082
|
+
const style = (): JSX.CSSProperties => {
|
|
1083
|
+
const info = layout();
|
|
1084
|
+
if (info) return layoutInfoToStyle(info, locale().direction);
|
|
1085
|
+
return {
|
|
1086
|
+
position: "relative",
|
|
1087
|
+
"z-index": 0,
|
|
1088
|
+
overflow: "visible",
|
|
1089
|
+
contain: box() ? "size layout style" : undefined,
|
|
1090
|
+
width: "100%",
|
|
1091
|
+
height: box() ? `${box()!.height}px` : undefined,
|
|
1092
|
+
};
|
|
1093
|
+
};
|
|
1094
|
+
|
|
835
1095
|
return (
|
|
836
|
-
<
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
1096
|
+
<div role="presentation" ref={setEl} style={style()}>
|
|
1097
|
+
{props.children}
|
|
1098
|
+
</div>
|
|
1099
|
+
);
|
|
1100
|
+
}
|
|
1101
|
+
|
|
1102
|
+
/**
|
|
1103
|
+
* RAC VirtualizerItem lays persisted (focused / drop-target) views with
|
|
1104
|
+
* layoutInfo absolute coordinates so they stay mounted off-screen without
|
|
1105
|
+
* expanding the in-flow window or the content extent.
|
|
1106
|
+
*/
|
|
1107
|
+
export function PersistedVirtualItem(props: { index: number; children: JSX.Element }): JSX.Element {
|
|
1108
|
+
const virtualizer = useVirtualizerContext();
|
|
1109
|
+
const layout = () => virtualizer?.getLayoutInfo(props.index);
|
|
1110
|
+
const horizontal = () => virtualizer?.orientation === "horizontal";
|
|
1111
|
+
return (
|
|
1112
|
+
<div
|
|
1113
|
+
data-persisted-virtual-item=""
|
|
1114
|
+
style={{
|
|
1115
|
+
position: "absolute",
|
|
1116
|
+
top: horizontal() ? 0 : `${layout()?.rect.y ?? 0}px`,
|
|
1117
|
+
left: horizontal() ? `${layout()?.rect.x ?? 0}px` : 0,
|
|
1118
|
+
width: layout()?.rect.width ? `${layout()?.rect.width}px` : undefined,
|
|
1119
|
+
height: layout()?.rect.height ? `${layout()?.rect.height}px` : undefined,
|
|
1120
|
+
}}
|
|
1121
|
+
>
|
|
1122
|
+
{props.children}
|
|
1123
|
+
</div>
|
|
862
1124
|
);
|
|
863
1125
|
}
|
|
864
1126
|
|