@proyecto-viviana/solidaria 0.2.5 → 0.3.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 +21 -0
- package/README.md +31 -236
- package/dist/actiongroup/createActionGroup.d.ts +29 -0
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
- package/dist/actiongroup/index.d.ts +2 -0
- package/dist/actiongroup/index.d.ts.map +1 -0
- package/dist/autocomplete/createAutocomplete.d.ts +16 -12
- package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
- package/dist/autocomplete/index.d.ts +1 -1
- package/dist/autocomplete/index.d.ts.map +1 -1
- package/dist/breadcrumbs/createBreadcrumbs.d.ts +11 -7
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/breadcrumbs/index.d.ts +1 -1
- package/dist/button/createButton.d.ts +1 -1
- package/dist/button/createButton.d.ts.map +1 -1
- package/dist/button/createToggleButton.d.ts +3 -3
- package/dist/button/createToggleButtonGroup.d.ts +32 -0
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
- package/dist/button/index.d.ts +6 -4
- package/dist/button/index.d.ts.map +1 -1
- package/dist/button/types.d.ts +18 -12
- package/dist/button/types.d.ts.map +1 -1
- package/dist/calendar/createCalendar.d.ts +15 -5
- package/dist/calendar/createCalendar.d.ts.map +1 -1
- package/dist/calendar/createCalendarCell.d.ts +8 -2
- package/dist/calendar/createCalendarCell.d.ts.map +1 -1
- package/dist/calendar/createCalendarGrid.d.ts +4 -4
- package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendar.d.ts +15 -5
- package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts +7 -3
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/calendar/index.d.ts +5 -5
- package/dist/calendar/index.d.ts.map +1 -1
- package/dist/calendar/intl/index.d.ts +12 -0
- package/dist/calendar/intl/index.d.ts.map +1 -0
- package/dist/calendar/utils.d.ts +12 -0
- package/dist/calendar/utils.d.ts.map +1 -0
- package/dist/checkbox/createCheckbox.d.ts +6 -6
- package/dist/checkbox/createCheckbox.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroup.d.ts +11 -7
- package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
- package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
- package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
- package/dist/checkbox/index.d.ts +8 -8
- package/dist/checkbox/index.d.ts.map +1 -1
- package/dist/collections/index.d.ts +56 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/color/createColorArea.d.ts +3 -3
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorField.d.ts +4 -4
- package/dist/color/createColorField.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts +4 -4
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorSwatch.d.ts +2 -2
- package/dist/color/createColorSwatch.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts +3 -3
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/color/index.d.ts +6 -6
- package/dist/color/types.d.ts +98 -16
- package/dist/color/types.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +16 -7
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/combobox/index.d.ts +1 -1
- package/dist/combobox/intl/index.d.ts +1 -1
- package/dist/datepicker/createDateField.d.ts +18 -6
- package/dist/datepicker/createDateField.d.ts.map +1 -1
- package/dist/datepicker/createDatePicker.d.ts +57 -5
- package/dist/datepicker/createDatePicker.d.ts.map +1 -1
- package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
- package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
- package/dist/datepicker/createDateRangePicker.d.ts +42 -0
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
- package/dist/datepicker/createDateSegment.d.ts +11 -3
- package/dist/datepicker/createDateSegment.d.ts.map +1 -1
- package/dist/datepicker/createTimeField.d.ts +11 -5
- package/dist/datepicker/createTimeField.d.ts.map +1 -1
- package/dist/datepicker/createTimeSegment.d.ts +29 -0
- package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +7 -4
- package/dist/datepicker/index.d.ts.map +1 -1
- package/dist/dialog/createDialog.d.ts +5 -5
- package/dist/dialog/createDialog.d.ts.map +1 -1
- package/dist/dialog/index.d.ts +2 -2
- package/dist/dialog/index.d.ts.map +1 -1
- package/dist/dialog/types.d.ts +4 -4
- package/dist/disclosure/createDisclosure.d.ts +5 -2
- package/dist/disclosure/createDisclosure.d.ts.map +1 -1
- package/dist/disclosure/createDisclosureGroup.d.ts +4 -3
- package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
- package/dist/disclosure/index.d.ts +2 -2
- package/dist/dnd/createDrag.d.ts +2 -2
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts +6 -2
- package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
- package/dist/dnd/createDraggableItem.d.ts +3 -3
- package/dist/dnd/createDraggableItem.d.ts.map +1 -1
- package/dist/dnd/createDrop.d.ts +2 -2
- package/dist/dnd/createDrop.d.ts.map +1 -1
- package/dist/dnd/createDroppableCollection.d.ts +55 -4
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts +3 -3
- package/dist/dnd/createDroppableItem.d.ts.map +1 -1
- package/dist/dnd/index.d.ts +12 -12
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/dnd/types.d.ts +2 -2
- package/dist/dnd/types.d.ts.map +1 -1
- package/dist/dnd/utils.d.ts +1 -1
- package/dist/dnd/utils.d.ts.map +1 -1
- package/dist/focus/FocusScope.d.ts +1 -1
- package/dist/focus/FocusScope.d.ts.map +1 -1
- package/dist/focus/createAutoFocus.d.ts.map +1 -1
- package/dist/focus/createFocusRestore.d.ts.map +1 -1
- package/dist/focus/createVirtualFocus.d.ts +4 -4
- package/dist/focus/createVirtualFocus.d.ts.map +1 -1
- package/dist/focus/index.d.ts +4 -4
- package/dist/focus/index.d.ts.map +1 -1
- package/dist/form/createFormReset.d.ts +1 -1
- package/dist/form/createFormValidation.d.ts +3 -3
- package/dist/form/createFormValidation.d.ts.map +1 -1
- package/dist/form/index.d.ts +2 -2
- package/dist/form/index.d.ts.map +1 -1
- package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
- package/dist/grid/createGrid.d.ts +3 -3
- package/dist/grid/createGrid.d.ts.map +1 -1
- package/dist/grid/createGridCell.d.ts +3 -3
- package/dist/grid/createGridRow.d.ts +3 -3
- package/dist/grid/index.d.ts +5 -5
- package/dist/grid/types.d.ts +8 -8
- package/dist/gridlist/createGridList.d.ts +6 -4
- package/dist/gridlist/createGridList.d.ts.map +1 -1
- package/dist/gridlist/createGridListItem.d.ts +4 -4
- package/dist/gridlist/createGridListItem.d.ts.map +1 -1
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
- package/dist/gridlist/index.d.ts +4 -4
- package/dist/gridlist/types.d.ts +11 -7
- package/dist/gridlist/types.d.ts.map +1 -1
- package/dist/i18n/createCollator.d.ts.map +1 -1
- package/dist/i18n/createDateFormatter.d.ts.map +1 -1
- package/dist/i18n/createFilter.d.ts.map +1 -1
- package/dist/i18n/createNumberFormatter.d.ts +1 -1
- package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
- package/dist/i18n/createStringFormatter.d.ts +2 -2
- package/dist/i18n/createStringFormatter.d.ts.map +1 -1
- package/dist/i18n/index.d.ts +8 -8
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/locale.d.ts +2 -2
- package/dist/i18n/locale.d.ts.map +1 -1
- package/dist/i18n/utils.d.ts.map +1 -1
- package/dist/index.d.ts +52 -49
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18089 -15690
- package/dist/index.js.map +1 -7
- package/dist/index.jsx +18242 -0
- package/dist/index.jsx.map +1 -0
- package/dist/interactions/FocusableProvider.d.ts +2 -2
- package/dist/interactions/FocusableProvider.d.ts.map +1 -1
- package/dist/interactions/PressEvent.d.ts +2 -2
- package/dist/interactions/createFocus.d.ts +1 -1
- package/dist/interactions/createFocus.d.ts.map +1 -1
- package/dist/interactions/createFocusRing.d.ts +1 -1
- package/dist/interactions/createFocusRing.d.ts.map +1 -1
- package/dist/interactions/createFocusWithin.d.ts +1 -1
- package/dist/interactions/createFocusWithin.d.ts.map +1 -1
- package/dist/interactions/createFocusable.d.ts +3 -3
- package/dist/interactions/createFocusable.d.ts.map +1 -1
- package/dist/interactions/createHover.d.ts +5 -5
- package/dist/interactions/createHover.d.ts.map +1 -1
- package/dist/interactions/createInteractionModality.d.ts +3 -3
- package/dist/interactions/createInteractionModality.d.ts.map +1 -1
- package/dist/interactions/createKeyboard.d.ts +1 -1
- package/dist/interactions/createLongPress.d.ts +5 -5
- package/dist/interactions/createMove.d.ts +5 -5
- package/dist/interactions/createMove.d.ts.map +1 -1
- package/dist/interactions/createPress.d.ts +4 -4
- package/dist/interactions/createPress.d.ts.map +1 -1
- package/dist/interactions/index.d.ts +12 -12
- package/dist/interactions/index.d.ts.map +1 -1
- package/dist/label/createField.d.ts +4 -4
- package/dist/label/createField.d.ts.map +1 -1
- package/dist/label/createLabel.d.ts +7 -7
- package/dist/label/createLabel.d.ts.map +1 -1
- package/dist/label/createLabels.d.ts +1 -1
- package/dist/label/createLabels.d.ts.map +1 -1
- package/dist/label/index.d.ts +5 -5
- package/dist/landmark/createLandmark.d.ts +5 -5
- package/dist/landmark/createLandmark.d.ts.map +1 -1
- package/dist/landmark/index.d.ts +1 -1
- package/dist/link/createLink.d.ts +23 -7
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/link/index.d.ts +1 -1
- package/dist/listbox/createListBox.d.ts +12 -6
- package/dist/listbox/createListBox.d.ts.map +1 -1
- package/dist/listbox/createOption.d.ts +21 -4
- package/dist/listbox/createOption.d.ts.map +1 -1
- package/dist/listbox/index.d.ts +2 -2
- package/dist/listbox/index.d.ts.map +1 -1
- package/dist/live-announcer/announce.d.ts +2 -2
- package/dist/live-announcer/announce.d.ts.map +1 -1
- package/dist/live-announcer/index.d.ts +1 -1
- package/dist/menu/createMenu.d.ts +8 -7
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/menu/createMenuItem.d.ts +16 -4
- package/dist/menu/createMenuItem.d.ts.map +1 -1
- package/dist/menu/createMenuTrigger.d.ts +4 -4
- package/dist/menu/index.d.ts +3 -3
- package/dist/menu/index.d.ts.map +1 -1
- package/dist/meter/createMeter.d.ts +6 -6
- package/dist/meter/createMeter.d.ts.map +1 -1
- package/dist/meter/index.d.ts +1 -1
- package/dist/numberfield/createNumberField.d.ts +27 -8
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/numberfield/index.d.ts +1 -1
- package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
- package/dist/overlays/createModal.d.ts +19 -3
- package/dist/overlays/createModal.d.ts.map +1 -1
- package/dist/overlays/createOverlay.d.ts +1 -1
- package/dist/overlays/createOverlay.d.ts.map +1 -1
- package/dist/overlays/createOverlayTrigger.d.ts +6 -6
- package/dist/overlays/index.d.ts +6 -6
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/popover/calculatePosition.d.ts +4 -4
- package/dist/popover/calculatePosition.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts +3 -3
- package/dist/popover/createOverlayPosition.d.ts.map +1 -1
- package/dist/popover/createPopover.d.ts +4 -4
- package/dist/popover/createPopover.d.ts.map +1 -1
- package/dist/popover/index.d.ts +3 -3
- package/dist/progress/createProgressBar.d.ts +7 -5
- package/dist/progress/createProgressBar.d.ts.map +1 -1
- package/dist/progress/index.d.ts +1 -1
- package/dist/radio/createRadio.d.ts +7 -7
- package/dist/radio/createRadio.d.ts.map +1 -1
- package/dist/radio/createRadioGroup.d.ts +11 -11
- package/dist/radio/createRadioGroup.d.ts.map +1 -1
- package/dist/radio/createRadioGroupState.d.ts +3 -3
- package/dist/radio/createRadioGroupState.d.ts.map +1 -1
- package/dist/radio/index.d.ts +3 -3
- package/dist/radio/index.d.ts.map +1 -1
- package/dist/searchfield/createSearchField.d.ts +7 -7
- package/dist/searchfield/createSearchField.d.ts.map +1 -1
- package/dist/searchfield/index.d.ts +2 -2
- package/dist/select/createHiddenSelect.d.ts +4 -4
- package/dist/select/createHiddenSelect.d.ts.map +1 -1
- package/dist/select/createSelect.d.ts +14 -6
- package/dist/select/createSelect.d.ts.map +1 -1
- package/dist/select/index.d.ts +2 -2
- package/dist/select/index.d.ts.map +1 -1
- package/dist/selection/createTypeSelect.d.ts +2 -2
- package/dist/selection/index.d.ts +1 -1
- package/dist/separator/createSeparator.d.ts +9 -5
- package/dist/separator/createSeparator.d.ts.map +1 -1
- package/dist/separator/index.d.ts +1 -1
- package/dist/slider/createSlider.d.ts +11 -7
- package/dist/slider/createSlider.d.ts.map +1 -1
- package/dist/slider/index.d.ts +2 -2
- package/dist/ssr/index.d.ts +1 -1
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/steplist/createStepList.d.ts +36 -0
- package/dist/steplist/createStepList.d.ts.map +1 -0
- package/dist/steplist/index.d.ts +2 -0
- package/dist/steplist/index.d.ts.map +1 -0
- package/dist/switch/createSwitch.d.ts +6 -4
- package/dist/switch/createSwitch.d.ts.map +1 -1
- package/dist/switch/index.d.ts +1 -1
- package/dist/table/createTable.d.ts +3 -3
- package/dist/table/createTable.d.ts.map +1 -1
- package/dist/table/createTableCell.d.ts +3 -3
- package/dist/table/createTableCell.d.ts.map +1 -1
- package/dist/table/createTableColumnHeader.d.ts +3 -3
- package/dist/table/createTableColumnHeader.d.ts.map +1 -1
- package/dist/table/createTableColumnResize.d.ts +41 -0
- package/dist/table/createTableColumnResize.d.ts.map +1 -0
- package/dist/table/createTableHeaderRow.d.ts +3 -3
- package/dist/table/createTableRow.d.ts +3 -3
- package/dist/table/createTableRow.d.ts.map +1 -1
- package/dist/table/createTableRowGroup.d.ts +2 -2
- package/dist/table/createTableRowGroup.d.ts.map +1 -1
- package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
- package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
- package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
- package/dist/table/index.d.ts +11 -9
- package/dist/table/index.d.ts.map +1 -1
- package/dist/table/types.d.ts +15 -7
- package/dist/table/types.d.ts.map +1 -1
- package/dist/tabs/createTabs.d.ts +28 -25
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tabs/index.d.ts +1 -1
- package/dist/tag/createTag.d.ts +2 -2
- package/dist/tag/createTag.d.ts.map +1 -1
- package/dist/tag/createTagGroup.d.ts +5 -5
- package/dist/tag/createTagGroup.d.ts.map +1 -1
- package/dist/tag/index.d.ts +2 -2
- package/dist/tag/index.d.ts.map +1 -1
- package/dist/textfield/createTextField.d.ts +17 -11
- package/dist/textfield/createTextField.d.ts.map +1 -1
- package/dist/textfield/index.d.ts +1 -1
- package/dist/textfield/index.d.ts.map +1 -1
- package/dist/toast/createToast.d.ts +6 -2
- package/dist/toast/createToast.d.ts.map +1 -1
- package/dist/toast/createToastRegion.d.ts +5 -3
- package/dist/toast/createToastRegion.d.ts.map +1 -1
- package/dist/toast/index.d.ts +2 -2
- package/dist/toast/index.d.ts.map +1 -1
- package/dist/toggle/createToggle.d.ts +9 -9
- package/dist/toggle/createToggle.d.ts.map +1 -1
- package/dist/toggle/createToggleState.d.ts +2 -2
- package/dist/toggle/createToggleState.d.ts.map +1 -1
- package/dist/toggle/index.d.ts +4 -4
- package/dist/toggle/index.d.ts.map +1 -1
- package/dist/toolbar/createToolbar.d.ts +9 -9
- package/dist/toolbar/createToolbar.d.ts.map +1 -1
- package/dist/toolbar/index.d.ts +1 -1
- package/dist/toolbar/index.d.ts.map +1 -1
- package/dist/tooltip/createTooltip.d.ts +5 -5
- package/dist/tooltip/createTooltip.d.ts.map +1 -1
- package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
- package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
- package/dist/tooltip/index.d.ts +2 -2
- package/dist/tree/createTree.d.ts +3 -3
- package/dist/tree/createTree.d.ts.map +1 -1
- package/dist/tree/createTreeItem.d.ts +4 -4
- package/dist/tree/createTreeItem.d.ts.map +1 -1
- package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
- package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
- package/dist/tree/index.d.ts +4 -4
- package/dist/tree/types.d.ts +13 -5
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/createDescription.d.ts +2 -2
- package/dist/utils/createDescription.d.ts.map +1 -1
- package/dist/utils/dom.d.ts.map +1 -1
- package/dist/utils/env.d.ts +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/focus.d.ts +1 -1
- package/dist/utils/focus.d.ts.map +1 -1
- package/dist/utils/geometry.d.ts.map +1 -1
- package/dist/utils/index.d.ts +12 -12
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/mergeProps.d.ts.map +1 -1
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/reactivity.d.ts +1 -1
- package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
- package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
- package/dist/visually-hidden/index.d.ts +1 -1
- package/package.json +34 -32
- package/src/actiongroup/createActionGroup.ts +334 -0
- package/src/actiongroup/index.ts +8 -0
- package/src/autocomplete/createAutocomplete.ts +137 -131
- package/src/autocomplete/index.ts +1 -1
- package/src/breadcrumbs/createBreadcrumbs.ts +37 -51
- package/src/breadcrumbs/index.ts +1 -1
- package/src/button/createButton.ts +102 -73
- package/src/button/createToggleButton.ts +10 -10
- package/src/button/createToggleButtonGroup.ts +121 -0
- package/src/button/index.ts +10 -4
- package/src/button/types.ts +18 -12
- package/src/calendar/createCalendar.ts +62 -29
- package/src/calendar/createCalendarCell.ts +102 -48
- package/src/calendar/createCalendarGrid.ts +78 -47
- package/src/calendar/createRangeCalendar.ts +66 -31
- package/src/calendar/createRangeCalendarCell.ts +115 -37
- package/src/calendar/index.ts +5 -9
- package/src/calendar/intl/index.ts +210 -0
- package/src/calendar/utils.ts +227 -0
- package/src/checkbox/createCheckbox.ts +13 -21
- package/src/checkbox/createCheckboxGroup.ts +86 -45
- package/src/checkbox/createCheckboxGroupItem.ts +16 -27
- package/src/checkbox/createCheckboxGroupState.ts +3 -22
- package/src/checkbox/index.ts +8 -10
- package/src/collections/index.ts +246 -0
- package/src/color/createColorArea.ts +458 -314
- package/src/color/createColorField.ts +186 -137
- package/src/color/createColorSlider.ts +444 -197
- package/src/color/createColorSwatch.ts +65 -40
- package/src/color/createColorWheel.ts +343 -208
- package/src/color/index.ts +24 -24
- package/src/color/types.ts +198 -116
- package/src/combobox/createComboBox.ts +727 -647
- package/src/combobox/index.ts +6 -6
- package/src/combobox/intl/index.ts +5 -5
- package/src/datepicker/createDateField.ts +192 -39
- package/src/datepicker/createDatePicker.ts +294 -63
- package/src/datepicker/createDatePickerGroup.ts +149 -0
- package/src/datepicker/createDateRangePicker.ts +294 -0
- package/src/datepicker/createDateSegment.ts +316 -75
- package/src/datepicker/createTimeField.ts +38 -34
- package/src/datepicker/createTimeSegment.ts +352 -0
- package/src/datepicker/index.ts +24 -11
- package/src/dialog/createDialog.ts +127 -120
- package/src/dialog/index.ts +2 -2
- package/src/dialog/types.ts +19 -19
- package/src/disclosure/createDisclosure.ts +138 -33
- package/src/disclosure/createDisclosureGroup.ts +8 -18
- package/src/disclosure/index.ts +2 -2
- package/src/dnd/createDrag.ts +218 -209
- package/src/dnd/createDraggableCollection.ts +96 -63
- package/src/dnd/createDraggableItem.ts +260 -243
- package/src/dnd/createDrop.ts +313 -321
- package/src/dnd/createDroppableCollection.ts +799 -293
- package/src/dnd/createDroppableItem.ts +215 -213
- package/src/dnd/index.ts +66 -47
- package/src/dnd/types.ts +86 -89
- package/src/dnd/utils.ts +281 -294
- package/src/focus/FocusScope.tsx +155 -164
- package/src/focus/createAutoFocus.ts +305 -321
- package/src/focus/createFocusRestore.ts +300 -313
- package/src/focus/createVirtualFocus.ts +380 -396
- package/src/focus/index.ts +4 -8
- package/src/form/createFormReset.ts +4 -4
- package/src/form/createFormValidation.ts +201 -224
- package/src/form/index.ts +8 -11
- package/src/grid/GridKeyboardDelegate.ts +30 -30
- package/src/grid/createGrid.ts +38 -36
- package/src/grid/createGridCell.ts +18 -18
- package/src/grid/createGridRow.ts +14 -14
- package/src/grid/index.ts +5 -5
- package/src/grid/types.ts +8 -8
- package/src/gridlist/createGridList.ts +45 -24
- package/src/gridlist/createGridListItem.ts +68 -23
- package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
- package/src/gridlist/index.ts +4 -4
- package/src/gridlist/types.ts +11 -7
- package/src/i18n/createCollator.ts +66 -79
- package/src/i18n/createDateFormatter.ts +75 -83
- package/src/i18n/createFilter.ts +118 -131
- package/src/i18n/createNumberFormatter.ts +50 -52
- package/src/i18n/createStringFormatter.ts +19 -15
- package/src/i18n/index.ts +37 -40
- package/src/i18n/locale.tsx +163 -188
- package/src/i18n/utils.ts +95 -99
- package/src/index.ts +114 -164
- package/src/interactions/FocusableProvider.tsx +3 -7
- package/src/interactions/PressEvent.ts +4 -4
- package/src/interactions/createFocus.ts +16 -11
- package/src/interactions/createFocusRing.ts +21 -19
- package/src/interactions/createFocusWithin.ts +24 -16
- package/src/interactions/createFocusable.ts +15 -16
- package/src/interactions/createHover.ts +70 -55
- package/src/interactions/createInteractionModality.ts +75 -82
- package/src/interactions/createKeyboard.ts +2 -2
- package/src/interactions/createLongPress.ts +174 -174
- package/src/interactions/createMove.ts +299 -289
- package/src/interactions/createPress.ts +168 -91
- package/src/interactions/index.ts +24 -16
- package/src/label/createField.ts +18 -19
- package/src/label/createLabel.ts +18 -30
- package/src/label/createLabels.ts +8 -12
- package/src/label/index.ts +5 -5
- package/src/landmark/createLandmark.ts +356 -377
- package/src/landmark/index.ts +8 -8
- package/src/link/createLink.ts +96 -54
- package/src/link/index.ts +1 -1
- package/src/listbox/createListBox.ts +319 -269
- package/src/listbox/createOption.ts +208 -151
- package/src/listbox/index.ts +8 -12
- package/src/live-announcer/announce.ts +295 -322
- package/src/live-announcer/index.ts +9 -9
- package/src/menu/createMenu.ts +434 -396
- package/src/menu/createMenuItem.ts +201 -149
- package/src/menu/createMenuTrigger.ts +88 -88
- package/src/menu/index.ts +9 -18
- package/src/meter/createMeter.ts +7 -20
- package/src/meter/index.ts +1 -1
- package/src/numberfield/createNumberField.ts +368 -268
- package/src/numberfield/index.ts +5 -5
- package/src/overlays/ariaHideOutside.ts +223 -219
- package/src/overlays/createInteractOutside.ts +152 -149
- package/src/overlays/createModal.tsx +238 -202
- package/src/overlays/createOverlay.ts +195 -155
- package/src/overlays/createOverlayTrigger.ts +85 -85
- package/src/overlays/createPreventScroll.ts +288 -266
- package/src/overlays/index.ts +37 -44
- package/src/popover/calculatePosition.ts +117 -119
- package/src/popover/createOverlayPosition.ts +52 -43
- package/src/popover/createPopover.ts +63 -24
- package/src/popover/index.ts +3 -3
- package/src/progress/createProgressBar.ts +36 -32
- package/src/progress/index.ts +1 -1
- package/src/radio/createRadio.ts +95 -73
- package/src/radio/createRadioGroup.ts +142 -62
- package/src/radio/createRadioGroupState.ts +7 -31
- package/src/radio/index.ts +3 -8
- package/src/searchfield/createSearchField.ts +269 -186
- package/src/searchfield/index.ts +2 -2
- package/src/select/createHiddenSelect.tsx +276 -236
- package/src/select/createSelect.ts +430 -395
- package/src/select/index.ts +9 -14
- package/src/selection/createTypeSelect.ts +11 -11
- package/src/selection/index.ts +1 -1
- package/src/separator/createSeparator.ts +20 -25
- package/src/separator/index.ts +1 -1
- package/src/slider/createSlider.ts +333 -349
- package/src/slider/index.ts +2 -2
- package/src/ssr/index.tsx +331 -370
- package/src/steplist/createStepList.ts +106 -0
- package/src/steplist/index.ts +8 -0
- package/src/switch/createSwitch.ts +9 -14
- package/src/switch/index.ts +1 -1
- package/src/table/createTable.ts +155 -86
- package/src/table/createTableCell.ts +17 -16
- package/src/table/createTableColumnHeader.ts +67 -20
- package/src/table/createTableColumnResize.ts +256 -0
- package/src/table/createTableHeaderRow.ts +7 -7
- package/src/table/createTableRow.ts +149 -29
- package/src/table/createTableRowGroup.ts +5 -7
- package/src/table/createTableSelectAllCheckbox.ts +12 -11
- package/src/table/createTableSelectionCheckbox.ts +8 -8
- package/src/table/index.ts +14 -9
- package/src/table/types.ts +15 -7
- package/src/tabs/createTabs.ts +138 -127
- package/src/tabs/index.ts +1 -1
- package/src/tag/createTag.ts +171 -40
- package/src/tag/createTagGroup.ts +50 -39
- package/src/tag/index.ts +2 -6
- package/src/textfield/createTextField.ts +67 -35
- package/src/textfield/index.ts +1 -5
- package/src/toast/createToast.ts +34 -26
- package/src/toast/createToastRegion.ts +169 -27
- package/src/toast/index.ts +2 -6
- package/src/toggle/createToggle.ts +95 -53
- package/src/toggle/createToggleState.ts +2 -10
- package/src/toggle/index.ts +4 -5
- package/src/toolbar/createToolbar.ts +226 -169
- package/src/toolbar/index.ts +1 -1
- package/src/tooltip/createTooltip.ts +66 -79
- package/src/tooltip/createTooltipTrigger.ts +238 -222
- package/src/tooltip/index.ts +6 -6
- package/src/tree/createTree.ts +259 -246
- package/src/tree/createTreeItem.ts +282 -233
- package/src/tree/createTreeSelectionCheckbox.ts +71 -68
- package/src/tree/index.ts +16 -16
- package/src/tree/types.ts +95 -87
- package/src/utils/createDescription.ts +6 -23
- package/src/utils/dom.ts +61 -54
- package/src/utils/env.ts +53 -54
- package/src/utils/events.ts +7 -7
- package/src/utils/filterDOMProps.ts +49 -49
- package/src/utils/focus.ts +60 -68
- package/src/utils/geometry.ts +1 -4
- package/src/utils/globalListeners.ts +9 -9
- package/src/utils/index.ts +12 -22
- package/src/utils/mergeProps.ts +42 -15
- package/src/utils/platform.ts +16 -6
- package/src/utils/reactivity.ts +3 -3
- package/src/utils/textSelection.ts +16 -16
- package/src/visually-hidden/createVisuallyHidden.ts +127 -124
- package/src/visually-hidden/index.ts +6 -6
- package/dist/i18n/NumberFormatter.d.ts +0 -43
- package/dist/i18n/NumberFormatter.d.ts.map +0 -1
- package/dist/index.ssr.js +0 -15875
- package/dist/index.ssr.js.map +0 -7
- package/src/i18n/NumberFormatter.ts +0 -266
package/src/focus/FocusScope.tsx
CHANGED
|
@@ -13,64 +13,56 @@ import {
|
|
|
13
13
|
type ParentComponent,
|
|
14
14
|
createSignal,
|
|
15
15
|
onMount,
|
|
16
|
-
} from
|
|
17
|
-
import { isServer } from
|
|
18
|
-
import { getOwnerDocument, isFocusable } from
|
|
19
|
-
import { focusSafely } from
|
|
20
|
-
|
|
21
|
-
// ============================================
|
|
22
|
-
// TYPES
|
|
23
|
-
// ============================================
|
|
16
|
+
} from "solid-js";
|
|
17
|
+
import { isServer } from "solid-js/web";
|
|
18
|
+
import { getOwnerDocument, isFocusable } from "../utils";
|
|
19
|
+
import { focusSafely } from "../utils/focus";
|
|
24
20
|
|
|
25
21
|
export interface FocusScopeProps {
|
|
26
22
|
/** The contents of the focus scope. */
|
|
27
|
-
children: JSX.Element
|
|
23
|
+
children: JSX.Element;
|
|
28
24
|
/**
|
|
29
25
|
* Whether to contain focus inside the scope, so users cannot
|
|
30
26
|
* move focus outside, for example in a modal dialog.
|
|
31
27
|
*/
|
|
32
|
-
contain?: boolean
|
|
28
|
+
contain?: boolean;
|
|
33
29
|
/**
|
|
34
30
|
* Whether to restore focus back to the element that was focused
|
|
35
31
|
* when the focus scope mounted, after the focus scope unmounts.
|
|
36
32
|
*/
|
|
37
|
-
restoreFocus?: boolean
|
|
33
|
+
restoreFocus?: boolean;
|
|
38
34
|
/** Whether to auto focus the first focusable element in the focus scope on mount. */
|
|
39
|
-
autoFocus?: boolean
|
|
35
|
+
autoFocus?: boolean;
|
|
40
36
|
}
|
|
41
37
|
|
|
42
38
|
export interface FocusManagerOptions {
|
|
43
39
|
/** The element to start searching from. The currently focused element by default. */
|
|
44
|
-
from?: Element
|
|
40
|
+
from?: Element;
|
|
45
41
|
/** Whether to only include tabbable elements, or all focusable elements. */
|
|
46
|
-
tabbable?: boolean
|
|
42
|
+
tabbable?: boolean;
|
|
47
43
|
/** Whether focus should wrap around when it reaches the end of the scope. */
|
|
48
|
-
wrap?: boolean
|
|
44
|
+
wrap?: boolean;
|
|
49
45
|
/** A callback that determines whether the given element is focused. */
|
|
50
|
-
accept?: (node: Element) => boolean
|
|
46
|
+
accept?: (node: Element) => boolean;
|
|
51
47
|
}
|
|
52
48
|
|
|
53
49
|
export interface FocusManager {
|
|
54
50
|
/** Moves focus to the next focusable or tabbable element in the focus scope. */
|
|
55
|
-
focusNext(opts?: FocusManagerOptions): HTMLElement | null
|
|
51
|
+
focusNext(opts?: FocusManagerOptions): HTMLElement | null;
|
|
56
52
|
/** Moves focus to the previous focusable or tabbable element in the focus scope. */
|
|
57
|
-
focusPrevious(opts?: FocusManagerOptions): HTMLElement | null
|
|
53
|
+
focusPrevious(opts?: FocusManagerOptions): HTMLElement | null;
|
|
58
54
|
/** Moves focus to the first focusable or tabbable element in the focus scope. */
|
|
59
|
-
focusFirst(opts?: FocusManagerOptions): HTMLElement | null
|
|
55
|
+
focusFirst(opts?: FocusManagerOptions): HTMLElement | null;
|
|
60
56
|
/** Moves focus to the last focusable or tabbable element in the focus scope. */
|
|
61
|
-
focusLast(opts?: FocusManagerOptions): HTMLElement | null
|
|
57
|
+
focusLast(opts?: FocusManagerOptions): HTMLElement | null;
|
|
62
58
|
}
|
|
63
59
|
|
|
64
|
-
// ============================================
|
|
65
|
-
// CONTEXT
|
|
66
|
-
// ============================================
|
|
67
|
-
|
|
68
60
|
interface FocusScopeContextValue {
|
|
69
|
-
focusManager: FocusManager
|
|
70
|
-
scopeRef: Accessor<Element[]
|
|
61
|
+
focusManager: FocusManager;
|
|
62
|
+
scopeRef: Accessor<Element[]>;
|
|
71
63
|
}
|
|
72
64
|
|
|
73
|
-
const FocusScopeContext = createContext<FocusScopeContextValue | null>(null)
|
|
65
|
+
const FocusScopeContext = createContext<FocusScopeContextValue | null>(null);
|
|
74
66
|
|
|
75
67
|
/**
|
|
76
68
|
* Returns a FocusManager interface for the parent FocusScope.
|
|
@@ -78,79 +70,71 @@ const FocusScopeContext = createContext<FocusScopeContextValue | null>(null)
|
|
|
78
70
|
* a FocusScope, e.g. in response to user events like keyboard navigation.
|
|
79
71
|
*/
|
|
80
72
|
export function useFocusManager(): FocusManager | undefined {
|
|
81
|
-
return useContext(FocusScopeContext)?.focusManager
|
|
73
|
+
return useContext(FocusScopeContext)?.focusManager;
|
|
82
74
|
}
|
|
83
75
|
|
|
84
|
-
// ============================================
|
|
85
|
-
// UTILITIES
|
|
86
|
-
// ============================================
|
|
87
|
-
|
|
88
76
|
/**
|
|
89
77
|
* Checks if an element is tabbable (focusable via Tab key).
|
|
90
78
|
*/
|
|
91
79
|
function isTabbable(element: Element): boolean {
|
|
92
80
|
if (!isFocusable(element)) {
|
|
93
|
-
return false
|
|
81
|
+
return false;
|
|
94
82
|
}
|
|
95
83
|
|
|
96
84
|
// Check tabIndex
|
|
97
|
-
const tabIndex = element.getAttribute(
|
|
85
|
+
const tabIndex = element.getAttribute("tabindex");
|
|
98
86
|
if (tabIndex != null) {
|
|
99
|
-
return parseInt(tabIndex, 10) >= 0
|
|
87
|
+
return parseInt(tabIndex, 10) >= 0;
|
|
100
88
|
}
|
|
101
89
|
|
|
102
|
-
return true
|
|
90
|
+
return true;
|
|
103
91
|
}
|
|
104
92
|
|
|
105
93
|
/**
|
|
106
94
|
* Gets all focusable elements within a scope.
|
|
107
95
|
*/
|
|
108
96
|
function getFocusableElements(scope: Element[], tabbable = false): HTMLElement[] {
|
|
109
|
-
const elements: HTMLElement[] = []
|
|
110
|
-
const filter = tabbable ? isTabbable : isFocusable
|
|
97
|
+
const elements: HTMLElement[] = [];
|
|
98
|
+
const filter = tabbable ? isTabbable : isFocusable;
|
|
111
99
|
|
|
112
100
|
for (const scopeElement of scope) {
|
|
113
101
|
// Check the element itself
|
|
114
102
|
if (filter(scopeElement)) {
|
|
115
|
-
elements.push(scopeElement as HTMLElement)
|
|
103
|
+
elements.push(scopeElement as HTMLElement);
|
|
116
104
|
}
|
|
117
105
|
|
|
118
106
|
// Check all descendants
|
|
119
|
-
const descendants = scopeElement.querySelectorAll(
|
|
107
|
+
const descendants = scopeElement.querySelectorAll("*");
|
|
120
108
|
for (let i = 0; i < descendants.length; i++) {
|
|
121
|
-
const el = descendants[i]
|
|
109
|
+
const el = descendants[i];
|
|
122
110
|
if (filter(el)) {
|
|
123
|
-
elements.push(el as HTMLElement)
|
|
111
|
+
elements.push(el as HTMLElement);
|
|
124
112
|
}
|
|
125
113
|
}
|
|
126
114
|
}
|
|
127
115
|
|
|
128
|
-
return elements
|
|
116
|
+
return elements;
|
|
129
117
|
}
|
|
130
118
|
|
|
131
119
|
/**
|
|
132
120
|
* Checks if an element is within a scope.
|
|
133
121
|
*/
|
|
134
122
|
function isElementInScope(element: Element | null, scope: Element[]): boolean {
|
|
135
|
-
if (!element) return false
|
|
136
|
-
return scope.some(node => node.contains(element))
|
|
123
|
+
if (!element) return false;
|
|
124
|
+
return scope.some((node) => node.contains(element));
|
|
137
125
|
}
|
|
138
126
|
|
|
139
127
|
/**
|
|
140
128
|
* Gets the active element, accounting for shadow DOM.
|
|
141
129
|
*/
|
|
142
130
|
function getActiveElement(doc: Document): Element | null {
|
|
143
|
-
let activeElement = doc.activeElement
|
|
131
|
+
let activeElement = doc.activeElement;
|
|
144
132
|
while (activeElement?.shadowRoot?.activeElement) {
|
|
145
|
-
activeElement = activeElement.shadowRoot.activeElement
|
|
133
|
+
activeElement = activeElement.shadowRoot.activeElement;
|
|
146
134
|
}
|
|
147
|
-
return activeElement
|
|
135
|
+
return activeElement;
|
|
148
136
|
}
|
|
149
137
|
|
|
150
|
-
// ============================================
|
|
151
|
-
// FOCUS SCOPE COMPONENT
|
|
152
|
-
// ============================================
|
|
153
|
-
|
|
154
138
|
/**
|
|
155
139
|
* A FocusScope manages focus for its descendants. It supports containing focus inside
|
|
156
140
|
* the scope, restoring focus to the previously focused element on unmount, and auto
|
|
@@ -160,135 +144,142 @@ function getActiveElement(doc: Document): Element | null {
|
|
|
160
144
|
*/
|
|
161
145
|
export const FocusScope: ParentComponent<FocusScopeProps> = (props) => {
|
|
162
146
|
if (isServer) {
|
|
163
|
-
return <>{props.children}
|
|
147
|
+
return <>{props.children}</>;
|
|
164
148
|
}
|
|
165
149
|
|
|
166
|
-
let startRef: HTMLSpanElement | undefined
|
|
167
|
-
let endRef: HTMLSpanElement | undefined
|
|
168
|
-
const [scopeElements, setScopeElements] = createSignal<Element[]>([])
|
|
150
|
+
let startRef: HTMLSpanElement | undefined;
|
|
151
|
+
let endRef: HTMLSpanElement | undefined;
|
|
152
|
+
const [scopeElements, setScopeElements] = createSignal<Element[]>([]);
|
|
169
153
|
|
|
170
154
|
// Store the element that was focused when the scope mounted
|
|
171
|
-
let nodeToRestore: Element | null = null
|
|
155
|
+
let nodeToRestore: Element | null = null;
|
|
156
|
+
|
|
157
|
+
const getRestorableElement = (element: Element | null, doc: Document): Element | null => {
|
|
158
|
+
if (!element || element === doc.body || element === doc.documentElement) {
|
|
159
|
+
return null;
|
|
160
|
+
}
|
|
161
|
+
return element;
|
|
162
|
+
};
|
|
172
163
|
|
|
173
164
|
// Create focus manager
|
|
174
165
|
const focusManager: FocusManager = {
|
|
175
166
|
focusNext(opts = {}) {
|
|
176
|
-
const scope = scopeElements()
|
|
177
|
-
if (scope.length === 0) return null
|
|
167
|
+
const scope = scopeElements();
|
|
168
|
+
if (scope.length === 0) return null;
|
|
178
169
|
|
|
179
|
-
const { from, tabbable = true, wrap = false, accept } = opts
|
|
180
|
-
const elements = getFocusableElements(scope, tabbable).filter(el => !accept || accept(el))
|
|
181
|
-
const doc = getOwnerDocument(scope[0])
|
|
182
|
-
const current = from || getActiveElement(doc)
|
|
170
|
+
const { from, tabbable = true, wrap = false, accept } = opts;
|
|
171
|
+
const elements = getFocusableElements(scope, tabbable).filter((el) => !accept || accept(el));
|
|
172
|
+
const doc = getOwnerDocument(scope[0]);
|
|
173
|
+
const current = from || getActiveElement(doc);
|
|
183
174
|
|
|
184
|
-
if (!current || elements.length === 0) return null
|
|
175
|
+
if (!current || elements.length === 0) return null;
|
|
185
176
|
|
|
186
|
-
const currentIndex = elements.indexOf(current as HTMLElement)
|
|
187
|
-
let nextIndex = currentIndex + 1
|
|
177
|
+
const currentIndex = elements.indexOf(current as HTMLElement);
|
|
178
|
+
let nextIndex = currentIndex + 1;
|
|
188
179
|
|
|
189
180
|
if (nextIndex >= elements.length) {
|
|
190
181
|
if (wrap) {
|
|
191
|
-
nextIndex = 0
|
|
182
|
+
nextIndex = 0;
|
|
192
183
|
} else {
|
|
193
|
-
return null
|
|
184
|
+
return null;
|
|
194
185
|
}
|
|
195
186
|
}
|
|
196
187
|
|
|
197
|
-
const nextElement = elements[nextIndex]
|
|
188
|
+
const nextElement = elements[nextIndex];
|
|
198
189
|
if (nextElement) {
|
|
199
|
-
focusSafely(nextElement)
|
|
200
|
-
return nextElement
|
|
190
|
+
focusSafely(nextElement);
|
|
191
|
+
return nextElement;
|
|
201
192
|
}
|
|
202
193
|
|
|
203
|
-
return null
|
|
194
|
+
return null;
|
|
204
195
|
},
|
|
205
196
|
|
|
206
197
|
focusPrevious(opts = {}) {
|
|
207
|
-
const scope = scopeElements()
|
|
208
|
-
if (scope.length === 0) return null
|
|
198
|
+
const scope = scopeElements();
|
|
199
|
+
if (scope.length === 0) return null;
|
|
209
200
|
|
|
210
|
-
const { from, tabbable = true, wrap = false, accept } = opts
|
|
211
|
-
const elements = getFocusableElements(scope, tabbable).filter(el => !accept || accept(el))
|
|
212
|
-
const doc = getOwnerDocument(scope[0])
|
|
213
|
-
const current = from || getActiveElement(doc)
|
|
201
|
+
const { from, tabbable = true, wrap = false, accept } = opts;
|
|
202
|
+
const elements = getFocusableElements(scope, tabbable).filter((el) => !accept || accept(el));
|
|
203
|
+
const doc = getOwnerDocument(scope[0]);
|
|
204
|
+
const current = from || getActiveElement(doc);
|
|
214
205
|
|
|
215
|
-
if (!current || elements.length === 0) return null
|
|
206
|
+
if (!current || elements.length === 0) return null;
|
|
216
207
|
|
|
217
|
-
const currentIndex = elements.indexOf(current as HTMLElement)
|
|
218
|
-
let prevIndex = currentIndex - 1
|
|
208
|
+
const currentIndex = elements.indexOf(current as HTMLElement);
|
|
209
|
+
let prevIndex = currentIndex - 1;
|
|
219
210
|
|
|
220
211
|
if (prevIndex < 0) {
|
|
221
212
|
if (wrap) {
|
|
222
|
-
prevIndex = elements.length - 1
|
|
213
|
+
prevIndex = elements.length - 1;
|
|
223
214
|
} else {
|
|
224
|
-
return null
|
|
215
|
+
return null;
|
|
225
216
|
}
|
|
226
217
|
}
|
|
227
218
|
|
|
228
|
-
const prevElement = elements[prevIndex]
|
|
219
|
+
const prevElement = elements[prevIndex];
|
|
229
220
|
if (prevElement) {
|
|
230
|
-
focusSafely(prevElement)
|
|
231
|
-
return prevElement
|
|
221
|
+
focusSafely(prevElement);
|
|
222
|
+
return prevElement;
|
|
232
223
|
}
|
|
233
224
|
|
|
234
|
-
return null
|
|
225
|
+
return null;
|
|
235
226
|
},
|
|
236
227
|
|
|
237
228
|
focusFirst(opts = {}) {
|
|
238
|
-
const scope = scopeElements()
|
|
239
|
-
if (scope.length === 0) return null
|
|
229
|
+
const scope = scopeElements();
|
|
230
|
+
if (scope.length === 0) return null;
|
|
240
231
|
|
|
241
|
-
const { tabbable = true, accept } = opts
|
|
242
|
-
const elements = getFocusableElements(scope, tabbable).filter(el => !accept || accept(el))
|
|
232
|
+
const { tabbable = true, accept } = opts;
|
|
233
|
+
const elements = getFocusableElements(scope, tabbable).filter((el) => !accept || accept(el));
|
|
243
234
|
|
|
244
235
|
if (elements.length > 0) {
|
|
245
|
-
focusSafely(elements[0])
|
|
246
|
-
return elements[0]
|
|
236
|
+
focusSafely(elements[0]);
|
|
237
|
+
return elements[0];
|
|
247
238
|
}
|
|
248
239
|
|
|
249
|
-
return null
|
|
240
|
+
return null;
|
|
250
241
|
},
|
|
251
242
|
|
|
252
243
|
focusLast(opts = {}) {
|
|
253
|
-
const scope = scopeElements()
|
|
254
|
-
if (scope.length === 0) return null
|
|
244
|
+
const scope = scopeElements();
|
|
245
|
+
if (scope.length === 0) return null;
|
|
255
246
|
|
|
256
|
-
const { tabbable = true, accept } = opts
|
|
257
|
-
const elements = getFocusableElements(scope, tabbable).filter(el => !accept || accept(el))
|
|
247
|
+
const { tabbable = true, accept } = opts;
|
|
248
|
+
const elements = getFocusableElements(scope, tabbable).filter((el) => !accept || accept(el));
|
|
258
249
|
|
|
259
250
|
if (elements.length > 0) {
|
|
260
|
-
const lastElement = elements[elements.length - 1]
|
|
261
|
-
focusSafely(lastElement)
|
|
262
|
-
return lastElement
|
|
251
|
+
const lastElement = elements[elements.length - 1];
|
|
252
|
+
focusSafely(lastElement);
|
|
253
|
+
return lastElement;
|
|
263
254
|
}
|
|
264
255
|
|
|
265
|
-
return null
|
|
256
|
+
return null;
|
|
266
257
|
},
|
|
267
|
-
}
|
|
258
|
+
};
|
|
268
259
|
|
|
269
260
|
// Collect scope elements after render
|
|
270
261
|
onMount(() => {
|
|
271
|
-
if (!startRef || !endRef) return
|
|
262
|
+
if (!startRef || !endRef) return;
|
|
272
263
|
|
|
273
|
-
const nodes: Element[] = []
|
|
274
|
-
let node = startRef.nextSibling
|
|
264
|
+
const nodes: Element[] = [];
|
|
265
|
+
let node = startRef.nextSibling;
|
|
275
266
|
while (node && node !== endRef) {
|
|
276
267
|
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
277
|
-
nodes.push(node as Element)
|
|
268
|
+
nodes.push(node as Element);
|
|
278
269
|
}
|
|
279
|
-
node = node.nextSibling
|
|
270
|
+
node = node.nextSibling;
|
|
280
271
|
}
|
|
281
|
-
setScopeElements(nodes)
|
|
282
|
-
})
|
|
272
|
+
setScopeElements(nodes);
|
|
273
|
+
});
|
|
283
274
|
|
|
284
275
|
// Save the currently focused element for restoration (must happen before autoFocus/contain effects run).
|
|
285
276
|
onMount(() => {
|
|
286
|
-
if (!props.restoreFocus) return
|
|
277
|
+
if (!props.restoreFocus) return;
|
|
287
278
|
|
|
288
279
|
// Focus can be in the main document, or inside this iframe's document.
|
|
289
|
-
const scopeDoc = startRef ? getOwnerDocument(startRef) : document
|
|
290
|
-
const scopeActive = getActiveElement(scopeDoc)
|
|
291
|
-
const topActive = getActiveElement(document)
|
|
280
|
+
const scopeDoc = startRef ? getOwnerDocument(startRef) : document;
|
|
281
|
+
const scopeActive = getActiveElement(scopeDoc);
|
|
282
|
+
const topActive = getActiveElement(document);
|
|
292
283
|
|
|
293
284
|
// If the scope is in an iframe and that iframe is currently focused, prefer the iframe document's active element.
|
|
294
285
|
if (
|
|
@@ -298,103 +289,103 @@ export const FocusScope: ParentComponent<FocusScopeProps> = (props) => {
|
|
|
298
289
|
scopeActive &&
|
|
299
290
|
scopeActive !== scopeDoc.body
|
|
300
291
|
) {
|
|
301
|
-
nodeToRestore = scopeActive
|
|
302
|
-
return
|
|
292
|
+
nodeToRestore = getRestorableElement(scopeActive, scopeDoc);
|
|
293
|
+
return;
|
|
303
294
|
}
|
|
304
295
|
|
|
305
|
-
nodeToRestore = topActive
|
|
306
|
-
})
|
|
296
|
+
nodeToRestore = getRestorableElement(topActive, document);
|
|
297
|
+
});
|
|
307
298
|
|
|
308
299
|
// Auto-focus first element
|
|
309
300
|
createEffect(() => {
|
|
310
|
-
if (!props.autoFocus) return
|
|
301
|
+
if (!props.autoFocus) return;
|
|
311
302
|
|
|
312
|
-
const scope = scopeElements()
|
|
313
|
-
if (scope.length === 0) return
|
|
303
|
+
const scope = scopeElements();
|
|
304
|
+
if (scope.length === 0) return;
|
|
314
305
|
|
|
315
|
-
const doc = getOwnerDocument(scope[0])
|
|
316
|
-
const activeElement = getActiveElement(doc)
|
|
306
|
+
const doc = getOwnerDocument(scope[0]);
|
|
307
|
+
const activeElement = getActiveElement(doc);
|
|
317
308
|
|
|
318
309
|
// Only auto-focus if focus is not already inside the scope
|
|
319
310
|
if (!isElementInScope(activeElement, scope)) {
|
|
320
|
-
focusManager.focusFirst()
|
|
311
|
+
focusManager.focusFirst();
|
|
321
312
|
}
|
|
322
|
-
})
|
|
313
|
+
});
|
|
323
314
|
|
|
324
315
|
// Focus containment
|
|
325
316
|
createEffect(() => {
|
|
326
|
-
if (!props.contain) return
|
|
317
|
+
if (!props.contain) return;
|
|
327
318
|
|
|
328
|
-
const scope = scopeElements()
|
|
329
|
-
if (scope.length === 0) return
|
|
319
|
+
const scope = scopeElements();
|
|
320
|
+
if (scope.length === 0) return;
|
|
330
321
|
|
|
331
|
-
const doc = getOwnerDocument(scope[0])
|
|
332
|
-
let focusedNode: Element | null = null
|
|
322
|
+
const doc = getOwnerDocument(scope[0]);
|
|
323
|
+
let focusedNode: Element | null = null;
|
|
333
324
|
|
|
334
325
|
const onKeyDown = (e: KeyboardEvent) => {
|
|
335
|
-
if (e.key !==
|
|
336
|
-
return
|
|
326
|
+
if (e.key !== "Tab" || e.altKey || e.ctrlKey || e.metaKey) {
|
|
327
|
+
return;
|
|
337
328
|
}
|
|
338
329
|
|
|
339
|
-
const scope = scopeElements()
|
|
340
|
-
const activeElement = getActiveElement(doc)
|
|
330
|
+
const scope = scopeElements();
|
|
331
|
+
const activeElement = getActiveElement(doc);
|
|
341
332
|
if (!isElementInScope(activeElement, scope)) {
|
|
342
|
-
return
|
|
333
|
+
return;
|
|
343
334
|
}
|
|
344
335
|
|
|
345
|
-
const elements = getFocusableElements(scope, true)
|
|
346
|
-
if (elements.length === 0) return
|
|
336
|
+
const elements = getFocusableElements(scope, true);
|
|
337
|
+
if (elements.length === 0) return;
|
|
347
338
|
|
|
348
|
-
const firstElement = elements[0]
|
|
349
|
-
const lastElement = elements[elements.length - 1]
|
|
339
|
+
const firstElement = elements[0];
|
|
340
|
+
const lastElement = elements[elements.length - 1];
|
|
350
341
|
|
|
351
342
|
if (e.shiftKey && activeElement === firstElement) {
|
|
352
|
-
e.preventDefault()
|
|
353
|
-
focusSafely(lastElement)
|
|
343
|
+
e.preventDefault();
|
|
344
|
+
focusSafely(lastElement);
|
|
354
345
|
} else if (!e.shiftKey && activeElement === lastElement) {
|
|
355
|
-
e.preventDefault()
|
|
356
|
-
focusSafely(firstElement)
|
|
346
|
+
e.preventDefault();
|
|
347
|
+
focusSafely(firstElement);
|
|
357
348
|
}
|
|
358
|
-
}
|
|
349
|
+
};
|
|
359
350
|
|
|
360
351
|
const onFocusIn = (e: FocusEvent) => {
|
|
361
|
-
const scope = scopeElements()
|
|
362
|
-
const target = e.target as Element
|
|
352
|
+
const scope = scopeElements();
|
|
353
|
+
const target = e.target as Element;
|
|
363
354
|
|
|
364
355
|
if (isElementInScope(target, scope)) {
|
|
365
|
-
focusedNode = target
|
|
356
|
+
focusedNode = target;
|
|
366
357
|
} else if (focusedNode) {
|
|
367
358
|
// Focus escaped the scope, bring it back
|
|
368
|
-
focusSafely(focusedNode as HTMLElement)
|
|
359
|
+
focusSafely(focusedNode as HTMLElement);
|
|
369
360
|
} else {
|
|
370
361
|
// No previous focus, focus first element
|
|
371
|
-
focusManager.focusFirst()
|
|
362
|
+
focusManager.focusFirst();
|
|
372
363
|
}
|
|
373
|
-
}
|
|
364
|
+
};
|
|
374
365
|
|
|
375
|
-
doc.addEventListener(
|
|
376
|
-
doc.addEventListener(
|
|
366
|
+
doc.addEventListener("keydown", onKeyDown, true);
|
|
367
|
+
doc.addEventListener("focusin", onFocusIn, true);
|
|
377
368
|
|
|
378
369
|
onCleanup(() => {
|
|
379
|
-
doc.removeEventListener(
|
|
380
|
-
doc.removeEventListener(
|
|
381
|
-
})
|
|
382
|
-
})
|
|
370
|
+
doc.removeEventListener("keydown", onKeyDown, true);
|
|
371
|
+
doc.removeEventListener("focusin", onFocusIn, true);
|
|
372
|
+
});
|
|
373
|
+
});
|
|
383
374
|
|
|
384
375
|
// Restore focus on unmount
|
|
385
376
|
onCleanup(() => {
|
|
386
377
|
if (props.restoreFocus && nodeToRestore && (nodeToRestore as HTMLElement).focus) {
|
|
387
|
-
const doc = getOwnerDocument(nodeToRestore as Element)
|
|
388
|
-
const win = doc.defaultView ?? window
|
|
378
|
+
const doc = getOwnerDocument(nodeToRestore as Element);
|
|
379
|
+
const win = doc.defaultView ?? window;
|
|
389
380
|
|
|
390
381
|
// Use requestAnimationFrame to ensure the element is still in the DOM
|
|
391
382
|
win.requestAnimationFrame(() => {
|
|
392
383
|
if (nodeToRestore && doc.body.contains(nodeToRestore as Node)) {
|
|
393
|
-
|
|
384
|
+
(nodeToRestore as HTMLElement).focus();
|
|
394
385
|
}
|
|
395
|
-
})
|
|
386
|
+
});
|
|
396
387
|
}
|
|
397
|
-
})
|
|
388
|
+
});
|
|
398
389
|
|
|
399
390
|
return (
|
|
400
391
|
<FocusScopeContext.Provider value={{ focusManager, scopeRef: scopeElements }}>
|
|
@@ -402,7 +393,7 @@ export const FocusScope: ParentComponent<FocusScopeProps> = (props) => {
|
|
|
402
393
|
{props.children}
|
|
403
394
|
<span data-focus-scope-end hidden ref={endRef} />
|
|
404
395
|
</FocusScopeContext.Provider>
|
|
405
|
-
)
|
|
406
|
-
}
|
|
396
|
+
);
|
|
397
|
+
};
|
|
407
398
|
|
|
408
|
-
export default FocusScope
|
|
399
|
+
export default FocusScope;
|