@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,16 +5,15 @@
|
|
|
5
5
|
* Based on @react-aria/datepicker useDatePicker
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { createMemo } from
|
|
9
|
-
import { createId } from
|
|
10
|
-
import { createLabel } from
|
|
11
|
-
import { access, type MaybeAccessor } from
|
|
12
|
-
import { mergeProps } from
|
|
13
|
-
import
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
// ============================================
|
|
8
|
+
import { createMemo } from "solid-js";
|
|
9
|
+
import { createId } from "../ssr";
|
|
10
|
+
import { createLabel } from "../label/createLabel";
|
|
11
|
+
import { access, type MaybeAccessor } from "../utils/reactivity";
|
|
12
|
+
import { mergeProps } from "../utils/mergeProps";
|
|
13
|
+
import { useLocale } from "../i18n";
|
|
14
|
+
import { createPress } from "../interactions/createPress";
|
|
15
|
+
import { DateFormatter, getLocalTimeZone } from "@internationalized/date";
|
|
16
|
+
import type { DateFieldState, CalendarState } from "@proyecto-viviana/solid-stately";
|
|
18
17
|
|
|
19
18
|
export interface AriaDatePickerProps {
|
|
20
19
|
/** An ID for the date picker. */
|
|
@@ -22,11 +21,11 @@ export interface AriaDatePickerProps {
|
|
|
22
21
|
/** A visible label for the date picker. */
|
|
23
22
|
label?: string;
|
|
24
23
|
/** An accessible label for the date picker. */
|
|
25
|
-
|
|
24
|
+
"aria-label"?: string;
|
|
26
25
|
/** The ID of an element that labels the date picker. */
|
|
27
|
-
|
|
26
|
+
"aria-labelledby"?: string;
|
|
28
27
|
/** The ID of an element that describes the date picker. */
|
|
29
|
-
|
|
28
|
+
"aria-describedby"?: string;
|
|
30
29
|
/** Whether the date picker is disabled. */
|
|
31
30
|
isDisabled?: boolean;
|
|
32
31
|
/** Whether the date picker is read-only. */
|
|
@@ -39,6 +38,44 @@ export interface AriaDatePickerProps {
|
|
|
39
38
|
description?: string;
|
|
40
39
|
/** Error message. */
|
|
41
40
|
errorMessage?: string;
|
|
41
|
+
/** Accessible label for the calendar trigger button. */
|
|
42
|
+
buttonAriaLabel?: string;
|
|
43
|
+
/** Accessible label for the calendar dialog. */
|
|
44
|
+
dialogAriaLabel?: string;
|
|
45
|
+
/** Accessible label for the calendar grid region. */
|
|
46
|
+
calendarAriaLabel?: string;
|
|
47
|
+
/** The minimum allowed date. */
|
|
48
|
+
minValue?: Date;
|
|
49
|
+
/** The maximum allowed date. */
|
|
50
|
+
maxValue?: Date;
|
|
51
|
+
/** Whether a date is unavailable. */
|
|
52
|
+
isDateUnavailable?: (date: unknown) => boolean;
|
|
53
|
+
/** The first day of the week. */
|
|
54
|
+
firstDayOfWeek?: number;
|
|
55
|
+
/** Page behavior for calendar. */
|
|
56
|
+
pageBehavior?: "single" | "visible";
|
|
57
|
+
/** Whether to force leading zeros. */
|
|
58
|
+
shouldForceLeadingZeros?: boolean;
|
|
59
|
+
/** Callback when focus changes. */
|
|
60
|
+
onFocusChange?: (isFocused: boolean) => void;
|
|
61
|
+
/** Callback when focused. */
|
|
62
|
+
onFocus?: (e: FocusEvent) => void;
|
|
63
|
+
/** Callback when blurred. */
|
|
64
|
+
onBlur?: (e: FocusEvent) => void;
|
|
65
|
+
/** The name attribute for form submission. */
|
|
66
|
+
name?: string;
|
|
67
|
+
/** The form attribute. */
|
|
68
|
+
form?: string;
|
|
69
|
+
/** Auto focus the field. */
|
|
70
|
+
autoFocus?: boolean;
|
|
71
|
+
/** The placeholder value. */
|
|
72
|
+
placeholderValue?: unknown;
|
|
73
|
+
/** Whether to hide the time zone. */
|
|
74
|
+
hideTimeZone?: boolean;
|
|
75
|
+
/** The hour cycle. */
|
|
76
|
+
hourCycle?: 12 | 24;
|
|
77
|
+
/** The granularity. */
|
|
78
|
+
granularity?: "day" | "hour" | "minute" | "second";
|
|
42
79
|
}
|
|
43
80
|
|
|
44
81
|
export interface DatePickerState {
|
|
@@ -69,12 +106,22 @@ export interface DatePickerAria {
|
|
|
69
106
|
descriptionProps: Record<string, unknown>;
|
|
70
107
|
/** Props for the error message element. */
|
|
71
108
|
errorMessageProps: Record<string, unknown>;
|
|
109
|
+
/** Whether the picker is invalid. */
|
|
110
|
+
isInvalid: boolean;
|
|
111
|
+
/** Validation errors. */
|
|
112
|
+
validationErrors: string[];
|
|
113
|
+
/** Validation details. */
|
|
114
|
+
validationDetails: Record<string, unknown>;
|
|
115
|
+
/** Focus manager for programmatic segment focus. */
|
|
116
|
+
focusManager: {
|
|
117
|
+
focusFirst: () => void;
|
|
118
|
+
focusLast: () => void;
|
|
119
|
+
} & {
|
|
120
|
+
/** @internal Wires the actual focus implementations from the component layer */
|
|
121
|
+
_register?: (first: () => void, last: () => void) => void;
|
|
122
|
+
};
|
|
72
123
|
}
|
|
73
124
|
|
|
74
|
-
// ============================================
|
|
75
|
-
// IMPLEMENTATION
|
|
76
|
-
// ============================================
|
|
77
|
-
|
|
78
125
|
/**
|
|
79
126
|
* Provides the behavior and accessibility implementation for a date picker component.
|
|
80
127
|
*/
|
|
@@ -82,107 +129,251 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
|
|
|
82
129
|
props: MaybeAccessor<AriaDatePickerProps>,
|
|
83
130
|
state: T,
|
|
84
131
|
overlayState: DatePickerState,
|
|
85
|
-
_calendarState?: C
|
|
132
|
+
_calendarState?: C,
|
|
86
133
|
): DatePickerAria {
|
|
134
|
+
const locale = useLocale();
|
|
87
135
|
const getProps = () => access(props);
|
|
88
136
|
const id = createId(getProps().id);
|
|
89
137
|
const descriptionId = createId();
|
|
90
138
|
const errorMessageId = createId();
|
|
91
139
|
const dialogId = createId();
|
|
140
|
+
const buttonId = createId();
|
|
141
|
+
const fieldId = createId();
|
|
92
142
|
|
|
93
143
|
// Create label handling
|
|
94
144
|
const { labelProps, fieldProps: labelFieldProps } = createLabel({
|
|
95
|
-
get label() {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
145
|
+
get label() {
|
|
146
|
+
return getProps().label;
|
|
147
|
+
},
|
|
148
|
+
get "aria-label"() {
|
|
149
|
+
return getProps()["aria-label"];
|
|
150
|
+
},
|
|
151
|
+
get "aria-labelledby"() {
|
|
152
|
+
return getProps()["aria-labelledby"];
|
|
153
|
+
},
|
|
154
|
+
labelElementType: "span",
|
|
99
155
|
});
|
|
100
156
|
|
|
101
157
|
// Build aria-describedby
|
|
102
158
|
const getAriaDescribedBy = () => {
|
|
103
159
|
const p = getProps();
|
|
104
160
|
const ids: string[] = [];
|
|
105
|
-
if (p[
|
|
106
|
-
ids.push(p[
|
|
161
|
+
if (p["aria-describedby"]) {
|
|
162
|
+
ids.push(p["aria-describedby"]);
|
|
163
|
+
}
|
|
164
|
+
if (valueDescription()) {
|
|
165
|
+
ids.push(valueDescriptionId);
|
|
107
166
|
}
|
|
108
167
|
if (p.description) {
|
|
109
168
|
ids.push(descriptionId);
|
|
110
169
|
}
|
|
111
|
-
if (p.isInvalid && p.errorMessage) {
|
|
170
|
+
if ((p.isInvalid || state.isInvalid()) && p.errorMessage) {
|
|
112
171
|
ids.push(errorMessageId);
|
|
113
172
|
}
|
|
114
|
-
return ids.length > 0 ? ids.join(
|
|
173
|
+
return ids.length > 0 ? ids.join(" ") : undefined;
|
|
115
174
|
};
|
|
116
175
|
|
|
176
|
+
// Selected date description for screen readers
|
|
177
|
+
const valueDescriptionId = createId();
|
|
178
|
+
const valueDescription = createMemo(() => {
|
|
179
|
+
const v = state.value?.();
|
|
180
|
+
if (!v) return "";
|
|
181
|
+
const formatter = new DateFormatter(locale().locale, {
|
|
182
|
+
year: "numeric",
|
|
183
|
+
month: "long",
|
|
184
|
+
day: "numeric",
|
|
185
|
+
});
|
|
186
|
+
return formatter.format(v.toDate(getLocalTimeZone()));
|
|
187
|
+
});
|
|
188
|
+
|
|
117
189
|
// Group props
|
|
118
190
|
const groupProps = createMemo(() => {
|
|
119
191
|
const p = getProps();
|
|
192
|
+
const isInvalid = p.isInvalid || state.isInvalid();
|
|
193
|
+
const describedBy = getAriaDescribedBy();
|
|
194
|
+
const labelField = labelFieldProps as Record<string, unknown>;
|
|
120
195
|
|
|
121
|
-
return
|
|
196
|
+
return {
|
|
122
197
|
id,
|
|
123
|
-
role:
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
198
|
+
role: "group",
|
|
199
|
+
"aria-label": labelField["aria-label"] || undefined,
|
|
200
|
+
"aria-labelledby": labelField["aria-labelledby"] || undefined,
|
|
201
|
+
"aria-disabled": p.isDisabled || state.isDisabled() || undefined,
|
|
202
|
+
"aria-readonly": p.isReadOnly || state.isReadOnly() || undefined,
|
|
203
|
+
"aria-required": p.isRequired || state.isRequired() || undefined,
|
|
204
|
+
"aria-invalid": isInvalid || undefined,
|
|
205
|
+
"aria-describedby": describedBy,
|
|
206
|
+
};
|
|
127
207
|
});
|
|
128
208
|
|
|
129
|
-
// Field props
|
|
130
|
-
const fieldProps = createMemo(() =>
|
|
131
|
-
'aria-haspopup': 'dialog' as const,
|
|
132
|
-
'aria-expanded': overlayState.isOpen,
|
|
133
|
-
'aria-controls': overlayState.isOpen ? dialogId : undefined,
|
|
134
|
-
}));
|
|
135
|
-
|
|
136
|
-
// Button props
|
|
137
|
-
const buttonProps = createMemo(() => {
|
|
209
|
+
// Field props - applied to DateInput container
|
|
210
|
+
const fieldProps = createMemo(() => {
|
|
138
211
|
const p = getProps();
|
|
139
|
-
const
|
|
212
|
+
const describedBy = getAriaDescribedBy();
|
|
140
213
|
|
|
141
214
|
return {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
onClick: () => {
|
|
149
|
-
if (!isDisabled) {
|
|
150
|
-
overlayState.toggle();
|
|
151
|
-
}
|
|
215
|
+
id: fieldId,
|
|
216
|
+
"aria-describedby": describedBy,
|
|
217
|
+
value: state.value?.(),
|
|
218
|
+
defaultValue: state.defaultValue,
|
|
219
|
+
onChange: (value: unknown) => {
|
|
220
|
+
state.setValue?.(value as T extends DateFieldState<infer V> ? V | null : null);
|
|
152
221
|
},
|
|
222
|
+
placeholderValue: p.placeholderValue,
|
|
223
|
+
hideTimeZone: p.hideTimeZone,
|
|
224
|
+
hourCycle: p.hourCycle,
|
|
225
|
+
shouldForceLeadingZeros: p.shouldForceLeadingZeros,
|
|
226
|
+
granularity: p.granularity,
|
|
227
|
+
isDisabled: p.isDisabled || state.isDisabled(),
|
|
228
|
+
isReadOnly: p.isReadOnly || state.isReadOnly(),
|
|
229
|
+
isRequired: p.isRequired || state.isRequired(),
|
|
230
|
+
autoFocus: p.autoFocus,
|
|
231
|
+
name: p.name,
|
|
232
|
+
form: p.form,
|
|
153
233
|
};
|
|
154
234
|
});
|
|
155
235
|
|
|
236
|
+
// Button props with createPress for keyboard/mouse/touch activation
|
|
237
|
+
const buttonPress = createPress({
|
|
238
|
+
get isDisabled() {
|
|
239
|
+
const p = getProps();
|
|
240
|
+
return p.isDisabled || state.isDisabled();
|
|
241
|
+
},
|
|
242
|
+
onPress: () => {
|
|
243
|
+
overlayState.open();
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
const buttonProps = createMemo(() => {
|
|
248
|
+
const p = getProps();
|
|
249
|
+
const isDisabled = p.isDisabled || state.isDisabled();
|
|
250
|
+
const defaults = getDatePickerLabelDefaults(locale().locale);
|
|
251
|
+
const labelId = (labelProps as Record<string, unknown>)["id"] as string | undefined;
|
|
252
|
+
const labelledBy = labelId ? `${buttonId} ${labelId}` : buttonId;
|
|
253
|
+
const describedBy = getAriaDescribedBy();
|
|
254
|
+
|
|
255
|
+
return mergeProps(buttonPress.pressProps as Record<string, unknown>, {
|
|
256
|
+
id: buttonId,
|
|
257
|
+
type: "button" as const,
|
|
258
|
+
"aria-label": p.buttonAriaLabel ?? defaults.button,
|
|
259
|
+
"aria-labelledby": labelledBy,
|
|
260
|
+
"aria-haspopup": "dialog" as const,
|
|
261
|
+
"aria-expanded": overlayState.isOpen,
|
|
262
|
+
"aria-controls": overlayState.isOpen ? dialogId : undefined,
|
|
263
|
+
"aria-describedby": describedBy,
|
|
264
|
+
"aria-disabled": isDisabled || undefined,
|
|
265
|
+
tabIndex: 0,
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
|
|
156
269
|
// Dialog props
|
|
157
|
-
const dialogProps = createMemo(() =>
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
270
|
+
const dialogProps = createMemo(() => {
|
|
271
|
+
const p = getProps();
|
|
272
|
+
const defaults = getDatePickerLabelDefaults(locale().locale);
|
|
273
|
+
const labelId = (labelProps as Record<string, unknown>)["id"] as string | undefined;
|
|
274
|
+
const labelledBy = labelId ? `${buttonId} ${labelId}` : buttonId;
|
|
275
|
+
|
|
276
|
+
return {
|
|
277
|
+
id: dialogId,
|
|
278
|
+
role: "dialog",
|
|
279
|
+
"aria-modal": true,
|
|
280
|
+
"aria-labelledby": labelledBy,
|
|
281
|
+
"aria-label": p.dialogAriaLabel ?? defaults.dialog,
|
|
282
|
+
};
|
|
283
|
+
});
|
|
163
284
|
|
|
164
285
|
// Calendar props
|
|
165
|
-
const calendarProps = createMemo(() =>
|
|
166
|
-
|
|
167
|
-
|
|
286
|
+
const calendarProps = createMemo(() => {
|
|
287
|
+
const p = getProps();
|
|
288
|
+
const defaults = getDatePickerLabelDefaults(locale().locale);
|
|
289
|
+
const currentValue = state.value?.();
|
|
290
|
+
|
|
291
|
+
return {
|
|
292
|
+
autoFocus: true,
|
|
293
|
+
value: currentValue,
|
|
294
|
+
onChange: (value: unknown) => {
|
|
295
|
+
if (state.setValue) {
|
|
296
|
+
state.setValue(value as Parameters<typeof state.setValue>[0]);
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
minValue: p.minValue,
|
|
300
|
+
maxValue: p.maxValue,
|
|
301
|
+
isDisabled: p.isDisabled || state.isDisabled(),
|
|
302
|
+
isReadOnly: p.isReadOnly || state.isReadOnly(),
|
|
303
|
+
isDateUnavailable: p.isDateUnavailable,
|
|
304
|
+
defaultFocusedValue: currentValue ? undefined : p.placeholderValue,
|
|
305
|
+
isInvalid: p.isInvalid || state.isInvalid(),
|
|
306
|
+
errorMessage:
|
|
307
|
+
typeof p.errorMessage === "string"
|
|
308
|
+
? p.errorMessage
|
|
309
|
+
: state.isInvalid()
|
|
310
|
+
? "Invalid date"
|
|
311
|
+
: undefined,
|
|
312
|
+
firstDayOfWeek: p.firstDayOfWeek,
|
|
313
|
+
pageBehavior: p.pageBehavior,
|
|
314
|
+
"aria-label": p.calendarAriaLabel ?? p.dialogAriaLabel ?? defaults.calendar,
|
|
315
|
+
};
|
|
316
|
+
});
|
|
168
317
|
|
|
169
|
-
// Description props
|
|
318
|
+
// Description props for the description element
|
|
170
319
|
const descriptionProps = createMemo(() => ({
|
|
171
320
|
id: descriptionId,
|
|
172
321
|
}));
|
|
173
322
|
|
|
323
|
+
// Value description element props
|
|
324
|
+
const valueDescriptionProps = createMemo(() => ({
|
|
325
|
+
id: valueDescriptionId,
|
|
326
|
+
"aria-hidden": true,
|
|
327
|
+
}));
|
|
328
|
+
|
|
174
329
|
// Error message props
|
|
175
330
|
const errorMessageProps = createMemo(() => ({
|
|
176
331
|
id: errorMessageId,
|
|
177
|
-
role:
|
|
332
|
+
role: "alert",
|
|
178
333
|
}));
|
|
179
334
|
|
|
335
|
+
// Label click focuses first segment — component layer wires the actual ref
|
|
336
|
+
let focusFirstSegment: (() => void) | undefined;
|
|
337
|
+
let focusLastSegment: (() => void) | undefined;
|
|
338
|
+
|
|
339
|
+
const enhancedLabelProps = createMemo(() => {
|
|
340
|
+
return {
|
|
341
|
+
...labelProps,
|
|
342
|
+
onClick: () => {
|
|
343
|
+
focusFirstSegment?.();
|
|
344
|
+
},
|
|
345
|
+
};
|
|
346
|
+
});
|
|
347
|
+
|
|
348
|
+
const isInvalid = createMemo(() => {
|
|
349
|
+
const p = getProps();
|
|
350
|
+
return p.isInvalid || state.isInvalid();
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
const validationErrors = createMemo(() => {
|
|
354
|
+
const p = getProps();
|
|
355
|
+
if (p.isInvalid && typeof p.errorMessage === "string") {
|
|
356
|
+
return [p.errorMessage];
|
|
357
|
+
}
|
|
358
|
+
return [];
|
|
359
|
+
});
|
|
360
|
+
|
|
361
|
+
const validationDetails = createMemo(() => {
|
|
362
|
+
const p = getProps();
|
|
363
|
+
return {
|
|
364
|
+
minValue: p.minValue,
|
|
365
|
+
maxValue: p.maxValue,
|
|
366
|
+
isDateUnavailable: p.isDateUnavailable,
|
|
367
|
+
isInvalid: isInvalid(),
|
|
368
|
+
};
|
|
369
|
+
});
|
|
370
|
+
|
|
180
371
|
return {
|
|
181
372
|
get groupProps() {
|
|
182
373
|
return groupProps();
|
|
183
374
|
},
|
|
184
375
|
get labelProps() {
|
|
185
|
-
return
|
|
376
|
+
return enhancedLabelProps() as Record<string, unknown>;
|
|
186
377
|
},
|
|
187
378
|
get fieldProps() {
|
|
188
379
|
return fieldProps();
|
|
@@ -202,5 +393,45 @@ export function createDatePicker<T extends DateFieldState, C extends CalendarSta
|
|
|
202
393
|
get errorMessageProps() {
|
|
203
394
|
return errorMessageProps();
|
|
204
395
|
},
|
|
396
|
+
get isInvalid() {
|
|
397
|
+
return isInvalid();
|
|
398
|
+
},
|
|
399
|
+
get validationErrors() {
|
|
400
|
+
return validationErrors();
|
|
401
|
+
},
|
|
402
|
+
get validationDetails() {
|
|
403
|
+
return validationDetails();
|
|
404
|
+
},
|
|
405
|
+
focusManager: {
|
|
406
|
+
focusFirst: () => focusFirstSegment?.(),
|
|
407
|
+
focusLast: () => focusLastSegment?.(),
|
|
408
|
+
/** @internal Wires the actual focus implementations from the component layer */
|
|
409
|
+
_register: (first: () => void, last: () => void) => {
|
|
410
|
+
focusFirstSegment = first;
|
|
411
|
+
focusLastSegment = last;
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
function getDatePickerLabelDefaults(locale: string): {
|
|
418
|
+
button: string;
|
|
419
|
+
dialog: string;
|
|
420
|
+
calendar: string;
|
|
421
|
+
} {
|
|
422
|
+
const language = locale.toLowerCase().split("-")[0] ?? "en";
|
|
423
|
+
|
|
424
|
+
if (language === "es") {
|
|
425
|
+
return {
|
|
426
|
+
button: "Abrir calendario",
|
|
427
|
+
dialog: "Calendario",
|
|
428
|
+
calendar: "Calendario",
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
return {
|
|
433
|
+
button: "Open calendar",
|
|
434
|
+
dialog: "Calendar",
|
|
435
|
+
calendar: "Calendar",
|
|
205
436
|
};
|
|
206
437
|
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* createDatePickerGroup hook for Solidaria
|
|
3
|
+
*
|
|
4
|
+
* Provides keyboard and pointer behavior for the date picker field group.
|
|
5
|
+
* Based on @react-aria/datepicker useDatePickerGroup
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { createMemo } from "solid-js";
|
|
9
|
+
import { type MaybeAccessor, access } from "../utils/reactivity";
|
|
10
|
+
import { mergeProps } from "../utils/mergeProps";
|
|
11
|
+
import { useLocale } from "../i18n";
|
|
12
|
+
import { createPress } from "../interactions/createPress";
|
|
13
|
+
import { nodeContains, getEventTarget } from "../utils";
|
|
14
|
+
import { focusSafely } from "../utils/focus";
|
|
15
|
+
|
|
16
|
+
export interface AriaDatePickerGroupProps {
|
|
17
|
+
isDisabled?: boolean;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface DatePickerGroupAria {
|
|
21
|
+
groupProps: Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function createDatePickerGroup(
|
|
25
|
+
props: MaybeAccessor<AriaDatePickerGroupProps>,
|
|
26
|
+
state: { setOpen: (isOpen: boolean) => void; isOpen: boolean; isDisabled: () => boolean },
|
|
27
|
+
ref: () => HTMLElement | null,
|
|
28
|
+
disableArrowNavigation?: boolean,
|
|
29
|
+
): DatePickerGroupAria {
|
|
30
|
+
const locale = useLocale();
|
|
31
|
+
const resolvedProps = createMemo(() => access(props));
|
|
32
|
+
|
|
33
|
+
const onKeyDown = (e: KeyboardEvent) => {
|
|
34
|
+
if (!nodeContains(e.currentTarget as Node | null, getEventTarget(e) as Node | null)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Open the popover on alt + arrow down/up
|
|
39
|
+
if (e.altKey && (e.key === "ArrowDown" || e.key === "ArrowUp")) {
|
|
40
|
+
e.preventDefault();
|
|
41
|
+
e.stopPropagation();
|
|
42
|
+
state.setOpen(true);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (disableArrowNavigation) return;
|
|
47
|
+
|
|
48
|
+
const root = ref();
|
|
49
|
+
if (!root) return;
|
|
50
|
+
|
|
51
|
+
const segments = Array.from(root.querySelectorAll('[role="spinbutton"]')) as HTMLElement[];
|
|
52
|
+
if (segments.length === 0) return;
|
|
53
|
+
|
|
54
|
+
const activeElement = root.ownerDocument.activeElement;
|
|
55
|
+
let currentIndex = -1;
|
|
56
|
+
if (activeElement) {
|
|
57
|
+
currentIndex = segments.indexOf(activeElement as HTMLElement);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const direction = locale().direction;
|
|
61
|
+
|
|
62
|
+
switch (e.key) {
|
|
63
|
+
case "ArrowLeft": {
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
e.stopPropagation();
|
|
66
|
+
if (direction === "rtl") {
|
|
67
|
+
// geometric fallback: in RTL, left arrow moves toward the end (next)
|
|
68
|
+
const nextIndex = currentIndex >= 0 ? currentIndex + 1 : 0;
|
|
69
|
+
if (nextIndex < segments.length) {
|
|
70
|
+
focusSafely(segments[nextIndex]);
|
|
71
|
+
}
|
|
72
|
+
} else {
|
|
73
|
+
const prevIndex = currentIndex >= 0 ? currentIndex - 1 : segments.length - 1;
|
|
74
|
+
if (prevIndex >= 0) {
|
|
75
|
+
focusSafely(segments[prevIndex]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
case "ArrowRight": {
|
|
81
|
+
e.preventDefault();
|
|
82
|
+
e.stopPropagation();
|
|
83
|
+
if (direction === "rtl") {
|
|
84
|
+
// geometric fallback: in RTL, right arrow moves toward the start (previous)
|
|
85
|
+
const prevIndex = currentIndex >= 0 ? currentIndex - 1 : segments.length - 1;
|
|
86
|
+
if (prevIndex >= 0) {
|
|
87
|
+
focusSafely(segments[prevIndex]);
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
const nextIndex = currentIndex >= 0 ? currentIndex + 1 : 0;
|
|
91
|
+
if (nextIndex < segments.length) {
|
|
92
|
+
focusSafely(segments[nextIndex]);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const focusLast = (event?: Event) => {
|
|
101
|
+
const root = ref();
|
|
102
|
+
if (!root) return;
|
|
103
|
+
|
|
104
|
+
const target = event ? getEventTarget(event) : null;
|
|
105
|
+
|
|
106
|
+
const segments = Array.from(root.querySelectorAll('[role="spinbutton"]')) as HTMLElement[];
|
|
107
|
+
if (segments.length === 0) return;
|
|
108
|
+
|
|
109
|
+
let startIndex = segments.length - 1;
|
|
110
|
+
if (target) {
|
|
111
|
+
const targetIndex = segments.indexOf(target as HTMLElement);
|
|
112
|
+
if (targetIndex >= 0) {
|
|
113
|
+
startIndex = targetIndex;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
for (let i = startIndex; i >= 0; i--) {
|
|
118
|
+
const segment = segments[i];
|
|
119
|
+
if (segment.getAttribute("data-placeholder") !== "true") {
|
|
120
|
+
focusSafely(segment);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const { pressProps } = createPress({
|
|
127
|
+
isDisabled: () => resolvedProps().isDisabled || state.isDisabled(),
|
|
128
|
+
preventFocusOnPress: true,
|
|
129
|
+
allowTextSelectionOnPress: true,
|
|
130
|
+
onPressStart(e) {
|
|
131
|
+
if (e.pointerType === "mouse") {
|
|
132
|
+
focusLast(e as unknown as Event);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
onPress(e) {
|
|
136
|
+
if (e.pointerType === "touch" || e.pointerType === "pen") {
|
|
137
|
+
focusLast(e as unknown as Event);
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
get groupProps() {
|
|
144
|
+
return mergeProps(pressProps, {
|
|
145
|
+
onKeyDown,
|
|
146
|
+
});
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
}
|