@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":"createFormValidation.jsx","names":[],"sources":["../../src/form/createFormValidation.ts"],"sourcesContent":["/**\n * createFormValidation hook for solidaria\n *\n * Connects form validation state to native HTML form validation.\n * Handles the invalid event, form reset, and focus management.\n *\n * Port of react-aria's useFormValidation.\n */\n\nimport { type Accessor, createEffect, onCleanup } from \"solid-js\";\nimport { type FormValidationState, type ValidationResult } from \"@proyecto-viviana/solid-stately\";\nimport { setInteractionModality } from \"../interactions/createInteractionModality\";\n\nexport type ValidatableElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nexport type ValidationBehavior = \"aria\" | \"native\";\n\nexport interface FormValidationProps {\n /** Validation behavior: 'aria' for realtime, 'native' for on submit. */\n validationBehavior?: ValidationBehavior;\n /** Custom focus function to call on validation error. */\n focus?: () => void;\n}\n\nfunction getValidity(input: ValidatableElement): ValidityState {\n // Create a snapshot of the validity state (the native object is live)\n const validity = input.validity;\n return {\n badInput: validity.badInput,\n customError: validity.customError,\n patternMismatch: validity.patternMismatch,\n rangeOverflow: validity.rangeOverflow,\n rangeUnderflow: validity.rangeUnderflow,\n stepMismatch: validity.stepMismatch,\n tooLong: validity.tooLong,\n tooShort: validity.tooShort,\n typeMismatch: validity.typeMismatch,\n valueMissing: validity.valueMissing,\n valid: validity.valid,\n };\n}\n\nfunction getNativeValidity(input: ValidatableElement): ValidationResult {\n return {\n isInvalid: !input.validity.valid,\n validationDetails: getValidity(input),\n validationErrors: input.validationMessage ? [input.validationMessage] : [],\n };\n}\n\nfunction getFirstInvalidInput(form: HTMLFormElement): ValidatableElement | null {\n for (let i = 0; i < form.elements.length; i++) {\n const element = form.elements[i] as ValidatableElement;\n if (!element.validity.valid) {\n return element;\n }\n }\n return null;\n}\n\n/**\n * Connects form validation state to a native HTML form input.\n *\n * This hook:\n * - Sets custom validity on the native input based on validation state\n * - Handles the 'invalid' event to commit validation and focus the first invalid input\n * - Handles form reset to clear validation state\n * - Handles input change to commit validation\n *\n * @example\n * ```tsx\n * function MyTextField(props) {\n * let inputRef: HTMLInputElement | undefined;\n *\n * const validationState = createFormValidationState({\n * value: props.value,\n * validate: props.validate,\n * validationBehavior: 'native',\n * });\n *\n * createFormValidation(\n * { validationBehavior: 'native' },\n * validationState,\n * () => inputRef\n * );\n *\n * return (\n * <input\n * ref={inputRef}\n * value={props.value}\n * aria-invalid={validationState.displayValidation().isInvalid || undefined}\n * />\n * );\n * }\n * ```\n */\nexport function createFormValidation(\n props: FormValidationProps,\n state: FormValidationState,\n ref: Accessor<ValidatableElement | undefined>,\n): void {\n const validationBehavior = () => props.validationBehavior ?? \"aria\";\n const focus = () => props.focus;\n\n // Track whether we should ignore form reset (for React-like programmatic resets)\n let isIgnoredReset = false;\n\n // Set custom validity on the native input\n createEffect(() => {\n const input = ref();\n // `'setCustomValidity' in input` guards refs that aren't true form elements\n // (e.g. a custom element), matching upstream useFormValidation.\n if (\n validationBehavior() === \"native\" &&\n input &&\n \"setCustomValidity\" in input &&\n !input.disabled\n ) {\n const realtimeValidation = state.realtimeValidation();\n const errorMessage = realtimeValidation.isInvalid\n ? realtimeValidation.validationErrors.join(\" \") || \"Invalid value.\"\n : \"\";\n input.setCustomValidity(errorMessage);\n\n // Prevent default tooltip for validation message\n if (!input.hasAttribute(\"title\")) {\n input.title = \"\";\n }\n\n // Update validation with native validity if not already invalid\n if (!realtimeValidation.isInvalid) {\n state.updateValidation(getNativeValidity(input));\n }\n }\n });\n\n // Set up event listeners\n createEffect(() => {\n const input = ref();\n if (!input) {\n return;\n }\n\n const form = input.form;\n\n // Handle invalid event\n const onInvalid = (e: Event) => {\n // Only commit validation if we are not already displaying one\n if (!state.displayValidation().isInvalid) {\n state.commitValidation();\n }\n\n // Auto focus the first invalid input in a form\n if (!e.defaultPrevented && form && getFirstInvalidInput(form) === input) {\n const focusFn = focus();\n if (focusFn) {\n focusFn();\n } else {\n input.focus();\n }\n // Always show focus ring\n setInteractionModality(\"keyboard\");\n }\n\n // Prevent default browser error UI\n e.preventDefault();\n };\n\n // Handle change event\n const onChange = () => {\n state.commitValidation();\n };\n\n // Handle form reset\n const onReset = () => {\n if (!isIgnoredReset) {\n state.resetValidation();\n }\n };\n\n // Patch form.reset to detect programmatic resets\n let originalReset: (() => void) | undefined;\n if (form) {\n originalReset = form.reset.bind(form);\n form.reset = () => {\n // Ignore programmatic resets outside user events\n isIgnoredReset =\n !window.event ||\n (window.event.type === \"message\" && window.event.target instanceof MessagePort);\n originalReset?.();\n isIgnoredReset = false;\n };\n }\n\n input.addEventListener(\"invalid\", onInvalid);\n input.addEventListener(\"change\", onChange);\n form?.addEventListener(\"reset\", onReset);\n\n onCleanup(() => {\n input.removeEventListener(\"invalid\", onInvalid);\n input.removeEventListener(\"change\", onChange);\n form?.removeEventListener(\"reset\", onReset);\n if (form && originalReset) {\n form.reset = originalReset;\n }\n });\n });\n}\n"],"mappings":";;;;;;;;;;;AAwBA,SAAS,YAAY,OAA0C;CAE7D,MAAM,WAAW,MAAM;CACvB,OAAO;EACL,UAAU,SAAS;EACnB,aAAa,SAAS;EACtB,iBAAiB,SAAS;EAC1B,eAAe,SAAS;EACxB,gBAAgB,SAAS;EACzB,cAAc,SAAS;EACvB,SAAS,SAAS;EAClB,UAAU,SAAS;EACnB,cAAc,SAAS;EACvB,cAAc,SAAS;EACvB,OAAO,SAAS;CAClB;AACF;AAEA,SAAS,kBAAkB,OAA6C;CACtE,OAAO;EACL,WAAW,CAAC,MAAM,SAAS;EAC3B,mBAAmB,YAAY,KAAK;EACpC,kBAAkB,MAAM,oBAAoB,CAAC,MAAM,iBAAiB,IAAI,CAAC;CAC3E;AACF;AAEA,SAAS,qBAAqB,MAAkD;CAC9E,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;EAC7C,MAAM,UAAU,KAAK,SAAS;EAC9B,IAAI,CAAC,QAAQ,SAAS,OACpB,OAAO;CAEX;CACA,OAAO;AACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,qBACd,OACA,OACA,KACM;CACN,MAAM,2BAA2B,MAAM,sBAAsB;CAC7D,MAAM,cAAc,MAAM;CAG1B,IAAI,iBAAiB;CAGrB,mBAAmB;EACjB,MAAM,QAAQ,IAAI;EAGlB,IACE,mBAAmB,MAAM,YACzB,SACA,uBAAuB,SACvB,CAAC,MAAM,UACP;GACA,MAAM,qBAAqB,MAAM,mBAAmB;GACpD,MAAM,eAAe,mBAAmB,YACpC,mBAAmB,iBAAiB,KAAK,GAAG,KAAK,mBACjD;GACJ,MAAM,kBAAkB,YAAY;GAGpC,IAAI,CAAC,MAAM,aAAa,OAAO,GAC7B,MAAM,QAAQ;GAIhB,IAAI,CAAC,mBAAmB,WACtB,MAAM,iBAAiB,kBAAkB,KAAK,CAAC;EAEnD;CACF,CAAC;CAGD,mBAAmB;EACjB,MAAM,QAAQ,IAAI;EAClB,IAAI,CAAC,OACH;EAGF,MAAM,OAAO,MAAM;EAGnB,MAAM,aAAa,MAAa;GAE9B,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC,WAC7B,MAAM,iBAAiB;GAIzB,IAAI,CAAC,EAAE,oBAAoB,QAAQ,qBAAqB,IAAI,MAAM,OAAO;IACvE,MAAM,UAAU,MAAM;IACtB,IAAI,SACF,QAAQ;SAER,MAAM,MAAM;IAGd,uBAAuB,UAAU;GACnC;GAGA,EAAE,eAAe;EACnB;EAGA,MAAM,iBAAiB;GACrB,MAAM,iBAAiB;EACzB;EAGA,MAAM,gBAAgB;GACpB,IAAI,CAAC,gBACH,MAAM,gBAAgB;EAE1B;EAGA,IAAI;EACJ,IAAI,MAAM;GACR,gBAAgB,KAAK,MAAM,KAAK,IAAI;GACpC,KAAK,cAAc;IAEjB,iBACE,CAAC,OAAO,SACP,OAAO,MAAM,SAAS,aAAa,OAAO,MAAM,kBAAkB;IACrE,gBAAgB;IAChB,iBAAiB;GACnB;EACF;EAEA,MAAM,iBAAiB,WAAW,SAAS;EAC3C,MAAM,iBAAiB,UAAU,QAAQ;EACzC,MAAM,iBAAiB,SAAS,OAAO;EAEvC,gBAAgB;GACd,MAAM,oBAAoB,WAAW,SAAS;GAC9C,MAAM,oBAAoB,UAAU,QAAQ;GAC5C,MAAM,oBAAoB,SAAS,OAAO;GAC1C,IAAI,QAAQ,eACV,KAAK,QAAQ;EAEjB,CAAC;CACH,CAAC;AACH"}
|
|
1
|
+
{"version":3,"file":"createFormValidation.jsx","names":[],"sources":["../../src/form/createFormValidation.ts"],"sourcesContent":["/*\n * Copyright 2023 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/form/useFormValidation.ts\n\n/**\n * createFormValidation hook for solidaria\n *\n * Connects form validation state to native HTML form validation.\n * Handles the invalid event, form reset, and focus management.\n *\n * Port of react-aria's useFormValidation.\n */\n\nimport { createEffect } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport { type FormValidationState, type ValidationResult } from \"@proyecto-viviana/solid-stately\";\nimport { setInteractionModality } from \"../interactions/createInteractionModality\";\nimport { followRef } from \"../utils/refs\";\n\nexport type ValidatableElement = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;\n\nexport type ValidationBehavior = \"aria\" | \"native\";\n\nexport interface FormValidationProps {\n /** Validation behavior: 'aria' for realtime, 'native' for on submit. */\n validationBehavior?: ValidationBehavior;\n /** Custom focus function to call on validation error. */\n focus?: () => void;\n}\n\nfunction getValidity(input: ValidatableElement): ValidityState {\n // Create a snapshot of the validity state (the native object is live)\n const validity = input.validity;\n return {\n badInput: validity.badInput,\n customError: validity.customError,\n patternMismatch: validity.patternMismatch,\n rangeOverflow: validity.rangeOverflow,\n rangeUnderflow: validity.rangeUnderflow,\n stepMismatch: validity.stepMismatch,\n tooLong: validity.tooLong,\n tooShort: validity.tooShort,\n typeMismatch: validity.typeMismatch,\n valueMissing: validity.valueMissing,\n valid: validity.valid,\n };\n}\n\nfunction getNativeValidity(input: ValidatableElement): ValidationResult {\n return {\n isInvalid: !input.validity.valid,\n validationDetails: getValidity(input),\n validationErrors: input.validationMessage ? [input.validationMessage] : [],\n };\n}\n\nfunction getFirstInvalidInput(form: HTMLFormElement): ValidatableElement | null {\n for (let i = 0; i < form.elements.length; i++) {\n const element = form.elements[i] as ValidatableElement;\n if (!element.validity.valid) {\n return element;\n }\n }\n return null;\n}\n\n/**\n * Connects form validation state to a native HTML form input.\n *\n * This hook:\n * - Sets custom validity on the native input based on validation state\n * - Handles the 'invalid' event to commit validation and focus the first invalid input\n * - Handles form reset to clear validation state\n * - Handles input change to commit validation\n *\n * @example\n * ```tsx\n * function MyTextField(props) {\n * let inputRef: HTMLInputElement | undefined;\n *\n * const validationState = createFormValidationState({\n * value: props.value,\n * validate: props.validate,\n * validationBehavior: 'native',\n * });\n *\n * createFormValidation(\n * { validationBehavior: 'native' },\n * validationState,\n * () => inputRef\n * );\n *\n * return (\n * <input\n * ref={inputRef}\n * value={props.value}\n * aria-invalid={validationState.displayValidation().isInvalid || undefined}\n * />\n * );\n * }\n * ```\n */\nexport function createFormValidation(\n props: FormValidationProps,\n state: FormValidationState,\n ref: Accessor<ValidatableElement | undefined>,\n): void {\n const validationBehavior = () => props.validationBehavior ?? \"aria\";\n const focus = () => props.focus;\n const inputRef = followRef(ref);\n\n // Track whether we should ignore form reset (for React-like programmatic resets)\n let isIgnoredReset = false;\n\n // Set custom validity on the native input. Writes (`updateValidation`) must\n // run in apply — createTrackedEffect is an owned scope and rejects them.\n createEffect(\n () => {\n const input = inputRef();\n const realtimeValidation = state.realtimeValidation();\n return {\n input,\n behavior: validationBehavior(),\n isInvalid: realtimeValidation.isInvalid,\n errorMessage: realtimeValidation.isInvalid\n ? realtimeValidation.validationErrors.join(\" \") || \"Invalid value.\"\n : \"\",\n disabled: !!input?.disabled,\n };\n },\n ({ input, behavior, isInvalid, errorMessage, disabled }) => {\n // `'setCustomValidity' in input` guards refs that aren't true form elements\n // (e.g. a custom element), matching upstream useFormValidation.\n if (behavior === \"native\" && input && \"setCustomValidity\" in input && !disabled) {\n // Prevent default tooltip for validation message\n if (!input.hasAttribute(\"title\")) {\n input.title = \"\";\n }\n\n if (isInvalid) {\n input.setCustomValidity(errorMessage);\n } else {\n // Do not wipe a custom error owned by native constraint hooks\n // (`createNativeValidation`) before reading validity.\n state.updateValidation(getNativeValidity(input));\n if (input.validity.valid) {\n input.setCustomValidity(\"\");\n }\n }\n }\n },\n );\n\n // Set up event listeners\n createEffect(\n () => inputRef(),\n (input) => {\n if (!input) {\n return;\n }\n\n // Effect-time `input.form` is null when the control is associated later\n // via `form=\"…\"`. Keep it only for the RAC `form.reset` monkey-patch\n // (programmatic React-style resets). The reset *listener* reads the live\n // association, matching #466 / #467.\n const form = input.form;\n\n // Handle invalid event\n const onInvalid = (e: Event) => {\n // Only commit validation if we are not already displaying one\n if (!state.displayValidation().isInvalid) {\n state.commitValidation();\n }\n\n // RAC reads `ref.current?.form` at event time (`useFormValidation.ts:75`).\n // A `form` attribute associated after mount (D14's injected probe form)\n // leaves the effect-time `input.form` null; using the live association\n // is what focuses TextField / SearchField / Checkbox after requestSubmit.\n const associatedForm = input.form;\n if (\n !e.defaultPrevented &&\n associatedForm &&\n getFirstInvalidInput(associatedForm) === input\n ) {\n const focusFn = focus();\n if (focusFn) {\n focusFn();\n } else {\n input.focus();\n }\n // Always show focus ring\n setInteractionModality(\"keyboard\");\n }\n\n // Prevent default browser error UI\n e.preventDefault();\n };\n\n // Handle change event\n const onChange = () => {\n state.commitValidation();\n };\n\n // Handle form reset. Read `input.form` at event time so a late `form=\"\"`\n // still clears displayValidation (D14-style association after mount).\n const onReset = (e: Event) => {\n if (input.form && e.target === input.form && !isIgnoredReset) {\n state.resetValidation();\n }\n };\n\n // Patch form.reset to detect programmatic resets\n let originalReset: (() => void) | undefined;\n if (form) {\n originalReset = form.reset.bind(form);\n form.reset = () => {\n // Ignore programmatic resets outside user events\n isIgnoredReset =\n !window.event ||\n (window.event.type === \"message\" && window.event.target instanceof MessagePort);\n originalReset?.();\n isIgnoredReset = false;\n };\n }\n\n input.addEventListener(\"invalid\", onInvalid);\n input.addEventListener(\"change\", onChange);\n document.addEventListener(\"reset\", onReset);\n\n return () => {\n input.removeEventListener(\"invalid\", onInvalid);\n input.removeEventListener(\"change\", onChange);\n document.removeEventListener(\"reset\", onReset);\n if (form && originalReset) {\n form.reset = originalReset;\n }\n };\n },\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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/useHover.ts
|
|
3
13
|
import { s as createGlobalListeners } from "./utils.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
14
|
+
import { t as access } from "./reactivity.js";
|
|
15
|
+
import { v as nodeContains } from "./dom.js";
|
|
16
|
+
import { r as isTestEnv } from "./env.js";
|
|
17
|
+
import { createEffect, createSignal, createTrackedEffect } from "solid-js";
|
|
6
18
|
//#region src/interactions/createHover.ts
|
|
7
19
|
/**
|
|
8
20
|
* createHover hook for Solidaria
|
|
@@ -18,7 +30,7 @@ function setGlobalIgnoreEmulatedMouseEvents() {
|
|
|
18
30
|
globalIgnoreEmulatedMouseEvents = true;
|
|
19
31
|
setTimeout(() => {
|
|
20
32
|
globalIgnoreEmulatedMouseEvents = false;
|
|
21
|
-
},
|
|
33
|
+
}, 500);
|
|
22
34
|
}
|
|
23
35
|
function handleGlobalPointerEvent(e) {
|
|
24
36
|
if (e.pointerType === "touch") setGlobalIgnoreEmulatedMouseEvents();
|
|
@@ -50,11 +62,16 @@ function createHover(props = {}) {
|
|
|
50
62
|
pointerType: "",
|
|
51
63
|
target: null
|
|
52
64
|
};
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
createTrackedEffect(() => {
|
|
66
|
+
const _s2Cleanups = [];
|
|
67
|
+
const cleanup = setupGlobalTouchEvents();
|
|
68
|
+
_s2Cleanups.push(cleanup);
|
|
69
|
+
return () => {
|
|
70
|
+
for (const c of _s2Cleanups) c();
|
|
71
|
+
};
|
|
55
72
|
});
|
|
56
|
-
createEffect(() => {
|
|
57
|
-
if (
|
|
73
|
+
createEffect(() => !!getProps().isDisabled, (isDisabled) => {
|
|
74
|
+
if (isDisabled && state.isHovered) triggerHoverEnd(state.target, state.pointerType);
|
|
58
75
|
});
|
|
59
76
|
function triggerHoverStart(target, pointerType, eventTarget) {
|
|
60
77
|
const p = getProps();
|
|
@@ -64,7 +81,7 @@ function createHover(props = {}) {
|
|
|
64
81
|
state.isHovered = true;
|
|
65
82
|
state.target = target;
|
|
66
83
|
addGlobalListener("pointerover", (event) => {
|
|
67
|
-
if (state.isHovered && state.target && !nodeContains(state.target, event.target)) triggerHoverEnd(
|
|
84
|
+
if (state.isHovered && state.target && !nodeContains(state.target, event.target)) triggerHoverEnd(state.target, event.pointerType);
|
|
68
85
|
}, { capture: true });
|
|
69
86
|
p.onHoverStart?.({
|
|
70
87
|
type: "hoverstart",
|
|
@@ -90,38 +107,35 @@ function createHover(props = {}) {
|
|
|
90
107
|
setIsHovered(false);
|
|
91
108
|
}
|
|
92
109
|
return {
|
|
93
|
-
hoverProps:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
})(),
|
|
110
|
+
hoverProps: typeof PointerEvent !== "undefined" ? {
|
|
111
|
+
onPointerEnter: (e) => {
|
|
112
|
+
if (globalIgnoreEmulatedMouseEvents && e.pointerType === "mouse") return;
|
|
113
|
+
if (e.pointerType === "touch") return;
|
|
114
|
+
triggerHoverStart(e.currentTarget, e.pointerType, e.target);
|
|
115
|
+
},
|
|
116
|
+
onPointerLeave: (e) => {
|
|
117
|
+
if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, e.pointerType);
|
|
118
|
+
},
|
|
119
|
+
onPointerOver: (e) => {
|
|
120
|
+
if (globalIgnoreEmulatedMouseEvents && e.pointerType === "mouse") return;
|
|
121
|
+
if (e.pointerType === "touch") return;
|
|
122
|
+
triggerHoverStart(e.currentTarget, e.pointerType, e.target);
|
|
123
|
+
},
|
|
124
|
+
onPointerOut: (e) => {
|
|
125
|
+
if (!getProps().isDisabled && e.currentTarget.contains(e.target) && !nodeContains(e.currentTarget, e.relatedTarget)) triggerHoverEnd(e.currentTarget, e.pointerType);
|
|
126
|
+
}
|
|
127
|
+
} : {
|
|
128
|
+
onTouchStart: () => {
|
|
129
|
+
state.ignoreEmulatedMouseEvents = true;
|
|
130
|
+
},
|
|
131
|
+
onMouseEnter: (e) => {
|
|
132
|
+
if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) triggerHoverStart(e.currentTarget, "mouse", e.target);
|
|
133
|
+
state.ignoreEmulatedMouseEvents = false;
|
|
134
|
+
},
|
|
135
|
+
onMouseLeave: (e) => {
|
|
136
|
+
if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, "mouse");
|
|
137
|
+
}
|
|
138
|
+
},
|
|
125
139
|
isHovered
|
|
126
140
|
};
|
|
127
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createHover.js","names":[],"sources":["../../src/interactions/createHover.ts"],"sourcesContent":["/**\n * createHover hook for Solidaria\n *\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n *\n * Port of @react-aria/interactions useHover.\n */\n\nimport {\n type JSX,\n type Accessor,\n createSignal,\n createEffect,\n onCleanup,\n createMemo,\n} from \"solid-js\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isTestEnv } from \"../utils/env\";\nimport { createGlobalListeners, nodeContains } from \"../utils\";\n\nexport interface HoverEvent {\n /** The type of hover event being fired. */\n type: \"hoverstart\" | \"hoverend\";\n /** The pointer type that triggered the hover event. */\n pointerType: \"mouse\" | \"pen\";\n /** The target element of the hover event. */\n target: Element;\n}\n\nexport interface HoverEvents {\n /** Handler called when the hover starts. */\n onHoverStart?: (e: HoverEvent) => void;\n /** Handler called when the hover ends. */\n onHoverEnd?: (e: HoverEvent) => void;\n /** Handler called when the hover state changes. */\n onHoverChange?: (isHovering: boolean) => void;\n}\n\nexport interface CreateHoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean;\n}\n\n/** Event handler props returned by createHover - safe to spread on any element */\nexport type HoverProps = Pick<\n JSX.HTMLAttributes<HTMLElement>,\n | \"onPointerEnter\"\n | \"onPointerLeave\"\n | \"onPointerOver\"\n | \"onPointerOut\"\n | \"onMouseEnter\"\n | \"onMouseLeave\"\n>;\n\nexport interface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: HoverProps;\n /** Whether the element is currently hovered. */\n isHovered: Accessor<boolean>;\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n setTimeout(() => {\n globalIgnoreEmulatedMouseEvents = false;\n }, 50);\n}\n\nfunction handleGlobalPointerEvent(e: PointerEvent) {\n if (e.pointerType === \"touch\") {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === \"undefined\") {\n return () => {};\n }\n\n if (hoverCount === 0) {\n if (typeof PointerEvent !== \"undefined\") {\n document.addEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.addEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n }\n\n hoverCount++;\n return () => {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n\n if (typeof PointerEvent !== \"undefined\") {\n document.removeEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.removeEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n };\n}\n\n/**\n * Handles pointer hover interactions for an element.\n */\nexport function createHover(props: MaybeAccessor<CreateHoverProps> = {}): HoverResult {\n const getProps = () => access(props);\n const [isHovered, setIsHovered] = createSignal(false);\n const { addGlobalListener, removeAllGlobalListeners } = createGlobalListeners();\n\n // Track internal hover state\n let state = {\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n pointerType: \"\" as \"mouse\" | \"pen\" | \"\",\n target: null as Element | null,\n };\n\n // Setup global touch events\n createEffect(() => {\n const cleanup = setupGlobalTouchEvents();\n onCleanup(cleanup);\n });\n\n // Reset hover when disabled\n createEffect(() => {\n const p = getProps();\n if (p.isDisabled && state.isHovered) {\n triggerHoverEnd(state.target as Element, state.pointerType as \"mouse\" | \"pen\");\n }\n });\n\n function triggerHoverStart(\n target: Element,\n pointerType: \"mouse\" | \"pen\",\n eventTarget: Element | null,\n ) {\n const p = getProps();\n state.pointerType = pointerType;\n\n const isOverTarget = eventTarget instanceof Element ? target.contains(eventTarget) : true;\n if (p.isDisabled || state.isHovered || !isOverTarget) {\n return;\n }\n\n state.isHovered = true;\n state.target = target;\n\n addGlobalListener(\n \"pointerover\",\n (event: PointerEvent) => {\n if (\n state.isHovered &&\n state.target &&\n !nodeContains(state.target, event.target as Element)\n ) {\n triggerHoverEnd(event.target as Element, event.pointerType as \"mouse\" | \"pen\");\n }\n },\n { capture: true },\n );\n\n p.onHoverStart?.({\n type: \"hoverstart\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(true);\n setIsHovered(true);\n }\n\n function triggerHoverEnd(target: Element | null, pointerType: \"mouse\" | \"pen\") {\n const p = getProps();\n state.pointerType = \"\";\n state.target = null;\n\n if (!state.isHovered || !target) {\n return;\n }\n\n state.isHovered = false;\n removeAllGlobalListeners();\n\n p.onHoverEnd?.({\n type: \"hoverend\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(false);\n setIsHovered(false);\n }\n\n const hoverProps = createMemo<JSX.HTMLAttributes<HTMLElement>>(() => {\n if (typeof PointerEvent !== \"undefined\") {\n return {\n onPointerEnter: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerLeave: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n onPointerOver: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerOut: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n };\n }\n\n // Fallback for environments without PointerEvent (mainly tests)\n return {\n onTouchStart: () => {\n state.ignoreEmulatedMouseEvents = true;\n },\n onMouseEnter: (e: MouseEvent) => {\n if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n triggerHoverStart(e.currentTarget as Element, \"mouse\", e.target as Element);\n }\n state.ignoreEmulatedMouseEvents = false;\n },\n onMouseLeave: (e: MouseEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, \"mouse\");\n }\n },\n };\n });\n\n return {\n hoverProps: hoverProps() as HoverProps,\n isHovered,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createHover.js","names":[],"sources":["../../src/interactions/createHover.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/useHover.ts\n\n/**\n * createHover hook for Solidaria\n *\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n *\n * Port of @react-aria/interactions useHover.\n */\n\nimport { createSignal, createEffect, createTrackedEffect } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isTestEnv } from \"../utils/env\";\nimport { createGlobalListeners, nodeContains } from \"../utils\";\n\nexport interface HoverEvent {\n /** The type of hover event being fired. */\n type: \"hoverstart\" | \"hoverend\";\n /** The pointer type that triggered the hover event. */\n pointerType: \"mouse\" | \"pen\";\n /** The target element of the hover event. */\n target: Element;\n}\n\nexport interface HoverEvents {\n /** Handler called when the hover starts. */\n onHoverStart?: (e: HoverEvent) => void;\n /** Handler called when the hover ends. */\n onHoverEnd?: (e: HoverEvent) => void;\n /** Handler called when the hover state changes. */\n onHoverChange?: (isHovering: boolean) => void;\n}\n\nexport interface CreateHoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean;\n}\n\n/** Event handler props returned by createHover - safe to spread on any element */\nexport type HoverProps = Pick<\n JSX.HTMLAttributes<HTMLElement>,\n | \"onPointerEnter\"\n | \"onPointerLeave\"\n | \"onPointerOver\"\n | \"onPointerOut\"\n | \"onMouseEnter\"\n | \"onMouseLeave\"\n | \"onTouchStart\"\n>;\n\nexport interface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: HoverProps;\n /** Whether the element is currently hovered. */\n isHovered: Accessor<boolean>;\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n setTimeout(() => {\n globalIgnoreEmulatedMouseEvents = false;\n }, 500);\n}\n\nfunction handleGlobalPointerEvent(e: PointerEvent) {\n if (e.pointerType === \"touch\") {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === \"undefined\") {\n return () => {};\n }\n\n if (hoverCount === 0) {\n if (typeof PointerEvent !== \"undefined\") {\n document.addEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.addEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n }\n\n hoverCount++;\n return () => {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n\n if (typeof PointerEvent !== \"undefined\") {\n document.removeEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.removeEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n };\n}\n\n/**\n * Handles pointer hover interactions for an element.\n */\nexport function createHover(props: MaybeAccessor<CreateHoverProps> = {}): HoverResult {\n const getProps = () => access(props);\n const [isHovered, setIsHovered] = createSignal(false);\n const { addGlobalListener, removeAllGlobalListeners } = createGlobalListeners();\n\n // Track internal hover state\n let state = {\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n pointerType: \"\" as \"mouse\" | \"pen\" | \"\",\n target: null as Element | null,\n };\n\n // Setup global touch events\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n const cleanup = setupGlobalTouchEvents();\n _s2Cleanups.push(cleanup);\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n // Reset hover when disabled\n createEffect(\n () => !!getProps().isDisabled,\n (isDisabled) => {\n if (isDisabled && state.isHovered) {\n triggerHoverEnd(state.target as Element, state.pointerType as \"mouse\" | \"pen\");\n }\n },\n );\n\n function triggerHoverStart(\n target: Element,\n pointerType: \"mouse\" | \"pen\",\n eventTarget: Element | null,\n ) {\n const p = getProps();\n state.pointerType = pointerType;\n\n const isOverTarget = eventTarget instanceof Element ? target.contains(eventTarget) : true;\n if (p.isDisabled || state.isHovered || !isOverTarget) {\n return;\n }\n\n state.isHovered = true;\n state.target = target;\n\n addGlobalListener(\n \"pointerover\",\n (event: PointerEvent) => {\n if (\n state.isHovered &&\n state.target &&\n !nodeContains(state.target, event.target as Element)\n ) {\n triggerHoverEnd(state.target, event.pointerType as \"mouse\" | \"pen\");\n }\n },\n { capture: true },\n );\n\n p.onHoverStart?.({\n type: \"hoverstart\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(true);\n setIsHovered(true);\n }\n\n function triggerHoverEnd(target: Element | null, pointerType: \"mouse\" | \"pen\") {\n const p = getProps();\n state.pointerType = \"\";\n state.target = null;\n\n if (!state.isHovered || !target) {\n return;\n }\n\n state.isHovered = false;\n removeAllGlobalListeners();\n\n p.onHoverEnd?.({\n type: \"hoverend\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(false);\n setIsHovered(false);\n }\n\n // Handlers read getProps() live; do not wrap this object in a memo/getter.\n // A getter that reads the memo on destructure (`const { hoverProps } = createHover()`)\n // is STRICT_READ_UNTRACKED inside HMR's untrack(component, \"<Name>\").\n const hoverProps: HoverProps =\n typeof PointerEvent !== \"undefined\"\n ? {\n onPointerEnter: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerLeave: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n onPointerOver: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerOut: (e: PointerEvent) => {\n const p = getProps();\n if (\n !p.isDisabled &&\n (e.currentTarget as Element).contains(e.target as Element) &&\n !nodeContains(e.currentTarget as Element, e.relatedTarget as Node | null)\n ) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n }\n : {\n onTouchStart: () => {\n state.ignoreEmulatedMouseEvents = true;\n },\n onMouseEnter: (e: MouseEvent) => {\n if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n triggerHoverStart(e.currentTarget as Element, \"mouse\", e.target as Element);\n }\n state.ignoreEmulatedMouseEvents = false;\n },\n onMouseLeave: (e: MouseEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, \"mouse\");\n }\n },\n };\n\n return {\n hoverProps,\n isHovered,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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/useHover.ts
|
|
3
13
|
import { s as createGlobalListeners } from "./utils.jsx";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
14
|
+
import { t as access } from "./reactivity.jsx";
|
|
15
|
+
import { v as nodeContains } from "./dom.jsx";
|
|
16
|
+
import { r as isTestEnv } from "./env.jsx";
|
|
17
|
+
import { createEffect, createSignal, createTrackedEffect } from "solid-js";
|
|
6
18
|
//#region src/interactions/createHover.ts
|
|
7
19
|
/**
|
|
8
20
|
* createHover hook for Solidaria
|
|
@@ -18,7 +30,7 @@ function setGlobalIgnoreEmulatedMouseEvents() {
|
|
|
18
30
|
globalIgnoreEmulatedMouseEvents = true;
|
|
19
31
|
setTimeout(() => {
|
|
20
32
|
globalIgnoreEmulatedMouseEvents = false;
|
|
21
|
-
},
|
|
33
|
+
}, 500);
|
|
22
34
|
}
|
|
23
35
|
function handleGlobalPointerEvent(e) {
|
|
24
36
|
if (e.pointerType === "touch") setGlobalIgnoreEmulatedMouseEvents();
|
|
@@ -50,11 +62,16 @@ function createHover(props = {}) {
|
|
|
50
62
|
pointerType: "",
|
|
51
63
|
target: null
|
|
52
64
|
};
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
createTrackedEffect(() => {
|
|
66
|
+
const _s2Cleanups = [];
|
|
67
|
+
const cleanup = setupGlobalTouchEvents();
|
|
68
|
+
_s2Cleanups.push(cleanup);
|
|
69
|
+
return () => {
|
|
70
|
+
for (const c of _s2Cleanups) c();
|
|
71
|
+
};
|
|
55
72
|
});
|
|
56
|
-
createEffect(() => {
|
|
57
|
-
if (
|
|
73
|
+
createEffect(() => !!getProps().isDisabled, (isDisabled) => {
|
|
74
|
+
if (isDisabled && state.isHovered) triggerHoverEnd(state.target, state.pointerType);
|
|
58
75
|
});
|
|
59
76
|
function triggerHoverStart(target, pointerType, eventTarget) {
|
|
60
77
|
const p = getProps();
|
|
@@ -64,7 +81,7 @@ function createHover(props = {}) {
|
|
|
64
81
|
state.isHovered = true;
|
|
65
82
|
state.target = target;
|
|
66
83
|
addGlobalListener("pointerover", (event) => {
|
|
67
|
-
if (state.isHovered && state.target && !nodeContains(state.target, event.target)) triggerHoverEnd(
|
|
84
|
+
if (state.isHovered && state.target && !nodeContains(state.target, event.target)) triggerHoverEnd(state.target, event.pointerType);
|
|
68
85
|
}, { capture: true });
|
|
69
86
|
p.onHoverStart?.({
|
|
70
87
|
type: "hoverstart",
|
|
@@ -90,38 +107,35 @@ function createHover(props = {}) {
|
|
|
90
107
|
setIsHovered(false);
|
|
91
108
|
}
|
|
92
109
|
return {
|
|
93
|
-
hoverProps:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
};
|
|
124
|
-
})(),
|
|
110
|
+
hoverProps: typeof PointerEvent !== "undefined" ? {
|
|
111
|
+
onPointerEnter: (e) => {
|
|
112
|
+
if (globalIgnoreEmulatedMouseEvents && e.pointerType === "mouse") return;
|
|
113
|
+
if (e.pointerType === "touch") return;
|
|
114
|
+
triggerHoverStart(e.currentTarget, e.pointerType, e.target);
|
|
115
|
+
},
|
|
116
|
+
onPointerLeave: (e) => {
|
|
117
|
+
if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, e.pointerType);
|
|
118
|
+
},
|
|
119
|
+
onPointerOver: (e) => {
|
|
120
|
+
if (globalIgnoreEmulatedMouseEvents && e.pointerType === "mouse") return;
|
|
121
|
+
if (e.pointerType === "touch") return;
|
|
122
|
+
triggerHoverStart(e.currentTarget, e.pointerType, e.target);
|
|
123
|
+
},
|
|
124
|
+
onPointerOut: (e) => {
|
|
125
|
+
if (!getProps().isDisabled && e.currentTarget.contains(e.target) && !nodeContains(e.currentTarget, e.relatedTarget)) triggerHoverEnd(e.currentTarget, e.pointerType);
|
|
126
|
+
}
|
|
127
|
+
} : {
|
|
128
|
+
onTouchStart: () => {
|
|
129
|
+
state.ignoreEmulatedMouseEvents = true;
|
|
130
|
+
},
|
|
131
|
+
onMouseEnter: (e) => {
|
|
132
|
+
if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) triggerHoverStart(e.currentTarget, "mouse", e.target);
|
|
133
|
+
state.ignoreEmulatedMouseEvents = false;
|
|
134
|
+
},
|
|
135
|
+
onMouseLeave: (e) => {
|
|
136
|
+
if (!getProps().isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e.currentTarget, "mouse");
|
|
137
|
+
}
|
|
138
|
+
},
|
|
125
139
|
isHovered
|
|
126
140
|
};
|
|
127
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createHover.jsx","names":[],"sources":["../../src/interactions/createHover.ts"],"sourcesContent":["/**\n * createHover hook for Solidaria\n *\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n *\n * Port of @react-aria/interactions useHover.\n */\n\nimport {\n type JSX,\n type Accessor,\n createSignal,\n createEffect,\n onCleanup,\n createMemo,\n} from \"solid-js\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isTestEnv } from \"../utils/env\";\nimport { createGlobalListeners, nodeContains } from \"../utils\";\n\nexport interface HoverEvent {\n /** The type of hover event being fired. */\n type: \"hoverstart\" | \"hoverend\";\n /** The pointer type that triggered the hover event. */\n pointerType: \"mouse\" | \"pen\";\n /** The target element of the hover event. */\n target: Element;\n}\n\nexport interface HoverEvents {\n /** Handler called when the hover starts. */\n onHoverStart?: (e: HoverEvent) => void;\n /** Handler called when the hover ends. */\n onHoverEnd?: (e: HoverEvent) => void;\n /** Handler called when the hover state changes. */\n onHoverChange?: (isHovering: boolean) => void;\n}\n\nexport interface CreateHoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean;\n}\n\n/** Event handler props returned by createHover - safe to spread on any element */\nexport type HoverProps = Pick<\n JSX.HTMLAttributes<HTMLElement>,\n | \"onPointerEnter\"\n | \"onPointerLeave\"\n | \"onPointerOver\"\n | \"onPointerOut\"\n | \"onMouseEnter\"\n | \"onMouseLeave\"\n>;\n\nexport interface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: HoverProps;\n /** Whether the element is currently hovered. */\n isHovered: Accessor<boolean>;\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n setTimeout(() => {\n globalIgnoreEmulatedMouseEvents = false;\n }, 50);\n}\n\nfunction handleGlobalPointerEvent(e: PointerEvent) {\n if (e.pointerType === \"touch\") {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === \"undefined\") {\n return () => {};\n }\n\n if (hoverCount === 0) {\n if (typeof PointerEvent !== \"undefined\") {\n document.addEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.addEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n }\n\n hoverCount++;\n return () => {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n\n if (typeof PointerEvent !== \"undefined\") {\n document.removeEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.removeEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n };\n}\n\n/**\n * Handles pointer hover interactions for an element.\n */\nexport function createHover(props: MaybeAccessor<CreateHoverProps> = {}): HoverResult {\n const getProps = () => access(props);\n const [isHovered, setIsHovered] = createSignal(false);\n const { addGlobalListener, removeAllGlobalListeners } = createGlobalListeners();\n\n // Track internal hover state\n let state = {\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n pointerType: \"\" as \"mouse\" | \"pen\" | \"\",\n target: null as Element | null,\n };\n\n // Setup global touch events\n createEffect(() => {\n const cleanup = setupGlobalTouchEvents();\n onCleanup(cleanup);\n });\n\n // Reset hover when disabled\n createEffect(() => {\n const p = getProps();\n if (p.isDisabled && state.isHovered) {\n triggerHoverEnd(state.target as Element, state.pointerType as \"mouse\" | \"pen\");\n }\n });\n\n function triggerHoverStart(\n target: Element,\n pointerType: \"mouse\" | \"pen\",\n eventTarget: Element | null,\n ) {\n const p = getProps();\n state.pointerType = pointerType;\n\n const isOverTarget = eventTarget instanceof Element ? target.contains(eventTarget) : true;\n if (p.isDisabled || state.isHovered || !isOverTarget) {\n return;\n }\n\n state.isHovered = true;\n state.target = target;\n\n addGlobalListener(\n \"pointerover\",\n (event: PointerEvent) => {\n if (\n state.isHovered &&\n state.target &&\n !nodeContains(state.target, event.target as Element)\n ) {\n triggerHoverEnd(event.target as Element, event.pointerType as \"mouse\" | \"pen\");\n }\n },\n { capture: true },\n );\n\n p.onHoverStart?.({\n type: \"hoverstart\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(true);\n setIsHovered(true);\n }\n\n function triggerHoverEnd(target: Element | null, pointerType: \"mouse\" | \"pen\") {\n const p = getProps();\n state.pointerType = \"\";\n state.target = null;\n\n if (!state.isHovered || !target) {\n return;\n }\n\n state.isHovered = false;\n removeAllGlobalListeners();\n\n p.onHoverEnd?.({\n type: \"hoverend\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(false);\n setIsHovered(false);\n }\n\n const hoverProps = createMemo<JSX.HTMLAttributes<HTMLElement>>(() => {\n if (typeof PointerEvent !== \"undefined\") {\n return {\n onPointerEnter: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerLeave: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n onPointerOver: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerOut: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n };\n }\n\n // Fallback for environments without PointerEvent (mainly tests)\n return {\n onTouchStart: () => {\n state.ignoreEmulatedMouseEvents = true;\n },\n onMouseEnter: (e: MouseEvent) => {\n if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n triggerHoverStart(e.currentTarget as Element, \"mouse\", e.target as Element);\n }\n state.ignoreEmulatedMouseEvents = false;\n },\n onMouseLeave: (e: MouseEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, \"mouse\");\n }\n },\n };\n });\n\n return {\n hoverProps: hoverProps() as HoverProps,\n isHovered,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createHover.jsx","names":[],"sources":["../../src/interactions/createHover.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/useHover.ts\n\n/**\n * createHover hook for Solidaria\n *\n * Handles pointer hover interactions for an element. Normalizes behavior\n * across browsers and platforms, and ignores emulated mouse events on touch devices.\n *\n * Port of @react-aria/interactions useHover.\n */\n\nimport { createSignal, createEffect, createTrackedEffect } from \"solid-js\";\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { type MaybeAccessor, access } from \"../utils/reactivity\";\nimport { isTestEnv } from \"../utils/env\";\nimport { createGlobalListeners, nodeContains } from \"../utils\";\n\nexport interface HoverEvent {\n /** The type of hover event being fired. */\n type: \"hoverstart\" | \"hoverend\";\n /** The pointer type that triggered the hover event. */\n pointerType: \"mouse\" | \"pen\";\n /** The target element of the hover event. */\n target: Element;\n}\n\nexport interface HoverEvents {\n /** Handler called when the hover starts. */\n onHoverStart?: (e: HoverEvent) => void;\n /** Handler called when the hover ends. */\n onHoverEnd?: (e: HoverEvent) => void;\n /** Handler called when the hover state changes. */\n onHoverChange?: (isHovering: boolean) => void;\n}\n\nexport interface CreateHoverProps extends HoverEvents {\n /** Whether the hover events should be disabled. */\n isDisabled?: boolean;\n}\n\n/** Event handler props returned by createHover - safe to spread on any element */\nexport type HoverProps = Pick<\n JSX.HTMLAttributes<HTMLElement>,\n | \"onPointerEnter\"\n | \"onPointerLeave\"\n | \"onPointerOver\"\n | \"onPointerOut\"\n | \"onMouseEnter\"\n | \"onMouseLeave\"\n | \"onTouchStart\"\n>;\n\nexport interface HoverResult {\n /** Props to spread on the target element. */\n hoverProps: HoverProps;\n /** Whether the element is currently hovered. */\n isHovered: Accessor<boolean>;\n}\n\n// iOS fires onPointerEnter twice: once with pointerType=\"touch\" and again with pointerType=\"mouse\".\n// We want to ignore these emulated events so they do not trigger hover behavior.\nlet globalIgnoreEmulatedMouseEvents = false;\nlet hoverCount = 0;\n\nfunction setGlobalIgnoreEmulatedMouseEvents() {\n globalIgnoreEmulatedMouseEvents = true;\n setTimeout(() => {\n globalIgnoreEmulatedMouseEvents = false;\n }, 500);\n}\n\nfunction handleGlobalPointerEvent(e: PointerEvent) {\n if (e.pointerType === \"touch\") {\n setGlobalIgnoreEmulatedMouseEvents();\n }\n}\n\nfunction setupGlobalTouchEvents() {\n if (typeof document === \"undefined\") {\n return () => {};\n }\n\n if (hoverCount === 0) {\n if (typeof PointerEvent !== \"undefined\") {\n document.addEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.addEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n }\n\n hoverCount++;\n return () => {\n hoverCount--;\n if (hoverCount > 0) {\n return;\n }\n\n if (typeof PointerEvent !== \"undefined\") {\n document.removeEventListener(\"pointerup\", handleGlobalPointerEvent);\n } else if (isTestEnv()) {\n document.removeEventListener(\"touchend\", setGlobalIgnoreEmulatedMouseEvents);\n }\n };\n}\n\n/**\n * Handles pointer hover interactions for an element.\n */\nexport function createHover(props: MaybeAccessor<CreateHoverProps> = {}): HoverResult {\n const getProps = () => access(props);\n const [isHovered, setIsHovered] = createSignal(false);\n const { addGlobalListener, removeAllGlobalListeners } = createGlobalListeners();\n\n // Track internal hover state\n let state = {\n isHovered: false,\n ignoreEmulatedMouseEvents: false,\n pointerType: \"\" as \"mouse\" | \"pen\" | \"\",\n target: null as Element | null,\n };\n\n // Setup global touch events\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n const cleanup = setupGlobalTouchEvents();\n _s2Cleanups.push(cleanup);\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n // Reset hover when disabled\n createEffect(\n () => !!getProps().isDisabled,\n (isDisabled) => {\n if (isDisabled && state.isHovered) {\n triggerHoverEnd(state.target as Element, state.pointerType as \"mouse\" | \"pen\");\n }\n },\n );\n\n function triggerHoverStart(\n target: Element,\n pointerType: \"mouse\" | \"pen\",\n eventTarget: Element | null,\n ) {\n const p = getProps();\n state.pointerType = pointerType;\n\n const isOverTarget = eventTarget instanceof Element ? target.contains(eventTarget) : true;\n if (p.isDisabled || state.isHovered || !isOverTarget) {\n return;\n }\n\n state.isHovered = true;\n state.target = target;\n\n addGlobalListener(\n \"pointerover\",\n (event: PointerEvent) => {\n if (\n state.isHovered &&\n state.target &&\n !nodeContains(state.target, event.target as Element)\n ) {\n triggerHoverEnd(state.target, event.pointerType as \"mouse\" | \"pen\");\n }\n },\n { capture: true },\n );\n\n p.onHoverStart?.({\n type: \"hoverstart\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(true);\n setIsHovered(true);\n }\n\n function triggerHoverEnd(target: Element | null, pointerType: \"mouse\" | \"pen\") {\n const p = getProps();\n state.pointerType = \"\";\n state.target = null;\n\n if (!state.isHovered || !target) {\n return;\n }\n\n state.isHovered = false;\n removeAllGlobalListeners();\n\n p.onHoverEnd?.({\n type: \"hoverend\",\n target,\n pointerType,\n });\n\n p.onHoverChange?.(false);\n setIsHovered(false);\n }\n\n // Handlers read getProps() live; do not wrap this object in a memo/getter.\n // A getter that reads the memo on destructure (`const { hoverProps } = createHover()`)\n // is STRICT_READ_UNTRACKED inside HMR's untrack(component, \"<Name>\").\n const hoverProps: HoverProps =\n typeof PointerEvent !== \"undefined\"\n ? {\n onPointerEnter: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerLeave: (e: PointerEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n onPointerOver: (e: PointerEvent) => {\n if (globalIgnoreEmulatedMouseEvents && e.pointerType === \"mouse\") {\n return;\n }\n if (e.pointerType === \"touch\") {\n return;\n }\n triggerHoverStart(\n e.currentTarget as Element,\n e.pointerType as \"mouse\" | \"pen\",\n e.target as Element,\n );\n },\n onPointerOut: (e: PointerEvent) => {\n const p = getProps();\n if (\n !p.isDisabled &&\n (e.currentTarget as Element).contains(e.target as Element) &&\n !nodeContains(e.currentTarget as Element, e.relatedTarget as Node | null)\n ) {\n triggerHoverEnd(e.currentTarget as Element, e.pointerType as \"mouse\" | \"pen\");\n }\n },\n }\n : {\n onTouchStart: () => {\n state.ignoreEmulatedMouseEvents = true;\n },\n onMouseEnter: (e: MouseEvent) => {\n if (!state.ignoreEmulatedMouseEvents && !globalIgnoreEmulatedMouseEvents) {\n triggerHoverStart(e.currentTarget as Element, \"mouse\", e.target as Element);\n }\n state.ignoreEmulatedMouseEvents = false;\n },\n onMouseLeave: (e: MouseEvent) => {\n const p = getProps();\n if (!p.isDisabled && (e.currentTarget as Element).contains(e.target as Element)) {\n triggerHoverEnd(e.currentTarget as Element, \"mouse\");\n }\n },\n };\n\n return {\n hoverProps,\n isHovered,\n };\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,205 @@
|
|
|
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/useKeyboard.ts
|
|
13
|
+
/*
|
|
14
|
+
* Copyright 2025 Adobe. All rights reserved.
|
|
15
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
16
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
17
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
*
|
|
19
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
20
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
21
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
22
|
+
* governing permissions and limitations under the License.
|
|
23
|
+
*/
|
|
24
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/interactions/createKeyboardShortcutHandler.ts
|
|
25
|
+
import { t as access } from "./reactivity.js";
|
|
26
|
+
import { Z as isMac, r as getEventTarget, v as nodeContains, z as chain } from "./dom.js";
|
|
27
|
+
//#region src/interactions/createKeyboardShortcutHandler.ts
|
|
28
|
+
/**
|
|
29
|
+
* Keyboard shortcut parsing and exact-match dispatch.
|
|
30
|
+
*
|
|
31
|
+
* Port of React Aria's createKeyboardShortcutHandler.
|
|
32
|
+
*/
|
|
33
|
+
const modifierNames = /* @__PURE__ */ new Set([
|
|
34
|
+
"shift",
|
|
35
|
+
"alt",
|
|
36
|
+
"control",
|
|
37
|
+
"meta",
|
|
38
|
+
"mod"
|
|
39
|
+
]);
|
|
40
|
+
const canonicalModifierOrder = [
|
|
41
|
+
"Alt",
|
|
42
|
+
"Control",
|
|
43
|
+
"Meta",
|
|
44
|
+
"Shift"
|
|
45
|
+
];
|
|
46
|
+
function modifierSetFromParsed(parsed) {
|
|
47
|
+
const modifiers = /* @__PURE__ */ new Set();
|
|
48
|
+
if (parsed.alt) modifiers.add("Alt");
|
|
49
|
+
if (parsed.shift) modifiers.add("Shift");
|
|
50
|
+
if (parsed.ctrl) modifiers.add("Control");
|
|
51
|
+
if (parsed.meta) modifiers.add("Meta");
|
|
52
|
+
if (parsed.mod) modifiers.add(isMac() ? "Meta" : "Control");
|
|
53
|
+
return modifiers;
|
|
54
|
+
}
|
|
55
|
+
function modifierSetFromEvent(event) {
|
|
56
|
+
const modifiers = /* @__PURE__ */ new Set();
|
|
57
|
+
if (event.altKey) modifiers.add("Alt");
|
|
58
|
+
if (event.ctrlKey) modifiers.add("Control");
|
|
59
|
+
if (event.metaKey) modifiers.add("Meta");
|
|
60
|
+
if (event.shiftKey) modifiers.add("Shift");
|
|
61
|
+
return modifiers;
|
|
62
|
+
}
|
|
63
|
+
function sortedModifierTokens(modifiers) {
|
|
64
|
+
return canonicalModifierOrder.filter((name) => modifiers.has(name));
|
|
65
|
+
}
|
|
66
|
+
/** Parses a shortcut. Modifier names are case-insensitive and order-independent. */
|
|
67
|
+
function parseKeyboardShortcut(specification) {
|
|
68
|
+
const parsed = specification.split("+").reduce((result, part) => {
|
|
69
|
+
const lowerPart = part.toLowerCase();
|
|
70
|
+
if (modifierNames.has(lowerPart)) {
|
|
71
|
+
if (lowerPart === "shift") result.shift = true;
|
|
72
|
+
else if (lowerPart === "alt") result.alt = true;
|
|
73
|
+
else if (lowerPart === "control") result.ctrl = true;
|
|
74
|
+
else if (lowerPart === "meta") result.meta = true;
|
|
75
|
+
else if (lowerPart === "mod") result.mod = true;
|
|
76
|
+
} else result.key = part;
|
|
77
|
+
return result;
|
|
78
|
+
}, {
|
|
79
|
+
shift: false,
|
|
80
|
+
alt: false,
|
|
81
|
+
ctrl: false,
|
|
82
|
+
meta: false,
|
|
83
|
+
mod: false,
|
|
84
|
+
key: ""
|
|
85
|
+
});
|
|
86
|
+
if (parsed.key === "") throw new Error(`Invalid keyboard shortcut: "${specification}". Must include exactly one non-modifier key (e.g. "a", "Enter", "ArrowDown"). Combine any of Shift, Alt, Ctrl, Meta, and Mod.`);
|
|
87
|
+
return parsed;
|
|
88
|
+
}
|
|
89
|
+
function normalizeEventKey(key) {
|
|
90
|
+
return key.toLowerCase();
|
|
91
|
+
}
|
|
92
|
+
const keyAliases = {
|
|
93
|
+
space: " ",
|
|
94
|
+
esc: "escape",
|
|
95
|
+
del: "delete",
|
|
96
|
+
ins: "insert",
|
|
97
|
+
left: "arrowleft",
|
|
98
|
+
right: "arrowright",
|
|
99
|
+
up: "arrowup",
|
|
100
|
+
down: "arrowdown",
|
|
101
|
+
pageup: "pageup",
|
|
102
|
+
pagedown: "pagedown"
|
|
103
|
+
};
|
|
104
|
+
function canonicalKeyFromSpecification(key) {
|
|
105
|
+
const normalizedKey = normalizeEventKey(key);
|
|
106
|
+
return keyAliases[normalizedKey] ?? normalizedKey;
|
|
107
|
+
}
|
|
108
|
+
function canonicalKeyboardShortcut(parsed) {
|
|
109
|
+
const modifiers = sortedModifierTokens(modifierSetFromParsed(parsed));
|
|
110
|
+
const key = canonicalKeyFromSpecification(parsed.key);
|
|
111
|
+
return modifiers.length > 0 ? `${modifiers.join("+")}+${key}` : key;
|
|
112
|
+
}
|
|
113
|
+
function keyboardEventToCanonicalShortcut(event) {
|
|
114
|
+
const modifiers = sortedModifierTokens(modifierSetFromEvent(event));
|
|
115
|
+
const key = normalizeEventKey(event.key);
|
|
116
|
+
return modifiers.length > 0 ? `${modifiers.join("+")}+${key}` : key;
|
|
117
|
+
}
|
|
118
|
+
/** Returns a keydown handler that runs an action for an exact shortcut match. */
|
|
119
|
+
function createKeyboardShortcutHandler(bindings) {
|
|
120
|
+
const actions = /* @__PURE__ */ new Map();
|
|
121
|
+
for (const [specification, action] of Object.entries(bindings)) actions.set(canonicalKeyboardShortcut(parseKeyboardShortcut(specification)), action);
|
|
122
|
+
return (event) => {
|
|
123
|
+
const action = actions.get(keyboardEventToCanonicalShortcut(event));
|
|
124
|
+
let result = action?.(event);
|
|
125
|
+
if (result === void 0 && action !== void 0) result = {
|
|
126
|
+
shouldContinuePropagation: false,
|
|
127
|
+
shouldPreventDefault: true
|
|
128
|
+
};
|
|
129
|
+
else if (typeof result === "boolean") result = {
|
|
130
|
+
shouldContinuePropagation: !result,
|
|
131
|
+
shouldPreventDefault: result
|
|
132
|
+
};
|
|
133
|
+
if (result?.shouldPreventDefault) event.preventDefault();
|
|
134
|
+
if (!action || result?.shouldContinuePropagation) event.continuePropagation();
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//#endregion
|
|
138
|
+
//#region src/interactions/createKeyboard.ts
|
|
139
|
+
/**
|
|
140
|
+
* Wraps a keyboard event handler to make stopPropagation the default,
|
|
141
|
+
* and support continuePropagation instead.
|
|
142
|
+
*/
|
|
143
|
+
function createEventHandler(handler) {
|
|
144
|
+
if (!handler) return;
|
|
145
|
+
return (e) => {
|
|
146
|
+
let shouldStopPropagation = true;
|
|
147
|
+
const parentContinuePropagation = e.continuePropagation;
|
|
148
|
+
handler(Object.assign(e, { continuePropagation() {
|
|
149
|
+
shouldStopPropagation = false;
|
|
150
|
+
if (typeof parentContinuePropagation === "function") parentContinuePropagation.call(e);
|
|
151
|
+
} }));
|
|
152
|
+
if (shouldStopPropagation) e.stopPropagation();
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Handles keyboard interactions for a focusable element.
|
|
157
|
+
*
|
|
158
|
+
* Based on react-aria's useKeyboard but adapted for SolidJS.
|
|
159
|
+
*/
|
|
160
|
+
function createKeyboard(props = {}) {
|
|
161
|
+
let onKeyDown;
|
|
162
|
+
let onKeyUp;
|
|
163
|
+
if (props.shortcuts) {
|
|
164
|
+
const shortcutHandler = createKeyboardShortcutHandler(props.shortcuts);
|
|
165
|
+
const shortcutOnKeyDown = createEventHandler((event) => {
|
|
166
|
+
if (!nodeContains(event.currentTarget, getEventTarget(event))) {
|
|
167
|
+
event.continuePropagation();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (event.repeat && !(props.allowRepeats ?? false) || event.isComposing && !(props.allowComposing ?? false)) {
|
|
171
|
+
event.continuePropagation();
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
shortcutHandler(event);
|
|
175
|
+
});
|
|
176
|
+
const shortcutOnKeyUp = createEventHandler((event) => {
|
|
177
|
+
if (!nodeContains(event.currentTarget, getEventTarget(event))) {
|
|
178
|
+
event.continuePropagation();
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
if (event.repeat && !(props.allowRepeats ?? false) || event.isComposing && !(props.allowComposing ?? false)) {
|
|
182
|
+
event.continuePropagation();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
event.continuePropagation();
|
|
186
|
+
});
|
|
187
|
+
onKeyDown = props.onKeyDown ? chain(props.onKeyDown, shortcutOnKeyDown) : shortcutOnKeyDown;
|
|
188
|
+
onKeyUp = props.onKeyUp ? chain(props.onKeyUp, shortcutOnKeyUp) : shortcutOnKeyUp;
|
|
189
|
+
} else {
|
|
190
|
+
onKeyDown = createEventHandler(props.onKeyDown);
|
|
191
|
+
onKeyUp = createEventHandler(props.onKeyUp);
|
|
192
|
+
}
|
|
193
|
+
return { keyboardProps: {
|
|
194
|
+
get onKeyDown() {
|
|
195
|
+
return access(props.isDisabled) ? void 0 : onKeyDown;
|
|
196
|
+
},
|
|
197
|
+
get onKeyUp() {
|
|
198
|
+
return access(props.isDisabled) ? void 0 : onKeyUp;
|
|
199
|
+
}
|
|
200
|
+
} };
|
|
201
|
+
}
|
|
202
|
+
//#endregion
|
|
203
|
+
export { createKeyboard as t };
|
|
204
|
+
|
|
205
|
+
//# sourceMappingURL=createKeyboard.js.map
|