@proyecto-viviana/solidaria 0.4.2 → 0.6.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-APACHE-2.0 +201 -0
- package/NOTICE +91 -0
- package/dist/_chunk/DragManager.js +71 -25
- package/dist/_chunk/DragManager.js.map +1 -1
- package/dist/_chunk/DragManager.jsx +71 -25
- package/dist/_chunk/DragManager.jsx.map +1 -1
- package/dist/_chunk/FocusScope.js +281 -66
- package/dist/_chunk/FocusScope.js.map +1 -1
- package/dist/_chunk/FocusScope.jsx +274 -55
- package/dist/_chunk/FocusScope.jsx.map +1 -1
- package/dist/_chunk/actiongroup.js +43 -19
- package/dist/_chunk/actiongroup.js.map +1 -1
- package/dist/_chunk/actiongroup.jsx +43 -19
- package/dist/_chunk/actiongroup.jsx.map +1 -1
- package/dist/_chunk/announce.js +19 -6
- package/dist/_chunk/announce.js.map +1 -1
- package/dist/_chunk/announce.jsx +19 -6
- package/dist/_chunk/announce.jsx.map +1 -1
- package/dist/_chunk/ariaHideOutside.js +212 -10
- package/dist/_chunk/ariaHideOutside.js.map +1 -1
- package/dist/_chunk/ariaHideOutside.jsx +212 -10
- package/dist/_chunk/ariaHideOutside.jsx.map +1 -1
- package/dist/_chunk/autocomplete.js +26 -7
- package/dist/_chunk/autocomplete.js.map +1 -1
- package/dist/_chunk/autocomplete.jsx +26 -7
- package/dist/_chunk/autocomplete.jsx.map +1 -1
- package/dist/_chunk/breadcrumbs.js +17 -2
- package/dist/_chunk/breadcrumbs.js.map +1 -1
- package/dist/_chunk/breadcrumbs.jsx +17 -2
- package/dist/_chunk/breadcrumbs.jsx.map +1 -1
- package/dist/_chunk/button.js +53 -20
- package/dist/_chunk/button.js.map +1 -1
- package/dist/_chunk/button.jsx +53 -20
- package/dist/_chunk/button.jsx.map +1 -1
- package/dist/_chunk/calendar.js +341 -56
- package/dist/_chunk/calendar.js.map +1 -1
- package/dist/_chunk/calendar.jsx +341 -56
- package/dist/_chunk/calendar.jsx.map +1 -1
- package/dist/_chunk/checkbox.js +69 -26
- package/dist/_chunk/checkbox.js.map +1 -1
- package/dist/_chunk/checkbox.jsx +69 -26
- package/dist/_chunk/checkbox.jsx.map +1 -1
- package/dist/_chunk/color.js +307 -48
- package/dist/_chunk/color.js.map +1 -1
- package/dist/_chunk/color.jsx +307 -48
- package/dist/_chunk/color.jsx.map +1 -1
- package/dist/_chunk/combobox.js +193 -103
- package/dist/_chunk/combobox.js.map +1 -1
- package/dist/_chunk/combobox.jsx +193 -103
- package/dist/_chunk/combobox.jsx.map +1 -1
- package/dist/_chunk/constants.js +12 -0
- package/dist/_chunk/constants.js.map +1 -1
- package/dist/_chunk/constants.jsx +12 -0
- package/dist/_chunk/constants.jsx.map +1 -1
- package/dist/_chunk/createCollator.js +12 -0
- package/dist/_chunk/createCollator.js.map +1 -1
- package/dist/_chunk/createCollator.jsx +12 -0
- package/dist/_chunk/createCollator.jsx.map +1 -1
- package/dist/_chunk/createCollectionRowInteraction.js +50 -13
- package/dist/_chunk/createCollectionRowInteraction.js.map +1 -1
- package/dist/_chunk/createCollectionRowInteraction.jsx +50 -13
- package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -1
- package/dist/_chunk/createField.js +35 -25
- package/dist/_chunk/createField.js.map +1 -1
- package/dist/_chunk/createField.jsx +35 -25
- package/dist/_chunk/createField.jsx.map +1 -1
- package/dist/_chunk/createFocus.js +18 -5
- package/dist/_chunk/createFocus.js.map +1 -1
- package/dist/_chunk/createFocus.jsx +18 -5
- package/dist/_chunk/createFocus.jsx.map +1 -1
- package/dist/_chunk/createFocusRing.js +16 -7
- package/dist/_chunk/createFocusRing.js.map +1 -1
- package/dist/_chunk/createFocusRing.jsx +16 -7
- package/dist/_chunk/createFocusRing.jsx.map +1 -1
- package/dist/_chunk/createFocusWithin.js +16 -4
- package/dist/_chunk/createFocusWithin.js.map +1 -1
- package/dist/_chunk/createFocusWithin.jsx +16 -4
- package/dist/_chunk/createFocusWithin.jsx.map +1 -1
- package/dist/_chunk/createFocusable.js +39 -53
- package/dist/_chunk/createFocusable.js.map +1 -1
- package/dist/_chunk/createFocusable.jsx +39 -53
- package/dist/_chunk/createFocusable.jsx.map +1 -1
- package/dist/_chunk/createFormReset.js +24 -12
- package/dist/_chunk/createFormReset.js.map +1 -1
- package/dist/_chunk/createFormReset.jsx +24 -12
- package/dist/_chunk/createFormReset.jsx.map +1 -1
- package/dist/_chunk/createFormValidation.js +41 -17
- package/dist/_chunk/createFormValidation.js.map +1 -1
- package/dist/_chunk/createFormValidation.jsx +41 -17
- package/dist/_chunk/createFormValidation.jsx.map +1 -1
- package/dist/_chunk/createHover.js +56 -42
- package/dist/_chunk/createHover.js.map +1 -1
- package/dist/_chunk/createHover.jsx +56 -42
- package/dist/_chunk/createHover.jsx.map +1 -1
- package/dist/_chunk/createKeyboard.js +205 -0
- package/dist/_chunk/createKeyboard.js.map +1 -0
- package/dist/_chunk/createKeyboard.jsx +205 -0
- package/dist/_chunk/createKeyboard.jsx.map +1 -0
- package/dist/_chunk/createLabel.js +17 -4
- package/dist/_chunk/createLabel.js.map +1 -1
- package/dist/_chunk/createLabel.jsx +17 -4
- package/dist/_chunk/createLabel.jsx.map +1 -1
- package/dist/_chunk/createLabels.js +14 -2
- package/dist/_chunk/createLabels.js.map +1 -1
- package/dist/_chunk/createLabels.jsx +14 -2
- package/dist/_chunk/createLabels.jsx.map +1 -1
- package/dist/_chunk/createLandmark.js +19 -3
- package/dist/_chunk/createLandmark.js.map +1 -1
- package/dist/_chunk/createLandmark.jsx +19 -3
- package/dist/_chunk/createLandmark.jsx.map +1 -1
- package/dist/_chunk/createLongPress.js +105 -0
- package/dist/_chunk/createLongPress.js.map +1 -0
- package/dist/_chunk/createLongPress.jsx +105 -0
- package/dist/_chunk/createLongPress.jsx.map +1 -0
- package/dist/_chunk/createOverlay.js +220 -111
- package/dist/_chunk/createOverlay.js.map +1 -1
- package/dist/_chunk/createOverlay.jsx +220 -111
- package/dist/_chunk/createOverlay.jsx.map +1 -1
- package/dist/_chunk/createOverlayTrigger.js +58 -0
- package/dist/_chunk/createOverlayTrigger.js.map +1 -0
- package/dist/_chunk/createOverlayTrigger.jsx +58 -0
- package/dist/_chunk/createOverlayTrigger.jsx.map +1 -0
- package/dist/_chunk/createPress.js +38 -28
- package/dist/_chunk/createPress.js.map +1 -1
- package/dist/_chunk/createPress.jsx +38 -28
- package/dist/_chunk/createPress.jsx.map +1 -1
- package/dist/_chunk/createProgressBar.js +17 -4
- package/dist/_chunk/createProgressBar.js.map +1 -1
- package/dist/_chunk/createProgressBar.jsx +17 -4
- package/dist/_chunk/createProgressBar.jsx.map +1 -1
- package/dist/_chunk/createSelectableItem.js +58 -20
- package/dist/_chunk/createSelectableItem.js.map +1 -1
- package/dist/_chunk/createSelectableItem.jsx +58 -20
- package/dist/_chunk/createSelectableItem.jsx.map +1 -1
- package/dist/_chunk/createSelectableList.js +776 -0
- package/dist/_chunk/createSelectableList.js.map +1 -0
- package/dist/_chunk/createSelectableList.jsx +776 -0
- package/dist/_chunk/createSelectableList.jsx.map +1 -0
- package/dist/_chunk/createStringFormatter.js +350 -5
- package/dist/_chunk/createStringFormatter.js.map +1 -1
- package/dist/_chunk/createStringFormatter.jsx +350 -5
- package/dist/_chunk/createStringFormatter.jsx.map +1 -1
- package/dist/_chunk/createToggle.js +68 -19
- package/dist/_chunk/createToggle.js.map +1 -1
- package/dist/_chunk/createToggle.jsx +68 -19
- package/dist/_chunk/createToggle.jsx.map +1 -1
- package/dist/_chunk/createTypeSelect.js +15 -3
- package/dist/_chunk/createTypeSelect.js.map +1 -1
- package/dist/_chunk/createTypeSelect.jsx +15 -3
- package/dist/_chunk/createTypeSelect.jsx.map +1 -1
- package/dist/_chunk/{visually-hidden.js → createVisuallyHidden.js} +16 -4
- package/dist/_chunk/createVisuallyHidden.js.map +1 -0
- package/dist/_chunk/{visually-hidden.jsx → createVisuallyHidden.jsx} +16 -4
- package/dist/_chunk/createVisuallyHidden.jsx.map +1 -0
- package/dist/_chunk/datepicker.js +687 -602
- package/dist/_chunk/datepicker.js.map +1 -1
- package/dist/_chunk/datepicker.jsx +687 -602
- package/dist/_chunk/datepicker.jsx.map +1 -1
- package/dist/_chunk/dialog.js +49 -19
- package/dist/_chunk/dialog.js.map +1 -1
- package/dist/_chunk/dialog.jsx +49 -19
- package/dist/_chunk/dialog.jsx.map +1 -1
- package/dist/_chunk/disclosure.js +48 -28
- package/dist/_chunk/disclosure.js.map +1 -1
- package/dist/_chunk/disclosure.jsx +48 -28
- package/dist/_chunk/disclosure.jsx.map +1 -1
- package/dist/_chunk/dnd.js +1340 -1172
- package/dist/_chunk/dnd.js.map +1 -1
- package/dist/_chunk/dnd.jsx +1340 -1172
- package/dist/_chunk/dnd.jsx.map +1 -1
- package/dist/_chunk/dom.js +1200 -0
- package/dist/_chunk/dom.js.map +1 -0
- package/dist/_chunk/dom.jsx +1200 -0
- package/dist/_chunk/dom.jsx.map +1 -0
- package/dist/_chunk/env.js +1 -57
- package/dist/_chunk/env.js.map +1 -1
- package/dist/_chunk/env.jsx +1 -57
- package/dist/_chunk/env.jsx.map +1 -1
- package/dist/_chunk/filterDOMProps.js +32 -7
- package/dist/_chunk/filterDOMProps.js.map +1 -1
- package/dist/_chunk/filterDOMProps.jsx +32 -7
- package/dist/_chunk/filterDOMProps.jsx.map +1 -1
- package/dist/_chunk/focus.js +570 -338
- package/dist/_chunk/focus.js.map +1 -1
- package/dist/_chunk/focus.jsx +570 -338
- package/dist/_chunk/focus.jsx.map +1 -1
- package/dist/_chunk/grid.js +62 -8
- package/dist/_chunk/grid.js.map +1 -1
- package/dist/_chunk/grid.jsx +62 -8
- package/dist/_chunk/grid.jsx.map +1 -1
- package/dist/_chunk/gridlist.js +192 -53
- package/dist/_chunk/gridlist.js.map +1 -1
- package/dist/_chunk/gridlist.jsx +192 -53
- package/dist/_chunk/gridlist.jsx.map +1 -1
- package/dist/_chunk/i18n.js +68 -1
- package/dist/_chunk/i18n.js.map +1 -1
- package/dist/_chunk/i18n.jsx +68 -1
- package/dist/_chunk/i18n.jsx.map +1 -1
- package/dist/_chunk/interactions.js +38 -102
- package/dist/_chunk/interactions.js.map +1 -1
- package/dist/_chunk/interactions.jsx +38 -100
- package/dist/_chunk/interactions.jsx.map +1 -1
- package/dist/_chunk/intl.js +280 -0
- package/dist/_chunk/intl.js.map +1 -0
- package/dist/_chunk/intl.jsx +280 -0
- package/dist/_chunk/intl.jsx.map +1 -0
- package/dist/_chunk/link.js +15 -4
- package/dist/_chunk/link.js.map +1 -1
- package/dist/_chunk/link.jsx +15 -4
- package/dist/_chunk/link.jsx.map +1 -1
- package/dist/_chunk/listbox.js +99 -175
- package/dist/_chunk/listbox.js.map +1 -1
- package/dist/_chunk/listbox.jsx +99 -175
- package/dist/_chunk/listbox.jsx.map +1 -1
- package/dist/_chunk/locale.js +58 -12
- package/dist/_chunk/locale.js.map +1 -1
- package/dist/_chunk/locale.jsx +57 -11
- package/dist/_chunk/locale.jsx.map +1 -1
- package/dist/_chunk/menu.js +298 -57
- package/dist/_chunk/menu.js.map +1 -1
- package/dist/_chunk/menu.jsx +298 -57
- package/dist/_chunk/menu.jsx.map +1 -1
- package/dist/_chunk/mergeProps.js +216 -0
- package/dist/_chunk/mergeProps.js.map +1 -0
- package/dist/_chunk/mergeProps.jsx +216 -0
- package/dist/_chunk/mergeProps.jsx.map +1 -0
- package/dist/_chunk/meter.js +16 -4
- package/dist/_chunk/meter.js.map +1 -1
- package/dist/_chunk/meter.jsx +16 -4
- package/dist/_chunk/meter.jsx.map +1 -1
- package/dist/_chunk/numberfield.js +167 -22
- package/dist/_chunk/numberfield.js.map +1 -1
- package/dist/_chunk/numberfield.jsx +167 -22
- package/dist/_chunk/numberfield.jsx.map +1 -1
- package/dist/_chunk/overlays.js +87 -74
- package/dist/_chunk/overlays.js.map +1 -1
- package/dist/_chunk/overlays.jsx +71 -57
- package/dist/_chunk/overlays.jsx.map +1 -1
- package/dist/_chunk/owner.js +23 -0
- package/dist/_chunk/owner.js.map +1 -0
- package/dist/_chunk/owner.jsx +23 -0
- package/dist/_chunk/owner.jsx.map +1 -0
- package/dist/_chunk/popover.js +180 -42
- package/dist/_chunk/popover.js.map +1 -1
- package/dist/_chunk/popover.jsx +180 -42
- package/dist/_chunk/popover.jsx.map +1 -1
- package/dist/_chunk/radio.js +92 -32
- package/dist/_chunk/radio.js.map +1 -1
- package/dist/_chunk/radio.jsx +92 -32
- package/dist/_chunk/radio.jsx.map +1 -1
- package/dist/_chunk/reactivity.js.map +1 -1
- package/dist/_chunk/reactivity.jsx.map +1 -1
- package/dist/_chunk/refs.js +41 -0
- package/dist/_chunk/refs.js.map +1 -0
- package/dist/_chunk/refs.jsx +41 -0
- package/dist/_chunk/refs.jsx.map +1 -0
- package/dist/_chunk/searchfield.js +69 -3
- package/dist/_chunk/searchfield.js.map +1 -1
- package/dist/_chunk/searchfield.jsx +69 -3
- package/dist/_chunk/searchfield.jsx.map +1 -1
- package/dist/_chunk/select.js +226 -80
- package/dist/_chunk/select.js.map +1 -1
- package/dist/_chunk/select.jsx +162 -70
- package/dist/_chunk/select.jsx.map +1 -1
- package/dist/_chunk/selection.js +20 -638
- package/dist/_chunk/selection.js.map +1 -1
- package/dist/_chunk/selection.jsx +20 -638
- package/dist/_chunk/selection.jsx.map +1 -1
- package/dist/_chunk/separator.js +12 -0
- package/dist/_chunk/separator.js.map +1 -1
- package/dist/_chunk/separator.jsx +12 -0
- package/dist/_chunk/separator.jsx.map +1 -1
- package/dist/_chunk/slider.js +25 -16
- package/dist/_chunk/slider.js.map +1 -1
- package/dist/_chunk/slider.jsx +25 -16
- package/dist/_chunk/slider.jsx.map +1 -1
- package/dist/_chunk/spinbutton.js +52 -42
- package/dist/_chunk/spinbutton.js.map +1 -1
- package/dist/_chunk/spinbutton.jsx +52 -42
- package/dist/_chunk/spinbutton.jsx.map +1 -1
- package/dist/_chunk/steplist.js +14 -1
- package/dist/_chunk/steplist.js.map +1 -1
- package/dist/_chunk/steplist.jsx +14 -1
- package/dist/_chunk/steplist.jsx.map +1 -1
- package/dist/_chunk/switch.js +21 -3
- package/dist/_chunk/switch.js.map +1 -1
- package/dist/_chunk/switch.jsx +21 -3
- package/dist/_chunk/switch.jsx.map +1 -1
- package/dist/_chunk/table.js +666 -88
- package/dist/_chunk/table.js.map +1 -1
- package/dist/_chunk/table.jsx +666 -88
- package/dist/_chunk/table.jsx.map +1 -1
- package/dist/_chunk/tabs.js +115 -17
- package/dist/_chunk/tabs.js.map +1 -1
- package/dist/_chunk/tabs.jsx +115 -17
- package/dist/_chunk/tabs.jsx.map +1 -1
- package/dist/_chunk/tag.js +240 -39
- package/dist/_chunk/tag.js.map +1 -1
- package/dist/_chunk/tag.jsx +240 -39
- package/dist/_chunk/tag.jsx.map +1 -1
- package/dist/_chunk/textfield.js +83 -12
- package/dist/_chunk/textfield.js.map +1 -1
- package/dist/_chunk/textfield.jsx +83 -12
- package/dist/_chunk/textfield.jsx.map +1 -1
- package/dist/_chunk/toast.js +61 -28
- package/dist/_chunk/toast.js.map +1 -1
- package/dist/_chunk/toast.jsx +61 -28
- package/dist/_chunk/toast.jsx.map +1 -1
- package/dist/_chunk/tokenfield.js +567 -0
- package/dist/_chunk/tokenfield.js.map +1 -0
- package/dist/_chunk/tokenfield.jsx +567 -0
- package/dist/_chunk/tokenfield.jsx.map +1 -0
- package/dist/_chunk/toolbar.js +25 -8
- package/dist/_chunk/toolbar.js.map +1 -1
- package/dist/_chunk/toolbar.jsx +25 -8
- package/dist/_chunk/toolbar.jsx.map +1 -1
- package/dist/_chunk/tooltip.js +379 -6
- package/dist/_chunk/tooltip.js.map +1 -1
- package/dist/_chunk/tooltip.jsx +379 -6
- package/dist/_chunk/tooltip.jsx.map +1 -1
- package/dist/_chunk/tree.js +280 -69
- package/dist/_chunk/tree.js.map +1 -1
- package/dist/_chunk/tree.jsx +280 -69
- package/dist/_chunk/tree.jsx.map +1 -1
- package/dist/_chunk/utils.js +192 -150
- package/dist/_chunk/utils.js.map +1 -1
- package/dist/_chunk/utils.jsx +192 -150
- package/dist/_chunk/utils.jsx.map +1 -1
- package/dist/_chunk/virtualFocus.js +54 -0
- package/dist/_chunk/virtualFocus.js.map +1 -0
- package/dist/_chunk/virtualFocus.jsx +54 -0
- package/dist/_chunk/virtualFocus.jsx.map +1 -0
- package/dist/_chunk/virtualizer.js +202 -0
- package/dist/_chunk/virtualizer.js.map +1 -0
- package/dist/_chunk/virtualizer.jsx +202 -0
- package/dist/_chunk/virtualizer.jsx.map +1 -0
- package/dist/actiongroup/createActionGroup.d.ts +2 -1
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
- package/dist/autocomplete/createAutocomplete.d.ts +1 -9
- package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
- package/dist/autocomplete/intl/index.d.ts +13 -0
- package/dist/autocomplete/intl/index.d.ts.map +1 -0
- package/dist/breadcrumbs/createBreadcrumbs.d.ts +3 -1
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/breadcrumbs/intl/index.d.ts +13 -0
- package/dist/breadcrumbs/intl/index.d.ts.map +1 -0
- package/dist/button/createButton.d.ts.map +1 -1
- package/dist/button/createToggleButton.d.ts.map +1 -1
- package/dist/button/createToggleButtonGroup.d.ts +1 -1
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
- package/dist/button/types.d.ts +14 -0
- package/dist/button/types.d.ts.map +1 -1
- package/dist/calendar/createCalendar.d.ts +1 -7
- package/dist/calendar/createCalendar.d.ts.map +1 -1
- package/dist/calendar/createCalendarCell.d.ts +0 -6
- package/dist/calendar/createCalendarCell.d.ts.map +1 -1
- package/dist/calendar/createCalendarGrid.d.ts +1 -7
- package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
- package/dist/calendar/createCalendarMonthPicker.d.ts +0 -8
- package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -1
- package/dist/calendar/createCalendarYearPicker.d.ts +0 -8
- package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendar.d.ts +13 -7
- package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts +2 -6
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/calendar/intl/index.d.ts.map +1 -1
- package/dist/calendar/utils.d.ts.map +1 -1
- package/dist/checkbox/createCheckbox.d.ts +2 -1
- package/dist/checkbox/createCheckbox.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroup.d.ts +1 -9
- package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroupItem.d.ts +0 -8
- package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
- package/dist/collections/index.d.ts +1 -1
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +18 -2
- package/dist/collections/index.js.map +1 -1
- package/dist/collections/index.jsx +18 -2
- package/dist/collections/index.jsx.map +1 -1
- package/dist/color/createColorArea.d.ts +2 -7
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorField.d.ts +2 -7
- package/dist/color/createColorField.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts +1 -6
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorSwatch.d.ts +1 -6
- package/dist/color/createColorSwatch.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts +1 -6
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/color/intl/index.d.ts.map +1 -1
- package/dist/color/types.d.ts +47 -1
- package/dist/color/types.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +17 -8
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/combobox/intl/generated-locales.d.ts +3 -0
- package/dist/combobox/intl/generated-locales.d.ts.map +1 -1
- package/dist/combobox/intl/index.d.ts +3 -2
- package/dist/combobox/intl/index.d.ts.map +1 -1
- package/dist/datepicker/createDateField.d.ts +0 -10
- package/dist/datepicker/createDateField.d.ts.map +1 -1
- package/dist/datepicker/createDatePicker.d.ts +0 -16
- package/dist/datepicker/createDatePicker.d.ts.map +1 -1
- package/dist/datepicker/createDatePickerGroup.d.ts +1 -1
- package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -1
- package/dist/datepicker/createDateRangePicker.d.ts +0 -21
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
- package/dist/datepicker/createDateSegment.d.ts +0 -9
- package/dist/datepicker/createDateSegment.d.ts.map +1 -1
- package/dist/datepicker/createDisplayNames.d.ts +1 -9
- package/dist/datepicker/createDisplayNames.d.ts.map +1 -1
- package/dist/datepicker/createTimeField.d.ts.map +1 -1
- package/dist/datepicker/intl.d.ts.map +1 -1
- package/dist/dialog/createDialog.d.ts +2 -4
- package/dist/dialog/createDialog.d.ts.map +1 -1
- package/dist/dialog/types.d.ts +14 -0
- package/dist/dialog/types.d.ts.map +1 -1
- package/dist/disclosure/createDisclosure.d.ts +1 -8
- package/dist/disclosure/createDisclosure.d.ts.map +1 -1
- package/dist/disclosure/createDisclosureGroup.d.ts +3 -4
- package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
- package/dist/dnd/DragManager.d.ts +1 -16
- package/dist/dnd/DragManager.d.ts.map +1 -1
- package/dist/dnd/DropTargetKeyboardNavigation.d.ts +2 -2
- package/dist/dnd/createDrag.d.ts +1 -7
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts +1 -7
- package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
- package/dist/dnd/createDraggableItem.d.ts +2 -7
- package/dist/dnd/createDraggableItem.d.ts.map +1 -1
- package/dist/dnd/createDrop.d.ts +1 -7
- package/dist/dnd/createDrop.d.ts.map +1 -1
- package/dist/dnd/createDropIndicator.d.ts +27 -0
- package/dist/dnd/createDropIndicator.d.ts.map +1 -0
- package/dist/dnd/createDroppableCollection.d.ts +6 -8
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts +12 -10
- package/dist/dnd/createDroppableItem.d.ts.map +1 -1
- package/dist/dnd/index.d.ts +3 -1
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/dnd/index.js +2 -2
- package/dist/dnd/index.jsx +2 -2
- package/dist/dnd/intl/index.d.ts +6 -4
- package/dist/dnd/intl/index.d.ts.map +1 -1
- package/dist/dnd/types.d.ts +20 -1
- package/dist/dnd/types.d.ts.map +1 -1
- package/dist/dnd/utils.d.ts +4 -0
- package/dist/dnd/utils.d.ts.map +1 -1
- package/dist/focus/FocusScope.d.ts +9 -5
- package/dist/focus/FocusScope.d.ts.map +1 -1
- package/dist/focus/createAutoFocus.d.ts +3 -0
- package/dist/focus/createAutoFocus.d.ts.map +1 -1
- package/dist/focus/createFocusRestore.d.ts +3 -0
- package/dist/focus/createFocusRestore.d.ts.map +1 -1
- package/dist/focus/createHasTabbableChild.d.ts +13 -0
- package/dist/focus/createHasTabbableChild.d.ts.map +1 -0
- package/dist/focus/createVirtualFocus.d.ts +4 -1
- package/dist/focus/createVirtualFocus.d.ts.map +1 -1
- package/dist/focus/index.js +3 -2
- package/dist/focus/index.jsx +3 -2
- package/dist/focus/virtualFocus.d.ts +1 -1
- package/dist/form/createFormReset.d.ts +1 -7
- package/dist/form/createFormReset.d.ts.map +1 -1
- package/dist/form/createFormValidation.d.ts +1 -9
- package/dist/form/createFormValidation.d.ts.map +1 -1
- package/dist/grid/GridKeyboardDelegate.d.ts.map +1 -1
- package/dist/grid/createGrid.d.ts +1 -5
- package/dist/grid/createGrid.d.ts.map +1 -1
- package/dist/grid/createGridCell.d.ts +1 -5
- package/dist/grid/createGridCell.d.ts.map +1 -1
- package/dist/grid/createGridRow.d.ts +1 -5
- package/dist/grid/createGridRow.d.ts.map +1 -1
- package/dist/grid/index.d.ts +2 -2
- package/dist/grid/intl/index.d.ts +18 -0
- package/dist/grid/intl/index.d.ts.map +1 -0
- package/dist/grid/types.d.ts +25 -2
- package/dist/grid/types.d.ts.map +1 -1
- package/dist/gridlist/createGridList.d.ts +3 -5
- package/dist/gridlist/createGridList.d.ts.map +1 -1
- package/dist/gridlist/createGridListItem.d.ts +1 -5
- package/dist/gridlist/createGridListItem.d.ts.map +1 -1
- package/dist/gridlist/createGridListSection.d.ts +0 -4
- package/dist/gridlist/createGridListSection.d.ts.map +1 -1
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts +1 -5
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
- package/dist/gridlist/intl/index.d.ts +14 -0
- package/dist/gridlist/intl/index.d.ts.map +1 -0
- package/dist/gridlist/types.d.ts +56 -2
- package/dist/gridlist/types.d.ts.map +1 -1
- package/dist/i18n/compileIcu.d.ts +24 -0
- package/dist/i18n/compileIcu.d.ts.map +1 -0
- package/dist/i18n/createCollator.d.ts +0 -7
- package/dist/i18n/createCollator.d.ts.map +1 -1
- package/dist/i18n/createDateFormatter.d.ts +0 -7
- package/dist/i18n/createDateFormatter.d.ts.map +1 -1
- package/dist/i18n/createFilter.d.ts +0 -7
- package/dist/i18n/createFilter.d.ts.map +1 -1
- package/dist/i18n/createListFormatter.d.ts +9 -0
- package/dist/i18n/createListFormatter.d.ts.map +1 -0
- package/dist/i18n/createNumberFormatter.d.ts +0 -7
- package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
- package/dist/i18n/createStringFormatter.d.ts +14 -4
- package/dist/i18n/createStringFormatter.d.ts.map +1 -1
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.jsx +2 -2
- package/dist/i18n/locale.d.ts +2 -8
- package/dist/i18n/locale.d.ts.map +1 -1
- package/dist/i18n/utils.d.ts +0 -7
- package/dist/i18n/utils.d.ts.map +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -21
- package/dist/index.jsx +27 -21
- package/dist/interactions/FocusableProvider.d.ts +3 -2
- package/dist/interactions/FocusableProvider.d.ts.map +1 -1
- package/dist/interactions/PressEvent.d.ts +2 -1
- package/dist/interactions/PressEvent.d.ts.map +1 -1
- package/dist/interactions/createContextMenu.d.ts +24 -0
- package/dist/interactions/createContextMenu.d.ts.map +1 -0
- package/dist/interactions/createFocus.d.ts +3 -2
- package/dist/interactions/createFocus.d.ts.map +1 -1
- package/dist/interactions/createFocusRing.d.ts +2 -1
- package/dist/interactions/createFocusRing.d.ts.map +1 -1
- package/dist/interactions/createFocusWithin.d.ts +1 -6
- package/dist/interactions/createFocusWithin.d.ts.map +1 -1
- package/dist/interactions/createFocusable.d.ts +2 -6
- package/dist/interactions/createFocusable.d.ts.map +1 -1
- package/dist/interactions/createHover.d.ts +3 -10
- package/dist/interactions/createHover.d.ts.map +1 -1
- package/dist/interactions/createInteractionModality.d.ts +12 -10
- package/dist/interactions/createInteractionModality.d.ts.map +1 -1
- package/dist/interactions/createKeyboard.d.ts +12 -3
- package/dist/interactions/createKeyboard.d.ts.map +1 -1
- package/dist/interactions/createKeyboardShortcutHandler.d.ts +24 -0
- package/dist/interactions/createKeyboardShortcutHandler.d.ts.map +1 -0
- package/dist/interactions/createLongPress.d.ts +4 -7
- package/dist/interactions/createLongPress.d.ts.map +1 -1
- package/dist/interactions/createMove.d.ts +1 -6
- package/dist/interactions/createMove.d.ts.map +1 -1
- package/dist/interactions/createPress.d.ts +2 -7
- package/dist/interactions/createPress.d.ts.map +1 -1
- package/dist/interactions/index.d.ts +1 -1
- package/dist/interactions/index.d.ts.map +1 -1
- package/dist/interactions/index.js +5 -3
- package/dist/interactions/index.jsx +5 -3
- package/dist/label/createField.d.ts +7 -1
- package/dist/label/createField.d.ts.map +1 -1
- package/dist/label/createLabel.d.ts +1 -1
- package/dist/label/createLabel.d.ts.map +1 -1
- package/dist/label/createLabels.d.ts +0 -7
- package/dist/label/createLabels.d.ts.map +1 -1
- package/dist/landmark/createLandmark.d.ts +4 -1
- package/dist/landmark/createLandmark.d.ts.map +1 -1
- package/dist/link/createLink.d.ts +1 -1
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/listbox/createListBox.d.ts +8 -7
- package/dist/listbox/createListBox.d.ts.map +1 -1
- package/dist/listbox/createOption.d.ts +7 -1
- package/dist/listbox/createOption.d.ts.map +1 -1
- package/dist/live-announcer/announce.d.ts +2 -13
- package/dist/live-announcer/announce.d.ts.map +1 -1
- package/dist/menu/createMenu.d.ts +3 -7
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/menu/createMenuItem.d.ts +2 -1
- package/dist/menu/createMenuItem.d.ts.map +1 -1
- package/dist/menu/createMenuTrigger.d.ts +24 -20
- package/dist/menu/createMenuTrigger.d.ts.map +1 -1
- package/dist/menu/index.d.ts +1 -1
- package/dist/menu/index.d.ts.map +1 -1
- package/dist/menu/intl/index.d.ts +4 -0
- package/dist/menu/intl/index.d.ts.map +1 -0
- package/dist/meter/createMeter.d.ts +2 -1
- package/dist/meter/createMeter.d.ts.map +1 -1
- package/dist/numberfield/createNumberField.d.ts +29 -6
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/overlays/ariaHideOutside.d.ts +0 -4
- package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
- package/dist/overlays/createInteractOutside.d.ts +2 -5
- package/dist/overlays/createInteractOutside.d.ts.map +1 -1
- package/dist/overlays/createModal.d.ts +3 -6
- package/dist/overlays/createModal.d.ts.map +1 -1
- package/dist/overlays/createOverlay.d.ts +1 -5
- package/dist/overlays/createOverlay.d.ts.map +1 -1
- package/dist/overlays/createOverlayTrigger.d.ts +2 -6
- package/dist/overlays/createOverlayTrigger.d.ts.map +1 -1
- package/dist/overlays/createPreventScroll.d.ts +0 -4
- package/dist/overlays/createPreventScroll.d.ts.map +1 -1
- package/dist/overlays/index.d.ts +1 -0
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/overlays/index.js +3 -2
- package/dist/overlays/index.jsx +3 -2
- package/dist/overlays/intl/index.d.ts +13 -0
- package/dist/overlays/intl/index.d.ts.map +1 -0
- package/dist/popover/calculatePosition.d.ts +1 -1
- package/dist/popover/calculatePosition.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts +1 -7
- package/dist/popover/createOverlayPosition.d.ts.map +1 -1
- package/dist/popover/createPopover.d.ts +6 -7
- package/dist/popover/createPopover.d.ts.map +1 -1
- package/dist/progress/createProgressBar.d.ts +2 -10
- package/dist/progress/createProgressBar.d.ts.map +1 -1
- package/dist/radio/createRadio.d.ts +8 -1
- package/dist/radio/createRadio.d.ts.map +1 -1
- package/dist/radio/createRadioGroup.d.ts +1 -9
- package/dist/radio/createRadioGroup.d.ts.map +1 -1
- package/dist/searchfield/createSearchField.d.ts +1 -1
- package/dist/searchfield/createSearchField.d.ts.map +1 -1
- package/dist/searchfield/intl/index.d.ts +13 -0
- package/dist/searchfield/intl/index.d.ts.map +1 -0
- package/dist/select/createHiddenSelect.d.ts +3 -10
- package/dist/select/createHiddenSelect.d.ts.map +1 -1
- package/dist/select/createSelect.d.ts +10 -6
- package/dist/select/createSelect.d.ts.map +1 -1
- package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -1
- package/dist/selection/ListKeyboardDelegate.d.ts +2 -1
- package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -1
- package/dist/selection/constants.d.ts.map +1 -1
- package/dist/selection/createCollectionRowInteraction.d.ts +12 -1
- package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -1
- package/dist/selection/createScrollIntoViewOnFocus.d.ts +0 -11
- package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -1
- package/dist/selection/createSelectableCollection.d.ts +1 -23
- package/dist/selection/createSelectableCollection.d.ts.map +1 -1
- package/dist/selection/createSelectableItem.d.ts +2 -29
- package/dist/selection/createSelectableItem.d.ts.map +1 -1
- package/dist/selection/createSelectableList.d.ts +4 -17
- package/dist/selection/createSelectableList.d.ts.map +1 -1
- package/dist/selection/createTypeSelect.d.ts +2 -8
- package/dist/selection/createTypeSelect.d.ts.map +1 -1
- package/dist/selection/index.js +3 -2
- package/dist/selection/index.jsx +3 -2
- package/dist/selection/selectItem.d.ts.map +1 -1
- package/dist/selection/utils.d.ts +1 -1
- package/dist/selection/utils.d.ts.map +1 -1
- package/dist/separator/createSeparator.d.ts +3 -1
- package/dist/separator/createSeparator.d.ts.map +1 -1
- package/dist/slider/createSlider.d.ts +1 -6
- package/dist/slider/createSlider.d.ts.map +1 -1
- package/dist/spinbutton/createSpinButton.d.ts +0 -9
- package/dist/spinbutton/createSpinButton.d.ts.map +1 -1
- package/dist/spinbutton/index.d.ts +2 -2
- package/dist/spinbutton/index.d.ts.map +1 -1
- package/dist/spinbutton/intl.d.ts.map +1 -1
- package/dist/ssr/index.d.ts +3 -9
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +47 -26
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/index.jsx +47 -26
- package/dist/ssr/index.jsx.map +1 -1
- package/dist/steplist/createStepList.d.ts +1 -1
- package/dist/steplist/createStepList.d.ts.map +1 -1
- package/dist/switch/createSwitch.d.ts +2 -1
- package/dist/switch/createSwitch.d.ts.map +1 -1
- package/dist/table/createTable.d.ts +1 -5
- package/dist/table/createTable.d.ts.map +1 -1
- package/dist/table/createTableCell.d.ts +1 -5
- package/dist/table/createTableCell.d.ts.map +1 -1
- package/dist/table/createTableColumnHeader.d.ts +1 -5
- package/dist/table/createTableColumnHeader.d.ts.map +1 -1
- package/dist/table/createTableColumnResize.d.ts +2 -8
- package/dist/table/createTableColumnResize.d.ts.map +1 -1
- package/dist/table/createTableHeaderRow.d.ts +1 -5
- package/dist/table/createTableHeaderRow.d.ts.map +1 -1
- package/dist/table/createTableRow.d.ts +1 -5
- package/dist/table/createTableRow.d.ts.map +1 -1
- package/dist/table/createTableRowGroup.d.ts +1 -5
- package/dist/table/createTableRowGroup.d.ts.map +1 -1
- package/dist/table/createTableSelectAllCheckbox.d.ts +1 -5
- package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
- package/dist/table/createTableSelectionCheckbox.d.ts +1 -5
- package/dist/table/createTableSelectionCheckbox.d.ts.map +1 -1
- package/dist/table/index.d.ts +2 -2
- package/dist/table/intl/index.d.ts +23 -0
- package/dist/table/intl/index.d.ts.map +1 -0
- package/dist/table/types.d.ts +44 -2
- package/dist/table/types.d.ts.map +1 -1
- package/dist/table/utils.d.ts.map +1 -1
- package/dist/tabs/createTabs.d.ts +5 -9
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tag/createTag.d.ts +4 -8
- package/dist/tag/createTag.d.ts.map +1 -1
- package/dist/tag/createTagGroup.d.ts +0 -9
- package/dist/tag/createTagGroup.d.ts.map +1 -1
- package/dist/tag/intl/index.d.ts +14 -0
- package/dist/tag/intl/index.d.ts.map +1 -0
- package/dist/textfield/createTextField.d.ts +6 -8
- package/dist/textfield/createTextField.d.ts.map +1 -1
- package/dist/toast/createToast.d.ts +1 -8
- package/dist/toast/createToast.d.ts.map +1 -1
- package/dist/toast/createToastRegion.d.ts +7 -18
- package/dist/toast/createToastRegion.d.ts.map +1 -1
- package/dist/toast/intl/index.d.ts +14 -0
- package/dist/toast/intl/index.d.ts.map +1 -0
- package/dist/toggle/createToggle.d.ts +8 -1
- package/dist/toggle/createToggle.d.ts.map +1 -1
- package/dist/tokenfield/createToken.d.ts +15 -0
- package/dist/tokenfield/createToken.d.ts.map +1 -0
- package/dist/tokenfield/createTokenField.d.ts +52 -0
- package/dist/tokenfield/createTokenField.d.ts.map +1 -0
- package/dist/tokenfield/index.d.ts +3 -0
- package/dist/tokenfield/index.d.ts.map +1 -0
- package/dist/tokenfield/index.js +2 -0
- package/dist/tokenfield/index.jsx +2 -0
- package/dist/toolbar/createToolbar.d.ts +1 -1
- package/dist/toolbar/createToolbar.d.ts.map +1 -1
- package/dist/tooltip/createPreviewTrigger.d.ts +23 -0
- package/dist/tooltip/createPreviewTrigger.d.ts.map +1 -0
- package/dist/tooltip/createSafeArea.d.ts +20 -0
- package/dist/tooltip/createSafeArea.d.ts.map +1 -0
- package/dist/tooltip/createTooltip.d.ts +1 -1
- package/dist/tooltip/createTooltip.d.ts.map +1 -1
- package/dist/tooltip/createTooltipTrigger.d.ts +1 -9
- package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
- package/dist/tooltip/index.d.ts +2 -0
- package/dist/tooltip/index.d.ts.map +1 -1
- package/dist/tooltip/index.js +2 -2
- package/dist/tooltip/index.jsx +2 -2
- package/dist/tooltip/intl/index.d.ts +4 -0
- package/dist/tooltip/intl/index.d.ts.map +1 -0
- package/dist/tree/createTree.d.ts +1 -5
- package/dist/tree/createTree.d.ts.map +1 -1
- package/dist/tree/createTreeItem.d.ts +1 -5
- package/dist/tree/createTreeItem.d.ts.map +1 -1
- package/dist/tree/createTreeSelectionCheckbox.d.ts +1 -5
- package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
- package/dist/tree/intl/index.d.ts +14 -0
- package/dist/tree/intl/index.d.ts.map +1 -0
- package/dist/tree/types.d.ts +35 -2
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/ShadowTreeWalker.d.ts +30 -0
- package/dist/utils/ShadowTreeWalker.d.ts.map +1 -0
- package/dist/utils/animation.d.ts +1 -29
- package/dist/utils/animation.d.ts.map +1 -1
- package/dist/utils/capture.d.ts +14 -0
- package/dist/utils/capture.d.ts.map +1 -0
- package/dist/utils/createDescription.d.ts +1 -25
- package/dist/utils/createDescription.d.ts.map +1 -1
- package/dist/utils/dom.d.ts +45 -11
- package/dist/utils/dom.d.ts.map +1 -1
- package/dist/utils/domAttrs.d.ts +16 -0
- package/dist/utils/domAttrs.d.ts.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/events.d.ts +0 -4
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/filterDOMProps.d.ts +0 -6
- package/dist/utils/filterDOMProps.d.ts.map +1 -1
- package/dist/utils/focus.d.ts +19 -6
- package/dist/utils/focus.d.ts.map +1 -1
- package/dist/utils/geometry.d.ts +1 -1
- package/dist/utils/geometry.d.ts.map +1 -1
- package/dist/utils/getMetaValue.d.ts +13 -0
- package/dist/utils/getMetaValue.d.ts.map +1 -0
- package/dist/utils/getNonce.d.ts +9 -0
- package/dist/utils/getNonce.d.ts.map +1 -0
- package/dist/utils/globalListeners.d.ts +0 -6
- package/dist/utils/globalListeners.d.ts.map +1 -1
- package/dist/utils/index.d.ts +6 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +7 -4
- package/dist/utils/index.jsx +7 -4
- package/dist/utils/keyboard.d.ts +0 -4
- package/dist/utils/keyboard.d.ts.map +1 -1
- package/dist/utils/mergeProps.d.ts +5 -2
- package/dist/utils/mergeProps.d.ts.map +1 -1
- package/dist/utils/owner.d.ts +14 -0
- package/dist/utils/owner.d.ts.map +1 -0
- package/dist/utils/platform.d.ts +0 -4
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/reactivity.d.ts +2 -0
- package/dist/utils/reactivity.d.ts.map +1 -1
- package/dist/utils/refs.d.ts +20 -0
- package/dist/utils/refs.d.ts.map +1 -0
- package/dist/utils/runAfterTransition.d.ts +2 -0
- package/dist/utils/runAfterTransition.d.ts.map +1 -0
- package/dist/utils/scrollIntoView.d.ts +0 -4
- package/dist/utils/scrollIntoView.d.ts.map +1 -1
- package/dist/utils/splitProps.d.ts +17 -0
- package/dist/utils/splitProps.d.ts.map +1 -0
- package/dist/utils/textSelection.d.ts +0 -8
- package/dist/utils/textSelection.d.ts.map +1 -1
- package/dist/virtualizer/ScrollView.d.ts +38 -0
- package/dist/virtualizer/ScrollView.d.ts.map +1 -0
- package/dist/virtualizer/index.d.ts +3 -0
- package/dist/virtualizer/index.d.ts.map +1 -0
- package/dist/virtualizer/index.js +2 -0
- package/dist/virtualizer/index.jsx +2 -0
- package/dist/virtualizer/utils.d.ts +10 -0
- package/dist/virtualizer/utils.d.ts.map +1 -0
- package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -9
- package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
- package/dist/visually-hidden/index.js +1 -1
- package/dist/visually-hidden/index.jsx +1 -1
- package/package.json +30 -11
- package/src/actiongroup/createActionGroup.ts +49 -27
- package/src/autocomplete/createAutocomplete.ts +32 -5
- package/src/autocomplete/intl/ar-AE.json +3 -0
- package/src/autocomplete/intl/bg-BG.json +3 -0
- package/src/autocomplete/intl/cs-CZ.json +3 -0
- package/src/autocomplete/intl/da-DK.json +3 -0
- package/src/autocomplete/intl/de-DE.json +3 -0
- package/src/autocomplete/intl/el-GR.json +3 -0
- package/src/autocomplete/intl/en-US.json +3 -0
- package/src/autocomplete/intl/es-ES.json +3 -0
- package/src/autocomplete/intl/et-EE.json +3 -0
- package/src/autocomplete/intl/fi-FI.json +3 -0
- package/src/autocomplete/intl/fr-FR.json +3 -0
- package/src/autocomplete/intl/he-IL.json +3 -0
- package/src/autocomplete/intl/hr-HR.json +3 -0
- package/src/autocomplete/intl/hu-HU.json +3 -0
- package/src/autocomplete/intl/index.ts +122 -0
- package/src/autocomplete/intl/it-IT.json +3 -0
- package/src/autocomplete/intl/ja-JP.json +3 -0
- package/src/autocomplete/intl/ko-KR.json +3 -0
- package/src/autocomplete/intl/lt-LT.json +3 -0
- package/src/autocomplete/intl/lv-LV.json +3 -0
- package/src/autocomplete/intl/nb-NO.json +3 -0
- package/src/autocomplete/intl/nl-NL.json +3 -0
- package/src/autocomplete/intl/pl-PL.json +3 -0
- package/src/autocomplete/intl/pt-BR.json +3 -0
- package/src/autocomplete/intl/pt-PT.json +3 -0
- package/src/autocomplete/intl/ro-RO.json +3 -0
- package/src/autocomplete/intl/ru-RU.json +3 -0
- package/src/autocomplete/intl/sk-SK.json +3 -0
- package/src/autocomplete/intl/sl-SI.json +3 -0
- package/src/autocomplete/intl/sr-SP.json +3 -0
- package/src/autocomplete/intl/sv-SE.json +3 -0
- package/src/autocomplete/intl/tr-TR.json +3 -0
- package/src/autocomplete/intl/uk-UA.json +3 -0
- package/src/autocomplete/intl/zh-CN.json +3 -0
- package/src/autocomplete/intl/zh-TW.json +3 -0
- package/src/breadcrumbs/createBreadcrumbs.ts +18 -1
- package/src/breadcrumbs/intl/ar-AE.json +3 -0
- package/src/breadcrumbs/intl/bg-BG.json +3 -0
- package/src/breadcrumbs/intl/cs-CZ.json +3 -0
- package/src/breadcrumbs/intl/da-DK.json +3 -0
- package/src/breadcrumbs/intl/de-DE.json +3 -0
- package/src/breadcrumbs/intl/el-GR.json +3 -0
- package/src/breadcrumbs/intl/en-US.json +3 -0
- package/src/breadcrumbs/intl/es-ES.json +3 -0
- package/src/breadcrumbs/intl/et-EE.json +3 -0
- package/src/breadcrumbs/intl/fi-FI.json +3 -0
- package/src/breadcrumbs/intl/fr-FR.json +3 -0
- package/src/breadcrumbs/intl/he-IL.json +3 -0
- package/src/breadcrumbs/intl/hr-HR.json +3 -0
- package/src/breadcrumbs/intl/hu-HU.json +3 -0
- package/src/breadcrumbs/intl/index.ts +122 -0
- package/src/breadcrumbs/intl/it-IT.json +3 -0
- package/src/breadcrumbs/intl/ja-JP.json +3 -0
- package/src/breadcrumbs/intl/ko-KR.json +3 -0
- package/src/breadcrumbs/intl/lt-LT.json +3 -0
- package/src/breadcrumbs/intl/lv-LV.json +3 -0
- package/src/breadcrumbs/intl/nb-NO.json +3 -0
- package/src/breadcrumbs/intl/nl-NL.json +3 -0
- package/src/breadcrumbs/intl/pl-PL.json +3 -0
- package/src/breadcrumbs/intl/pt-BR.json +3 -0
- package/src/breadcrumbs/intl/pt-PT.json +3 -0
- package/src/breadcrumbs/intl/ro-RO.json +3 -0
- package/src/breadcrumbs/intl/ru-RU.json +3 -0
- package/src/breadcrumbs/intl/sk-SK.json +3 -0
- package/src/breadcrumbs/intl/sl-SI.json +3 -0
- package/src/breadcrumbs/intl/sr-SP.json +3 -0
- package/src/breadcrumbs/intl/sv-SE.json +3 -0
- package/src/breadcrumbs/intl/tr-TR.json +3 -0
- package/src/breadcrumbs/intl/uk-UA.json +3 -0
- package/src/breadcrumbs/intl/zh-CN.json +3 -0
- package/src/breadcrumbs/intl/zh-TW.json +3 -0
- package/src/button/createButton.ts +15 -1
- package/src/button/createToggleButton.ts +18 -5
- package/src/button/createToggleButtonGroup.ts +23 -8
- package/src/button/types.ts +16 -0
- package/src/calendar/createCalendar.ts +22 -3
- package/src/calendar/createCalendarCell.ts +104 -15
- package/src/calendar/createCalendarGrid.ts +37 -13
- package/src/calendar/createCalendarMonthPicker.ts +14 -0
- package/src/calendar/createCalendarYearPicker.ts +14 -0
- package/src/calendar/createRangeCalendar.ts +124 -1
- package/src/calendar/createRangeCalendarCell.ts +179 -40
- package/src/calendar/intl/index.ts +37 -0
- package/src/calendar/utils.ts +14 -0
- package/src/checkbox/createCheckbox.ts +32 -17
- package/src/checkbox/createCheckboxGroup.ts +31 -13
- package/src/checkbox/createCheckboxGroupItem.ts +15 -1
- package/src/collections/index.ts +21 -3
- package/src/color/createColorArea.ts +226 -29
- package/src/color/createColorField.ts +98 -22
- package/src/color/createColorSlider.ts +24 -3
- package/src/color/createColorSwatch.ts +18 -1
- package/src/color/createColorWheel.ts +27 -5
- package/src/color/intl/index.ts +35 -0
- package/src/color/types.ts +47 -1
- package/src/combobox/createComboBox.ts +303 -152
- package/src/combobox/intl/generated-locales.ts +38 -1
- package/src/combobox/intl/index.ts +38 -2
- package/src/datepicker/createDateField.ts +38 -22
- package/src/datepicker/createDatePicker.ts +14 -0
- package/src/datepicker/createDatePickerGroup.ts +24 -12
- package/src/datepicker/createDateRangePicker.ts +14 -0
- package/src/datepicker/createDateSegment.ts +110 -46
- package/src/datepicker/createDisplayNames.ts +16 -1
- package/src/datepicker/createTimeField.ts +15 -5
- package/src/datepicker/intl.ts +623 -544
- package/src/dialog/createDialog.ts +57 -30
- package/src/dialog/types.ts +14 -0
- package/src/disclosure/createDisclosure.ts +28 -6
- package/src/disclosure/createDisclosureGroup.ts +3 -4
- package/src/dnd/DragManager.ts +60 -9
- package/src/dnd/DropTargetKeyboardNavigation.ts +8 -6
- package/src/dnd/createDrag.ts +18 -1
- package/src/dnd/createDraggableCollection.ts +96 -32
- package/src/dnd/createDraggableItem.ts +73 -31
- package/src/dnd/createDrop.ts +18 -1
- package/src/dnd/createDropIndicator.ts +92 -0
- package/src/dnd/createDroppableCollection.ts +113 -48
- package/src/dnd/createDroppableItem.ts +161 -13
- package/src/dnd/index.ts +3 -0
- package/src/dnd/intl/index.ts +77 -66
- package/src/dnd/types.ts +20 -1
- package/src/dnd/utils.ts +19 -0
- package/src/focus/FocusScope.tsx +542 -157
- package/src/focus/createAutoFocus.ts +94 -68
- package/src/focus/createFocusRestore.ts +16 -12
- package/src/focus/createHasTabbableChild.ts +78 -0
- package/src/focus/createVirtualFocus.ts +21 -5
- package/src/focus/virtualFocus.ts +1 -1
- package/src/form/createFormReset.ts +40 -17
- package/src/form/createFormValidation.ts +128 -86
- package/src/grid/GridKeyboardDelegate.ts +14 -0
- package/src/grid/createGrid.ts +17 -2
- package/src/grid/createGridCell.ts +17 -2
- package/src/grid/createGridRow.ts +17 -2
- package/src/grid/index.ts +2 -2
- package/src/grid/intl/ar-AE.json +8 -0
- package/src/grid/intl/bg-BG.json +8 -0
- package/src/grid/intl/cs-CZ.json +8 -0
- package/src/grid/intl/da-DK.json +8 -0
- package/src/grid/intl/de-DE.json +8 -0
- package/src/grid/intl/el-GR.json +8 -0
- package/src/grid/intl/en-US.json +8 -0
- package/src/grid/intl/es-ES.json +8 -0
- package/src/grid/intl/et-EE.json +8 -0
- package/src/grid/intl/fi-FI.json +8 -0
- package/src/grid/intl/fr-FR.json +8 -0
- package/src/grid/intl/he-IL.json +8 -0
- package/src/grid/intl/hr-HR.json +8 -0
- package/src/grid/intl/hu-HU.json +8 -0
- package/src/grid/intl/index.ts +127 -0
- package/src/grid/intl/it-IT.json +8 -0
- package/src/grid/intl/ja-JP.json +8 -0
- package/src/grid/intl/ko-KR.json +8 -0
- package/src/grid/intl/lt-LT.json +8 -0
- package/src/grid/intl/lv-LV.json +8 -0
- package/src/grid/intl/nb-NO.json +8 -0
- package/src/grid/intl/nl-NL.json +8 -0
- package/src/grid/intl/pl-PL.json +8 -0
- package/src/grid/intl/pt-BR.json +8 -0
- package/src/grid/intl/pt-PT.json +8 -0
- package/src/grid/intl/ro-RO.json +8 -0
- package/src/grid/intl/ru-RU.json +8 -0
- package/src/grid/intl/sk-SK.json +8 -0
- package/src/grid/intl/sl-SI.json +8 -0
- package/src/grid/intl/sr-SP.json +8 -0
- package/src/grid/intl/sv-SE.json +8 -0
- package/src/grid/intl/tr-TR.json +8 -0
- package/src/grid/intl/uk-UA.json +8 -0
- package/src/grid/intl/zh-CN.json +8 -0
- package/src/grid/intl/zh-TW.json +8 -0
- package/src/grid/types.ts +25 -2
- package/src/gridlist/createGridList.ts +172 -42
- package/src/gridlist/createGridListItem.ts +51 -13
- package/src/gridlist/createGridListSection.ts +14 -0
- package/src/gridlist/createGridListSelectionCheckbox.ts +31 -4
- package/src/gridlist/intl/ar-AE.json +4 -0
- package/src/gridlist/intl/bg-BG.json +4 -0
- package/src/gridlist/intl/cs-CZ.json +4 -0
- package/src/gridlist/intl/da-DK.json +4 -0
- package/src/gridlist/intl/de-DE.json +4 -0
- package/src/gridlist/intl/el-GR.json +4 -0
- package/src/gridlist/intl/en-US.json +4 -0
- package/src/gridlist/intl/es-ES.json +4 -0
- package/src/gridlist/intl/et-EE.json +4 -0
- package/src/gridlist/intl/fi-FI.json +4 -0
- package/src/gridlist/intl/fr-FR.json +4 -0
- package/src/gridlist/intl/he-IL.json +4 -0
- package/src/gridlist/intl/hr-HR.json +4 -0
- package/src/gridlist/intl/hu-HU.json +4 -0
- package/src/gridlist/intl/index.ts +123 -0
- package/src/gridlist/intl/it-IT.json +4 -0
- package/src/gridlist/intl/ja-JP.json +4 -0
- package/src/gridlist/intl/ko-KR.json +4 -0
- package/src/gridlist/intl/lt-LT.json +4 -0
- package/src/gridlist/intl/lv-LV.json +4 -0
- package/src/gridlist/intl/nb-NO.json +4 -0
- package/src/gridlist/intl/nl-NL.json +4 -0
- package/src/gridlist/intl/pl-PL.json +4 -0
- package/src/gridlist/intl/pt-BR.json +4 -0
- package/src/gridlist/intl/pt-PT.json +4 -0
- package/src/gridlist/intl/ro-RO.json +4 -0
- package/src/gridlist/intl/ru-RU.json +4 -0
- package/src/gridlist/intl/sk-SK.json +4 -0
- package/src/gridlist/intl/sl-SI.json +4 -0
- package/src/gridlist/intl/sr-SP.json +4 -0
- package/src/gridlist/intl/sv-SE.json +4 -0
- package/src/gridlist/intl/tr-TR.json +4 -0
- package/src/gridlist/intl/uk-UA.json +4 -0
- package/src/gridlist/intl/zh-CN.json +4 -0
- package/src/gridlist/intl/zh-TW.json +4 -0
- package/src/gridlist/types.ts +54 -2
- package/src/i18n/compileIcu.ts +440 -0
- package/src/i18n/createCollator.ts +14 -0
- package/src/i18n/createDateFormatter.ts +14 -0
- package/src/i18n/createFilter.ts +14 -0
- package/src/i18n/createListFormatter.ts +38 -0
- package/src/i18n/createNumberFormatter.ts +14 -0
- package/src/i18n/createStringFormatter.ts +64 -8
- package/src/i18n/index.ts +3 -0
- package/src/i18n/locale.tsx +60 -19
- package/src/i18n/utils.ts +14 -0
- package/src/index.ts +49 -1
- package/src/interactions/FocusableProvider.tsx +28 -11
- package/src/interactions/PressEvent.ts +16 -1
- package/src/interactions/createContextMenu.ts +108 -0
- package/src/interactions/createFocus.ts +26 -6
- package/src/interactions/createFocusRing.ts +28 -13
- package/src/interactions/createFocusWithin.ts +23 -3
- package/src/interactions/createFocusable.ts +45 -28
- package/src/interactions/createHover.ts +102 -81
- package/src/interactions/createInteractionModality.ts +135 -45
- package/src/interactions/createKeyboard.ts +85 -9
- package/src/interactions/createKeyboardShortcutHandler.ts +157 -0
- package/src/interactions/createLongPress.ts +31 -9
- package/src/interactions/createMove.ts +24 -3
- package/src/interactions/createPress.ts +85 -41
- package/src/interactions/index.ts +1 -0
- package/src/label/createField.ts +58 -63
- package/src/label/createLabel.ts +21 -4
- package/src/label/createLabels.ts +25 -1
- package/src/landmark/createLandmark.ts +27 -4
- package/src/link/createLink.ts +20 -12
- package/src/listbox/createListBox.ts +86 -310
- package/src/listbox/createOption.ts +50 -14
- package/src/live-announcer/announce.ts +21 -6
- package/src/menu/createMenu.ts +92 -5
- package/src/menu/createMenuItem.ts +40 -23
- package/src/menu/createMenuTrigger.ts +179 -51
- package/src/menu/index.ts +2 -0
- package/src/menu/intl/index.ts +130 -0
- package/src/meter/createMeter.ts +20 -5
- package/src/numberfield/createNumberField.ts +254 -14
- package/src/overlays/ariaHideOutside.ts +76 -11
- package/src/overlays/createInteractOutside.ts +74 -47
- package/src/overlays/createModal.tsx +42 -27
- package/src/overlays/createOverlay.ts +107 -66
- package/src/overlays/createOverlayTrigger.ts +21 -6
- package/src/overlays/createPreventScroll.ts +92 -62
- package/src/overlays/index.ts +2 -0
- package/src/overlays/intl/ar-AE.json +3 -0
- package/src/overlays/intl/bg-BG.json +3 -0
- package/src/overlays/intl/cs-CZ.json +3 -0
- package/src/overlays/intl/da-DK.json +3 -0
- package/src/overlays/intl/de-DE.json +3 -0
- package/src/overlays/intl/el-GR.json +3 -0
- package/src/overlays/intl/en-US.json +3 -0
- package/src/overlays/intl/es-ES.json +3 -0
- package/src/overlays/intl/et-EE.json +3 -0
- package/src/overlays/intl/fi-FI.json +3 -0
- package/src/overlays/intl/fr-FR.json +3 -0
- package/src/overlays/intl/he-IL.json +3 -0
- package/src/overlays/intl/hr-HR.json +3 -0
- package/src/overlays/intl/hu-HU.json +3 -0
- package/src/overlays/intl/index.ts +122 -0
- package/src/overlays/intl/it-IT.json +3 -0
- package/src/overlays/intl/ja-JP.json +3 -0
- package/src/overlays/intl/ko-KR.json +3 -0
- package/src/overlays/intl/lt-LT.json +3 -0
- package/src/overlays/intl/lv-LV.json +3 -0
- package/src/overlays/intl/nb-NO.json +3 -0
- package/src/overlays/intl/nl-NL.json +3 -0
- package/src/overlays/intl/pl-PL.json +3 -0
- package/src/overlays/intl/pt-BR.json +3 -0
- package/src/overlays/intl/pt-PT.json +3 -0
- package/src/overlays/intl/ro-RO.json +3 -0
- package/src/overlays/intl/ru-RU.json +3 -0
- package/src/overlays/intl/sk-SK.json +3 -0
- package/src/overlays/intl/sl-SI.json +3 -0
- package/src/overlays/intl/sr-SP.json +3 -0
- package/src/overlays/intl/sv-SE.json +3 -0
- package/src/overlays/intl/tr-TR.json +3 -0
- package/src/overlays/intl/uk-UA.json +3 -0
- package/src/overlays/intl/zh-CN.json +3 -0
- package/src/overlays/intl/zh-TW.json +3 -0
- package/src/popover/calculatePosition.ts +21 -3
- package/src/popover/createOverlayPosition.ts +149 -41
- package/src/popover/createPopover.ts +88 -23
- package/src/progress/createProgressBar.ts +19 -4
- package/src/radio/createRadio.ts +80 -25
- package/src/radio/createRadioGroup.ts +47 -13
- package/src/searchfield/createSearchField.ts +31 -2
- package/src/searchfield/intl/ar-AE.json +3 -0
- package/src/searchfield/intl/bg-BG.json +3 -0
- package/src/searchfield/intl/cs-CZ.json +3 -0
- package/src/searchfield/intl/da-DK.json +3 -0
- package/src/searchfield/intl/de-DE.json +3 -0
- package/src/searchfield/intl/el-GR.json +3 -0
- package/src/searchfield/intl/en-US.json +3 -0
- package/src/searchfield/intl/es-ES.json +3 -0
- package/src/searchfield/intl/et-EE.json +3 -0
- package/src/searchfield/intl/fi-FI.json +3 -0
- package/src/searchfield/intl/fr-FR.json +3 -0
- package/src/searchfield/intl/he-IL.json +3 -0
- package/src/searchfield/intl/hr-HR.json +3 -0
- package/src/searchfield/intl/hu-HU.json +3 -0
- package/src/searchfield/intl/index.ts +122 -0
- package/src/searchfield/intl/it-IT.json +3 -0
- package/src/searchfield/intl/ja-JP.json +3 -0
- package/src/searchfield/intl/ko-KR.json +3 -0
- package/src/searchfield/intl/lt-LT.json +3 -0
- package/src/searchfield/intl/lv-LV.json +3 -0
- package/src/searchfield/intl/nb-NO.json +3 -0
- package/src/searchfield/intl/nl-NL.json +3 -0
- package/src/searchfield/intl/pl-PL.json +3 -0
- package/src/searchfield/intl/pt-BR.json +3 -0
- package/src/searchfield/intl/pt-PT.json +3 -0
- package/src/searchfield/intl/ro-RO.json +3 -0
- package/src/searchfield/intl/ru-RU.json +3 -0
- package/src/searchfield/intl/sk-SK.json +3 -0
- package/src/searchfield/intl/sl-SI.json +3 -0
- package/src/searchfield/intl/sr-SP.json +3 -0
- package/src/searchfield/intl/sv-SE.json +3 -0
- package/src/searchfield/intl/tr-TR.json +3 -0
- package/src/searchfield/intl/uk-UA.json +3 -0
- package/src/searchfield/intl/zh-CN.json +3 -0
- package/src/searchfield/intl/zh-TW.json +3 -0
- package/src/select/createHiddenSelect.tsx +166 -69
- package/src/select/createSelect.ts +80 -34
- package/src/selection/DOMLayoutDelegate.ts +14 -0
- package/src/selection/ListKeyboardDelegate.ts +16 -1
- package/src/selection/constants.ts +14 -0
- package/src/selection/createCollectionRowInteraction.ts +75 -6
- package/src/selection/createScrollIntoViewOnFocus.ts +23 -8
- package/src/selection/createSelectableCollection.ts +352 -226
- package/src/selection/createSelectableItem.ts +51 -12
- package/src/selection/createSelectableList.ts +21 -1
- package/src/selection/createTypeSelect.ts +21 -5
- package/src/selection/selectItem.ts +14 -0
- package/src/selection/utils.ts +15 -1
- package/src/separator/createSeparator.ts +17 -1
- package/src/slider/createSlider.ts +24 -18
- package/src/spinbutton/createSpinButton.ts +16 -2
- package/src/spinbutton/index.ts +2 -10
- package/src/spinbutton/intl.ts +70 -34
- package/src/ssr/index.tsx +79 -48
- package/src/steplist/createStepList.ts +17 -2
- package/src/switch/createSwitch.ts +25 -4
- package/src/table/createTable.ts +104 -52
- package/src/table/createTableCell.ts +17 -2
- package/src/table/createTableColumnHeader.ts +21 -3
- package/src/table/createTableColumnResize.ts +19 -3
- package/src/table/createTableHeaderRow.ts +17 -2
- package/src/table/createTableRow.ts +29 -22
- package/src/table/createTableRowGroup.ts +18 -3
- package/src/table/createTableSelectAllCheckbox.ts +30 -14
- package/src/table/createTableSelectionCheckbox.ts +21 -3
- package/src/table/index.ts +2 -2
- package/src/table/intl/ar-AE.json +13 -0
- package/src/table/intl/bg-BG.json +13 -0
- package/src/table/intl/cs-CZ.json +13 -0
- package/src/table/intl/da-DK.json +13 -0
- package/src/table/intl/de-DE.json +13 -0
- package/src/table/intl/el-GR.json +13 -0
- package/src/table/intl/en-US.json +13 -0
- package/src/table/intl/es-ES.json +13 -0
- package/src/table/intl/et-EE.json +13 -0
- package/src/table/intl/fi-FI.json +13 -0
- package/src/table/intl/fr-FR.json +13 -0
- package/src/table/intl/he-IL.json +13 -0
- package/src/table/intl/hr-HR.json +13 -0
- package/src/table/intl/hu-HU.json +13 -0
- package/src/table/intl/index.ts +132 -0
- package/src/table/intl/it-IT.json +13 -0
- package/src/table/intl/ja-JP.json +13 -0
- package/src/table/intl/ko-KR.json +13 -0
- package/src/table/intl/lt-LT.json +13 -0
- package/src/table/intl/lv-LV.json +13 -0
- package/src/table/intl/nb-NO.json +13 -0
- package/src/table/intl/nl-NL.json +13 -0
- package/src/table/intl/pl-PL.json +13 -0
- package/src/table/intl/pt-BR.json +13 -0
- package/src/table/intl/pt-PT.json +13 -0
- package/src/table/intl/ro-RO.json +13 -0
- package/src/table/intl/ru-RU.json +13 -0
- package/src/table/intl/sk-SK.json +13 -0
- package/src/table/intl/sl-SI.json +13 -0
- package/src/table/intl/sr-SP.json +13 -0
- package/src/table/intl/sv-SE.json +13 -0
- package/src/table/intl/tr-TR.json +13 -0
- package/src/table/intl/uk-UA.json +13 -0
- package/src/table/intl/zh-CN.json +13 -0
- package/src/table/intl/zh-TW.json +13 -0
- package/src/table/types.ts +44 -2
- package/src/table/utils.ts +15 -6
- package/src/tabs/createTabs.ts +104 -37
- package/src/tag/createTag.ts +118 -37
- package/src/tag/createTagGroup.ts +20 -12
- package/src/tag/intl/ar-AE.json +4 -0
- package/src/tag/intl/bg-BG.json +4 -0
- package/src/tag/intl/cs-CZ.json +4 -0
- package/src/tag/intl/da-DK.json +4 -0
- package/src/tag/intl/de-DE.json +4 -0
- package/src/tag/intl/el-GR.json +4 -0
- package/src/tag/intl/en-US.json +4 -0
- package/src/tag/intl/es-ES.json +4 -0
- package/src/tag/intl/et-EE.json +4 -0
- package/src/tag/intl/fi-FI.json +4 -0
- package/src/tag/intl/fr-FR.json +4 -0
- package/src/tag/intl/he-IL.json +4 -0
- package/src/tag/intl/hr-HR.json +4 -0
- package/src/tag/intl/hu-HU.json +4 -0
- package/src/tag/intl/index.ts +123 -0
- package/src/tag/intl/it-IT.json +4 -0
- package/src/tag/intl/ja-JP.json +4 -0
- package/src/tag/intl/ko-KR.json +4 -0
- package/src/tag/intl/lt-LT.json +4 -0
- package/src/tag/intl/lv-LV.json +4 -0
- package/src/tag/intl/nb-NO.json +4 -0
- package/src/tag/intl/nl-NL.json +4 -0
- package/src/tag/intl/pl-PL.json +4 -0
- package/src/tag/intl/pt-BR.json +4 -0
- package/src/tag/intl/pt-PT.json +4 -0
- package/src/tag/intl/ro-RO.json +4 -0
- package/src/tag/intl/ru-RU.json +4 -0
- package/src/tag/intl/sk-SK.json +4 -0
- package/src/tag/intl/sl-SI.json +4 -0
- package/src/tag/intl/sr-SP.json +4 -0
- package/src/tag/intl/sv-SE.json +4 -0
- package/src/tag/intl/tr-TR.json +4 -0
- package/src/tag/intl/uk-UA.json +4 -0
- package/src/tag/intl/zh-CN.json +4 -0
- package/src/tag/intl/zh-TW.json +4 -0
- package/src/textfield/createTextField.ts +104 -14
- package/src/toast/createToast.ts +39 -6
- package/src/toast/createToastRegion.ts +28 -15
- package/src/toast/intl/ar-AE.json +4 -0
- package/src/toast/intl/bg-BG.json +4 -0
- package/src/toast/intl/cs-CZ.json +4 -0
- package/src/toast/intl/da-DK.json +4 -0
- package/src/toast/intl/de-DE.json +4 -0
- package/src/toast/intl/el-GR.json +4 -0
- package/src/toast/intl/en-US.json +4 -0
- package/src/toast/intl/es-ES.json +4 -0
- package/src/toast/intl/et-EE.json +4 -0
- package/src/toast/intl/fi-FI.json +4 -0
- package/src/toast/intl/fr-FR.json +4 -0
- package/src/toast/intl/he-IL.json +4 -0
- package/src/toast/intl/hr-HR.json +4 -0
- package/src/toast/intl/hu-HU.json +4 -0
- package/src/toast/intl/index.ts +123 -0
- package/src/toast/intl/it-IT.json +4 -0
- package/src/toast/intl/ja-JP.json +4 -0
- package/src/toast/intl/ko-KR.json +4 -0
- package/src/toast/intl/lt-LT.json +4 -0
- package/src/toast/intl/lv-LV.json +4 -0
- package/src/toast/intl/nb-NO.json +4 -0
- package/src/toast/intl/nl-NL.json +4 -0
- package/src/toast/intl/pl-PL.json +4 -0
- package/src/toast/intl/pt-BR.json +4 -0
- package/src/toast/intl/pt-PT.json +4 -0
- package/src/toast/intl/ro-RO.json +4 -0
- package/src/toast/intl/ru-RU.json +4 -0
- package/src/toast/intl/sk-SK.json +4 -0
- package/src/toast/intl/sl-SI.json +4 -0
- package/src/toast/intl/sr-SP.json +4 -0
- package/src/toast/intl/sv-SE.json +4 -0
- package/src/toast/intl/tr-TR.json +4 -0
- package/src/toast/intl/uk-UA.json +4 -0
- package/src/toast/intl/zh-CN.json +4 -0
- package/src/toast/intl/zh-TW.json +4 -0
- package/src/toggle/createToggle.ts +96 -15
- package/src/tokenfield/createToken.ts +82 -0
- package/src/tokenfield/createTokenField.ts +859 -0
- package/src/tokenfield/index.ts +10 -0
- package/src/toolbar/createToolbar.ts +26 -5
- package/src/tooltip/createPreviewTrigger.ts +301 -0
- package/src/tooltip/createSafeArea.ts +165 -0
- package/src/tooltip/createTooltip.ts +15 -1
- package/src/tooltip/createTooltipTrigger.ts +24 -3
- package/src/tooltip/index.ts +7 -0
- package/src/tooltip/intl/index.ts +76 -0
- package/src/tree/createTree.ts +66 -50
- package/src/tree/createTreeItem.ts +85 -21
- package/src/tree/createTreeSelectionCheckbox.ts +29 -28
- package/src/tree/intl/ar-AE.json +4 -0
- package/src/tree/intl/bg-BG.json +4 -0
- package/src/tree/intl/cs-CZ.json +4 -0
- package/src/tree/intl/da-DK.json +4 -0
- package/src/tree/intl/de-DE.json +4 -0
- package/src/tree/intl/el-GR.json +4 -0
- package/src/tree/intl/en-US.json +4 -0
- package/src/tree/intl/es-ES.json +4 -0
- package/src/tree/intl/et-EE.json +4 -0
- package/src/tree/intl/fi-FI.json +4 -0
- package/src/tree/intl/fr-FR.json +4 -0
- package/src/tree/intl/he-IL.json +4 -0
- package/src/tree/intl/hr-HR.json +4 -0
- package/src/tree/intl/hu-HU.json +4 -0
- package/src/tree/intl/index.ts +123 -0
- package/src/tree/intl/it-IT.json +4 -0
- package/src/tree/intl/ja-JP.json +4 -0
- package/src/tree/intl/ko-KR.json +4 -0
- package/src/tree/intl/lt-LT.json +4 -0
- package/src/tree/intl/lv-LV.json +4 -0
- package/src/tree/intl/nb-NO.json +4 -0
- package/src/tree/intl/nl-NL.json +4 -0
- package/src/tree/intl/pl-PL.json +4 -0
- package/src/tree/intl/pt-BR.json +4 -0
- package/src/tree/intl/pt-PT.json +4 -0
- package/src/tree/intl/ro-RO.json +4 -0
- package/src/tree/intl/ru-RU.json +4 -0
- package/src/tree/intl/sk-SK.json +4 -0
- package/src/tree/intl/sl-SI.json +4 -0
- package/src/tree/intl/sr-SP.json +4 -0
- package/src/tree/intl/sv-SE.json +4 -0
- package/src/tree/intl/tr-TR.json +4 -0
- package/src/tree/intl/uk-UA.json +4 -0
- package/src/tree/intl/zh-CN.json +4 -0
- package/src/tree/intl/zh-TW.json +4 -0
- package/src/tree/types.ts +35 -2
- package/src/utils/ShadowTreeWalker.ts +249 -0
- package/src/utils/animation.ts +106 -85
- package/src/utils/capture.ts +51 -0
- package/src/utils/createDescription.ts +31 -8
- package/src/utils/dom.ts +314 -33
- package/src/utils/domAttrs.ts +84 -0
- package/src/utils/env.ts +2 -0
- package/src/utils/events.ts +39 -3
- package/src/utils/filterDOMProps.ts +34 -2
- package/src/utils/focus.ts +186 -32
- package/src/utils/geometry.ts +15 -1
- package/src/utils/getMetaValue.ts +57 -0
- package/src/utils/getNonce.ts +40 -0
- package/src/utils/globalListeners.ts +16 -3
- package/src/utils/index.ts +14 -0
- package/src/utils/keyboard.ts +15 -1
- package/src/utils/mergeProps.ts +149 -16
- package/src/utils/owner.ts +26 -0
- package/src/utils/platform.ts +15 -1
- package/src/utils/reactivity.ts +2 -0
- package/src/utils/refs.ts +53 -0
- package/src/utils/runAfterTransition.ts +117 -0
- package/src/utils/scrollIntoView.ts +14 -0
- package/src/utils/splitProps.ts +70 -0
- package/src/utils/textSelection.ts +15 -1
- package/src/virtualizer/ScrollView.ts +210 -0
- package/src/virtualizer/index.ts +2 -0
- package/src/virtualizer/utils.ts +100 -0
- package/src/visually-hidden/createVisuallyHidden.ts +20 -4
- package/dist/_chunk/createInteractionModality.js +0 -268
- package/dist/_chunk/createInteractionModality.js.map +0 -1
- package/dist/_chunk/createInteractionModality.jsx +0 -268
- package/dist/_chunk/createInteractionModality.jsx.map +0 -1
- package/dist/_chunk/focus2.js +0 -631
- package/dist/_chunk/focus2.js.map +0 -1
- package/dist/_chunk/focus2.jsx +0 -631
- package/dist/_chunk/focus2.jsx.map +0 -1
- package/dist/_chunk/visually-hidden.js.map +0 -1
- package/dist/_chunk/visually-hidden.jsx.map +0 -1
- package/dist/checkbox/createCheckboxGroupState.d.ts +0 -71
- package/dist/checkbox/createCheckboxGroupState.d.ts.map +0 -1
- package/dist/radio/createRadioGroupState.d.ts +0 -77
- package/dist/radio/createRadioGroupState.d.ts.map +0 -1
- package/dist/toggle/createToggleState.d.ts +0 -34
- package/dist/toggle/createToggleState.d.ts.map +0 -1
- package/src/checkbox/createCheckboxGroupState.ts +0 -174
- package/src/radio/createRadioGroupState.ts +0 -177
- package/src/toggle/createToggleState.ts +0 -86
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLandmark.js","names":[],"sources":["../../src/landmark/createLandmark.ts"],"sourcesContent":["/**\n * createLandmark - SolidJS implementation of React Aria's useLandmark\n *\n * Provides landmark navigation in an application. Call this with a role and label\n * to register a landmark navigable with the F6 key.\n *\n * ARIA landmarks help screen reader users navigate between major sections of a page.\n * The F6 key (or Shift+F6) cycles through all registered landmarks.\n */\n\nimport type { JSX, Accessor } from \"solid-js\";\nimport { createEffect, onCleanup } from \"solid-js\";\nimport { access, type MaybeAccessor } from \"../utils\";\nimport { filterDOMProps } from \"../utils\";\n\n/** ARIA landmark roles */\nexport type AriaLandmarkRole =\n | \"main\"\n | \"region\"\n | \"search\"\n | \"navigation\"\n | \"form\"\n | \"banner\"\n | \"contentinfo\"\n | \"complementary\";\n\nexport interface AriaLandmarkProps {\n /** The ARIA landmark role. */\n role: AriaLandmarkRole;\n /**\n * A human-readable label for the landmark.\n * Required when multiple landmarks with the same role exist on a page.\n */\n \"aria-label\"?: string;\n /** Identifies the element(s) that labels the landmark. */\n \"aria-labelledby\"?: string;\n /** The element's unique identifier. */\n id?: string;\n /**\n * A custom focus handler called when this landmark receives focus via F6 navigation.\n * Use this to focus a specific element within the landmark instead of the container.\n */\n focus?: () => void;\n}\n\nexport interface LandmarkAria<T extends HTMLElement = HTMLElement> {\n /** Props to spread on the landmark element. */\n landmarkProps: JSX.HTMLAttributes<T>;\n}\n\nexport interface LandmarkController {\n /** Focus the next landmark in DOM order. */\n focusNext: () => void;\n /** Focus the previous landmark in DOM order. */\n focusPrevious: () => void;\n /** Focus the main landmark. */\n focusMain: () => void;\n /** Navigate to a specific landmark by role. If multiple exist, the first one is focused. */\n navigate: (role: AriaLandmarkRole) => void;\n}\n\ninterface LandmarkEntry {\n ref: HTMLElement;\n role: AriaLandmarkRole;\n label?: string;\n focus?: () => void;\n lastFocused?: HTMLElement;\n}\n\n/**\n * Manages all registered landmarks and handles F6 keyboard navigation.\n */\nclass LandmarkManager {\n private landmarks: LandmarkEntry[] = [];\n private currentIndex = -1;\n private listening = false;\n\n constructor() {\n if (typeof window !== \"undefined\") {\n this.startListening();\n }\n }\n\n private startListening() {\n if (this.listening) return;\n this.listening = true;\n\n window.addEventListener(\"keydown\", this.handleKeyDown.bind(this), true);\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n // F6 to navigate landmarks\n if (event.key === \"F6\") {\n event.preventDefault();\n if (event.shiftKey) {\n this.focusPrevious();\n } else {\n this.focusNext();\n }\n }\n }\n\n register(entry: LandmarkEntry): void {\n // Insert in DOM order using compareDocumentPosition\n const index = this.findInsertionIndex(entry.ref);\n this.landmarks.splice(index, 0, entry);\n\n // Validate: if multiple landmarks have the same role, they should have different labels\n this.validateLabels();\n }\n\n unregister(ref: HTMLElement): void {\n const index = this.landmarks.findIndex((l) => l.ref === ref);\n if (index !== -1) {\n this.landmarks.splice(index, 1);\n // Adjust currentIndex if needed\n if (this.currentIndex >= this.landmarks.length) {\n this.currentIndex = this.landmarks.length - 1;\n }\n }\n }\n\n private findInsertionIndex(ref: HTMLElement): number {\n // Binary search for insertion point based on DOM order\n let low = 0;\n let high = this.landmarks.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n const comparison = this.landmarks[mid].ref.compareDocumentPosition(ref);\n\n // Node.DOCUMENT_POSITION_FOLLOWING = 4\n if (comparison & Node.DOCUMENT_POSITION_FOLLOWING) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n private validateLabels(): void {\n // Group landmarks by role\n const roleGroups = new Map<AriaLandmarkRole, LandmarkEntry[]>();\n for (const landmark of this.landmarks) {\n const group = roleGroups.get(landmark.role) || [];\n group.push(landmark);\n roleGroups.set(landmark.role, group);\n }\n\n // Warn if multiple landmarks with the same role lack unique labels\n for (const [role, group] of roleGroups) {\n if (group.length > 1) {\n const labels = group.map((l) => l.label);\n const uniqueLabels = new Set(labels.filter(Boolean));\n if (uniqueLabels.size < group.length) {\n console.warn(\n `Multiple landmarks with role \"${role}\" exist. Each should have a unique aria-label or aria-labelledby.`,\n );\n }\n }\n }\n }\n\n focusNext(): void {\n if (this.landmarks.length === 0) return;\n\n // Find the currently focused landmark\n const activeElement = document.activeElement;\n this.currentIndex = this.findCurrentLandmarkIndex(activeElement);\n\n // Move to next\n this.currentIndex = (this.currentIndex + 1) % this.landmarks.length;\n this.focusLandmark(this.landmarks[this.currentIndex]);\n }\n\n focusPrevious(): void {\n if (this.landmarks.length === 0) return;\n\n // Find the currently focused landmark\n const activeElement = document.activeElement;\n this.currentIndex = this.findCurrentLandmarkIndex(activeElement);\n\n // Move to previous\n this.currentIndex = (this.currentIndex - 1 + this.landmarks.length) % this.landmarks.length;\n this.focusLandmark(this.landmarks[this.currentIndex]);\n }\n\n focusMain(): void {\n const main = this.landmarks.find((l) => l.role === \"main\");\n if (main) {\n this.focusLandmark(main);\n }\n }\n\n navigate(role: AriaLandmarkRole): void {\n const landmark = this.landmarks.find((l) => l.role === role);\n if (landmark) {\n this.focusLandmark(landmark);\n }\n }\n\n private findCurrentLandmarkIndex(activeElement: Element | null): number {\n if (!activeElement) return -1;\n\n // Check if active element is within any landmark\n for (let i = 0; i < this.landmarks.length; i++) {\n if (this.landmarks[i].ref.contains(activeElement)) {\n // Store the last focused element for this landmark\n if (activeElement instanceof HTMLElement) {\n this.landmarks[i].lastFocused = activeElement;\n }\n return i;\n }\n }\n\n return -1;\n }\n\n private focusLandmark(landmark: LandmarkEntry): void {\n // If a custom focus handler is provided, use it\n if (landmark.focus) {\n landmark.focus();\n return;\n }\n\n // If we previously focused an element in this landmark, try to restore it\n if (landmark.lastFocused && landmark.ref.contains(landmark.lastFocused)) {\n landmark.lastFocused.focus();\n return;\n }\n\n // Try to find the first focusable element\n const focusable = this.findFirstFocusable(landmark.ref);\n if (focusable) {\n focusable.focus();\n return;\n }\n\n // Fallback: make the landmark itself focusable and focus it\n if (!landmark.ref.hasAttribute(\"tabindex\")) {\n landmark.ref.setAttribute(\"tabindex\", \"-1\");\n }\n landmark.ref.focus();\n }\n\n private findFirstFocusable(container: HTMLElement): HTMLElement | null {\n const focusableSelectors = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(\", \");\n\n return container.querySelector<HTMLElement>(focusableSelectors);\n }\n\n getController(): LandmarkController {\n return {\n focusNext: () => this.focusNext(),\n focusPrevious: () => this.focusPrevious(),\n focusMain: () => this.focusMain(),\n navigate: (role) => this.navigate(role),\n };\n }\n}\n\n// Global singleton instance\nlet landmarkManager: LandmarkManager | null = null;\n\nfunction getLandmarkManager(): LandmarkManager {\n if (!landmarkManager) {\n landmarkManager = new LandmarkManager();\n }\n return landmarkManager;\n}\n\n/**\n * Provides landmark navigation in an application.\n * Call this with a role and label to register a landmark navigable with F6.\n *\n * @example\n * ```tsx\n * function Navigation(props) {\n * let ref: HTMLElement;\n * const { landmarkProps } = createLandmark({\n * role: 'navigation',\n * 'aria-label': 'Main navigation'\n * });\n *\n * return (\n * <nav {...landmarkProps} ref={ref}>\n * {props.children}\n * </nav>\n * );\n * }\n * ```\n */\nexport function createLandmark<T extends HTMLElement = HTMLElement>(\n props: MaybeAccessor<AriaLandmarkProps>,\n ref: Accessor<T | undefined>,\n): LandmarkAria<T> {\n // Register with the landmark manager\n createEffect(() => {\n const element = ref();\n if (!element) return;\n\n const p = access(props);\n const entry: LandmarkEntry = {\n ref: element,\n role: p.role,\n label: p[\"aria-label\"],\n focus: p.focus,\n };\n\n const manager = getLandmarkManager();\n manager.register(entry);\n\n onCleanup(() => {\n manager.unregister(element);\n });\n });\n\n const getLandmarkProps = (): JSX.HTMLAttributes<T> => {\n const p = access(props);\n const domProps = filterDOMProps(p as unknown as Record<string, unknown>, { labelable: true });\n\n return {\n ...domProps,\n role: p.role,\n };\n };\n\n return {\n get landmarkProps() {\n return getLandmarkProps();\n },\n };\n}\n\n/**\n * Returns a controller for programmatic landmark navigation.\n *\n * @example\n * ```tsx\n * const controller = getLandmarkController();\n * controller.focusMain(); // Focus the main landmark\n * controller.focusNext(); // Focus the next landmark\n * ```\n */\nexport function getLandmarkController(): LandmarkController {\n return getLandmarkManager().getController();\n}\n"],"mappings":";;;;;;;AAwEA,IAAM,kBAAN,MAAsB;CACpB,YAAqC,CAAC;CACtC,eAAuB;CACvB,YAAoB;CAEpB,cAAc;EACZ,IAAI,OAAO,WAAW,aACpB,KAAK,eAAe;CAExB;CAEA,iBAAyB;EACvB,IAAI,KAAK,WAAW;EACpB,KAAK,YAAY;EAEjB,OAAO,iBAAiB,WAAW,KAAK,cAAc,KAAK,IAAI,GAAG,IAAI;CACxE;CAEA,cAAsB,OAAsB;EAE1C,IAAI,MAAM,QAAQ,MAAM;GACtB,MAAM,eAAe;GACrB,IAAI,MAAM,UACR,KAAK,cAAc;QAEnB,KAAK,UAAU;EAEnB;CACF;CAEA,SAAS,OAA4B;EAEnC,MAAM,QAAQ,KAAK,mBAAmB,MAAM,GAAG;EAC/C,KAAK,UAAU,OAAO,OAAO,GAAG,KAAK;EAGrC,KAAK,eAAe;CACtB;CAEA,WAAW,KAAwB;EACjC,MAAM,QAAQ,KAAK,UAAU,WAAW,MAAM,EAAE,QAAQ,GAAG;EAC3D,IAAI,UAAU,IAAI;GAChB,KAAK,UAAU,OAAO,OAAO,CAAC;GAE9B,IAAI,KAAK,gBAAgB,KAAK,UAAU,QACtC,KAAK,eAAe,KAAK,UAAU,SAAS;EAEhD;CACF;CAEA,mBAA2B,KAA0B;EAEnD,IAAI,MAAM;EACV,IAAI,OAAO,KAAK,UAAU;EAE1B,OAAO,MAAM,MAAM;GACjB,MAAM,MAAM,KAAK,OAAO,MAAM,QAAQ,CAAC;GAIvC,IAHmB,KAAK,UAAU,IAAI,CAAC,IAAI,wBAAwB,GAGtD,IAAI,KAAK,6BACpB,MAAM,MAAM;QAEZ,OAAO;EAEX;EAEA,OAAO;CACT;CAEA,iBAA+B;EAE7B,MAAM,6BAAa,IAAI,IAAuC;EAC9D,KAAK,MAAM,YAAY,KAAK,WAAW;GACrC,MAAM,QAAQ,WAAW,IAAI,SAAS,IAAI,KAAK,CAAC;GAChD,MAAM,KAAK,QAAQ;GACnB,WAAW,IAAI,SAAS,MAAM,KAAK;EACrC;EAGA,KAAK,MAAM,CAAC,MAAM,UAAU,YAC1B,IAAI,MAAM,SAAS,GAAG;GACpB,MAAM,SAAS,MAAM,KAAK,MAAM,EAAE,KAAK;GAEvC,IAAI,IADqB,IAAI,OAAO,OAAO,OAAO,CACnC,CAAC,CAAC,OAAO,MAAM,QAC5B,QAAQ,KACN,iCAAiC,KAAK,kEACxC;EAEJ;CAEJ;CAEA,YAAkB;EAChB,IAAI,KAAK,UAAU,WAAW,GAAG;EAGjC,MAAM,gBAAgB,SAAS;EAC/B,KAAK,eAAe,KAAK,yBAAyB,aAAa;EAG/D,KAAK,gBAAgB,KAAK,eAAe,KAAK,KAAK,UAAU;EAC7D,KAAK,cAAc,KAAK,UAAU,KAAK,aAAa;CACtD;CAEA,gBAAsB;EACpB,IAAI,KAAK,UAAU,WAAW,GAAG;EAGjC,MAAM,gBAAgB,SAAS;EAC/B,KAAK,eAAe,KAAK,yBAAyB,aAAa;EAG/D,KAAK,gBAAgB,KAAK,eAAe,IAAI,KAAK,UAAU,UAAU,KAAK,UAAU;EACrF,KAAK,cAAc,KAAK,UAAU,KAAK,aAAa;CACtD;CAEA,YAAkB;EAChB,MAAM,OAAO,KAAK,UAAU,MAAM,MAAM,EAAE,SAAS,MAAM;EACzD,IAAI,MACF,KAAK,cAAc,IAAI;CAE3B;CAEA,SAAS,MAA8B;EACrC,MAAM,WAAW,KAAK,UAAU,MAAM,MAAM,EAAE,SAAS,IAAI;EAC3D,IAAI,UACF,KAAK,cAAc,QAAQ;CAE/B;CAEA,yBAAiC,eAAuC;EACtE,IAAI,CAAC,eAAe,OAAO;EAG3B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KACzC,IAAI,KAAK,UAAU,EAAE,CAAC,IAAI,SAAS,aAAa,GAAG;GAEjD,IAAI,yBAAyB,aAC3B,KAAK,UAAU,EAAE,CAAC,cAAc;GAElC,OAAO;EACT;EAGF,OAAO;CACT;CAEA,cAAsB,UAA+B;EAEnD,IAAI,SAAS,OAAO;GAClB,SAAS,MAAM;GACf;EACF;EAGA,IAAI,SAAS,eAAe,SAAS,IAAI,SAAS,SAAS,WAAW,GAAG;GACvE,SAAS,YAAY,MAAM;GAC3B;EACF;EAGA,MAAM,YAAY,KAAK,mBAAmB,SAAS,GAAG;EACtD,IAAI,WAAW;GACb,UAAU,MAAM;GAChB;EACF;EAGA,IAAI,CAAC,SAAS,IAAI,aAAa,UAAU,GACvC,SAAS,IAAI,aAAa,YAAY,IAAI;EAE5C,SAAS,IAAI,MAAM;CACrB;CAEA,mBAA2B,WAA4C;EACrE,MAAM,qBAAqB;GACzB;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CAAC,KAAK,IAAI;EAEX,OAAO,UAAU,cAA2B,kBAAkB;CAChE;CAEA,gBAAoC;EAClC,OAAO;GACL,iBAAiB,KAAK,UAAU;GAChC,qBAAqB,KAAK,cAAc;GACxC,iBAAiB,KAAK,UAAU;GAChC,WAAW,SAAS,KAAK,SAAS,IAAI;EACxC;CACF;AACF;AAGA,IAAI,kBAA0C;AAE9C,SAAS,qBAAsC;CAC7C,IAAI,CAAC,iBACH,kBAAkB,IAAI,gBAAgB;CAExC,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;AAuBA,SAAgB,eACd,OACA,KACiB;CAEjB,mBAAmB;EACjB,MAAM,UAAU,IAAI;EACpB,IAAI,CAAC,SAAS;EAEd,MAAM,IAAI,OAAO,KAAK;EACtB,MAAM,QAAuB;GAC3B,KAAK;GACL,MAAM,EAAE;GACR,OAAO,EAAE;GACT,OAAO,EAAE;EACX;EAEA,MAAM,UAAU,mBAAmB;EACnC,QAAQ,SAAS,KAAK;EAEtB,gBAAgB;GACd,QAAQ,WAAW,OAAO;EAC5B,CAAC;CACH,CAAC;CAED,MAAM,yBAAgD;EACpD,MAAM,IAAI,OAAO,KAAK;EAGtB,OAAO;GACL,GAHe,eAAe,GAAyC,EAAE,WAAW,KAAK,CAG/E;GACV,MAAM,EAAE;EACV;CACF;CAEA,OAAO,EACL,IAAI,gBAAgB;EAClB,OAAO,iBAAiB;CAC1B,EACF;AACF;;;;;;;;;;;AAYA,SAAgB,wBAA4C;CAC1D,OAAO,mBAAmB,CAAC,CAAC,cAAc;AAC5C"}
|
|
1
|
+
{"version":3,"file":"createLandmark.js","names":[],"sources":["../../src/landmark/createLandmark.ts"],"sourcesContent":["/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/landmark/useLandmark.ts\n\n/**\n * createLandmark - SolidJS implementation of React Aria's useLandmark\n *\n * Provides landmark navigation in an application. Call this with a role and label\n * to register a landmark navigable with the F6 key.\n *\n * ARIA landmarks help screen reader users navigate between major sections of a page.\n * The F6 key (or Shift+F6) cycles through all registered landmarks.\n *\n * Ported from packages/react-aria/src/landmark/useLandmark.ts.\n */\n\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createTrackedEffect } from \"solid-js\";\nimport { access, type MaybeAccessor } from \"../utils\";\nimport { filterDOMProps } from \"../utils\";\n\n/** ARIA landmark roles */\nexport type AriaLandmarkRole =\n | \"main\"\n | \"region\"\n | \"search\"\n | \"navigation\"\n | \"form\"\n | \"banner\"\n | \"contentinfo\"\n | \"complementary\";\n\nexport interface AriaLandmarkProps {\n /** The ARIA landmark role. */\n role: AriaLandmarkRole;\n /**\n * A human-readable label for the landmark.\n * Required when multiple landmarks with the same role exist on a page.\n */\n \"aria-label\"?: string;\n /** Identifies the element(s) that labels the landmark. */\n \"aria-labelledby\"?: string;\n /** The element's unique identifier. */\n id?: string;\n /**\n * A custom focus handler called when this landmark receives focus via F6 navigation.\n * Use this to focus a specific element within the landmark instead of the container.\n */\n focus?: () => void;\n}\n\nexport interface LandmarkAria<T extends HTMLElement = HTMLElement> {\n /** Props to spread on the landmark element. */\n landmarkProps: JSX.HTMLAttributes<T>;\n}\n\nexport interface LandmarkController {\n /** Focus the next landmark in DOM order. */\n focusNext: () => void;\n /** Focus the previous landmark in DOM order. */\n focusPrevious: () => void;\n /** Focus the main landmark. */\n focusMain: () => void;\n /** Navigate to a specific landmark by role. If multiple exist, the first one is focused. */\n navigate: (role: AriaLandmarkRole) => void;\n}\n\ninterface LandmarkEntry {\n ref: HTMLElement;\n role: AriaLandmarkRole;\n label?: string;\n focus?: () => void;\n lastFocused?: HTMLElement;\n}\n\n/**\n * Manages all registered landmarks and handles F6 keyboard navigation.\n */\nclass LandmarkManager {\n private landmarks: LandmarkEntry[] = [];\n private currentIndex = -1;\n private listening = false;\n\n constructor() {\n if (typeof window !== \"undefined\") {\n this.startListening();\n }\n }\n\n private startListening() {\n if (this.listening) return;\n this.listening = true;\n\n window.addEventListener(\"keydown\", this.handleKeyDown.bind(this), true);\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n // F6 to navigate landmarks\n if (event.key === \"F6\") {\n event.preventDefault();\n if (event.shiftKey) {\n this.focusPrevious();\n } else {\n this.focusNext();\n }\n }\n }\n\n register(entry: LandmarkEntry): void {\n // Insert in DOM order using compareDocumentPosition\n const index = this.findInsertionIndex(entry.ref);\n this.landmarks.splice(index, 0, entry);\n\n // Validate: if multiple landmarks have the same role, they should have different labels\n this.validateLabels();\n }\n\n unregister(ref: HTMLElement): void {\n const index = this.landmarks.findIndex((l) => l.ref === ref);\n if (index !== -1) {\n this.landmarks.splice(index, 1);\n // Adjust currentIndex if needed\n if (this.currentIndex >= this.landmarks.length) {\n this.currentIndex = this.landmarks.length - 1;\n }\n }\n }\n\n private findInsertionIndex(ref: HTMLElement): number {\n // Binary search for insertion point based on DOM order\n let low = 0;\n let high = this.landmarks.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n const comparison = this.landmarks[mid].ref.compareDocumentPosition(ref);\n\n // Node.DOCUMENT_POSITION_FOLLOWING = 4\n if (comparison & Node.DOCUMENT_POSITION_FOLLOWING) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n private validateLabels(): void {\n // Group landmarks by role\n const roleGroups = new Map<AriaLandmarkRole, LandmarkEntry[]>();\n for (const landmark of this.landmarks) {\n const group = roleGroups.get(landmark.role) || [];\n group.push(landmark);\n roleGroups.set(landmark.role, group);\n }\n\n // Warn if multiple landmarks with the same role lack unique labels\n for (const [role, group] of roleGroups) {\n if (group.length > 1) {\n const labels = group.map((l) => l.label);\n const uniqueLabels = new Set(labels.filter(Boolean));\n if (uniqueLabels.size < group.length) {\n console.warn(\n `Multiple landmarks with role \"${role}\" exist. Each should have a unique aria-label or aria-labelledby.`,\n );\n }\n }\n }\n }\n\n focusNext(): void {\n if (this.landmarks.length === 0) return;\n\n // Find the currently focused landmark\n const activeElement = document.activeElement;\n this.currentIndex = this.findCurrentLandmarkIndex(activeElement);\n\n // Move to next\n this.currentIndex = (this.currentIndex + 1) % this.landmarks.length;\n this.focusLandmark(this.landmarks[this.currentIndex]);\n }\n\n focusPrevious(): void {\n if (this.landmarks.length === 0) return;\n\n // Find the currently focused landmark\n const activeElement = document.activeElement;\n this.currentIndex = this.findCurrentLandmarkIndex(activeElement);\n\n // Move to previous\n this.currentIndex = (this.currentIndex - 1 + this.landmarks.length) % this.landmarks.length;\n this.focusLandmark(this.landmarks[this.currentIndex]);\n }\n\n focusMain(): void {\n const main = this.landmarks.find((l) => l.role === \"main\");\n if (main) {\n this.focusLandmark(main);\n }\n }\n\n navigate(role: AriaLandmarkRole): void {\n const landmark = this.landmarks.find((l) => l.role === role);\n if (landmark) {\n this.focusLandmark(landmark);\n }\n }\n\n private findCurrentLandmarkIndex(activeElement: Element | null): number {\n if (!activeElement) return -1;\n\n // Check if active element is within any landmark\n for (let i = 0; i < this.landmarks.length; i++) {\n if (this.landmarks[i].ref.contains(activeElement)) {\n // Store the last focused element for this landmark\n if (activeElement instanceof HTMLElement) {\n this.landmarks[i].lastFocused = activeElement;\n }\n return i;\n }\n }\n\n return -1;\n }\n\n private focusLandmark(landmark: LandmarkEntry): void {\n // If a custom focus handler is provided, use it\n if (landmark.focus) {\n landmark.focus();\n return;\n }\n\n // If we previously focused an element in this landmark, try to restore it\n if (landmark.lastFocused && landmark.ref.contains(landmark.lastFocused)) {\n landmark.lastFocused.focus();\n return;\n }\n\n // Try to find the first focusable element\n const focusable = this.findFirstFocusable(landmark.ref);\n if (focusable) {\n focusable.focus();\n return;\n }\n\n // Fallback: make the landmark itself focusable and focus it\n if (!landmark.ref.hasAttribute(\"tabindex\")) {\n landmark.ref.setAttribute(\"tabindex\", \"-1\");\n }\n landmark.ref.focus();\n }\n\n private findFirstFocusable(container: HTMLElement): HTMLElement | null {\n const focusableSelectors = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(\", \");\n\n return container.querySelector<HTMLElement>(focusableSelectors);\n }\n\n getController(): LandmarkController {\n return {\n focusNext: () => this.focusNext(),\n focusPrevious: () => this.focusPrevious(),\n focusMain: () => this.focusMain(),\n navigate: (role) => this.navigate(role),\n };\n }\n}\n\n// Global singleton instance\nlet landmarkManager: LandmarkManager | null = null;\n\nfunction getLandmarkManager(): LandmarkManager {\n if (!landmarkManager) {\n landmarkManager = new LandmarkManager();\n }\n return landmarkManager;\n}\n\n/**\n * Provides landmark navigation in an application.\n * Call this with a role and label to register a landmark navigable with F6.\n *\n * @example\n * ```tsx\n * function Navigation(props) {\n * let ref: HTMLElement;\n * const { landmarkProps } = createLandmark({\n * role: 'navigation',\n * 'aria-label': 'Main navigation'\n * });\n *\n * return (\n * <nav {...landmarkProps} ref={ref}>\n * {props.children}\n * </nav>\n * );\n * }\n * ```\n */\nexport function createLandmark<T extends HTMLElement = HTMLElement>(\n props: MaybeAccessor<AriaLandmarkProps>,\n ref: Accessor<T | undefined>,\n): LandmarkAria<T> {\n // Register with the landmark manager\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n const element = ref();\n if (!element) return;\n\n const p = access(props);\n const entry: LandmarkEntry = {\n ref: element,\n role: p.role,\n label: p[\"aria-label\"],\n focus: p.focus,\n };\n\n const manager = getLandmarkManager();\n manager.register(entry);\n\n _s2Cleanups.push(() => {\n manager.unregister(element);\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n const getLandmarkProps = (): JSX.HTMLAttributes<T> => {\n const p = access(props);\n const domProps = filterDOMProps(p as unknown as Record<string, unknown>, { labelable: true });\n\n return {\n ...domProps,\n role: p.role,\n };\n };\n\n return {\n get landmarkProps() {\n return getLandmarkProps();\n },\n };\n}\n\n/**\n * Returns a controller for programmatic landmark navigation.\n *\n * @example\n * ```tsx\n * const controller = getLandmarkController();\n * controller.focusMain(); // Focus the main landmark\n * controller.focusNext(); // Focus the next landmark\n * ```\n */\nexport function getLandmarkController(): LandmarkController {\n return getLandmarkManager().getController();\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/landmark/useLandmark.ts
|
|
1
13
|
import { t as filterDOMProps } from "./filterDOMProps.jsx";
|
|
2
14
|
import { t as access } from "./reactivity.jsx";
|
|
3
|
-
import {
|
|
15
|
+
import { createTrackedEffect } from "solid-js";
|
|
4
16
|
//#region src/landmark/createLandmark.ts
|
|
5
17
|
/**
|
|
6
18
|
* Manages all registered landmarks and handles F6 keyboard navigation.
|
|
@@ -152,7 +164,8 @@ function getLandmarkManager() {
|
|
|
152
164
|
* ```
|
|
153
165
|
*/
|
|
154
166
|
function createLandmark(props, ref) {
|
|
155
|
-
|
|
167
|
+
createTrackedEffect(() => {
|
|
168
|
+
const _s2Cleanups = [];
|
|
156
169
|
const element = ref();
|
|
157
170
|
if (!element) return;
|
|
158
171
|
const p = access(props);
|
|
@@ -164,9 +177,12 @@ function createLandmark(props, ref) {
|
|
|
164
177
|
};
|
|
165
178
|
const manager = getLandmarkManager();
|
|
166
179
|
manager.register(entry);
|
|
167
|
-
|
|
180
|
+
_s2Cleanups.push(() => {
|
|
168
181
|
manager.unregister(element);
|
|
169
182
|
});
|
|
183
|
+
return () => {
|
|
184
|
+
for (const c of _s2Cleanups) c();
|
|
185
|
+
};
|
|
170
186
|
});
|
|
171
187
|
const getLandmarkProps = () => {
|
|
172
188
|
const p = access(props);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLandmark.jsx","names":[],"sources":["../../src/landmark/createLandmark.ts"],"sourcesContent":["/**\n * createLandmark - SolidJS implementation of React Aria's useLandmark\n *\n * Provides landmark navigation in an application. Call this with a role and label\n * to register a landmark navigable with the F6 key.\n *\n * ARIA landmarks help screen reader users navigate between major sections of a page.\n * The F6 key (or Shift+F6) cycles through all registered landmarks.\n */\n\nimport type { JSX, Accessor } from \"solid-js\";\nimport { createEffect, onCleanup } from \"solid-js\";\nimport { access, type MaybeAccessor } from \"../utils\";\nimport { filterDOMProps } from \"../utils\";\n\n/** ARIA landmark roles */\nexport type AriaLandmarkRole =\n | \"main\"\n | \"region\"\n | \"search\"\n | \"navigation\"\n | \"form\"\n | \"banner\"\n | \"contentinfo\"\n | \"complementary\";\n\nexport interface AriaLandmarkProps {\n /** The ARIA landmark role. */\n role: AriaLandmarkRole;\n /**\n * A human-readable label for the landmark.\n * Required when multiple landmarks with the same role exist on a page.\n */\n \"aria-label\"?: string;\n /** Identifies the element(s) that labels the landmark. */\n \"aria-labelledby\"?: string;\n /** The element's unique identifier. */\n id?: string;\n /**\n * A custom focus handler called when this landmark receives focus via F6 navigation.\n * Use this to focus a specific element within the landmark instead of the container.\n */\n focus?: () => void;\n}\n\nexport interface LandmarkAria<T extends HTMLElement = HTMLElement> {\n /** Props to spread on the landmark element. */\n landmarkProps: JSX.HTMLAttributes<T>;\n}\n\nexport interface LandmarkController {\n /** Focus the next landmark in DOM order. */\n focusNext: () => void;\n /** Focus the previous landmark in DOM order. */\n focusPrevious: () => void;\n /** Focus the main landmark. */\n focusMain: () => void;\n /** Navigate to a specific landmark by role. If multiple exist, the first one is focused. */\n navigate: (role: AriaLandmarkRole) => void;\n}\n\ninterface LandmarkEntry {\n ref: HTMLElement;\n role: AriaLandmarkRole;\n label?: string;\n focus?: () => void;\n lastFocused?: HTMLElement;\n}\n\n/**\n * Manages all registered landmarks and handles F6 keyboard navigation.\n */\nclass LandmarkManager {\n private landmarks: LandmarkEntry[] = [];\n private currentIndex = -1;\n private listening = false;\n\n constructor() {\n if (typeof window !== \"undefined\") {\n this.startListening();\n }\n }\n\n private startListening() {\n if (this.listening) return;\n this.listening = true;\n\n window.addEventListener(\"keydown\", this.handleKeyDown.bind(this), true);\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n // F6 to navigate landmarks\n if (event.key === \"F6\") {\n event.preventDefault();\n if (event.shiftKey) {\n this.focusPrevious();\n } else {\n this.focusNext();\n }\n }\n }\n\n register(entry: LandmarkEntry): void {\n // Insert in DOM order using compareDocumentPosition\n const index = this.findInsertionIndex(entry.ref);\n this.landmarks.splice(index, 0, entry);\n\n // Validate: if multiple landmarks have the same role, they should have different labels\n this.validateLabels();\n }\n\n unregister(ref: HTMLElement): void {\n const index = this.landmarks.findIndex((l) => l.ref === ref);\n if (index !== -1) {\n this.landmarks.splice(index, 1);\n // Adjust currentIndex if needed\n if (this.currentIndex >= this.landmarks.length) {\n this.currentIndex = this.landmarks.length - 1;\n }\n }\n }\n\n private findInsertionIndex(ref: HTMLElement): number {\n // Binary search for insertion point based on DOM order\n let low = 0;\n let high = this.landmarks.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n const comparison = this.landmarks[mid].ref.compareDocumentPosition(ref);\n\n // Node.DOCUMENT_POSITION_FOLLOWING = 4\n if (comparison & Node.DOCUMENT_POSITION_FOLLOWING) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n private validateLabels(): void {\n // Group landmarks by role\n const roleGroups = new Map<AriaLandmarkRole, LandmarkEntry[]>();\n for (const landmark of this.landmarks) {\n const group = roleGroups.get(landmark.role) || [];\n group.push(landmark);\n roleGroups.set(landmark.role, group);\n }\n\n // Warn if multiple landmarks with the same role lack unique labels\n for (const [role, group] of roleGroups) {\n if (group.length > 1) {\n const labels = group.map((l) => l.label);\n const uniqueLabels = new Set(labels.filter(Boolean));\n if (uniqueLabels.size < group.length) {\n console.warn(\n `Multiple landmarks with role \"${role}\" exist. Each should have a unique aria-label or aria-labelledby.`,\n );\n }\n }\n }\n }\n\n focusNext(): void {\n if (this.landmarks.length === 0) return;\n\n // Find the currently focused landmark\n const activeElement = document.activeElement;\n this.currentIndex = this.findCurrentLandmarkIndex(activeElement);\n\n // Move to next\n this.currentIndex = (this.currentIndex + 1) % this.landmarks.length;\n this.focusLandmark(this.landmarks[this.currentIndex]);\n }\n\n focusPrevious(): void {\n if (this.landmarks.length === 0) return;\n\n // Find the currently focused landmark\n const activeElement = document.activeElement;\n this.currentIndex = this.findCurrentLandmarkIndex(activeElement);\n\n // Move to previous\n this.currentIndex = (this.currentIndex - 1 + this.landmarks.length) % this.landmarks.length;\n this.focusLandmark(this.landmarks[this.currentIndex]);\n }\n\n focusMain(): void {\n const main = this.landmarks.find((l) => l.role === \"main\");\n if (main) {\n this.focusLandmark(main);\n }\n }\n\n navigate(role: AriaLandmarkRole): void {\n const landmark = this.landmarks.find((l) => l.role === role);\n if (landmark) {\n this.focusLandmark(landmark);\n }\n }\n\n private findCurrentLandmarkIndex(activeElement: Element | null): number {\n if (!activeElement) return -1;\n\n // Check if active element is within any landmark\n for (let i = 0; i < this.landmarks.length; i++) {\n if (this.landmarks[i].ref.contains(activeElement)) {\n // Store the last focused element for this landmark\n if (activeElement instanceof HTMLElement) {\n this.landmarks[i].lastFocused = activeElement;\n }\n return i;\n }\n }\n\n return -1;\n }\n\n private focusLandmark(landmark: LandmarkEntry): void {\n // If a custom focus handler is provided, use it\n if (landmark.focus) {\n landmark.focus();\n return;\n }\n\n // If we previously focused an element in this landmark, try to restore it\n if (landmark.lastFocused && landmark.ref.contains(landmark.lastFocused)) {\n landmark.lastFocused.focus();\n return;\n }\n\n // Try to find the first focusable element\n const focusable = this.findFirstFocusable(landmark.ref);\n if (focusable) {\n focusable.focus();\n return;\n }\n\n // Fallback: make the landmark itself focusable and focus it\n if (!landmark.ref.hasAttribute(\"tabindex\")) {\n landmark.ref.setAttribute(\"tabindex\", \"-1\");\n }\n landmark.ref.focus();\n }\n\n private findFirstFocusable(container: HTMLElement): HTMLElement | null {\n const focusableSelectors = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(\", \");\n\n return container.querySelector<HTMLElement>(focusableSelectors);\n }\n\n getController(): LandmarkController {\n return {\n focusNext: () => this.focusNext(),\n focusPrevious: () => this.focusPrevious(),\n focusMain: () => this.focusMain(),\n navigate: (role) => this.navigate(role),\n };\n }\n}\n\n// Global singleton instance\nlet landmarkManager: LandmarkManager | null = null;\n\nfunction getLandmarkManager(): LandmarkManager {\n if (!landmarkManager) {\n landmarkManager = new LandmarkManager();\n }\n return landmarkManager;\n}\n\n/**\n * Provides landmark navigation in an application.\n * Call this with a role and label to register a landmark navigable with F6.\n *\n * @example\n * ```tsx\n * function Navigation(props) {\n * let ref: HTMLElement;\n * const { landmarkProps } = createLandmark({\n * role: 'navigation',\n * 'aria-label': 'Main navigation'\n * });\n *\n * return (\n * <nav {...landmarkProps} ref={ref}>\n * {props.children}\n * </nav>\n * );\n * }\n * ```\n */\nexport function createLandmark<T extends HTMLElement = HTMLElement>(\n props: MaybeAccessor<AriaLandmarkProps>,\n ref: Accessor<T | undefined>,\n): LandmarkAria<T> {\n // Register with the landmark manager\n createEffect(() => {\n const element = ref();\n if (!element) return;\n\n const p = access(props);\n const entry: LandmarkEntry = {\n ref: element,\n role: p.role,\n label: p[\"aria-label\"],\n focus: p.focus,\n };\n\n const manager = getLandmarkManager();\n manager.register(entry);\n\n onCleanup(() => {\n manager.unregister(element);\n });\n });\n\n const getLandmarkProps = (): JSX.HTMLAttributes<T> => {\n const p = access(props);\n const domProps = filterDOMProps(p as unknown as Record<string, unknown>, { labelable: true });\n\n return {\n ...domProps,\n role: p.role,\n };\n };\n\n return {\n get landmarkProps() {\n return getLandmarkProps();\n },\n };\n}\n\n/**\n * Returns a controller for programmatic landmark navigation.\n *\n * @example\n * ```tsx\n * const controller = getLandmarkController();\n * controller.focusMain(); // Focus the main landmark\n * controller.focusNext(); // Focus the next landmark\n * ```\n */\nexport function getLandmarkController(): LandmarkController {\n return getLandmarkManager().getController();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createLandmark.jsx","names":[],"sources":["../../src/landmark/createLandmark.ts"],"sourcesContent":["/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/landmark/useLandmark.ts\n\n/**\n * createLandmark - SolidJS implementation of React Aria's useLandmark\n *\n * Provides landmark navigation in an application. Call this with a role and label\n * to register a landmark navigable with the F6 key.\n *\n * ARIA landmarks help screen reader users navigate between major sections of a page.\n * The F6 key (or Shift+F6) cycles through all registered landmarks.\n *\n * Ported from packages/react-aria/src/landmark/useLandmark.ts.\n */\n\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createTrackedEffect } from \"solid-js\";\nimport { access, type MaybeAccessor } from \"../utils\";\nimport { filterDOMProps } from \"../utils\";\n\n/** ARIA landmark roles */\nexport type AriaLandmarkRole =\n | \"main\"\n | \"region\"\n | \"search\"\n | \"navigation\"\n | \"form\"\n | \"banner\"\n | \"contentinfo\"\n | \"complementary\";\n\nexport interface AriaLandmarkProps {\n /** The ARIA landmark role. */\n role: AriaLandmarkRole;\n /**\n * A human-readable label for the landmark.\n * Required when multiple landmarks with the same role exist on a page.\n */\n \"aria-label\"?: string;\n /** Identifies the element(s) that labels the landmark. */\n \"aria-labelledby\"?: string;\n /** The element's unique identifier. */\n id?: string;\n /**\n * A custom focus handler called when this landmark receives focus via F6 navigation.\n * Use this to focus a specific element within the landmark instead of the container.\n */\n focus?: () => void;\n}\n\nexport interface LandmarkAria<T extends HTMLElement = HTMLElement> {\n /** Props to spread on the landmark element. */\n landmarkProps: JSX.HTMLAttributes<T>;\n}\n\nexport interface LandmarkController {\n /** Focus the next landmark in DOM order. */\n focusNext: () => void;\n /** Focus the previous landmark in DOM order. */\n focusPrevious: () => void;\n /** Focus the main landmark. */\n focusMain: () => void;\n /** Navigate to a specific landmark by role. If multiple exist, the first one is focused. */\n navigate: (role: AriaLandmarkRole) => void;\n}\n\ninterface LandmarkEntry {\n ref: HTMLElement;\n role: AriaLandmarkRole;\n label?: string;\n focus?: () => void;\n lastFocused?: HTMLElement;\n}\n\n/**\n * Manages all registered landmarks and handles F6 keyboard navigation.\n */\nclass LandmarkManager {\n private landmarks: LandmarkEntry[] = [];\n private currentIndex = -1;\n private listening = false;\n\n constructor() {\n if (typeof window !== \"undefined\") {\n this.startListening();\n }\n }\n\n private startListening() {\n if (this.listening) return;\n this.listening = true;\n\n window.addEventListener(\"keydown\", this.handleKeyDown.bind(this), true);\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n // F6 to navigate landmarks\n if (event.key === \"F6\") {\n event.preventDefault();\n if (event.shiftKey) {\n this.focusPrevious();\n } else {\n this.focusNext();\n }\n }\n }\n\n register(entry: LandmarkEntry): void {\n // Insert in DOM order using compareDocumentPosition\n const index = this.findInsertionIndex(entry.ref);\n this.landmarks.splice(index, 0, entry);\n\n // Validate: if multiple landmarks have the same role, they should have different labels\n this.validateLabels();\n }\n\n unregister(ref: HTMLElement): void {\n const index = this.landmarks.findIndex((l) => l.ref === ref);\n if (index !== -1) {\n this.landmarks.splice(index, 1);\n // Adjust currentIndex if needed\n if (this.currentIndex >= this.landmarks.length) {\n this.currentIndex = this.landmarks.length - 1;\n }\n }\n }\n\n private findInsertionIndex(ref: HTMLElement): number {\n // Binary search for insertion point based on DOM order\n let low = 0;\n let high = this.landmarks.length;\n\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n const comparison = this.landmarks[mid].ref.compareDocumentPosition(ref);\n\n // Node.DOCUMENT_POSITION_FOLLOWING = 4\n if (comparison & Node.DOCUMENT_POSITION_FOLLOWING) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n\n return low;\n }\n\n private validateLabels(): void {\n // Group landmarks by role\n const roleGroups = new Map<AriaLandmarkRole, LandmarkEntry[]>();\n for (const landmark of this.landmarks) {\n const group = roleGroups.get(landmark.role) || [];\n group.push(landmark);\n roleGroups.set(landmark.role, group);\n }\n\n // Warn if multiple landmarks with the same role lack unique labels\n for (const [role, group] of roleGroups) {\n if (group.length > 1) {\n const labels = group.map((l) => l.label);\n const uniqueLabels = new Set(labels.filter(Boolean));\n if (uniqueLabels.size < group.length) {\n console.warn(\n `Multiple landmarks with role \"${role}\" exist. Each should have a unique aria-label or aria-labelledby.`,\n );\n }\n }\n }\n }\n\n focusNext(): void {\n if (this.landmarks.length === 0) return;\n\n // Find the currently focused landmark\n const activeElement = document.activeElement;\n this.currentIndex = this.findCurrentLandmarkIndex(activeElement);\n\n // Move to next\n this.currentIndex = (this.currentIndex + 1) % this.landmarks.length;\n this.focusLandmark(this.landmarks[this.currentIndex]);\n }\n\n focusPrevious(): void {\n if (this.landmarks.length === 0) return;\n\n // Find the currently focused landmark\n const activeElement = document.activeElement;\n this.currentIndex = this.findCurrentLandmarkIndex(activeElement);\n\n // Move to previous\n this.currentIndex = (this.currentIndex - 1 + this.landmarks.length) % this.landmarks.length;\n this.focusLandmark(this.landmarks[this.currentIndex]);\n }\n\n focusMain(): void {\n const main = this.landmarks.find((l) => l.role === \"main\");\n if (main) {\n this.focusLandmark(main);\n }\n }\n\n navigate(role: AriaLandmarkRole): void {\n const landmark = this.landmarks.find((l) => l.role === role);\n if (landmark) {\n this.focusLandmark(landmark);\n }\n }\n\n private findCurrentLandmarkIndex(activeElement: Element | null): number {\n if (!activeElement) return -1;\n\n // Check if active element is within any landmark\n for (let i = 0; i < this.landmarks.length; i++) {\n if (this.landmarks[i].ref.contains(activeElement)) {\n // Store the last focused element for this landmark\n if (activeElement instanceof HTMLElement) {\n this.landmarks[i].lastFocused = activeElement;\n }\n return i;\n }\n }\n\n return -1;\n }\n\n private focusLandmark(landmark: LandmarkEntry): void {\n // If a custom focus handler is provided, use it\n if (landmark.focus) {\n landmark.focus();\n return;\n }\n\n // If we previously focused an element in this landmark, try to restore it\n if (landmark.lastFocused && landmark.ref.contains(landmark.lastFocused)) {\n landmark.lastFocused.focus();\n return;\n }\n\n // Try to find the first focusable element\n const focusable = this.findFirstFocusable(landmark.ref);\n if (focusable) {\n focusable.focus();\n return;\n }\n\n // Fallback: make the landmark itself focusable and focus it\n if (!landmark.ref.hasAttribute(\"tabindex\")) {\n landmark.ref.setAttribute(\"tabindex\", \"-1\");\n }\n landmark.ref.focus();\n }\n\n private findFirstFocusable(container: HTMLElement): HTMLElement | null {\n const focusableSelectors = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(\", \");\n\n return container.querySelector<HTMLElement>(focusableSelectors);\n }\n\n getController(): LandmarkController {\n return {\n focusNext: () => this.focusNext(),\n focusPrevious: () => this.focusPrevious(),\n focusMain: () => this.focusMain(),\n navigate: (role) => this.navigate(role),\n };\n }\n}\n\n// Global singleton instance\nlet landmarkManager: LandmarkManager | null = null;\n\nfunction getLandmarkManager(): LandmarkManager {\n if (!landmarkManager) {\n landmarkManager = new LandmarkManager();\n }\n return landmarkManager;\n}\n\n/**\n * Provides landmark navigation in an application.\n * Call this with a role and label to register a landmark navigable with F6.\n *\n * @example\n * ```tsx\n * function Navigation(props) {\n * let ref: HTMLElement;\n * const { landmarkProps } = createLandmark({\n * role: 'navigation',\n * 'aria-label': 'Main navigation'\n * });\n *\n * return (\n * <nav {...landmarkProps} ref={ref}>\n * {props.children}\n * </nav>\n * );\n * }\n * ```\n */\nexport function createLandmark<T extends HTMLElement = HTMLElement>(\n props: MaybeAccessor<AriaLandmarkProps>,\n ref: Accessor<T | undefined>,\n): LandmarkAria<T> {\n // Register with the landmark manager\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n const element = ref();\n if (!element) return;\n\n const p = access(props);\n const entry: LandmarkEntry = {\n ref: element,\n role: p.role,\n label: p[\"aria-label\"],\n focus: p.focus,\n };\n\n const manager = getLandmarkManager();\n manager.register(entry);\n\n _s2Cleanups.push(() => {\n manager.unregister(element);\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n const getLandmarkProps = (): JSX.HTMLAttributes<T> => {\n const p = access(props);\n const domProps = filterDOMProps(p as unknown as Record<string, unknown>, { labelable: true });\n\n return {\n ...domProps,\n role: p.role,\n };\n };\n\n return {\n get landmarkProps() {\n return getLandmarkProps();\n },\n };\n}\n\n/**\n * Returns a controller for programmatic landmark navigation.\n *\n * @example\n * ```tsx\n * const controller = getLandmarkController();\n * controller.focusMain(); // Focus the main landmark\n * controller.focusNext(); // Focus the next landmark\n * ```\n */\nexport function getLandmarkController(): LandmarkController {\n return getLandmarkManager().getController();\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/interactions/useLongPress.ts
|
|
13
|
+
import { t as mergeProps } from "./mergeProps.js";
|
|
14
|
+
import { i as createDescription, s as createGlobalListeners } from "./utils.js";
|
|
15
|
+
import { t as onOwnedCleanup } from "./owner.js";
|
|
16
|
+
import { t as access } from "./reactivity.js";
|
|
17
|
+
import { T as focusWithoutScrolling } from "./dom.js";
|
|
18
|
+
import { t as createPress } from "./createPress.js";
|
|
19
|
+
//#region src/interactions/createLongPress.ts
|
|
20
|
+
/**
|
|
21
|
+
* createLongPress - Handles long press interactions across mouse and touch.
|
|
22
|
+
*
|
|
23
|
+
* Port of @react-aria/interactions useLongPress, adapted for SolidJS.
|
|
24
|
+
*/
|
|
25
|
+
const DEFAULT_THRESHOLD = 500;
|
|
26
|
+
function isDisabledValue(isDisabled) {
|
|
27
|
+
return typeof isDisabled === "function" ? isDisabled() : !!isDisabled;
|
|
28
|
+
}
|
|
29
|
+
function createLongPressEvent(type, e) {
|
|
30
|
+
return {
|
|
31
|
+
type,
|
|
32
|
+
pointerType: e.pointerType,
|
|
33
|
+
target: e.target,
|
|
34
|
+
shiftKey: e.shiftKey,
|
|
35
|
+
ctrlKey: e.ctrlKey,
|
|
36
|
+
metaKey: e.metaKey,
|
|
37
|
+
altKey: e.altKey,
|
|
38
|
+
x: e.x,
|
|
39
|
+
y: e.y
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Handles long press interactions across mouse and touch devices.
|
|
44
|
+
*/
|
|
45
|
+
function createLongPress(props = {}) {
|
|
46
|
+
const { isDisabled, pointerType, onLongPressStart, onLongPressEnd, onLongPress, threshold = DEFAULT_THRESHOLD } = props;
|
|
47
|
+
let timeoutId;
|
|
48
|
+
const { addGlobalListener } = createGlobalListeners();
|
|
49
|
+
const isAcceptedPointerType = (e) => pointerType ? e.pointerType === pointerType : e.pointerType === "mouse" || e.pointerType === "touch";
|
|
50
|
+
const { pressProps } = createPress({
|
|
51
|
+
isDisabled,
|
|
52
|
+
onPressStart(e) {
|
|
53
|
+
e.continuePropagation();
|
|
54
|
+
if (isAcceptedPointerType(e)) {
|
|
55
|
+
onLongPressStart?.(createLongPressEvent("longpressstart", e));
|
|
56
|
+
timeoutId = setTimeout(() => {
|
|
57
|
+
e.target.dispatchEvent(new PointerEvent("pointercancel", { bubbles: true }));
|
|
58
|
+
if (document.activeElement !== e.target) focusWithoutScrolling(e.target);
|
|
59
|
+
onLongPress?.(createLongPressEvent("longpress", e));
|
|
60
|
+
timeoutId = void 0;
|
|
61
|
+
}, threshold);
|
|
62
|
+
if (e.pointerType === "touch") {
|
|
63
|
+
const onContextMenu = (event) => {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
};
|
|
66
|
+
const target = e.target;
|
|
67
|
+
target.addEventListener("contextmenu", onContextMenu, { once: true });
|
|
68
|
+
addGlobalListener("pointerup", () => {
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
target.removeEventListener("contextmenu", onContextMenu);
|
|
71
|
+
}, 30);
|
|
72
|
+
}, {
|
|
73
|
+
isWindow: true,
|
|
74
|
+
once: true
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
onPressEnd(e) {
|
|
80
|
+
if (timeoutId) {
|
|
81
|
+
clearTimeout(timeoutId);
|
|
82
|
+
timeoutId = void 0;
|
|
83
|
+
}
|
|
84
|
+
if (onLongPressEnd && isAcceptedPointerType(e)) onLongPressEnd(createLongPressEvent("longpressend", e));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
const descriptionProps = createDescription(() => onLongPress && !isDisabledValue(props.isDisabled) ? access(props.accessibilityDescription) : void 0);
|
|
88
|
+
onOwnedCleanup(() => {
|
|
89
|
+
if (timeoutId) {
|
|
90
|
+
clearTimeout(timeoutId);
|
|
91
|
+
timeoutId = void 0;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
const longPressProps = mergeProps(pressProps);
|
|
95
|
+
Object.defineProperty(longPressProps, "aria-describedby", {
|
|
96
|
+
get: () => descriptionProps["aria-describedby"],
|
|
97
|
+
enumerable: true,
|
|
98
|
+
configurable: true
|
|
99
|
+
});
|
|
100
|
+
return { longPressProps };
|
|
101
|
+
}
|
|
102
|
+
//#endregion
|
|
103
|
+
export { createLongPress as t };
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=createLongPress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createLongPress.js","names":[],"sources":["../../src/interactions/createLongPress.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/interactions/useLongPress.ts\n\n/**\n * createLongPress - Handles long press interactions across mouse and touch.\n *\n * Port of @react-aria/interactions useLongPress, adapted for SolidJS.\n */\n\nimport { mergeProps, focusWithoutScrolling, createGlobalListeners, onOwnedCleanup } from \"../utils\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createPress, type PressEvent } from \"./createPress\";\nimport { createDescription } from \"../utils/createDescription\";\nimport { access, type MaybeAccessor } from \"../utils/reactivity\";\n\nexport interface LongPressEvent {\n /** The type of long press event being fired. */\n type: \"longpressstart\" | \"longpressend\" | \"longpress\";\n /** The pointer type that triggered the long press. */\n pointerType: PressEvent[\"pointerType\"];\n /** The target element of the long press event. */\n target: Element;\n /** Whether the shift keyboard modifier was held during the long press event. */\n shiftKey: boolean;\n /** Whether the ctrl keyboard modifier was held during the long press event. */\n ctrlKey: boolean;\n /** Whether the meta keyboard modifier was held during the long press event. */\n metaKey: boolean;\n /** Whether the alt keyboard modifier was held during the long press event. */\n altKey: boolean;\n /** X position relative to the target. */\n x: number;\n /** Y position relative to the target. */\n y: number;\n}\n\nexport interface LongPressProps {\n /** Whether long press events should be disabled. */\n isDisabled?: MaybeAccessor<boolean>;\n /** Which pointer type to listen for. By default, both mouse and touch are listened for. */\n pointerType?: \"mouse\" | \"touch\";\n /** Handler that is called when a long press interaction starts. */\n onLongPressStart?: (e: LongPressEvent) => void;\n /**\n * Handler that is called when a long press interaction ends, either\n * over the target or when the pointer leaves the target.\n */\n onLongPressEnd?: (e: LongPressEvent) => void;\n /**\n * Handler that is called when the threshold time is met while\n * the press is over the target.\n */\n onLongPress?: (e: LongPressEvent) => void;\n /**\n * The amount of time in milliseconds to wait before triggering a long press.\n * @default 500ms\n */\n threshold?: number;\n /**\n * A description for assistive technology users indicating that a long press\n * action is available, e.g. \"Long press to open menu\".\n */\n accessibilityDescription?: MaybeAccessor<string | undefined>;\n}\n\nexport interface LongPressResult {\n /** Props to spread on the target element. */\n longPressProps: JSX.HTMLAttributes<HTMLElement>;\n}\n\nconst DEFAULT_THRESHOLD = 500;\n\nfunction isDisabledValue(isDisabled: MaybeAccessor<boolean> | undefined): boolean {\n return typeof isDisabled === \"function\" ? isDisabled() : !!isDisabled;\n}\n\nfunction createLongPressEvent(type: LongPressEvent[\"type\"], e: PressEvent): LongPressEvent {\n return {\n type,\n pointerType: e.pointerType,\n target: e.target,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n x: e.x,\n y: e.y,\n };\n}\n\n/**\n * Handles long press interactions across mouse and touch devices.\n */\nexport function createLongPress(props: LongPressProps = {}): LongPressResult {\n const {\n isDisabled,\n pointerType,\n onLongPressStart,\n onLongPressEnd,\n onLongPress,\n threshold = DEFAULT_THRESHOLD,\n } = props;\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const { addGlobalListener } = createGlobalListeners();\n const isAcceptedPointerType = (e: PressEvent) =>\n pointerType\n ? e.pointerType === pointerType\n : e.pointerType === \"mouse\" || e.pointerType === \"touch\";\n\n const { pressProps } = createPress({\n isDisabled,\n onPressStart(e) {\n e.continuePropagation();\n if (isAcceptedPointerType(e)) {\n onLongPressStart?.(createLongPressEvent(\"longpressstart\", e));\n\n timeoutId = setTimeout(() => {\n // Prevent other press handlers from also handling this event.\n e.target.dispatchEvent(new PointerEvent(\"pointercancel\", { bubbles: true }));\n\n // Ensure target is focused. On touch devices, browsers typically focus on pointer up.\n if (document.activeElement !== e.target) {\n focusWithoutScrolling(e.target as HTMLElement);\n }\n\n onLongPress?.(createLongPressEvent(\"longpress\", e));\n timeoutId = undefined;\n }, threshold);\n\n if (e.pointerType === \"touch\") {\n const onContextMenu = (event: Event) => {\n event.preventDefault();\n };\n const target = e.target as HTMLElement;\n target.addEventListener(\"contextmenu\", onContextMenu, { once: true });\n\n addGlobalListener(\n \"pointerup\",\n () => {\n setTimeout(() => {\n target.removeEventListener(\"contextmenu\", onContextMenu);\n }, 30);\n },\n { isWindow: true, once: true },\n );\n }\n }\n },\n onPressEnd(e) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n if (onLongPressEnd && isAcceptedPointerType(e)) {\n onLongPressEnd(createLongPressEvent(\"longpressend\", e));\n }\n },\n });\n\n const descriptionProps = createDescription(() =>\n onLongPress && !isDisabledValue(props.isDisabled)\n ? access(props.accessibilityDescription)\n : undefined,\n );\n\n onOwnedCleanup(() => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n });\n\n const longPressProps = mergeProps(pressProps) as JSX.HTMLAttributes<HTMLElement>;\n Object.defineProperty(longPressProps, \"aria-describedby\", {\n get: () => descriptionProps[\"aria-describedby\"],\n enumerable: true,\n configurable: true,\n });\n\n return {\n longPressProps,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAiFA,MAAM,oBAAoB;AAE1B,SAAS,gBAAgB,YAAyD;CAChF,OAAO,OAAO,eAAe,aAAa,WAAW,IAAI,CAAC,CAAC;AAC7D;AAEA,SAAS,qBAAqB,MAA8B,GAA+B;CACzF,OAAO;EACL;EACA,aAAa,EAAE;EACf,QAAQ,EAAE;EACV,UAAU,EAAE;EACZ,SAAS,EAAE;EACX,SAAS,EAAE;EACX,QAAQ,EAAE;EACV,GAAG,EAAE;EACL,GAAG,EAAE;CACP;AACF;;;;AAKA,SAAgB,gBAAgB,QAAwB,CAAC,GAAoB;CAC3E,MAAM,EACJ,YACA,aACA,kBACA,gBACA,aACA,YAAY,sBACV;CAEJ,IAAI;CACJ,MAAM,EAAE,sBAAsB,sBAAsB;CACpD,MAAM,yBAAyB,MAC7B,cACI,EAAE,gBAAgB,cAClB,EAAE,gBAAgB,WAAW,EAAE,gBAAgB;CAErD,MAAM,EAAE,eAAe,YAAY;EACjC;EACA,aAAa,GAAG;GACd,EAAE,oBAAoB;GACtB,IAAI,sBAAsB,CAAC,GAAG;IAC5B,mBAAmB,qBAAqB,kBAAkB,CAAC,CAAC;IAE5D,YAAY,iBAAiB;KAE3B,EAAE,OAAO,cAAc,IAAI,aAAa,iBAAiB,EAAE,SAAS,KAAK,CAAC,CAAC;KAG3E,IAAI,SAAS,kBAAkB,EAAE,QAC/B,sBAAsB,EAAE,MAAqB;KAG/C,cAAc,qBAAqB,aAAa,CAAC,CAAC;KAClD,YAAY,KAAA;IACd,GAAG,SAAS;IAEZ,IAAI,EAAE,gBAAgB,SAAS;KAC7B,MAAM,iBAAiB,UAAiB;MACtC,MAAM,eAAe;KACvB;KACA,MAAM,SAAS,EAAE;KACjB,OAAO,iBAAiB,eAAe,eAAe,EAAE,MAAM,KAAK,CAAC;KAEpE,kBACE,mBACM;MACJ,iBAAiB;OACf,OAAO,oBAAoB,eAAe,aAAa;MACzD,GAAG,EAAE;KACP,GACA;MAAE,UAAU;MAAM,MAAM;KAAK,CAC/B;IACF;GACF;EACF;EACA,WAAW,GAAG;GACZ,IAAI,WAAW;IACb,aAAa,SAAS;IACtB,YAAY,KAAA;GACd;GAEA,IAAI,kBAAkB,sBAAsB,CAAC,GAC3C,eAAe,qBAAqB,gBAAgB,CAAC,CAAC;EAE1D;CACF,CAAC;CAED,MAAM,mBAAmB,wBACvB,eAAe,CAAC,gBAAgB,MAAM,UAAU,IAC5C,OAAO,MAAM,wBAAwB,IACrC,KAAA,CACN;CAEA,qBAAqB;EACnB,IAAI,WAAW;GACb,aAAa,SAAS;GACtB,YAAY,KAAA;EACd;CACF,CAAC;CAED,MAAM,iBAAiB,WAAW,UAAU;CAC5C,OAAO,eAAe,gBAAgB,oBAAoB;EACxD,WAAW,iBAAiB;EAC5B,YAAY;EACZ,cAAc;CAChB,CAAC;CAED,OAAO,EACL,eACF;AACF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/interactions/useLongPress.ts
|
|
13
|
+
import { t as mergeProps } from "./mergeProps.jsx";
|
|
14
|
+
import { i as createDescription, s as createGlobalListeners } from "./utils.jsx";
|
|
15
|
+
import { t as onOwnedCleanup } from "./owner.jsx";
|
|
16
|
+
import { t as access } from "./reactivity.jsx";
|
|
17
|
+
import { T as focusWithoutScrolling } from "./dom.jsx";
|
|
18
|
+
import { t as createPress } from "./createPress.jsx";
|
|
19
|
+
//#region src/interactions/createLongPress.ts
|
|
20
|
+
/**
|
|
21
|
+
* createLongPress - Handles long press interactions across mouse and touch.
|
|
22
|
+
*
|
|
23
|
+
* Port of @react-aria/interactions useLongPress, adapted for SolidJS.
|
|
24
|
+
*/
|
|
25
|
+
const DEFAULT_THRESHOLD = 500;
|
|
26
|
+
function isDisabledValue(isDisabled) {
|
|
27
|
+
return typeof isDisabled === "function" ? isDisabled() : !!isDisabled;
|
|
28
|
+
}
|
|
29
|
+
function createLongPressEvent(type, e) {
|
|
30
|
+
return {
|
|
31
|
+
type,
|
|
32
|
+
pointerType: e.pointerType,
|
|
33
|
+
target: e.target,
|
|
34
|
+
shiftKey: e.shiftKey,
|
|
35
|
+
ctrlKey: e.ctrlKey,
|
|
36
|
+
metaKey: e.metaKey,
|
|
37
|
+
altKey: e.altKey,
|
|
38
|
+
x: e.x,
|
|
39
|
+
y: e.y
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Handles long press interactions across mouse and touch devices.
|
|
44
|
+
*/
|
|
45
|
+
function createLongPress(props = {}) {
|
|
46
|
+
const { isDisabled, pointerType, onLongPressStart, onLongPressEnd, onLongPress, threshold = DEFAULT_THRESHOLD } = props;
|
|
47
|
+
let timeoutId;
|
|
48
|
+
const { addGlobalListener } = createGlobalListeners();
|
|
49
|
+
const isAcceptedPointerType = (e) => pointerType ? e.pointerType === pointerType : e.pointerType === "mouse" || e.pointerType === "touch";
|
|
50
|
+
const { pressProps } = createPress({
|
|
51
|
+
isDisabled,
|
|
52
|
+
onPressStart(e) {
|
|
53
|
+
e.continuePropagation();
|
|
54
|
+
if (isAcceptedPointerType(e)) {
|
|
55
|
+
onLongPressStart?.(createLongPressEvent("longpressstart", e));
|
|
56
|
+
timeoutId = setTimeout(() => {
|
|
57
|
+
e.target.dispatchEvent(new PointerEvent("pointercancel", { bubbles: true }));
|
|
58
|
+
if (document.activeElement !== e.target) focusWithoutScrolling(e.target);
|
|
59
|
+
onLongPress?.(createLongPressEvent("longpress", e));
|
|
60
|
+
timeoutId = void 0;
|
|
61
|
+
}, threshold);
|
|
62
|
+
if (e.pointerType === "touch") {
|
|
63
|
+
const onContextMenu = (event) => {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
};
|
|
66
|
+
const target = e.target;
|
|
67
|
+
target.addEventListener("contextmenu", onContextMenu, { once: true });
|
|
68
|
+
addGlobalListener("pointerup", () => {
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
target.removeEventListener("contextmenu", onContextMenu);
|
|
71
|
+
}, 30);
|
|
72
|
+
}, {
|
|
73
|
+
isWindow: true,
|
|
74
|
+
once: true
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
onPressEnd(e) {
|
|
80
|
+
if (timeoutId) {
|
|
81
|
+
clearTimeout(timeoutId);
|
|
82
|
+
timeoutId = void 0;
|
|
83
|
+
}
|
|
84
|
+
if (onLongPressEnd && isAcceptedPointerType(e)) onLongPressEnd(createLongPressEvent("longpressend", e));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
const descriptionProps = createDescription(() => onLongPress && !isDisabledValue(props.isDisabled) ? access(props.accessibilityDescription) : void 0);
|
|
88
|
+
onOwnedCleanup(() => {
|
|
89
|
+
if (timeoutId) {
|
|
90
|
+
clearTimeout(timeoutId);
|
|
91
|
+
timeoutId = void 0;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
const longPressProps = mergeProps(pressProps);
|
|
95
|
+
Object.defineProperty(longPressProps, "aria-describedby", {
|
|
96
|
+
get: () => descriptionProps["aria-describedby"],
|
|
97
|
+
enumerable: true,
|
|
98
|
+
configurable: true
|
|
99
|
+
});
|
|
100
|
+
return { longPressProps };
|
|
101
|
+
}
|
|
102
|
+
//#endregion
|
|
103
|
+
export { createLongPress as t };
|
|
104
|
+
|
|
105
|
+
//# sourceMappingURL=createLongPress.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createLongPress.jsx","names":[],"sources":["../../src/interactions/createLongPress.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/interactions/useLongPress.ts\n\n/**\n * createLongPress - Handles long press interactions across mouse and touch.\n *\n * Port of @react-aria/interactions useLongPress, adapted for SolidJS.\n */\n\nimport { mergeProps, focusWithoutScrolling, createGlobalListeners, onOwnedCleanup } from \"../utils\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createPress, type PressEvent } from \"./createPress\";\nimport { createDescription } from \"../utils/createDescription\";\nimport { access, type MaybeAccessor } from \"../utils/reactivity\";\n\nexport interface LongPressEvent {\n /** The type of long press event being fired. */\n type: \"longpressstart\" | \"longpressend\" | \"longpress\";\n /** The pointer type that triggered the long press. */\n pointerType: PressEvent[\"pointerType\"];\n /** The target element of the long press event. */\n target: Element;\n /** Whether the shift keyboard modifier was held during the long press event. */\n shiftKey: boolean;\n /** Whether the ctrl keyboard modifier was held during the long press event. */\n ctrlKey: boolean;\n /** Whether the meta keyboard modifier was held during the long press event. */\n metaKey: boolean;\n /** Whether the alt keyboard modifier was held during the long press event. */\n altKey: boolean;\n /** X position relative to the target. */\n x: number;\n /** Y position relative to the target. */\n y: number;\n}\n\nexport interface LongPressProps {\n /** Whether long press events should be disabled. */\n isDisabled?: MaybeAccessor<boolean>;\n /** Which pointer type to listen for. By default, both mouse and touch are listened for. */\n pointerType?: \"mouse\" | \"touch\";\n /** Handler that is called when a long press interaction starts. */\n onLongPressStart?: (e: LongPressEvent) => void;\n /**\n * Handler that is called when a long press interaction ends, either\n * over the target or when the pointer leaves the target.\n */\n onLongPressEnd?: (e: LongPressEvent) => void;\n /**\n * Handler that is called when the threshold time is met while\n * the press is over the target.\n */\n onLongPress?: (e: LongPressEvent) => void;\n /**\n * The amount of time in milliseconds to wait before triggering a long press.\n * @default 500ms\n */\n threshold?: number;\n /**\n * A description for assistive technology users indicating that a long press\n * action is available, e.g. \"Long press to open menu\".\n */\n accessibilityDescription?: MaybeAccessor<string | undefined>;\n}\n\nexport interface LongPressResult {\n /** Props to spread on the target element. */\n longPressProps: JSX.HTMLAttributes<HTMLElement>;\n}\n\nconst DEFAULT_THRESHOLD = 500;\n\nfunction isDisabledValue(isDisabled: MaybeAccessor<boolean> | undefined): boolean {\n return typeof isDisabled === \"function\" ? isDisabled() : !!isDisabled;\n}\n\nfunction createLongPressEvent(type: LongPressEvent[\"type\"], e: PressEvent): LongPressEvent {\n return {\n type,\n pointerType: e.pointerType,\n target: e.target,\n shiftKey: e.shiftKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n altKey: e.altKey,\n x: e.x,\n y: e.y,\n };\n}\n\n/**\n * Handles long press interactions across mouse and touch devices.\n */\nexport function createLongPress(props: LongPressProps = {}): LongPressResult {\n const {\n isDisabled,\n pointerType,\n onLongPressStart,\n onLongPressEnd,\n onLongPress,\n threshold = DEFAULT_THRESHOLD,\n } = props;\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n const { addGlobalListener } = createGlobalListeners();\n const isAcceptedPointerType = (e: PressEvent) =>\n pointerType\n ? e.pointerType === pointerType\n : e.pointerType === \"mouse\" || e.pointerType === \"touch\";\n\n const { pressProps } = createPress({\n isDisabled,\n onPressStart(e) {\n e.continuePropagation();\n if (isAcceptedPointerType(e)) {\n onLongPressStart?.(createLongPressEvent(\"longpressstart\", e));\n\n timeoutId = setTimeout(() => {\n // Prevent other press handlers from also handling this event.\n e.target.dispatchEvent(new PointerEvent(\"pointercancel\", { bubbles: true }));\n\n // Ensure target is focused. On touch devices, browsers typically focus on pointer up.\n if (document.activeElement !== e.target) {\n focusWithoutScrolling(e.target as HTMLElement);\n }\n\n onLongPress?.(createLongPressEvent(\"longpress\", e));\n timeoutId = undefined;\n }, threshold);\n\n if (e.pointerType === \"touch\") {\n const onContextMenu = (event: Event) => {\n event.preventDefault();\n };\n const target = e.target as HTMLElement;\n target.addEventListener(\"contextmenu\", onContextMenu, { once: true });\n\n addGlobalListener(\n \"pointerup\",\n () => {\n setTimeout(() => {\n target.removeEventListener(\"contextmenu\", onContextMenu);\n }, 30);\n },\n { isWindow: true, once: true },\n );\n }\n }\n },\n onPressEnd(e) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n\n if (onLongPressEnd && isAcceptedPointerType(e)) {\n onLongPressEnd(createLongPressEvent(\"longpressend\", e));\n }\n },\n });\n\n const descriptionProps = createDescription(() =>\n onLongPress && !isDisabledValue(props.isDisabled)\n ? access(props.accessibilityDescription)\n : undefined,\n );\n\n onOwnedCleanup(() => {\n if (timeoutId) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n });\n\n const longPressProps = mergeProps(pressProps) as JSX.HTMLAttributes<HTMLElement>;\n Object.defineProperty(longPressProps, \"aria-describedby\", {\n get: () => descriptionProps[\"aria-describedby\"],\n enumerable: true,\n configurable: true,\n });\n\n return {\n longPressProps,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAiFA,MAAM,oBAAoB;AAE1B,SAAS,gBAAgB,YAAyD;CAChF,OAAO,OAAO,eAAe,aAAa,WAAW,IAAI,CAAC,CAAC;AAC7D;AAEA,SAAS,qBAAqB,MAA8B,GAA+B;CACzF,OAAO;EACL;EACA,aAAa,EAAE;EACf,QAAQ,EAAE;EACV,UAAU,EAAE;EACZ,SAAS,EAAE;EACX,SAAS,EAAE;EACX,QAAQ,EAAE;EACV,GAAG,EAAE;EACL,GAAG,EAAE;CACP;AACF;;;;AAKA,SAAgB,gBAAgB,QAAwB,CAAC,GAAoB;CAC3E,MAAM,EACJ,YACA,aACA,kBACA,gBACA,aACA,YAAY,sBACV;CAEJ,IAAI;CACJ,MAAM,EAAE,sBAAsB,sBAAsB;CACpD,MAAM,yBAAyB,MAC7B,cACI,EAAE,gBAAgB,cAClB,EAAE,gBAAgB,WAAW,EAAE,gBAAgB;CAErD,MAAM,EAAE,eAAe,YAAY;EACjC;EACA,aAAa,GAAG;GACd,EAAE,oBAAoB;GACtB,IAAI,sBAAsB,CAAC,GAAG;IAC5B,mBAAmB,qBAAqB,kBAAkB,CAAC,CAAC;IAE5D,YAAY,iBAAiB;KAE3B,EAAE,OAAO,cAAc,IAAI,aAAa,iBAAiB,EAAE,SAAS,KAAK,CAAC,CAAC;KAG3E,IAAI,SAAS,kBAAkB,EAAE,QAC/B,sBAAsB,EAAE,MAAqB;KAG/C,cAAc,qBAAqB,aAAa,CAAC,CAAC;KAClD,YAAY,KAAA;IACd,GAAG,SAAS;IAEZ,IAAI,EAAE,gBAAgB,SAAS;KAC7B,MAAM,iBAAiB,UAAiB;MACtC,MAAM,eAAe;KACvB;KACA,MAAM,SAAS,EAAE;KACjB,OAAO,iBAAiB,eAAe,eAAe,EAAE,MAAM,KAAK,CAAC;KAEpE,kBACE,mBACM;MACJ,iBAAiB;OACf,OAAO,oBAAoB,eAAe,aAAa;MACzD,GAAG,EAAE;KACP,GACA;MAAE,UAAU;MAAM,MAAM;KAAK,CAC/B;IACF;GACF;EACF;EACA,WAAW,GAAG;GACZ,IAAI,WAAW;IACb,aAAa,SAAS;IACtB,YAAY,KAAA;GACd;GAEA,IAAI,kBAAkB,sBAAsB,CAAC,GAC3C,eAAe,qBAAqB,gBAAgB,CAAC,CAAC;EAE1D;CACF,CAAC;CAED,MAAM,mBAAmB,wBACvB,eAAe,CAAC,gBAAgB,MAAM,UAAU,IAC5C,OAAO,MAAM,wBAAwB,IACrC,KAAA,CACN;CAEA,qBAAqB;EACnB,IAAI,WAAW;GACb,aAAa,SAAS;GACtB,YAAY,KAAA;EACd;CACF,CAAC;CAED,MAAM,iBAAiB,WAAW,UAAU;CAC5C,OAAO,eAAe,gBAAgB,oBAAoB;EACxD,WAAW,iBAAiB;EAC5B,YAAY;EACZ,cAAc;CAChB,CAAC;CAED,OAAO,EACL,eACF;AACF"}
|