@proyecto-viviana/solidaria 0.2.8 → 0.4.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/README.md +31 -236
- package/dist/_chunk/actiongroup.js +207 -0
- package/dist/_chunk/actiongroup.js.map +1 -0
- package/dist/_chunk/actiongroup.jsx +207 -0
- package/dist/_chunk/actiongroup.jsx.map +1 -0
- package/dist/_chunk/ariaHideOutside.js +122 -0
- package/dist/_chunk/ariaHideOutside.js.map +1 -0
- package/dist/_chunk/ariaHideOutside.jsx +122 -0
- package/dist/_chunk/ariaHideOutside.jsx.map +1 -0
- package/dist/_chunk/autocomplete.js +196 -0
- package/dist/_chunk/autocomplete.js.map +1 -0
- package/dist/_chunk/autocomplete.jsx +196 -0
- package/dist/_chunk/autocomplete.jsx.map +1 -0
- package/dist/_chunk/breadcrumbs.js +119 -0
- package/dist/_chunk/breadcrumbs.js.map +1 -0
- package/dist/_chunk/breadcrumbs.jsx +119 -0
- package/dist/_chunk/breadcrumbs.jsx.map +1 -0
- package/dist/_chunk/button.js +276 -0
- package/dist/_chunk/button.js.map +1 -0
- package/dist/_chunk/button.jsx +276 -0
- package/dist/_chunk/button.jsx.map +1 -0
- package/dist/_chunk/calendar.js +1036 -0
- package/dist/_chunk/calendar.js.map +1 -0
- package/dist/_chunk/calendar.jsx +1036 -0
- package/dist/_chunk/calendar.jsx.map +1 -0
- package/dist/_chunk/checkbox.js +234 -0
- package/dist/_chunk/checkbox.js.map +1 -0
- package/dist/_chunk/checkbox.jsx +234 -0
- package/dist/_chunk/checkbox.jsx.map +1 -0
- package/dist/_chunk/color.js +1174 -0
- package/dist/_chunk/color.js.map +1 -0
- package/dist/_chunk/color.jsx +1174 -0
- package/dist/_chunk/color.jsx.map +1 -0
- package/dist/_chunk/combobox.js +436 -0
- package/dist/_chunk/combobox.js.map +1 -0
- package/dist/_chunk/combobox.jsx +436 -0
- package/dist/_chunk/combobox.jsx.map +1 -0
- package/dist/_chunk/createCollator.js +229 -0
- package/dist/_chunk/createCollator.js.map +1 -0
- package/dist/_chunk/createCollator.jsx +223 -0
- package/dist/_chunk/createCollator.jsx.map +1 -0
- package/dist/_chunk/createCollectionRowInteraction.js +133 -0
- package/dist/_chunk/createCollectionRowInteraction.js.map +1 -0
- package/dist/_chunk/createCollectionRowInteraction.jsx +133 -0
- package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -0
- package/dist/_chunk/createField.js +54 -0
- package/dist/_chunk/createField.js.map +1 -0
- package/dist/_chunk/createField.jsx +54 -0
- package/dist/_chunk/createField.jsx.map +1 -0
- package/dist/_chunk/createFocus.js +101 -0
- package/dist/_chunk/createFocus.js.map +1 -0
- package/dist/_chunk/createFocus.jsx +101 -0
- package/dist/_chunk/createFocus.jsx.map +1 -0
- package/dist/_chunk/createFocusRing.js +54 -0
- package/dist/_chunk/createFocusRing.js.map +1 -0
- package/dist/_chunk/createFocusRing.jsx +54 -0
- package/dist/_chunk/createFocusRing.jsx.map +1 -0
- package/dist/_chunk/createFocusWithin.js +121 -0
- package/dist/_chunk/createFocusWithin.js.map +1 -0
- package/dist/_chunk/createFocusWithin.jsx +121 -0
- package/dist/_chunk/createFocusWithin.jsx.map +1 -0
- package/dist/_chunk/createFocusable.js +131 -0
- package/dist/_chunk/createFocusable.js.map +1 -0
- package/dist/_chunk/createFocusable.jsx +131 -0
- package/dist/_chunk/createFocusable.jsx.map +1 -0
- package/dist/_chunk/createFormValidation.js +135 -0
- package/dist/_chunk/createFormValidation.js.map +1 -0
- package/dist/_chunk/createFormValidation.jsx +135 -0
- package/dist/_chunk/createFormValidation.jsx.map +1 -0
- package/dist/_chunk/createHover.js +130 -0
- package/dist/_chunk/createHover.js.map +1 -0
- package/dist/_chunk/createHover.jsx +130 -0
- package/dist/_chunk/createHover.jsx.map +1 -0
- package/dist/_chunk/createInteractionModality.js +269 -0
- package/dist/_chunk/createInteractionModality.js.map +1 -0
- package/dist/_chunk/createInteractionModality.jsx +269 -0
- package/dist/_chunk/createInteractionModality.jsx.map +1 -0
- package/dist/_chunk/createLabel.js +46 -0
- package/dist/_chunk/createLabel.js.map +1 -0
- package/dist/_chunk/createLabel.jsx +46 -0
- package/dist/_chunk/createLabel.jsx.map +1 -0
- package/dist/_chunk/createLabels.js +31 -0
- package/dist/_chunk/createLabels.js.map +1 -0
- package/dist/_chunk/createLabels.jsx +31 -0
- package/dist/_chunk/createLabels.jsx.map +1 -0
- package/dist/_chunk/createLandmark.js +198 -0
- package/dist/_chunk/createLandmark.js.map +1 -0
- package/dist/_chunk/createLandmark.jsx +198 -0
- package/dist/_chunk/createLandmark.jsx.map +1 -0
- package/dist/_chunk/createLongPress.js +91 -0
- package/dist/_chunk/createLongPress.js.map +1 -0
- package/dist/_chunk/createLongPress.jsx +91 -0
- package/dist/_chunk/createLongPress.jsx.map +1 -0
- package/dist/_chunk/createOverlay.js +327 -0
- package/dist/_chunk/createOverlay.js.map +1 -0
- package/dist/_chunk/createOverlay.jsx +327 -0
- package/dist/_chunk/createOverlay.jsx.map +1 -0
- package/dist/_chunk/createPress.js +526 -0
- package/dist/_chunk/createPress.js.map +1 -0
- package/dist/_chunk/createPress.jsx +526 -0
- package/dist/_chunk/createPress.jsx.map +1 -0
- package/dist/_chunk/createProgressBar.js +81 -0
- package/dist/_chunk/createProgressBar.js.map +1 -0
- package/dist/_chunk/createProgressBar.jsx +81 -0
- package/dist/_chunk/createProgressBar.jsx.map +1 -0
- package/dist/_chunk/createSelectableItem.js +298 -0
- package/dist/_chunk/createSelectableItem.js.map +1 -0
- package/dist/_chunk/createSelectableItem.jsx +298 -0
- package/dist/_chunk/createSelectableItem.jsx.map +1 -0
- package/dist/_chunk/createToggle.js +158 -0
- package/dist/_chunk/createToggle.js.map +1 -0
- package/dist/_chunk/createToggle.jsx +158 -0
- package/dist/_chunk/createToggle.jsx.map +1 -0
- package/dist/_chunk/createTypeSelect.js +125 -0
- package/dist/_chunk/createTypeSelect.js.map +1 -0
- package/dist/_chunk/createTypeSelect.jsx +125 -0
- package/dist/_chunk/createTypeSelect.jsx.map +1 -0
- package/dist/_chunk/datepicker.js +1393 -0
- package/dist/_chunk/datepicker.js.map +1 -0
- package/dist/_chunk/datepicker.jsx +1393 -0
- package/dist/_chunk/datepicker.jsx.map +1 -0
- package/dist/_chunk/dialog.js +62 -0
- package/dist/_chunk/dialog.js.map +1 -0
- package/dist/_chunk/dialog.jsx +62 -0
- package/dist/_chunk/dialog.jsx.map +1 -0
- package/dist/_chunk/disclosure.js +185 -0
- package/dist/_chunk/disclosure.js.map +1 -0
- package/dist/_chunk/disclosure.jsx +185 -0
- package/dist/_chunk/disclosure.jsx.map +1 -0
- package/dist/_chunk/dnd.js +1304 -0
- package/dist/_chunk/dnd.js.map +1 -0
- package/dist/_chunk/dnd.jsx +1304 -0
- package/dist/_chunk/dnd.jsx.map +1 -0
- package/dist/_chunk/env.js +105 -0
- package/dist/_chunk/env.js.map +1 -0
- package/dist/_chunk/env.jsx +105 -0
- package/dist/_chunk/env.jsx.map +1 -0
- package/dist/_chunk/filterDOMProps.js +82 -0
- package/dist/_chunk/filterDOMProps.js.map +1 -0
- package/dist/_chunk/filterDOMProps.jsx +82 -0
- package/dist/_chunk/filterDOMProps.jsx.map +1 -0
- package/dist/_chunk/focus.js +399 -0
- package/dist/_chunk/focus.js.map +1 -0
- package/dist/_chunk/focus.jsx +399 -0
- package/dist/_chunk/focus.jsx.map +1 -0
- package/dist/_chunk/focus2.js +895 -0
- package/dist/_chunk/focus2.js.map +1 -0
- package/dist/_chunk/focus2.jsx +870 -0
- package/dist/_chunk/focus2.jsx.map +1 -0
- package/dist/_chunk/form.js +39 -0
- package/dist/_chunk/form.js.map +1 -0
- package/dist/_chunk/form.jsx +39 -0
- package/dist/_chunk/form.jsx.map +1 -0
- package/dist/_chunk/grid.js +623 -0
- package/dist/_chunk/grid.js.map +1 -0
- package/dist/_chunk/grid.jsx +623 -0
- package/dist/_chunk/grid.jsx.map +1 -0
- package/dist/_chunk/gridlist.js +364 -0
- package/dist/_chunk/gridlist.js.map +1 -0
- package/dist/_chunk/gridlist.jsx +364 -0
- package/dist/_chunk/gridlist.jsx.map +1 -0
- package/dist/_chunk/i18n.js +254 -0
- package/dist/_chunk/i18n.js.map +1 -0
- package/dist/_chunk/i18n.jsx +254 -0
- package/dist/_chunk/i18n.jsx.map +1 -0
- package/dist/_chunk/interactions.js +241 -0
- package/dist/_chunk/interactions.js.map +1 -0
- package/dist/_chunk/interactions.jsx +237 -0
- package/dist/_chunk/interactions.jsx.map +1 -0
- package/dist/_chunk/link.js +96 -0
- package/dist/_chunk/link.js.map +1 -0
- package/dist/_chunk/link.jsx +96 -0
- package/dist/_chunk/link.jsx.map +1 -0
- package/dist/_chunk/listbox.js +324 -0
- package/dist/_chunk/listbox.js.map +1 -0
- package/dist/_chunk/listbox.jsx +324 -0
- package/dist/_chunk/listbox.jsx.map +1 -0
- package/dist/_chunk/live-announcer.js +207 -0
- package/dist/_chunk/live-announcer.js.map +1 -0
- package/dist/_chunk/live-announcer.jsx +207 -0
- package/dist/_chunk/live-announcer.jsx.map +1 -0
- package/dist/_chunk/menu.js +518 -0
- package/dist/_chunk/menu.js.map +1 -0
- package/dist/_chunk/menu.jsx +518 -0
- package/dist/_chunk/menu.jsx.map +1 -0
- package/dist/_chunk/meter.js +33 -0
- package/dist/_chunk/meter.js.map +1 -0
- package/dist/_chunk/meter.jsx +33 -0
- package/dist/_chunk/meter.jsx.map +1 -0
- package/dist/_chunk/numberfield.js +258 -0
- package/dist/_chunk/numberfield.js.map +1 -0
- package/dist/_chunk/numberfield.jsx +258 -0
- package/dist/_chunk/numberfield.jsx.map +1 -0
- package/dist/_chunk/overlays.js +186 -0
- package/dist/_chunk/overlays.js.map +1 -0
- package/dist/_chunk/overlays.jsx +162 -0
- package/dist/_chunk/overlays.jsx.map +1 -0
- package/dist/_chunk/popover.js +574 -0
- package/dist/_chunk/popover.js.map +1 -0
- package/dist/_chunk/popover.jsx +574 -0
- package/dist/_chunk/popover.jsx.map +1 -0
- package/dist/_chunk/radio.js +319 -0
- package/dist/_chunk/radio.js.map +1 -0
- package/dist/_chunk/radio.jsx +319 -0
- package/dist/_chunk/radio.jsx.map +1 -0
- package/dist/_chunk/searchfield.js +209 -0
- package/dist/_chunk/searchfield.js.map +1 -0
- package/dist/_chunk/searchfield.jsx +209 -0
- package/dist/_chunk/searchfield.jsx.map +1 -0
- package/dist/_chunk/select.js +403 -0
- package/dist/_chunk/select.js.map +1 -0
- package/dist/_chunk/select.jsx +394 -0
- package/dist/_chunk/select.jsx.map +1 -0
- package/dist/_chunk/selection.js +679 -0
- package/dist/_chunk/selection.js.map +1 -0
- package/dist/_chunk/selection.jsx +679 -0
- package/dist/_chunk/selection.jsx.map +1 -0
- package/dist/_chunk/separator.js +29 -0
- package/dist/_chunk/separator.js.map +1 -0
- package/dist/_chunk/separator.jsx +29 -0
- package/dist/_chunk/separator.jsx.map +1 -0
- package/dist/_chunk/slider.js +255 -0
- package/dist/_chunk/slider.js.map +1 -0
- package/dist/_chunk/slider.jsx +255 -0
- package/dist/_chunk/slider.jsx.map +1 -0
- package/dist/_chunk/steplist.js +66 -0
- package/dist/_chunk/steplist.js.map +1 -0
- package/dist/_chunk/steplist.jsx +66 -0
- package/dist/_chunk/steplist.jsx.map +1 -0
- package/dist/_chunk/switch.js +34 -0
- package/dist/_chunk/switch.js.map +1 -0
- package/dist/_chunk/switch.jsx +34 -0
- package/dist/_chunk/switch.jsx.map +1 -0
- package/dist/_chunk/table.js +1051 -0
- package/dist/_chunk/table.js.map +1 -0
- package/dist/_chunk/table.jsx +1051 -0
- package/dist/_chunk/table.jsx.map +1 -0
- package/dist/_chunk/tabs.js +260 -0
- package/dist/_chunk/tabs.js.map +1 -0
- package/dist/_chunk/tabs.jsx +260 -0
- package/dist/_chunk/tabs.jsx.map +1 -0
- package/dist/_chunk/tag.js +286 -0
- package/dist/_chunk/tag.js.map +1 -0
- package/dist/_chunk/tag.jsx +286 -0
- package/dist/_chunk/tag.jsx.map +1 -0
- package/dist/_chunk/textfield.js +109 -0
- package/dist/_chunk/textfield.js.map +1 -0
- package/dist/_chunk/textfield.jsx +109 -0
- package/dist/_chunk/textfield.jsx.map +1 -0
- package/dist/_chunk/toast.js +250 -0
- package/dist/_chunk/toast.js.map +1 -0
- package/dist/_chunk/toast.jsx +250 -0
- package/dist/_chunk/toast.jsx.map +1 -0
- package/dist/_chunk/toolbar.js +258 -0
- package/dist/_chunk/toolbar.js.map +1 -0
- package/dist/_chunk/toolbar.jsx +258 -0
- package/dist/_chunk/toolbar.jsx.map +1 -0
- package/dist/_chunk/tooltip.js +185 -0
- package/dist/_chunk/tooltip.js.map +1 -0
- package/dist/_chunk/tooltip.jsx +185 -0
- package/dist/_chunk/tooltip.jsx.map +1 -0
- package/dist/_chunk/tree.js +424 -0
- package/dist/_chunk/tree.js.map +1 -0
- package/dist/_chunk/tree.jsx +424 -0
- package/dist/_chunk/tree.jsx.map +1 -0
- package/dist/_chunk/utils.js +665 -0
- package/dist/_chunk/utils.js.map +1 -0
- package/dist/_chunk/utils.jsx +665 -0
- package/dist/_chunk/utils.jsx.map +1 -0
- package/dist/_chunk/visually-hidden.js +92 -0
- package/dist/_chunk/visually-hidden.js.map +1 -0
- package/dist/_chunk/visually-hidden.jsx +92 -0
- package/dist/_chunk/visually-hidden.jsx.map +1 -0
- package/dist/actiongroup/createActionGroup.d.ts +5 -5
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
- package/dist/actiongroup/index.d.ts +1 -1
- package/dist/actiongroup/index.js +2 -0
- package/dist/actiongroup/index.jsx +2 -0
- package/dist/autocomplete/createAutocomplete.d.ts +12 -10
- 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/autocomplete/index.js +2 -0
- package/dist/autocomplete/index.jsx +2 -0
- package/dist/breadcrumbs/createBreadcrumbs.d.ts +9 -7
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/breadcrumbs/index.d.ts +1 -1
- package/dist/breadcrumbs/index.js +2 -0
- package/dist/breadcrumbs/index.jsx +2 -0
- 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 +7 -7
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
- package/dist/button/index.d.ts +6 -6
- package/dist/button/index.d.ts.map +1 -1
- package/dist/button/index.js +2 -0
- package/dist/button/index.jsx +2 -0
- 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 +6 -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/createCalendarMonthPicker.d.ts +41 -0
- package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -0
- package/dist/calendar/createCalendarYearPicker.d.ts +49 -0
- package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -0
- package/dist/calendar/createRangeCalendar.d.ts +15 -5
- package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts +4 -2
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/calendar/index.d.ts +7 -5
- package/dist/calendar/index.d.ts.map +1 -1
- package/dist/calendar/index.js +2 -0
- package/dist/calendar/index.jsx +2 -0
- 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 +16 -0
- package/dist/calendar/utils.d.ts.map +1 -0
- package/dist/checkbox/createCheckbox.d.ts +10 -6
- package/dist/checkbox/createCheckbox.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroup.d.ts +7 -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/checkbox/index.js +2 -0
- package/dist/checkbox/index.jsx +2 -0
- package/dist/collections/index.d.ts +3 -3
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +160 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/index.jsx +160 -0
- package/dist/collections/index.jsx.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/index.js +2 -0
- package/dist/color/index.jsx +2 -0
- package/dist/color/types.d.ts +98 -16
- package/dist/color/types.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +10 -7
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/combobox/index.d.ts +1 -1
- package/dist/combobox/index.js +2 -0
- package/dist/combobox/index.jsx +2 -0
- 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 +51 -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 +8 -6
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
- package/dist/datepicker/createDateSegment.d.ts +10 -2
- 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 +2 -2
- package/dist/datepicker/createTimeSegment.d.ts.map +1 -1
- package/dist/datepicker/index.d.ts +7 -6
- package/dist/datepicker/index.d.ts.map +1 -1
- package/dist/datepicker/index.js +2 -0
- package/dist/datepicker/index.jsx +2 -0
- 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/index.js +2 -0
- package/dist/dialog/index.jsx +2 -0
- 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 -4
- package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
- package/dist/disclosure/index.d.ts +2 -2
- package/dist/disclosure/index.js +2 -0
- package/dist/disclosure/index.jsx +2 -0
- package/dist/dnd/createDrag.d.ts +2 -2
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts +2 -2
- 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 +26 -6
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts +3 -3
- package/dist/dnd/index.d.ts +12 -12
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/dnd/index.js +2 -0
- package/dist/dnd/index.jsx +2 -0
- package/dist/dnd/types.d.ts +2 -2
- package/dist/dnd/types.d.ts.map +1 -1
- package/dist/dnd/utils.d.ts +2 -2
- 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/focus/index.js +2 -0
- package/dist/focus/index.jsx +2 -0
- 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/form/index.js +3 -0
- package/dist/form/index.jsx +3 -0
- package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
- package/dist/grid/createGrid.d.ts +3 -3
- 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/index.js +2 -0
- package/dist/grid/index.jsx +2 -0
- package/dist/grid/types.d.ts +8 -8
- package/dist/gridlist/createGridList.d.ts +12 -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/createGridListSection.d.ts +15 -0
- package/dist/gridlist/createGridListSection.d.ts.map +1 -0
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
- package/dist/gridlist/index.d.ts +5 -4
- package/dist/gridlist/index.d.ts.map +1 -1
- package/dist/gridlist/index.js +2 -0
- package/dist/gridlist/index.jsx +2 -0
- package/dist/gridlist/types.d.ts +61 -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/index.js +3 -0
- package/dist/i18n/index.jsx +3 -0
- 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 +56 -51
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +71 -17119
- package/dist/index.jsx +71 -0
- package/dist/interactions/FocusableProvider.d.ts +2 -2
- package/dist/interactions/FocusableProvider.d.ts.map +1 -1
- package/dist/interactions/PressEvent.d.ts +13 -2
- package/dist/interactions/PressEvent.d.ts.map +1 -1
- 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 -4
- package/dist/interactions/createInteractionModality.d.ts.map +1 -1
- package/dist/interactions/createKeyboard.d.ts +1 -1
- package/dist/interactions/createKeyboard.d.ts.map +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/interactions/index.js +10 -0
- package/dist/interactions/index.jsx +10 -0
- 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/label/index.js +4 -0
- package/dist/label/index.jsx +4 -0
- 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/landmark/index.js +2 -0
- package/dist/landmark/index.jsx +2 -0
- package/dist/link/createLink.d.ts +14 -8
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/link/index.d.ts +1 -1
- package/dist/link/index.js +2 -0
- package/dist/link/index.jsx +2 -0
- package/dist/listbox/createListBox.d.ts +48 -6
- package/dist/listbox/createListBox.d.ts.map +1 -1
- package/dist/listbox/createOption.d.ts +27 -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/listbox/index.js +2 -0
- package/dist/listbox/index.jsx +2 -0
- 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/live-announcer/index.js +2 -0
- package/dist/live-announcer/index.jsx +2 -0
- package/dist/menu/createMenu.d.ts +14 -11
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/menu/createMenuItem.d.ts +25 -5
- 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/menu/index.js +2 -0
- package/dist/menu/index.jsx +2 -0
- 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/meter/index.js +2 -0
- package/dist/meter/index.jsx +2 -0
- package/dist/numberfield/createNumberField.d.ts +9 -8
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/numberfield/index.d.ts +1 -1
- package/dist/numberfield/index.js +2 -0
- package/dist/numberfield/index.jsx +2 -0
- package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
- package/dist/overlays/createModal.d.ts +3 -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/overlays/index.js +4 -0
- package/dist/overlays/index.jsx +4 -0
- package/dist/popover/calculatePosition.d.ts +6 -4
- package/dist/popover/calculatePosition.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts +11 -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/popover/index.js +2 -0
- package/dist/popover/index.jsx +2 -0
- 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/progress/index.js +2 -0
- package/dist/progress/index.jsx +2 -0
- package/dist/radio/createRadio.d.ts +9 -7
- package/dist/radio/createRadio.d.ts.map +1 -1
- package/dist/radio/createRadioGroup.d.ts +10 -10
- 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/radio/index.js +2 -0
- package/dist/radio/index.jsx +2 -0
- 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/searchfield/index.js +2 -0
- package/dist/searchfield/index.jsx +2 -0
- 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/select/index.js +2 -0
- package/dist/select/index.jsx +2 -0
- package/dist/selection/DOMLayoutDelegate.d.ts +58 -0
- package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -0
- package/dist/selection/ListKeyboardDelegate.d.ts +95 -0
- package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -0
- package/dist/selection/constants.d.ts +15 -0
- package/dist/selection/constants.d.ts.map +1 -0
- package/dist/selection/createCollectionRowInteraction.d.ts +13 -0
- package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -0
- package/dist/selection/createScrollIntoViewOnFocus.d.ts +31 -0
- package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -0
- package/dist/selection/createSelectableCollection.d.ts +69 -0
- package/dist/selection/createSelectableCollection.d.ts.map +1 -0
- package/dist/selection/createSelectableItem.d.ts +154 -0
- package/dist/selection/createSelectableItem.d.ts.map +1 -0
- package/dist/selection/createSelectableList.d.ts +43 -0
- package/dist/selection/createSelectableList.d.ts.map +1 -0
- package/dist/selection/createTypeSelect.d.ts +2 -2
- package/dist/selection/createTypeSelect.d.ts.map +1 -1
- package/dist/selection/index.d.ts +10 -1
- package/dist/selection/index.d.ts.map +1 -1
- package/dist/selection/index.js +4 -0
- package/dist/selection/index.jsx +4 -0
- package/dist/selection/selectItem.d.ts +29 -0
- package/dist/selection/selectItem.d.ts.map +1 -0
- package/dist/selection/utils.d.ts +40 -0
- package/dist/selection/utils.d.ts.map +1 -0
- 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/separator/index.js +2 -0
- package/dist/separator/index.jsx +2 -0
- 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/slider/index.js +2 -0
- package/dist/slider/index.jsx +2 -0
- package/dist/ssr/index.d.ts +18 -1
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +299 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/ssr/index.jsx +292 -0
- package/dist/ssr/index.jsx.map +1 -0
- 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/steplist/index.js +2 -0
- package/dist/steplist/index.jsx +2 -0
- package/dist/switch/createSwitch.d.ts +10 -4
- package/dist/switch/createSwitch.d.ts.map +1 -1
- package/dist/switch/index.d.ts +1 -1
- package/dist/switch/index.js +2 -0
- package/dist/switch/index.jsx +2 -0
- 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 +4 -4
- 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/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/index.js +2 -0
- package/dist/table/index.jsx +2 -0
- package/dist/table/types.d.ts +41 -7
- package/dist/table/types.d.ts.map +1 -1
- package/dist/tabs/createTabs.d.ts +32 -28
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tabs/index.d.ts +1 -1
- package/dist/tabs/index.js +2 -0
- package/dist/tabs/index.jsx +2 -0
- package/dist/tag/createTag.d.ts +4 -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/tag/index.js +2 -0
- package/dist/tag/index.jsx +2 -0
- 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/textfield/index.js +2 -0
- package/dist/textfield/index.jsx +2 -0
- package/dist/toast/createToast.d.ts +2 -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/toast/index.js +2 -0
- package/dist/toast/index.jsx +2 -0
- package/dist/toggle/createToggle.d.ts +13 -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/toggle/index.js +3 -0
- package/dist/toggle/index.jsx +3 -0
- 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/toolbar/index.js +2 -0
- package/dist/toolbar/index.jsx +2 -0
- 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/tooltip/index.js +2 -0
- package/dist/tooltip/index.jsx +2 -0
- package/dist/tree/createTree.d.ts +8 -4
- 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/index.js +2 -0
- package/dist/tree/index.jsx +2 -0
- package/dist/tree/types.d.ts +20 -6
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/animation.d.ts +60 -0
- package/dist/utils/animation.d.ts.map +1 -0
- package/dist/utils/createDescription.d.ts +2 -2
- package/dist/utils/createDescription.d.ts.map +1 -1
- package/dist/utils/dom.d.ts +48 -2
- package/dist/utils/dom.d.ts.map +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 +15 -12
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.jsx +5 -0
- package/dist/utils/keyboard.d.ts +17 -0
- package/dist/utils/keyboard.d.ts.map +1 -0
- package/dist/utils/mergeProps.d.ts.map +1 -1
- package/dist/utils/reactivity.d.ts +1 -1
- package/dist/utils/scrollIntoView.d.ts +30 -0
- package/dist/utils/scrollIntoView.d.ts.map +1 -0
- 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/dist/visually-hidden/index.js +2 -0
- package/dist/visually-hidden/index.jsx +2 -0
- package/package.json +334 -33
- package/src/actiongroup/createActionGroup.ts +101 -91
- package/src/actiongroup/index.ts +1 -1
- package/src/autocomplete/createAutocomplete.ts +177 -148
- package/src/autocomplete/index.ts +1 -1
- package/src/breadcrumbs/createBreadcrumbs.ts +33 -42
- 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 +25 -32
- package/src/button/index.ts +6 -9
- package/src/button/types.ts +18 -12
- package/src/calendar/createCalendar.ts +64 -29
- package/src/calendar/createCalendarCell.ts +115 -46
- package/src/calendar/createCalendarGrid.ts +97 -41
- package/src/calendar/createCalendarMonthPicker.ts +105 -0
- package/src/calendar/createCalendarYearPicker.ts +144 -0
- package/src/calendar/createRangeCalendar.ts +68 -31
- package/src/calendar/createRangeCalendarCell.ts +92 -31
- package/src/calendar/index.ts +21 -8
- package/src/calendar/intl/index.ts +210 -0
- package/src/calendar/utils.ts +231 -0
- package/src/checkbox/createCheckbox.ts +23 -21
- package/src/checkbox/createCheckboxGroup.ts +68 -44
- package/src/checkbox/createCheckboxGroupItem.ts +26 -41
- package/src/checkbox/createCheckboxGroupState.ts +3 -22
- package/src/checkbox/index.ts +8 -10
- package/src/collections/index.ts +33 -29
- package/src/color/createColorArea.ts +232 -154
- package/src/color/createColorField.ts +107 -58
- package/src/color/createColorSlider.ts +231 -73
- package/src/color/createColorSwatch.ts +38 -13
- package/src/color/createColorWheel.ts +208 -83
- package/src/color/index.ts +6 -6
- package/src/color/types.ts +98 -16
- package/src/combobox/createComboBox.ts +157 -100
- package/src/combobox/index.ts +1 -1
- package/src/combobox/intl/index.ts +5 -5
- package/src/datepicker/createDateField.ts +192 -39
- package/src/datepicker/createDatePicker.ts +260 -67
- package/src/datepicker/createDatePickerGroup.ts +149 -0
- package/src/datepicker/createDateRangePicker.ts +105 -57
- package/src/datepicker/createDateSegment.ts +188 -96
- package/src/datepicker/createTimeField.ts +38 -34
- package/src/datepicker/createTimeSegment.ts +67 -85
- package/src/datepicker/index.ts +13 -14
- package/src/dialog/createDialog.ts +45 -38
- package/src/dialog/index.ts +2 -2
- package/src/dialog/types.ts +4 -4
- package/src/disclosure/createDisclosure.ts +138 -33
- package/src/disclosure/createDisclosureGroup.ts +8 -21
- package/src/disclosure/index.ts +2 -2
- package/src/dnd/createDrag.ts +19 -25
- package/src/dnd/createDraggableCollection.ts +4 -4
- package/src/dnd/createDraggableItem.ts +20 -19
- package/src/dnd/createDrop.ts +42 -51
- package/src/dnd/createDroppableCollection.ts +293 -173
- package/src/dnd/createDroppableItem.ts +34 -34
- package/src/dnd/index.ts +23 -12
- package/src/dnd/types.ts +4 -7
- package/src/dnd/utils.ts +58 -47
- package/src/focus/FocusScope.tsx +301 -176
- package/src/focus/createAutoFocus.ts +4 -20
- package/src/focus/createFocusRestore.ts +15 -28
- package/src/focus/createVirtualFocus.ts +20 -36
- package/src/focus/index.ts +4 -8
- package/src/form/createFormReset.ts +4 -4
- package/src/form/createFormValidation.ts +23 -39
- package/src/form/index.ts +2 -5
- package/src/grid/GridKeyboardDelegate.ts +30 -30
- package/src/grid/createGrid.ts +36 -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 +172 -64
- package/src/gridlist/createGridListItem.ts +98 -121
- package/src/gridlist/createGridListSection.ts +54 -0
- package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
- package/src/gridlist/index.ts +7 -4
- package/src/gridlist/types.ts +58 -7
- package/src/i18n/createCollator.ts +5 -18
- package/src/i18n/createDateFormatter.ts +5 -13
- package/src/i18n/createFilter.ts +11 -24
- package/src/i18n/createNumberFormatter.ts +4 -6
- package/src/i18n/createStringFormatter.ts +19 -15
- package/src/i18n/index.ts +8 -11
- package/src/i18n/locale.tsx +15 -40
- package/src/i18n/utils.ts +35 -39
- package/src/index.ts +111 -172
- package/src/interactions/FocusableProvider.tsx +3 -7
- package/src/interactions/PressEvent.ts +18 -4
- package/src/interactions/createFocus.ts +12 -8
- package/src/interactions/createFocusRing.ts +21 -19
- package/src/interactions/createFocusWithin.ts +20 -13
- package/src/interactions/createFocusable.ts +15 -16
- package/src/interactions/createHover.ts +70 -55
- package/src/interactions/createInteractionModality.ts +96 -94
- package/src/interactions/createKeyboard.ts +12 -2
- package/src/interactions/createLongPress.ts +23 -23
- package/src/interactions/createMove.ts +72 -62
- package/src/interactions/createPress.ts +192 -92
- 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 +30 -51
- package/src/landmark/index.ts +1 -1
- package/src/link/createLink.ts +83 -56
- package/src/link/index.ts +1 -1
- package/src/listbox/createListBox.ts +198 -66
- package/src/listbox/createOption.ts +112 -71
- package/src/listbox/index.ts +2 -6
- package/src/live-announcer/announce.ts +44 -71
- package/src/live-announcer/index.ts +1 -1
- package/src/menu/createMenu.ts +171 -65
- package/src/menu/createMenuItem.ts +315 -51
- package/src/menu/createMenuTrigger.ts +15 -15
- package/src/menu/index.ts +3 -12
- package/src/meter/createMeter.ts +7 -15
- package/src/meter/index.ts +1 -1
- package/src/numberfield/createNumberField.ts +205 -80
- package/src/numberfield/index.ts +1 -1
- package/src/overlays/ariaHideOutside.ts +14 -10
- package/src/overlays/createInteractOutside.ts +21 -18
- package/src/overlays/createModal.tsx +17 -17
- package/src/overlays/createOverlay.ts +38 -8
- package/src/overlays/createOverlayTrigger.ts +16 -16
- package/src/overlays/createPreventScroll.ts +46 -24
- package/src/overlays/index.ts +6 -17
- package/src/popover/calculatePosition.ts +134 -124
- package/src/popover/createOverlayPosition.ts +55 -40
- package/src/popover/createPopover.ts +42 -17
- package/src/popover/index.ts +3 -3
- package/src/progress/createProgressBar.ts +31 -32
- package/src/progress/index.ts +1 -1
- package/src/radio/createRadio.ts +114 -75
- package/src/radio/createRadioGroup.ts +83 -77
- package/src/radio/createRadioGroupState.ts +7 -31
- package/src/radio/index.ts +3 -8
- package/src/searchfield/createSearchField.ts +57 -29
- package/src/searchfield/index.ts +2 -2
- package/src/select/createHiddenSelect.tsx +57 -44
- package/src/select/createSelect.ts +146 -73
- package/src/select/index.ts +2 -7
- package/src/selection/DOMLayoutDelegate.ts +102 -0
- package/src/selection/ListKeyboardDelegate.ts +398 -0
- package/src/selection/constants.ts +16 -0
- package/src/selection/createCollectionRowInteraction.ts +209 -0
- package/src/selection/createScrollIntoViewOnFocus.ts +65 -0
- package/src/selection/createSelectableCollection.ts +645 -0
- package/src/selection/createSelectableItem.ts +498 -0
- package/src/selection/createSelectableList.ts +93 -0
- package/src/selection/createTypeSelect.ts +120 -59
- package/src/selection/index.ts +32 -1
- package/src/selection/selectItem.ts +80 -0
- package/src/selection/utils.ts +82 -0
- package/src/separator/createSeparator.ts +20 -25
- package/src/separator/index.ts +1 -1
- package/src/slider/createSlider.ts +128 -112
- package/src/slider/index.ts +2 -2
- package/src/ssr/index.tsx +38 -46
- package/src/steplist/createStepList.ts +106 -0
- package/src/steplist/index.ts +8 -0
- package/src/switch/createSwitch.ts +19 -14
- package/src/switch/index.ts +1 -1
- package/src/table/createTable.ts +192 -95
- 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 +206 -91
- package/src/table/createTableRowGroup.ts +5 -7
- package/src/table/createTableSelectAllCheckbox.ts +14 -14
- package/src/table/createTableSelectionCheckbox.ts +8 -8
- package/src/table/index.ts +14 -9
- package/src/table/types.ts +43 -7
- package/src/tabs/createTabs.ts +123 -111
- package/src/tabs/index.ts +1 -1
- package/src/tag/createTag.ts +57 -50
- package/src/tag/createTagGroup.ts +47 -41
- 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 +29 -26
- package/src/toast/createToastRegion.ts +169 -26
- package/src/toast/index.ts +2 -6
- package/src/toggle/createToggle.ts +115 -53
- package/src/toggle/createToggleState.ts +2 -10
- package/src/toggle/index.ts +4 -5
- package/src/toolbar/createToolbar.ts +214 -230
- package/src/toolbar/index.ts +1 -1
- package/src/tooltip/createTooltip.ts +11 -24
- package/src/tooltip/createTooltipTrigger.ts +61 -49
- package/src/tooltip/index.ts +2 -2
- package/src/tree/createTree.ts +128 -72
- package/src/tree/createTreeItem.ts +120 -135
- package/src/tree/createTreeSelectionCheckbox.ts +11 -8
- package/src/tree/index.ts +4 -4
- package/src/tree/types.ts +20 -6
- package/src/utils/animation.ts +151 -0
- package/src/utils/createDescription.ts +6 -23
- package/src/utils/dom.ts +265 -68
- package/src/utils/env.ts +9 -11
- 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 +20 -22
- package/src/utils/keyboard.ts +25 -0
- package/src/utils/mergeProps.ts +49 -15
- package/src/utils/platform.ts +2 -2
- package/src/utils/reactivity.ts +3 -3
- package/src/utils/scrollIntoView.ts +181 -0
- package/src/utils/textSelection.ts +16 -16
- package/src/visually-hidden/createVisuallyHidden.ts +16 -28
- package/src/visually-hidden/index.ts +1 -1
- package/dist/i18n/NumberFormatter.d.ts +0 -43
- package/dist/i18n/NumberFormatter.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.ssr.js +0 -17082
- package/dist/index.ssr.js.map +0 -1
- package/src/i18n/NumberFormatter.ts +0 -266
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { A as isMac, p as isVirtualClick } from "./utils.js";
|
|
2
|
+
import { b as openLink, c as getOwnerWindow, s as getOwnerDocument } from "./focus.js";
|
|
3
|
+
import { createEffect, createSignal, onCleanup } from "solid-js";
|
|
4
|
+
import { isServer } from "solid-js/web";
|
|
5
|
+
//#region src/interactions/createInteractionModality.ts
|
|
6
|
+
/**
|
|
7
|
+
* createInteractionModality + focus-visible tracking for solidaria
|
|
8
|
+
*
|
|
9
|
+
* Port of @react-aria/interactions useFocusVisible/useInteractionModality.
|
|
10
|
+
* Tracks the current interaction modality (keyboard, pointer, or virtual) and
|
|
11
|
+
* provides focus-visible state and listeners.
|
|
12
|
+
*/
|
|
13
|
+
let currentModality = null;
|
|
14
|
+
let currentPointerType = "keyboard";
|
|
15
|
+
const changeHandlers = /* @__PURE__ */ new Set();
|
|
16
|
+
let hasSetupGlobalListeners = /* @__PURE__ */ new Map();
|
|
17
|
+
let hasEventBeforeFocus = false;
|
|
18
|
+
let hasBlurredWindowRecently = false;
|
|
19
|
+
let ignoreFocusEvent = false;
|
|
20
|
+
const FOCUS_VISIBLE_INPUT_KEYS = {
|
|
21
|
+
Tab: true,
|
|
22
|
+
Escape: true
|
|
23
|
+
};
|
|
24
|
+
function triggerChangeHandlers(modality, e) {
|
|
25
|
+
for (const handler of changeHandlers) handler(modality, e);
|
|
26
|
+
}
|
|
27
|
+
function isValidKey(e) {
|
|
28
|
+
return !(e.metaKey || !isMac() && e.altKey || e.ctrlKey || e.key === "Control" || e.key === "Shift" || e.key === "Meta");
|
|
29
|
+
}
|
|
30
|
+
function handleKeyboardEvent(e) {
|
|
31
|
+
hasEventBeforeFocus = true;
|
|
32
|
+
if (!openLink.isOpening && isValidKey(e)) {
|
|
33
|
+
currentModality = "keyboard";
|
|
34
|
+
currentPointerType = "keyboard";
|
|
35
|
+
triggerChangeHandlers("keyboard", e);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function handlePointerEvent(e) {
|
|
39
|
+
currentModality = "pointer";
|
|
40
|
+
currentPointerType = "pointerType" in e ? e.pointerType : "mouse";
|
|
41
|
+
if (e.type === "mousedown" || e.type === "pointerdown") {
|
|
42
|
+
hasEventBeforeFocus = true;
|
|
43
|
+
triggerChangeHandlers("pointer", e);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function handleClickEvent(e) {
|
|
47
|
+
if (!e.isTrusted) return;
|
|
48
|
+
if (!openLink.isOpening && isVirtualClick(e)) {
|
|
49
|
+
hasEventBeforeFocus = true;
|
|
50
|
+
currentModality = "virtual";
|
|
51
|
+
currentPointerType = "virtual";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function handleFocusEvent(e) {
|
|
55
|
+
if (!e.isTrusted || ignoreFocusEvent) return;
|
|
56
|
+
const target = e.target;
|
|
57
|
+
const targetElement = target && target.nodeType ? target : null;
|
|
58
|
+
const ownerWindow = targetElement ? getOwnerWindow(targetElement) : window;
|
|
59
|
+
const ownerDocument = targetElement ? getOwnerDocument(targetElement) : document;
|
|
60
|
+
if (target === ownerWindow || target === ownerDocument) return;
|
|
61
|
+
if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {
|
|
62
|
+
currentModality = "virtual";
|
|
63
|
+
currentPointerType = "virtual";
|
|
64
|
+
triggerChangeHandlers("virtual", e);
|
|
65
|
+
}
|
|
66
|
+
hasEventBeforeFocus = false;
|
|
67
|
+
hasBlurredWindowRecently = false;
|
|
68
|
+
}
|
|
69
|
+
function handleWindowBlur() {
|
|
70
|
+
hasEventBeforeFocus = false;
|
|
71
|
+
hasBlurredWindowRecently = true;
|
|
72
|
+
}
|
|
73
|
+
function setupGlobalFocusEvents(element) {
|
|
74
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
75
|
+
const windowObject = getOwnerWindow(element);
|
|
76
|
+
if (hasSetupGlobalListeners.get(windowObject)) return;
|
|
77
|
+
const documentObject = getOwnerDocument(element);
|
|
78
|
+
const originalFocus = windowObject.HTMLElement.prototype.focus;
|
|
79
|
+
Reflect.defineProperty(windowObject.HTMLElement.prototype, "focus", {
|
|
80
|
+
configurable: true,
|
|
81
|
+
writable: true,
|
|
82
|
+
value: function() {
|
|
83
|
+
hasEventBeforeFocus = true;
|
|
84
|
+
originalFocus.apply(this, arguments);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
documentObject.addEventListener("keydown", handleKeyboardEvent, true);
|
|
88
|
+
documentObject.addEventListener("keyup", handleKeyboardEvent, true);
|
|
89
|
+
documentObject.addEventListener("click", handleClickEvent, true);
|
|
90
|
+
windowObject.addEventListener("focus", handleFocusEvent, true);
|
|
91
|
+
windowObject.addEventListener("blur", handleWindowBlur, false);
|
|
92
|
+
if (typeof windowObject.PointerEvent !== "undefined") {
|
|
93
|
+
documentObject.addEventListener("pointerdown", handlePointerEvent, true);
|
|
94
|
+
documentObject.addEventListener("pointermove", handlePointerEvent, true);
|
|
95
|
+
documentObject.addEventListener("pointerup", handlePointerEvent, true);
|
|
96
|
+
} else {
|
|
97
|
+
documentObject.addEventListener("mousedown", handlePointerEvent, true);
|
|
98
|
+
documentObject.addEventListener("mousemove", handlePointerEvent, true);
|
|
99
|
+
documentObject.addEventListener("mouseup", handlePointerEvent, true);
|
|
100
|
+
}
|
|
101
|
+
windowObject.addEventListener("beforeunload", () => {
|
|
102
|
+
tearDownWindowFocusTracking(element);
|
|
103
|
+
}, { once: true });
|
|
104
|
+
hasSetupGlobalListeners.set(windowObject, { focus: originalFocus });
|
|
105
|
+
}
|
|
106
|
+
function tearDownWindowFocusTracking(element, loadListener) {
|
|
107
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
108
|
+
const windowObject = getOwnerWindow(element);
|
|
109
|
+
const documentObject = getOwnerDocument(element);
|
|
110
|
+
if (loadListener) documentObject.removeEventListener("DOMContentLoaded", loadListener);
|
|
111
|
+
if (!hasSetupGlobalListeners.has(windowObject)) return;
|
|
112
|
+
const entry = hasSetupGlobalListeners.get(windowObject);
|
|
113
|
+
Reflect.defineProperty(windowObject.HTMLElement.prototype, "focus", {
|
|
114
|
+
configurable: true,
|
|
115
|
+
writable: true,
|
|
116
|
+
value: entry.focus
|
|
117
|
+
});
|
|
118
|
+
documentObject.removeEventListener("keydown", handleKeyboardEvent, true);
|
|
119
|
+
documentObject.removeEventListener("keyup", handleKeyboardEvent, true);
|
|
120
|
+
documentObject.removeEventListener("click", handleClickEvent, true);
|
|
121
|
+
windowObject.removeEventListener("focus", handleFocusEvent, true);
|
|
122
|
+
windowObject.removeEventListener("blur", handleWindowBlur, false);
|
|
123
|
+
if (typeof windowObject.PointerEvent !== "undefined") {
|
|
124
|
+
documentObject.removeEventListener("pointerdown", handlePointerEvent, true);
|
|
125
|
+
documentObject.removeEventListener("pointermove", handlePointerEvent, true);
|
|
126
|
+
documentObject.removeEventListener("pointerup", handlePointerEvent, true);
|
|
127
|
+
} else {
|
|
128
|
+
documentObject.removeEventListener("mousedown", handlePointerEvent, true);
|
|
129
|
+
documentObject.removeEventListener("mousemove", handlePointerEvent, true);
|
|
130
|
+
documentObject.removeEventListener("mouseup", handlePointerEvent, true);
|
|
131
|
+
}
|
|
132
|
+
hasSetupGlobalListeners.delete(windowObject);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Adds a window (i.e. iframe) to the list of windows that are being tracked for focus visible.
|
|
136
|
+
*/
|
|
137
|
+
function addWindowFocusTracking(element) {
|
|
138
|
+
const documentObject = getOwnerDocument(element);
|
|
139
|
+
let loadListener;
|
|
140
|
+
if (documentObject.readyState !== "loading") setupGlobalFocusEvents(element);
|
|
141
|
+
else {
|
|
142
|
+
loadListener = () => {
|
|
143
|
+
setupGlobalFocusEvents(element);
|
|
144
|
+
};
|
|
145
|
+
documentObject.addEventListener("DOMContentLoaded", loadListener);
|
|
146
|
+
}
|
|
147
|
+
return () => tearDownWindowFocusTracking(element, loadListener);
|
|
148
|
+
}
|
|
149
|
+
function setupGlobalFocusListeners() {
|
|
150
|
+
addWindowFocusTracking();
|
|
151
|
+
}
|
|
152
|
+
if (typeof document !== "undefined") addWindowFocusTracking();
|
|
153
|
+
/**
|
|
154
|
+
* If true, keyboard focus is visible.
|
|
155
|
+
*/
|
|
156
|
+
function isFocusVisible() {
|
|
157
|
+
return currentModality !== "pointer";
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Gets the current interaction modality.
|
|
161
|
+
*/
|
|
162
|
+
function getInteractionModality() {
|
|
163
|
+
return currentModality;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Sets the current interaction modality.
|
|
167
|
+
*/
|
|
168
|
+
function setInteractionModality(modality) {
|
|
169
|
+
currentModality = modality;
|
|
170
|
+
currentPointerType = modality === "pointer" ? "mouse" : modality;
|
|
171
|
+
triggerChangeHandlers(modality, null);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Gets the current pointer type.
|
|
175
|
+
*/
|
|
176
|
+
function getPointerType() {
|
|
177
|
+
return currentPointerType;
|
|
178
|
+
}
|
|
179
|
+
function isKeyboardFocusEvent(isTextInput, modality, e) {
|
|
180
|
+
if (!e) return true;
|
|
181
|
+
const target = "target" in e ? e.target : null;
|
|
182
|
+
const ownerDocument = target ? getOwnerDocument(target) : document;
|
|
183
|
+
const ownerWindow = target ? getOwnerWindow(target) : window;
|
|
184
|
+
const IHTMLInputElement = ownerWindow.HTMLInputElement;
|
|
185
|
+
const IHTMLTextAreaElement = ownerWindow.HTMLTextAreaElement;
|
|
186
|
+
const IHTMLElement = ownerWindow.HTMLElement;
|
|
187
|
+
const IKeyboardEvent = ownerWindow.KeyboardEvent;
|
|
188
|
+
const nonTextInputTypes = new Set([
|
|
189
|
+
"checkbox",
|
|
190
|
+
"radio",
|
|
191
|
+
"range",
|
|
192
|
+
"color",
|
|
193
|
+
"file",
|
|
194
|
+
"image",
|
|
195
|
+
"button",
|
|
196
|
+
"submit",
|
|
197
|
+
"reset"
|
|
198
|
+
]);
|
|
199
|
+
isTextInput = isTextInput || ownerDocument.activeElement instanceof IHTMLInputElement && !nonTextInputTypes.has(ownerDocument.activeElement.type) || ownerDocument.activeElement instanceof IHTMLTextAreaElement || ownerDocument.activeElement instanceof IHTMLElement && ownerDocument.activeElement.isContentEditable;
|
|
200
|
+
return !(isTextInput && modality === "keyboard" && e instanceof IKeyboardEvent && !FOCUS_VISIBLE_INPUT_KEYS[e.key]);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Listens for trigger change and reports if focus is visible.
|
|
204
|
+
*/
|
|
205
|
+
function createFocusVisibleListener(handler, opts) {
|
|
206
|
+
setupGlobalFocusEvents();
|
|
207
|
+
const listener = (modality, e) => {
|
|
208
|
+
if (!isKeyboardFocusEvent(!!opts?.isTextInput, modality, e)) return;
|
|
209
|
+
handler(isFocusVisible());
|
|
210
|
+
};
|
|
211
|
+
changeHandlers.add(listener);
|
|
212
|
+
return () => {
|
|
213
|
+
changeHandlers.delete(listener);
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Manages focus visible state for the page.
|
|
218
|
+
*/
|
|
219
|
+
function createFocusVisible(props = {}) {
|
|
220
|
+
if (isServer) return { isFocusVisible: () => false };
|
|
221
|
+
const { isTextInput, autoFocus } = props;
|
|
222
|
+
const [isVisible, setIsVisible] = createSignal(autoFocus || isFocusVisible());
|
|
223
|
+
createEffect(() => {
|
|
224
|
+
onCleanup(createFocusVisibleListener(setIsVisible, { isTextInput }));
|
|
225
|
+
});
|
|
226
|
+
return { isFocusVisible: isVisible };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Tracks the current interaction modality.
|
|
230
|
+
*/
|
|
231
|
+
function createInteractionModality() {
|
|
232
|
+
if (isServer) return { modality: () => null };
|
|
233
|
+
const [modality, setModality] = createSignal(currentModality);
|
|
234
|
+
createEffect(() => {
|
|
235
|
+
setupGlobalFocusEvents();
|
|
236
|
+
const handler = (newModality) => {
|
|
237
|
+
setModality(newModality);
|
|
238
|
+
};
|
|
239
|
+
changeHandlers.add(handler);
|
|
240
|
+
onCleanup(() => {
|
|
241
|
+
changeHandlers.delete(handler);
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
return { modality };
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Adds a listener for modality changes.
|
|
248
|
+
*/
|
|
249
|
+
function addModalityListener(handler) {
|
|
250
|
+
const wrapped = (modality) => {
|
|
251
|
+
handler(modality);
|
|
252
|
+
};
|
|
253
|
+
changeHandlers.add(wrapped);
|
|
254
|
+
return () => {
|
|
255
|
+
changeHandlers.delete(wrapped);
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Hook to track whether the user is currently interacting with the keyboard.
|
|
260
|
+
*/
|
|
261
|
+
function useIsKeyboardFocused() {
|
|
262
|
+
if (isServer) return () => false;
|
|
263
|
+
const { modality } = createInteractionModality();
|
|
264
|
+
return () => modality() === "keyboard";
|
|
265
|
+
}
|
|
266
|
+
//#endregion
|
|
267
|
+
export { createInteractionModality as a, isFocusVisible as c, useIsKeyboardFocused as d, createFocusVisibleListener as i, setInteractionModality as l, addWindowFocusTracking as n, getInteractionModality as o, createFocusVisible as r, getPointerType as s, addModalityListener as t, setupGlobalFocusListeners as u };
|
|
268
|
+
|
|
269
|
+
//# sourceMappingURL=createInteractionModality.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createInteractionModality.js","names":[],"sources":["../../src/interactions/createInteractionModality.ts"],"sourcesContent":["/**\n * createInteractionModality + focus-visible tracking for solidaria\n *\n * Port of @react-aria/interactions useFocusVisible/useInteractionModality.\n * Tracks the current interaction modality (keyboard, pointer, or virtual) and\n * provides focus-visible state and listeners.\n */\n\nimport { type Accessor, createSignal, createEffect, onCleanup } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { getOwnerDocument, getOwnerWindow, isMac, isVirtualClick, openLink } from \"../utils\";\n\nexport type Modality = \"keyboard\" | \"pointer\" | \"virtual\";\nexport type PointerType = \"mouse\" | \"pen\" | \"touch\" | \"keyboard\" | \"virtual\";\ntype HandlerEvent = PointerEvent | MouseEvent | KeyboardEvent | FocusEvent | null;\ntype Handler = (modality: Modality, e: HandlerEvent) => void;\n\nexport type FocusVisibleHandler = (isFocusVisible: boolean) => void;\n\nexport interface FocusVisibleProps {\n /** Whether the element is a text input. */\n isTextInput?: boolean;\n /** Whether the element will be auto focused. */\n autoFocus?: boolean;\n}\n\nexport interface FocusVisibleResult {\n /** Whether keyboard focus is visible globally. */\n isFocusVisible: Accessor<boolean>;\n}\n\nexport interface InteractionModalityResult {\n /** The current interaction modality. */\n modality: Accessor<Modality | null>;\n}\n\nlet currentModality: Modality | null = null;\nlet currentPointerType: PointerType = \"keyboard\";\nconst changeHandlers = new Set<Handler>();\n\nexport let hasSetupGlobalListeners: Map<\n Window,\n { focus: typeof window.HTMLElement.prototype.focus }\n> = new Map();\nlet hasEventBeforeFocus = false;\nlet hasBlurredWindowRecently = false;\nlet ignoreFocusEvent = false;\n\nconst FOCUS_VISIBLE_INPUT_KEYS: Record<string, boolean> = {\n Tab: true,\n Escape: true,\n};\n\nfunction triggerChangeHandlers(modality: Modality, e: HandlerEvent) {\n for (const handler of changeHandlers) {\n handler(modality, e);\n }\n}\n\nfunction isValidKey(e: KeyboardEvent) {\n return !(\n e.metaKey ||\n (!isMac() && e.altKey) ||\n e.ctrlKey ||\n e.key === \"Control\" ||\n e.key === \"Shift\" ||\n e.key === \"Meta\"\n );\n}\n\nfunction handleKeyboardEvent(e: KeyboardEvent) {\n hasEventBeforeFocus = true;\n const isOpening = (openLink as { isOpening?: boolean }).isOpening;\n if (!isOpening && isValidKey(e)) {\n currentModality = \"keyboard\";\n currentPointerType = \"keyboard\";\n triggerChangeHandlers(\"keyboard\", e);\n }\n}\n\nfunction handlePointerEvent(e: PointerEvent | MouseEvent) {\n currentModality = \"pointer\";\n currentPointerType = \"pointerType\" in e ? (e.pointerType as PointerType) : \"mouse\";\n if (e.type === \"mousedown\" || e.type === \"pointerdown\") {\n hasEventBeforeFocus = true;\n triggerChangeHandlers(\"pointer\", e);\n }\n}\n\nfunction handleClickEvent(e: MouseEvent) {\n if (!e.isTrusted) {\n return;\n }\n\n const isOpening = (openLink as { isOpening?: boolean }).isOpening;\n if (!isOpening && isVirtualClick(e)) {\n hasEventBeforeFocus = true;\n currentModality = \"virtual\";\n currentPointerType = \"virtual\";\n }\n}\n\nfunction handleFocusEvent(e: FocusEvent) {\n if (!e.isTrusted || ignoreFocusEvent) {\n return;\n }\n\n const target = e.target as EventTarget | null;\n const targetElement = target && (target as Element).nodeType ? (target as Element) : null;\n const ownerWindow = targetElement ? getOwnerWindow(targetElement) : window;\n const ownerDocument = targetElement ? getOwnerDocument(targetElement) : document;\n\n if (target === ownerWindow || target === ownerDocument) {\n return;\n }\n\n if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {\n currentModality = \"virtual\";\n currentPointerType = \"virtual\";\n triggerChangeHandlers(\"virtual\", e);\n }\n\n hasEventBeforeFocus = false;\n hasBlurredWindowRecently = false;\n}\n\nfunction handleWindowBlur() {\n if (ignoreFocusEvent) {\n return;\n }\n\n hasEventBeforeFocus = false;\n hasBlurredWindowRecently = true;\n}\n\nfunction setupGlobalFocusEvents(element?: HTMLElement | null) {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const windowObject = getOwnerWindow(element);\n if (hasSetupGlobalListeners.get(windowObject)) {\n return;\n }\n\n const documentObject = getOwnerDocument(element);\n\n // Programmatic focus() calls shouldn't affect the current input modality, so we\n // patch HTMLElement.prototype.focus to record that an event preceded the focus.\n // Use Reflect.defineProperty (not assignment) so this works even when `focus` is\n // currently a getter-only accessor — e.g. when a test library's setup() has\n // instrumented it. Plain assignment throws in that case; Reflect.defineProperty\n // returns false rather than throwing (and succeeds on the configurable prototype).\n const originalFocus = windowObject.HTMLElement.prototype.focus;\n Reflect.defineProperty(windowObject.HTMLElement.prototype, \"focus\", {\n configurable: true,\n writable: true,\n value: function () {\n hasEventBeforeFocus = true;\n originalFocus.apply(this, arguments as unknown as [options?: FocusOptions | undefined]);\n },\n });\n\n documentObject.addEventListener(\"keydown\", handleKeyboardEvent, true);\n documentObject.addEventListener(\"keyup\", handleKeyboardEvent, true);\n documentObject.addEventListener(\"click\", handleClickEvent, true);\n\n windowObject.addEventListener(\"focus\", handleFocusEvent, true);\n windowObject.addEventListener(\"blur\", handleWindowBlur, false);\n\n if (typeof windowObject.PointerEvent !== \"undefined\") {\n documentObject.addEventListener(\"pointerdown\", handlePointerEvent, true);\n documentObject.addEventListener(\"pointermove\", handlePointerEvent, true);\n documentObject.addEventListener(\"pointerup\", handlePointerEvent, true);\n } else {\n documentObject.addEventListener(\"mousedown\", handlePointerEvent, true);\n documentObject.addEventListener(\"mousemove\", handlePointerEvent, true);\n documentObject.addEventListener(\"mouseup\", handlePointerEvent, true);\n }\n\n windowObject.addEventListener(\n \"beforeunload\",\n () => {\n tearDownWindowFocusTracking(element);\n },\n { once: true },\n );\n\n hasSetupGlobalListeners.set(windowObject, { focus: originalFocus });\n}\n\nfunction tearDownWindowFocusTracking(element?: HTMLElement | null, loadListener?: () => void) {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const windowObject = getOwnerWindow(element);\n const documentObject = getOwnerDocument(element);\n\n if (loadListener) {\n documentObject.removeEventListener(\"DOMContentLoaded\", loadListener);\n }\n\n if (!hasSetupGlobalListeners.has(windowObject)) {\n return;\n }\n\n const entry = hasSetupGlobalListeners.get(windowObject)!;\n // Mirror the setup path: defineProperty (not assignment) restores the original\n // focus even if it had been replaced with a getter-only accessor.\n Reflect.defineProperty(windowObject.HTMLElement.prototype, \"focus\", {\n configurable: true,\n writable: true,\n value: entry.focus,\n });\n\n documentObject.removeEventListener(\"keydown\", handleKeyboardEvent, true);\n documentObject.removeEventListener(\"keyup\", handleKeyboardEvent, true);\n documentObject.removeEventListener(\"click\", handleClickEvent, true);\n\n windowObject.removeEventListener(\"focus\", handleFocusEvent, true);\n windowObject.removeEventListener(\"blur\", handleWindowBlur, false);\n\n if (typeof windowObject.PointerEvent !== \"undefined\") {\n documentObject.removeEventListener(\"pointerdown\", handlePointerEvent, true);\n documentObject.removeEventListener(\"pointermove\", handlePointerEvent, true);\n documentObject.removeEventListener(\"pointerup\", handlePointerEvent, true);\n } else {\n documentObject.removeEventListener(\"mousedown\", handlePointerEvent, true);\n documentObject.removeEventListener(\"mousemove\", handlePointerEvent, true);\n documentObject.removeEventListener(\"mouseup\", handlePointerEvent, true);\n }\n\n hasSetupGlobalListeners.delete(windowObject);\n}\n\n/**\n * Adds a window (i.e. iframe) to the list of windows that are being tracked for focus visible.\n */\nexport function addWindowFocusTracking(element?: HTMLElement | null): () => void {\n const documentObject = getOwnerDocument(element);\n let loadListener: (() => void) | undefined;\n\n if (documentObject.readyState !== \"loading\") {\n setupGlobalFocusEvents(element);\n } else {\n loadListener = () => {\n setupGlobalFocusEvents(element);\n };\n documentObject.addEventListener(\"DOMContentLoaded\", loadListener);\n }\n\n return () => tearDownWindowFocusTracking(element, loadListener);\n}\n\nexport function setupGlobalFocusListeners(): void {\n addWindowFocusTracking();\n}\n\nif (typeof document !== \"undefined\") {\n addWindowFocusTracking();\n}\n\n/**\n * If true, keyboard focus is visible.\n */\nexport function isFocusVisible(): boolean {\n return currentModality !== \"pointer\";\n}\n\n/**\n * Gets the current interaction modality.\n */\nexport function getInteractionModality(): Modality | null {\n return currentModality;\n}\n\n/**\n * Sets the current interaction modality.\n */\nexport function setInteractionModality(modality: Modality): void {\n currentModality = modality;\n currentPointerType = modality === \"pointer\" ? \"mouse\" : modality;\n triggerChangeHandlers(modality, null);\n}\n\n/**\n * Gets the current pointer type.\n */\nexport function getPointerType(): PointerType {\n return currentPointerType;\n}\n\nfunction isKeyboardFocusEvent(isTextInput: boolean, modality: Modality, e: HandlerEvent): boolean {\n if (!e) {\n return true;\n }\n\n const target = \"target\" in e ? (e.target as Element | null) : null;\n const ownerDocument = target ? getOwnerDocument(target) : document;\n const ownerWindow = target ? getOwnerWindow(target) : window;\n\n const IHTMLInputElement = ownerWindow.HTMLInputElement;\n const IHTMLTextAreaElement = ownerWindow.HTMLTextAreaElement;\n const IHTMLElement = ownerWindow.HTMLElement;\n const IKeyboardEvent = ownerWindow.KeyboardEvent;\n\n const nonTextInputTypes = new Set([\n \"checkbox\",\n \"radio\",\n \"range\",\n \"color\",\n \"file\",\n \"image\",\n \"button\",\n \"submit\",\n \"reset\",\n ]);\n\n isTextInput =\n isTextInput ||\n (ownerDocument.activeElement instanceof IHTMLInputElement &&\n !nonTextInputTypes.has(ownerDocument.activeElement.type)) ||\n ownerDocument.activeElement instanceof IHTMLTextAreaElement ||\n (ownerDocument.activeElement instanceof IHTMLElement &&\n ownerDocument.activeElement.isContentEditable);\n\n return !(\n isTextInput &&\n modality === \"keyboard\" &&\n e instanceof IKeyboardEvent &&\n !FOCUS_VISIBLE_INPUT_KEYS[e.key]\n );\n}\n\n/**\n * Listens for trigger change and reports if focus is visible.\n */\nexport function createFocusVisibleListener(\n handler: FocusVisibleHandler,\n opts?: { isTextInput?: boolean },\n): () => void {\n setupGlobalFocusEvents();\n const listener: Handler = (modality: Modality, e: HandlerEvent) => {\n if (!isKeyboardFocusEvent(!!opts?.isTextInput, modality, e)) {\n return;\n }\n handler(isFocusVisible());\n };\n changeHandlers.add(listener);\n return () => {\n changeHandlers.delete(listener);\n };\n}\n\n/**\n * Manages focus visible state for the page.\n */\nexport function createFocusVisible(props: FocusVisibleProps = {}): FocusVisibleResult {\n if (isServer) {\n return { isFocusVisible: () => false };\n }\n\n const { isTextInput, autoFocus } = props;\n const [isVisible, setIsVisible] = createSignal<boolean>(autoFocus || isFocusVisible());\n\n createEffect(() => {\n const cleanup = createFocusVisibleListener(setIsVisible, { isTextInput });\n onCleanup(cleanup);\n });\n\n return { isFocusVisible: isVisible };\n}\n\n/**\n * Tracks the current interaction modality.\n */\nexport function createInteractionModality(): InteractionModalityResult {\n if (isServer) {\n return {\n modality: () => null,\n };\n }\n\n const [modality, setModality] = createSignal<Modality | null>(currentModality);\n\n createEffect(() => {\n setupGlobalFocusEvents();\n const handler: Handler = (newModality: Modality) => {\n setModality(newModality);\n };\n changeHandlers.add(handler);\n onCleanup(() => {\n changeHandlers.delete(handler);\n });\n });\n\n return {\n modality,\n };\n}\n\n/**\n * Adds a listener for modality changes.\n */\nexport function addModalityListener(handler: (modality: Modality) => void): () => void {\n const wrapped: Handler = (modality) => {\n handler(modality);\n };\n changeHandlers.add(wrapped);\n return () => {\n changeHandlers.delete(wrapped);\n };\n}\n\n/**\n * Hook to track whether the user is currently interacting with the keyboard.\n */\nexport function useIsKeyboardFocused(): Accessor<boolean> {\n if (isServer) {\n return () => false;\n }\n\n const { modality } = createInteractionModality();\n return () => modality() === \"keyboard\";\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { A as isMac, p as isVirtualClick } from "./utils.jsx";
|
|
2
|
+
import { b as openLink, c as getOwnerWindow, s as getOwnerDocument } from "./focus.jsx";
|
|
3
|
+
import { createEffect, createSignal, onCleanup } from "solid-js";
|
|
4
|
+
import { isServer } from "solid-js/web";
|
|
5
|
+
//#region src/interactions/createInteractionModality.ts
|
|
6
|
+
/**
|
|
7
|
+
* createInteractionModality + focus-visible tracking for solidaria
|
|
8
|
+
*
|
|
9
|
+
* Port of @react-aria/interactions useFocusVisible/useInteractionModality.
|
|
10
|
+
* Tracks the current interaction modality (keyboard, pointer, or virtual) and
|
|
11
|
+
* provides focus-visible state and listeners.
|
|
12
|
+
*/
|
|
13
|
+
let currentModality = null;
|
|
14
|
+
let currentPointerType = "keyboard";
|
|
15
|
+
const changeHandlers = /* @__PURE__ */ new Set();
|
|
16
|
+
let hasSetupGlobalListeners = /* @__PURE__ */ new Map();
|
|
17
|
+
let hasEventBeforeFocus = false;
|
|
18
|
+
let hasBlurredWindowRecently = false;
|
|
19
|
+
let ignoreFocusEvent = false;
|
|
20
|
+
const FOCUS_VISIBLE_INPUT_KEYS = {
|
|
21
|
+
Tab: true,
|
|
22
|
+
Escape: true
|
|
23
|
+
};
|
|
24
|
+
function triggerChangeHandlers(modality, e) {
|
|
25
|
+
for (const handler of changeHandlers) handler(modality, e);
|
|
26
|
+
}
|
|
27
|
+
function isValidKey(e) {
|
|
28
|
+
return !(e.metaKey || !isMac() && e.altKey || e.ctrlKey || e.key === "Control" || e.key === "Shift" || e.key === "Meta");
|
|
29
|
+
}
|
|
30
|
+
function handleKeyboardEvent(e) {
|
|
31
|
+
hasEventBeforeFocus = true;
|
|
32
|
+
if (!openLink.isOpening && isValidKey(e)) {
|
|
33
|
+
currentModality = "keyboard";
|
|
34
|
+
currentPointerType = "keyboard";
|
|
35
|
+
triggerChangeHandlers("keyboard", e);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function handlePointerEvent(e) {
|
|
39
|
+
currentModality = "pointer";
|
|
40
|
+
currentPointerType = "pointerType" in e ? e.pointerType : "mouse";
|
|
41
|
+
if (e.type === "mousedown" || e.type === "pointerdown") {
|
|
42
|
+
hasEventBeforeFocus = true;
|
|
43
|
+
triggerChangeHandlers("pointer", e);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
function handleClickEvent(e) {
|
|
47
|
+
if (!e.isTrusted) return;
|
|
48
|
+
if (!openLink.isOpening && isVirtualClick(e)) {
|
|
49
|
+
hasEventBeforeFocus = true;
|
|
50
|
+
currentModality = "virtual";
|
|
51
|
+
currentPointerType = "virtual";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function handleFocusEvent(e) {
|
|
55
|
+
if (!e.isTrusted || ignoreFocusEvent) return;
|
|
56
|
+
const target = e.target;
|
|
57
|
+
const targetElement = target && target.nodeType ? target : null;
|
|
58
|
+
const ownerWindow = targetElement ? getOwnerWindow(targetElement) : window;
|
|
59
|
+
const ownerDocument = targetElement ? getOwnerDocument(targetElement) : document;
|
|
60
|
+
if (target === ownerWindow || target === ownerDocument) return;
|
|
61
|
+
if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {
|
|
62
|
+
currentModality = "virtual";
|
|
63
|
+
currentPointerType = "virtual";
|
|
64
|
+
triggerChangeHandlers("virtual", e);
|
|
65
|
+
}
|
|
66
|
+
hasEventBeforeFocus = false;
|
|
67
|
+
hasBlurredWindowRecently = false;
|
|
68
|
+
}
|
|
69
|
+
function handleWindowBlur() {
|
|
70
|
+
hasEventBeforeFocus = false;
|
|
71
|
+
hasBlurredWindowRecently = true;
|
|
72
|
+
}
|
|
73
|
+
function setupGlobalFocusEvents(element) {
|
|
74
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
75
|
+
const windowObject = getOwnerWindow(element);
|
|
76
|
+
if (hasSetupGlobalListeners.get(windowObject)) return;
|
|
77
|
+
const documentObject = getOwnerDocument(element);
|
|
78
|
+
const originalFocus = windowObject.HTMLElement.prototype.focus;
|
|
79
|
+
Reflect.defineProperty(windowObject.HTMLElement.prototype, "focus", {
|
|
80
|
+
configurable: true,
|
|
81
|
+
writable: true,
|
|
82
|
+
value: function() {
|
|
83
|
+
hasEventBeforeFocus = true;
|
|
84
|
+
originalFocus.apply(this, arguments);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
documentObject.addEventListener("keydown", handleKeyboardEvent, true);
|
|
88
|
+
documentObject.addEventListener("keyup", handleKeyboardEvent, true);
|
|
89
|
+
documentObject.addEventListener("click", handleClickEvent, true);
|
|
90
|
+
windowObject.addEventListener("focus", handleFocusEvent, true);
|
|
91
|
+
windowObject.addEventListener("blur", handleWindowBlur, false);
|
|
92
|
+
if (typeof windowObject.PointerEvent !== "undefined") {
|
|
93
|
+
documentObject.addEventListener("pointerdown", handlePointerEvent, true);
|
|
94
|
+
documentObject.addEventListener("pointermove", handlePointerEvent, true);
|
|
95
|
+
documentObject.addEventListener("pointerup", handlePointerEvent, true);
|
|
96
|
+
} else {
|
|
97
|
+
documentObject.addEventListener("mousedown", handlePointerEvent, true);
|
|
98
|
+
documentObject.addEventListener("mousemove", handlePointerEvent, true);
|
|
99
|
+
documentObject.addEventListener("mouseup", handlePointerEvent, true);
|
|
100
|
+
}
|
|
101
|
+
windowObject.addEventListener("beforeunload", () => {
|
|
102
|
+
tearDownWindowFocusTracking(element);
|
|
103
|
+
}, { once: true });
|
|
104
|
+
hasSetupGlobalListeners.set(windowObject, { focus: originalFocus });
|
|
105
|
+
}
|
|
106
|
+
function tearDownWindowFocusTracking(element, loadListener) {
|
|
107
|
+
if (typeof window === "undefined" || typeof document === "undefined") return;
|
|
108
|
+
const windowObject = getOwnerWindow(element);
|
|
109
|
+
const documentObject = getOwnerDocument(element);
|
|
110
|
+
if (loadListener) documentObject.removeEventListener("DOMContentLoaded", loadListener);
|
|
111
|
+
if (!hasSetupGlobalListeners.has(windowObject)) return;
|
|
112
|
+
const entry = hasSetupGlobalListeners.get(windowObject);
|
|
113
|
+
Reflect.defineProperty(windowObject.HTMLElement.prototype, "focus", {
|
|
114
|
+
configurable: true,
|
|
115
|
+
writable: true,
|
|
116
|
+
value: entry.focus
|
|
117
|
+
});
|
|
118
|
+
documentObject.removeEventListener("keydown", handleKeyboardEvent, true);
|
|
119
|
+
documentObject.removeEventListener("keyup", handleKeyboardEvent, true);
|
|
120
|
+
documentObject.removeEventListener("click", handleClickEvent, true);
|
|
121
|
+
windowObject.removeEventListener("focus", handleFocusEvent, true);
|
|
122
|
+
windowObject.removeEventListener("blur", handleWindowBlur, false);
|
|
123
|
+
if (typeof windowObject.PointerEvent !== "undefined") {
|
|
124
|
+
documentObject.removeEventListener("pointerdown", handlePointerEvent, true);
|
|
125
|
+
documentObject.removeEventListener("pointermove", handlePointerEvent, true);
|
|
126
|
+
documentObject.removeEventListener("pointerup", handlePointerEvent, true);
|
|
127
|
+
} else {
|
|
128
|
+
documentObject.removeEventListener("mousedown", handlePointerEvent, true);
|
|
129
|
+
documentObject.removeEventListener("mousemove", handlePointerEvent, true);
|
|
130
|
+
documentObject.removeEventListener("mouseup", handlePointerEvent, true);
|
|
131
|
+
}
|
|
132
|
+
hasSetupGlobalListeners.delete(windowObject);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Adds a window (i.e. iframe) to the list of windows that are being tracked for focus visible.
|
|
136
|
+
*/
|
|
137
|
+
function addWindowFocusTracking(element) {
|
|
138
|
+
const documentObject = getOwnerDocument(element);
|
|
139
|
+
let loadListener;
|
|
140
|
+
if (documentObject.readyState !== "loading") setupGlobalFocusEvents(element);
|
|
141
|
+
else {
|
|
142
|
+
loadListener = () => {
|
|
143
|
+
setupGlobalFocusEvents(element);
|
|
144
|
+
};
|
|
145
|
+
documentObject.addEventListener("DOMContentLoaded", loadListener);
|
|
146
|
+
}
|
|
147
|
+
return () => tearDownWindowFocusTracking(element, loadListener);
|
|
148
|
+
}
|
|
149
|
+
function setupGlobalFocusListeners() {
|
|
150
|
+
addWindowFocusTracking();
|
|
151
|
+
}
|
|
152
|
+
if (typeof document !== "undefined") addWindowFocusTracking();
|
|
153
|
+
/**
|
|
154
|
+
* If true, keyboard focus is visible.
|
|
155
|
+
*/
|
|
156
|
+
function isFocusVisible() {
|
|
157
|
+
return currentModality !== "pointer";
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Gets the current interaction modality.
|
|
161
|
+
*/
|
|
162
|
+
function getInteractionModality() {
|
|
163
|
+
return currentModality;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Sets the current interaction modality.
|
|
167
|
+
*/
|
|
168
|
+
function setInteractionModality(modality) {
|
|
169
|
+
currentModality = modality;
|
|
170
|
+
currentPointerType = modality === "pointer" ? "mouse" : modality;
|
|
171
|
+
triggerChangeHandlers(modality, null);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Gets the current pointer type.
|
|
175
|
+
*/
|
|
176
|
+
function getPointerType() {
|
|
177
|
+
return currentPointerType;
|
|
178
|
+
}
|
|
179
|
+
function isKeyboardFocusEvent(isTextInput, modality, e) {
|
|
180
|
+
if (!e) return true;
|
|
181
|
+
const target = "target" in e ? e.target : null;
|
|
182
|
+
const ownerDocument = target ? getOwnerDocument(target) : document;
|
|
183
|
+
const ownerWindow = target ? getOwnerWindow(target) : window;
|
|
184
|
+
const IHTMLInputElement = ownerWindow.HTMLInputElement;
|
|
185
|
+
const IHTMLTextAreaElement = ownerWindow.HTMLTextAreaElement;
|
|
186
|
+
const IHTMLElement = ownerWindow.HTMLElement;
|
|
187
|
+
const IKeyboardEvent = ownerWindow.KeyboardEvent;
|
|
188
|
+
const nonTextInputTypes = new Set([
|
|
189
|
+
"checkbox",
|
|
190
|
+
"radio",
|
|
191
|
+
"range",
|
|
192
|
+
"color",
|
|
193
|
+
"file",
|
|
194
|
+
"image",
|
|
195
|
+
"button",
|
|
196
|
+
"submit",
|
|
197
|
+
"reset"
|
|
198
|
+
]);
|
|
199
|
+
isTextInput = isTextInput || ownerDocument.activeElement instanceof IHTMLInputElement && !nonTextInputTypes.has(ownerDocument.activeElement.type) || ownerDocument.activeElement instanceof IHTMLTextAreaElement || ownerDocument.activeElement instanceof IHTMLElement && ownerDocument.activeElement.isContentEditable;
|
|
200
|
+
return !(isTextInput && modality === "keyboard" && e instanceof IKeyboardEvent && !FOCUS_VISIBLE_INPUT_KEYS[e.key]);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Listens for trigger change and reports if focus is visible.
|
|
204
|
+
*/
|
|
205
|
+
function createFocusVisibleListener(handler, opts) {
|
|
206
|
+
setupGlobalFocusEvents();
|
|
207
|
+
const listener = (modality, e) => {
|
|
208
|
+
if (!isKeyboardFocusEvent(!!opts?.isTextInput, modality, e)) return;
|
|
209
|
+
handler(isFocusVisible());
|
|
210
|
+
};
|
|
211
|
+
changeHandlers.add(listener);
|
|
212
|
+
return () => {
|
|
213
|
+
changeHandlers.delete(listener);
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Manages focus visible state for the page.
|
|
218
|
+
*/
|
|
219
|
+
function createFocusVisible(props = {}) {
|
|
220
|
+
if (isServer) return { isFocusVisible: () => false };
|
|
221
|
+
const { isTextInput, autoFocus } = props;
|
|
222
|
+
const [isVisible, setIsVisible] = createSignal(autoFocus || isFocusVisible());
|
|
223
|
+
createEffect(() => {
|
|
224
|
+
onCleanup(createFocusVisibleListener(setIsVisible, { isTextInput }));
|
|
225
|
+
});
|
|
226
|
+
return { isFocusVisible: isVisible };
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Tracks the current interaction modality.
|
|
230
|
+
*/
|
|
231
|
+
function createInteractionModality() {
|
|
232
|
+
if (isServer) return { modality: () => null };
|
|
233
|
+
const [modality, setModality] = createSignal(currentModality);
|
|
234
|
+
createEffect(() => {
|
|
235
|
+
setupGlobalFocusEvents();
|
|
236
|
+
const handler = (newModality) => {
|
|
237
|
+
setModality(newModality);
|
|
238
|
+
};
|
|
239
|
+
changeHandlers.add(handler);
|
|
240
|
+
onCleanup(() => {
|
|
241
|
+
changeHandlers.delete(handler);
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
return { modality };
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Adds a listener for modality changes.
|
|
248
|
+
*/
|
|
249
|
+
function addModalityListener(handler) {
|
|
250
|
+
const wrapped = (modality) => {
|
|
251
|
+
handler(modality);
|
|
252
|
+
};
|
|
253
|
+
changeHandlers.add(wrapped);
|
|
254
|
+
return () => {
|
|
255
|
+
changeHandlers.delete(wrapped);
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Hook to track whether the user is currently interacting with the keyboard.
|
|
260
|
+
*/
|
|
261
|
+
function useIsKeyboardFocused() {
|
|
262
|
+
if (isServer) return () => false;
|
|
263
|
+
const { modality } = createInteractionModality();
|
|
264
|
+
return () => modality() === "keyboard";
|
|
265
|
+
}
|
|
266
|
+
//#endregion
|
|
267
|
+
export { createInteractionModality as a, isFocusVisible as c, useIsKeyboardFocused as d, createFocusVisibleListener as i, setInteractionModality as l, addWindowFocusTracking as n, getInteractionModality as o, createFocusVisible as r, getPointerType as s, addModalityListener as t, setupGlobalFocusListeners as u };
|
|
268
|
+
|
|
269
|
+
//# sourceMappingURL=createInteractionModality.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createInteractionModality.jsx","names":[],"sources":["../../src/interactions/createInteractionModality.ts"],"sourcesContent":["/**\n * createInteractionModality + focus-visible tracking for solidaria\n *\n * Port of @react-aria/interactions useFocusVisible/useInteractionModality.\n * Tracks the current interaction modality (keyboard, pointer, or virtual) and\n * provides focus-visible state and listeners.\n */\n\nimport { type Accessor, createSignal, createEffect, onCleanup } from \"solid-js\";\nimport { isServer } from \"solid-js/web\";\nimport { getOwnerDocument, getOwnerWindow, isMac, isVirtualClick, openLink } from \"../utils\";\n\nexport type Modality = \"keyboard\" | \"pointer\" | \"virtual\";\nexport type PointerType = \"mouse\" | \"pen\" | \"touch\" | \"keyboard\" | \"virtual\";\ntype HandlerEvent = PointerEvent | MouseEvent | KeyboardEvent | FocusEvent | null;\ntype Handler = (modality: Modality, e: HandlerEvent) => void;\n\nexport type FocusVisibleHandler = (isFocusVisible: boolean) => void;\n\nexport interface FocusVisibleProps {\n /** Whether the element is a text input. */\n isTextInput?: boolean;\n /** Whether the element will be auto focused. */\n autoFocus?: boolean;\n}\n\nexport interface FocusVisibleResult {\n /** Whether keyboard focus is visible globally. */\n isFocusVisible: Accessor<boolean>;\n}\n\nexport interface InteractionModalityResult {\n /** The current interaction modality. */\n modality: Accessor<Modality | null>;\n}\n\nlet currentModality: Modality | null = null;\nlet currentPointerType: PointerType = \"keyboard\";\nconst changeHandlers = new Set<Handler>();\n\nexport let hasSetupGlobalListeners: Map<\n Window,\n { focus: typeof window.HTMLElement.prototype.focus }\n> = new Map();\nlet hasEventBeforeFocus = false;\nlet hasBlurredWindowRecently = false;\nlet ignoreFocusEvent = false;\n\nconst FOCUS_VISIBLE_INPUT_KEYS: Record<string, boolean> = {\n Tab: true,\n Escape: true,\n};\n\nfunction triggerChangeHandlers(modality: Modality, e: HandlerEvent) {\n for (const handler of changeHandlers) {\n handler(modality, e);\n }\n}\n\nfunction isValidKey(e: KeyboardEvent) {\n return !(\n e.metaKey ||\n (!isMac() && e.altKey) ||\n e.ctrlKey ||\n e.key === \"Control\" ||\n e.key === \"Shift\" ||\n e.key === \"Meta\"\n );\n}\n\nfunction handleKeyboardEvent(e: KeyboardEvent) {\n hasEventBeforeFocus = true;\n const isOpening = (openLink as { isOpening?: boolean }).isOpening;\n if (!isOpening && isValidKey(e)) {\n currentModality = \"keyboard\";\n currentPointerType = \"keyboard\";\n triggerChangeHandlers(\"keyboard\", e);\n }\n}\n\nfunction handlePointerEvent(e: PointerEvent | MouseEvent) {\n currentModality = \"pointer\";\n currentPointerType = \"pointerType\" in e ? (e.pointerType as PointerType) : \"mouse\";\n if (e.type === \"mousedown\" || e.type === \"pointerdown\") {\n hasEventBeforeFocus = true;\n triggerChangeHandlers(\"pointer\", e);\n }\n}\n\nfunction handleClickEvent(e: MouseEvent) {\n if (!e.isTrusted) {\n return;\n }\n\n const isOpening = (openLink as { isOpening?: boolean }).isOpening;\n if (!isOpening && isVirtualClick(e)) {\n hasEventBeforeFocus = true;\n currentModality = \"virtual\";\n currentPointerType = \"virtual\";\n }\n}\n\nfunction handleFocusEvent(e: FocusEvent) {\n if (!e.isTrusted || ignoreFocusEvent) {\n return;\n }\n\n const target = e.target as EventTarget | null;\n const targetElement = target && (target as Element).nodeType ? (target as Element) : null;\n const ownerWindow = targetElement ? getOwnerWindow(targetElement) : window;\n const ownerDocument = targetElement ? getOwnerDocument(targetElement) : document;\n\n if (target === ownerWindow || target === ownerDocument) {\n return;\n }\n\n if (!hasEventBeforeFocus && !hasBlurredWindowRecently) {\n currentModality = \"virtual\";\n currentPointerType = \"virtual\";\n triggerChangeHandlers(\"virtual\", e);\n }\n\n hasEventBeforeFocus = false;\n hasBlurredWindowRecently = false;\n}\n\nfunction handleWindowBlur() {\n if (ignoreFocusEvent) {\n return;\n }\n\n hasEventBeforeFocus = false;\n hasBlurredWindowRecently = true;\n}\n\nfunction setupGlobalFocusEvents(element?: HTMLElement | null) {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const windowObject = getOwnerWindow(element);\n if (hasSetupGlobalListeners.get(windowObject)) {\n return;\n }\n\n const documentObject = getOwnerDocument(element);\n\n // Programmatic focus() calls shouldn't affect the current input modality, so we\n // patch HTMLElement.prototype.focus to record that an event preceded the focus.\n // Use Reflect.defineProperty (not assignment) so this works even when `focus` is\n // currently a getter-only accessor — e.g. when a test library's setup() has\n // instrumented it. Plain assignment throws in that case; Reflect.defineProperty\n // returns false rather than throwing (and succeeds on the configurable prototype).\n const originalFocus = windowObject.HTMLElement.prototype.focus;\n Reflect.defineProperty(windowObject.HTMLElement.prototype, \"focus\", {\n configurable: true,\n writable: true,\n value: function () {\n hasEventBeforeFocus = true;\n originalFocus.apply(this, arguments as unknown as [options?: FocusOptions | undefined]);\n },\n });\n\n documentObject.addEventListener(\"keydown\", handleKeyboardEvent, true);\n documentObject.addEventListener(\"keyup\", handleKeyboardEvent, true);\n documentObject.addEventListener(\"click\", handleClickEvent, true);\n\n windowObject.addEventListener(\"focus\", handleFocusEvent, true);\n windowObject.addEventListener(\"blur\", handleWindowBlur, false);\n\n if (typeof windowObject.PointerEvent !== \"undefined\") {\n documentObject.addEventListener(\"pointerdown\", handlePointerEvent, true);\n documentObject.addEventListener(\"pointermove\", handlePointerEvent, true);\n documentObject.addEventListener(\"pointerup\", handlePointerEvent, true);\n } else {\n documentObject.addEventListener(\"mousedown\", handlePointerEvent, true);\n documentObject.addEventListener(\"mousemove\", handlePointerEvent, true);\n documentObject.addEventListener(\"mouseup\", handlePointerEvent, true);\n }\n\n windowObject.addEventListener(\n \"beforeunload\",\n () => {\n tearDownWindowFocusTracking(element);\n },\n { once: true },\n );\n\n hasSetupGlobalListeners.set(windowObject, { focus: originalFocus });\n}\n\nfunction tearDownWindowFocusTracking(element?: HTMLElement | null, loadListener?: () => void) {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") {\n return;\n }\n\n const windowObject = getOwnerWindow(element);\n const documentObject = getOwnerDocument(element);\n\n if (loadListener) {\n documentObject.removeEventListener(\"DOMContentLoaded\", loadListener);\n }\n\n if (!hasSetupGlobalListeners.has(windowObject)) {\n return;\n }\n\n const entry = hasSetupGlobalListeners.get(windowObject)!;\n // Mirror the setup path: defineProperty (not assignment) restores the original\n // focus even if it had been replaced with a getter-only accessor.\n Reflect.defineProperty(windowObject.HTMLElement.prototype, \"focus\", {\n configurable: true,\n writable: true,\n value: entry.focus,\n });\n\n documentObject.removeEventListener(\"keydown\", handleKeyboardEvent, true);\n documentObject.removeEventListener(\"keyup\", handleKeyboardEvent, true);\n documentObject.removeEventListener(\"click\", handleClickEvent, true);\n\n windowObject.removeEventListener(\"focus\", handleFocusEvent, true);\n windowObject.removeEventListener(\"blur\", handleWindowBlur, false);\n\n if (typeof windowObject.PointerEvent !== \"undefined\") {\n documentObject.removeEventListener(\"pointerdown\", handlePointerEvent, true);\n documentObject.removeEventListener(\"pointermove\", handlePointerEvent, true);\n documentObject.removeEventListener(\"pointerup\", handlePointerEvent, true);\n } else {\n documentObject.removeEventListener(\"mousedown\", handlePointerEvent, true);\n documentObject.removeEventListener(\"mousemove\", handlePointerEvent, true);\n documentObject.removeEventListener(\"mouseup\", handlePointerEvent, true);\n }\n\n hasSetupGlobalListeners.delete(windowObject);\n}\n\n/**\n * Adds a window (i.e. iframe) to the list of windows that are being tracked for focus visible.\n */\nexport function addWindowFocusTracking(element?: HTMLElement | null): () => void {\n const documentObject = getOwnerDocument(element);\n let loadListener: (() => void) | undefined;\n\n if (documentObject.readyState !== \"loading\") {\n setupGlobalFocusEvents(element);\n } else {\n loadListener = () => {\n setupGlobalFocusEvents(element);\n };\n documentObject.addEventListener(\"DOMContentLoaded\", loadListener);\n }\n\n return () => tearDownWindowFocusTracking(element, loadListener);\n}\n\nexport function setupGlobalFocusListeners(): void {\n addWindowFocusTracking();\n}\n\nif (typeof document !== \"undefined\") {\n addWindowFocusTracking();\n}\n\n/**\n * If true, keyboard focus is visible.\n */\nexport function isFocusVisible(): boolean {\n return currentModality !== \"pointer\";\n}\n\n/**\n * Gets the current interaction modality.\n */\nexport function getInteractionModality(): Modality | null {\n return currentModality;\n}\n\n/**\n * Sets the current interaction modality.\n */\nexport function setInteractionModality(modality: Modality): void {\n currentModality = modality;\n currentPointerType = modality === \"pointer\" ? \"mouse\" : modality;\n triggerChangeHandlers(modality, null);\n}\n\n/**\n * Gets the current pointer type.\n */\nexport function getPointerType(): PointerType {\n return currentPointerType;\n}\n\nfunction isKeyboardFocusEvent(isTextInput: boolean, modality: Modality, e: HandlerEvent): boolean {\n if (!e) {\n return true;\n }\n\n const target = \"target\" in e ? (e.target as Element | null) : null;\n const ownerDocument = target ? getOwnerDocument(target) : document;\n const ownerWindow = target ? getOwnerWindow(target) : window;\n\n const IHTMLInputElement = ownerWindow.HTMLInputElement;\n const IHTMLTextAreaElement = ownerWindow.HTMLTextAreaElement;\n const IHTMLElement = ownerWindow.HTMLElement;\n const IKeyboardEvent = ownerWindow.KeyboardEvent;\n\n const nonTextInputTypes = new Set([\n \"checkbox\",\n \"radio\",\n \"range\",\n \"color\",\n \"file\",\n \"image\",\n \"button\",\n \"submit\",\n \"reset\",\n ]);\n\n isTextInput =\n isTextInput ||\n (ownerDocument.activeElement instanceof IHTMLInputElement &&\n !nonTextInputTypes.has(ownerDocument.activeElement.type)) ||\n ownerDocument.activeElement instanceof IHTMLTextAreaElement ||\n (ownerDocument.activeElement instanceof IHTMLElement &&\n ownerDocument.activeElement.isContentEditable);\n\n return !(\n isTextInput &&\n modality === \"keyboard\" &&\n e instanceof IKeyboardEvent &&\n !FOCUS_VISIBLE_INPUT_KEYS[e.key]\n );\n}\n\n/**\n * Listens for trigger change and reports if focus is visible.\n */\nexport function createFocusVisibleListener(\n handler: FocusVisibleHandler,\n opts?: { isTextInput?: boolean },\n): () => void {\n setupGlobalFocusEvents();\n const listener: Handler = (modality: Modality, e: HandlerEvent) => {\n if (!isKeyboardFocusEvent(!!opts?.isTextInput, modality, e)) {\n return;\n }\n handler(isFocusVisible());\n };\n changeHandlers.add(listener);\n return () => {\n changeHandlers.delete(listener);\n };\n}\n\n/**\n * Manages focus visible state for the page.\n */\nexport function createFocusVisible(props: FocusVisibleProps = {}): FocusVisibleResult {\n if (isServer) {\n return { isFocusVisible: () => false };\n }\n\n const { isTextInput, autoFocus } = props;\n const [isVisible, setIsVisible] = createSignal<boolean>(autoFocus || isFocusVisible());\n\n createEffect(() => {\n const cleanup = createFocusVisibleListener(setIsVisible, { isTextInput });\n onCleanup(cleanup);\n });\n\n return { isFocusVisible: isVisible };\n}\n\n/**\n * Tracks the current interaction modality.\n */\nexport function createInteractionModality(): InteractionModalityResult {\n if (isServer) {\n return {\n modality: () => null,\n };\n }\n\n const [modality, setModality] = createSignal<Modality | null>(currentModality);\n\n createEffect(() => {\n setupGlobalFocusEvents();\n const handler: Handler = (newModality: Modality) => {\n setModality(newModality);\n };\n changeHandlers.add(handler);\n onCleanup(() => {\n changeHandlers.delete(handler);\n });\n });\n\n return {\n modality,\n };\n}\n\n/**\n * Adds a listener for modality changes.\n */\nexport function addModalityListener(handler: (modality: Modality) => void): () => void {\n const wrapped: Handler = (modality) => {\n handler(modality);\n };\n changeHandlers.add(wrapped);\n return () => {\n changeHandlers.delete(wrapped);\n };\n}\n\n/**\n * Hook to track whether the user is currently interacting with the keyboard.\n */\nexport function useIsKeyboardFocused(): Accessor<boolean> {\n if (isServer) {\n return () => false;\n }\n\n const { modality } = createInteractionModality();\n return () => modality() === \"keyboard\";\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { i as access, t as isDevEnv } from "./env.js";
|
|
2
|
+
import { createId } from "../ssr/index.js";
|
|
3
|
+
import { t as createLabels } from "./createLabels.js";
|
|
4
|
+
//#region src/label/createLabel.ts
|
|
5
|
+
/**
|
|
6
|
+
* Provides the accessibility implementation for labels and their associated elements.
|
|
7
|
+
* Labels provide context for user inputs.
|
|
8
|
+
*
|
|
9
|
+
* @param props - The props for labels and fields.
|
|
10
|
+
*/
|
|
11
|
+
function createLabel(props) {
|
|
12
|
+
const getProps = () => access(props);
|
|
13
|
+
const id = createId(getProps().id);
|
|
14
|
+
const labelId = createId();
|
|
15
|
+
const getLabelProps = () => {
|
|
16
|
+
const { label, labelElementType = "label" } = getProps();
|
|
17
|
+
if (!label) return {};
|
|
18
|
+
return {
|
|
19
|
+
id: labelId,
|
|
20
|
+
...labelElementType === "label" ? { for: id } : {}
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
const getFieldProps = () => {
|
|
24
|
+
const { label, "aria-labelledby": ariaLabelledby, "aria-label": ariaLabel } = getProps();
|
|
25
|
+
let labelledBy = ariaLabelledby;
|
|
26
|
+
if (label) labelledBy = ariaLabelledby ? `${labelId} ${ariaLabelledby}` : labelId;
|
|
27
|
+
else if (!ariaLabelledby && !ariaLabel && isDevEnv()) console.warn("If you do not provide a visible label, you must specify an aria-label or aria-labelledby attribute for accessibility");
|
|
28
|
+
return createLabels({
|
|
29
|
+
id,
|
|
30
|
+
"aria-label": ariaLabel,
|
|
31
|
+
"aria-labelledby": labelledBy
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
return {
|
|
35
|
+
get labelProps() {
|
|
36
|
+
return getLabelProps();
|
|
37
|
+
},
|
|
38
|
+
get fieldProps() {
|
|
39
|
+
return getFieldProps();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { createLabel as t };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=createLabel.js.map
|