@proyecto-viviana/solidaria 0.3.0 → 0.4.1
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/dist/_chunk/DragManager.js +627 -0
- package/dist/_chunk/DragManager.js.map +1 -0
- package/dist/_chunk/DragManager.jsx +627 -0
- package/dist/_chunk/DragManager.jsx.map +1 -0
- package/dist/_chunk/FocusScope.js +400 -0
- package/dist/_chunk/FocusScope.js.map +1 -0
- package/dist/_chunk/FocusScope.jsx +375 -0
- package/dist/_chunk/FocusScope.jsx.map +1 -0
- package/dist/_chunk/actiongroup.js +141 -0
- package/dist/_chunk/actiongroup.js.map +1 -0
- package/dist/_chunk/actiongroup.jsx +141 -0
- package/dist/_chunk/actiongroup.jsx.map +1 -0
- package/dist/_chunk/announce.js +207 -0
- package/dist/_chunk/announce.js.map +1 -0
- package/dist/_chunk/announce.jsx +207 -0
- package/dist/_chunk/announce.jsx.map +1 -0
- package/dist/_chunk/ariaHideOutside.js +122 -0
- package/dist/_chunk/ariaHideOutside.js.map +1 -0
- package/dist/_chunk/ariaHideOutside.jsx +122 -0
- package/dist/_chunk/ariaHideOutside.jsx.map +1 -0
- package/dist/_chunk/autocomplete.js +244 -0
- package/dist/_chunk/autocomplete.js.map +1 -0
- package/dist/_chunk/autocomplete.jsx +244 -0
- package/dist/_chunk/autocomplete.jsx.map +1 -0
- package/dist/_chunk/breadcrumbs.js +121 -0
- package/dist/_chunk/breadcrumbs.js.map +1 -0
- package/dist/_chunk/breadcrumbs.jsx +121 -0
- package/dist/_chunk/breadcrumbs.jsx.map +1 -0
- package/dist/_chunk/button.js +275 -0
- package/dist/_chunk/button.js.map +1 -0
- package/dist/_chunk/button.jsx +275 -0
- package/dist/_chunk/button.jsx.map +1 -0
- package/dist/_chunk/calendar.js +1037 -0
- package/dist/_chunk/calendar.js.map +1 -0
- package/dist/_chunk/calendar.jsx +1037 -0
- package/dist/_chunk/calendar.jsx.map +1 -0
- package/dist/_chunk/checkbox.js +235 -0
- package/dist/_chunk/checkbox.js.map +1 -0
- package/dist/_chunk/checkbox.jsx +235 -0
- package/dist/_chunk/checkbox.jsx.map +1 -0
- package/dist/_chunk/color.js +1458 -0
- package/dist/_chunk/color.js.map +1 -0
- package/dist/_chunk/color.jsx +1458 -0
- package/dist/_chunk/color.jsx.map +1 -0
- package/dist/_chunk/combobox.js +1062 -0
- package/dist/_chunk/combobox.js.map +1 -0
- package/dist/_chunk/combobox.jsx +1062 -0
- package/dist/_chunk/combobox.jsx.map +1 -0
- package/dist/_chunk/constants.js +19 -0
- package/dist/_chunk/constants.js.map +1 -0
- package/dist/_chunk/constants.jsx +19 -0
- package/dist/_chunk/constants.jsx.map +1 -0
- package/dist/_chunk/createCollator.js +61 -0
- package/dist/_chunk/createCollator.js.map +1 -0
- package/dist/_chunk/createCollator.jsx +61 -0
- package/dist/_chunk/createCollator.jsx.map +1 -0
- package/dist/_chunk/createCollectionRowInteraction.js +133 -0
- package/dist/_chunk/createCollectionRowInteraction.js.map +1 -0
- package/dist/_chunk/createCollectionRowInteraction.jsx +133 -0
- package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -0
- package/dist/_chunk/createField.js +55 -0
- package/dist/_chunk/createField.js.map +1 -0
- package/dist/_chunk/createField.jsx +55 -0
- package/dist/_chunk/createField.jsx.map +1 -0
- package/dist/_chunk/createFocus.js +105 -0
- package/dist/_chunk/createFocus.js.map +1 -0
- package/dist/_chunk/createFocus.jsx +105 -0
- package/dist/_chunk/createFocus.jsx.map +1 -0
- package/dist/_chunk/createFocusRing.js +54 -0
- package/dist/_chunk/createFocusRing.js.map +1 -0
- package/dist/_chunk/createFocusRing.jsx +54 -0
- package/dist/_chunk/createFocusRing.jsx.map +1 -0
- package/dist/_chunk/createFocusWithin.js +120 -0
- package/dist/_chunk/createFocusWithin.js.map +1 -0
- package/dist/_chunk/createFocusWithin.jsx +120 -0
- package/dist/_chunk/createFocusWithin.jsx.map +1 -0
- package/dist/_chunk/createFocusable.js +131 -0
- package/dist/_chunk/createFocusable.js.map +1 -0
- package/dist/_chunk/createFocusable.jsx +131 -0
- package/dist/_chunk/createFocusable.jsx.map +1 -0
- package/dist/_chunk/createFormReset.js +39 -0
- package/dist/_chunk/createFormReset.js.map +1 -0
- package/dist/_chunk/createFormReset.jsx +39 -0
- package/dist/_chunk/createFormReset.jsx.map +1 -0
- package/dist/_chunk/createFormValidation.js +135 -0
- package/dist/_chunk/createFormValidation.js.map +1 -0
- package/dist/_chunk/createFormValidation.jsx +135 -0
- package/dist/_chunk/createFormValidation.jsx.map +1 -0
- package/dist/_chunk/createHover.js +131 -0
- package/dist/_chunk/createHover.js.map +1 -0
- package/dist/_chunk/createHover.jsx +131 -0
- package/dist/_chunk/createHover.jsx.map +1 -0
- package/dist/_chunk/createInteractionModality.js +268 -0
- package/dist/_chunk/createInteractionModality.js.map +1 -0
- package/dist/_chunk/createInteractionModality.jsx +268 -0
- package/dist/_chunk/createInteractionModality.jsx.map +1 -0
- package/dist/_chunk/createLabel.js +47 -0
- package/dist/_chunk/createLabel.js.map +1 -0
- package/dist/_chunk/createLabel.jsx +47 -0
- package/dist/_chunk/createLabel.jsx.map +1 -0
- package/dist/_chunk/createLabels.js +32 -0
- package/dist/_chunk/createLabels.js.map +1 -0
- package/dist/_chunk/createLabels.jsx +32 -0
- package/dist/_chunk/createLabels.jsx.map +1 -0
- package/dist/_chunk/createLandmark.js +198 -0
- package/dist/_chunk/createLandmark.js.map +1 -0
- package/dist/_chunk/createLandmark.jsx +198 -0
- package/dist/_chunk/createLandmark.jsx.map +1 -0
- package/dist/_chunk/createOverlay.js +327 -0
- package/dist/_chunk/createOverlay.js.map +1 -0
- package/dist/_chunk/createOverlay.jsx +327 -0
- package/dist/_chunk/createOverlay.jsx.map +1 -0
- package/dist/_chunk/createPress.js +526 -0
- package/dist/_chunk/createPress.js.map +1 -0
- package/dist/_chunk/createPress.jsx +526 -0
- package/dist/_chunk/createPress.jsx.map +1 -0
- package/dist/_chunk/createProgressBar.js +82 -0
- package/dist/_chunk/createProgressBar.js.map +1 -0
- package/dist/_chunk/createProgressBar.jsx +82 -0
- package/dist/_chunk/createProgressBar.jsx.map +1 -0
- package/dist/_chunk/createSelectableItem.js +302 -0
- package/dist/_chunk/createSelectableItem.js.map +1 -0
- package/dist/_chunk/createSelectableItem.jsx +302 -0
- package/dist/_chunk/createSelectableItem.jsx.map +1 -0
- package/dist/_chunk/createStringFormatter.js +61 -0
- package/dist/_chunk/createStringFormatter.js.map +1 -0
- package/dist/_chunk/createStringFormatter.jsx +61 -0
- package/dist/_chunk/createStringFormatter.jsx.map +1 -0
- package/dist/_chunk/createToggle.js +159 -0
- package/dist/_chunk/createToggle.js.map +1 -0
- package/dist/_chunk/createToggle.jsx +159 -0
- package/dist/_chunk/createToggle.jsx.map +1 -0
- package/dist/_chunk/createTypeSelect.js +125 -0
- package/dist/_chunk/createTypeSelect.js.map +1 -0
- package/dist/_chunk/createTypeSelect.jsx +125 -0
- package/dist/_chunk/createTypeSelect.jsx.map +1 -0
- package/dist/_chunk/datepicker.js +1706 -0
- package/dist/_chunk/datepicker.js.map +1 -0
- package/dist/_chunk/datepicker.jsx +1706 -0
- package/dist/_chunk/datepicker.jsx.map +1 -0
- package/dist/_chunk/dialog.js +62 -0
- package/dist/_chunk/dialog.js.map +1 -0
- package/dist/_chunk/dialog.jsx +62 -0
- package/dist/_chunk/dialog.jsx.map +1 -0
- package/dist/_chunk/disclosure.js +185 -0
- package/dist/_chunk/disclosure.js.map +1 -0
- package/dist/_chunk/disclosure.jsx +185 -0
- package/dist/_chunk/disclosure.jsx.map +1 -0
- package/dist/_chunk/dnd.js +2395 -0
- package/dist/_chunk/dnd.js.map +1 -0
- package/dist/_chunk/dnd.jsx +2395 -0
- package/dist/_chunk/dnd.jsx.map +1 -0
- package/dist/_chunk/env.js +87 -0
- package/dist/_chunk/env.js.map +1 -0
- package/dist/_chunk/env.jsx +87 -0
- package/dist/_chunk/env.jsx.map +1 -0
- package/dist/_chunk/filterDOMProps.js +82 -0
- package/dist/_chunk/filterDOMProps.js.map +1 -0
- package/dist/_chunk/filterDOMProps.jsx +82 -0
- package/dist/_chunk/filterDOMProps.jsx.map +1 -0
- package/dist/_chunk/focus.js +399 -0
- package/dist/_chunk/focus.js.map +1 -0
- package/dist/_chunk/focus.jsx +399 -0
- package/dist/_chunk/focus.jsx.map +1 -0
- package/dist/_chunk/focus2.js +631 -0
- package/dist/_chunk/focus2.js.map +1 -0
- package/dist/_chunk/focus2.jsx +631 -0
- package/dist/_chunk/focus2.jsx.map +1 -0
- package/dist/_chunk/grid.js +623 -0
- package/dist/_chunk/grid.js.map +1 -0
- package/dist/_chunk/grid.jsx +623 -0
- package/dist/_chunk/grid.jsx.map +1 -0
- package/dist/_chunk/gridlist.js +369 -0
- package/dist/_chunk/gridlist.js.map +1 -0
- package/dist/_chunk/gridlist.jsx +369 -0
- package/dist/_chunk/gridlist.jsx.map +1 -0
- package/dist/_chunk/i18n.js +199 -0
- package/dist/_chunk/i18n.js.map +1 -0
- package/dist/_chunk/i18n.jsx +199 -0
- package/dist/_chunk/i18n.jsx.map +1 -0
- package/dist/_chunk/interactions.js +331 -0
- package/dist/_chunk/interactions.js.map +1 -0
- package/dist/_chunk/interactions.jsx +325 -0
- package/dist/_chunk/interactions.jsx.map +1 -0
- package/dist/_chunk/link.js +97 -0
- package/dist/_chunk/link.js.map +1 -0
- package/dist/_chunk/link.jsx +97 -0
- package/dist/_chunk/link.jsx.map +1 -0
- package/dist/_chunk/listbox.js +356 -0
- package/dist/_chunk/listbox.js.map +1 -0
- package/dist/_chunk/listbox.jsx +356 -0
- package/dist/_chunk/listbox.jsx.map +1 -0
- package/dist/_chunk/locale.js +173 -0
- package/dist/_chunk/locale.js.map +1 -0
- package/dist/_chunk/locale.jsx +167 -0
- package/dist/_chunk/locale.jsx.map +1 -0
- package/dist/_chunk/menu.js +519 -0
- package/dist/_chunk/menu.js.map +1 -0
- package/dist/_chunk/menu.jsx +519 -0
- package/dist/_chunk/menu.jsx.map +1 -0
- package/dist/_chunk/meter.js +33 -0
- package/dist/_chunk/meter.js.map +1 -0
- package/dist/_chunk/meter.jsx +33 -0
- package/dist/_chunk/meter.jsx.map +1 -0
- package/dist/_chunk/numberfield.js +259 -0
- package/dist/_chunk/numberfield.js.map +1 -0
- package/dist/_chunk/numberfield.jsx +259 -0
- package/dist/_chunk/numberfield.jsx.map +1 -0
- package/dist/_chunk/overlays.js +186 -0
- package/dist/_chunk/overlays.js.map +1 -0
- package/dist/_chunk/overlays.jsx +162 -0
- package/dist/_chunk/overlays.jsx.map +1 -0
- package/dist/_chunk/popover.js +574 -0
- package/dist/_chunk/popover.js.map +1 -0
- package/dist/_chunk/popover.jsx +574 -0
- package/dist/_chunk/popover.jsx.map +1 -0
- package/dist/_chunk/radio.js +320 -0
- package/dist/_chunk/radio.js.map +1 -0
- package/dist/_chunk/radio.jsx +320 -0
- package/dist/_chunk/radio.jsx.map +1 -0
- package/dist/_chunk/reactivity.js +21 -0
- package/dist/_chunk/reactivity.js.map +1 -0
- package/dist/_chunk/reactivity.jsx +21 -0
- package/dist/_chunk/reactivity.jsx.map +1 -0
- package/dist/_chunk/searchfield.js +210 -0
- package/dist/_chunk/searchfield.js.map +1 -0
- package/dist/_chunk/searchfield.jsx +210 -0
- package/dist/_chunk/searchfield.jsx.map +1 -0
- package/dist/_chunk/select.js +406 -0
- package/dist/_chunk/select.js.map +1 -0
- package/dist/_chunk/select.jsx +397 -0
- package/dist/_chunk/select.jsx.map +1 -0
- package/dist/_chunk/selection.js +666 -0
- package/dist/_chunk/selection.js.map +1 -0
- package/dist/_chunk/selection.jsx +666 -0
- package/dist/_chunk/selection.jsx.map +1 -0
- package/dist/_chunk/separator.js +29 -0
- package/dist/_chunk/separator.js.map +1 -0
- package/dist/_chunk/separator.jsx +29 -0
- package/dist/_chunk/separator.jsx.map +1 -0
- package/dist/_chunk/slider.js +256 -0
- package/dist/_chunk/slider.js.map +1 -0
- package/dist/_chunk/slider.jsx +256 -0
- package/dist/_chunk/slider.jsx.map +1 -0
- package/dist/_chunk/spinbutton.js +153 -0
- package/dist/_chunk/spinbutton.js.map +1 -0
- package/dist/_chunk/spinbutton.jsx +153 -0
- package/dist/_chunk/spinbutton.jsx.map +1 -0
- package/dist/_chunk/steplist.js +66 -0
- package/dist/_chunk/steplist.js.map +1 -0
- package/dist/_chunk/steplist.jsx +66 -0
- package/dist/_chunk/steplist.jsx.map +1 -0
- package/dist/_chunk/switch.js +34 -0
- package/dist/_chunk/switch.js.map +1 -0
- package/dist/_chunk/switch.jsx +34 -0
- package/dist/_chunk/switch.jsx.map +1 -0
- package/dist/_chunk/table.js +1088 -0
- package/dist/_chunk/table.js.map +1 -0
- package/dist/_chunk/table.jsx +1088 -0
- package/dist/_chunk/table.jsx.map +1 -0
- package/dist/_chunk/tabs.js +263 -0
- package/dist/_chunk/tabs.js.map +1 -0
- package/dist/_chunk/tabs.jsx +263 -0
- package/dist/_chunk/tabs.jsx.map +1 -0
- package/dist/_chunk/tag.js +322 -0
- package/dist/_chunk/tag.js.map +1 -0
- package/dist/_chunk/tag.jsx +322 -0
- package/dist/_chunk/tag.jsx.map +1 -0
- package/dist/_chunk/textfield.js +110 -0
- package/dist/_chunk/textfield.js.map +1 -0
- package/dist/_chunk/textfield.jsx +110 -0
- package/dist/_chunk/textfield.jsx.map +1 -0
- package/dist/_chunk/toast.js +250 -0
- package/dist/_chunk/toast.js.map +1 -0
- package/dist/_chunk/toast.jsx +250 -0
- package/dist/_chunk/toast.jsx.map +1 -0
- package/dist/_chunk/toolbar.js +226 -0
- package/dist/_chunk/toolbar.js.map +1 -0
- package/dist/_chunk/toolbar.jsx +226 -0
- package/dist/_chunk/toolbar.jsx.map +1 -0
- package/dist/_chunk/tooltip.js +185 -0
- package/dist/_chunk/tooltip.js.map +1 -0
- package/dist/_chunk/tooltip.jsx +185 -0
- package/dist/_chunk/tooltip.jsx.map +1 -0
- package/dist/_chunk/tree.js +452 -0
- package/dist/_chunk/tree.js.map +1 -0
- package/dist/_chunk/tree.jsx +452 -0
- package/dist/_chunk/tree.jsx.map +1 -0
- package/dist/_chunk/utils.js +705 -0
- package/dist/_chunk/utils.js.map +1 -0
- package/dist/_chunk/utils.jsx +705 -0
- package/dist/_chunk/utils.jsx.map +1 -0
- package/dist/_chunk/visually-hidden.js +93 -0
- package/dist/_chunk/visually-hidden.js.map +1 -0
- package/dist/_chunk/visually-hidden.jsx +93 -0
- package/dist/_chunk/visually-hidden.jsx.map +1 -0
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
- package/dist/actiongroup/index.js +2 -0
- package/dist/actiongroup/index.jsx +2 -0
- package/dist/autocomplete/createAutocomplete.d.ts +12 -7
- package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
- package/dist/autocomplete/index.js +2 -0
- package/dist/autocomplete/index.jsx +2 -0
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/breadcrumbs/index.js +2 -0
- package/dist/breadcrumbs/index.jsx +2 -0
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
- package/dist/button/index.js +2 -0
- package/dist/button/index.jsx +2 -0
- package/dist/calendar/createCalendar.d.ts.map +1 -1
- package/dist/calendar/createCalendarCell.d.ts.map +1 -1
- package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
- package/dist/calendar/createCalendarMonthPicker.d.ts +41 -0
- package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -0
- package/dist/calendar/createCalendarYearPicker.d.ts +49 -0
- package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -0
- package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/calendar/index.d.ts +2 -0
- package/dist/calendar/index.d.ts.map +1 -1
- package/dist/calendar/index.js +2 -0
- package/dist/calendar/index.jsx +2 -0
- package/dist/calendar/intl/index.d.ts +1 -1
- package/dist/calendar/intl/index.d.ts.map +1 -1
- package/dist/calendar/utils.d.ts +4 -0
- package/dist/calendar/utils.d.ts.map +1 -1
- package/dist/checkbox/createCheckbox.d.ts +4 -0
- package/dist/checkbox/createCheckbox.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
- package/dist/checkbox/index.js +2 -0
- package/dist/checkbox/index.jsx +2 -0
- package/dist/collections/index.js +160 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/collections/index.jsx +160 -0
- package/dist/collections/index.jsx.map +1 -0
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorField.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorSwatch.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/color/index.js +2 -0
- package/dist/color/index.jsx +2 -0
- package/dist/color/intl/index.d.ts +30 -0
- package/dist/color/intl/index.d.ts.map +1 -0
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/combobox/index.js +2 -0
- package/dist/combobox/index.jsx +2 -0
- package/dist/combobox/intl/generated-locales.d.ts +16 -0
- package/dist/combobox/intl/generated-locales.d.ts.map +1 -0
- package/dist/combobox/intl/index.d.ts +2 -2
- package/dist/combobox/intl/index.d.ts.map +1 -1
- package/dist/datepicker/createDateField.d.ts +45 -23
- package/dist/datepicker/createDateField.d.ts.map +1 -1
- package/dist/datepicker/createDatePicker.d.ts +34 -6
- package/dist/datepicker/createDatePicker.d.ts.map +1 -1
- package/dist/datepicker/createDatePickerGroup.d.ts +13 -13
- package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -1
- package/dist/datepicker/createDateRangePicker.d.ts +55 -7
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
- package/dist/datepicker/createDateSegment.d.ts +6 -15
- package/dist/datepicker/createDateSegment.d.ts.map +1 -1
- package/dist/datepicker/createDisplayNames.d.ts +17 -0
- package/dist/datepicker/createDisplayNames.d.ts.map +1 -0
- package/dist/datepicker/createTimeField.d.ts +12 -49
- package/dist/datepicker/createTimeField.d.ts.map +1 -1
- package/dist/datepicker/index.d.ts +3 -3
- package/dist/datepicker/index.d.ts.map +1 -1
- package/dist/datepicker/index.js +2 -0
- package/dist/datepicker/index.jsx +2 -0
- package/dist/datepicker/intl.d.ts +12 -0
- package/dist/datepicker/intl.d.ts.map +1 -0
- package/dist/dialog/index.js +2 -0
- package/dist/dialog/index.jsx +2 -0
- package/dist/disclosure/index.js +2 -0
- package/dist/disclosure/index.jsx +2 -0
- package/dist/dnd/DragManager.d.ts +86 -0
- package/dist/dnd/DragManager.d.ts.map +1 -0
- package/dist/dnd/DropTargetKeyboardNavigation.d.ts +42 -0
- package/dist/dnd/DropTargetKeyboardNavigation.d.ts.map +1 -0
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
- package/dist/dnd/createDraggableItem.d.ts +12 -7
- package/dist/dnd/createDraggableItem.d.ts.map +1 -1
- package/dist/dnd/createDroppableCollection.d.ts +7 -15
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/index.d.ts +5 -1
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/dnd/index.js +3 -0
- package/dist/dnd/index.jsx +3 -0
- package/dist/dnd/intl/index.d.ts +39 -0
- package/dist/dnd/intl/index.d.ts.map +1 -0
- package/dist/dnd/utils.d.ts +7 -2
- package/dist/dnd/utils.d.ts.map +1 -1
- package/dist/focus/FocusScope.d.ts +7 -0
- package/dist/focus/FocusScope.d.ts.map +1 -1
- package/dist/focus/index.d.ts +2 -1
- package/dist/focus/index.d.ts.map +1 -1
- package/dist/focus/index.js +3 -0
- package/dist/focus/index.jsx +3 -0
- package/dist/focus/virtualFocus.d.ts +26 -0
- package/dist/focus/virtualFocus.d.ts.map +1 -0
- package/dist/form/createFormValidation.d.ts.map +1 -1
- package/dist/form/index.js +3 -0
- package/dist/form/index.jsx +3 -0
- package/dist/grid/index.js +2 -0
- package/dist/grid/index.jsx +2 -0
- package/dist/gridlist/createGridList.d.ts +7 -1
- package/dist/gridlist/createGridList.d.ts.map +1 -1
- package/dist/gridlist/createGridListItem.d.ts +1 -1
- package/dist/gridlist/createGridListItem.d.ts.map +1 -1
- package/dist/gridlist/createGridListSection.d.ts +15 -0
- package/dist/gridlist/createGridListSection.d.ts.map +1 -0
- package/dist/gridlist/index.d.ts +2 -1
- package/dist/gridlist/index.d.ts.map +1 -1
- package/dist/gridlist/index.js +2 -0
- package/dist/gridlist/index.jsx +2 -0
- package/dist/gridlist/types.d.ts +50 -0
- package/dist/gridlist/types.d.ts.map +1 -1
- package/dist/i18n/index.js +5 -0
- package/dist/i18n/index.jsx +5 -0
- package/dist/index.d.ts +10 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +77 -18311
- package/dist/index.jsx +77 -18242
- package/dist/interactions/FocusableProvider.d.ts.map +1 -1
- package/dist/interactions/PressEvent.d.ts +11 -0
- package/dist/interactions/PressEvent.d.ts.map +1 -1
- package/dist/interactions/createFocus.d.ts.map +1 -1
- package/dist/interactions/createFocusWithin.d.ts.map +1 -1
- package/dist/interactions/createInteractionModality.d.ts +0 -1
- package/dist/interactions/createInteractionModality.d.ts.map +1 -1
- package/dist/interactions/createKeyboard.d.ts.map +1 -1
- package/dist/interactions/createPress.d.ts.map +1 -1
- package/dist/interactions/index.js +9 -0
- package/dist/interactions/index.jsx +9 -0
- package/dist/label/createLabels.d.ts.map +1 -1
- package/dist/label/index.js +4 -0
- package/dist/label/index.jsx +4 -0
- package/dist/landmark/index.js +2 -0
- package/dist/landmark/index.jsx +2 -0
- package/dist/link/index.js +2 -0
- package/dist/link/index.jsx +2 -0
- package/dist/listbox/createListBox.d.ts +37 -0
- package/dist/listbox/createListBox.d.ts.map +1 -1
- package/dist/listbox/createOption.d.ts +7 -1
- package/dist/listbox/createOption.d.ts.map +1 -1
- package/dist/listbox/index.js +2 -0
- package/dist/listbox/index.jsx +2 -0
- package/dist/live-announcer/index.js +2 -0
- package/dist/live-announcer/index.jsx +2 -0
- package/dist/menu/createMenu.d.ts +7 -4
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/menu/createMenuItem.d.ts +9 -1
- package/dist/menu/createMenuItem.d.ts.map +1 -1
- package/dist/menu/index.js +2 -0
- package/dist/menu/index.jsx +2 -0
- package/dist/meter/index.js +2 -0
- package/dist/meter/index.jsx +2 -0
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/numberfield/index.js +2 -0
- package/dist/numberfield/index.jsx +2 -0
- package/dist/overlays/index.js +4 -0
- package/dist/overlays/index.jsx +4 -0
- package/dist/popover/calculatePosition.d.ts +2 -0
- package/dist/popover/calculatePosition.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts +8 -0
- package/dist/popover/createOverlayPosition.d.ts.map +1 -1
- package/dist/popover/index.js +2 -0
- package/dist/popover/index.jsx +2 -0
- package/dist/progress/index.js +2 -0
- package/dist/progress/index.jsx +2 -0
- package/dist/radio/createRadio.d.ts +2 -0
- package/dist/radio/createRadio.d.ts.map +1 -1
- package/dist/radio/index.js +2 -0
- package/dist/radio/index.jsx +2 -0
- package/dist/searchfield/index.js +2 -0
- package/dist/searchfield/index.jsx +2 -0
- package/dist/select/createSelect.d.ts +2 -0
- package/dist/select/createSelect.d.ts.map +1 -1
- package/dist/select/index.js +2 -0
- package/dist/select/index.jsx +2 -0
- package/dist/selection/DOMLayoutDelegate.d.ts +58 -0
- package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -0
- package/dist/selection/ListKeyboardDelegate.d.ts +95 -0
- package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -0
- package/dist/selection/constants.d.ts +15 -0
- package/dist/selection/constants.d.ts.map +1 -0
- package/dist/selection/createCollectionRowInteraction.d.ts +13 -0
- package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -0
- package/dist/selection/createScrollIntoViewOnFocus.d.ts +31 -0
- package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -0
- package/dist/selection/createSelectableCollection.d.ts +69 -0
- package/dist/selection/createSelectableCollection.d.ts.map +1 -0
- package/dist/selection/createSelectableItem.d.ts +154 -0
- package/dist/selection/createSelectableItem.d.ts.map +1 -0
- package/dist/selection/createSelectableList.d.ts +43 -0
- package/dist/selection/createSelectableList.d.ts.map +1 -0
- package/dist/selection/createTypeSelect.d.ts.map +1 -1
- package/dist/selection/index.d.ts +9 -0
- package/dist/selection/index.d.ts.map +1 -1
- package/dist/selection/index.js +5 -0
- package/dist/selection/index.jsx +5 -0
- package/dist/selection/selectItem.d.ts +29 -0
- package/dist/selection/selectItem.d.ts.map +1 -0
- package/dist/selection/utils.d.ts +40 -0
- package/dist/selection/utils.d.ts.map +1 -0
- package/dist/separator/index.js +2 -0
- package/dist/separator/index.jsx +2 -0
- package/dist/slider/createSlider.d.ts.map +1 -1
- package/dist/slider/index.js +2 -0
- package/dist/slider/index.jsx +2 -0
- package/dist/spinbutton/createSpinButton.d.ts +41 -0
- package/dist/spinbutton/createSpinButton.d.ts.map +1 -0
- package/dist/spinbutton/index.d.ts +3 -0
- package/dist/spinbutton/index.d.ts.map +1 -0
- package/dist/spinbutton/index.js +2 -0
- package/dist/spinbutton/index.jsx +2 -0
- package/dist/spinbutton/intl.d.ts +5 -0
- package/dist/spinbutton/intl.d.ts.map +1 -0
- package/dist/ssr/index.d.ts +17 -0
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +299 -0
- package/dist/ssr/index.js.map +1 -0
- package/dist/ssr/index.jsx +292 -0
- package/dist/ssr/index.jsx.map +1 -0
- package/dist/steplist/index.js +2 -0
- package/dist/steplist/index.jsx +2 -0
- package/dist/switch/createSwitch.d.ts +4 -0
- package/dist/switch/createSwitch.d.ts.map +1 -1
- package/dist/switch/index.js +2 -0
- package/dist/switch/index.jsx +2 -0
- package/dist/table/createTable.d.ts.map +1 -1
- package/dist/table/createTableColumnHeader.d.ts.map +1 -1
- package/dist/table/createTableRow.d.ts +1 -1
- package/dist/table/createTableRow.d.ts.map +1 -1
- package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
- package/dist/table/createTableSelectionCheckbox.d.ts.map +1 -1
- package/dist/table/index.js +2 -0
- package/dist/table/index.jsx +2 -0
- package/dist/table/types.d.ts +35 -1
- package/dist/table/types.d.ts.map +1 -1
- package/dist/table/utils.d.ts +15 -0
- package/dist/table/utils.d.ts.map +1 -0
- package/dist/tabs/createTabs.d.ts +5 -3
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tabs/index.js +2 -0
- package/dist/tabs/index.jsx +2 -0
- package/dist/tag/createTag.d.ts +2 -0
- package/dist/tag/createTag.d.ts.map +1 -1
- package/dist/tag/createTagGroup.d.ts +7 -0
- package/dist/tag/createTagGroup.d.ts.map +1 -1
- package/dist/tag/index.js +2 -0
- package/dist/tag/index.jsx +2 -0
- package/dist/textfield/index.js +2 -0
- package/dist/textfield/index.jsx +2 -0
- package/dist/toast/createToast.d.ts.map +1 -1
- package/dist/toast/index.js +2 -0
- package/dist/toast/index.jsx +2 -0
- package/dist/toggle/createToggle.d.ts +4 -0
- package/dist/toggle/createToggle.d.ts.map +1 -1
- package/dist/toggle/index.js +3 -0
- package/dist/toggle/index.jsx +3 -0
- package/dist/toolbar/createToolbar.d.ts +1 -1
- package/dist/toolbar/createToolbar.d.ts.map +1 -1
- package/dist/toolbar/index.js +2 -0
- package/dist/toolbar/index.jsx +2 -0
- package/dist/tooltip/index.js +2 -0
- package/dist/tooltip/index.jsx +2 -0
- package/dist/tree/createTree.d.ts +5 -1
- package/dist/tree/createTree.d.ts.map +1 -1
- package/dist/tree/createTreeItem.d.ts +1 -1
- package/dist/tree/createTreeItem.d.ts.map +1 -1
- package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
- package/dist/tree/index.js +2 -0
- package/dist/tree/index.jsx +2 -0
- package/dist/tree/types.d.ts +10 -0
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/animation.d.ts +60 -0
- package/dist/utils/animation.d.ts.map +1 -0
- package/dist/utils/dom.d.ts +49 -2
- package/dist/utils/dom.d.ts.map +1 -1
- package/dist/utils/index.d.ts +4 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.jsx +6 -0
- package/dist/utils/keyboard.d.ts +17 -0
- package/dist/utils/keyboard.d.ts.map +1 -0
- package/dist/utils/mergeProps.d.ts.map +1 -1
- package/dist/utils/scrollIntoView.d.ts +30 -0
- package/dist/utils/scrollIntoView.d.ts.map +1 -0
- package/dist/visually-hidden/index.js +2 -0
- package/dist/visually-hidden/index.jsx +2 -0
- package/package.json +304 -3
- package/src/actiongroup/createActionGroup.ts +26 -109
- package/src/autocomplete/createAutocomplete.ts +202 -35
- package/src/breadcrumbs/createBreadcrumbs.ts +12 -4
- package/src/button/createToggleButtonGroup.ts +19 -14
- package/src/calendar/createCalendar.ts +5 -4
- package/src/calendar/createCalendarCell.ts +36 -5
- package/src/calendar/createCalendarGrid.ts +47 -12
- package/src/calendar/createCalendarMonthPicker.ts +105 -0
- package/src/calendar/createCalendarYearPicker.ts +144 -0
- package/src/calendar/createRangeCalendar.ts +27 -15
- package/src/calendar/createRangeCalendarCell.ts +17 -3
- package/src/calendar/index.ts +17 -0
- package/src/calendar/intl/index.ts +8 -0
- package/src/calendar/utils.ts +4 -0
- package/src/checkbox/createCheckbox.ts +10 -0
- package/src/checkbox/createCheckboxGroupItem.ts +12 -16
- package/src/color/createColorArea.ts +17 -10
- package/src/color/createColorField.ts +8 -1
- package/src/color/createColorSlider.ts +1 -2
- package/src/color/createColorSwatch.ts +4 -2
- package/src/color/createColorWheel.ts +0 -6
- package/src/color/intl/index.ts +316 -0
- package/src/combobox/createComboBox.ts +35 -4
- package/src/combobox/intl/generated-locales.ts +635 -0
- package/src/combobox/intl/index.ts +8 -2
- package/src/datepicker/createDateField.ts +228 -213
- package/src/datepicker/createDatePicker.ts +157 -146
- package/src/datepicker/createDatePickerGroup.ts +88 -82
- package/src/datepicker/createDateRangePicker.ts +230 -179
- package/src/datepicker/createDateSegment.ts +386 -384
- package/src/datepicker/createDisplayNames.ts +45 -0
- package/src/datepicker/createTimeField.ts +36 -129
- package/src/datepicker/index.ts +13 -14
- package/src/datepicker/intl.ts +633 -0
- package/src/dnd/DragManager.ts +693 -0
- package/src/dnd/DropTargetKeyboardNavigation.ts +337 -0
- package/src/dnd/createDrag.ts +31 -5
- package/src/dnd/createDraggableCollection.ts +33 -15
- package/src/dnd/createDraggableItem.ts +92 -5
- package/src/dnd/createDroppableCollection.ts +488 -371
- package/src/dnd/index.ts +11 -0
- package/src/dnd/intl/ar-AE.json +29 -0
- package/src/dnd/intl/bg-BG.json +29 -0
- package/src/dnd/intl/cs-CZ.json +29 -0
- package/src/dnd/intl/da-DK.json +29 -0
- package/src/dnd/intl/de-DE.json +29 -0
- package/src/dnd/intl/el-GR.json +29 -0
- package/src/dnd/intl/en-US.json +29 -0
- package/src/dnd/intl/es-ES.json +29 -0
- package/src/dnd/intl/et-EE.json +29 -0
- package/src/dnd/intl/fi-FI.json +29 -0
- package/src/dnd/intl/fr-FR.json +29 -0
- package/src/dnd/intl/he-IL.json +29 -0
- package/src/dnd/intl/hr-HR.json +29 -0
- package/src/dnd/intl/hu-HU.json +29 -0
- package/src/dnd/intl/index.ts +139 -0
- package/src/dnd/intl/it-IT.json +29 -0
- package/src/dnd/intl/ja-JP.json +29 -0
- package/src/dnd/intl/ko-KR.json +29 -0
- package/src/dnd/intl/lt-LT.json +29 -0
- package/src/dnd/intl/lv-LV.json +29 -0
- package/src/dnd/intl/nb-NO.json +29 -0
- package/src/dnd/intl/nl-NL.json +29 -0
- package/src/dnd/intl/pl-PL.json +29 -0
- package/src/dnd/intl/pt-BR.json +29 -0
- package/src/dnd/intl/pt-PT.json +29 -0
- package/src/dnd/intl/ro-RO.json +29 -0
- package/src/dnd/intl/ru-RU.json +29 -0
- package/src/dnd/intl/sk-SK.json +29 -0
- package/src/dnd/intl/sl-SI.json +29 -0
- package/src/dnd/intl/sr-SP.json +29 -0
- package/src/dnd/intl/sv-SE.json +29 -0
- package/src/dnd/intl/tr-TR.json +29 -0
- package/src/dnd/intl/uk-UA.json +29 -0
- package/src/dnd/intl/zh-CN.json +29 -0
- package/src/dnd/intl/zh-TW.json +29 -0
- package/src/dnd/utils.ts +63 -3
- package/src/focus/FocusScope.tsx +266 -24
- package/src/focus/index.ts +8 -0
- package/src/focus/virtualFocus.ts +55 -0
- package/src/form/createFormValidation.ts +8 -1
- package/src/gridlist/createGridList.ts +187 -48
- package/src/gridlist/createGridListItem.ts +87 -155
- package/src/gridlist/createGridListSection.ts +54 -0
- package/src/gridlist/index.ts +3 -0
- package/src/gridlist/types.ts +47 -0
- package/src/index.ts +51 -3
- package/src/interactions/FocusableProvider.tsx +11 -6
- package/src/interactions/PressEvent.ts +14 -0
- package/src/interactions/createFocus.ts +26 -21
- package/src/interactions/createFocusWithin.ts +23 -24
- package/src/interactions/createInteractionModality.ts +26 -15
- package/src/interactions/createKeyboard.ts +10 -0
- package/src/interactions/createPress.ts +29 -6
- package/src/label/createLabels.ts +7 -4
- package/src/listbox/createListBox.ts +203 -10
- package/src/listbox/createOption.ts +84 -74
- package/src/menu/createMenu.ts +93 -16
- package/src/menu/createMenuItem.ts +253 -41
- package/src/numberfield/createNumberField.ts +82 -14
- package/src/popover/calculatePosition.ts +19 -7
- package/src/popover/createOverlayPosition.ts +9 -0
- package/src/radio/createRadio.ts +19 -2
- package/src/select/createSelect.ts +41 -4
- package/src/selection/DOMLayoutDelegate.ts +102 -0
- package/src/selection/ListKeyboardDelegate.ts +398 -0
- package/src/selection/constants.ts +16 -0
- package/src/selection/createCollectionRowInteraction.ts +209 -0
- package/src/selection/createScrollIntoViewOnFocus.ts +65 -0
- package/src/selection/createSelectableCollection.ts +645 -0
- package/src/selection/createSelectableItem.ts +512 -0
- package/src/selection/createSelectableList.ts +93 -0
- package/src/selection/createTypeSelect.ts +112 -51
- package/src/selection/index.ts +31 -0
- package/src/selection/selectItem.ts +80 -0
- package/src/selection/utils.ts +82 -0
- package/src/slider/createSlider.ts +48 -1
- package/src/spinbutton/createSpinButton.ts +163 -0
- package/src/spinbutton/index.ts +10 -0
- package/src/spinbutton/intl.ts +115 -0
- package/src/ssr/index.tsx +31 -0
- package/src/switch/createSwitch.ts +10 -0
- package/src/table/createTable.ts +82 -27
- package/src/table/createTableColumnHeader.ts +10 -0
- package/src/table/createTableRow.ts +208 -203
- package/src/table/createTableSelectAllCheckbox.ts +3 -4
- package/src/table/createTableSelectionCheckbox.ts +24 -1
- package/src/table/types.ts +37 -1
- package/src/table/utils.ts +41 -0
- package/src/tabs/createTabs.ts +95 -24
- package/src/tag/createTag.ts +30 -36
- package/src/tag/createTagGroup.ts +92 -0
- package/src/toast/createToast.ts +1 -0
- package/src/toggle/createToggle.ts +20 -0
- package/src/toolbar/createToolbar.ts +43 -94
- package/src/tree/createTree.ts +165 -52
- package/src/tree/createTreeItem.ts +105 -120
- package/src/tree/createTreeSelectionCheckbox.ts +14 -1
- package/src/tree/types.ts +10 -0
- package/src/utils/animation.ts +243 -0
- package/src/utils/dom.ts +216 -25
- package/src/utils/index.ts +10 -0
- package/src/utils/keyboard.ts +25 -0
- package/src/utils/mergeProps.ts +8 -1
- package/src/utils/scrollIntoView.ts +181 -0
- package/dist/datepicker/createTimeSegment.d.ts +0 -29
- package/dist/datepicker/createTimeSegment.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.jsx.map +0 -1
- package/src/datepicker/createTimeSegment.ts +0 -352
|
@@ -1,14 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* createDateSegment hook for Solidaria
|
|
3
3
|
*
|
|
4
|
-
* Provides the behavior and accessibility implementation for a
|
|
5
|
-
*
|
|
4
|
+
* Provides the behavior and accessibility implementation for a single editable
|
|
5
|
+
* date segment. Faithful port of @react-aria/datepicker `useDateSegment` — the
|
|
6
|
+
* spinbutton wiring (value stepping + live announcements) is delegated to
|
|
7
|
+
* `createSpinButton`, numeric text entry flows through native `beforeinput`
|
|
8
|
+
* events, and segment focus recovery on unmount mirrors upstream's layout effect.
|
|
6
9
|
*/
|
|
7
10
|
|
|
8
|
-
import {
|
|
11
|
+
import { createMemo, createEffect, onCleanup } from "solid-js";
|
|
12
|
+
import { toCalendar, CalendarDate } from "@internationalized/date";
|
|
13
|
+
import { NumberParser } from "@internationalized/number";
|
|
9
14
|
import { access, type MaybeAccessor } from "../utils/reactivity";
|
|
15
|
+
import { mergeProps } from "../utils/mergeProps";
|
|
16
|
+
import {
|
|
17
|
+
isMac,
|
|
18
|
+
isIOS,
|
|
19
|
+
scrollIntoViewport,
|
|
20
|
+
getScrollParent,
|
|
21
|
+
nodeContains,
|
|
22
|
+
} from "../utils";
|
|
23
|
+
import { createId } from "../ssr";
|
|
24
|
+
import { createLabels } from "../label/createLabels";
|
|
25
|
+
import { useLocale, createDateFormatter, createFilter } from "../i18n";
|
|
26
|
+
import { createSpinButton } from "../spinbutton";
|
|
27
|
+
import { createDisplayNames } from "./createDisplayNames";
|
|
28
|
+
import { hookData } from "./createDateField";
|
|
10
29
|
import type { DateFieldState, DateSegment, DateSegmentType } from "@proyecto-viviana/solid-stately";
|
|
11
|
-
import { useLocale } from "../i18n";
|
|
12
30
|
|
|
13
31
|
export interface AriaDateSegmentProps {
|
|
14
32
|
/** The segment data. */
|
|
@@ -22,18 +40,18 @@ export interface AriaDateSegmentProps {
|
|
|
22
40
|
export interface DateSegmentAria {
|
|
23
41
|
/** Props for the segment element. */
|
|
24
42
|
segmentProps: Record<string, unknown>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function commonPrefixLength(strings: string[]): number {
|
|
46
|
+
strings.sort();
|
|
47
|
+
const first = strings[0];
|
|
48
|
+
const last = strings[strings.length - 1];
|
|
49
|
+
for (let i = 0; i < first.length; i++) {
|
|
50
|
+
if (first[i] !== last[i]) {
|
|
51
|
+
return i;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return 0;
|
|
37
55
|
}
|
|
38
56
|
|
|
39
57
|
/**
|
|
@@ -42,429 +60,413 @@ export interface DateSegmentAria {
|
|
|
42
60
|
export function createDateSegment<T extends DateFieldState>(
|
|
43
61
|
props: MaybeAccessor<AriaDateSegmentProps>,
|
|
44
62
|
state: T,
|
|
45
|
-
ref
|
|
63
|
+
ref: () => HTMLElement | null,
|
|
46
64
|
): DateSegmentAria {
|
|
47
65
|
const getProps = () => access(props);
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
const
|
|
66
|
+
const segment = () => getProps().segment;
|
|
67
|
+
let enteredKeys = "";
|
|
68
|
+
const localeInfo = useLocale();
|
|
69
|
+
const locale = () => localeInfo().locale;
|
|
70
|
+
const direction = () => localeInfo().direction;
|
|
71
|
+
const displayNames = createDisplayNames();
|
|
72
|
+
const hd = hookData.get(state as unknown as object) as
|
|
73
|
+
| {
|
|
74
|
+
ariaLabel?: string;
|
|
75
|
+
ariaLabelledBy?: string;
|
|
76
|
+
ariaDescribedBy?: () => string | undefined;
|
|
77
|
+
focusManager: {
|
|
78
|
+
focusNext: () => HTMLElement | null;
|
|
79
|
+
focusPrevious: () => HTMLElement | null;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
| undefined;
|
|
83
|
+
const focusManager = hd?.focusManager;
|
|
84
|
+
const segmentId = createId();
|
|
85
|
+
|
|
86
|
+
const resolvedOptions = state.dateFormatter.resolvedOptions();
|
|
87
|
+
const monthDateFormatter = createDateFormatter({
|
|
88
|
+
month: "long",
|
|
89
|
+
timeZone: resolvedOptions.timeZone,
|
|
90
|
+
});
|
|
91
|
+
const hourDateFormatter = createDateFormatter({
|
|
92
|
+
hour: "numeric",
|
|
93
|
+
hour12: resolvedOptions.hour12,
|
|
94
|
+
timeZone: resolvedOptions.timeZone,
|
|
95
|
+
});
|
|
54
96
|
|
|
55
|
-
|
|
56
|
-
|
|
97
|
+
const textValue = createMemo(() => {
|
|
98
|
+
const seg = segment();
|
|
99
|
+
let value = seg.isPlaceholder ? "" : seg.text;
|
|
100
|
+
if (seg.type === "month" && !seg.isPlaceholder) {
|
|
101
|
+
const monthTextValue = monthDateFormatter().format(state.dateValue());
|
|
102
|
+
value = monthTextValue !== value ? `${value} \u{2013} ${monthTextValue}` : monthTextValue;
|
|
103
|
+
} else if (seg.type === "hour" && !seg.isPlaceholder) {
|
|
104
|
+
value = hourDateFormatter().format(state.dateValue());
|
|
105
|
+
}
|
|
106
|
+
return value;
|
|
107
|
+
});
|
|
57
108
|
|
|
58
|
-
|
|
59
|
-
const isEditable = createMemo(() => {
|
|
109
|
+
const spinButton = createSpinButton(() => {
|
|
60
110
|
const seg = segment();
|
|
61
|
-
return
|
|
111
|
+
return {
|
|
112
|
+
// The ARIA spec says aria-valuenow is optional if there's no value, but aXe requires it.
|
|
113
|
+
value: seg.value ?? undefined,
|
|
114
|
+
textValue: textValue(),
|
|
115
|
+
minValue: seg.minValue,
|
|
116
|
+
maxValue: seg.maxValue,
|
|
117
|
+
isDisabled: state.isDisabled(),
|
|
118
|
+
isReadOnly: state.isReadOnly() || !seg.isEditable,
|
|
119
|
+
isRequired: state.isRequired(),
|
|
120
|
+
onIncrement: () => {
|
|
121
|
+
enteredKeys = "";
|
|
122
|
+
state.increment(seg.type);
|
|
123
|
+
},
|
|
124
|
+
onDecrement: () => {
|
|
125
|
+
enteredKeys = "";
|
|
126
|
+
state.decrement(seg.type);
|
|
127
|
+
},
|
|
128
|
+
onIncrementPage: () => {
|
|
129
|
+
enteredKeys = "";
|
|
130
|
+
state.incrementPage(seg.type);
|
|
131
|
+
},
|
|
132
|
+
onDecrementPage: () => {
|
|
133
|
+
enteredKeys = "";
|
|
134
|
+
state.decrementPage(seg.type);
|
|
135
|
+
},
|
|
136
|
+
onIncrementToMax: () => {
|
|
137
|
+
enteredKeys = "";
|
|
138
|
+
state.incrementToMax(seg.type);
|
|
139
|
+
},
|
|
140
|
+
onDecrementToMin: () => {
|
|
141
|
+
enteredKeys = "";
|
|
142
|
+
state.decrementToMin(seg.type);
|
|
143
|
+
},
|
|
144
|
+
};
|
|
62
145
|
});
|
|
63
146
|
|
|
64
|
-
|
|
65
|
-
let longPressTimeout: ReturnType<typeof setTimeout> | null = null;
|
|
66
|
-
let longPressInterval: ReturnType<typeof setInterval> | null = null;
|
|
67
|
-
let hadPointerDown = false;
|
|
147
|
+
const parser = createMemo(() => new NumberParser(locale(), { maximumFractionDigits: 0 }));
|
|
68
148
|
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
149
|
+
const backspace = () => {
|
|
150
|
+
const seg = segment();
|
|
151
|
+
if (seg.text === seg.placeholder) {
|
|
152
|
+
focusManager?.focusPrevious();
|
|
73
153
|
}
|
|
74
|
-
if (
|
|
75
|
-
|
|
76
|
-
|
|
154
|
+
if (parser().isValidPartialNumber(seg.text) && !state.isReadOnly() && !seg.isPlaceholder) {
|
|
155
|
+
let newValue = seg.text.slice(0, -1);
|
|
156
|
+
const parsed = parser().parse(newValue);
|
|
157
|
+
newValue = parsed === 0 ? "" : newValue;
|
|
158
|
+
if (newValue.length === 0 || parsed === 0) {
|
|
159
|
+
state.clearSegment(seg.type);
|
|
160
|
+
} else {
|
|
161
|
+
state.setSegment(seg.type, parsed);
|
|
162
|
+
}
|
|
163
|
+
enteredKeys = newValue;
|
|
164
|
+
} else if (seg.type === "dayPeriod" || seg.type === "era") {
|
|
165
|
+
state.clearSegment(seg.type);
|
|
77
166
|
}
|
|
78
167
|
};
|
|
79
168
|
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
longPressInterval = setInterval(() => {
|
|
85
|
-
action();
|
|
86
|
-
}, 100);
|
|
87
|
-
}, 300);
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
onCleanup(() => {
|
|
91
|
-
clearLongPress();
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
const focusSegment = (target: "first" | "last" | "prev" | "next") => {
|
|
95
|
-
const el = ref?.();
|
|
96
|
-
if (!el) return;
|
|
97
|
-
|
|
98
|
-
const container = el.parentElement;
|
|
99
|
-
if (!container) return;
|
|
100
|
-
|
|
101
|
-
const segments = Array.from(container.querySelectorAll<HTMLElement>('[role="spinbutton"]'));
|
|
102
|
-
|
|
103
|
-
if (segments.length === 0) return;
|
|
104
|
-
|
|
105
|
-
if (target === "first") {
|
|
106
|
-
segments[0]?.focus();
|
|
107
|
-
return;
|
|
169
|
+
const onKeyDown = (e: KeyboardEvent) => {
|
|
170
|
+
// Firefox does not fire selectstart for Ctrl/Cmd + A
|
|
171
|
+
if (e.key === "a" && (isMac() ? e.metaKey : e.ctrlKey)) {
|
|
172
|
+
e.preventDefault();
|
|
108
173
|
}
|
|
109
|
-
|
|
110
|
-
if (target === "last") {
|
|
111
|
-
segments[segments.length - 1]?.focus();
|
|
174
|
+
if (e.ctrlKey || e.metaKey || e.shiftKey || e.altKey) {
|
|
112
175
|
return;
|
|
113
176
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
177
|
+
switch (e.key) {
|
|
178
|
+
case "Backspace":
|
|
179
|
+
case "Delete":
|
|
180
|
+
// Safari on iOS does not fire beforeinput for the backspace key because the cursor is at the start.
|
|
181
|
+
e.preventDefault();
|
|
182
|
+
e.stopPropagation();
|
|
183
|
+
backspace();
|
|
184
|
+
break;
|
|
121
185
|
}
|
|
122
186
|
};
|
|
123
187
|
|
|
124
|
-
const
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
188
|
+
const { startsWith } = createFilter({ sensitivity: "base" })();
|
|
189
|
+
const amPmFormatter = createDateFormatter({ hour: "numeric", hour12: true });
|
|
190
|
+
const am = createMemo(() => {
|
|
191
|
+
const date = new Date();
|
|
192
|
+
date.setHours(0);
|
|
193
|
+
return amPmFormatter().formatToParts(date).find((part) => part.type === "dayPeriod")?.value ?? "";
|
|
194
|
+
});
|
|
195
|
+
const pm = createMemo(() => {
|
|
196
|
+
const date = new Date();
|
|
197
|
+
date.setHours(12);
|
|
198
|
+
return amPmFormatter().formatToParts(date).find((part) => part.type === "dayPeriod")?.value ?? "";
|
|
199
|
+
});
|
|
128
200
|
|
|
129
|
-
//
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
if (
|
|
201
|
+
// Get a list of formatted era names so users can type the first character to choose one.
|
|
202
|
+
const eraFormatter = createDateFormatter({ year: "numeric", era: "narrow", timeZone: "UTC" });
|
|
203
|
+
const eras = createMemo(() => {
|
|
204
|
+
if (segment().type !== "era") {
|
|
205
|
+
return [] as Array<{ era: string; formatted: string }>;
|
|
206
|
+
}
|
|
207
|
+
const date = toCalendar(new CalendarDate(1, 1, 1), state.calendar);
|
|
208
|
+
const list = state.calendar.getEras().map((era) => {
|
|
209
|
+
const eraDate = date.set({ year: 1, month: 1, day: 1, era }).toDate("UTC");
|
|
210
|
+
const parts = eraFormatter().formatToParts(eraDate);
|
|
211
|
+
const formatted = parts.find((p) => p.type === "era")?.value ?? "";
|
|
212
|
+
return { era, formatted };
|
|
213
|
+
});
|
|
214
|
+
const prefixLength = commonPrefixLength(list.map((era) => era.formatted));
|
|
215
|
+
if (prefixLength) {
|
|
216
|
+
for (const era of list) {
|
|
217
|
+
era.formatted = era.formatted.slice(prefixLength);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
return list;
|
|
221
|
+
});
|
|
133
222
|
|
|
223
|
+
const onInput = (key: string) => {
|
|
134
224
|
const seg = segment();
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
focusSegment(locale().direction === "rtl" ? "prev" : "next");
|
|
146
|
-
break;
|
|
147
|
-
case "ArrowLeft":
|
|
148
|
-
e.preventDefault();
|
|
149
|
-
focusSegment(locale().direction === "rtl" ? "next" : "prev");
|
|
150
|
-
break;
|
|
151
|
-
case "ArrowUp":
|
|
152
|
-
e.preventDefault();
|
|
153
|
-
state.incrementSegment(type);
|
|
154
|
-
if (!e.repeat) {
|
|
155
|
-
startLongPress(() => state.incrementSegment(type));
|
|
156
|
-
}
|
|
157
|
-
break;
|
|
158
|
-
case "ArrowDown":
|
|
159
|
-
e.preventDefault();
|
|
160
|
-
state.decrementSegment(type);
|
|
161
|
-
if (!e.repeat) {
|
|
162
|
-
startLongPress(() => state.decrementSegment(type));
|
|
163
|
-
}
|
|
164
|
-
break;
|
|
165
|
-
case "Home":
|
|
166
|
-
e.preventDefault();
|
|
167
|
-
focusSegment("first");
|
|
168
|
-
break;
|
|
169
|
-
case "End":
|
|
170
|
-
e.preventDefault();
|
|
171
|
-
focusSegment("last");
|
|
172
|
-
break;
|
|
173
|
-
case "Backspace":
|
|
174
|
-
e.preventDefault();
|
|
175
|
-
// Match common date-field UX: backspace on an empty placeholder moves to previous segment.
|
|
176
|
-
if (seg.isPlaceholder) {
|
|
177
|
-
focusSegment("prev");
|
|
225
|
+
if (state.isDisabled() || state.isReadOnly()) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const newValue = enteredKeys + key;
|
|
229
|
+
switch (seg.type) {
|
|
230
|
+
case "dayPeriod":
|
|
231
|
+
if (startsWith(am(), key)) {
|
|
232
|
+
state.setSegment("dayPeriod", 0);
|
|
233
|
+
} else if (startsWith(pm(), key)) {
|
|
234
|
+
state.setSegment("dayPeriod", 1);
|
|
178
235
|
} else {
|
|
179
|
-
|
|
236
|
+
break;
|
|
180
237
|
}
|
|
238
|
+
focusManager?.focusNext();
|
|
181
239
|
break;
|
|
182
|
-
case "
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
// Handle numeric input
|
|
188
|
-
const normalizedDigit = normalizeDigit(e.key);
|
|
189
|
-
if (normalizedDigit) {
|
|
190
|
-
e.preventDefault();
|
|
191
|
-
handleNumericInput(normalizedDigit, type, seg);
|
|
240
|
+
case "era": {
|
|
241
|
+
const matched = eras().find((e) => startsWith(e.formatted, key));
|
|
242
|
+
if (matched) {
|
|
243
|
+
state.setSegment("era", matched.era as unknown as number);
|
|
244
|
+
focusManager?.focusNext();
|
|
192
245
|
}
|
|
193
246
|
break;
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
const handleKeyUp = () => {
|
|
198
|
-
clearLongPress();
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
// Handle numeric input
|
|
202
|
-
const handleNumericInput = (key: string, type: DateSegmentType, seg: DateSegment) => {
|
|
203
|
-
const newKeys = enteredKeys() + key;
|
|
204
|
-
const numValue = parseInt(newKeys, 10);
|
|
205
|
-
const maxValue = seg.maxValue ?? 99;
|
|
206
|
-
const minValue = seg.minValue ?? 0;
|
|
207
|
-
const maxDigits = String(maxValue).length;
|
|
208
|
-
|
|
209
|
-
// Check if we should accept more digits
|
|
210
|
-
if (numValue <= maxValue) {
|
|
211
|
-
state.setSegment(type, numValue);
|
|
212
|
-
|
|
213
|
-
// If entering more digits wouldn't make sense, clear entered keys
|
|
214
|
-
const potentialNextValue = parseInt(newKeys + "0", 10);
|
|
215
|
-
if (potentialNextValue > maxValue || newKeys.length >= maxDigits) {
|
|
216
|
-
setEnteredKeys("");
|
|
217
|
-
focusSegment("next");
|
|
218
|
-
} else {
|
|
219
|
-
setEnteredKeys(newKeys);
|
|
220
247
|
}
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
if (
|
|
228
|
-
|
|
229
|
-
|
|
248
|
+
case "day":
|
|
249
|
+
case "hour":
|
|
250
|
+
case "minute":
|
|
251
|
+
case "second":
|
|
252
|
+
case "month":
|
|
253
|
+
case "year": {
|
|
254
|
+
if (!parser().isValidPartialNumber(newValue)) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
const numberValue = parser().parse(newValue);
|
|
258
|
+
let segmentValue = numberValue;
|
|
259
|
+
if (seg.maxValue !== undefined && numberValue > seg.maxValue) {
|
|
260
|
+
segmentValue = parser().parse(key);
|
|
261
|
+
}
|
|
262
|
+
if (isNaN(numberValue)) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
state.setSegment(seg.type, segmentValue);
|
|
266
|
+
if (
|
|
267
|
+
seg.maxValue !== undefined &&
|
|
268
|
+
(Number(numberValue + "0") > seg.maxValue || newValue.length >= String(seg.maxValue).length)
|
|
269
|
+
) {
|
|
270
|
+
enteredKeys = "";
|
|
271
|
+
focusManager?.focusNext();
|
|
230
272
|
} else {
|
|
231
|
-
|
|
273
|
+
enteredKeys = newValue;
|
|
232
274
|
}
|
|
233
|
-
|
|
234
|
-
setEnteredKeys("");
|
|
275
|
+
break;
|
|
235
276
|
}
|
|
236
277
|
}
|
|
237
278
|
};
|
|
238
279
|
|
|
239
|
-
const
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
e.preventDefault();
|
|
248
|
-
clearCurrentSegment(seg.type);
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
if (e.inputType === "insertText" && e.data) {
|
|
253
|
-
const normalizedDigit = normalizeDigit(e.data);
|
|
254
|
-
if (!normalizedDigit) return;
|
|
255
|
-
e.preventDefault();
|
|
256
|
-
handleNumericInput(normalizedDigit, seg.type, seg);
|
|
280
|
+
const onFocus = () => {
|
|
281
|
+
enteredKeys = "";
|
|
282
|
+
const el = ref();
|
|
283
|
+
if (el) {
|
|
284
|
+
scrollIntoViewport(el, { containingElement: getScrollParent(el) });
|
|
285
|
+
// Collapse selection to start or Chrome won't fire input events.
|
|
286
|
+
const selection = window.getSelection();
|
|
287
|
+
selection?.collapse(el);
|
|
257
288
|
}
|
|
258
289
|
};
|
|
259
290
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
const handleCompositionEnd = (e: CompositionEvent) => {
|
|
267
|
-
if (!isEditable()) return;
|
|
268
|
-
setIsComposing(false);
|
|
269
|
-
|
|
270
|
-
const seg = segment();
|
|
271
|
-
if (seg.type === "literal") return;
|
|
272
|
-
|
|
273
|
-
const digits = extractNormalizedDigits(e.data ?? "");
|
|
274
|
-
if (digits.length === 0) return;
|
|
275
|
-
|
|
276
|
-
for (const digit of digits) {
|
|
277
|
-
handleNumericInput(digit, seg.type, seg);
|
|
291
|
+
// Enforce that the selection is collapsed when inside a date segment. Otherwise, when tapping on a
|
|
292
|
+
// segment in Android Chrome and then entering text, composition events break the DOM structure.
|
|
293
|
+
createEffect(() => {
|
|
294
|
+
if (typeof document === "undefined") {
|
|
295
|
+
return;
|
|
278
296
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
297
|
+
const handler = () => {
|
|
298
|
+
const selection = window.getSelection();
|
|
299
|
+
if (selection?.anchorNode && nodeContains(ref(), selection.anchorNode)) {
|
|
300
|
+
selection.collapse(ref());
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
document.addEventListener("selectionchange", handler);
|
|
304
|
+
onCleanup(() => document.removeEventListener("selectionchange", handler));
|
|
305
|
+
});
|
|
285
306
|
|
|
286
|
-
|
|
287
|
-
|
|
307
|
+
let compositionValue = "";
|
|
308
|
+
createEffect(() => {
|
|
309
|
+
const el = ref();
|
|
310
|
+
if (!el) {
|
|
311
|
+
return;
|
|
288
312
|
}
|
|
289
|
-
|
|
313
|
+
const onBeforeInput = (e: InputEvent) => {
|
|
314
|
+
if (!ref()) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
e.preventDefault();
|
|
318
|
+
switch (e.inputType) {
|
|
319
|
+
case "deleteContentBackward":
|
|
320
|
+
case "deleteContentForward":
|
|
321
|
+
if (parser().isValidPartialNumber(segment().text) && !state.isReadOnly()) {
|
|
322
|
+
backspace();
|
|
323
|
+
}
|
|
324
|
+
break;
|
|
325
|
+
case "insertCompositionText":
|
|
326
|
+
// insertCompositionText cannot be canceled. Record current state to restore in `input`.
|
|
327
|
+
compositionValue = el.textContent ?? "";
|
|
328
|
+
// Safari gets stuck in a composition state unless we also assign to the value here.
|
|
329
|
+
// eslint-disable-next-line no-self-assign
|
|
330
|
+
el.textContent = el.textContent;
|
|
331
|
+
break;
|
|
332
|
+
default:
|
|
333
|
+
if (e.data != null) {
|
|
334
|
+
onInput(e.data);
|
|
335
|
+
}
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
338
|
+
};
|
|
339
|
+
const onInputEvent = (e: InputEvent) => {
|
|
340
|
+
const { inputType, data } = e;
|
|
341
|
+
switch (inputType) {
|
|
342
|
+
case "insertCompositionText":
|
|
343
|
+
if (ref()) {
|
|
344
|
+
el.textContent = compositionValue;
|
|
345
|
+
}
|
|
346
|
+
if (data != null && (startsWith(am(), data) || startsWith(pm(), data))) {
|
|
347
|
+
onInput(data);
|
|
348
|
+
}
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
el.addEventListener("beforeinput", onBeforeInput as EventListener);
|
|
353
|
+
el.addEventListener("input", onInputEvent as EventListener);
|
|
354
|
+
onCleanup(() => {
|
|
355
|
+
el.removeEventListener("beforeinput", onBeforeInput as EventListener);
|
|
356
|
+
el.removeEventListener("input", onInputEvent as EventListener);
|
|
357
|
+
});
|
|
358
|
+
});
|
|
290
359
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
360
|
+
// If the focused segment is removed, focus the previous one, or the next one if there was no previous one.
|
|
361
|
+
let focusedElement: HTMLElement | null = null;
|
|
362
|
+
createEffect(() => {
|
|
363
|
+
focusedElement = ref();
|
|
364
|
+
});
|
|
365
|
+
onCleanup(() => {
|
|
366
|
+
if (typeof document !== "undefined" && document.activeElement === focusedElement) {
|
|
367
|
+
const prev = focusManager?.focusPrevious();
|
|
368
|
+
if (!prev) {
|
|
369
|
+
focusManager?.focusNext();
|
|
300
370
|
}
|
|
301
371
|
}
|
|
302
|
-
};
|
|
303
|
-
|
|
304
|
-
const handleBlur = () => {
|
|
305
|
-
setIsFocused(false);
|
|
306
|
-
setIsFocusVisible(false);
|
|
307
|
-
setEnteredKeys("");
|
|
308
|
-
clearLongPress();
|
|
309
|
-
state.confirmPlaceholder();
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
const handleMouseEnter = () => {
|
|
313
|
-
setIsHovered(true);
|
|
314
|
-
};
|
|
315
|
-
|
|
316
|
-
const handleMouseLeave = () => {
|
|
317
|
-
setIsHovered(false);
|
|
318
|
-
};
|
|
372
|
+
});
|
|
319
373
|
|
|
320
|
-
|
|
321
|
-
const segmentProps = createMemo(() => {
|
|
374
|
+
const segmentProps = createMemo<Record<string, unknown>>(() => {
|
|
322
375
|
const seg = segment();
|
|
323
|
-
const type = seg.type;
|
|
324
376
|
const p = getProps();
|
|
325
377
|
|
|
326
|
-
//
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
378
|
+
// spinbuttons cannot be focused with VoiceOver on iOS.
|
|
379
|
+
const touchPropOverrides =
|
|
380
|
+
isIOS() || seg.type === "timeZoneName"
|
|
381
|
+
? {
|
|
382
|
+
role: "textbox",
|
|
383
|
+
"aria-valuemax": null,
|
|
384
|
+
"aria-valuemin": null,
|
|
385
|
+
"aria-valuetext": null,
|
|
386
|
+
"aria-valuenow": null,
|
|
387
|
+
}
|
|
388
|
+
: {};
|
|
389
|
+
|
|
390
|
+
// Only apply aria-describedby to the first segment, unless the field is invalid.
|
|
391
|
+
let ariaDescribedBy = hd?.ariaDescribedBy?.();
|
|
392
|
+
const firstEditable = state.segments().find((s) => s.isEditable);
|
|
393
|
+
if (firstEditable && firstEditable.type !== seg.type && !state.isInvalid()) {
|
|
394
|
+
ariaDescribedBy = undefined;
|
|
395
|
+
}
|
|
396
|
+
// Allow an explicitly passed describedby (e.g. from a datepicker) to compose.
|
|
397
|
+
ariaDescribedBy = [p["aria-describedby"], ariaDescribedBy].filter(Boolean).join(" ") || undefined;
|
|
398
|
+
|
|
399
|
+
const isEditable = !state.isDisabled() && !state.isReadOnly() && seg.isEditable;
|
|
400
|
+
// Prepend the label passed from the field to each segment name.
|
|
401
|
+
const name = seg.type === "literal" ? "" : displayNames().of(seg.type);
|
|
402
|
+
const ariaLabel = hd?.ariaLabel;
|
|
403
|
+
const ariaLabelledBy = hd?.ariaLabelledBy;
|
|
404
|
+
// Upstream generates a separate id inside useLabels and lets react-aria's
|
|
405
|
+
// mergeProps collapse it with the segment's own id via mergeIds' SSR ref
|
|
406
|
+
// registry. Solid has no such registry, so we thread the segment id straight
|
|
407
|
+
// into createLabels: the self-reference token then IS the element id, which
|
|
408
|
+
// is the exact observable result mergeIds produces ("month, <field label>").
|
|
409
|
+
const labelProps = createLabels({
|
|
410
|
+
id: segmentId,
|
|
411
|
+
"aria-label": `${name}${ariaLabel ? `, ${ariaLabel}` : ""}${ariaLabelledBy ? ", " : ""}`,
|
|
412
|
+
"aria-labelledby": ariaLabelledBy,
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
// Literal segments should not be visible to screen readers.
|
|
416
|
+
if (seg.type === "literal") {
|
|
417
|
+
return { "aria-hidden": true };
|
|
331
418
|
}
|
|
332
419
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
"
|
|
343
|
-
|
|
344
|
-
"
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
"
|
|
353
|
-
"
|
|
354
|
-
"
|
|
355
|
-
"
|
|
356
|
-
"data-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
"
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
setIsFocusVisible(false);
|
|
420
|
+
// Kebab-case CSS property names: this style object is merged via mergeProps
|
|
421
|
+
// and applied by Solid's runtime `style()` spread helper, which calls
|
|
422
|
+
// `el.style.setProperty(key, value)` with the raw key. setProperty ignores
|
|
423
|
+
// camelCase names (`unicodeBidi`, `caretColor`) but honors real CSS property
|
|
424
|
+
// names, so upstream's React CSSProperties must be written kebab here to
|
|
425
|
+
// actually take effect (React auto-kebabs camelCase; a Solid spread does
|
|
426
|
+
// not). `direction` matched already precisely because it is single-word.
|
|
427
|
+
const segmentStyle: Record<string, string> = { "caret-color": "transparent" };
|
|
428
|
+
if (direction() === "rtl") {
|
|
429
|
+
segmentStyle["unicode-bidi"] = "embed";
|
|
430
|
+
const format = (resolvedOptions as unknown as Record<string, unknown>)[seg.type];
|
|
431
|
+
if (format === "numeric" || format === "2-digit") {
|
|
432
|
+
segmentStyle.direction = "ltr";
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
return mergeProps(spinButton.spinButtonProps as Record<string, unknown>, labelProps as Record<string, unknown>, {
|
|
437
|
+
id: segmentId,
|
|
438
|
+
...touchPropOverrides,
|
|
439
|
+
"aria-invalid": state.isInvalid() ? "true" : undefined,
|
|
440
|
+
"aria-describedby": ariaDescribedBy,
|
|
441
|
+
"aria-readonly": state.isReadOnly() || !seg.isEditable ? "true" : undefined,
|
|
442
|
+
"aria-controls": (p["aria-controls"] as string | undefined) || undefined,
|
|
443
|
+
"data-placeholder": seg.isPlaceholder || undefined,
|
|
444
|
+
contentEditable: isEditable,
|
|
445
|
+
suppressContentEditableWarning: isEditable,
|
|
446
|
+
spellCheck: isEditable ? "false" : undefined,
|
|
447
|
+
autoCorrect: isEditable ? "off" : undefined,
|
|
448
|
+
enterKeyHint: isEditable ? "next" : undefined,
|
|
449
|
+
inputMode:
|
|
450
|
+
state.isDisabled() || seg.type === "dayPeriod" || seg.type === "era" || !isEditable
|
|
451
|
+
? undefined
|
|
452
|
+
: "numeric",
|
|
453
|
+
tabIndex: state.isDisabled() ? undefined : 0,
|
|
454
|
+
onKeyDown,
|
|
455
|
+
onFocus,
|
|
456
|
+
style: segmentStyle,
|
|
457
|
+
// Prevent pointer events from reaching the group's press handler, and allow native focus.
|
|
458
|
+
onPointerDown(e: PointerEvent) {
|
|
459
|
+
e.stopPropagation();
|
|
374
460
|
},
|
|
375
|
-
|
|
376
|
-
|
|
461
|
+
onMouseDown(e: MouseEvent) {
|
|
462
|
+
e.stopPropagation();
|
|
377
463
|
},
|
|
378
|
-
};
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
// Text to display
|
|
382
|
-
const text = createMemo(() => {
|
|
383
|
-
const seg = segment();
|
|
384
|
-
return seg.isPlaceholder ? seg.placeholder : seg.text;
|
|
464
|
+
});
|
|
385
465
|
});
|
|
386
466
|
|
|
387
467
|
return {
|
|
388
468
|
get segmentProps() {
|
|
389
469
|
return segmentProps();
|
|
390
470
|
},
|
|
391
|
-
get isFocused() {
|
|
392
|
-
return isFocused();
|
|
393
|
-
},
|
|
394
|
-
get isEditable() {
|
|
395
|
-
return isEditable();
|
|
396
|
-
},
|
|
397
|
-
get isPlaceholder() {
|
|
398
|
-
return segment().isPlaceholder;
|
|
399
|
-
},
|
|
400
|
-
get text() {
|
|
401
|
-
return text();
|
|
402
|
-
},
|
|
403
|
-
get isHovered() {
|
|
404
|
-
return isHovered();
|
|
405
|
-
},
|
|
406
|
-
get isFocusVisible() {
|
|
407
|
-
return isFocusVisible();
|
|
408
|
-
},
|
|
409
471
|
};
|
|
410
472
|
}
|
|
411
|
-
|
|
412
|
-
const SEGMENT_LABELS: Record<string, Record<Exclude<DateSegmentType, "literal">, string>> = {
|
|
413
|
-
en: {
|
|
414
|
-
year: "Year",
|
|
415
|
-
month: "Month",
|
|
416
|
-
day: "Day",
|
|
417
|
-
hour: "Hour",
|
|
418
|
-
minute: "Minute",
|
|
419
|
-
second: "Second",
|
|
420
|
-
dayPeriod: "AM/PM",
|
|
421
|
-
era: "Era",
|
|
422
|
-
timeZoneName: "Time zone",
|
|
423
|
-
},
|
|
424
|
-
es: {
|
|
425
|
-
year: "Año",
|
|
426
|
-
month: "Mes",
|
|
427
|
-
day: "Día",
|
|
428
|
-
hour: "Hora",
|
|
429
|
-
minute: "Minuto",
|
|
430
|
-
second: "Segundo",
|
|
431
|
-
dayPeriod: "AM/PM",
|
|
432
|
-
era: "Era",
|
|
433
|
-
timeZoneName: "Zona horaria",
|
|
434
|
-
},
|
|
435
|
-
};
|
|
436
|
-
|
|
437
|
-
function getSegmentLabel(type: DateSegmentType, locale: string): string {
|
|
438
|
-
if (type === "literal") return "";
|
|
439
|
-
|
|
440
|
-
const language = locale.toLowerCase().split("-")[0] ?? "en";
|
|
441
|
-
const labels = SEGMENT_LABELS[language] ?? SEGMENT_LABELS.en;
|
|
442
|
-
return labels[type];
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
function normalizeDigit(input: string): string | null {
|
|
446
|
-
if (/^[0-9]$/.test(input)) {
|
|
447
|
-
return input;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
const codePoint = input.codePointAt(0);
|
|
451
|
-
if (codePoint == null) return null;
|
|
452
|
-
|
|
453
|
-
// Full-width digits 0-9
|
|
454
|
-
if (codePoint >= 0xff10 && codePoint <= 0xff19) {
|
|
455
|
-
return String(codePoint - 0xff10);
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
return null;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
function extractNormalizedDigits(value: string): string[] {
|
|
462
|
-
const digits: string[] = [];
|
|
463
|
-
for (const char of value) {
|
|
464
|
-
const normalized = normalizeDigit(char);
|
|
465
|
-
if (normalized) {
|
|
466
|
-
digits.push(normalized);
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
return digits;
|
|
470
|
-
}
|