@proyecto-viviana/solidaria 0.2.8 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -236
- package/dist/actiongroup/createActionGroup.d.ts +5 -5
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
- package/dist/actiongroup/index.d.ts +1 -1
- package/dist/autocomplete/createAutocomplete.d.ts +10 -10
- package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
- package/dist/autocomplete/index.d.ts +1 -1
- package/dist/autocomplete/index.d.ts.map +1 -1
- package/dist/breadcrumbs/createBreadcrumbs.d.ts +9 -7
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/breadcrumbs/index.d.ts +1 -1
- package/dist/button/createButton.d.ts +1 -1
- package/dist/button/createButton.d.ts.map +1 -1
- package/dist/button/createToggleButton.d.ts +3 -3
- package/dist/button/createToggleButtonGroup.d.ts +7 -7
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
- package/dist/button/index.d.ts +6 -6
- package/dist/button/index.d.ts.map +1 -1
- package/dist/button/types.d.ts +18 -12
- package/dist/button/types.d.ts.map +1 -1
- package/dist/calendar/createCalendar.d.ts +15 -5
- package/dist/calendar/createCalendar.d.ts.map +1 -1
- package/dist/calendar/createCalendarCell.d.ts +6 -2
- package/dist/calendar/createCalendarCell.d.ts.map +1 -1
- package/dist/calendar/createCalendarGrid.d.ts +4 -4
- package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendar.d.ts +15 -5
- package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts +4 -2
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/calendar/index.d.ts +5 -5
- package/dist/calendar/index.d.ts.map +1 -1
- package/dist/calendar/intl/index.d.ts +12 -0
- package/dist/calendar/intl/index.d.ts.map +1 -0
- package/dist/calendar/utils.d.ts +12 -0
- package/dist/calendar/utils.d.ts.map +1 -0
- package/dist/checkbox/createCheckbox.d.ts +6 -6
- package/dist/checkbox/createCheckbox.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroup.d.ts +7 -7
- package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroupItem.d.ts +4 -4
- package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroupState.d.ts +2 -2
- package/dist/checkbox/createCheckboxGroupState.d.ts.map +1 -1
- package/dist/checkbox/index.d.ts +8 -8
- package/dist/checkbox/index.d.ts.map +1 -1
- package/dist/collections/index.d.ts +3 -3
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/color/createColorArea.d.ts +3 -3
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorField.d.ts +4 -4
- package/dist/color/createColorField.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts +4 -4
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorSwatch.d.ts +2 -2
- package/dist/color/createColorSwatch.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts +3 -3
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/color/index.d.ts +6 -6
- package/dist/color/types.d.ts +98 -16
- package/dist/color/types.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +10 -7
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/combobox/index.d.ts +1 -1
- package/dist/combobox/intl/index.d.ts +1 -1
- package/dist/datepicker/createDateField.d.ts +18 -6
- package/dist/datepicker/createDateField.d.ts.map +1 -1
- package/dist/datepicker/createDatePicker.d.ts +51 -5
- package/dist/datepicker/createDatePicker.d.ts.map +1 -1
- package/dist/datepicker/createDatePickerGroup.d.ts +19 -0
- package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -0
- package/dist/datepicker/createDateRangePicker.d.ts +8 -6
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
- package/dist/datepicker/createDateSegment.d.ts +10 -2
- package/dist/datepicker/createDateSegment.d.ts.map +1 -1
- package/dist/datepicker/createTimeField.d.ts +11 -5
- package/dist/datepicker/createTimeField.d.ts.map +1 -1
- package/dist/datepicker/createTimeSegment.d.ts +2 -2
- package/dist/datepicker/createTimeSegment.d.ts.map +1 -1
- package/dist/datepicker/index.d.ts +7 -6
- package/dist/datepicker/index.d.ts.map +1 -1
- package/dist/dialog/createDialog.d.ts +5 -5
- package/dist/dialog/createDialog.d.ts.map +1 -1
- package/dist/dialog/index.d.ts +2 -2
- package/dist/dialog/index.d.ts.map +1 -1
- package/dist/dialog/types.d.ts +4 -4
- package/dist/disclosure/createDisclosure.d.ts +5 -2
- package/dist/disclosure/createDisclosure.d.ts.map +1 -1
- package/dist/disclosure/createDisclosureGroup.d.ts +4 -4
- package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
- package/dist/disclosure/index.d.ts +2 -2
- package/dist/dnd/createDrag.d.ts +2 -2
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts +2 -2
- package/dist/dnd/createDraggableItem.d.ts +3 -3
- package/dist/dnd/createDraggableItem.d.ts.map +1 -1
- package/dist/dnd/createDrop.d.ts +2 -2
- package/dist/dnd/createDrop.d.ts.map +1 -1
- package/dist/dnd/createDroppableCollection.d.ts +26 -6
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts +3 -3
- package/dist/dnd/index.d.ts +12 -12
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/dnd/types.d.ts +2 -2
- package/dist/dnd/types.d.ts.map +1 -1
- package/dist/dnd/utils.d.ts +1 -1
- package/dist/dnd/utils.d.ts.map +1 -1
- package/dist/focus/FocusScope.d.ts +1 -1
- package/dist/focus/FocusScope.d.ts.map +1 -1
- package/dist/focus/createAutoFocus.d.ts.map +1 -1
- package/dist/focus/createFocusRestore.d.ts.map +1 -1
- package/dist/focus/createVirtualFocus.d.ts +4 -4
- package/dist/focus/createVirtualFocus.d.ts.map +1 -1
- package/dist/focus/index.d.ts +4 -4
- package/dist/focus/index.d.ts.map +1 -1
- package/dist/form/createFormReset.d.ts +1 -1
- package/dist/form/createFormValidation.d.ts +3 -3
- package/dist/form/createFormValidation.d.ts.map +1 -1
- package/dist/form/index.d.ts +2 -2
- package/dist/form/index.d.ts.map +1 -1
- package/dist/grid/GridKeyboardDelegate.d.ts +5 -5
- package/dist/grid/createGrid.d.ts +3 -3
- package/dist/grid/createGridCell.d.ts +3 -3
- package/dist/grid/createGridRow.d.ts +3 -3
- package/dist/grid/index.d.ts +5 -5
- package/dist/grid/types.d.ts +8 -8
- package/dist/gridlist/createGridList.d.ts +6 -4
- package/dist/gridlist/createGridList.d.ts.map +1 -1
- package/dist/gridlist/createGridListItem.d.ts +4 -4
- package/dist/gridlist/createGridListItem.d.ts.map +1 -1
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts +3 -3
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
- package/dist/gridlist/index.d.ts +4 -4
- package/dist/gridlist/types.d.ts +11 -7
- package/dist/gridlist/types.d.ts.map +1 -1
- package/dist/i18n/createCollator.d.ts.map +1 -1
- package/dist/i18n/createDateFormatter.d.ts.map +1 -1
- package/dist/i18n/createFilter.d.ts.map +1 -1
- package/dist/i18n/createNumberFormatter.d.ts +1 -1
- package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
- package/dist/i18n/createStringFormatter.d.ts +2 -2
- package/dist/i18n/createStringFormatter.d.ts.map +1 -1
- package/dist/i18n/index.d.ts +8 -8
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/locale.d.ts +2 -2
- package/dist/i18n/locale.d.ts.map +1 -1
- package/dist/i18n/utils.d.ts.map +1 -1
- package/dist/index.d.ts +52 -51
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18012 -16820
- package/dist/index.js.map +1 -1
- package/dist/index.jsx +18242 -0
- package/dist/index.jsx.map +1 -0
- package/dist/interactions/FocusableProvider.d.ts +2 -2
- package/dist/interactions/FocusableProvider.d.ts.map +1 -1
- package/dist/interactions/PressEvent.d.ts +2 -2
- package/dist/interactions/createFocus.d.ts +1 -1
- package/dist/interactions/createFocus.d.ts.map +1 -1
- package/dist/interactions/createFocusRing.d.ts +1 -1
- package/dist/interactions/createFocusRing.d.ts.map +1 -1
- package/dist/interactions/createFocusWithin.d.ts +1 -1
- package/dist/interactions/createFocusWithin.d.ts.map +1 -1
- package/dist/interactions/createFocusable.d.ts +3 -3
- package/dist/interactions/createFocusable.d.ts.map +1 -1
- package/dist/interactions/createHover.d.ts +5 -5
- package/dist/interactions/createHover.d.ts.map +1 -1
- package/dist/interactions/createInteractionModality.d.ts +3 -3
- package/dist/interactions/createInteractionModality.d.ts.map +1 -1
- package/dist/interactions/createKeyboard.d.ts +1 -1
- package/dist/interactions/createLongPress.d.ts +5 -5
- package/dist/interactions/createMove.d.ts +5 -5
- package/dist/interactions/createMove.d.ts.map +1 -1
- package/dist/interactions/createPress.d.ts +4 -4
- package/dist/interactions/createPress.d.ts.map +1 -1
- package/dist/interactions/index.d.ts +12 -12
- package/dist/interactions/index.d.ts.map +1 -1
- package/dist/label/createField.d.ts +4 -4
- package/dist/label/createField.d.ts.map +1 -1
- package/dist/label/createLabel.d.ts +7 -7
- package/dist/label/createLabel.d.ts.map +1 -1
- package/dist/label/createLabels.d.ts +1 -1
- package/dist/label/createLabels.d.ts.map +1 -1
- package/dist/label/index.d.ts +5 -5
- package/dist/landmark/createLandmark.d.ts +5 -5
- package/dist/landmark/createLandmark.d.ts.map +1 -1
- package/dist/landmark/index.d.ts +1 -1
- package/dist/link/createLink.d.ts +14 -8
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/link/index.d.ts +1 -1
- package/dist/listbox/createListBox.d.ts +11 -6
- package/dist/listbox/createListBox.d.ts.map +1 -1
- package/dist/listbox/createOption.d.ts +21 -4
- package/dist/listbox/createOption.d.ts.map +1 -1
- package/dist/listbox/index.d.ts +2 -2
- package/dist/listbox/index.d.ts.map +1 -1
- package/dist/live-announcer/announce.d.ts +2 -2
- package/dist/live-announcer/announce.d.ts.map +1 -1
- package/dist/live-announcer/index.d.ts +1 -1
- package/dist/menu/createMenu.d.ts +7 -7
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/menu/createMenuItem.d.ts +16 -4
- package/dist/menu/createMenuItem.d.ts.map +1 -1
- package/dist/menu/createMenuTrigger.d.ts +4 -4
- package/dist/menu/index.d.ts +3 -3
- package/dist/menu/index.d.ts.map +1 -1
- package/dist/meter/createMeter.d.ts +6 -6
- package/dist/meter/createMeter.d.ts.map +1 -1
- package/dist/meter/index.d.ts +1 -1
- package/dist/numberfield/createNumberField.d.ts +9 -8
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/numberfield/index.d.ts +1 -1
- package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
- package/dist/overlays/createModal.d.ts +3 -3
- package/dist/overlays/createModal.d.ts.map +1 -1
- package/dist/overlays/createOverlay.d.ts +1 -1
- package/dist/overlays/createOverlay.d.ts.map +1 -1
- package/dist/overlays/createOverlayTrigger.d.ts +6 -6
- package/dist/overlays/index.d.ts +6 -6
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/popover/calculatePosition.d.ts +4 -4
- package/dist/popover/calculatePosition.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts +3 -3
- package/dist/popover/createOverlayPosition.d.ts.map +1 -1
- package/dist/popover/createPopover.d.ts +4 -4
- package/dist/popover/createPopover.d.ts.map +1 -1
- package/dist/popover/index.d.ts +3 -3
- package/dist/progress/createProgressBar.d.ts +7 -5
- package/dist/progress/createProgressBar.d.ts.map +1 -1
- package/dist/progress/index.d.ts +1 -1
- package/dist/radio/createRadio.d.ts +7 -7
- package/dist/radio/createRadio.d.ts.map +1 -1
- package/dist/radio/createRadioGroup.d.ts +10 -10
- package/dist/radio/createRadioGroup.d.ts.map +1 -1
- package/dist/radio/createRadioGroupState.d.ts +3 -3
- package/dist/radio/createRadioGroupState.d.ts.map +1 -1
- package/dist/radio/index.d.ts +3 -3
- package/dist/radio/index.d.ts.map +1 -1
- package/dist/searchfield/createSearchField.d.ts +7 -7
- package/dist/searchfield/createSearchField.d.ts.map +1 -1
- package/dist/searchfield/index.d.ts +2 -2
- package/dist/select/createHiddenSelect.d.ts +4 -4
- package/dist/select/createHiddenSelect.d.ts.map +1 -1
- package/dist/select/createSelect.d.ts +14 -6
- package/dist/select/createSelect.d.ts.map +1 -1
- package/dist/select/index.d.ts +2 -2
- package/dist/select/index.d.ts.map +1 -1
- package/dist/selection/createTypeSelect.d.ts +2 -2
- package/dist/selection/index.d.ts +1 -1
- package/dist/separator/createSeparator.d.ts +9 -5
- package/dist/separator/createSeparator.d.ts.map +1 -1
- package/dist/separator/index.d.ts +1 -1
- package/dist/slider/createSlider.d.ts +11 -7
- package/dist/slider/createSlider.d.ts.map +1 -1
- package/dist/slider/index.d.ts +2 -2
- package/dist/ssr/index.d.ts +1 -1
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/steplist/createStepList.d.ts +36 -0
- package/dist/steplist/createStepList.d.ts.map +1 -0
- package/dist/steplist/index.d.ts +2 -0
- package/dist/steplist/index.d.ts.map +1 -0
- package/dist/switch/createSwitch.d.ts +6 -4
- package/dist/switch/createSwitch.d.ts.map +1 -1
- package/dist/switch/index.d.ts +1 -1
- package/dist/table/createTable.d.ts +3 -3
- package/dist/table/createTable.d.ts.map +1 -1
- package/dist/table/createTableCell.d.ts +3 -3
- package/dist/table/createTableCell.d.ts.map +1 -1
- package/dist/table/createTableColumnHeader.d.ts +3 -3
- package/dist/table/createTableColumnHeader.d.ts.map +1 -1
- package/dist/table/createTableColumnResize.d.ts +41 -0
- package/dist/table/createTableColumnResize.d.ts.map +1 -0
- package/dist/table/createTableHeaderRow.d.ts +3 -3
- package/dist/table/createTableRow.d.ts +3 -3
- package/dist/table/createTableRow.d.ts.map +1 -1
- package/dist/table/createTableRowGroup.d.ts +2 -2
- package/dist/table/createTableRowGroup.d.ts.map +1 -1
- package/dist/table/createTableSelectAllCheckbox.d.ts +3 -3
- package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
- package/dist/table/createTableSelectionCheckbox.d.ts +3 -3
- package/dist/table/index.d.ts +11 -9
- package/dist/table/index.d.ts.map +1 -1
- package/dist/table/types.d.ts +15 -7
- package/dist/table/types.d.ts.map +1 -1
- package/dist/tabs/createTabs.d.ts +28 -25
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tabs/index.d.ts +1 -1
- package/dist/tag/createTag.d.ts +2 -2
- package/dist/tag/createTag.d.ts.map +1 -1
- package/dist/tag/createTagGroup.d.ts +5 -5
- package/dist/tag/createTagGroup.d.ts.map +1 -1
- package/dist/tag/index.d.ts +2 -2
- package/dist/tag/index.d.ts.map +1 -1
- package/dist/textfield/createTextField.d.ts +17 -11
- package/dist/textfield/createTextField.d.ts.map +1 -1
- package/dist/textfield/index.d.ts +1 -1
- package/dist/textfield/index.d.ts.map +1 -1
- package/dist/toast/createToast.d.ts +2 -2
- package/dist/toast/createToast.d.ts.map +1 -1
- package/dist/toast/createToastRegion.d.ts +5 -3
- package/dist/toast/createToastRegion.d.ts.map +1 -1
- package/dist/toast/index.d.ts +2 -2
- package/dist/toast/index.d.ts.map +1 -1
- package/dist/toggle/createToggle.d.ts +9 -9
- package/dist/toggle/createToggle.d.ts.map +1 -1
- package/dist/toggle/createToggleState.d.ts +2 -2
- package/dist/toggle/createToggleState.d.ts.map +1 -1
- package/dist/toggle/index.d.ts +4 -4
- package/dist/toggle/index.d.ts.map +1 -1
- package/dist/toolbar/createToolbar.d.ts +9 -9
- package/dist/toolbar/createToolbar.d.ts.map +1 -1
- package/dist/toolbar/index.d.ts +1 -1
- package/dist/toolbar/index.d.ts.map +1 -1
- package/dist/tooltip/createTooltip.d.ts +5 -5
- package/dist/tooltip/createTooltip.d.ts.map +1 -1
- package/dist/tooltip/createTooltipTrigger.d.ts +10 -5
- package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
- package/dist/tooltip/index.d.ts +2 -2
- package/dist/tree/createTree.d.ts +3 -3
- package/dist/tree/createTree.d.ts.map +1 -1
- package/dist/tree/createTreeItem.d.ts +4 -4
- package/dist/tree/createTreeItem.d.ts.map +1 -1
- package/dist/tree/createTreeSelectionCheckbox.d.ts +3 -3
- package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
- package/dist/tree/index.d.ts +4 -4
- package/dist/tree/types.d.ts +10 -6
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/createDescription.d.ts +2 -2
- package/dist/utils/createDescription.d.ts.map +1 -1
- package/dist/utils/dom.d.ts.map +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/focus.d.ts +1 -1
- package/dist/utils/focus.d.ts.map +1 -1
- package/dist/utils/geometry.d.ts.map +1 -1
- package/dist/utils/index.d.ts +12 -12
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/mergeProps.d.ts.map +1 -1
- package/dist/utils/reactivity.d.ts +1 -1
- package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -2
- package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
- package/dist/visually-hidden/index.d.ts +1 -1
- package/package.json +32 -32
- package/src/actiongroup/createActionGroup.ts +101 -91
- package/src/actiongroup/index.ts +1 -1
- package/src/autocomplete/createAutocomplete.ts +117 -134
- package/src/autocomplete/index.ts +1 -1
- package/src/breadcrumbs/createBreadcrumbs.ts +33 -42
- package/src/breadcrumbs/index.ts +1 -1
- package/src/button/createButton.ts +102 -73
- package/src/button/createToggleButton.ts +10 -10
- package/src/button/createToggleButtonGroup.ts +25 -32
- package/src/button/index.ts +6 -9
- package/src/button/types.ts +18 -12
- package/src/calendar/createCalendar.ts +62 -29
- package/src/calendar/createCalendarCell.ts +98 -46
- package/src/calendar/createCalendarGrid.ts +57 -35
- package/src/calendar/createRangeCalendar.ts +66 -31
- package/src/calendar/createRangeCalendarCell.ts +92 -31
- package/src/calendar/index.ts +5 -9
- package/src/calendar/intl/index.ts +210 -0
- package/src/calendar/utils.ts +227 -0
- package/src/checkbox/createCheckbox.ts +13 -21
- package/src/checkbox/createCheckboxGroup.ts +68 -44
- package/src/checkbox/createCheckboxGroupItem.ts +16 -27
- package/src/checkbox/createCheckboxGroupState.ts +3 -22
- package/src/checkbox/index.ts +8 -10
- package/src/collections/index.ts +33 -29
- package/src/color/createColorArea.ts +232 -154
- package/src/color/createColorField.ts +107 -58
- package/src/color/createColorSlider.ts +231 -73
- package/src/color/createColorSwatch.ts +38 -13
- package/src/color/createColorWheel.ts +208 -83
- package/src/color/index.ts +6 -6
- package/src/color/types.ts +98 -16
- package/src/combobox/createComboBox.ts +157 -100
- package/src/combobox/index.ts +1 -1
- package/src/combobox/intl/index.ts +5 -5
- package/src/datepicker/createDateField.ts +192 -39
- package/src/datepicker/createDatePicker.ts +260 -67
- package/src/datepicker/createDatePickerGroup.ts +149 -0
- package/src/datepicker/createDateRangePicker.ts +105 -57
- package/src/datepicker/createDateSegment.ts +183 -96
- package/src/datepicker/createTimeField.ts +38 -34
- package/src/datepicker/createTimeSegment.ts +67 -85
- package/src/datepicker/index.ts +13 -14
- package/src/dialog/createDialog.ts +45 -38
- package/src/dialog/index.ts +2 -2
- package/src/dialog/types.ts +4 -4
- package/src/disclosure/createDisclosure.ts +138 -33
- package/src/disclosure/createDisclosureGroup.ts +8 -21
- package/src/disclosure/index.ts +2 -2
- package/src/dnd/createDrag.ts +19 -25
- package/src/dnd/createDraggableCollection.ts +4 -4
- package/src/dnd/createDraggableItem.ts +20 -19
- package/src/dnd/createDrop.ts +42 -51
- package/src/dnd/createDroppableCollection.ts +290 -173
- package/src/dnd/createDroppableItem.ts +34 -34
- package/src/dnd/index.ts +23 -12
- package/src/dnd/types.ts +4 -7
- package/src/dnd/utils.ts +36 -49
- package/src/focus/FocusScope.tsx +155 -164
- package/src/focus/createAutoFocus.ts +4 -20
- package/src/focus/createFocusRestore.ts +15 -28
- package/src/focus/createVirtualFocus.ts +20 -36
- package/src/focus/index.ts +4 -8
- package/src/form/createFormReset.ts +4 -4
- package/src/form/createFormValidation.ts +20 -43
- package/src/form/index.ts +2 -5
- package/src/grid/GridKeyboardDelegate.ts +30 -30
- package/src/grid/createGrid.ts +36 -36
- package/src/grid/createGridCell.ts +18 -18
- package/src/grid/createGridRow.ts +14 -14
- package/src/grid/index.ts +5 -5
- package/src/grid/types.ts +8 -8
- package/src/gridlist/createGridList.ts +34 -29
- package/src/gridlist/createGridListItem.ts +68 -23
- package/src/gridlist/createGridListSelectionCheckbox.ts +12 -9
- package/src/gridlist/index.ts +4 -4
- package/src/gridlist/types.ts +11 -7
- package/src/i18n/createCollator.ts +5 -18
- package/src/i18n/createDateFormatter.ts +5 -13
- package/src/i18n/createFilter.ts +11 -24
- package/src/i18n/createNumberFormatter.ts +4 -6
- package/src/i18n/createStringFormatter.ts +19 -15
- package/src/i18n/index.ts +8 -11
- package/src/i18n/locale.tsx +15 -40
- package/src/i18n/utils.ts +35 -39
- package/src/index.ts +68 -169
- package/src/interactions/FocusableProvider.tsx +3 -7
- package/src/interactions/PressEvent.ts +4 -4
- package/src/interactions/createFocus.ts +12 -8
- package/src/interactions/createFocusRing.ts +21 -19
- package/src/interactions/createFocusWithin.ts +20 -13
- package/src/interactions/createFocusable.ts +15 -16
- package/src/interactions/createHover.ts +70 -55
- package/src/interactions/createInteractionModality.ts +75 -82
- package/src/interactions/createKeyboard.ts +2 -2
- package/src/interactions/createLongPress.ts +23 -23
- package/src/interactions/createMove.ts +72 -62
- package/src/interactions/createPress.ts +164 -87
- package/src/interactions/index.ts +24 -16
- package/src/label/createField.ts +18 -19
- package/src/label/createLabel.ts +18 -30
- package/src/label/createLabels.ts +8 -12
- package/src/label/index.ts +5 -5
- package/src/landmark/createLandmark.ts +30 -51
- package/src/landmark/index.ts +1 -1
- package/src/link/createLink.ts +83 -56
- package/src/link/index.ts +1 -1
- package/src/listbox/createListBox.ts +69 -58
- package/src/listbox/createOption.ts +83 -37
- package/src/listbox/index.ts +2 -6
- package/src/live-announcer/announce.ts +44 -71
- package/src/live-announcer/index.ts +1 -1
- package/src/menu/createMenu.ts +79 -50
- package/src/menu/createMenuItem.ts +79 -27
- package/src/menu/createMenuTrigger.ts +15 -15
- package/src/menu/index.ts +3 -12
- package/src/meter/createMeter.ts +7 -15
- package/src/meter/index.ts +1 -1
- package/src/numberfield/createNumberField.ts +138 -81
- package/src/numberfield/index.ts +1 -1
- package/src/overlays/ariaHideOutside.ts +14 -10
- package/src/overlays/createInteractOutside.ts +21 -18
- package/src/overlays/createModal.tsx +17 -17
- package/src/overlays/createOverlay.ts +38 -8
- package/src/overlays/createOverlayTrigger.ts +16 -16
- package/src/overlays/createPreventScroll.ts +46 -24
- package/src/overlays/index.ts +6 -17
- package/src/popover/calculatePosition.ts +115 -117
- package/src/popover/createOverlayPosition.ts +46 -40
- package/src/popover/createPopover.ts +42 -17
- package/src/popover/index.ts +3 -3
- package/src/progress/createProgressBar.ts +31 -32
- package/src/progress/index.ts +1 -1
- package/src/radio/createRadio.ts +95 -73
- package/src/radio/createRadioGroup.ts +83 -77
- package/src/radio/createRadioGroupState.ts +7 -31
- package/src/radio/index.ts +3 -8
- package/src/searchfield/createSearchField.ts +57 -29
- package/src/searchfield/index.ts +2 -2
- package/src/select/createHiddenSelect.tsx +57 -44
- package/src/select/createSelect.ts +128 -71
- package/src/select/index.ts +2 -7
- package/src/selection/createTypeSelect.ts +11 -11
- package/src/selection/index.ts +1 -1
- package/src/separator/createSeparator.ts +20 -25
- package/src/separator/index.ts +1 -1
- package/src/slider/createSlider.ts +93 -124
- package/src/slider/index.ts +2 -2
- package/src/ssr/index.tsx +8 -47
- package/src/steplist/createStepList.ts +106 -0
- package/src/steplist/index.ts +8 -0
- package/src/switch/createSwitch.ts +9 -14
- package/src/switch/index.ts +1 -1
- package/src/table/createTable.ts +152 -85
- package/src/table/createTableCell.ts +17 -16
- package/src/table/createTableColumnHeader.ts +67 -20
- package/src/table/createTableColumnResize.ts +256 -0
- package/src/table/createTableHeaderRow.ts +7 -7
- package/src/table/createTableRow.ts +149 -29
- package/src/table/createTableRowGroup.ts +5 -7
- package/src/table/createTableSelectAllCheckbox.ts +12 -11
- package/src/table/createTableSelectionCheckbox.ts +8 -8
- package/src/table/index.ts +14 -9
- package/src/table/types.ts +15 -7
- package/src/tabs/createTabs.ts +74 -92
- package/src/tabs/index.ts +1 -1
- package/src/tag/createTag.ts +52 -50
- package/src/tag/createTagGroup.ts +47 -41
- package/src/tag/index.ts +2 -6
- package/src/textfield/createTextField.ts +67 -35
- package/src/textfield/index.ts +1 -5
- package/src/toast/createToast.ts +28 -26
- package/src/toast/createToastRegion.ts +169 -26
- package/src/toast/index.ts +2 -6
- package/src/toggle/createToggle.ts +95 -53
- package/src/toggle/createToggleState.ts +2 -10
- package/src/toggle/index.ts +4 -5
- package/src/toolbar/createToolbar.ts +193 -210
- package/src/toolbar/index.ts +1 -1
- package/src/tooltip/createTooltip.ts +11 -24
- package/src/tooltip/createTooltipTrigger.ts +61 -49
- package/src/tooltip/index.ts +2 -2
- package/src/tree/createTree.ts +35 -37
- package/src/tree/createTreeItem.ts +29 -29
- package/src/tree/createTreeSelectionCheckbox.ts +11 -8
- package/src/tree/index.ts +4 -4
- package/src/tree/types.ts +10 -6
- package/src/utils/createDescription.ts +6 -23
- package/src/utils/dom.ts +61 -54
- package/src/utils/env.ts +9 -11
- package/src/utils/events.ts +7 -7
- package/src/utils/filterDOMProps.ts +49 -49
- package/src/utils/focus.ts +60 -68
- package/src/utils/geometry.ts +1 -4
- package/src/utils/globalListeners.ts +9 -9
- package/src/utils/index.ts +12 -22
- package/src/utils/mergeProps.ts +42 -15
- package/src/utils/platform.ts +2 -2
- package/src/utils/reactivity.ts +3 -3
- package/src/utils/textSelection.ts +16 -16
- package/src/visually-hidden/createVisuallyHidden.ts +16 -28
- package/src/visually-hidden/index.ts +1 -1
- package/dist/i18n/NumberFormatter.d.ts +0 -43
- package/dist/i18n/NumberFormatter.d.ts.map +0 -1
- package/dist/index.ssr.js +0 -17082
- package/dist/index.ssr.js.map +0 -1
- package/src/i18n/NumberFormatter.ts +0 -266
package/src/radio/createRadio.ts
CHANGED
|
@@ -7,20 +7,16 @@
|
|
|
7
7
|
* This is a 1:1 port of @react-aria/radio's useRadio hook.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { JSX, Accessor, createEffect } from
|
|
11
|
-
import { createPress } from
|
|
12
|
-
import { createFocusable } from
|
|
13
|
-
import { mergeProps } from
|
|
14
|
-
import { filterDOMProps } from
|
|
15
|
-
import { type MaybeAccessor, access } from
|
|
16
|
-
import { isDevEnv } from
|
|
17
|
-
import { type RadioGroupState, radioGroupSyncVersion } from
|
|
18
|
-
import { radioGroupData } from
|
|
19
|
-
import { type PressEvent } from
|
|
20
|
-
|
|
21
|
-
// ============================================
|
|
22
|
-
// TYPES
|
|
23
|
-
// ============================================
|
|
10
|
+
import { JSX, Accessor, createEffect } from "solid-js";
|
|
11
|
+
import { createPress } from "../interactions/createPress";
|
|
12
|
+
import { createFocusable } from "../interactions/createFocusable";
|
|
13
|
+
import { mergeProps } from "../utils/mergeProps";
|
|
14
|
+
import { filterDOMProps } from "../utils/filterDOMProps";
|
|
15
|
+
import { type MaybeAccessor, access } from "../utils/reactivity";
|
|
16
|
+
import { isDevEnv } from "../utils/env";
|
|
17
|
+
import { type RadioGroupState, radioGroupSyncVersion } from "@proyecto-viviana/solid-stately";
|
|
18
|
+
import { radioGroupData } from "./createRadioGroup";
|
|
19
|
+
import { type PressEvent } from "../interactions/PressEvent";
|
|
24
20
|
|
|
25
21
|
export interface AriaRadioProps {
|
|
26
22
|
/** The value of the radio button, used when submitting an HTML form. */
|
|
@@ -30,11 +26,11 @@ export interface AriaRadioProps {
|
|
|
30
26
|
/** The label for the radio button. */
|
|
31
27
|
children?: JSX.Element;
|
|
32
28
|
/** Defines a string value that labels the current element. */
|
|
33
|
-
|
|
29
|
+
"aria-label"?: string;
|
|
34
30
|
/** Identifies the element (or elements) that labels the current element. */
|
|
35
|
-
|
|
31
|
+
"aria-labelledby"?: string;
|
|
36
32
|
/** Identifies the element (or elements) that describes the object. */
|
|
37
|
-
|
|
33
|
+
"aria-describedby"?: string;
|
|
38
34
|
/** Handler that is called when the press is released over the target. */
|
|
39
35
|
onPress?: (e: PressEvent) => void;
|
|
40
36
|
/** Handler that is called when a press interaction starts. */
|
|
@@ -74,10 +70,6 @@ export interface RadioAria {
|
|
|
74
70
|
isPressed: Accessor<boolean>;
|
|
75
71
|
}
|
|
76
72
|
|
|
77
|
-
// ============================================
|
|
78
|
-
// IMPLEMENTATION
|
|
79
|
-
// ============================================
|
|
80
|
-
|
|
81
73
|
/**
|
|
82
74
|
* Provides the behavior and accessibility implementation for an individual
|
|
83
75
|
* radio button in a radio group.
|
|
@@ -85,7 +77,7 @@ export interface RadioAria {
|
|
|
85
77
|
export function createRadio(
|
|
86
78
|
props: MaybeAccessor<AriaRadioProps>,
|
|
87
79
|
state: RadioGroupState,
|
|
88
|
-
ref: () => HTMLInputElement | null
|
|
80
|
+
ref: () => HTMLInputElement | null,
|
|
89
81
|
): RadioAria {
|
|
90
82
|
const getProps = () => access(props);
|
|
91
83
|
|
|
@@ -97,13 +89,14 @@ export function createRadio(
|
|
|
97
89
|
return selected === v;
|
|
98
90
|
};
|
|
99
91
|
|
|
100
|
-
// Warn if no accessible label
|
|
101
92
|
createEffect(() => {
|
|
102
93
|
const p = getProps();
|
|
103
94
|
const hasChildren = p.children != null;
|
|
104
|
-
const hasAriaLabel = p[
|
|
95
|
+
const hasAriaLabel = p["aria-label"] != null || p["aria-labelledby"] != null;
|
|
105
96
|
if (!hasChildren && !hasAriaLabel && isDevEnv()) {
|
|
106
|
-
console.warn(
|
|
97
|
+
console.warn(
|
|
98
|
+
"If you do not provide children, you must specify an aria-label for accessibility",
|
|
99
|
+
);
|
|
107
100
|
}
|
|
108
101
|
});
|
|
109
102
|
|
|
@@ -120,25 +113,19 @@ export function createRadio(
|
|
|
120
113
|
// We track `syncVersion` to ensure this effect runs on EVERY selection attempt,
|
|
121
114
|
// even in controlled mode where isSelected() may not change.
|
|
122
115
|
createEffect(() => {
|
|
123
|
-
|
|
124
|
-
if (!inputEl) return;
|
|
125
|
-
|
|
126
|
-
// Track syncVersion to trigger on any selection attempt
|
|
127
|
-
// This is crucial for controlled mode where isSelected() may not change
|
|
128
|
-
// syncVersion is stored in an internal WeakMap to maintain API parity with React-Aria
|
|
116
|
+
// The WeakMap accessor is outside the public API to maintain React Aria parity.
|
|
129
117
|
const syncVersion = radioGroupSyncVersion.get(state);
|
|
130
118
|
syncVersion?.();
|
|
131
119
|
|
|
132
|
-
// Read the reactive state to establish tracking and get current value
|
|
133
120
|
const shouldBeChecked = isSelected();
|
|
121
|
+
const inputEl = ref();
|
|
122
|
+
if (!inputEl) return;
|
|
134
123
|
|
|
135
|
-
// Sync the DOM checked state immediately
|
|
136
124
|
if (inputEl.checked !== shouldBeChecked) {
|
|
137
125
|
inputEl.checked = shouldBeChecked;
|
|
138
126
|
}
|
|
139
127
|
});
|
|
140
128
|
|
|
141
|
-
// Handle input change
|
|
142
129
|
// SolidJS-specific: Unlike React, the input's `checked` state can get out of sync
|
|
143
130
|
// with our reactive state. This happens because:
|
|
144
131
|
// 1. A readonly `<input type="radio" />` is always "checkable" in the browser
|
|
@@ -172,49 +159,88 @@ export function createRadio(
|
|
|
172
159
|
|
|
173
160
|
// Handle press state for keyboard interactions and cases where labelProps is not used.
|
|
174
161
|
const { pressProps, isPressed } = createPress({
|
|
175
|
-
get onPressStart() {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
get
|
|
179
|
-
|
|
180
|
-
|
|
162
|
+
get onPressStart() {
|
|
163
|
+
return getProps().onPressStart;
|
|
164
|
+
},
|
|
165
|
+
get onPressEnd() {
|
|
166
|
+
return getProps().onPressEnd;
|
|
167
|
+
},
|
|
168
|
+
get onPressChange() {
|
|
169
|
+
return getProps().onPressChange;
|
|
170
|
+
},
|
|
171
|
+
get onPress() {
|
|
172
|
+
return getProps().onPress;
|
|
173
|
+
},
|
|
174
|
+
get onPressUp() {
|
|
175
|
+
return getProps().onPressUp;
|
|
176
|
+
},
|
|
177
|
+
get onClick() {
|
|
178
|
+
return getProps().onClick;
|
|
179
|
+
},
|
|
180
|
+
get isDisabled() {
|
|
181
|
+
return isDisabled();
|
|
182
|
+
},
|
|
181
183
|
});
|
|
182
184
|
|
|
183
|
-
// Handle press state on the label.
|
|
184
185
|
const { pressProps: labelPressProps, isPressed: isLabelPressed } = createPress({
|
|
185
|
-
get onPressStart() {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
get
|
|
186
|
+
get onPressStart() {
|
|
187
|
+
return getProps().onPressStart;
|
|
188
|
+
},
|
|
189
|
+
get onPressEnd() {
|
|
190
|
+
return getProps().onPressEnd;
|
|
191
|
+
},
|
|
192
|
+
get onPressChange() {
|
|
193
|
+
return getProps().onPressChange;
|
|
194
|
+
},
|
|
195
|
+
get onPressUp() {
|
|
196
|
+
return getProps().onPressUp;
|
|
197
|
+
},
|
|
198
|
+
get onClick() {
|
|
199
|
+
return getProps().onClick;
|
|
200
|
+
},
|
|
189
201
|
onPress(e: PressEvent) {
|
|
190
202
|
getProps().onPress?.(e);
|
|
191
203
|
state.setSelectedValue(value());
|
|
192
204
|
ref()?.focus();
|
|
193
205
|
},
|
|
194
|
-
get isDisabled() {
|
|
206
|
+
get isDisabled() {
|
|
207
|
+
return isDisabled();
|
|
208
|
+
},
|
|
195
209
|
});
|
|
196
210
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
211
|
+
const { focusableProps } = createFocusable(
|
|
212
|
+
{
|
|
213
|
+
get isDisabled() {
|
|
214
|
+
return isDisabled();
|
|
215
|
+
},
|
|
216
|
+
get autoFocus() {
|
|
217
|
+
return getProps().autoFocus;
|
|
218
|
+
},
|
|
219
|
+
onFocus(e: FocusEvent) {
|
|
220
|
+
getProps().onFocus?.(e);
|
|
221
|
+
state.setLastFocusedValue(value());
|
|
222
|
+
},
|
|
223
|
+
get onBlur() {
|
|
224
|
+
return getProps().onBlur;
|
|
225
|
+
},
|
|
226
|
+
get onFocusChange() {
|
|
227
|
+
return getProps().onFocusChange;
|
|
228
|
+
},
|
|
229
|
+
get onKeyDown() {
|
|
230
|
+
return getProps().onKeyDown;
|
|
231
|
+
},
|
|
232
|
+
get onKeyUp() {
|
|
233
|
+
return getProps().onKeyUp;
|
|
234
|
+
},
|
|
204
235
|
},
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
get onKeyDown() { return getProps().onKeyDown; },
|
|
208
|
-
get onKeyUp() { return getProps().onKeyUp; },
|
|
209
|
-
}, ref as unknown as (el: HTMLElement) => void);
|
|
236
|
+
ref as unknown as (el: HTMLElement) => void,
|
|
237
|
+
);
|
|
210
238
|
|
|
211
|
-
// Combine press and focusable props for input
|
|
212
239
|
const interactions = mergeProps(pressProps, focusableProps);
|
|
213
240
|
|
|
214
|
-
|
|
215
|
-
|
|
241
|
+
const domProps = () =>
|
|
242
|
+
filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
|
|
216
243
|
|
|
217
|
-
// Calculate tabIndex based on selection and focus state
|
|
218
244
|
const getTabIndex = (): number | undefined => {
|
|
219
245
|
if (isDisabled()) {
|
|
220
246
|
return undefined;
|
|
@@ -225,13 +251,11 @@ export function createRadio(
|
|
|
225
251
|
const currentValue = value();
|
|
226
252
|
|
|
227
253
|
if (selected != null) {
|
|
228
|
-
// If there's a selection, only the selected radio is focusable
|
|
229
254
|
if (selected === currentValue) {
|
|
230
255
|
return 0;
|
|
231
256
|
}
|
|
232
257
|
return -1;
|
|
233
258
|
} else {
|
|
234
|
-
// If no selection, the last focused or first radio is focusable
|
|
235
259
|
if (lastFocused === currentValue || lastFocused == null) {
|
|
236
260
|
return 0;
|
|
237
261
|
}
|
|
@@ -239,10 +263,8 @@ export function createRadio(
|
|
|
239
263
|
}
|
|
240
264
|
};
|
|
241
265
|
|
|
242
|
-
// Get group data
|
|
243
266
|
const getGroupData = () => radioGroupData.get(state);
|
|
244
267
|
|
|
245
|
-
// Combined pressed state
|
|
246
268
|
const combinedIsPressed: Accessor<boolean> = () => isPressed() || isLabelPressed();
|
|
247
269
|
|
|
248
270
|
return {
|
|
@@ -254,10 +276,9 @@ export function createRadio(
|
|
|
254
276
|
const p = getProps();
|
|
255
277
|
const groupData = getGroupData();
|
|
256
278
|
|
|
257
|
-
// Build aria-describedby
|
|
258
279
|
const describedByIds: string[] = [];
|
|
259
|
-
if (p[
|
|
260
|
-
describedByIds.push(p[
|
|
280
|
+
if (p["aria-describedby"]) {
|
|
281
|
+
describedByIds.push(p["aria-describedby"]);
|
|
261
282
|
}
|
|
262
283
|
if (state.isInvalid && groupData?.errorMessageId) {
|
|
263
284
|
describedByIds.push(groupData.errorMessageId);
|
|
@@ -265,19 +286,20 @@ export function createRadio(
|
|
|
265
286
|
if (groupData?.descriptionId) {
|
|
266
287
|
describedByIds.push(groupData.descriptionId);
|
|
267
288
|
}
|
|
268
|
-
const ariaDescribedBy = describedByIds.length > 0 ? describedByIds.join(
|
|
289
|
+
const ariaDescribedBy = describedByIds.length > 0 ? describedByIds.join(" ") : undefined;
|
|
290
|
+
const validationBehavior = groupData?.validationBehavior ?? "native";
|
|
269
291
|
|
|
270
292
|
return mergeProps(domProps(), interactions, {
|
|
271
|
-
type:
|
|
293
|
+
type: "radio" as const,
|
|
272
294
|
name: groupData?.name,
|
|
273
295
|
form: groupData?.form,
|
|
274
296
|
tabIndex: getTabIndex(),
|
|
275
297
|
disabled: isDisabled(),
|
|
276
|
-
required: state.isRequired
|
|
298
|
+
required: validationBehavior === "native" ? state.isRequired : undefined,
|
|
277
299
|
checked: isSelected(),
|
|
278
300
|
value: value(),
|
|
279
301
|
onChange,
|
|
280
|
-
|
|
302
|
+
"aria-describedby": ariaDescribedBy,
|
|
281
303
|
}) as JSX.InputHTMLAttributes<HTMLInputElement>;
|
|
282
304
|
},
|
|
283
305
|
isDisabled: isDisabled(),
|
|
@@ -7,20 +7,16 @@
|
|
|
7
7
|
* This is a 1:1 port of @react-aria/radio's useRadioGroup hook.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { JSX } from
|
|
11
|
-
import { createField } from
|
|
12
|
-
import { createFocusWithin } from
|
|
13
|
-
import { mergeProps } from
|
|
14
|
-
import { filterDOMProps } from
|
|
15
|
-
import { focusSafely, getEventTarget } from
|
|
16
|
-
import { useLocale } from
|
|
17
|
-
import { createId } from
|
|
18
|
-
import { type MaybeAccessor, access } from
|
|
19
|
-
import { type RadioGroupState, type ValidityState } from
|
|
20
|
-
|
|
21
|
-
// ============================================
|
|
22
|
-
// TYPES
|
|
23
|
-
// ============================================
|
|
10
|
+
import { JSX } from "solid-js";
|
|
11
|
+
import { createField } from "../label/createField";
|
|
12
|
+
import { createFocusWithin } from "../interactions/createFocusWithin";
|
|
13
|
+
import { mergeProps } from "../utils/mergeProps";
|
|
14
|
+
import { filterDOMProps } from "../utils/filterDOMProps";
|
|
15
|
+
import { focusSafely, getEventTarget } from "../utils";
|
|
16
|
+
import { useLocale } from "../i18n";
|
|
17
|
+
import { createId } from "../ssr";
|
|
18
|
+
import { type MaybeAccessor, access } from "../utils/reactivity";
|
|
19
|
+
import { type RadioGroupState, type ValidityState } from "@proyecto-viviana/solid-stately";
|
|
24
20
|
|
|
25
21
|
export interface AriaRadioGroupProps {
|
|
26
22
|
/** The content to display as the label. */
|
|
@@ -28,7 +24,9 @@ export interface AriaRadioGroupProps {
|
|
|
28
24
|
/** A description for the radio group. Provides additional context. */
|
|
29
25
|
description?: JSX.Element;
|
|
30
26
|
/** An error message for the radio group. */
|
|
31
|
-
errorMessage?:
|
|
27
|
+
errorMessage?:
|
|
28
|
+
| JSX.Element
|
|
29
|
+
| ((validation: { isInvalid: boolean; validationErrors: string[] }) => JSX.Element);
|
|
32
30
|
/** Whether the radio group is disabled. */
|
|
33
31
|
isDisabled?: boolean;
|
|
34
32
|
/** Whether the radio group is read only. */
|
|
@@ -38,13 +36,13 @@ export interface AriaRadioGroupProps {
|
|
|
38
36
|
/** Whether the radio group is invalid. */
|
|
39
37
|
isInvalid?: boolean;
|
|
40
38
|
/** The axis the Radio Button(s) should align with. Defaults to 'vertical'. */
|
|
41
|
-
orientation?:
|
|
39
|
+
orientation?: "horizontal" | "vertical";
|
|
42
40
|
/** The name of the radio group, used when submitting an HTML form. */
|
|
43
41
|
name?: string;
|
|
44
42
|
/** The form to associate the radio group with. */
|
|
45
43
|
form?: string;
|
|
46
44
|
/** Validation behavior for the radio group. */
|
|
47
|
-
validationBehavior?:
|
|
45
|
+
validationBehavior?: "aria" | "native";
|
|
48
46
|
/** Handler that is called when the radio group receives focus. */
|
|
49
47
|
onFocus?: (e: FocusEvent) => void;
|
|
50
48
|
/** Handler that is called when the radio group loses focus. */
|
|
@@ -52,13 +50,13 @@ export interface AriaRadioGroupProps {
|
|
|
52
50
|
/** Handler that is called when the radio group's focus status changes. */
|
|
53
51
|
onFocusChange?: (isFocused: boolean) => void;
|
|
54
52
|
/** Defines a string value that labels the current element. */
|
|
55
|
-
|
|
53
|
+
"aria-label"?: string;
|
|
56
54
|
/** Identifies the element (or elements) that labels the current element. */
|
|
57
|
-
|
|
55
|
+
"aria-labelledby"?: string;
|
|
58
56
|
/** Identifies the element (or elements) that describes the object. */
|
|
59
|
-
|
|
57
|
+
"aria-describedby"?: string;
|
|
60
58
|
/** Identifies the element (or elements) that provide an error message for the object. */
|
|
61
|
-
|
|
59
|
+
"aria-errormessage"?: string;
|
|
62
60
|
/** The element's unique identifier. */
|
|
63
61
|
id?: string;
|
|
64
62
|
}
|
|
@@ -86,31 +84,27 @@ interface RadioGroupData {
|
|
|
86
84
|
form: string | undefined;
|
|
87
85
|
descriptionId: string | undefined;
|
|
88
86
|
errorMessageId: string | undefined;
|
|
89
|
-
validationBehavior:
|
|
87
|
+
validationBehavior: "aria" | "native";
|
|
90
88
|
}
|
|
91
89
|
|
|
92
90
|
export const radioGroupData: WeakMap<RadioGroupState, RadioGroupData> = new WeakMap();
|
|
93
91
|
|
|
94
|
-
// ============================================
|
|
95
|
-
// IMPLEMENTATION
|
|
96
|
-
// ============================================
|
|
97
|
-
|
|
98
92
|
/**
|
|
99
93
|
* Provides the behavior and accessibility implementation for a radio group component.
|
|
100
94
|
* Radio groups allow users to select a single item from a list of mutually exclusive options.
|
|
101
95
|
*/
|
|
102
96
|
export function createRadioGroup(
|
|
103
97
|
props: MaybeAccessor<AriaRadioGroupProps>,
|
|
104
|
-
state: RadioGroupState
|
|
98
|
+
state: RadioGroupState,
|
|
105
99
|
): RadioGroupAria {
|
|
106
100
|
const getProps = () => access(props);
|
|
107
101
|
const locale = useLocale();
|
|
108
102
|
|
|
109
|
-
const orientation = () => getProps().orientation ??
|
|
103
|
+
const orientation = () => getProps().orientation ?? "vertical";
|
|
110
104
|
const isReadOnly = () => getProps().isReadOnly ?? false;
|
|
111
105
|
const isRequired = () => getProps().isRequired ?? false;
|
|
112
106
|
const isDisabled = () => getProps().isDisabled ?? false;
|
|
113
|
-
const validationBehavior = () => getProps().validationBehavior ??
|
|
107
|
+
const validationBehavior = () => getProps().validationBehavior ?? "native";
|
|
114
108
|
const displayValidation = () => state.displayValidation();
|
|
115
109
|
const validationErrors = () => displayValidation().validationErrors;
|
|
116
110
|
const validationDetails = () => displayValidation().validationDetails;
|
|
@@ -120,18 +114,31 @@ export function createRadioGroup(
|
|
|
120
114
|
return errors.length > 0 ? errors : undefined;
|
|
121
115
|
};
|
|
122
116
|
|
|
123
|
-
// Use field for label, description, error message
|
|
124
117
|
const { labelProps, fieldProps, descriptionProps, errorMessageProps } = createField({
|
|
125
|
-
get id() {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
get
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
get
|
|
118
|
+
get id() {
|
|
119
|
+
return getProps().id;
|
|
120
|
+
},
|
|
121
|
+
get label() {
|
|
122
|
+
return getProps().label;
|
|
123
|
+
},
|
|
124
|
+
get "aria-label"() {
|
|
125
|
+
return getProps()["aria-label"];
|
|
126
|
+
},
|
|
127
|
+
get "aria-labelledby"() {
|
|
128
|
+
return getProps()["aria-labelledby"];
|
|
129
|
+
},
|
|
130
|
+
get description() {
|
|
131
|
+
return getProps().description;
|
|
132
|
+
},
|
|
133
|
+
get errorMessage() {
|
|
134
|
+
return getProps().errorMessage ?? fallbackErrorMessage();
|
|
135
|
+
},
|
|
136
|
+
get isInvalid() {
|
|
137
|
+
return isInvalid();
|
|
138
|
+
},
|
|
132
139
|
// Radio group is not an HTML input element so it
|
|
133
140
|
// shouldn't be labeled by a <label> element.
|
|
134
|
-
labelElementType:
|
|
141
|
+
labelElementType: "span",
|
|
135
142
|
});
|
|
136
143
|
|
|
137
144
|
// Handle focus within - reset focusable radio when group loses focus and no selection
|
|
@@ -146,13 +153,11 @@ export function createRadioGroup(
|
|
|
146
153
|
onFocusWithinChange: (isFocused: boolean) => getProps().onFocusChange?.(isFocused),
|
|
147
154
|
});
|
|
148
155
|
|
|
149
|
-
|
|
150
|
-
|
|
156
|
+
const domProps = () =>
|
|
157
|
+
filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });
|
|
151
158
|
|
|
152
|
-
// Generate group name
|
|
153
159
|
const groupName = getProps().name ?? createId();
|
|
154
160
|
|
|
155
|
-
// Store data for radio items to access
|
|
156
161
|
radioGroupData.set(state, {
|
|
157
162
|
name: groupName,
|
|
158
163
|
form: getProps().form,
|
|
@@ -162,31 +167,32 @@ export function createRadioGroup(
|
|
|
162
167
|
});
|
|
163
168
|
|
|
164
169
|
const getNavigableRadios = (root: HTMLElement): HTMLInputElement[] => {
|
|
165
|
-
return Array.from(root.querySelectorAll('input[type="radio"]'))
|
|
166
|
-
|
|
167
|
-
return el instanceof HTMLInputElement && !el.matches(
|
|
168
|
-
}
|
|
170
|
+
return Array.from(root.querySelectorAll('input[type="radio"]')).filter(
|
|
171
|
+
(el): el is HTMLInputElement => {
|
|
172
|
+
return el instanceof HTMLInputElement && !el.matches(":disabled");
|
|
173
|
+
},
|
|
174
|
+
);
|
|
169
175
|
};
|
|
170
176
|
|
|
171
177
|
// Keyboard navigation parity with React Aria.
|
|
172
178
|
const onKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (e) => {
|
|
173
|
-
let nextDir:
|
|
179
|
+
let nextDir: "next" | "prev" | null = null;
|
|
174
180
|
const currentOrientation = orientation();
|
|
175
|
-
const isHorizontal = currentOrientation !==
|
|
176
|
-
const isRTL = locale().direction ===
|
|
181
|
+
const isHorizontal = currentOrientation !== "vertical";
|
|
182
|
+
const isRTL = locale().direction === "rtl" && isHorizontal;
|
|
177
183
|
|
|
178
184
|
switch (e.key) {
|
|
179
|
-
case
|
|
180
|
-
nextDir = isRTL ?
|
|
185
|
+
case "ArrowRight":
|
|
186
|
+
nextDir = isRTL ? "prev" : "next";
|
|
181
187
|
break;
|
|
182
|
-
case
|
|
183
|
-
nextDir = isRTL ?
|
|
188
|
+
case "ArrowLeft":
|
|
189
|
+
nextDir = isRTL ? "next" : "prev";
|
|
184
190
|
break;
|
|
185
|
-
case
|
|
186
|
-
nextDir =
|
|
191
|
+
case "ArrowDown":
|
|
192
|
+
nextDir = "next";
|
|
187
193
|
break;
|
|
188
|
-
case
|
|
189
|
-
nextDir =
|
|
194
|
+
case "ArrowUp":
|
|
195
|
+
nextDir = "prev";
|
|
190
196
|
break;
|
|
191
197
|
default:
|
|
192
198
|
return;
|
|
@@ -207,17 +213,21 @@ export function createRadioGroup(
|
|
|
207
213
|
const eventTarget = getEventTarget<Element>(e);
|
|
208
214
|
const activeElement = root.ownerDocument.activeElement;
|
|
209
215
|
|
|
210
|
-
const currentRadio =
|
|
211
|
-
|
|
212
|
-
|
|
216
|
+
const currentRadio =
|
|
217
|
+
eventTarget instanceof HTMLInputElement && eventTarget.type === "radio"
|
|
218
|
+
? eventTarget
|
|
219
|
+
: activeElement instanceof HTMLInputElement && activeElement.type === "radio"
|
|
220
|
+
? activeElement
|
|
221
|
+
: null;
|
|
213
222
|
|
|
214
223
|
const currentIndex = currentRadio ? radios.indexOf(currentRadio) : -1;
|
|
215
224
|
|
|
216
225
|
let nextIndex: number;
|
|
217
|
-
if (nextDir ===
|
|
226
|
+
if (nextDir === "next") {
|
|
218
227
|
nextIndex = currentIndex >= 0 ? (currentIndex + 1) % radios.length : 0;
|
|
219
228
|
} else {
|
|
220
|
-
nextIndex =
|
|
229
|
+
nextIndex =
|
|
230
|
+
currentIndex >= 0 ? (currentIndex - 1 + radios.length) % radios.length : radios.length - 1;
|
|
221
231
|
}
|
|
222
232
|
|
|
223
233
|
const nextRadio = radios[nextIndex];
|
|
@@ -231,21 +241,17 @@ export function createRadioGroup(
|
|
|
231
241
|
|
|
232
242
|
return {
|
|
233
243
|
get radioGroupProps() {
|
|
234
|
-
return mergeProps(
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
'aria-orientation': orientation(),
|
|
246
|
-
...fieldProps,
|
|
247
|
-
}
|
|
248
|
-
) as JSX.HTMLAttributes<HTMLDivElement>;
|
|
244
|
+
return mergeProps(domProps(), focusWithinProps as unknown as Record<string, unknown>, {
|
|
245
|
+
role: "radiogroup",
|
|
246
|
+
onKeyDown,
|
|
247
|
+
"aria-invalid": isInvalid() || undefined,
|
|
248
|
+
"aria-errormessage": getProps()["aria-errormessage"],
|
|
249
|
+
"aria-readonly": isReadOnly() || undefined,
|
|
250
|
+
"aria-required": isRequired() || undefined,
|
|
251
|
+
"aria-disabled": isDisabled() || undefined,
|
|
252
|
+
"aria-orientation": orientation(),
|
|
253
|
+
...fieldProps,
|
|
254
|
+
}) as JSX.HTMLAttributes<HTMLDivElement>;
|
|
249
255
|
},
|
|
250
256
|
labelProps: labelProps as JSX.HTMLAttributes<HTMLElement>,
|
|
251
257
|
descriptionProps,
|