@proyecto-viviana/solidaria 0.2.5 → 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/LICENSE +21 -0
- package/README.md +31 -236
- package/dist/actiongroup/createActionGroup.d.ts +29 -0
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -0
- package/dist/actiongroup/index.d.ts +2 -0
- package/dist/actiongroup/index.d.ts.map +1 -0
- package/dist/autocomplete/createAutocomplete.d.ts +16 -12
- 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 +11 -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 +32 -0
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -0
- package/dist/button/index.d.ts +6 -4
- 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 +8 -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 +7 -3
- 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 +11 -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 +56 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/color/createColorArea.d.ts +3 -3
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorField.d.ts +4 -4
- package/dist/color/createColorField.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts +4 -4
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorSwatch.d.ts +2 -2
- package/dist/color/createColorSwatch.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts +3 -3
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/color/index.d.ts +6 -6
- package/dist/color/types.d.ts +98 -16
- package/dist/color/types.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +16 -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 +57 -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 +42 -0
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -0
- package/dist/datepicker/createDateSegment.d.ts +11 -3
- 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 +29 -0
- package/dist/datepicker/createTimeSegment.d.ts.map +1 -0
- package/dist/datepicker/index.d.ts +7 -4
- 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 -3
- 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 +6 -2
- package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
- 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 +55 -4
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts +3 -3
- package/dist/dnd/createDroppableItem.d.ts.map +1 -1
- 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/createGrid.d.ts.map +1 -1
- 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 -49
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18089 -15690
- package/dist/index.js.map +1 -7
- 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 +23 -7
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/link/index.d.ts +1 -1
- package/dist/listbox/createListBox.d.ts +12 -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 +8 -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 +27 -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 +19 -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 +11 -11
- 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 +6 -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 +13 -5
- 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 +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/platform.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 +34 -32
- package/src/actiongroup/createActionGroup.ts +334 -0
- package/src/actiongroup/index.ts +8 -0
- package/src/autocomplete/createAutocomplete.ts +137 -131
- package/src/autocomplete/index.ts +1 -1
- package/src/breadcrumbs/createBreadcrumbs.ts +37 -51
- 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 +121 -0
- package/src/button/index.ts +10 -4
- package/src/button/types.ts +18 -12
- package/src/calendar/createCalendar.ts +62 -29
- package/src/calendar/createCalendarCell.ts +102 -48
- package/src/calendar/createCalendarGrid.ts +78 -47
- package/src/calendar/createRangeCalendar.ts +66 -31
- package/src/calendar/createRangeCalendarCell.ts +115 -37
- 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 +86 -45
- 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 +246 -0
- package/src/color/createColorArea.ts +458 -314
- package/src/color/createColorField.ts +186 -137
- package/src/color/createColorSlider.ts +444 -197
- package/src/color/createColorSwatch.ts +65 -40
- package/src/color/createColorWheel.ts +343 -208
- package/src/color/index.ts +24 -24
- package/src/color/types.ts +198 -116
- package/src/combobox/createComboBox.ts +727 -647
- package/src/combobox/index.ts +6 -6
- package/src/combobox/intl/index.ts +5 -5
- package/src/datepicker/createDateField.ts +192 -39
- package/src/datepicker/createDatePicker.ts +294 -63
- package/src/datepicker/createDatePickerGroup.ts +149 -0
- package/src/datepicker/createDateRangePicker.ts +294 -0
- package/src/datepicker/createDateSegment.ts +316 -75
- package/src/datepicker/createTimeField.ts +38 -34
- package/src/datepicker/createTimeSegment.ts +352 -0
- package/src/datepicker/index.ts +24 -11
- package/src/dialog/createDialog.ts +127 -120
- package/src/dialog/index.ts +2 -2
- package/src/dialog/types.ts +19 -19
- package/src/disclosure/createDisclosure.ts +138 -33
- package/src/disclosure/createDisclosureGroup.ts +8 -18
- package/src/disclosure/index.ts +2 -2
- package/src/dnd/createDrag.ts +218 -209
- package/src/dnd/createDraggableCollection.ts +96 -63
- package/src/dnd/createDraggableItem.ts +260 -243
- package/src/dnd/createDrop.ts +313 -321
- package/src/dnd/createDroppableCollection.ts +799 -293
- package/src/dnd/createDroppableItem.ts +215 -213
- package/src/dnd/index.ts +66 -47
- package/src/dnd/types.ts +86 -89
- package/src/dnd/utils.ts +281 -294
- package/src/focus/FocusScope.tsx +155 -164
- package/src/focus/createAutoFocus.ts +305 -321
- package/src/focus/createFocusRestore.ts +300 -313
- package/src/focus/createVirtualFocus.ts +380 -396
- package/src/focus/index.ts +4 -8
- package/src/form/createFormReset.ts +4 -4
- package/src/form/createFormValidation.ts +201 -224
- package/src/form/index.ts +8 -11
- package/src/grid/GridKeyboardDelegate.ts +30 -30
- package/src/grid/createGrid.ts +38 -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 +45 -24
- 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 +66 -79
- package/src/i18n/createDateFormatter.ts +75 -83
- package/src/i18n/createFilter.ts +118 -131
- package/src/i18n/createNumberFormatter.ts +50 -52
- package/src/i18n/createStringFormatter.ts +19 -15
- package/src/i18n/index.ts +37 -40
- package/src/i18n/locale.tsx +163 -188
- package/src/i18n/utils.ts +95 -99
- package/src/index.ts +114 -164
- package/src/interactions/FocusableProvider.tsx +3 -7
- package/src/interactions/PressEvent.ts +4 -4
- package/src/interactions/createFocus.ts +16 -11
- package/src/interactions/createFocusRing.ts +21 -19
- package/src/interactions/createFocusWithin.ts +24 -16
- 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 +174 -174
- package/src/interactions/createMove.ts +299 -289
- package/src/interactions/createPress.ts +168 -91
- 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 +356 -377
- package/src/landmark/index.ts +8 -8
- package/src/link/createLink.ts +96 -54
- package/src/link/index.ts +1 -1
- package/src/listbox/createListBox.ts +319 -269
- package/src/listbox/createOption.ts +208 -151
- package/src/listbox/index.ts +8 -12
- package/src/live-announcer/announce.ts +295 -322
- package/src/live-announcer/index.ts +9 -9
- package/src/menu/createMenu.ts +434 -396
- package/src/menu/createMenuItem.ts +201 -149
- package/src/menu/createMenuTrigger.ts +88 -88
- package/src/menu/index.ts +9 -18
- package/src/meter/createMeter.ts +7 -20
- package/src/meter/index.ts +1 -1
- package/src/numberfield/createNumberField.ts +368 -268
- package/src/numberfield/index.ts +5 -5
- package/src/overlays/ariaHideOutside.ts +223 -219
- package/src/overlays/createInteractOutside.ts +152 -149
- package/src/overlays/createModal.tsx +238 -202
- package/src/overlays/createOverlay.ts +195 -155
- package/src/overlays/createOverlayTrigger.ts +85 -85
- package/src/overlays/createPreventScroll.ts +288 -266
- package/src/overlays/index.ts +37 -44
- package/src/popover/calculatePosition.ts +117 -119
- package/src/popover/createOverlayPosition.ts +52 -43
- package/src/popover/createPopover.ts +63 -24
- package/src/popover/index.ts +3 -3
- package/src/progress/createProgressBar.ts +36 -32
- package/src/progress/index.ts +1 -1
- package/src/radio/createRadio.ts +95 -73
- package/src/radio/createRadioGroup.ts +142 -62
- package/src/radio/createRadioGroupState.ts +7 -31
- package/src/radio/index.ts +3 -8
- package/src/searchfield/createSearchField.ts +269 -186
- package/src/searchfield/index.ts +2 -2
- package/src/select/createHiddenSelect.tsx +276 -236
- package/src/select/createSelect.ts +430 -395
- package/src/select/index.ts +9 -14
- 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 +333 -349
- package/src/slider/index.ts +2 -2
- package/src/ssr/index.tsx +331 -370
- 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 +155 -86
- 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 +138 -127
- package/src/tabs/index.ts +1 -1
- package/src/tag/createTag.ts +171 -40
- package/src/tag/createTagGroup.ts +50 -39
- 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 +34 -26
- package/src/toast/createToastRegion.ts +169 -27
- 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 +226 -169
- package/src/toolbar/index.ts +1 -1
- package/src/tooltip/createTooltip.ts +66 -79
- package/src/tooltip/createTooltipTrigger.ts +238 -222
- package/src/tooltip/index.ts +6 -6
- package/src/tree/createTree.ts +259 -246
- package/src/tree/createTreeItem.ts +282 -233
- package/src/tree/createTreeSelectionCheckbox.ts +71 -68
- package/src/tree/index.ts +16 -16
- package/src/tree/types.ts +95 -87
- package/src/utils/createDescription.ts +6 -23
- package/src/utils/dom.ts +61 -54
- package/src/utils/env.ts +53 -54
- 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 +16 -6
- package/src/utils/reactivity.ts +3 -3
- package/src/utils/textSelection.ts +16 -16
- package/src/visually-hidden/createVisuallyHidden.ts +127 -124
- package/src/visually-hidden/index.ts +6 -6
- package/dist/i18n/NumberFormatter.d.ts +0 -43
- package/dist/i18n/NumberFormatter.d.ts.map +0 -1
- package/dist/index.ssr.js +0 -15875
- package/dist/index.ssr.js.map +0 -7
- package/src/i18n/NumberFormatter.ts +0 -266
|
@@ -5,20 +5,24 @@
|
|
|
5
5
|
* Based on @react-aria/calendar useCalendarCell
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { createSignal, createMemo,
|
|
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. */
|
|
19
21
|
date: DateValue;
|
|
20
22
|
/** Whether the cell is disabled. */
|
|
21
23
|
isDisabled?: boolean;
|
|
24
|
+
/** Whether the date is outside the current month grid. */
|
|
25
|
+
isOutsideMonth?: boolean;
|
|
22
26
|
}
|
|
23
27
|
|
|
24
28
|
export interface CalendarCellAria {
|
|
@@ -30,10 +34,14 @@ export interface CalendarCellAria {
|
|
|
30
34
|
isSelected: boolean;
|
|
31
35
|
/** Whether the cell is focused. */
|
|
32
36
|
isFocused: boolean;
|
|
37
|
+
/** Whether the cell should display a keyboard focus ring. */
|
|
38
|
+
isFocusVisible: boolean;
|
|
33
39
|
/** Whether the cell is disabled. */
|
|
34
40
|
isDisabled: boolean;
|
|
35
41
|
/** Whether the cell is unavailable (e.g., booked date). */
|
|
36
42
|
isUnavailable: boolean;
|
|
43
|
+
/** Whether the cell is part of an invalid selection. */
|
|
44
|
+
isInvalid: boolean;
|
|
37
45
|
/** Whether the cell is outside the visible month. */
|
|
38
46
|
isOutsideMonth: boolean;
|
|
39
47
|
/** Whether the cell represents today. */
|
|
@@ -44,21 +52,22 @@ export interface CalendarCellAria {
|
|
|
44
52
|
formattedDate: string;
|
|
45
53
|
}
|
|
46
54
|
|
|
47
|
-
// ============================================
|
|
48
|
-
// IMPLEMENTATION
|
|
49
|
-
// ============================================
|
|
50
|
-
|
|
51
55
|
/**
|
|
52
56
|
* Provides the behavior and accessibility implementation for a calendar cell.
|
|
53
57
|
*/
|
|
54
58
|
export function createCalendarCell<T extends CalendarState>(
|
|
55
59
|
props: MaybeAccessor<AriaCalendarCellProps>,
|
|
56
60
|
state: T,
|
|
57
|
-
ref?: () => HTMLElement | null
|
|
61
|
+
ref?: () => HTMLElement | null,
|
|
58
62
|
): CalendarCellAria {
|
|
59
63
|
const getProps = () => access(props);
|
|
60
64
|
const [isPressed, setIsPressed] = createSignal(false);
|
|
65
|
+
const { focusProps, isFocusVisible: isRingFocusVisible } = createFocusRing();
|
|
61
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;
|
|
62
71
|
|
|
63
72
|
// Get the date from props
|
|
64
73
|
const date = createMemo(() => getProps().date as CalendarDate);
|
|
@@ -66,16 +75,32 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
66
75
|
// Check states
|
|
67
76
|
const isSelected = createMemo(() => state.isSelected(date()));
|
|
68
77
|
const isFocused = createMemo(() => state.isCellFocused(date()));
|
|
78
|
+
const isInvalid = createMemo(() => state.isValueInvalid() && isSelected());
|
|
69
79
|
const isDisabled = createMemo(() => {
|
|
70
80
|
return getProps().isDisabled || state.isCellDisabled(date());
|
|
71
81
|
});
|
|
72
82
|
const isUnavailable = createMemo(() => state.isCellUnavailable(date()));
|
|
73
|
-
const isOutsideMonth = createMemo(
|
|
83
|
+
const isOutsideMonth = createMemo(
|
|
84
|
+
() => getProps().isOutsideMonth ?? state.isOutsideVisibleRange(date()),
|
|
85
|
+
);
|
|
74
86
|
const isToday = createMemo(() => isTodayUtil(date(), timeZone));
|
|
87
|
+
const isCellFocusVisible = createMemo(
|
|
88
|
+
() => isFocused() && isRingFocusVisible() && getInteractionModality() !== null,
|
|
89
|
+
);
|
|
75
90
|
|
|
76
91
|
// Format the date for display
|
|
77
92
|
const formattedDate = createMemo(() => {
|
|
78
|
-
|
|
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
|
+
);
|
|
79
104
|
});
|
|
80
105
|
|
|
81
106
|
// Handle pointer down - this is where selection happens
|
|
@@ -87,6 +112,7 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
87
112
|
// Select the date on pointer down for immediate response
|
|
88
113
|
// This matches React Aria's behavior of using onPressStart
|
|
89
114
|
state.selectDate(date());
|
|
115
|
+
ignoreNextClick = true;
|
|
90
116
|
// Prevent default to avoid double-triggering with onClick
|
|
91
117
|
e.preventDefault();
|
|
92
118
|
}
|
|
@@ -94,6 +120,11 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
94
120
|
|
|
95
121
|
// Handle click - kept for accessibility (keyboard Enter/Space)
|
|
96
122
|
const handleClick = () => {
|
|
123
|
+
if (ignoreNextClick) {
|
|
124
|
+
ignoreNextClick = false;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
97
128
|
// Only select on click if not already selected via pointerdown
|
|
98
129
|
// This handles keyboard activation (Enter/Space)
|
|
99
130
|
if (!isDisabled() && !isUnavailable()) {
|
|
@@ -105,51 +136,68 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
105
136
|
setIsPressed(false);
|
|
106
137
|
};
|
|
107
138
|
|
|
108
|
-
//
|
|
109
|
-
|
|
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).
|
|
144
|
+
createEffect(() => {
|
|
110
145
|
const element = ref?.();
|
|
111
146
|
if (element && isFocused()) {
|
|
112
|
-
element
|
|
147
|
+
focusSafely(element);
|
|
113
148
|
}
|
|
114
149
|
});
|
|
115
150
|
|
|
116
151
|
// Cell props (for the td element)
|
|
117
152
|
const cellProps = createMemo(() => ({
|
|
118
|
-
role:
|
|
119
|
-
|
|
120
|
-
|
|
153
|
+
role: "gridcell",
|
|
154
|
+
"aria-disabled": isDisabled() || isUnavailable() || undefined,
|
|
155
|
+
"aria-selected": isSelected() || undefined,
|
|
156
|
+
"aria-invalid": isInvalid() || undefined,
|
|
121
157
|
}));
|
|
122
158
|
|
|
123
159
|
// Button props (for the interactive element inside)
|
|
124
160
|
const buttonProps = createMemo(() => {
|
|
125
161
|
const d = date();
|
|
126
|
-
const formatter = new DateFormatter(
|
|
127
|
-
weekday:
|
|
128
|
-
year:
|
|
129
|
-
month:
|
|
130
|
-
day:
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
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
|
+
);
|
|
153
201
|
});
|
|
154
202
|
|
|
155
203
|
return {
|
|
@@ -165,12 +213,18 @@ export function createCalendarCell<T extends CalendarState>(
|
|
|
165
213
|
get isFocused() {
|
|
166
214
|
return isFocused();
|
|
167
215
|
},
|
|
216
|
+
get isFocusVisible() {
|
|
217
|
+
return isCellFocusVisible();
|
|
218
|
+
},
|
|
168
219
|
get isDisabled() {
|
|
169
220
|
return isDisabled();
|
|
170
221
|
},
|
|
171
222
|
get isUnavailable() {
|
|
172
223
|
return isUnavailable();
|
|
173
224
|
},
|
|
225
|
+
get isInvalid() {
|
|
226
|
+
return isInvalid();
|
|
227
|
+
},
|
|
174
228
|
get isOutsideMonth() {
|
|
175
229
|
return isOutsideMonth();
|
|
176
230
|
},
|
|
@@ -5,13 +5,10 @@
|
|
|
5
5
|
* Based on @react-aria/calendar useCalendarGrid
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { createMemo
|
|
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,100 +28,134 @@ 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
|
|
54
|
+
const isRTL = (): boolean => {
|
|
55
|
+
const element = ref?.();
|
|
56
|
+
const scopedDirection = element?.closest("[dir]")?.getAttribute("dir");
|
|
57
|
+
const documentDirection = typeof document !== "undefined" ? document.dir : "";
|
|
58
|
+
return (scopedDirection ?? documentDirection) === "rtl";
|
|
59
|
+
};
|
|
60
|
+
|
|
50
61
|
const handleKeyDown = (e: KeyboardEvent) => {
|
|
51
62
|
if (state.isDisabled()) return;
|
|
52
63
|
|
|
53
64
|
switch (e.key) {
|
|
54
|
-
case
|
|
65
|
+
case "ArrowLeft":
|
|
55
66
|
e.preventDefault();
|
|
56
|
-
|
|
67
|
+
e.stopPropagation();
|
|
68
|
+
if (isRTL()) {
|
|
69
|
+
state.focusNextDay();
|
|
70
|
+
} else {
|
|
71
|
+
state.focusPreviousDay();
|
|
72
|
+
}
|
|
57
73
|
break;
|
|
58
|
-
case
|
|
74
|
+
case "ArrowRight":
|
|
59
75
|
e.preventDefault();
|
|
60
|
-
|
|
76
|
+
e.stopPropagation();
|
|
77
|
+
if (isRTL()) {
|
|
78
|
+
state.focusPreviousDay();
|
|
79
|
+
} else {
|
|
80
|
+
state.focusNextDay();
|
|
81
|
+
}
|
|
61
82
|
break;
|
|
62
|
-
case
|
|
83
|
+
case "ArrowUp":
|
|
63
84
|
e.preventDefault();
|
|
85
|
+
e.stopPropagation();
|
|
64
86
|
state.focusPreviousWeek();
|
|
65
87
|
break;
|
|
66
|
-
case
|
|
88
|
+
case "ArrowDown":
|
|
67
89
|
e.preventDefault();
|
|
90
|
+
e.stopPropagation();
|
|
68
91
|
state.focusNextWeek();
|
|
69
92
|
break;
|
|
70
|
-
case
|
|
93
|
+
case "PageUp":
|
|
71
94
|
e.preventDefault();
|
|
95
|
+
e.stopPropagation();
|
|
72
96
|
if (e.shiftKey) {
|
|
73
97
|
state.focusPreviousSection(); // Previous year
|
|
74
98
|
} else {
|
|
75
|
-
state.
|
|
99
|
+
state.setFocusedDate(state.focusedDate().subtract({ months: 1 }));
|
|
76
100
|
}
|
|
77
101
|
break;
|
|
78
|
-
case
|
|
102
|
+
case "PageDown":
|
|
79
103
|
e.preventDefault();
|
|
104
|
+
e.stopPropagation();
|
|
80
105
|
if (e.shiftKey) {
|
|
81
106
|
state.focusNextSection(); // Next year
|
|
82
107
|
} else {
|
|
83
|
-
state.
|
|
108
|
+
state.setFocusedDate(state.focusedDate().add({ months: 1 }));
|
|
84
109
|
}
|
|
85
110
|
break;
|
|
86
|
-
case
|
|
111
|
+
case "Home":
|
|
87
112
|
e.preventDefault();
|
|
113
|
+
e.stopPropagation();
|
|
88
114
|
state.focusPageStart();
|
|
89
115
|
break;
|
|
90
|
-
case
|
|
116
|
+
case "End":
|
|
91
117
|
e.preventDefault();
|
|
118
|
+
e.stopPropagation();
|
|
92
119
|
state.focusPageEnd();
|
|
93
120
|
break;
|
|
94
|
-
case
|
|
95
|
-
case
|
|
121
|
+
case "Enter":
|
|
122
|
+
case " ":
|
|
96
123
|
e.preventDefault();
|
|
97
124
|
state.selectFocusedDate();
|
|
98
125
|
break;
|
|
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
|
+
) {
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
e.stopPropagation();
|
|
136
|
+
state.setAnchorDate(null);
|
|
137
|
+
if ("setDragging" in state && typeof state.setDragging === "function") {
|
|
138
|
+
state.setDragging(false);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
99
142
|
}
|
|
100
143
|
};
|
|
101
144
|
|
|
102
|
-
// Register keyboard listener
|
|
103
|
-
onMount(() => {
|
|
104
|
-
const element = ref?.();
|
|
105
|
-
if (element) {
|
|
106
|
-
element.addEventListener('keydown', handleKeyDown);
|
|
107
|
-
onCleanup(() => {
|
|
108
|
-
element.removeEventListener('keydown', handleKeyDown);
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
|
|
113
145
|
// Grid props
|
|
114
146
|
const gridProps = createMemo(() => ({
|
|
115
|
-
role:
|
|
116
|
-
|
|
117
|
-
|
|
147
|
+
role: "grid",
|
|
148
|
+
"aria-readonly": state.isReadOnly() || undefined,
|
|
149
|
+
"aria-disabled": state.isDisabled() || undefined,
|
|
118
150
|
tabIndex: state.isFocused() ? 0 : -1,
|
|
119
151
|
onFocus: () => state.setFocused(true),
|
|
120
152
|
onBlur: () => state.setFocused(false),
|
|
121
153
|
onKeyDown: handleKeyDown,
|
|
122
154
|
}));
|
|
123
155
|
|
|
124
|
-
// Header props
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}));
|
|
156
|
+
// Header props are intentionally empty. Consumers render this on <thead>,
|
|
157
|
+
// which already has correct table semantics.
|
|
158
|
+
const headerProps = createMemo(() => ({}));
|
|
128
159
|
|
|
129
160
|
return {
|
|
130
161
|
get gridProps() {
|
|
@@ -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
|
},
|