@depup/react-aria-components 1.16.0-depup.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 +201 -0
- package/README.md +31 -0
- package/changes.json +10 -0
- package/dist/Autocomplete.main.js +78 -0
- package/dist/Autocomplete.main.js.map +1 -0
- package/dist/Autocomplete.mjs +67 -0
- package/dist/Autocomplete.module.js +67 -0
- package/dist/Autocomplete.module.js.map +1 -0
- package/dist/Breadcrumbs.main.js +103 -0
- package/dist/Breadcrumbs.main.js.map +1 -0
- package/dist/Breadcrumbs.mjs +92 -0
- package/dist/Breadcrumbs.module.js +92 -0
- package/dist/Breadcrumbs.module.js.map +1 -0
- package/dist/Button.main.js +123 -0
- package/dist/Button.main.js.map +1 -0
- package/dist/Button.mjs +113 -0
- package/dist/Button.module.js +113 -0
- package/dist/Button.module.js.map +1 -0
- package/dist/Calendar.main.js +364 -0
- package/dist/Calendar.main.js.map +1 -0
- package/dist/Calendar.mjs +345 -0
- package/dist/Calendar.module.js +345 -0
- package/dist/Calendar.module.js.map +1 -0
- package/dist/Checkbox.main.js +188 -0
- package/dist/Checkbox.main.js.map +1 -0
- package/dist/Checkbox.mjs +176 -0
- package/dist/Checkbox.module.js +176 -0
- package/dist/Checkbox.module.js.map +1 -0
- package/dist/Collection.main.js +105 -0
- package/dist/Collection.main.js.map +1 -0
- package/dist/Collection.mjs +91 -0
- package/dist/Collection.module.js +91 -0
- package/dist/Collection.module.js.map +1 -0
- package/dist/ColorArea.main.js +80 -0
- package/dist/ColorArea.main.js.map +1 -0
- package/dist/ColorArea.mjs +70 -0
- package/dist/ColorArea.module.js +70 -0
- package/dist/ColorArea.module.js.map +1 -0
- package/dist/ColorField.main.js +168 -0
- package/dist/ColorField.main.js.map +1 -0
- package/dist/ColorField.mjs +158 -0
- package/dist/ColorField.module.js +158 -0
- package/dist/ColorField.module.js.map +1 -0
- package/dist/ColorPicker.main.js +102 -0
- package/dist/ColorPicker.main.js.map +1 -0
- package/dist/ColorPicker.mjs +91 -0
- package/dist/ColorPicker.module.js +91 -0
- package/dist/ColorPicker.module.js.map +1 -0
- package/dist/ColorSlider.main.js +112 -0
- package/dist/ColorSlider.main.js.map +1 -0
- package/dist/ColorSlider.mjs +102 -0
- package/dist/ColorSlider.module.js +102 -0
- package/dist/ColorSlider.module.js.map +1 -0
- package/dist/ColorSwatch.main.js +44 -0
- package/dist/ColorSwatch.main.js.map +1 -0
- package/dist/ColorSwatch.mjs +34 -0
- package/dist/ColorSwatch.module.js +34 -0
- package/dist/ColorSwatch.module.js.map +1 -0
- package/dist/ColorSwatchPicker.main.js +102 -0
- package/dist/ColorSwatchPicker.main.js.map +1 -0
- package/dist/ColorSwatchPicker.mjs +95 -0
- package/dist/ColorSwatchPicker.module.js +95 -0
- package/dist/ColorSwatchPicker.module.js.map +1 -0
- package/dist/ColorThumb.main.js +67 -0
- package/dist/ColorThumb.main.js.map +1 -0
- package/dist/ColorThumb.mjs +57 -0
- package/dist/ColorThumb.module.js +57 -0
- package/dist/ColorThumb.module.js.map +1 -0
- package/dist/ColorWheel.main.js +102 -0
- package/dist/ColorWheel.main.js.map +1 -0
- package/dist/ColorWheel.mjs +90 -0
- package/dist/ColorWheel.module.js +90 -0
- package/dist/ColorWheel.module.js.map +1 -0
- package/dist/ComboBox.main.js +322 -0
- package/dist/ComboBox.main.js.map +1 -0
- package/dist/ComboBox.mjs +309 -0
- package/dist/ComboBox.module.js +309 -0
- package/dist/ComboBox.module.js.map +1 -0
- package/dist/DateField.main.js +361 -0
- package/dist/DateField.main.js.map +1 -0
- package/dist/DateField.mjs +345 -0
- package/dist/DateField.module.js +345 -0
- package/dist/DateField.module.js.map +1 -0
- package/dist/DatePicker.main.js +342 -0
- package/dist/DatePicker.main.js.map +1 -0
- package/dist/DatePicker.mjs +328 -0
- package/dist/DatePicker.module.js +328 -0
- package/dist/DatePicker.module.js.map +1 -0
- package/dist/Dialog.main.js +167 -0
- package/dist/Dialog.main.js.map +1 -0
- package/dist/Dialog.mjs +155 -0
- package/dist/Dialog.module.js +155 -0
- package/dist/Dialog.module.js.map +1 -0
- package/dist/Disclosure.main.js +171 -0
- package/dist/Disclosure.main.js.map +1 -0
- package/dist/Disclosure.mjs +157 -0
- package/dist/Disclosure.module.js +157 -0
- package/dist/Disclosure.module.js.map +1 -0
- package/dist/DragAndDrop.main.js +103 -0
- package/dist/DragAndDrop.main.js.map +1 -0
- package/dist/DragAndDrop.mjs +90 -0
- package/dist/DragAndDrop.module.js +90 -0
- package/dist/DragAndDrop.module.js.map +1 -0
- package/dist/DropZone.main.js +127 -0
- package/dist/DropZone.main.js.map +1 -0
- package/dist/DropZone.mjs +121 -0
- package/dist/DropZone.module.js +121 -0
- package/dist/DropZone.module.js.map +1 -0
- package/dist/FieldError.main.js +61 -0
- package/dist/FieldError.main.js.map +1 -0
- package/dist/FieldError.mjs +51 -0
- package/dist/FieldError.module.js +51 -0
- package/dist/FieldError.module.js.map +1 -0
- package/dist/FileTrigger.main.js +60 -0
- package/dist/FileTrigger.main.js.map +1 -0
- package/dist/FileTrigger.mjs +51 -0
- package/dist/FileTrigger.module.js +51 -0
- package/dist/FileTrigger.module.js.map +1 -0
- package/dist/Form.main.js +49 -0
- package/dist/Form.main.js.map +1 -0
- package/dist/Form.mjs +39 -0
- package/dist/Form.module.js +39 -0
- package/dist/Form.module.js.map +1 -0
- package/dist/GridList.main.js +589 -0
- package/dist/GridList.main.js.map +1 -0
- package/dist/GridList.mjs +573 -0
- package/dist/GridList.module.js +573 -0
- package/dist/GridList.module.js.map +1 -0
- package/dist/Group.main.js +72 -0
- package/dist/Group.main.js.map +1 -0
- package/dist/Group.mjs +62 -0
- package/dist/Group.module.js +62 -0
- package/dist/Group.module.js.map +1 -0
- package/dist/Header.main.js +40 -0
- package/dist/Header.main.js.map +1 -0
- package/dist/Header.mjs +30 -0
- package/dist/Header.module.js +30 -0
- package/dist/Header.module.js.map +1 -0
- package/dist/Heading.main.js +40 -0
- package/dist/Heading.main.js.map +1 -0
- package/dist/Heading.mjs +31 -0
- package/dist/Heading.module.js +31 -0
- package/dist/Heading.module.js.map +1 -0
- package/dist/HiddenDateInput.main.js +126 -0
- package/dist/HiddenDateInput.main.js.map +1 -0
- package/dist/HiddenDateInput.mjs +117 -0
- package/dist/HiddenDateInput.module.js +117 -0
- package/dist/HiddenDateInput.module.js.map +1 -0
- package/dist/Input.main.js +72 -0
- package/dist/Input.main.js.map +1 -0
- package/dist/Input.mjs +62 -0
- package/dist/Input.module.js +62 -0
- package/dist/Input.module.js.map +1 -0
- package/dist/Keyboard.main.js +38 -0
- package/dist/Keyboard.main.js.map +1 -0
- package/dist/Keyboard.mjs +28 -0
- package/dist/Keyboard.module.js +28 -0
- package/dist/Keyboard.module.js.map +1 -0
- package/dist/Label.main.js +43 -0
- package/dist/Label.main.js.map +1 -0
- package/dist/Label.mjs +33 -0
- package/dist/Label.module.js +33 -0
- package/dist/Label.module.js.map +1 -0
- package/dist/Link.main.js +72 -0
- package/dist/Link.main.js.map +1 -0
- package/dist/Link.mjs +62 -0
- package/dist/Link.module.js +62 -0
- package/dist/Link.module.js.map +1 -0
- package/dist/ListBox.main.js +477 -0
- package/dist/ListBox.main.js.map +1 -0
- package/dist/ListBox.mjs +463 -0
- package/dist/ListBox.module.js +463 -0
- package/dist/ListBox.module.js.map +1 -0
- package/dist/Menu.main.js +459 -0
- package/dist/Menu.main.js.map +1 -0
- package/dist/Menu.mjs +443 -0
- package/dist/Menu.module.js +443 -0
- package/dist/Menu.module.js.map +1 -0
- package/dist/Meter.main.js +72 -0
- package/dist/Meter.main.js.map +1 -0
- package/dist/Meter.mjs +62 -0
- package/dist/Meter.module.js +62 -0
- package/dist/Meter.module.js.map +1 -0
- package/dist/Modal.main.js +191 -0
- package/dist/Modal.main.js.map +1 -0
- package/dist/Modal.mjs +180 -0
- package/dist/Modal.module.js +180 -0
- package/dist/Modal.module.js.map +1 -0
- package/dist/NumberField.main.js +147 -0
- package/dist/NumberField.main.js.map +1 -0
- package/dist/NumberField.mjs +136 -0
- package/dist/NumberField.module.js +136 -0
- package/dist/NumberField.module.js.map +1 -0
- package/dist/OverlayArrow.main.js +64 -0
- package/dist/OverlayArrow.main.js.map +1 -0
- package/dist/OverlayArrow.mjs +54 -0
- package/dist/OverlayArrow.module.js +54 -0
- package/dist/OverlayArrow.module.js.map +1 -0
- package/dist/Popover.main.js +196 -0
- package/dist/Popover.main.js.map +1 -0
- package/dist/Popover.mjs +186 -0
- package/dist/Popover.module.js +186 -0
- package/dist/Popover.module.js.map +1 -0
- package/dist/ProgressBar.main.js +73 -0
- package/dist/ProgressBar.main.js.map +1 -0
- package/dist/ProgressBar.mjs +63 -0
- package/dist/ProgressBar.module.js +63 -0
- package/dist/ProgressBar.module.js.map +1 -0
- package/dist/RSPContexts.main.js +37 -0
- package/dist/RSPContexts.main.js.map +1 -0
- package/dist/RSPContexts.mjs +25 -0
- package/dist/RSPContexts.module.js +25 -0
- package/dist/RSPContexts.module.js.map +1 -0
- package/dist/RadioGroup.main.js +184 -0
- package/dist/RadioGroup.main.js.map +1 -0
- package/dist/RadioGroup.mjs +171 -0
- package/dist/RadioGroup.module.js +171 -0
- package/dist/RadioGroup.module.js.map +1 -0
- package/dist/SearchField.main.js +140 -0
- package/dist/SearchField.main.js.map +1 -0
- package/dist/SearchField.mjs +130 -0
- package/dist/SearchField.module.js +130 -0
- package/dist/SearchField.module.js.map +1 -0
- package/dist/Select.main.js +324 -0
- package/dist/Select.main.js.map +1 -0
- package/dist/Select.mjs +315 -0
- package/dist/Select.module.js +315 -0
- package/dist/Select.module.js.map +1 -0
- package/dist/SelectionIndicator.main.js +45 -0
- package/dist/SelectionIndicator.main.js.map +1 -0
- package/dist/SelectionIndicator.mjs +35 -0
- package/dist/SelectionIndicator.module.js +35 -0
- package/dist/SelectionIndicator.module.js.map +1 -0
- package/dist/Separator.main.js +71 -0
- package/dist/Separator.main.js.map +1 -0
- package/dist/Separator.mjs +61 -0
- package/dist/Separator.module.js +61 -0
- package/dist/Separator.module.js.map +1 -0
- package/dist/SharedElementTransition.main.js +140 -0
- package/dist/SharedElementTransition.main.js.map +1 -0
- package/dist/SharedElementTransition.mjs +130 -0
- package/dist/SharedElementTransition.module.js +130 -0
- package/dist/SharedElementTransition.module.js.map +1 -0
- package/dist/Slider.main.js +220 -0
- package/dist/Slider.main.js.map +1 -0
- package/dist/Slider.mjs +204 -0
- package/dist/Slider.module.js +204 -0
- package/dist/Slider.module.js.map +1 -0
- package/dist/Switch.main.js +89 -0
- package/dist/Switch.main.js.map +1 -0
- package/dist/Switch.mjs +79 -0
- package/dist/Switch.module.js +79 -0
- package/dist/Switch.module.js.map +1 -0
- package/dist/Table.main.js +1171 -0
- package/dist/Table.main.js.map +1 -0
- package/dist/Table.mjs +1154 -0
- package/dist/Table.module.js +1154 -0
- package/dist/Table.module.js.map +1 -0
- package/dist/TableLayout.main.js +38 -0
- package/dist/TableLayout.main.js.map +1 -0
- package/dist/TableLayout.mjs +33 -0
- package/dist/TableLayout.module.js +33 -0
- package/dist/TableLayout.module.js.map +1 -0
- package/dist/Tabs.main.js +330 -0
- package/dist/Tabs.main.js.map +1 -0
- package/dist/Tabs.mjs +315 -0
- package/dist/Tabs.module.js +315 -0
- package/dist/Tabs.module.js.map +1 -0
- package/dist/TagGroup.main.js +255 -0
- package/dist/TagGroup.main.js.map +1 -0
- package/dist/TagGroup.mjs +242 -0
- package/dist/TagGroup.module.js +242 -0
- package/dist/TagGroup.module.js.map +1 -0
- package/dist/Text.main.js +41 -0
- package/dist/Text.main.js.map +1 -0
- package/dist/Text.mjs +31 -0
- package/dist/Text.module.js +31 -0
- package/dist/Text.module.js.map +1 -0
- package/dist/TextArea.main.js +57 -0
- package/dist/TextArea.main.js.map +1 -0
- package/dist/TextArea.mjs +47 -0
- package/dist/TextArea.module.js +47 -0
- package/dist/TextArea.module.js.map +1 -0
- package/dist/TextField.main.js +145 -0
- package/dist/TextField.main.js.map +1 -0
- package/dist/TextField.mjs +135 -0
- package/dist/TextField.module.js +135 -0
- package/dist/TextField.module.js.map +1 -0
- package/dist/Toast.main.js +183 -0
- package/dist/Toast.main.js.map +1 -0
- package/dist/Toast.mjs +170 -0
- package/dist/Toast.module.js +170 -0
- package/dist/Toast.module.js.map +1 -0
- package/dist/ToggleButton.main.js +96 -0
- package/dist/ToggleButton.main.js.map +1 -0
- package/dist/ToggleButton.mjs +86 -0
- package/dist/ToggleButton.module.js +86 -0
- package/dist/ToggleButton.module.js.map +1 -0
- package/dist/ToggleButtonGroup.main.js +66 -0
- package/dist/ToggleButtonGroup.main.js.map +1 -0
- package/dist/ToggleButtonGroup.mjs +55 -0
- package/dist/ToggleButtonGroup.module.js +55 -0
- package/dist/ToggleButtonGroup.module.js.map +1 -0
- package/dist/Toolbar.main.js +55 -0
- package/dist/Toolbar.main.js.map +1 -0
- package/dist/Toolbar.mjs +45 -0
- package/dist/Toolbar.module.js +45 -0
- package/dist/Toolbar.module.js.map +1 -0
- package/dist/Tooltip.main.js +132 -0
- package/dist/Tooltip.main.js.map +1 -0
- package/dist/Tooltip.mjs +120 -0
- package/dist/Tooltip.module.js +120 -0
- package/dist/Tooltip.module.js.map +1 -0
- package/dist/Tree.main.js +834 -0
- package/dist/Tree.main.js.map +1 -0
- package/dist/Tree.mjs +818 -0
- package/dist/Tree.module.js +818 -0
- package/dist/Tree.module.js.map +1 -0
- package/dist/TreeDropTargetDelegate.main.js +216 -0
- package/dist/TreeDropTargetDelegate.main.js.map +1 -0
- package/dist/TreeDropTargetDelegate.mjs +211 -0
- package/dist/TreeDropTargetDelegate.module.js +211 -0
- package/dist/TreeDropTargetDelegate.module.js.map +1 -0
- package/dist/Virtualizer.main.js +135 -0
- package/dist/Virtualizer.main.js.map +1 -0
- package/dist/Virtualizer.mjs +126 -0
- package/dist/Virtualizer.module.js +126 -0
- package/dist/Virtualizer.module.js.map +1 -0
- package/dist/ar-AE.main.js +9 -0
- package/dist/ar-AE.main.js.map +1 -0
- package/dist/ar-AE.mjs +11 -0
- package/dist/ar-AE.module.js +11 -0
- package/dist/ar-AE.module.js.map +1 -0
- package/dist/bg-BG.main.js +9 -0
- package/dist/bg-BG.main.js.map +1 -0
- package/dist/bg-BG.mjs +11 -0
- package/dist/bg-BG.module.js +11 -0
- package/dist/bg-BG.module.js.map +1 -0
- package/dist/cs-CZ.main.js +9 -0
- package/dist/cs-CZ.main.js.map +1 -0
- package/dist/cs-CZ.mjs +11 -0
- package/dist/cs-CZ.module.js +11 -0
- package/dist/cs-CZ.module.js.map +1 -0
- package/dist/da-DK.main.js +9 -0
- package/dist/da-DK.main.js.map +1 -0
- package/dist/da-DK.mjs +11 -0
- package/dist/da-DK.module.js +11 -0
- package/dist/da-DK.module.js.map +1 -0
- package/dist/de-DE.main.js +9 -0
- package/dist/de-DE.main.js.map +1 -0
- package/dist/de-DE.mjs +11 -0
- package/dist/de-DE.module.js +11 -0
- package/dist/de-DE.module.js.map +1 -0
- package/dist/el-GR.main.js +9 -0
- package/dist/el-GR.main.js.map +1 -0
- package/dist/el-GR.mjs +11 -0
- package/dist/el-GR.module.js +11 -0
- package/dist/el-GR.module.js.map +1 -0
- package/dist/en-US.main.js +9 -0
- package/dist/en-US.main.js.map +1 -0
- package/dist/en-US.mjs +11 -0
- package/dist/en-US.module.js +11 -0
- package/dist/en-US.module.js.map +1 -0
- package/dist/es-ES.main.js +9 -0
- package/dist/es-ES.main.js.map +1 -0
- package/dist/es-ES.mjs +11 -0
- package/dist/es-ES.module.js +11 -0
- package/dist/es-ES.module.js.map +1 -0
- package/dist/et-EE.main.js +9 -0
- package/dist/et-EE.main.js.map +1 -0
- package/dist/et-EE.mjs +11 -0
- package/dist/et-EE.module.js +11 -0
- package/dist/et-EE.module.js.map +1 -0
- package/dist/fi-FI.main.js +9 -0
- package/dist/fi-FI.main.js.map +1 -0
- package/dist/fi-FI.mjs +11 -0
- package/dist/fi-FI.module.js +11 -0
- package/dist/fi-FI.module.js.map +1 -0
- package/dist/fr-FR.main.js +9 -0
- package/dist/fr-FR.main.js.map +1 -0
- package/dist/fr-FR.mjs +11 -0
- package/dist/fr-FR.module.js +11 -0
- package/dist/fr-FR.module.js.map +1 -0
- package/dist/he-IL.main.js +9 -0
- package/dist/he-IL.main.js.map +1 -0
- package/dist/he-IL.mjs +11 -0
- package/dist/he-IL.module.js +11 -0
- package/dist/he-IL.module.js.map +1 -0
- package/dist/hr-HR.main.js +9 -0
- package/dist/hr-HR.main.js.map +1 -0
- package/dist/hr-HR.mjs +11 -0
- package/dist/hr-HR.module.js +11 -0
- package/dist/hr-HR.module.js.map +1 -0
- package/dist/hu-HU.main.js +9 -0
- package/dist/hu-HU.main.js.map +1 -0
- package/dist/hu-HU.mjs +11 -0
- package/dist/hu-HU.module.js +11 -0
- package/dist/hu-HU.module.js.map +1 -0
- package/dist/import.mjs +161 -0
- package/dist/intlStrings.main.js +108 -0
- package/dist/intlStrings.main.js.map +1 -0
- package/dist/intlStrings.mjs +110 -0
- package/dist/intlStrings.module.js +110 -0
- package/dist/intlStrings.module.js.map +1 -0
- package/dist/it-IT.main.js +9 -0
- package/dist/it-IT.main.js.map +1 -0
- package/dist/it-IT.mjs +11 -0
- package/dist/it-IT.module.js +11 -0
- package/dist/it-IT.module.js.map +1 -0
- package/dist/ja-JP.main.js +9 -0
- package/dist/ja-JP.main.js.map +1 -0
- package/dist/ja-JP.mjs +11 -0
- package/dist/ja-JP.module.js +11 -0
- package/dist/ja-JP.module.js.map +1 -0
- package/dist/ko-KR.main.js +9 -0
- package/dist/ko-KR.main.js.map +1 -0
- package/dist/ko-KR.mjs +11 -0
- package/dist/ko-KR.module.js +11 -0
- package/dist/ko-KR.module.js.map +1 -0
- package/dist/lt-LT.main.js +9 -0
- package/dist/lt-LT.main.js.map +1 -0
- package/dist/lt-LT.mjs +11 -0
- package/dist/lt-LT.module.js +11 -0
- package/dist/lt-LT.module.js.map +1 -0
- package/dist/lv-LV.main.js +9 -0
- package/dist/lv-LV.main.js.map +1 -0
- package/dist/lv-LV.mjs +11 -0
- package/dist/lv-LV.module.js +11 -0
- package/dist/lv-LV.module.js.map +1 -0
- package/dist/main.js +430 -0
- package/dist/main.js.map +1 -0
- package/dist/module.js +161 -0
- package/dist/module.js.map +1 -0
- package/dist/nb-NO.main.js +9 -0
- package/dist/nb-NO.main.js.map +1 -0
- package/dist/nb-NO.mjs +11 -0
- package/dist/nb-NO.module.js +11 -0
- package/dist/nb-NO.module.js.map +1 -0
- package/dist/nl-NL.main.js +9 -0
- package/dist/nl-NL.main.js.map +1 -0
- package/dist/nl-NL.mjs +11 -0
- package/dist/nl-NL.module.js +11 -0
- package/dist/nl-NL.module.js.map +1 -0
- package/dist/pl-PL.main.js +9 -0
- package/dist/pl-PL.main.js.map +1 -0
- package/dist/pl-PL.mjs +11 -0
- package/dist/pl-PL.module.js +11 -0
- package/dist/pl-PL.module.js.map +1 -0
- package/dist/pt-BR.main.js +9 -0
- package/dist/pt-BR.main.js.map +1 -0
- package/dist/pt-BR.mjs +11 -0
- package/dist/pt-BR.module.js +11 -0
- package/dist/pt-BR.module.js.map +1 -0
- package/dist/pt-PT.main.js +9 -0
- package/dist/pt-PT.main.js.map +1 -0
- package/dist/pt-PT.mjs +11 -0
- package/dist/pt-PT.module.js +11 -0
- package/dist/pt-PT.module.js.map +1 -0
- package/dist/ro-RO.main.js +9 -0
- package/dist/ro-RO.main.js.map +1 -0
- package/dist/ro-RO.mjs +11 -0
- package/dist/ro-RO.module.js +11 -0
- package/dist/ro-RO.module.js.map +1 -0
- package/dist/ru-RU.main.js +9 -0
- package/dist/ru-RU.main.js.map +1 -0
- package/dist/ru-RU.mjs +11 -0
- package/dist/ru-RU.module.js +11 -0
- package/dist/ru-RU.module.js.map +1 -0
- package/dist/sk-SK.main.js +9 -0
- package/dist/sk-SK.main.js.map +1 -0
- package/dist/sk-SK.mjs +11 -0
- package/dist/sk-SK.module.js +11 -0
- package/dist/sk-SK.module.js.map +1 -0
- package/dist/sl-SI.main.js +9 -0
- package/dist/sl-SI.main.js.map +1 -0
- package/dist/sl-SI.mjs +11 -0
- package/dist/sl-SI.module.js +11 -0
- package/dist/sl-SI.module.js.map +1 -0
- package/dist/sr-SP.main.js +9 -0
- package/dist/sr-SP.main.js.map +1 -0
- package/dist/sr-SP.mjs +11 -0
- package/dist/sr-SP.module.js +11 -0
- package/dist/sr-SP.module.js.map +1 -0
- package/dist/sv-SE.main.js +9 -0
- package/dist/sv-SE.main.js.map +1 -0
- package/dist/sv-SE.mjs +11 -0
- package/dist/sv-SE.module.js +11 -0
- package/dist/sv-SE.module.js.map +1 -0
- package/dist/tr-TR.main.js +9 -0
- package/dist/tr-TR.main.js.map +1 -0
- package/dist/tr-TR.mjs +11 -0
- package/dist/tr-TR.module.js +11 -0
- package/dist/tr-TR.module.js.map +1 -0
- package/dist/types.d.ts +3764 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/uk-UA.main.js +9 -0
- package/dist/uk-UA.main.js.map +1 -0
- package/dist/uk-UA.mjs +11 -0
- package/dist/uk-UA.module.js +11 -0
- package/dist/uk-UA.module.js.map +1 -0
- package/dist/useDragAndDrop.main.js +74 -0
- package/dist/useDragAndDrop.main.js.map +1 -0
- package/dist/useDragAndDrop.mjs +69 -0
- package/dist/useDragAndDrop.module.js +69 -0
- package/dist/useDragAndDrop.module.js.map +1 -0
- package/dist/utils.main.js +205 -0
- package/dist/utils.main.js.map +1 -0
- package/dist/utils.mjs +188 -0
- package/dist/utils.module.js +188 -0
- package/dist/utils.module.js.map +1 -0
- package/dist/zh-CN.main.js +9 -0
- package/dist/zh-CN.main.js.map +1 -0
- package/dist/zh-CN.mjs +11 -0
- package/dist/zh-CN.module.js +11 -0
- package/dist/zh-CN.module.js.map +1 -0
- package/dist/zh-TW.main.js +9 -0
- package/dist/zh-TW.main.js.map +1 -0
- package/dist/zh-TW.mjs +11 -0
- package/dist/zh-TW.module.js +11 -0
- package/dist/zh-TW.module.js.map +1 -0
- package/i18n/ar-AE.js +1 -0
- package/i18n/ar-AE.mjs +1 -0
- package/i18n/bg-BG.js +1 -0
- package/i18n/bg-BG.mjs +1 -0
- package/i18n/cs-CZ.js +1 -0
- package/i18n/cs-CZ.mjs +1 -0
- package/i18n/da-DK.js +1 -0
- package/i18n/da-DK.mjs +1 -0
- package/i18n/de-DE.js +1 -0
- package/i18n/de-DE.mjs +1 -0
- package/i18n/el-GR.js +1 -0
- package/i18n/el-GR.mjs +1 -0
- package/i18n/en-US.js +1 -0
- package/i18n/en-US.mjs +1 -0
- package/i18n/es-ES.js +1 -0
- package/i18n/es-ES.mjs +1 -0
- package/i18n/et-EE.js +1 -0
- package/i18n/et-EE.mjs +1 -0
- package/i18n/fi-FI.js +1 -0
- package/i18n/fi-FI.mjs +1 -0
- package/i18n/fr-FR.js +1 -0
- package/i18n/fr-FR.mjs +1 -0
- package/i18n/he-IL.js +1 -0
- package/i18n/he-IL.mjs +1 -0
- package/i18n/hr-HR.js +1 -0
- package/i18n/hr-HR.mjs +1 -0
- package/i18n/hu-HU.js +1 -0
- package/i18n/hu-HU.mjs +1 -0
- package/i18n/index.d.ts +13 -0
- package/i18n/index.js +118 -0
- package/i18n/index.mjs +115 -0
- package/i18n/it-IT.js +1 -0
- package/i18n/it-IT.mjs +1 -0
- package/i18n/ja-JP.js +1 -0
- package/i18n/ja-JP.mjs +1 -0
- package/i18n/ko-KR.js +1 -0
- package/i18n/ko-KR.mjs +1 -0
- package/i18n/lang.d.ts +7 -0
- package/i18n/lt-LT.js +1 -0
- package/i18n/lt-LT.mjs +1 -0
- package/i18n/lv-LV.js +1 -0
- package/i18n/lv-LV.mjs +1 -0
- package/i18n/nb-NO.js +1 -0
- package/i18n/nb-NO.mjs +1 -0
- package/i18n/nl-NL.js +1 -0
- package/i18n/nl-NL.mjs +1 -0
- package/i18n/pl-PL.js +1 -0
- package/i18n/pl-PL.mjs +1 -0
- package/i18n/pt-BR.js +1 -0
- package/i18n/pt-BR.mjs +1 -0
- package/i18n/pt-PT.js +1 -0
- package/i18n/pt-PT.mjs +1 -0
- package/i18n/ro-RO.js +1 -0
- package/i18n/ro-RO.mjs +1 -0
- package/i18n/ru-RU.js +1 -0
- package/i18n/ru-RU.mjs +1 -0
- package/i18n/sk-SK.js +1 -0
- package/i18n/sk-SK.mjs +1 -0
- package/i18n/sl-SI.js +1 -0
- package/i18n/sl-SI.mjs +1 -0
- package/i18n/sr-SP.js +1 -0
- package/i18n/sr-SP.mjs +1 -0
- package/i18n/sv-SE.js +1 -0
- package/i18n/sv-SE.mjs +1 -0
- package/i18n/tr-TR.js +1 -0
- package/i18n/tr-TR.mjs +1 -0
- package/i18n/uk-UA.js +1 -0
- package/i18n/uk-UA.mjs +1 -0
- package/i18n/zh-CN.js +1 -0
- package/i18n/zh-CN.mjs +1 -0
- package/i18n/zh-TW.js +1 -0
- package/i18n/zh-TW.mjs +1 -0
- package/package.json +105 -0
- package/src/Autocomplete.tsx +64 -0
- package/src/Breadcrumbs.tsx +137 -0
- package/src/Button.tsx +185 -0
- package/src/Calendar.tsx +620 -0
- package/src/Checkbox.tsx +282 -0
- package/src/Collection.tsx +225 -0
- package/src/ColorArea.tsx +89 -0
- package/src/ColorField.tsx +243 -0
- package/src/ColorPicker.tsx +63 -0
- package/src/ColorSlider.tsx +110 -0
- package/src/ColorSwatch.tsx +54 -0
- package/src/ColorSwatchPicker.tsx +125 -0
- package/src/ColorThumb.tsx +108 -0
- package/src/ColorWheel.tsx +122 -0
- package/src/ComboBox.tsx +325 -0
- package/src/DateField.tsx +425 -0
- package/src/DatePicker.tsx +334 -0
- package/src/Dialog.tsx +159 -0
- package/src/Disclosure.tsx +259 -0
- package/src/DragAndDrop.tsx +115 -0
- package/src/DropZone.tsx +145 -0
- package/src/FieldError.tsx +57 -0
- package/src/FileTrigger.tsx +79 -0
- package/src/Form.tsx +52 -0
- package/src/GridList.tsx +678 -0
- package/src/Group.tsx +114 -0
- package/src/Header.tsx +28 -0
- package/src/Heading.tsx +31 -0
- package/src/HiddenDateInput.tsx +152 -0
- package/src/Input.tsx +113 -0
- package/src/Keyboard.tsx +23 -0
- package/src/Label.tsx +29 -0
- package/src/Link.tsx +115 -0
- package/src/ListBox.tsx +577 -0
- package/src/Menu.tsx +496 -0
- package/src/Meter.tsx +93 -0
- package/src/Modal.tsx +262 -0
- package/src/NumberField.tsx +152 -0
- package/src/OverlayArrow.tsx +91 -0
- package/src/Popover.tsx +267 -0
- package/src/ProgressBar.tsx +101 -0
- package/src/RSPContexts.ts +52 -0
- package/src/RadioGroup.tsx +273 -0
- package/src/SearchField.tsx +152 -0
- package/src/Select.tsx +356 -0
- package/src/SelectionIndicator.tsx +46 -0
- package/src/Separator.tsx +76 -0
- package/src/SharedElementTransition.tsx +186 -0
- package/src/Slider.tsx +310 -0
- package/src/Switch.tsx +146 -0
- package/src/Table.tsx +1597 -0
- package/src/TableLayout.ts +28 -0
- package/src/Tabs.tsx +495 -0
- package/src/TagGroup.tsx +310 -0
- package/src/Text.tsx +28 -0
- package/src/TextArea.tsx +65 -0
- package/src/TextField.tsx +148 -0
- package/src/Toast.tsx +248 -0
- package/src/ToggleButton.tsx +103 -0
- package/src/ToggleButtonGroup.tsx +90 -0
- package/src/Toolbar.tsx +69 -0
- package/src/Tooltip.tsx +187 -0
- package/src/Tree.tsx +1066 -0
- package/src/TreeDropTargetDelegate.ts +308 -0
- package/src/Virtualizer.tsx +174 -0
- package/src/index.ts +160 -0
- package/src/useDragAndDrop.tsx +150 -0
- package/src/utils.tsx +351 -0
package/src/Menu.tsx
ADDED
|
@@ -0,0 +1,496 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 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
|
+
import {AriaMenuProps, FocusScope, mergeProps, useHover, useMenu, useMenuItem, useMenuSection, useMenuTrigger, useSubmenuTrigger} from 'react-aria';
|
|
14
|
+
import {BaseCollection, Collection, CollectionBuilder, CollectionNode, createBranchComponent, createLeafComponent, ItemNode, SectionNode} from '@react-aria/collections';
|
|
15
|
+
import {MenuTriggerProps as BaseMenuTriggerProps, Collection as ICollection, Node, RootMenuTriggerState, TreeState, useMenuTriggerState, useSubmenuTriggerState, useTreeState} from 'react-stately';
|
|
16
|
+
import {
|
|
17
|
+
ClassNameOrFunction,
|
|
18
|
+
ContextValue,
|
|
19
|
+
DEFAULT_SLOT,
|
|
20
|
+
dom,
|
|
21
|
+
DOMRenderProps,
|
|
22
|
+
PossibleLinkDOMRenderProps,
|
|
23
|
+
Provider,
|
|
24
|
+
RenderProps,
|
|
25
|
+
SlotProps,
|
|
26
|
+
StyleRenderProps,
|
|
27
|
+
useContextProps,
|
|
28
|
+
useRenderProps,
|
|
29
|
+
useSlot,
|
|
30
|
+
useSlottedContext
|
|
31
|
+
} from './utils';
|
|
32
|
+
import {CollectionProps, CollectionRendererContext, ItemRenderProps, SectionContext, SectionProps, usePersistedKeys} from './Collection';
|
|
33
|
+
import {FieldInputContext, SelectableCollectionContext, SelectableCollectionContextValue} from './RSPContexts';
|
|
34
|
+
import {filterDOMProps, useObjectRef, useResizeObserver} from '@react-aria/utils';
|
|
35
|
+
import {FocusEvents, FocusStrategy, forwardRefType, GlobalDOMAttributes, HoverEvents, Key, LinkDOMProps, MultipleSelection, PressEvents} from '@react-types/shared';
|
|
36
|
+
import {HeaderContext} from './Header';
|
|
37
|
+
import {KeyboardContext} from './Keyboard';
|
|
38
|
+
import {MultipleSelectionState, SelectionManager, useMultipleSelectionState} from '@react-stately/selection';
|
|
39
|
+
import {OverlayTriggerStateContext} from './Dialog';
|
|
40
|
+
import {PopoverContext} from './Popover';
|
|
41
|
+
import {PressResponder} from '@react-aria/interactions';
|
|
42
|
+
import React, {
|
|
43
|
+
createContext,
|
|
44
|
+
ForwardedRef,
|
|
45
|
+
forwardRef,
|
|
46
|
+
JSX,
|
|
47
|
+
ReactElement,
|
|
48
|
+
ReactNode,
|
|
49
|
+
RefObject,
|
|
50
|
+
useCallback,
|
|
51
|
+
useContext,
|
|
52
|
+
useMemo,
|
|
53
|
+
useRef,
|
|
54
|
+
useState
|
|
55
|
+
} from 'react';
|
|
56
|
+
import {SelectionIndicatorContext} from './SelectionIndicator';
|
|
57
|
+
import {SeparatorContext} from './Separator';
|
|
58
|
+
import {SharedElementTransition} from './SharedElementTransition';
|
|
59
|
+
import {TextContext} from './Text';
|
|
60
|
+
|
|
61
|
+
export const MenuContext = createContext<ContextValue<MenuProps<any>, HTMLDivElement>>(null);
|
|
62
|
+
export const MenuStateContext = createContext<TreeState<any> | null>(null);
|
|
63
|
+
export const RootMenuTriggerStateContext = createContext<RootMenuTriggerState | null>(null);
|
|
64
|
+
const SelectionManagerContext = createContext<SelectionManager | null>(null);
|
|
65
|
+
|
|
66
|
+
export interface MenuTriggerProps extends BaseMenuTriggerProps {
|
|
67
|
+
children: ReactNode
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function MenuTrigger(props: MenuTriggerProps): JSX.Element {
|
|
71
|
+
let state = useMenuTriggerState(props);
|
|
72
|
+
let ref = useRef<HTMLButtonElement>(null);
|
|
73
|
+
let {menuTriggerProps, menuProps} = useMenuTrigger({
|
|
74
|
+
...props,
|
|
75
|
+
type: 'menu'
|
|
76
|
+
}, state, ref);
|
|
77
|
+
// Allows menu width to match button
|
|
78
|
+
let [buttonWidth, setButtonWidth] = useState<string | null>(null);
|
|
79
|
+
let onResize = useCallback(() => {
|
|
80
|
+
if (ref.current) {
|
|
81
|
+
setButtonWidth(ref.current.offsetWidth + 'px');
|
|
82
|
+
}
|
|
83
|
+
}, [ref]);
|
|
84
|
+
|
|
85
|
+
useResizeObserver({
|
|
86
|
+
ref: ref,
|
|
87
|
+
onResize: onResize
|
|
88
|
+
});
|
|
89
|
+
let scrollRef = useRef(null);
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<Provider
|
|
93
|
+
values={[
|
|
94
|
+
[MenuContext, {...menuProps, ref: scrollRef}],
|
|
95
|
+
[OverlayTriggerStateContext, state],
|
|
96
|
+
[RootMenuTriggerStateContext, state],
|
|
97
|
+
[PopoverContext, {
|
|
98
|
+
trigger: 'MenuTrigger',
|
|
99
|
+
triggerRef: ref,
|
|
100
|
+
scrollRef,
|
|
101
|
+
placement: 'bottom start',
|
|
102
|
+
style: {'--trigger-width': buttonWidth} as React.CSSProperties,
|
|
103
|
+
'aria-labelledby': menuProps['aria-labelledby']
|
|
104
|
+
}]
|
|
105
|
+
]}>
|
|
106
|
+
<PressResponder {...menuTriggerProps} ref={ref} isPressed={state.isOpen}>
|
|
107
|
+
{props.children}
|
|
108
|
+
</PressResponder>
|
|
109
|
+
</Provider>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
export interface SubmenuTriggerProps {
|
|
114
|
+
/**
|
|
115
|
+
* The contents of the SubmenuTrigger. The first child should be an Item (the trigger) and the second child should be the Popover (for the submenu).
|
|
116
|
+
*/
|
|
117
|
+
children: ReactElement[],
|
|
118
|
+
/**
|
|
119
|
+
* The delay time in milliseconds for the submenu to appear after hovering over the trigger.
|
|
120
|
+
* @default 200
|
|
121
|
+
*/
|
|
122
|
+
delay?: number
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const SubmenuTriggerContext = createContext<{parentMenuRef: RefObject<HTMLElement | null>, shouldUseVirtualFocus?: boolean} | null>(null);
|
|
126
|
+
|
|
127
|
+
class SubmenuTriggerNode<T> extends CollectionNode<T> {
|
|
128
|
+
static readonly type = 'submenutrigger';
|
|
129
|
+
|
|
130
|
+
filter(collection: BaseCollection<T>, newCollection: BaseCollection<T>, filterFn: (textValue: string, node: Node<T>) => boolean): CollectionNode<T> | null {
|
|
131
|
+
let triggerNode = collection.getItem(this.firstChildKey!);
|
|
132
|
+
if (triggerNode && filterFn(triggerNode.textValue, this)) {
|
|
133
|
+
let clone = this.clone();
|
|
134
|
+
newCollection.addDescendants(clone, collection);
|
|
135
|
+
return clone;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* A submenu trigger is used to wrap a submenu's trigger item and the submenu itself.
|
|
144
|
+
*
|
|
145
|
+
* @version alpha
|
|
146
|
+
*/
|
|
147
|
+
export const SubmenuTrigger = /*#__PURE__*/ createBranchComponent(SubmenuTriggerNode, (props: SubmenuTriggerProps, ref: ForwardedRef<HTMLDivElement>, item) => {
|
|
148
|
+
let {CollectionBranch} = useContext(CollectionRendererContext);
|
|
149
|
+
let state = useContext(MenuStateContext)!;
|
|
150
|
+
let rootMenuTriggerState = useContext(RootMenuTriggerStateContext)!;
|
|
151
|
+
let submenuTriggerState = useSubmenuTriggerState({triggerKey: item.key}, rootMenuTriggerState);
|
|
152
|
+
let submenuRef = useRef<HTMLDivElement>(null);
|
|
153
|
+
let itemRef = useObjectRef(ref);
|
|
154
|
+
let {parentMenuRef, shouldUseVirtualFocus} = useContext(SubmenuTriggerContext)!;
|
|
155
|
+
let {submenuTriggerProps, submenuProps, popoverProps} = useSubmenuTrigger({
|
|
156
|
+
parentMenuRef,
|
|
157
|
+
submenuRef,
|
|
158
|
+
delay: props.delay,
|
|
159
|
+
shouldUseVirtualFocus
|
|
160
|
+
}, submenuTriggerState, itemRef);
|
|
161
|
+
|
|
162
|
+
return (
|
|
163
|
+
<Provider
|
|
164
|
+
values={[
|
|
165
|
+
[MenuItemContext, {...submenuTriggerProps, onAction: undefined, ref: itemRef}],
|
|
166
|
+
[MenuContext, {
|
|
167
|
+
ref: submenuRef,
|
|
168
|
+
...submenuProps
|
|
169
|
+
}],
|
|
170
|
+
[OverlayTriggerStateContext, submenuTriggerState],
|
|
171
|
+
[PopoverContext, {
|
|
172
|
+
trigger: 'SubmenuTrigger',
|
|
173
|
+
triggerRef: itemRef,
|
|
174
|
+
placement: 'end top',
|
|
175
|
+
'aria-labelledby': submenuProps['aria-labelledby'],
|
|
176
|
+
...popoverProps
|
|
177
|
+
}]
|
|
178
|
+
]}>
|
|
179
|
+
<CollectionBranch collection={state.collection} parent={item} />
|
|
180
|
+
{props.children[1]}
|
|
181
|
+
</Provider>
|
|
182
|
+
);
|
|
183
|
+
}, props => props.children[0]);
|
|
184
|
+
|
|
185
|
+
export interface MenuRenderProps {
|
|
186
|
+
/**
|
|
187
|
+
* Whether the menu has no items and should display its empty state.
|
|
188
|
+
* @selector [data-empty]
|
|
189
|
+
*/
|
|
190
|
+
isEmpty: boolean
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export interface MenuProps<T> extends Omit<AriaMenuProps<T>, 'children'>, CollectionProps<T>, StyleRenderProps<MenuRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {
|
|
194
|
+
/**
|
|
195
|
+
* The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
|
|
196
|
+
* @default 'react-aria-Menu'
|
|
197
|
+
*/
|
|
198
|
+
className?: ClassNameOrFunction<MenuRenderProps>,
|
|
199
|
+
/** Provides content to display when there are no items in the list. */
|
|
200
|
+
renderEmptyState?: () => ReactNode,
|
|
201
|
+
/** Whether the menu should close when the menu item is selected. */
|
|
202
|
+
shouldCloseOnSelect?: boolean
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* A menu displays a list of actions or options that a user can choose.
|
|
207
|
+
*/
|
|
208
|
+
export const Menu = /*#__PURE__*/ (forwardRef as forwardRefType)(function Menu<T extends object>(props: MenuProps<T>, ref: ForwardedRef<HTMLDivElement>) {
|
|
209
|
+
[props, ref] = useContextProps(props, ref, MenuContext);
|
|
210
|
+
|
|
211
|
+
// Delay rendering the actual menu until we have the collection so that auto focus works properly.
|
|
212
|
+
return (
|
|
213
|
+
<CollectionBuilder content={<Collection {...props} />}>
|
|
214
|
+
{collection => <MenuInner props={props} collection={collection} menuRef={ref} />}
|
|
215
|
+
</CollectionBuilder>
|
|
216
|
+
);
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
interface MenuInnerProps<T> {
|
|
220
|
+
// For now we append filter and other autocomplete context props here for typescript, but eventually we can consider exposing these
|
|
221
|
+
// as top level props for users to use with standalone Menus
|
|
222
|
+
props: MenuProps<T> & {filter?: SelectableCollectionContextValue<object>['filter'], shouldUseVirtualFocus?: boolean},
|
|
223
|
+
collection: BaseCollection<object>,
|
|
224
|
+
menuRef: RefObject<HTMLElement | null>
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function MenuInner<T extends object>({props, collection, menuRef: ref}: MenuInnerProps<T>) {
|
|
228
|
+
[props, ref] = useContextProps(props, ref, SelectableCollectionContext);
|
|
229
|
+
let {filter, ...autocompleteMenuProps} = props;
|
|
230
|
+
let filteredCollection = useMemo(() => filter ? collection.filter(filter) : collection, [collection, filter]);
|
|
231
|
+
let state = useTreeState({
|
|
232
|
+
...props,
|
|
233
|
+
collection: filteredCollection as ICollection<Node<object>>,
|
|
234
|
+
children: undefined
|
|
235
|
+
});
|
|
236
|
+
let triggerState = useContext(RootMenuTriggerStateContext);
|
|
237
|
+
let {isVirtualized, CollectionRoot} = useContext(CollectionRendererContext);
|
|
238
|
+
let {menuProps} = useMenu({...props, isVirtualized, onClose: props.onClose || triggerState?.close}, state, ref);
|
|
239
|
+
let renderProps = useRenderProps({
|
|
240
|
+
...props,
|
|
241
|
+
children: undefined,
|
|
242
|
+
defaultClassName: 'react-aria-Menu',
|
|
243
|
+
values: {
|
|
244
|
+
isEmpty: state.collection.size === 0
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
let emptyState: ReactElement | null = null;
|
|
249
|
+
if (state.collection.size === 0 && props.renderEmptyState) {
|
|
250
|
+
emptyState = (
|
|
251
|
+
<div
|
|
252
|
+
role="menuitem"
|
|
253
|
+
style={{display: 'contents'}}>
|
|
254
|
+
{props.renderEmptyState()}
|
|
255
|
+
</div>
|
|
256
|
+
);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
260
|
+
|
|
261
|
+
return (
|
|
262
|
+
<FocusScope>
|
|
263
|
+
<dom.div
|
|
264
|
+
{...mergeProps(DOMProps, renderProps, menuProps)}
|
|
265
|
+
ref={ref as RefObject<HTMLDivElement>}
|
|
266
|
+
slot={props.slot || undefined}
|
|
267
|
+
data-empty={state.collection.size === 0 || undefined}
|
|
268
|
+
onScroll={props.onScroll}>
|
|
269
|
+
<Provider
|
|
270
|
+
values={[
|
|
271
|
+
[MenuStateContext, state],
|
|
272
|
+
[SeparatorContext, {elementType: 'div'}],
|
|
273
|
+
[SectionContext, {name: 'MenuSection', render: MenuSectionInner}],
|
|
274
|
+
[SubmenuTriggerContext, {parentMenuRef: ref, shouldUseVirtualFocus: autocompleteMenuProps?.shouldUseVirtualFocus}],
|
|
275
|
+
[MenuItemContext, {shouldCloseOnSelect: props.shouldCloseOnSelect}],
|
|
276
|
+
[SelectableCollectionContext, null],
|
|
277
|
+
[FieldInputContext, null],
|
|
278
|
+
[SelectionManagerContext, state.selectionManager],
|
|
279
|
+
/* Ensure root MenuTriggerState is defined, in case Menu is rendered outside a MenuTrigger. */
|
|
280
|
+
/* We assume the context can never change between defined and undefined. */
|
|
281
|
+
/* eslint-disable-next-line react-hooks/rules-of-hooks */
|
|
282
|
+
[RootMenuTriggerStateContext, triggerState ?? useMenuTriggerState({})]
|
|
283
|
+
]}>
|
|
284
|
+
<SharedElementTransition>
|
|
285
|
+
<CollectionRoot
|
|
286
|
+
collection={state.collection}
|
|
287
|
+
persistedKeys={usePersistedKeys(state.selectionManager.focusedKey)}
|
|
288
|
+
scrollRef={ref} />
|
|
289
|
+
</SharedElementTransition>
|
|
290
|
+
</Provider>
|
|
291
|
+
{emptyState}
|
|
292
|
+
</dom.div>
|
|
293
|
+
</FocusScope>
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
export interface MenuSectionProps<T> extends SectionProps<T>, MultipleSelection, DOMRenderProps<'section', undefined> {
|
|
298
|
+
/**
|
|
299
|
+
* The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element.
|
|
300
|
+
* @default 'react-aria-MenuSection'
|
|
301
|
+
*/
|
|
302
|
+
className?: string,
|
|
303
|
+
/** Whether the menu should close when the menu item is selected. */
|
|
304
|
+
shouldCloseOnSelect?: boolean
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// A subclass of SelectionManager that forwards focus-related properties to the parent,
|
|
308
|
+
// but has its own local selection state.
|
|
309
|
+
class GroupSelectionManager extends SelectionManager {
|
|
310
|
+
private parent: SelectionManager;
|
|
311
|
+
|
|
312
|
+
constructor(parent: SelectionManager, state: MultipleSelectionState) {
|
|
313
|
+
super(parent.collection, state);
|
|
314
|
+
this.parent = parent;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
get focusedKey() {
|
|
318
|
+
return this.parent.focusedKey;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
get isFocused() {
|
|
322
|
+
return this.parent.isFocused;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
setFocusedKey(key: Key | null, childFocusStrategy?: FocusStrategy): void {
|
|
326
|
+
return this.parent.setFocusedKey(key, childFocusStrategy);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
setFocused(isFocused: boolean): void {
|
|
330
|
+
this.parent.setFocused(isFocused);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
get childFocusStrategy() {
|
|
334
|
+
return this.parent.childFocusStrategy;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function MenuSectionInner<T extends object>(props: MenuSectionProps<T>, ref: ForwardedRef<HTMLElement>, section: Node<T>, className = 'react-aria-MenuSection') {
|
|
339
|
+
let state = useContext(MenuStateContext)!;
|
|
340
|
+
let {CollectionBranch} = useContext(CollectionRendererContext);
|
|
341
|
+
let [headingRef, heading] = useSlot();
|
|
342
|
+
let {headingProps, groupProps} = useMenuSection({
|
|
343
|
+
heading,
|
|
344
|
+
'aria-label': section.props['aria-label'] ?? undefined
|
|
345
|
+
});
|
|
346
|
+
let renderProps = useRenderProps({
|
|
347
|
+
...props,
|
|
348
|
+
id: undefined,
|
|
349
|
+
children: undefined,
|
|
350
|
+
defaultClassName: className,
|
|
351
|
+
className: section.props?.className,
|
|
352
|
+
style: section.props?.style,
|
|
353
|
+
values: undefined
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
let parent = useContext(SelectionManagerContext)!;
|
|
357
|
+
let selectionState = useMultipleSelectionState(props);
|
|
358
|
+
let manager = props.selectionMode != null ? new GroupSelectionManager(parent, selectionState) : parent;
|
|
359
|
+
|
|
360
|
+
let closeOnSelect = useSlottedContext(MenuItemContext)?.shouldCloseOnSelect;
|
|
361
|
+
|
|
362
|
+
let DOMProps = filterDOMProps(props as any, {global: true});
|
|
363
|
+
delete DOMProps.id;
|
|
364
|
+
|
|
365
|
+
return (
|
|
366
|
+
<dom.section
|
|
367
|
+
{...mergeProps(DOMProps, renderProps, groupProps)}
|
|
368
|
+
ref={ref}>
|
|
369
|
+
<Provider
|
|
370
|
+
values={[
|
|
371
|
+
[HeaderContext, {...headingProps, ref: headingRef}],
|
|
372
|
+
[SelectionManagerContext, manager],
|
|
373
|
+
[MenuItemContext, {shouldCloseOnSelect: props.shouldCloseOnSelect ?? closeOnSelect}]
|
|
374
|
+
]}>
|
|
375
|
+
<CollectionBranch collection={state.collection} parent={section} />
|
|
376
|
+
</Provider>
|
|
377
|
+
</dom.section>
|
|
378
|
+
);
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* A MenuSection represents a section within a Menu.
|
|
383
|
+
*/
|
|
384
|
+
export const MenuSection = /*#__PURE__*/ createBranchComponent(SectionNode, MenuSectionInner);
|
|
385
|
+
|
|
386
|
+
export interface MenuItemRenderProps extends ItemRenderProps {
|
|
387
|
+
/**
|
|
388
|
+
* Whether the item has a submenu.
|
|
389
|
+
*
|
|
390
|
+
* @selector [data-has-submenu]
|
|
391
|
+
*/
|
|
392
|
+
hasSubmenu: boolean,
|
|
393
|
+
/**
|
|
394
|
+
* Whether the item's submenu is open.
|
|
395
|
+
*
|
|
396
|
+
* @selector [data-open]
|
|
397
|
+
*/
|
|
398
|
+
isOpen: boolean
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
export interface MenuItemProps<T = object> extends Omit<RenderProps<MenuItemRenderProps>, 'render'>, PossibleLinkDOMRenderProps<'div', MenuItemRenderProps>, LinkDOMProps, HoverEvents, FocusEvents, PressEvents, Omit<GlobalDOMAttributes<HTMLDivElement>, 'onClick'> {
|
|
402
|
+
/**
|
|
403
|
+
* The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
|
|
404
|
+
* @default 'react-aria-MenuItem'
|
|
405
|
+
*/
|
|
406
|
+
className?: ClassNameOrFunction<MenuItemRenderProps>,
|
|
407
|
+
/** The unique id of the item. */
|
|
408
|
+
id?: Key,
|
|
409
|
+
/** The object value that this item represents. When using dynamic collections, this is set automatically. */
|
|
410
|
+
value?: T,
|
|
411
|
+
/** A string representation of the item's contents, used for features like typeahead. */
|
|
412
|
+
textValue?: string,
|
|
413
|
+
/** An accessibility label for this item. */
|
|
414
|
+
'aria-label'?: string,
|
|
415
|
+
/** Whether the item is disabled. */
|
|
416
|
+
isDisabled?: boolean,
|
|
417
|
+
/** Handler that is called when the item is selected. */
|
|
418
|
+
onAction?: () => void,
|
|
419
|
+
/** Whether the menu should close when the menu item is selected. */
|
|
420
|
+
shouldCloseOnSelect?: boolean
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
const MenuItemContext = createContext<ContextValue<MenuItemProps, HTMLDivElement>>(null);
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* A MenuItem represents an individual action in a Menu.
|
|
427
|
+
*/
|
|
428
|
+
export const MenuItem = /*#__PURE__*/ createLeafComponent(ItemNode, function MenuItem<T extends object>(props: MenuItemProps<T>, forwardedRef: ForwardedRef<HTMLDivElement>, item: Node<T>) {
|
|
429
|
+
[props, forwardedRef] = useContextProps(props, forwardedRef, MenuItemContext);
|
|
430
|
+
let id = useSlottedContext(MenuItemContext)?.id as string;
|
|
431
|
+
let state = useContext(MenuStateContext)!;
|
|
432
|
+
let ref = useObjectRef<any>(forwardedRef);
|
|
433
|
+
let selectionManager = useContext(SelectionManagerContext)!;
|
|
434
|
+
let {isVirtualized} = useContext(CollectionRendererContext);
|
|
435
|
+
let {menuItemProps, labelProps, descriptionProps, keyboardShortcutProps, ...states} = useMenuItem({
|
|
436
|
+
...props,
|
|
437
|
+
id,
|
|
438
|
+
key: item.key,
|
|
439
|
+
selectionManager,
|
|
440
|
+
isVirtualized: isVirtualized
|
|
441
|
+
}, state, ref);
|
|
442
|
+
|
|
443
|
+
let {hoverProps, isHovered} = useHover({
|
|
444
|
+
isDisabled: states.isDisabled
|
|
445
|
+
});
|
|
446
|
+
let renderProps = useRenderProps<MenuItemRenderProps, any>({
|
|
447
|
+
...props,
|
|
448
|
+
id: undefined,
|
|
449
|
+
children: item.rendered,
|
|
450
|
+
defaultClassName: 'react-aria-MenuItem',
|
|
451
|
+
values: {
|
|
452
|
+
...states,
|
|
453
|
+
isHovered,
|
|
454
|
+
isFocusVisible: states.isFocusVisible,
|
|
455
|
+
selectionMode: selectionManager.selectionMode,
|
|
456
|
+
selectionBehavior: selectionManager.selectionBehavior,
|
|
457
|
+
hasSubmenu: !!props['aria-haspopup'],
|
|
458
|
+
isOpen: props['aria-expanded'] === 'true'
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
let ElementType = props.href ? dom.a : dom.div;
|
|
463
|
+
let DOMProps = filterDOMProps(props as any, {global: true});
|
|
464
|
+
delete DOMProps.id;
|
|
465
|
+
delete DOMProps.onClick;
|
|
466
|
+
|
|
467
|
+
return (
|
|
468
|
+
<ElementType
|
|
469
|
+
{...mergeProps(DOMProps, renderProps, menuItemProps, hoverProps)}
|
|
470
|
+
ref={ref}
|
|
471
|
+
data-disabled={states.isDisabled || undefined}
|
|
472
|
+
data-hovered={isHovered || undefined}
|
|
473
|
+
data-focused={states.isFocused || undefined}
|
|
474
|
+
data-focus-visible={states.isFocusVisible || undefined}
|
|
475
|
+
data-pressed={states.isPressed || undefined}
|
|
476
|
+
data-selected={states.isSelected || undefined}
|
|
477
|
+
data-selection-mode={selectionManager.selectionMode === 'none' ? undefined : selectionManager.selectionMode}
|
|
478
|
+
data-has-submenu={!!props['aria-haspopup'] || undefined}
|
|
479
|
+
data-open={props['aria-expanded'] === 'true' || undefined}>
|
|
480
|
+
<Provider
|
|
481
|
+
values={[
|
|
482
|
+
[TextContext, {
|
|
483
|
+
slots: {
|
|
484
|
+
[DEFAULT_SLOT]: labelProps,
|
|
485
|
+
label: labelProps,
|
|
486
|
+
description: descriptionProps
|
|
487
|
+
}
|
|
488
|
+
}],
|
|
489
|
+
[KeyboardContext, keyboardShortcutProps],
|
|
490
|
+
[SelectionIndicatorContext, {isSelected: states.isSelected}]
|
|
491
|
+
]}>
|
|
492
|
+
{renderProps.children}
|
|
493
|
+
</Provider>
|
|
494
|
+
</ElementType>
|
|
495
|
+
);
|
|
496
|
+
});
|
package/src/Meter.tsx
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 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
|
+
import {AriaMeterProps, useMeter} from 'react-aria';
|
|
14
|
+
import {clamp} from '@react-stately/utils';
|
|
15
|
+
import {
|
|
16
|
+
ClassNameOrFunction,
|
|
17
|
+
ContextValue,
|
|
18
|
+
dom,
|
|
19
|
+
RenderProps,
|
|
20
|
+
SlotProps,
|
|
21
|
+
useContextProps,
|
|
22
|
+
useRenderProps,
|
|
23
|
+
useSlot
|
|
24
|
+
} from './utils';
|
|
25
|
+
import {filterDOMProps, mergeProps} from '@react-aria/utils';
|
|
26
|
+
import {forwardRefType, GlobalDOMAttributes} from '@react-types/shared';
|
|
27
|
+
import {LabelContext} from './Label';
|
|
28
|
+
import React, {createContext, ForwardedRef, forwardRef} from 'react';
|
|
29
|
+
|
|
30
|
+
export interface MeterProps extends Omit<AriaMeterProps, 'label'>, RenderProps<MeterRenderProps>, SlotProps, GlobalDOMAttributes<HTMLDivElement> {
|
|
31
|
+
/**
|
|
32
|
+
* The CSS [className](https://developer.mozilla.org/en-US/docs/Web/API/Element/className) for the element. A function may be provided to compute the class based on component state.
|
|
33
|
+
* @default 'react-aria-Meter'
|
|
34
|
+
*/
|
|
35
|
+
className?: ClassNameOrFunction<MeterRenderProps>
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface MeterRenderProps {
|
|
39
|
+
/**
|
|
40
|
+
* The value as a percentage between the minimum and maximum.
|
|
41
|
+
*/
|
|
42
|
+
percentage: number,
|
|
43
|
+
/**
|
|
44
|
+
* A formatted version of the value.
|
|
45
|
+
* @selector [aria-valuetext]
|
|
46
|
+
*/
|
|
47
|
+
valueText: string | undefined
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export const MeterContext = createContext<ContextValue<MeterProps, HTMLDivElement>>(null);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* A meter represents a quantity within a known range, or a fractional value.
|
|
54
|
+
*/
|
|
55
|
+
export const Meter = /*#__PURE__*/ (forwardRef as forwardRefType)(function Meter(props: MeterProps, ref: ForwardedRef<HTMLDivElement>) {
|
|
56
|
+
[props, ref] = useContextProps(props, ref, MeterContext);
|
|
57
|
+
let {
|
|
58
|
+
value = 0,
|
|
59
|
+
minValue = 0,
|
|
60
|
+
maxValue = 100
|
|
61
|
+
} = props;
|
|
62
|
+
value = clamp(value, minValue, maxValue);
|
|
63
|
+
|
|
64
|
+
let [labelRef, label] = useSlot(
|
|
65
|
+
!props['aria-label'] && !props['aria-labelledby']
|
|
66
|
+
);
|
|
67
|
+
let {
|
|
68
|
+
meterProps,
|
|
69
|
+
labelProps
|
|
70
|
+
} = useMeter({...props, label});
|
|
71
|
+
|
|
72
|
+
// Calculate the width of the progress bar as a percentage
|
|
73
|
+
let percentage = (value - minValue) / (maxValue - minValue) * 100;
|
|
74
|
+
|
|
75
|
+
let renderProps = useRenderProps({
|
|
76
|
+
...props,
|
|
77
|
+
defaultClassName: 'react-aria-Meter',
|
|
78
|
+
values: {
|
|
79
|
+
percentage,
|
|
80
|
+
valueText: meterProps['aria-valuetext']
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
let DOMProps = filterDOMProps(props, {global: true});
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<dom.div {...mergeProps(DOMProps, renderProps, meterProps)} ref={ref} slot={props.slot || undefined}>
|
|
88
|
+
<LabelContext.Provider value={{...labelProps, ref: labelRef, elementType: 'span'}}>
|
|
89
|
+
{renderProps.children}
|
|
90
|
+
</LabelContext.Provider>
|
|
91
|
+
</dom.div>
|
|
92
|
+
);
|
|
93
|
+
});
|