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