@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
|
@@ -5,14 +5,16 @@
|
|
|
5
5
|
* Based on @react-aria/calendar useCalendarCell
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { createSignal, createMemo, createEffect } from
|
|
9
|
-
import { access, type MaybeAccessor } from
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
8
|
+
import { createSignal, createMemo, createEffect, type Accessor } from "solid-js";
|
|
9
|
+
import { access, type MaybeAccessor } from "../utils/reactivity";
|
|
10
|
+
import { focusSafely } from "../utils/focus";
|
|
11
|
+
import { createFocusRing } from "../interactions/createFocusRing";
|
|
12
|
+
import { getInteractionModality } from "../interactions/createInteractionModality";
|
|
13
|
+
import { useLocale } from "../i18n";
|
|
14
|
+
import { mergeProps } from "../utils/mergeProps";
|
|
15
|
+
import type { CalendarState, CalendarDate, DateValue } from "@proyecto-viviana/solid-stately";
|
|
16
|
+
import { isToday as isTodayUtil, DateFormatter, getLocalTimeZone } from "@internationalized/date";
|
|
17
|
+
import { getCalendarHookData } from "./utils";
|
|
16
18
|
|
|
17
19
|
export interface AriaCalendarCellProps {
|
|
18
20
|
/** The date represented by the cell. */
|
|
@@ -32,10 +34,14 @@ export interface CalendarCellAria {
|
|
|
32
34
|
isSelected: boolean;
|
|
33
35
|
/** Whether the cell is focused. */
|
|
34
36
|
isFocused: boolean;
|
|
37
|
+
/** Whether the cell should display a keyboard focus ring. */
|
|
38
|
+
isFocusVisible: boolean;
|
|
35
39
|
/** Whether the cell is disabled. */
|
|
36
40
|
isDisabled: boolean;
|
|
37
41
|
/** Whether the cell is unavailable (e.g., booked date). */
|
|
38
42
|
isUnavailable: boolean;
|
|
43
|
+
/** Whether the cell is part of an invalid selection. */
|
|
44
|
+
isInvalid: boolean;
|
|
39
45
|
/** Whether the cell is outside the visible month. */
|
|
40
46
|
isOutsideMonth: boolean;
|
|
41
47
|
/** Whether the cell represents today. */
|
|
@@ -46,21 +52,22 @@ export interface CalendarCellAria {
|
|
|
46
52
|
formattedDate: string;
|
|
47
53
|
}
|
|
48
54
|
|
|
49
|
-
// ============================================
|
|
50
|
-
// IMPLEMENTATION
|
|
51
|
-
// ============================================
|
|
52
|
-
|
|
53
55
|
/**
|
|
54
56
|
* Provides the behavior and accessibility implementation for a calendar cell.
|
|
55
57
|
*/
|
|
56
58
|
export function createCalendarCell<T extends CalendarState>(
|
|
57
59
|
props: MaybeAccessor<AriaCalendarCellProps>,
|
|
58
60
|
state: T,
|
|
59
|
-
ref?: () => HTMLElement | null
|
|
61
|
+
ref?: () => HTMLElement | null,
|
|
60
62
|
): CalendarCellAria {
|
|
61
63
|
const getProps = () => access(props);
|
|
62
64
|
const [isPressed, setIsPressed] = createSignal(false);
|
|
65
|
+
const { focusProps, isFocusVisible: isRingFocusVisible } = createFocusRing();
|
|
63
66
|
const timeZone = getLocalTimeZone();
|
|
67
|
+
const inheritedLocale = useLocale();
|
|
68
|
+
const stateWithLocale = state as T & { locale?: Accessor<string> };
|
|
69
|
+
const locale = () => stateWithLocale.locale?.() ?? inheritedLocale().locale;
|
|
70
|
+
let ignoreNextClick = false;
|
|
64
71
|
|
|
65
72
|
// Get the date from props
|
|
66
73
|
const date = createMemo(() => getProps().date as CalendarDate);
|
|
@@ -68,16 +75,32 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
68
75
|
// Check states
|
|
69
76
|
const isSelected = createMemo(() => state.isSelected(date()));
|
|
70
77
|
const isFocused = createMemo(() => state.isCellFocused(date()));
|
|
78
|
+
const isInvalid = createMemo(() => state.isValueInvalid() && isSelected());
|
|
71
79
|
const isDisabled = createMemo(() => {
|
|
72
80
|
return getProps().isDisabled || state.isCellDisabled(date());
|
|
73
81
|
});
|
|
74
82
|
const isUnavailable = createMemo(() => state.isCellUnavailable(date()));
|
|
75
|
-
const isOutsideMonth = createMemo(
|
|
83
|
+
const isOutsideMonth = createMemo(
|
|
84
|
+
() => getProps().isOutsideMonth ?? state.isOutsideVisibleRange(date()),
|
|
85
|
+
);
|
|
76
86
|
const isToday = createMemo(() => isTodayUtil(date(), timeZone));
|
|
87
|
+
const isCellFocusVisible = createMemo(
|
|
88
|
+
() => isFocused() && isRingFocusVisible() && getInteractionModality() !== null,
|
|
89
|
+
);
|
|
77
90
|
|
|
78
91
|
// Format the date for display
|
|
79
92
|
const formattedDate = createMemo(() => {
|
|
80
|
-
|
|
93
|
+
const d = date();
|
|
94
|
+
const formatter = new DateFormatter(locale(), {
|
|
95
|
+
day: "numeric",
|
|
96
|
+
timeZone,
|
|
97
|
+
calendar: d.calendar.identifier,
|
|
98
|
+
} as Intl.DateTimeFormatOptions);
|
|
99
|
+
|
|
100
|
+
return (
|
|
101
|
+
formatter.formatToParts(d.toDate(timeZone)).find((part) => part.type === "day")?.value ??
|
|
102
|
+
d.day.toString()
|
|
103
|
+
);
|
|
81
104
|
});
|
|
82
105
|
|
|
83
106
|
// Handle pointer down - this is where selection happens
|
|
@@ -89,6 +112,7 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
89
112
|
// Select the date on pointer down for immediate response
|
|
90
113
|
// This matches React Aria's behavior of using onPressStart
|
|
91
114
|
state.selectDate(date());
|
|
115
|
+
ignoreNextClick = true;
|
|
92
116
|
// Prevent default to avoid double-triggering with onClick
|
|
93
117
|
e.preventDefault();
|
|
94
118
|
}
|
|
@@ -96,6 +120,11 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
96
120
|
|
|
97
121
|
// Handle click - kept for accessibility (keyboard Enter/Space)
|
|
98
122
|
const handleClick = () => {
|
|
123
|
+
if (ignoreNextClick) {
|
|
124
|
+
ignoreNextClick = false;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
99
128
|
// Only select on click if not already selected via pointerdown
|
|
100
129
|
// This handles keyboard activation (Enter/Space)
|
|
101
130
|
if (!isDisabled() && !isUnavailable()) {
|
|
@@ -108,50 +137,67 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
108
137
|
};
|
|
109
138
|
|
|
110
139
|
// Keep DOM focus synchronized with focused date updates.
|
|
140
|
+
// Use focusSafely (preventScroll) to match @react-aria/calendar — bare focus()
|
|
141
|
+
// causes the browser to auto-scroll the page when bringing the cell into view,
|
|
142
|
+
// which is wrong inside a popover. Scroll-into-view should be opt-in based on
|
|
143
|
+
// interaction modality (handled at a higher layer when needed).
|
|
111
144
|
createEffect(() => {
|
|
112
145
|
const element = ref?.();
|
|
113
146
|
if (element && isFocused()) {
|
|
114
|
-
element
|
|
147
|
+
focusSafely(element);
|
|
115
148
|
}
|
|
116
149
|
});
|
|
117
150
|
|
|
118
151
|
// Cell props (for the td element)
|
|
119
152
|
const cellProps = createMemo(() => ({
|
|
120
|
-
role:
|
|
121
|
-
|
|
122
|
-
|
|
153
|
+
role: "gridcell",
|
|
154
|
+
"aria-disabled": isDisabled() || isUnavailable() || undefined,
|
|
155
|
+
"aria-selected": isSelected() || undefined,
|
|
156
|
+
"aria-invalid": isInvalid() || undefined,
|
|
123
157
|
}));
|
|
124
158
|
|
|
125
159
|
// Button props (for the interactive element inside)
|
|
126
160
|
const buttonProps = createMemo(() => {
|
|
127
161
|
const d = date();
|
|
128
|
-
const formatter = new DateFormatter(
|
|
129
|
-
weekday:
|
|
130
|
-
year:
|
|
131
|
-
month:
|
|
132
|
-
day:
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
162
|
+
const formatter = new DateFormatter(locale(), {
|
|
163
|
+
weekday: "long",
|
|
164
|
+
year: "numeric",
|
|
165
|
+
month: "long",
|
|
166
|
+
day: "numeric",
|
|
167
|
+
calendar: d.calendar.identifier,
|
|
168
|
+
} as Intl.DateTimeFormatOptions);
|
|
169
|
+
let label = formatter.format(d.toDate(timeZone));
|
|
170
|
+
if (isSelected()) {
|
|
171
|
+
label += " selected";
|
|
172
|
+
}
|
|
173
|
+
const errorMessageId = getCalendarHookData(state)?.errorMessageId;
|
|
174
|
+
|
|
175
|
+
return mergeProps(
|
|
176
|
+
focusProps as Record<string, unknown>,
|
|
177
|
+
{
|
|
178
|
+
role: "button",
|
|
179
|
+
tabIndex: isFocused() ? 0 : -1,
|
|
180
|
+
"aria-label": label,
|
|
181
|
+
"aria-disabled": isDisabled() || isUnavailable() || undefined,
|
|
182
|
+
"aria-invalid": isInvalid() || undefined,
|
|
183
|
+
"aria-describedby": isInvalid() ? errorMessageId : undefined,
|
|
184
|
+
"aria-pressed": isPressed() || undefined,
|
|
185
|
+
"data-focus-visible": isCellFocusVisible() || undefined,
|
|
186
|
+
disabled: isDisabled() || isUnavailable(),
|
|
187
|
+
onClick: handleClick,
|
|
188
|
+
onPointerDown: handlePointerDown,
|
|
189
|
+
onPointerUp: handlePointerUp,
|
|
190
|
+
onPointerLeave: handlePointerUp,
|
|
191
|
+
onFocus: () => {
|
|
192
|
+
// Only update if this cell isn't already the focused date.
|
|
193
|
+
// This prevents infinite loops when focus is programmatically set.
|
|
194
|
+
if (!state.isCellFocused(d)) {
|
|
195
|
+
state.setFocusedDate(d);
|
|
196
|
+
}
|
|
197
|
+
state.setFocused(true);
|
|
198
|
+
},
|
|
199
|
+
} as Record<string, unknown>,
|
|
200
|
+
);
|
|
155
201
|
});
|
|
156
202
|
|
|
157
203
|
return {
|
|
@@ -167,12 +213,18 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
167
213
|
get isFocused() {
|
|
168
214
|
return isFocused();
|
|
169
215
|
},
|
|
216
|
+
get isFocusVisible() {
|
|
217
|
+
return isCellFocusVisible();
|
|
218
|
+
},
|
|
170
219
|
get isDisabled() {
|
|
171
220
|
return isDisabled();
|
|
172
221
|
},
|
|
173
222
|
get isUnavailable() {
|
|
174
223
|
return isUnavailable();
|
|
175
224
|
},
|
|
225
|
+
get isInvalid() {
|
|
226
|
+
return isInvalid();
|
|
227
|
+
},
|
|
176
228
|
get isOutsideMonth() {
|
|
177
229
|
return isOutsideMonth();
|
|
178
230
|
},
|
|
@@ -5,13 +5,10 @@
|
|
|
5
5
|
* Based on @react-aria/calendar useCalendarGrid
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { createMemo } from
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
|
|
12
|
-
// ============================================
|
|
13
|
-
// TYPES
|
|
14
|
-
// ============================================
|
|
8
|
+
import { createMemo } from "solid-js";
|
|
9
|
+
import { DateFormatter, startOfWeek, today } from "@internationalized/date";
|
|
10
|
+
import { access, type MaybeAccessor } from "../utils/reactivity";
|
|
11
|
+
import type { CalendarState, CalendarDate } from "@proyecto-viviana/solid-stately";
|
|
15
12
|
|
|
16
13
|
export interface AriaCalendarGridProps {
|
|
17
14
|
/** The start date of the grid (defaults to start of focused month). */
|
|
@@ -19,7 +16,7 @@ export interface AriaCalendarGridProps {
|
|
|
19
16
|
/** The end date of the grid (defaults to end of focused month). */
|
|
20
17
|
endDate?: CalendarDate;
|
|
21
18
|
/** The number of weeks to display. */
|
|
22
|
-
weekdayStyle?:
|
|
19
|
+
weekdayStyle?: "narrow" | "short" | "long";
|
|
23
20
|
}
|
|
24
21
|
|
|
25
22
|
export interface CalendarGridAria {
|
|
@@ -31,90 +28,115 @@ export interface CalendarGridAria {
|
|
|
31
28
|
weekDays: string[];
|
|
32
29
|
}
|
|
33
30
|
|
|
34
|
-
// ============================================
|
|
35
|
-
// IMPLEMENTATION
|
|
36
|
-
// ============================================
|
|
37
|
-
|
|
38
31
|
/**
|
|
39
32
|
* Provides the behavior and accessibility implementation for a calendar grid.
|
|
40
33
|
*/
|
|
41
34
|
export function createCalendarGrid<T extends CalendarState>(
|
|
42
|
-
|
|
35
|
+
props: MaybeAccessor<AriaCalendarGridProps>,
|
|
43
36
|
state: T,
|
|
44
|
-
ref?: () => HTMLElement | null
|
|
37
|
+
ref?: () => HTMLElement | null,
|
|
45
38
|
): CalendarGridAria {
|
|
46
39
|
// Week days for headers
|
|
47
|
-
const weekDays = createMemo(() =>
|
|
40
|
+
const weekDays = createMemo(() => {
|
|
41
|
+
const gridProps = access(props);
|
|
42
|
+
const formatter = new DateFormatter(state.locale(), {
|
|
43
|
+
weekday: gridProps.weekdayStyle ?? "narrow",
|
|
44
|
+
timeZone: state.timeZone,
|
|
45
|
+
});
|
|
46
|
+
const weekStart = startOfWeek(today(state.timeZone), state.locale(), state.firstDayOfWeek());
|
|
47
|
+
|
|
48
|
+
return Array.from({ length: 7 }, (_, index) =>
|
|
49
|
+
formatter.format(weekStart.add({ days: index }).toDate(state.timeZone)),
|
|
50
|
+
);
|
|
51
|
+
});
|
|
48
52
|
|
|
49
53
|
// Handle keyboard navigation
|
|
50
54
|
const isRTL = (): boolean => {
|
|
51
55
|
const element = ref?.();
|
|
52
|
-
const scopedDirection = element?.closest(
|
|
53
|
-
const documentDirection = typeof document !==
|
|
54
|
-
return (scopedDirection ?? documentDirection) ===
|
|
56
|
+
const scopedDirection = element?.closest("[dir]")?.getAttribute("dir");
|
|
57
|
+
const documentDirection = typeof document !== "undefined" ? document.dir : "";
|
|
58
|
+
return (scopedDirection ?? documentDirection) === "rtl";
|
|
55
59
|
};
|
|
56
60
|
|
|
57
61
|
const handleKeyDown = (e: KeyboardEvent) => {
|
|
58
62
|
if (state.isDisabled()) return;
|
|
59
63
|
|
|
60
64
|
switch (e.key) {
|
|
61
|
-
case
|
|
65
|
+
case "ArrowLeft":
|
|
62
66
|
e.preventDefault();
|
|
67
|
+
e.stopPropagation();
|
|
63
68
|
if (isRTL()) {
|
|
64
69
|
state.focusNextDay();
|
|
65
70
|
} else {
|
|
66
71
|
state.focusPreviousDay();
|
|
67
72
|
}
|
|
68
73
|
break;
|
|
69
|
-
case
|
|
74
|
+
case "ArrowRight":
|
|
70
75
|
e.preventDefault();
|
|
76
|
+
e.stopPropagation();
|
|
71
77
|
if (isRTL()) {
|
|
72
78
|
state.focusPreviousDay();
|
|
73
79
|
} else {
|
|
74
80
|
state.focusNextDay();
|
|
75
81
|
}
|
|
76
82
|
break;
|
|
77
|
-
case
|
|
83
|
+
case "ArrowUp":
|
|
78
84
|
e.preventDefault();
|
|
85
|
+
e.stopPropagation();
|
|
79
86
|
state.focusPreviousWeek();
|
|
80
87
|
break;
|
|
81
|
-
case
|
|
88
|
+
case "ArrowDown":
|
|
82
89
|
e.preventDefault();
|
|
90
|
+
e.stopPropagation();
|
|
83
91
|
state.focusNextWeek();
|
|
84
92
|
break;
|
|
85
|
-
case
|
|
93
|
+
case "PageUp":
|
|
86
94
|
e.preventDefault();
|
|
95
|
+
e.stopPropagation();
|
|
87
96
|
if (e.shiftKey) {
|
|
88
97
|
state.focusPreviousSection(); // Previous year
|
|
89
98
|
} else {
|
|
90
|
-
state.
|
|
99
|
+
state.setFocusedDate(state.focusedDate().subtract({ months: 1 }));
|
|
91
100
|
}
|
|
92
101
|
break;
|
|
93
|
-
case
|
|
102
|
+
case "PageDown":
|
|
94
103
|
e.preventDefault();
|
|
104
|
+
e.stopPropagation();
|
|
95
105
|
if (e.shiftKey) {
|
|
96
106
|
state.focusNextSection(); // Next year
|
|
97
107
|
} else {
|
|
98
|
-
state.
|
|
108
|
+
state.setFocusedDate(state.focusedDate().add({ months: 1 }));
|
|
99
109
|
}
|
|
100
110
|
break;
|
|
101
|
-
case
|
|
111
|
+
case "Home":
|
|
102
112
|
e.preventDefault();
|
|
113
|
+
e.stopPropagation();
|
|
103
114
|
state.focusPageStart();
|
|
104
115
|
break;
|
|
105
|
-
case
|
|
116
|
+
case "End":
|
|
106
117
|
e.preventDefault();
|
|
118
|
+
e.stopPropagation();
|
|
107
119
|
state.focusPageEnd();
|
|
108
120
|
break;
|
|
109
|
-
case
|
|
110
|
-
case
|
|
121
|
+
case "Enter":
|
|
122
|
+
case " ":
|
|
111
123
|
e.preventDefault();
|
|
112
124
|
state.selectFocusedDate();
|
|
113
125
|
break;
|
|
114
|
-
case
|
|
115
|
-
if (
|
|
126
|
+
case "Escape":
|
|
127
|
+
if (
|
|
128
|
+
"anchorDate" in state &&
|
|
129
|
+
typeof state.anchorDate === "function" &&
|
|
130
|
+
state.anchorDate() &&
|
|
131
|
+
"setAnchorDate" in state &&
|
|
132
|
+
typeof state.setAnchorDate === "function"
|
|
133
|
+
) {
|
|
116
134
|
e.preventDefault();
|
|
135
|
+
e.stopPropagation();
|
|
117
136
|
state.setAnchorDate(null);
|
|
137
|
+
if ("setDragging" in state && typeof state.setDragging === "function") {
|
|
138
|
+
state.setDragging(false);
|
|
139
|
+
}
|
|
118
140
|
}
|
|
119
141
|
break;
|
|
120
142
|
}
|
|
@@ -122,9 +144,9 @@ export function createCalendarGrid<T extends CalendarState>(
|
|
|
122
144
|
|
|
123
145
|
// Grid props
|
|
124
146
|
const gridProps = createMemo(() => ({
|
|
125
|
-
role:
|
|
126
|
-
|
|
127
|
-
|
|
147
|
+
role: "grid",
|
|
148
|
+
"aria-readonly": state.isReadOnly() || undefined,
|
|
149
|
+
"aria-disabled": state.isDisabled() || undefined,
|
|
128
150
|
tabIndex: state.isFocused() ? 0 : -1,
|
|
129
151
|
onFocus: () => state.setFocused(true),
|
|
130
152
|
onBlur: () => state.setFocused(false),
|
|
@@ -5,15 +5,17 @@
|
|
|
5
5
|
* Based on @react-aria/calendar useRangeCalendar
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { createMemo } from
|
|
9
|
-
import { createId } from
|
|
10
|
-
import { access, type MaybeAccessor } from
|
|
11
|
-
import { mergeProps } from
|
|
12
|
-
import type { RangeCalendarState } from
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
import { createMemo } from "solid-js";
|
|
9
|
+
import { createId } from "../ssr";
|
|
10
|
+
import { access, type MaybeAccessor } from "../utils/reactivity";
|
|
11
|
+
import { mergeProps } from "../utils/mergeProps";
|
|
12
|
+
import type { RangeCalendarState } from "@proyecto-viviana/solid-stately";
|
|
13
|
+
import {
|
|
14
|
+
formatSelectedDateDescription,
|
|
15
|
+
formatVisibleRangeDescription,
|
|
16
|
+
getCalendarHookData,
|
|
17
|
+
setCalendarHookData,
|
|
18
|
+
} from "./utils";
|
|
17
19
|
|
|
18
20
|
export interface AriaRangeCalendarProps {
|
|
19
21
|
/** An ID for the calendar. */
|
|
@@ -23,11 +25,19 @@ export interface AriaRangeCalendarProps {
|
|
|
23
25
|
/** Whether the calendar is read-only. */
|
|
24
26
|
isReadOnly?: boolean;
|
|
25
27
|
/** An accessible label for the calendar. */
|
|
26
|
-
|
|
28
|
+
"aria-label"?: string;
|
|
27
29
|
/** The ID of an element that labels the calendar. */
|
|
28
|
-
|
|
30
|
+
"aria-labelledby"?: string;
|
|
29
31
|
/** The ID of an element that describes the calendar. */
|
|
30
|
-
|
|
32
|
+
"aria-describedby"?: string;
|
|
33
|
+
/** The ID of an element that provides additional details about the calendar. */
|
|
34
|
+
"aria-details"?: string;
|
|
35
|
+
/** Whether the current selection is invalid. */
|
|
36
|
+
isInvalid?: boolean;
|
|
37
|
+
/** Error message rendered for invalid selections. */
|
|
38
|
+
errorMessage?: string;
|
|
39
|
+
/** ID of the rendered error message element. */
|
|
40
|
+
errorMessageId?: string;
|
|
31
41
|
}
|
|
32
42
|
|
|
33
43
|
export interface RangeCalendarAria {
|
|
@@ -39,35 +49,55 @@ export interface RangeCalendarAria {
|
|
|
39
49
|
nextButtonProps: Record<string, unknown>;
|
|
40
50
|
/** Props for the title/heading element. */
|
|
41
51
|
titleProps: Record<string, unknown>;
|
|
52
|
+
/** Props for the error message element, if any. */
|
|
53
|
+
errorMessageProps: Record<string, unknown>;
|
|
42
54
|
/** An accessible label for the title. */
|
|
43
55
|
title: string;
|
|
44
56
|
}
|
|
45
57
|
|
|
46
|
-
// ============================================
|
|
47
|
-
// IMPLEMENTATION
|
|
48
|
-
// ============================================
|
|
49
|
-
|
|
50
58
|
/**
|
|
51
59
|
* Provides the behavior and accessibility implementation for a range calendar component.
|
|
52
60
|
*/
|
|
53
61
|
export function createRangeCalendar<T extends RangeCalendarState>(
|
|
54
62
|
props: MaybeAccessor<AriaRangeCalendarProps>,
|
|
55
|
-
state: T
|
|
63
|
+
state: T,
|
|
56
64
|
): RangeCalendarAria {
|
|
57
65
|
const getProps = () => access(props);
|
|
58
66
|
const id = createId(getProps().id);
|
|
59
67
|
const titleId = createId();
|
|
68
|
+
const errorMessageId = createId(getProps().errorMessageId);
|
|
60
69
|
|
|
61
70
|
// Title (e.g., "December 2024")
|
|
62
71
|
const title = createMemo(() => state.title());
|
|
72
|
+
const visibleRangeDescription = createMemo(() => {
|
|
73
|
+
const range = state.visibleRange();
|
|
74
|
+
return formatVisibleRangeDescription(range.start, range.end, state.timeZone, state.locale());
|
|
75
|
+
});
|
|
76
|
+
const calendarLabel = createMemo(() => {
|
|
77
|
+
const p = getProps();
|
|
78
|
+
return [p["aria-label"], visibleRangeDescription()].filter(Boolean).join(", ");
|
|
79
|
+
});
|
|
80
|
+
const selectedDateDescription = createMemo(() => formatSelectedDateDescription(state));
|
|
81
|
+
|
|
82
|
+
const initialProps = getProps();
|
|
83
|
+
const existingHookData = getCalendarHookData(state);
|
|
84
|
+
setCalendarHookData(state, {
|
|
85
|
+
errorMessageId:
|
|
86
|
+
initialProps.errorMessage || initialProps.errorMessageId
|
|
87
|
+
? errorMessageId
|
|
88
|
+
: existingHookData?.errorMessageId,
|
|
89
|
+
get selectedDateDescription() {
|
|
90
|
+
return selectedDateDescription();
|
|
91
|
+
},
|
|
92
|
+
});
|
|
63
93
|
|
|
64
94
|
// Previous button props
|
|
65
95
|
const prevButtonProps = createMemo(() => {
|
|
66
96
|
const p = getProps();
|
|
67
|
-
const isDisabled = p.isDisabled || state.isDisabled();
|
|
97
|
+
const isDisabled = p.isDisabled || state.isDisabled() || state.isPreviousVisibleRangeInvalid();
|
|
68
98
|
|
|
69
99
|
return {
|
|
70
|
-
|
|
100
|
+
"aria-label": "Previous month",
|
|
71
101
|
onClick: () => {
|
|
72
102
|
if (!isDisabled) {
|
|
73
103
|
state.focusPreviousPage();
|
|
@@ -81,10 +111,10 @@ export function createRangeCalendar<T extends RangeCalendarState>(
|
|
|
81
111
|
// Next button props
|
|
82
112
|
const nextButtonProps = createMemo(() => {
|
|
83
113
|
const p = getProps();
|
|
84
|
-
const isDisabled = p.isDisabled || state.isDisabled();
|
|
114
|
+
const isDisabled = p.isDisabled || state.isDisabled() || state.isNextVisibleRangeInvalid();
|
|
85
115
|
|
|
86
116
|
return {
|
|
87
|
-
|
|
117
|
+
"aria-label": "Next month",
|
|
88
118
|
onClick: () => {
|
|
89
119
|
if (!isDisabled) {
|
|
90
120
|
state.focusNextPage();
|
|
@@ -98,22 +128,24 @@ export function createRangeCalendar<T extends RangeCalendarState>(
|
|
|
98
128
|
// Title props
|
|
99
129
|
const titleProps = createMemo(() => ({
|
|
100
130
|
id: titleId,
|
|
101
|
-
|
|
131
|
+
"aria-live": "polite" as const,
|
|
132
|
+
}));
|
|
133
|
+
const errorMessageProps = createMemo(() => ({
|
|
134
|
+
id: errorMessageId,
|
|
102
135
|
}));
|
|
103
136
|
|
|
104
137
|
// Calendar container props
|
|
105
138
|
const calendarProps = createMemo(() => {
|
|
106
139
|
const p = getProps();
|
|
107
140
|
|
|
108
|
-
return mergeProps(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
);
|
|
141
|
+
return mergeProps({
|
|
142
|
+
id,
|
|
143
|
+
role: "application",
|
|
144
|
+
"aria-labelledby": p["aria-labelledby"],
|
|
145
|
+
"aria-label": calendarLabel(),
|
|
146
|
+
"aria-describedby": p["aria-describedby"],
|
|
147
|
+
"aria-details": p["aria-details"],
|
|
148
|
+
});
|
|
117
149
|
});
|
|
118
150
|
|
|
119
151
|
return {
|
|
@@ -129,6 +161,9 @@ export function createRangeCalendar<T extends RangeCalendarState>(
|
|
|
129
161
|
get titleProps() {
|
|
130
162
|
return titleProps();
|
|
131
163
|
},
|
|
164
|
+
get errorMessageProps() {
|
|
165
|
+
return errorMessageProps();
|
|
166
|
+
},
|
|
132
167
|
get title() {
|
|
133
168
|
return title();
|
|
134
169
|
},
|