@proyecto-viviana/solidaria 0.4.2 → 0.6.0-rc.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-APACHE-2.0 +201 -0
- package/NOTICE +91 -0
- package/dist/_chunk/DragManager.js +71 -25
- package/dist/_chunk/DragManager.js.map +1 -1
- package/dist/_chunk/DragManager.jsx +71 -25
- package/dist/_chunk/DragManager.jsx.map +1 -1
- package/dist/_chunk/FocusScope.js +281 -66
- package/dist/_chunk/FocusScope.js.map +1 -1
- package/dist/_chunk/FocusScope.jsx +274 -55
- package/dist/_chunk/FocusScope.jsx.map +1 -1
- package/dist/_chunk/actiongroup.js +43 -19
- package/dist/_chunk/actiongroup.js.map +1 -1
- package/dist/_chunk/actiongroup.jsx +43 -19
- package/dist/_chunk/actiongroup.jsx.map +1 -1
- package/dist/_chunk/announce.js +19 -6
- package/dist/_chunk/announce.js.map +1 -1
- package/dist/_chunk/announce.jsx +19 -6
- package/dist/_chunk/announce.jsx.map +1 -1
- package/dist/_chunk/ariaHideOutside.js +212 -10
- package/dist/_chunk/ariaHideOutside.js.map +1 -1
- package/dist/_chunk/ariaHideOutside.jsx +212 -10
- package/dist/_chunk/ariaHideOutside.jsx.map +1 -1
- package/dist/_chunk/autocomplete.js +26 -7
- package/dist/_chunk/autocomplete.js.map +1 -1
- package/dist/_chunk/autocomplete.jsx +26 -7
- package/dist/_chunk/autocomplete.jsx.map +1 -1
- package/dist/_chunk/breadcrumbs.js +17 -2
- package/dist/_chunk/breadcrumbs.js.map +1 -1
- package/dist/_chunk/breadcrumbs.jsx +17 -2
- package/dist/_chunk/breadcrumbs.jsx.map +1 -1
- package/dist/_chunk/button.js +53 -20
- package/dist/_chunk/button.js.map +1 -1
- package/dist/_chunk/button.jsx +53 -20
- package/dist/_chunk/button.jsx.map +1 -1
- package/dist/_chunk/calendar.js +341 -56
- package/dist/_chunk/calendar.js.map +1 -1
- package/dist/_chunk/calendar.jsx +341 -56
- package/dist/_chunk/calendar.jsx.map +1 -1
- package/dist/_chunk/checkbox.js +69 -26
- package/dist/_chunk/checkbox.js.map +1 -1
- package/dist/_chunk/checkbox.jsx +69 -26
- package/dist/_chunk/checkbox.jsx.map +1 -1
- package/dist/_chunk/color.js +307 -48
- package/dist/_chunk/color.js.map +1 -1
- package/dist/_chunk/color.jsx +307 -48
- package/dist/_chunk/color.jsx.map +1 -1
- package/dist/_chunk/combobox.js +193 -103
- package/dist/_chunk/combobox.js.map +1 -1
- package/dist/_chunk/combobox.jsx +193 -103
- package/dist/_chunk/combobox.jsx.map +1 -1
- package/dist/_chunk/constants.js +12 -0
- package/dist/_chunk/constants.js.map +1 -1
- package/dist/_chunk/constants.jsx +12 -0
- package/dist/_chunk/constants.jsx.map +1 -1
- package/dist/_chunk/createCollator.js +12 -0
- package/dist/_chunk/createCollator.js.map +1 -1
- package/dist/_chunk/createCollator.jsx +12 -0
- package/dist/_chunk/createCollator.jsx.map +1 -1
- package/dist/_chunk/createCollectionRowInteraction.js +50 -13
- package/dist/_chunk/createCollectionRowInteraction.js.map +1 -1
- package/dist/_chunk/createCollectionRowInteraction.jsx +50 -13
- package/dist/_chunk/createCollectionRowInteraction.jsx.map +1 -1
- package/dist/_chunk/createField.js +35 -25
- package/dist/_chunk/createField.js.map +1 -1
- package/dist/_chunk/createField.jsx +35 -25
- package/dist/_chunk/createField.jsx.map +1 -1
- package/dist/_chunk/createFocus.js +18 -5
- package/dist/_chunk/createFocus.js.map +1 -1
- package/dist/_chunk/createFocus.jsx +18 -5
- package/dist/_chunk/createFocus.jsx.map +1 -1
- package/dist/_chunk/createFocusRing.js +16 -7
- package/dist/_chunk/createFocusRing.js.map +1 -1
- package/dist/_chunk/createFocusRing.jsx +16 -7
- package/dist/_chunk/createFocusRing.jsx.map +1 -1
- package/dist/_chunk/createFocusWithin.js +16 -4
- package/dist/_chunk/createFocusWithin.js.map +1 -1
- package/dist/_chunk/createFocusWithin.jsx +16 -4
- package/dist/_chunk/createFocusWithin.jsx.map +1 -1
- package/dist/_chunk/createFocusable.js +39 -53
- package/dist/_chunk/createFocusable.js.map +1 -1
- package/dist/_chunk/createFocusable.jsx +39 -53
- package/dist/_chunk/createFocusable.jsx.map +1 -1
- package/dist/_chunk/createFormReset.js +24 -12
- package/dist/_chunk/createFormReset.js.map +1 -1
- package/dist/_chunk/createFormReset.jsx +24 -12
- package/dist/_chunk/createFormReset.jsx.map +1 -1
- package/dist/_chunk/createFormValidation.js +41 -17
- package/dist/_chunk/createFormValidation.js.map +1 -1
- package/dist/_chunk/createFormValidation.jsx +41 -17
- package/dist/_chunk/createFormValidation.jsx.map +1 -1
- package/dist/_chunk/createHover.js +56 -42
- package/dist/_chunk/createHover.js.map +1 -1
- package/dist/_chunk/createHover.jsx +56 -42
- package/dist/_chunk/createHover.jsx.map +1 -1
- package/dist/_chunk/createKeyboard.js +205 -0
- package/dist/_chunk/createKeyboard.js.map +1 -0
- package/dist/_chunk/createKeyboard.jsx +205 -0
- package/dist/_chunk/createKeyboard.jsx.map +1 -0
- package/dist/_chunk/createLabel.js +17 -4
- package/dist/_chunk/createLabel.js.map +1 -1
- package/dist/_chunk/createLabel.jsx +17 -4
- package/dist/_chunk/createLabel.jsx.map +1 -1
- package/dist/_chunk/createLabels.js +14 -2
- package/dist/_chunk/createLabels.js.map +1 -1
- package/dist/_chunk/createLabels.jsx +14 -2
- package/dist/_chunk/createLabels.jsx.map +1 -1
- package/dist/_chunk/createLandmark.js +19 -3
- package/dist/_chunk/createLandmark.js.map +1 -1
- package/dist/_chunk/createLandmark.jsx +19 -3
- package/dist/_chunk/createLandmark.jsx.map +1 -1
- package/dist/_chunk/createLongPress.js +105 -0
- package/dist/_chunk/createLongPress.js.map +1 -0
- package/dist/_chunk/createLongPress.jsx +105 -0
- package/dist/_chunk/createLongPress.jsx.map +1 -0
- package/dist/_chunk/createOverlay.js +220 -111
- package/dist/_chunk/createOverlay.js.map +1 -1
- package/dist/_chunk/createOverlay.jsx +220 -111
- package/dist/_chunk/createOverlay.jsx.map +1 -1
- package/dist/_chunk/createOverlayTrigger.js +58 -0
- package/dist/_chunk/createOverlayTrigger.js.map +1 -0
- package/dist/_chunk/createOverlayTrigger.jsx +58 -0
- package/dist/_chunk/createOverlayTrigger.jsx.map +1 -0
- package/dist/_chunk/createPress.js +38 -28
- package/dist/_chunk/createPress.js.map +1 -1
- package/dist/_chunk/createPress.jsx +38 -28
- package/dist/_chunk/createPress.jsx.map +1 -1
- package/dist/_chunk/createProgressBar.js +17 -4
- package/dist/_chunk/createProgressBar.js.map +1 -1
- package/dist/_chunk/createProgressBar.jsx +17 -4
- package/dist/_chunk/createProgressBar.jsx.map +1 -1
- package/dist/_chunk/createSelectableItem.js +58 -20
- package/dist/_chunk/createSelectableItem.js.map +1 -1
- package/dist/_chunk/createSelectableItem.jsx +58 -20
- package/dist/_chunk/createSelectableItem.jsx.map +1 -1
- package/dist/_chunk/createSelectableList.js +776 -0
- package/dist/_chunk/createSelectableList.js.map +1 -0
- package/dist/_chunk/createSelectableList.jsx +776 -0
- package/dist/_chunk/createSelectableList.jsx.map +1 -0
- package/dist/_chunk/createStringFormatter.js +350 -5
- package/dist/_chunk/createStringFormatter.js.map +1 -1
- package/dist/_chunk/createStringFormatter.jsx +350 -5
- package/dist/_chunk/createStringFormatter.jsx.map +1 -1
- package/dist/_chunk/createToggle.js +68 -19
- package/dist/_chunk/createToggle.js.map +1 -1
- package/dist/_chunk/createToggle.jsx +68 -19
- package/dist/_chunk/createToggle.jsx.map +1 -1
- package/dist/_chunk/createTypeSelect.js +15 -3
- package/dist/_chunk/createTypeSelect.js.map +1 -1
- package/dist/_chunk/createTypeSelect.jsx +15 -3
- package/dist/_chunk/createTypeSelect.jsx.map +1 -1
- package/dist/_chunk/{visually-hidden.js → createVisuallyHidden.js} +16 -4
- package/dist/_chunk/createVisuallyHidden.js.map +1 -0
- package/dist/_chunk/{visually-hidden.jsx → createVisuallyHidden.jsx} +16 -4
- package/dist/_chunk/createVisuallyHidden.jsx.map +1 -0
- package/dist/_chunk/datepicker.js +687 -602
- package/dist/_chunk/datepicker.js.map +1 -1
- package/dist/_chunk/datepicker.jsx +687 -602
- package/dist/_chunk/datepicker.jsx.map +1 -1
- package/dist/_chunk/dialog.js +49 -19
- package/dist/_chunk/dialog.js.map +1 -1
- package/dist/_chunk/dialog.jsx +49 -19
- package/dist/_chunk/dialog.jsx.map +1 -1
- package/dist/_chunk/disclosure.js +48 -28
- package/dist/_chunk/disclosure.js.map +1 -1
- package/dist/_chunk/disclosure.jsx +48 -28
- package/dist/_chunk/disclosure.jsx.map +1 -1
- package/dist/_chunk/dnd.js +1340 -1172
- package/dist/_chunk/dnd.js.map +1 -1
- package/dist/_chunk/dnd.jsx +1340 -1172
- package/dist/_chunk/dnd.jsx.map +1 -1
- package/dist/_chunk/dom.js +1200 -0
- package/dist/_chunk/dom.js.map +1 -0
- package/dist/_chunk/dom.jsx +1200 -0
- package/dist/_chunk/dom.jsx.map +1 -0
- package/dist/_chunk/env.js +1 -57
- package/dist/_chunk/env.js.map +1 -1
- package/dist/_chunk/env.jsx +1 -57
- package/dist/_chunk/env.jsx.map +1 -1
- package/dist/_chunk/filterDOMProps.js +32 -7
- package/dist/_chunk/filterDOMProps.js.map +1 -1
- package/dist/_chunk/filterDOMProps.jsx +32 -7
- package/dist/_chunk/filterDOMProps.jsx.map +1 -1
- package/dist/_chunk/focus.js +570 -338
- package/dist/_chunk/focus.js.map +1 -1
- package/dist/_chunk/focus.jsx +570 -338
- package/dist/_chunk/focus.jsx.map +1 -1
- package/dist/_chunk/grid.js +62 -8
- package/dist/_chunk/grid.js.map +1 -1
- package/dist/_chunk/grid.jsx +62 -8
- package/dist/_chunk/grid.jsx.map +1 -1
- package/dist/_chunk/gridlist.js +192 -53
- package/dist/_chunk/gridlist.js.map +1 -1
- package/dist/_chunk/gridlist.jsx +192 -53
- package/dist/_chunk/gridlist.jsx.map +1 -1
- package/dist/_chunk/i18n.js +68 -1
- package/dist/_chunk/i18n.js.map +1 -1
- package/dist/_chunk/i18n.jsx +68 -1
- package/dist/_chunk/i18n.jsx.map +1 -1
- package/dist/_chunk/interactions.js +38 -102
- package/dist/_chunk/interactions.js.map +1 -1
- package/dist/_chunk/interactions.jsx +38 -100
- package/dist/_chunk/interactions.jsx.map +1 -1
- package/dist/_chunk/intl.js +280 -0
- package/dist/_chunk/intl.js.map +1 -0
- package/dist/_chunk/intl.jsx +280 -0
- package/dist/_chunk/intl.jsx.map +1 -0
- package/dist/_chunk/link.js +15 -4
- package/dist/_chunk/link.js.map +1 -1
- package/dist/_chunk/link.jsx +15 -4
- package/dist/_chunk/link.jsx.map +1 -1
- package/dist/_chunk/listbox.js +99 -175
- package/dist/_chunk/listbox.js.map +1 -1
- package/dist/_chunk/listbox.jsx +99 -175
- package/dist/_chunk/listbox.jsx.map +1 -1
- package/dist/_chunk/locale.js +58 -12
- package/dist/_chunk/locale.js.map +1 -1
- package/dist/_chunk/locale.jsx +57 -11
- package/dist/_chunk/locale.jsx.map +1 -1
- package/dist/_chunk/menu.js +298 -57
- package/dist/_chunk/menu.js.map +1 -1
- package/dist/_chunk/menu.jsx +298 -57
- package/dist/_chunk/menu.jsx.map +1 -1
- package/dist/_chunk/mergeProps.js +216 -0
- package/dist/_chunk/mergeProps.js.map +1 -0
- package/dist/_chunk/mergeProps.jsx +216 -0
- package/dist/_chunk/mergeProps.jsx.map +1 -0
- package/dist/_chunk/meter.js +16 -4
- package/dist/_chunk/meter.js.map +1 -1
- package/dist/_chunk/meter.jsx +16 -4
- package/dist/_chunk/meter.jsx.map +1 -1
- package/dist/_chunk/numberfield.js +167 -22
- package/dist/_chunk/numberfield.js.map +1 -1
- package/dist/_chunk/numberfield.jsx +167 -22
- package/dist/_chunk/numberfield.jsx.map +1 -1
- package/dist/_chunk/overlays.js +87 -74
- package/dist/_chunk/overlays.js.map +1 -1
- package/dist/_chunk/overlays.jsx +71 -57
- package/dist/_chunk/overlays.jsx.map +1 -1
- package/dist/_chunk/owner.js +23 -0
- package/dist/_chunk/owner.js.map +1 -0
- package/dist/_chunk/owner.jsx +23 -0
- package/dist/_chunk/owner.jsx.map +1 -0
- package/dist/_chunk/popover.js +180 -42
- package/dist/_chunk/popover.js.map +1 -1
- package/dist/_chunk/popover.jsx +180 -42
- package/dist/_chunk/popover.jsx.map +1 -1
- package/dist/_chunk/radio.js +92 -32
- package/dist/_chunk/radio.js.map +1 -1
- package/dist/_chunk/radio.jsx +92 -32
- package/dist/_chunk/radio.jsx.map +1 -1
- package/dist/_chunk/reactivity.js.map +1 -1
- package/dist/_chunk/reactivity.jsx.map +1 -1
- package/dist/_chunk/refs.js +41 -0
- package/dist/_chunk/refs.js.map +1 -0
- package/dist/_chunk/refs.jsx +41 -0
- package/dist/_chunk/refs.jsx.map +1 -0
- package/dist/_chunk/searchfield.js +69 -3
- package/dist/_chunk/searchfield.js.map +1 -1
- package/dist/_chunk/searchfield.jsx +69 -3
- package/dist/_chunk/searchfield.jsx.map +1 -1
- package/dist/_chunk/select.js +226 -80
- package/dist/_chunk/select.js.map +1 -1
- package/dist/_chunk/select.jsx +162 -70
- package/dist/_chunk/select.jsx.map +1 -1
- package/dist/_chunk/selection.js +20 -638
- package/dist/_chunk/selection.js.map +1 -1
- package/dist/_chunk/selection.jsx +20 -638
- package/dist/_chunk/selection.jsx.map +1 -1
- package/dist/_chunk/separator.js +12 -0
- package/dist/_chunk/separator.js.map +1 -1
- package/dist/_chunk/separator.jsx +12 -0
- package/dist/_chunk/separator.jsx.map +1 -1
- package/dist/_chunk/slider.js +25 -16
- package/dist/_chunk/slider.js.map +1 -1
- package/dist/_chunk/slider.jsx +25 -16
- package/dist/_chunk/slider.jsx.map +1 -1
- package/dist/_chunk/spinbutton.js +52 -42
- package/dist/_chunk/spinbutton.js.map +1 -1
- package/dist/_chunk/spinbutton.jsx +52 -42
- package/dist/_chunk/spinbutton.jsx.map +1 -1
- package/dist/_chunk/steplist.js +14 -1
- package/dist/_chunk/steplist.js.map +1 -1
- package/dist/_chunk/steplist.jsx +14 -1
- package/dist/_chunk/steplist.jsx.map +1 -1
- package/dist/_chunk/switch.js +21 -3
- package/dist/_chunk/switch.js.map +1 -1
- package/dist/_chunk/switch.jsx +21 -3
- package/dist/_chunk/switch.jsx.map +1 -1
- package/dist/_chunk/table.js +666 -88
- package/dist/_chunk/table.js.map +1 -1
- package/dist/_chunk/table.jsx +666 -88
- package/dist/_chunk/table.jsx.map +1 -1
- package/dist/_chunk/tabs.js +115 -17
- package/dist/_chunk/tabs.js.map +1 -1
- package/dist/_chunk/tabs.jsx +115 -17
- package/dist/_chunk/tabs.jsx.map +1 -1
- package/dist/_chunk/tag.js +240 -39
- package/dist/_chunk/tag.js.map +1 -1
- package/dist/_chunk/tag.jsx +240 -39
- package/dist/_chunk/tag.jsx.map +1 -1
- package/dist/_chunk/textfield.js +83 -12
- package/dist/_chunk/textfield.js.map +1 -1
- package/dist/_chunk/textfield.jsx +83 -12
- package/dist/_chunk/textfield.jsx.map +1 -1
- package/dist/_chunk/toast.js +61 -28
- package/dist/_chunk/toast.js.map +1 -1
- package/dist/_chunk/toast.jsx +61 -28
- package/dist/_chunk/toast.jsx.map +1 -1
- package/dist/_chunk/tokenfield.js +567 -0
- package/dist/_chunk/tokenfield.js.map +1 -0
- package/dist/_chunk/tokenfield.jsx +567 -0
- package/dist/_chunk/tokenfield.jsx.map +1 -0
- package/dist/_chunk/toolbar.js +25 -8
- package/dist/_chunk/toolbar.js.map +1 -1
- package/dist/_chunk/toolbar.jsx +25 -8
- package/dist/_chunk/toolbar.jsx.map +1 -1
- package/dist/_chunk/tooltip.js +379 -6
- package/dist/_chunk/tooltip.js.map +1 -1
- package/dist/_chunk/tooltip.jsx +379 -6
- package/dist/_chunk/tooltip.jsx.map +1 -1
- package/dist/_chunk/tree.js +280 -69
- package/dist/_chunk/tree.js.map +1 -1
- package/dist/_chunk/tree.jsx +280 -69
- package/dist/_chunk/tree.jsx.map +1 -1
- package/dist/_chunk/utils.js +192 -150
- package/dist/_chunk/utils.js.map +1 -1
- package/dist/_chunk/utils.jsx +192 -150
- package/dist/_chunk/utils.jsx.map +1 -1
- package/dist/_chunk/virtualFocus.js +54 -0
- package/dist/_chunk/virtualFocus.js.map +1 -0
- package/dist/_chunk/virtualFocus.jsx +54 -0
- package/dist/_chunk/virtualFocus.jsx.map +1 -0
- package/dist/_chunk/virtualizer.js +202 -0
- package/dist/_chunk/virtualizer.js.map +1 -0
- package/dist/_chunk/virtualizer.jsx +202 -0
- package/dist/_chunk/virtualizer.jsx.map +1 -0
- package/dist/actiongroup/createActionGroup.d.ts +2 -1
- package/dist/actiongroup/createActionGroup.d.ts.map +1 -1
- package/dist/autocomplete/createAutocomplete.d.ts +1 -9
- package/dist/autocomplete/createAutocomplete.d.ts.map +1 -1
- package/dist/autocomplete/intl/index.d.ts +13 -0
- package/dist/autocomplete/intl/index.d.ts.map +1 -0
- package/dist/breadcrumbs/createBreadcrumbs.d.ts +3 -1
- package/dist/breadcrumbs/createBreadcrumbs.d.ts.map +1 -1
- package/dist/breadcrumbs/intl/index.d.ts +13 -0
- package/dist/breadcrumbs/intl/index.d.ts.map +1 -0
- package/dist/button/createButton.d.ts.map +1 -1
- package/dist/button/createToggleButton.d.ts.map +1 -1
- package/dist/button/createToggleButtonGroup.d.ts +1 -1
- package/dist/button/createToggleButtonGroup.d.ts.map +1 -1
- package/dist/button/types.d.ts +14 -0
- package/dist/button/types.d.ts.map +1 -1
- package/dist/calendar/createCalendar.d.ts +1 -7
- package/dist/calendar/createCalendar.d.ts.map +1 -1
- package/dist/calendar/createCalendarCell.d.ts +0 -6
- package/dist/calendar/createCalendarCell.d.ts.map +1 -1
- package/dist/calendar/createCalendarGrid.d.ts +1 -7
- package/dist/calendar/createCalendarGrid.d.ts.map +1 -1
- package/dist/calendar/createCalendarMonthPicker.d.ts +0 -8
- package/dist/calendar/createCalendarMonthPicker.d.ts.map +1 -1
- package/dist/calendar/createCalendarYearPicker.d.ts +0 -8
- package/dist/calendar/createCalendarYearPicker.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendar.d.ts +13 -7
- package/dist/calendar/createRangeCalendar.d.ts.map +1 -1
- package/dist/calendar/createRangeCalendarCell.d.ts +2 -6
- package/dist/calendar/createRangeCalendarCell.d.ts.map +1 -1
- package/dist/calendar/intl/index.d.ts.map +1 -1
- package/dist/calendar/utils.d.ts.map +1 -1
- package/dist/checkbox/createCheckbox.d.ts +2 -1
- package/dist/checkbox/createCheckbox.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroup.d.ts +1 -9
- package/dist/checkbox/createCheckboxGroup.d.ts.map +1 -1
- package/dist/checkbox/createCheckboxGroupItem.d.ts +0 -8
- package/dist/checkbox/createCheckboxGroupItem.d.ts.map +1 -1
- package/dist/collections/index.d.ts +1 -1
- package/dist/collections/index.d.ts.map +1 -1
- package/dist/collections/index.js +18 -2
- package/dist/collections/index.js.map +1 -1
- package/dist/collections/index.jsx +18 -2
- package/dist/collections/index.jsx.map +1 -1
- package/dist/color/createColorArea.d.ts +2 -7
- package/dist/color/createColorArea.d.ts.map +1 -1
- package/dist/color/createColorField.d.ts +2 -7
- package/dist/color/createColorField.d.ts.map +1 -1
- package/dist/color/createColorSlider.d.ts +1 -6
- package/dist/color/createColorSlider.d.ts.map +1 -1
- package/dist/color/createColorSwatch.d.ts +1 -6
- package/dist/color/createColorSwatch.d.ts.map +1 -1
- package/dist/color/createColorWheel.d.ts +1 -6
- package/dist/color/createColorWheel.d.ts.map +1 -1
- package/dist/color/intl/index.d.ts.map +1 -1
- package/dist/color/types.d.ts +47 -1
- package/dist/color/types.d.ts.map +1 -1
- package/dist/combobox/createComboBox.d.ts +17 -8
- package/dist/combobox/createComboBox.d.ts.map +1 -1
- package/dist/combobox/intl/generated-locales.d.ts +3 -0
- package/dist/combobox/intl/generated-locales.d.ts.map +1 -1
- package/dist/combobox/intl/index.d.ts +3 -2
- package/dist/combobox/intl/index.d.ts.map +1 -1
- package/dist/datepicker/createDateField.d.ts +0 -10
- package/dist/datepicker/createDateField.d.ts.map +1 -1
- package/dist/datepicker/createDatePicker.d.ts +0 -16
- package/dist/datepicker/createDatePicker.d.ts.map +1 -1
- package/dist/datepicker/createDatePickerGroup.d.ts +1 -1
- package/dist/datepicker/createDatePickerGroup.d.ts.map +1 -1
- package/dist/datepicker/createDateRangePicker.d.ts +0 -21
- package/dist/datepicker/createDateRangePicker.d.ts.map +1 -1
- package/dist/datepicker/createDateSegment.d.ts +0 -9
- package/dist/datepicker/createDateSegment.d.ts.map +1 -1
- package/dist/datepicker/createDisplayNames.d.ts +1 -9
- package/dist/datepicker/createDisplayNames.d.ts.map +1 -1
- package/dist/datepicker/createTimeField.d.ts.map +1 -1
- package/dist/datepicker/intl.d.ts.map +1 -1
- package/dist/dialog/createDialog.d.ts +2 -4
- package/dist/dialog/createDialog.d.ts.map +1 -1
- package/dist/dialog/types.d.ts +14 -0
- package/dist/dialog/types.d.ts.map +1 -1
- package/dist/disclosure/createDisclosure.d.ts +1 -8
- package/dist/disclosure/createDisclosure.d.ts.map +1 -1
- package/dist/disclosure/createDisclosureGroup.d.ts +3 -4
- package/dist/disclosure/createDisclosureGroup.d.ts.map +1 -1
- package/dist/dnd/DragManager.d.ts +1 -16
- package/dist/dnd/DragManager.d.ts.map +1 -1
- package/dist/dnd/DropTargetKeyboardNavigation.d.ts +2 -2
- package/dist/dnd/createDrag.d.ts +1 -7
- package/dist/dnd/createDrag.d.ts.map +1 -1
- package/dist/dnd/createDraggableCollection.d.ts +1 -7
- package/dist/dnd/createDraggableCollection.d.ts.map +1 -1
- package/dist/dnd/createDraggableItem.d.ts +2 -7
- package/dist/dnd/createDraggableItem.d.ts.map +1 -1
- package/dist/dnd/createDrop.d.ts +1 -7
- package/dist/dnd/createDrop.d.ts.map +1 -1
- package/dist/dnd/createDropIndicator.d.ts +27 -0
- package/dist/dnd/createDropIndicator.d.ts.map +1 -0
- package/dist/dnd/createDroppableCollection.d.ts +6 -8
- package/dist/dnd/createDroppableCollection.d.ts.map +1 -1
- package/dist/dnd/createDroppableItem.d.ts +12 -10
- package/dist/dnd/createDroppableItem.d.ts.map +1 -1
- package/dist/dnd/index.d.ts +3 -1
- package/dist/dnd/index.d.ts.map +1 -1
- package/dist/dnd/index.js +2 -2
- package/dist/dnd/index.jsx +2 -2
- package/dist/dnd/intl/index.d.ts +6 -4
- package/dist/dnd/intl/index.d.ts.map +1 -1
- package/dist/dnd/types.d.ts +20 -1
- package/dist/dnd/types.d.ts.map +1 -1
- package/dist/dnd/utils.d.ts +4 -0
- package/dist/dnd/utils.d.ts.map +1 -1
- package/dist/focus/FocusScope.d.ts +9 -5
- package/dist/focus/FocusScope.d.ts.map +1 -1
- package/dist/focus/createAutoFocus.d.ts +3 -0
- package/dist/focus/createAutoFocus.d.ts.map +1 -1
- package/dist/focus/createFocusRestore.d.ts +3 -0
- package/dist/focus/createFocusRestore.d.ts.map +1 -1
- package/dist/focus/createHasTabbableChild.d.ts +13 -0
- package/dist/focus/createHasTabbableChild.d.ts.map +1 -0
- package/dist/focus/createVirtualFocus.d.ts +4 -1
- package/dist/focus/createVirtualFocus.d.ts.map +1 -1
- package/dist/focus/index.js +3 -2
- package/dist/focus/index.jsx +3 -2
- package/dist/focus/virtualFocus.d.ts +1 -1
- package/dist/form/createFormReset.d.ts +1 -7
- package/dist/form/createFormReset.d.ts.map +1 -1
- package/dist/form/createFormValidation.d.ts +1 -9
- package/dist/form/createFormValidation.d.ts.map +1 -1
- package/dist/grid/GridKeyboardDelegate.d.ts.map +1 -1
- package/dist/grid/createGrid.d.ts +1 -5
- package/dist/grid/createGrid.d.ts.map +1 -1
- package/dist/grid/createGridCell.d.ts +1 -5
- package/dist/grid/createGridCell.d.ts.map +1 -1
- package/dist/grid/createGridRow.d.ts +1 -5
- package/dist/grid/createGridRow.d.ts.map +1 -1
- package/dist/grid/index.d.ts +2 -2
- package/dist/grid/intl/index.d.ts +18 -0
- package/dist/grid/intl/index.d.ts.map +1 -0
- package/dist/grid/types.d.ts +25 -2
- package/dist/grid/types.d.ts.map +1 -1
- package/dist/gridlist/createGridList.d.ts +3 -5
- package/dist/gridlist/createGridList.d.ts.map +1 -1
- package/dist/gridlist/createGridListItem.d.ts +1 -5
- package/dist/gridlist/createGridListItem.d.ts.map +1 -1
- package/dist/gridlist/createGridListSection.d.ts +0 -4
- package/dist/gridlist/createGridListSection.d.ts.map +1 -1
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts +1 -5
- package/dist/gridlist/createGridListSelectionCheckbox.d.ts.map +1 -1
- package/dist/gridlist/intl/index.d.ts +14 -0
- package/dist/gridlist/intl/index.d.ts.map +1 -0
- package/dist/gridlist/types.d.ts +56 -2
- package/dist/gridlist/types.d.ts.map +1 -1
- package/dist/i18n/compileIcu.d.ts +24 -0
- package/dist/i18n/compileIcu.d.ts.map +1 -0
- package/dist/i18n/createCollator.d.ts +0 -7
- package/dist/i18n/createCollator.d.ts.map +1 -1
- package/dist/i18n/createDateFormatter.d.ts +0 -7
- package/dist/i18n/createDateFormatter.d.ts.map +1 -1
- package/dist/i18n/createFilter.d.ts +0 -7
- package/dist/i18n/createFilter.d.ts.map +1 -1
- package/dist/i18n/createListFormatter.d.ts +9 -0
- package/dist/i18n/createListFormatter.d.ts.map +1 -0
- package/dist/i18n/createNumberFormatter.d.ts +0 -7
- package/dist/i18n/createNumberFormatter.d.ts.map +1 -1
- package/dist/i18n/createStringFormatter.d.ts +14 -4
- package/dist/i18n/createStringFormatter.d.ts.map +1 -1
- package/dist/i18n/index.d.ts +1 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +2 -2
- package/dist/i18n/index.jsx +2 -2
- package/dist/i18n/locale.d.ts +2 -8
- package/dist/i18n/locale.d.ts.map +1 -1
- package/dist/i18n/utils.d.ts +0 -7
- package/dist/i18n/utils.d.ts.map +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -21
- package/dist/index.jsx +27 -21
- package/dist/interactions/FocusableProvider.d.ts +3 -2
- package/dist/interactions/FocusableProvider.d.ts.map +1 -1
- package/dist/interactions/PressEvent.d.ts +2 -1
- package/dist/interactions/PressEvent.d.ts.map +1 -1
- package/dist/interactions/createContextMenu.d.ts +24 -0
- package/dist/interactions/createContextMenu.d.ts.map +1 -0
- package/dist/interactions/createFocus.d.ts +3 -2
- package/dist/interactions/createFocus.d.ts.map +1 -1
- package/dist/interactions/createFocusRing.d.ts +2 -1
- package/dist/interactions/createFocusRing.d.ts.map +1 -1
- package/dist/interactions/createFocusWithin.d.ts +1 -6
- package/dist/interactions/createFocusWithin.d.ts.map +1 -1
- package/dist/interactions/createFocusable.d.ts +2 -6
- package/dist/interactions/createFocusable.d.ts.map +1 -1
- package/dist/interactions/createHover.d.ts +3 -10
- package/dist/interactions/createHover.d.ts.map +1 -1
- package/dist/interactions/createInteractionModality.d.ts +12 -10
- package/dist/interactions/createInteractionModality.d.ts.map +1 -1
- package/dist/interactions/createKeyboard.d.ts +12 -3
- package/dist/interactions/createKeyboard.d.ts.map +1 -1
- package/dist/interactions/createKeyboardShortcutHandler.d.ts +24 -0
- package/dist/interactions/createKeyboardShortcutHandler.d.ts.map +1 -0
- package/dist/interactions/createLongPress.d.ts +4 -7
- package/dist/interactions/createLongPress.d.ts.map +1 -1
- package/dist/interactions/createMove.d.ts +1 -6
- package/dist/interactions/createMove.d.ts.map +1 -1
- package/dist/interactions/createPress.d.ts +2 -7
- package/dist/interactions/createPress.d.ts.map +1 -1
- package/dist/interactions/index.d.ts +1 -1
- package/dist/interactions/index.d.ts.map +1 -1
- package/dist/interactions/index.js +5 -3
- package/dist/interactions/index.jsx +5 -3
- package/dist/label/createField.d.ts +7 -1
- package/dist/label/createField.d.ts.map +1 -1
- package/dist/label/createLabel.d.ts +1 -1
- package/dist/label/createLabel.d.ts.map +1 -1
- package/dist/label/createLabels.d.ts +0 -7
- package/dist/label/createLabels.d.ts.map +1 -1
- package/dist/landmark/createLandmark.d.ts +4 -1
- package/dist/landmark/createLandmark.d.ts.map +1 -1
- package/dist/link/createLink.d.ts +1 -1
- package/dist/link/createLink.d.ts.map +1 -1
- package/dist/listbox/createListBox.d.ts +8 -7
- 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/live-announcer/announce.d.ts +2 -13
- package/dist/live-announcer/announce.d.ts.map +1 -1
- package/dist/menu/createMenu.d.ts +3 -7
- package/dist/menu/createMenu.d.ts.map +1 -1
- package/dist/menu/createMenuItem.d.ts +2 -1
- package/dist/menu/createMenuItem.d.ts.map +1 -1
- package/dist/menu/createMenuTrigger.d.ts +24 -20
- package/dist/menu/createMenuTrigger.d.ts.map +1 -1
- package/dist/menu/index.d.ts +1 -1
- package/dist/menu/index.d.ts.map +1 -1
- package/dist/menu/intl/index.d.ts +4 -0
- package/dist/menu/intl/index.d.ts.map +1 -0
- package/dist/meter/createMeter.d.ts +2 -1
- package/dist/meter/createMeter.d.ts.map +1 -1
- package/dist/numberfield/createNumberField.d.ts +29 -6
- package/dist/numberfield/createNumberField.d.ts.map +1 -1
- package/dist/overlays/ariaHideOutside.d.ts +0 -4
- package/dist/overlays/ariaHideOutside.d.ts.map +1 -1
- package/dist/overlays/createInteractOutside.d.ts +2 -5
- package/dist/overlays/createInteractOutside.d.ts.map +1 -1
- package/dist/overlays/createModal.d.ts +3 -6
- package/dist/overlays/createModal.d.ts.map +1 -1
- package/dist/overlays/createOverlay.d.ts +1 -5
- package/dist/overlays/createOverlay.d.ts.map +1 -1
- package/dist/overlays/createOverlayTrigger.d.ts +2 -6
- package/dist/overlays/createOverlayTrigger.d.ts.map +1 -1
- package/dist/overlays/createPreventScroll.d.ts +0 -4
- package/dist/overlays/createPreventScroll.d.ts.map +1 -1
- package/dist/overlays/index.d.ts +1 -0
- package/dist/overlays/index.d.ts.map +1 -1
- package/dist/overlays/index.js +3 -2
- package/dist/overlays/index.jsx +3 -2
- package/dist/overlays/intl/index.d.ts +13 -0
- package/dist/overlays/intl/index.d.ts.map +1 -0
- package/dist/popover/calculatePosition.d.ts +1 -1
- package/dist/popover/calculatePosition.d.ts.map +1 -1
- package/dist/popover/createOverlayPosition.d.ts +1 -7
- package/dist/popover/createOverlayPosition.d.ts.map +1 -1
- package/dist/popover/createPopover.d.ts +6 -7
- package/dist/popover/createPopover.d.ts.map +1 -1
- package/dist/progress/createProgressBar.d.ts +2 -10
- package/dist/progress/createProgressBar.d.ts.map +1 -1
- package/dist/radio/createRadio.d.ts +8 -1
- package/dist/radio/createRadio.d.ts.map +1 -1
- package/dist/radio/createRadioGroup.d.ts +1 -9
- package/dist/radio/createRadioGroup.d.ts.map +1 -1
- package/dist/searchfield/createSearchField.d.ts +1 -1
- package/dist/searchfield/createSearchField.d.ts.map +1 -1
- package/dist/searchfield/intl/index.d.ts +13 -0
- package/dist/searchfield/intl/index.d.ts.map +1 -0
- package/dist/select/createHiddenSelect.d.ts +3 -10
- package/dist/select/createHiddenSelect.d.ts.map +1 -1
- package/dist/select/createSelect.d.ts +10 -6
- package/dist/select/createSelect.d.ts.map +1 -1
- package/dist/selection/DOMLayoutDelegate.d.ts.map +1 -1
- package/dist/selection/ListKeyboardDelegate.d.ts +2 -1
- package/dist/selection/ListKeyboardDelegate.d.ts.map +1 -1
- package/dist/selection/constants.d.ts.map +1 -1
- package/dist/selection/createCollectionRowInteraction.d.ts +12 -1
- package/dist/selection/createCollectionRowInteraction.d.ts.map +1 -1
- package/dist/selection/createScrollIntoViewOnFocus.d.ts +0 -11
- package/dist/selection/createScrollIntoViewOnFocus.d.ts.map +1 -1
- package/dist/selection/createSelectableCollection.d.ts +1 -23
- package/dist/selection/createSelectableCollection.d.ts.map +1 -1
- package/dist/selection/createSelectableItem.d.ts +2 -29
- package/dist/selection/createSelectableItem.d.ts.map +1 -1
- package/dist/selection/createSelectableList.d.ts +4 -17
- package/dist/selection/createSelectableList.d.ts.map +1 -1
- package/dist/selection/createTypeSelect.d.ts +2 -8
- package/dist/selection/createTypeSelect.d.ts.map +1 -1
- package/dist/selection/index.js +3 -2
- package/dist/selection/index.jsx +3 -2
- package/dist/selection/selectItem.d.ts.map +1 -1
- package/dist/selection/utils.d.ts +1 -1
- package/dist/selection/utils.d.ts.map +1 -1
- package/dist/separator/createSeparator.d.ts +3 -1
- package/dist/separator/createSeparator.d.ts.map +1 -1
- package/dist/slider/createSlider.d.ts +1 -6
- package/dist/slider/createSlider.d.ts.map +1 -1
- package/dist/spinbutton/createSpinButton.d.ts +0 -9
- package/dist/spinbutton/createSpinButton.d.ts.map +1 -1
- package/dist/spinbutton/index.d.ts +2 -2
- package/dist/spinbutton/index.d.ts.map +1 -1
- package/dist/spinbutton/intl.d.ts.map +1 -1
- package/dist/ssr/index.d.ts +3 -9
- package/dist/ssr/index.d.ts.map +1 -1
- package/dist/ssr/index.js +47 -26
- package/dist/ssr/index.js.map +1 -1
- package/dist/ssr/index.jsx +47 -26
- package/dist/ssr/index.jsx.map +1 -1
- package/dist/steplist/createStepList.d.ts +1 -1
- package/dist/steplist/createStepList.d.ts.map +1 -1
- package/dist/switch/createSwitch.d.ts +2 -1
- package/dist/switch/createSwitch.d.ts.map +1 -1
- package/dist/table/createTable.d.ts +1 -5
- package/dist/table/createTable.d.ts.map +1 -1
- package/dist/table/createTableCell.d.ts +1 -5
- package/dist/table/createTableCell.d.ts.map +1 -1
- package/dist/table/createTableColumnHeader.d.ts +1 -5
- package/dist/table/createTableColumnHeader.d.ts.map +1 -1
- package/dist/table/createTableColumnResize.d.ts +2 -8
- package/dist/table/createTableColumnResize.d.ts.map +1 -1
- package/dist/table/createTableHeaderRow.d.ts +1 -5
- package/dist/table/createTableHeaderRow.d.ts.map +1 -1
- package/dist/table/createTableRow.d.ts +1 -5
- package/dist/table/createTableRow.d.ts.map +1 -1
- package/dist/table/createTableRowGroup.d.ts +1 -5
- package/dist/table/createTableRowGroup.d.ts.map +1 -1
- package/dist/table/createTableSelectAllCheckbox.d.ts +1 -5
- package/dist/table/createTableSelectAllCheckbox.d.ts.map +1 -1
- package/dist/table/createTableSelectionCheckbox.d.ts +1 -5
- package/dist/table/createTableSelectionCheckbox.d.ts.map +1 -1
- package/dist/table/index.d.ts +2 -2
- package/dist/table/intl/index.d.ts +23 -0
- package/dist/table/intl/index.d.ts.map +1 -0
- package/dist/table/types.d.ts +44 -2
- package/dist/table/types.d.ts.map +1 -1
- package/dist/table/utils.d.ts.map +1 -1
- package/dist/tabs/createTabs.d.ts +5 -9
- package/dist/tabs/createTabs.d.ts.map +1 -1
- package/dist/tag/createTag.d.ts +4 -8
- package/dist/tag/createTag.d.ts.map +1 -1
- package/dist/tag/createTagGroup.d.ts +0 -9
- package/dist/tag/createTagGroup.d.ts.map +1 -1
- package/dist/tag/intl/index.d.ts +14 -0
- package/dist/tag/intl/index.d.ts.map +1 -0
- package/dist/textfield/createTextField.d.ts +6 -8
- package/dist/textfield/createTextField.d.ts.map +1 -1
- package/dist/toast/createToast.d.ts +1 -8
- package/dist/toast/createToast.d.ts.map +1 -1
- package/dist/toast/createToastRegion.d.ts +7 -18
- package/dist/toast/createToastRegion.d.ts.map +1 -1
- package/dist/toast/intl/index.d.ts +14 -0
- package/dist/toast/intl/index.d.ts.map +1 -0
- package/dist/toggle/createToggle.d.ts +8 -1
- package/dist/toggle/createToggle.d.ts.map +1 -1
- package/dist/tokenfield/createToken.d.ts +15 -0
- package/dist/tokenfield/createToken.d.ts.map +1 -0
- package/dist/tokenfield/createTokenField.d.ts +52 -0
- package/dist/tokenfield/createTokenField.d.ts.map +1 -0
- package/dist/tokenfield/index.d.ts +3 -0
- package/dist/tokenfield/index.d.ts.map +1 -0
- package/dist/tokenfield/index.js +2 -0
- package/dist/tokenfield/index.jsx +2 -0
- package/dist/toolbar/createToolbar.d.ts +1 -1
- package/dist/toolbar/createToolbar.d.ts.map +1 -1
- package/dist/tooltip/createPreviewTrigger.d.ts +23 -0
- package/dist/tooltip/createPreviewTrigger.d.ts.map +1 -0
- package/dist/tooltip/createSafeArea.d.ts +20 -0
- package/dist/tooltip/createSafeArea.d.ts.map +1 -0
- package/dist/tooltip/createTooltip.d.ts +1 -1
- package/dist/tooltip/createTooltip.d.ts.map +1 -1
- package/dist/tooltip/createTooltipTrigger.d.ts +1 -9
- package/dist/tooltip/createTooltipTrigger.d.ts.map +1 -1
- package/dist/tooltip/index.d.ts +2 -0
- package/dist/tooltip/index.d.ts.map +1 -1
- package/dist/tooltip/index.js +2 -2
- package/dist/tooltip/index.jsx +2 -2
- package/dist/tooltip/intl/index.d.ts +4 -0
- package/dist/tooltip/intl/index.d.ts.map +1 -0
- package/dist/tree/createTree.d.ts +1 -5
- package/dist/tree/createTree.d.ts.map +1 -1
- package/dist/tree/createTreeItem.d.ts +1 -5
- package/dist/tree/createTreeItem.d.ts.map +1 -1
- package/dist/tree/createTreeSelectionCheckbox.d.ts +1 -5
- package/dist/tree/createTreeSelectionCheckbox.d.ts.map +1 -1
- package/dist/tree/intl/index.d.ts +14 -0
- package/dist/tree/intl/index.d.ts.map +1 -0
- package/dist/tree/types.d.ts +35 -2
- package/dist/tree/types.d.ts.map +1 -1
- package/dist/utils/ShadowTreeWalker.d.ts +30 -0
- package/dist/utils/ShadowTreeWalker.d.ts.map +1 -0
- package/dist/utils/animation.d.ts +1 -29
- package/dist/utils/animation.d.ts.map +1 -1
- package/dist/utils/capture.d.ts +14 -0
- package/dist/utils/capture.d.ts.map +1 -0
- package/dist/utils/createDescription.d.ts +1 -25
- package/dist/utils/createDescription.d.ts.map +1 -1
- package/dist/utils/dom.d.ts +45 -11
- package/dist/utils/dom.d.ts.map +1 -1
- package/dist/utils/domAttrs.d.ts +16 -0
- package/dist/utils/domAttrs.d.ts.map +1 -0
- package/dist/utils/env.d.ts +2 -0
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/events.d.ts +0 -4
- package/dist/utils/events.d.ts.map +1 -1
- package/dist/utils/filterDOMProps.d.ts +0 -6
- package/dist/utils/filterDOMProps.d.ts.map +1 -1
- package/dist/utils/focus.d.ts +19 -6
- package/dist/utils/focus.d.ts.map +1 -1
- package/dist/utils/geometry.d.ts +1 -1
- package/dist/utils/geometry.d.ts.map +1 -1
- package/dist/utils/getMetaValue.d.ts +13 -0
- package/dist/utils/getMetaValue.d.ts.map +1 -0
- package/dist/utils/getNonce.d.ts +9 -0
- package/dist/utils/getNonce.d.ts.map +1 -0
- package/dist/utils/globalListeners.d.ts +0 -6
- package/dist/utils/globalListeners.d.ts.map +1 -1
- package/dist/utils/index.d.ts +6 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +7 -4
- package/dist/utils/index.jsx +7 -4
- package/dist/utils/keyboard.d.ts +0 -4
- package/dist/utils/keyboard.d.ts.map +1 -1
- package/dist/utils/mergeProps.d.ts +5 -2
- package/dist/utils/mergeProps.d.ts.map +1 -1
- package/dist/utils/owner.d.ts +14 -0
- package/dist/utils/owner.d.ts.map +1 -0
- package/dist/utils/platform.d.ts +0 -4
- package/dist/utils/platform.d.ts.map +1 -1
- package/dist/utils/reactivity.d.ts +2 -0
- package/dist/utils/reactivity.d.ts.map +1 -1
- package/dist/utils/refs.d.ts +20 -0
- package/dist/utils/refs.d.ts.map +1 -0
- package/dist/utils/runAfterTransition.d.ts +2 -0
- package/dist/utils/runAfterTransition.d.ts.map +1 -0
- package/dist/utils/scrollIntoView.d.ts +0 -4
- package/dist/utils/scrollIntoView.d.ts.map +1 -1
- package/dist/utils/splitProps.d.ts +17 -0
- package/dist/utils/splitProps.d.ts.map +1 -0
- package/dist/utils/textSelection.d.ts +0 -8
- package/dist/utils/textSelection.d.ts.map +1 -1
- package/dist/virtualizer/ScrollView.d.ts +38 -0
- package/dist/virtualizer/ScrollView.d.ts.map +1 -0
- package/dist/virtualizer/index.d.ts +3 -0
- package/dist/virtualizer/index.d.ts.map +1 -0
- package/dist/virtualizer/index.js +2 -0
- package/dist/virtualizer/index.jsx +2 -0
- package/dist/virtualizer/utils.d.ts +10 -0
- package/dist/virtualizer/utils.d.ts.map +1 -0
- package/dist/visually-hidden/createVisuallyHidden.d.ts +2 -9
- package/dist/visually-hidden/createVisuallyHidden.d.ts.map +1 -1
- package/dist/visually-hidden/index.js +1 -1
- package/dist/visually-hidden/index.jsx +1 -1
- package/package.json +30 -11
- package/src/actiongroup/createActionGroup.ts +49 -27
- package/src/autocomplete/createAutocomplete.ts +32 -5
- package/src/autocomplete/intl/ar-AE.json +3 -0
- package/src/autocomplete/intl/bg-BG.json +3 -0
- package/src/autocomplete/intl/cs-CZ.json +3 -0
- package/src/autocomplete/intl/da-DK.json +3 -0
- package/src/autocomplete/intl/de-DE.json +3 -0
- package/src/autocomplete/intl/el-GR.json +3 -0
- package/src/autocomplete/intl/en-US.json +3 -0
- package/src/autocomplete/intl/es-ES.json +3 -0
- package/src/autocomplete/intl/et-EE.json +3 -0
- package/src/autocomplete/intl/fi-FI.json +3 -0
- package/src/autocomplete/intl/fr-FR.json +3 -0
- package/src/autocomplete/intl/he-IL.json +3 -0
- package/src/autocomplete/intl/hr-HR.json +3 -0
- package/src/autocomplete/intl/hu-HU.json +3 -0
- package/src/autocomplete/intl/index.ts +122 -0
- package/src/autocomplete/intl/it-IT.json +3 -0
- package/src/autocomplete/intl/ja-JP.json +3 -0
- package/src/autocomplete/intl/ko-KR.json +3 -0
- package/src/autocomplete/intl/lt-LT.json +3 -0
- package/src/autocomplete/intl/lv-LV.json +3 -0
- package/src/autocomplete/intl/nb-NO.json +3 -0
- package/src/autocomplete/intl/nl-NL.json +3 -0
- package/src/autocomplete/intl/pl-PL.json +3 -0
- package/src/autocomplete/intl/pt-BR.json +3 -0
- package/src/autocomplete/intl/pt-PT.json +3 -0
- package/src/autocomplete/intl/ro-RO.json +3 -0
- package/src/autocomplete/intl/ru-RU.json +3 -0
- package/src/autocomplete/intl/sk-SK.json +3 -0
- package/src/autocomplete/intl/sl-SI.json +3 -0
- package/src/autocomplete/intl/sr-SP.json +3 -0
- package/src/autocomplete/intl/sv-SE.json +3 -0
- package/src/autocomplete/intl/tr-TR.json +3 -0
- package/src/autocomplete/intl/uk-UA.json +3 -0
- package/src/autocomplete/intl/zh-CN.json +3 -0
- package/src/autocomplete/intl/zh-TW.json +3 -0
- package/src/breadcrumbs/createBreadcrumbs.ts +18 -1
- package/src/breadcrumbs/intl/ar-AE.json +3 -0
- package/src/breadcrumbs/intl/bg-BG.json +3 -0
- package/src/breadcrumbs/intl/cs-CZ.json +3 -0
- package/src/breadcrumbs/intl/da-DK.json +3 -0
- package/src/breadcrumbs/intl/de-DE.json +3 -0
- package/src/breadcrumbs/intl/el-GR.json +3 -0
- package/src/breadcrumbs/intl/en-US.json +3 -0
- package/src/breadcrumbs/intl/es-ES.json +3 -0
- package/src/breadcrumbs/intl/et-EE.json +3 -0
- package/src/breadcrumbs/intl/fi-FI.json +3 -0
- package/src/breadcrumbs/intl/fr-FR.json +3 -0
- package/src/breadcrumbs/intl/he-IL.json +3 -0
- package/src/breadcrumbs/intl/hr-HR.json +3 -0
- package/src/breadcrumbs/intl/hu-HU.json +3 -0
- package/src/breadcrumbs/intl/index.ts +122 -0
- package/src/breadcrumbs/intl/it-IT.json +3 -0
- package/src/breadcrumbs/intl/ja-JP.json +3 -0
- package/src/breadcrumbs/intl/ko-KR.json +3 -0
- package/src/breadcrumbs/intl/lt-LT.json +3 -0
- package/src/breadcrumbs/intl/lv-LV.json +3 -0
- package/src/breadcrumbs/intl/nb-NO.json +3 -0
- package/src/breadcrumbs/intl/nl-NL.json +3 -0
- package/src/breadcrumbs/intl/pl-PL.json +3 -0
- package/src/breadcrumbs/intl/pt-BR.json +3 -0
- package/src/breadcrumbs/intl/pt-PT.json +3 -0
- package/src/breadcrumbs/intl/ro-RO.json +3 -0
- package/src/breadcrumbs/intl/ru-RU.json +3 -0
- package/src/breadcrumbs/intl/sk-SK.json +3 -0
- package/src/breadcrumbs/intl/sl-SI.json +3 -0
- package/src/breadcrumbs/intl/sr-SP.json +3 -0
- package/src/breadcrumbs/intl/sv-SE.json +3 -0
- package/src/breadcrumbs/intl/tr-TR.json +3 -0
- package/src/breadcrumbs/intl/uk-UA.json +3 -0
- package/src/breadcrumbs/intl/zh-CN.json +3 -0
- package/src/breadcrumbs/intl/zh-TW.json +3 -0
- package/src/button/createButton.ts +15 -1
- package/src/button/createToggleButton.ts +18 -5
- package/src/button/createToggleButtonGroup.ts +23 -8
- package/src/button/types.ts +16 -0
- package/src/calendar/createCalendar.ts +22 -3
- package/src/calendar/createCalendarCell.ts +104 -15
- package/src/calendar/createCalendarGrid.ts +37 -13
- package/src/calendar/createCalendarMonthPicker.ts +14 -0
- package/src/calendar/createCalendarYearPicker.ts +14 -0
- package/src/calendar/createRangeCalendar.ts +124 -1
- package/src/calendar/createRangeCalendarCell.ts +179 -40
- package/src/calendar/intl/index.ts +37 -0
- package/src/calendar/utils.ts +14 -0
- package/src/checkbox/createCheckbox.ts +32 -17
- package/src/checkbox/createCheckboxGroup.ts +31 -13
- package/src/checkbox/createCheckboxGroupItem.ts +15 -1
- package/src/collections/index.ts +21 -3
- package/src/color/createColorArea.ts +226 -29
- package/src/color/createColorField.ts +98 -22
- package/src/color/createColorSlider.ts +24 -3
- package/src/color/createColorSwatch.ts +18 -1
- package/src/color/createColorWheel.ts +27 -5
- package/src/color/intl/index.ts +35 -0
- package/src/color/types.ts +47 -1
- package/src/combobox/createComboBox.ts +303 -152
- package/src/combobox/intl/generated-locales.ts +38 -1
- package/src/combobox/intl/index.ts +38 -2
- package/src/datepicker/createDateField.ts +38 -22
- package/src/datepicker/createDatePicker.ts +14 -0
- package/src/datepicker/createDatePickerGroup.ts +24 -12
- package/src/datepicker/createDateRangePicker.ts +14 -0
- package/src/datepicker/createDateSegment.ts +110 -46
- package/src/datepicker/createDisplayNames.ts +16 -1
- package/src/datepicker/createTimeField.ts +15 -5
- package/src/datepicker/intl.ts +623 -544
- package/src/dialog/createDialog.ts +57 -30
- package/src/dialog/types.ts +14 -0
- package/src/disclosure/createDisclosure.ts +28 -6
- package/src/disclosure/createDisclosureGroup.ts +3 -4
- package/src/dnd/DragManager.ts +60 -9
- package/src/dnd/DropTargetKeyboardNavigation.ts +8 -6
- package/src/dnd/createDrag.ts +18 -1
- package/src/dnd/createDraggableCollection.ts +96 -32
- package/src/dnd/createDraggableItem.ts +73 -31
- package/src/dnd/createDrop.ts +18 -1
- package/src/dnd/createDropIndicator.ts +92 -0
- package/src/dnd/createDroppableCollection.ts +113 -48
- package/src/dnd/createDroppableItem.ts +161 -13
- package/src/dnd/index.ts +3 -0
- package/src/dnd/intl/index.ts +77 -66
- package/src/dnd/types.ts +20 -1
- package/src/dnd/utils.ts +19 -0
- package/src/focus/FocusScope.tsx +542 -157
- package/src/focus/createAutoFocus.ts +94 -68
- package/src/focus/createFocusRestore.ts +16 -12
- package/src/focus/createHasTabbableChild.ts +78 -0
- package/src/focus/createVirtualFocus.ts +21 -5
- package/src/focus/virtualFocus.ts +1 -1
- package/src/form/createFormReset.ts +40 -17
- package/src/form/createFormValidation.ts +128 -86
- package/src/grid/GridKeyboardDelegate.ts +14 -0
- package/src/grid/createGrid.ts +17 -2
- package/src/grid/createGridCell.ts +17 -2
- package/src/grid/createGridRow.ts +17 -2
- package/src/grid/index.ts +2 -2
- package/src/grid/intl/ar-AE.json +8 -0
- package/src/grid/intl/bg-BG.json +8 -0
- package/src/grid/intl/cs-CZ.json +8 -0
- package/src/grid/intl/da-DK.json +8 -0
- package/src/grid/intl/de-DE.json +8 -0
- package/src/grid/intl/el-GR.json +8 -0
- package/src/grid/intl/en-US.json +8 -0
- package/src/grid/intl/es-ES.json +8 -0
- package/src/grid/intl/et-EE.json +8 -0
- package/src/grid/intl/fi-FI.json +8 -0
- package/src/grid/intl/fr-FR.json +8 -0
- package/src/grid/intl/he-IL.json +8 -0
- package/src/grid/intl/hr-HR.json +8 -0
- package/src/grid/intl/hu-HU.json +8 -0
- package/src/grid/intl/index.ts +127 -0
- package/src/grid/intl/it-IT.json +8 -0
- package/src/grid/intl/ja-JP.json +8 -0
- package/src/grid/intl/ko-KR.json +8 -0
- package/src/grid/intl/lt-LT.json +8 -0
- package/src/grid/intl/lv-LV.json +8 -0
- package/src/grid/intl/nb-NO.json +8 -0
- package/src/grid/intl/nl-NL.json +8 -0
- package/src/grid/intl/pl-PL.json +8 -0
- package/src/grid/intl/pt-BR.json +8 -0
- package/src/grid/intl/pt-PT.json +8 -0
- package/src/grid/intl/ro-RO.json +8 -0
- package/src/grid/intl/ru-RU.json +8 -0
- package/src/grid/intl/sk-SK.json +8 -0
- package/src/grid/intl/sl-SI.json +8 -0
- package/src/grid/intl/sr-SP.json +8 -0
- package/src/grid/intl/sv-SE.json +8 -0
- package/src/grid/intl/tr-TR.json +8 -0
- package/src/grid/intl/uk-UA.json +8 -0
- package/src/grid/intl/zh-CN.json +8 -0
- package/src/grid/intl/zh-TW.json +8 -0
- package/src/grid/types.ts +25 -2
- package/src/gridlist/createGridList.ts +172 -42
- package/src/gridlist/createGridListItem.ts +51 -13
- package/src/gridlist/createGridListSection.ts +14 -0
- package/src/gridlist/createGridListSelectionCheckbox.ts +31 -4
- package/src/gridlist/intl/ar-AE.json +4 -0
- package/src/gridlist/intl/bg-BG.json +4 -0
- package/src/gridlist/intl/cs-CZ.json +4 -0
- package/src/gridlist/intl/da-DK.json +4 -0
- package/src/gridlist/intl/de-DE.json +4 -0
- package/src/gridlist/intl/el-GR.json +4 -0
- package/src/gridlist/intl/en-US.json +4 -0
- package/src/gridlist/intl/es-ES.json +4 -0
- package/src/gridlist/intl/et-EE.json +4 -0
- package/src/gridlist/intl/fi-FI.json +4 -0
- package/src/gridlist/intl/fr-FR.json +4 -0
- package/src/gridlist/intl/he-IL.json +4 -0
- package/src/gridlist/intl/hr-HR.json +4 -0
- package/src/gridlist/intl/hu-HU.json +4 -0
- package/src/gridlist/intl/index.ts +123 -0
- package/src/gridlist/intl/it-IT.json +4 -0
- package/src/gridlist/intl/ja-JP.json +4 -0
- package/src/gridlist/intl/ko-KR.json +4 -0
- package/src/gridlist/intl/lt-LT.json +4 -0
- package/src/gridlist/intl/lv-LV.json +4 -0
- package/src/gridlist/intl/nb-NO.json +4 -0
- package/src/gridlist/intl/nl-NL.json +4 -0
- package/src/gridlist/intl/pl-PL.json +4 -0
- package/src/gridlist/intl/pt-BR.json +4 -0
- package/src/gridlist/intl/pt-PT.json +4 -0
- package/src/gridlist/intl/ro-RO.json +4 -0
- package/src/gridlist/intl/ru-RU.json +4 -0
- package/src/gridlist/intl/sk-SK.json +4 -0
- package/src/gridlist/intl/sl-SI.json +4 -0
- package/src/gridlist/intl/sr-SP.json +4 -0
- package/src/gridlist/intl/sv-SE.json +4 -0
- package/src/gridlist/intl/tr-TR.json +4 -0
- package/src/gridlist/intl/uk-UA.json +4 -0
- package/src/gridlist/intl/zh-CN.json +4 -0
- package/src/gridlist/intl/zh-TW.json +4 -0
- package/src/gridlist/types.ts +54 -2
- package/src/i18n/compileIcu.ts +440 -0
- package/src/i18n/createCollator.ts +14 -0
- package/src/i18n/createDateFormatter.ts +14 -0
- package/src/i18n/createFilter.ts +14 -0
- package/src/i18n/createListFormatter.ts +38 -0
- package/src/i18n/createNumberFormatter.ts +14 -0
- package/src/i18n/createStringFormatter.ts +64 -8
- package/src/i18n/index.ts +3 -0
- package/src/i18n/locale.tsx +60 -19
- package/src/i18n/utils.ts +14 -0
- package/src/index.ts +49 -1
- package/src/interactions/FocusableProvider.tsx +28 -11
- package/src/interactions/PressEvent.ts +16 -1
- package/src/interactions/createContextMenu.ts +108 -0
- package/src/interactions/createFocus.ts +26 -6
- package/src/interactions/createFocusRing.ts +28 -13
- package/src/interactions/createFocusWithin.ts +23 -3
- package/src/interactions/createFocusable.ts +45 -28
- package/src/interactions/createHover.ts +102 -81
- package/src/interactions/createInteractionModality.ts +135 -45
- package/src/interactions/createKeyboard.ts +85 -9
- package/src/interactions/createKeyboardShortcutHandler.ts +157 -0
- package/src/interactions/createLongPress.ts +31 -9
- package/src/interactions/createMove.ts +24 -3
- package/src/interactions/createPress.ts +85 -41
- package/src/interactions/index.ts +1 -0
- package/src/label/createField.ts +58 -63
- package/src/label/createLabel.ts +21 -4
- package/src/label/createLabels.ts +25 -1
- package/src/landmark/createLandmark.ts +27 -4
- package/src/link/createLink.ts +20 -12
- package/src/listbox/createListBox.ts +86 -310
- package/src/listbox/createOption.ts +50 -14
- package/src/live-announcer/announce.ts +21 -6
- package/src/menu/createMenu.ts +92 -5
- package/src/menu/createMenuItem.ts +40 -23
- package/src/menu/createMenuTrigger.ts +179 -51
- package/src/menu/index.ts +2 -0
- package/src/menu/intl/index.ts +130 -0
- package/src/meter/createMeter.ts +20 -5
- package/src/numberfield/createNumberField.ts +254 -14
- package/src/overlays/ariaHideOutside.ts +76 -11
- package/src/overlays/createInteractOutside.ts +74 -47
- package/src/overlays/createModal.tsx +42 -27
- package/src/overlays/createOverlay.ts +107 -66
- package/src/overlays/createOverlayTrigger.ts +21 -6
- package/src/overlays/createPreventScroll.ts +92 -62
- package/src/overlays/index.ts +2 -0
- package/src/overlays/intl/ar-AE.json +3 -0
- package/src/overlays/intl/bg-BG.json +3 -0
- package/src/overlays/intl/cs-CZ.json +3 -0
- package/src/overlays/intl/da-DK.json +3 -0
- package/src/overlays/intl/de-DE.json +3 -0
- package/src/overlays/intl/el-GR.json +3 -0
- package/src/overlays/intl/en-US.json +3 -0
- package/src/overlays/intl/es-ES.json +3 -0
- package/src/overlays/intl/et-EE.json +3 -0
- package/src/overlays/intl/fi-FI.json +3 -0
- package/src/overlays/intl/fr-FR.json +3 -0
- package/src/overlays/intl/he-IL.json +3 -0
- package/src/overlays/intl/hr-HR.json +3 -0
- package/src/overlays/intl/hu-HU.json +3 -0
- package/src/overlays/intl/index.ts +122 -0
- package/src/overlays/intl/it-IT.json +3 -0
- package/src/overlays/intl/ja-JP.json +3 -0
- package/src/overlays/intl/ko-KR.json +3 -0
- package/src/overlays/intl/lt-LT.json +3 -0
- package/src/overlays/intl/lv-LV.json +3 -0
- package/src/overlays/intl/nb-NO.json +3 -0
- package/src/overlays/intl/nl-NL.json +3 -0
- package/src/overlays/intl/pl-PL.json +3 -0
- package/src/overlays/intl/pt-BR.json +3 -0
- package/src/overlays/intl/pt-PT.json +3 -0
- package/src/overlays/intl/ro-RO.json +3 -0
- package/src/overlays/intl/ru-RU.json +3 -0
- package/src/overlays/intl/sk-SK.json +3 -0
- package/src/overlays/intl/sl-SI.json +3 -0
- package/src/overlays/intl/sr-SP.json +3 -0
- package/src/overlays/intl/sv-SE.json +3 -0
- package/src/overlays/intl/tr-TR.json +3 -0
- package/src/overlays/intl/uk-UA.json +3 -0
- package/src/overlays/intl/zh-CN.json +3 -0
- package/src/overlays/intl/zh-TW.json +3 -0
- package/src/popover/calculatePosition.ts +21 -3
- package/src/popover/createOverlayPosition.ts +149 -41
- package/src/popover/createPopover.ts +88 -23
- package/src/progress/createProgressBar.ts +19 -4
- package/src/radio/createRadio.ts +80 -25
- package/src/radio/createRadioGroup.ts +47 -13
- package/src/searchfield/createSearchField.ts +31 -2
- package/src/searchfield/intl/ar-AE.json +3 -0
- package/src/searchfield/intl/bg-BG.json +3 -0
- package/src/searchfield/intl/cs-CZ.json +3 -0
- package/src/searchfield/intl/da-DK.json +3 -0
- package/src/searchfield/intl/de-DE.json +3 -0
- package/src/searchfield/intl/el-GR.json +3 -0
- package/src/searchfield/intl/en-US.json +3 -0
- package/src/searchfield/intl/es-ES.json +3 -0
- package/src/searchfield/intl/et-EE.json +3 -0
- package/src/searchfield/intl/fi-FI.json +3 -0
- package/src/searchfield/intl/fr-FR.json +3 -0
- package/src/searchfield/intl/he-IL.json +3 -0
- package/src/searchfield/intl/hr-HR.json +3 -0
- package/src/searchfield/intl/hu-HU.json +3 -0
- package/src/searchfield/intl/index.ts +122 -0
- package/src/searchfield/intl/it-IT.json +3 -0
- package/src/searchfield/intl/ja-JP.json +3 -0
- package/src/searchfield/intl/ko-KR.json +3 -0
- package/src/searchfield/intl/lt-LT.json +3 -0
- package/src/searchfield/intl/lv-LV.json +3 -0
- package/src/searchfield/intl/nb-NO.json +3 -0
- package/src/searchfield/intl/nl-NL.json +3 -0
- package/src/searchfield/intl/pl-PL.json +3 -0
- package/src/searchfield/intl/pt-BR.json +3 -0
- package/src/searchfield/intl/pt-PT.json +3 -0
- package/src/searchfield/intl/ro-RO.json +3 -0
- package/src/searchfield/intl/ru-RU.json +3 -0
- package/src/searchfield/intl/sk-SK.json +3 -0
- package/src/searchfield/intl/sl-SI.json +3 -0
- package/src/searchfield/intl/sr-SP.json +3 -0
- package/src/searchfield/intl/sv-SE.json +3 -0
- package/src/searchfield/intl/tr-TR.json +3 -0
- package/src/searchfield/intl/uk-UA.json +3 -0
- package/src/searchfield/intl/zh-CN.json +3 -0
- package/src/searchfield/intl/zh-TW.json +3 -0
- package/src/select/createHiddenSelect.tsx +166 -69
- package/src/select/createSelect.ts +80 -34
- package/src/selection/DOMLayoutDelegate.ts +14 -0
- package/src/selection/ListKeyboardDelegate.ts +16 -1
- package/src/selection/constants.ts +14 -0
- package/src/selection/createCollectionRowInteraction.ts +75 -6
- package/src/selection/createScrollIntoViewOnFocus.ts +23 -8
- package/src/selection/createSelectableCollection.ts +352 -226
- package/src/selection/createSelectableItem.ts +51 -12
- package/src/selection/createSelectableList.ts +21 -1
- package/src/selection/createTypeSelect.ts +21 -5
- package/src/selection/selectItem.ts +14 -0
- package/src/selection/utils.ts +15 -1
- package/src/separator/createSeparator.ts +17 -1
- package/src/slider/createSlider.ts +24 -18
- package/src/spinbutton/createSpinButton.ts +16 -2
- package/src/spinbutton/index.ts +2 -10
- package/src/spinbutton/intl.ts +70 -34
- package/src/ssr/index.tsx +79 -48
- package/src/steplist/createStepList.ts +17 -2
- package/src/switch/createSwitch.ts +25 -4
- package/src/table/createTable.ts +104 -52
- package/src/table/createTableCell.ts +17 -2
- package/src/table/createTableColumnHeader.ts +21 -3
- package/src/table/createTableColumnResize.ts +19 -3
- package/src/table/createTableHeaderRow.ts +17 -2
- package/src/table/createTableRow.ts +29 -22
- package/src/table/createTableRowGroup.ts +18 -3
- package/src/table/createTableSelectAllCheckbox.ts +30 -14
- package/src/table/createTableSelectionCheckbox.ts +21 -3
- package/src/table/index.ts +2 -2
- package/src/table/intl/ar-AE.json +13 -0
- package/src/table/intl/bg-BG.json +13 -0
- package/src/table/intl/cs-CZ.json +13 -0
- package/src/table/intl/da-DK.json +13 -0
- package/src/table/intl/de-DE.json +13 -0
- package/src/table/intl/el-GR.json +13 -0
- package/src/table/intl/en-US.json +13 -0
- package/src/table/intl/es-ES.json +13 -0
- package/src/table/intl/et-EE.json +13 -0
- package/src/table/intl/fi-FI.json +13 -0
- package/src/table/intl/fr-FR.json +13 -0
- package/src/table/intl/he-IL.json +13 -0
- package/src/table/intl/hr-HR.json +13 -0
- package/src/table/intl/hu-HU.json +13 -0
- package/src/table/intl/index.ts +132 -0
- package/src/table/intl/it-IT.json +13 -0
- package/src/table/intl/ja-JP.json +13 -0
- package/src/table/intl/ko-KR.json +13 -0
- package/src/table/intl/lt-LT.json +13 -0
- package/src/table/intl/lv-LV.json +13 -0
- package/src/table/intl/nb-NO.json +13 -0
- package/src/table/intl/nl-NL.json +13 -0
- package/src/table/intl/pl-PL.json +13 -0
- package/src/table/intl/pt-BR.json +13 -0
- package/src/table/intl/pt-PT.json +13 -0
- package/src/table/intl/ro-RO.json +13 -0
- package/src/table/intl/ru-RU.json +13 -0
- package/src/table/intl/sk-SK.json +13 -0
- package/src/table/intl/sl-SI.json +13 -0
- package/src/table/intl/sr-SP.json +13 -0
- package/src/table/intl/sv-SE.json +13 -0
- package/src/table/intl/tr-TR.json +13 -0
- package/src/table/intl/uk-UA.json +13 -0
- package/src/table/intl/zh-CN.json +13 -0
- package/src/table/intl/zh-TW.json +13 -0
- package/src/table/types.ts +44 -2
- package/src/table/utils.ts +15 -6
- package/src/tabs/createTabs.ts +104 -37
- package/src/tag/createTag.ts +118 -37
- package/src/tag/createTagGroup.ts +20 -12
- package/src/tag/intl/ar-AE.json +4 -0
- package/src/tag/intl/bg-BG.json +4 -0
- package/src/tag/intl/cs-CZ.json +4 -0
- package/src/tag/intl/da-DK.json +4 -0
- package/src/tag/intl/de-DE.json +4 -0
- package/src/tag/intl/el-GR.json +4 -0
- package/src/tag/intl/en-US.json +4 -0
- package/src/tag/intl/es-ES.json +4 -0
- package/src/tag/intl/et-EE.json +4 -0
- package/src/tag/intl/fi-FI.json +4 -0
- package/src/tag/intl/fr-FR.json +4 -0
- package/src/tag/intl/he-IL.json +4 -0
- package/src/tag/intl/hr-HR.json +4 -0
- package/src/tag/intl/hu-HU.json +4 -0
- package/src/tag/intl/index.ts +123 -0
- package/src/tag/intl/it-IT.json +4 -0
- package/src/tag/intl/ja-JP.json +4 -0
- package/src/tag/intl/ko-KR.json +4 -0
- package/src/tag/intl/lt-LT.json +4 -0
- package/src/tag/intl/lv-LV.json +4 -0
- package/src/tag/intl/nb-NO.json +4 -0
- package/src/tag/intl/nl-NL.json +4 -0
- package/src/tag/intl/pl-PL.json +4 -0
- package/src/tag/intl/pt-BR.json +4 -0
- package/src/tag/intl/pt-PT.json +4 -0
- package/src/tag/intl/ro-RO.json +4 -0
- package/src/tag/intl/ru-RU.json +4 -0
- package/src/tag/intl/sk-SK.json +4 -0
- package/src/tag/intl/sl-SI.json +4 -0
- package/src/tag/intl/sr-SP.json +4 -0
- package/src/tag/intl/sv-SE.json +4 -0
- package/src/tag/intl/tr-TR.json +4 -0
- package/src/tag/intl/uk-UA.json +4 -0
- package/src/tag/intl/zh-CN.json +4 -0
- package/src/tag/intl/zh-TW.json +4 -0
- package/src/textfield/createTextField.ts +104 -14
- package/src/toast/createToast.ts +39 -6
- package/src/toast/createToastRegion.ts +28 -15
- package/src/toast/intl/ar-AE.json +4 -0
- package/src/toast/intl/bg-BG.json +4 -0
- package/src/toast/intl/cs-CZ.json +4 -0
- package/src/toast/intl/da-DK.json +4 -0
- package/src/toast/intl/de-DE.json +4 -0
- package/src/toast/intl/el-GR.json +4 -0
- package/src/toast/intl/en-US.json +4 -0
- package/src/toast/intl/es-ES.json +4 -0
- package/src/toast/intl/et-EE.json +4 -0
- package/src/toast/intl/fi-FI.json +4 -0
- package/src/toast/intl/fr-FR.json +4 -0
- package/src/toast/intl/he-IL.json +4 -0
- package/src/toast/intl/hr-HR.json +4 -0
- package/src/toast/intl/hu-HU.json +4 -0
- package/src/toast/intl/index.ts +123 -0
- package/src/toast/intl/it-IT.json +4 -0
- package/src/toast/intl/ja-JP.json +4 -0
- package/src/toast/intl/ko-KR.json +4 -0
- package/src/toast/intl/lt-LT.json +4 -0
- package/src/toast/intl/lv-LV.json +4 -0
- package/src/toast/intl/nb-NO.json +4 -0
- package/src/toast/intl/nl-NL.json +4 -0
- package/src/toast/intl/pl-PL.json +4 -0
- package/src/toast/intl/pt-BR.json +4 -0
- package/src/toast/intl/pt-PT.json +4 -0
- package/src/toast/intl/ro-RO.json +4 -0
- package/src/toast/intl/ru-RU.json +4 -0
- package/src/toast/intl/sk-SK.json +4 -0
- package/src/toast/intl/sl-SI.json +4 -0
- package/src/toast/intl/sr-SP.json +4 -0
- package/src/toast/intl/sv-SE.json +4 -0
- package/src/toast/intl/tr-TR.json +4 -0
- package/src/toast/intl/uk-UA.json +4 -0
- package/src/toast/intl/zh-CN.json +4 -0
- package/src/toast/intl/zh-TW.json +4 -0
- package/src/toggle/createToggle.ts +96 -15
- package/src/tokenfield/createToken.ts +82 -0
- package/src/tokenfield/createTokenField.ts +859 -0
- package/src/tokenfield/index.ts +10 -0
- package/src/toolbar/createToolbar.ts +26 -5
- package/src/tooltip/createPreviewTrigger.ts +301 -0
- package/src/tooltip/createSafeArea.ts +165 -0
- package/src/tooltip/createTooltip.ts +15 -1
- package/src/tooltip/createTooltipTrigger.ts +24 -3
- package/src/tooltip/index.ts +7 -0
- package/src/tooltip/intl/index.ts +76 -0
- package/src/tree/createTree.ts +66 -50
- package/src/tree/createTreeItem.ts +85 -21
- package/src/tree/createTreeSelectionCheckbox.ts +29 -28
- package/src/tree/intl/ar-AE.json +4 -0
- package/src/tree/intl/bg-BG.json +4 -0
- package/src/tree/intl/cs-CZ.json +4 -0
- package/src/tree/intl/da-DK.json +4 -0
- package/src/tree/intl/de-DE.json +4 -0
- package/src/tree/intl/el-GR.json +4 -0
- package/src/tree/intl/en-US.json +4 -0
- package/src/tree/intl/es-ES.json +4 -0
- package/src/tree/intl/et-EE.json +4 -0
- package/src/tree/intl/fi-FI.json +4 -0
- package/src/tree/intl/fr-FR.json +4 -0
- package/src/tree/intl/he-IL.json +4 -0
- package/src/tree/intl/hr-HR.json +4 -0
- package/src/tree/intl/hu-HU.json +4 -0
- package/src/tree/intl/index.ts +123 -0
- package/src/tree/intl/it-IT.json +4 -0
- package/src/tree/intl/ja-JP.json +4 -0
- package/src/tree/intl/ko-KR.json +4 -0
- package/src/tree/intl/lt-LT.json +4 -0
- package/src/tree/intl/lv-LV.json +4 -0
- package/src/tree/intl/nb-NO.json +4 -0
- package/src/tree/intl/nl-NL.json +4 -0
- package/src/tree/intl/pl-PL.json +4 -0
- package/src/tree/intl/pt-BR.json +4 -0
- package/src/tree/intl/pt-PT.json +4 -0
- package/src/tree/intl/ro-RO.json +4 -0
- package/src/tree/intl/ru-RU.json +4 -0
- package/src/tree/intl/sk-SK.json +4 -0
- package/src/tree/intl/sl-SI.json +4 -0
- package/src/tree/intl/sr-SP.json +4 -0
- package/src/tree/intl/sv-SE.json +4 -0
- package/src/tree/intl/tr-TR.json +4 -0
- package/src/tree/intl/uk-UA.json +4 -0
- package/src/tree/intl/zh-CN.json +4 -0
- package/src/tree/intl/zh-TW.json +4 -0
- package/src/tree/types.ts +35 -2
- package/src/utils/ShadowTreeWalker.ts +249 -0
- package/src/utils/animation.ts +106 -85
- package/src/utils/capture.ts +51 -0
- package/src/utils/createDescription.ts +31 -8
- package/src/utils/dom.ts +314 -33
- package/src/utils/domAttrs.ts +84 -0
- package/src/utils/env.ts +2 -0
- package/src/utils/events.ts +39 -3
- package/src/utils/filterDOMProps.ts +34 -2
- package/src/utils/focus.ts +186 -32
- package/src/utils/geometry.ts +15 -1
- package/src/utils/getMetaValue.ts +57 -0
- package/src/utils/getNonce.ts +40 -0
- package/src/utils/globalListeners.ts +16 -3
- package/src/utils/index.ts +14 -0
- package/src/utils/keyboard.ts +15 -1
- package/src/utils/mergeProps.ts +149 -16
- package/src/utils/owner.ts +26 -0
- package/src/utils/platform.ts +15 -1
- package/src/utils/reactivity.ts +2 -0
- package/src/utils/refs.ts +53 -0
- package/src/utils/runAfterTransition.ts +117 -0
- package/src/utils/scrollIntoView.ts +14 -0
- package/src/utils/splitProps.ts +70 -0
- package/src/utils/textSelection.ts +15 -1
- package/src/virtualizer/ScrollView.ts +210 -0
- package/src/virtualizer/index.ts +2 -0
- package/src/virtualizer/utils.ts +100 -0
- package/src/visually-hidden/createVisuallyHidden.ts +20 -4
- package/dist/_chunk/createInteractionModality.js +0 -268
- package/dist/_chunk/createInteractionModality.js.map +0 -1
- package/dist/_chunk/createInteractionModality.jsx +0 -268
- package/dist/_chunk/createInteractionModality.jsx.map +0 -1
- package/dist/_chunk/focus2.js +0 -631
- package/dist/_chunk/focus2.js.map +0 -1
- package/dist/_chunk/focus2.jsx +0 -631
- package/dist/_chunk/focus2.jsx.map +0 -1
- package/dist/_chunk/visually-hidden.js.map +0 -1
- package/dist/_chunk/visually-hidden.jsx.map +0 -1
- package/dist/checkbox/createCheckboxGroupState.d.ts +0 -71
- package/dist/checkbox/createCheckboxGroupState.d.ts.map +0 -1
- package/dist/radio/createRadioGroupState.d.ts +0 -77
- package/dist/radio/createRadioGroupState.d.ts.map +0 -1
- package/dist/toggle/createToggleState.d.ts +0 -34
- package/dist/toggle/createToggleState.d.ts.map +0 -1
- package/src/checkbox/createCheckboxGroupState.ts +0 -174
- package/src/radio/createRadioGroupState.ts +0 -177
- package/src/toggle/createToggleState.ts +0 -86
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listbox.jsx","names":["createId","mergeProps","mergeProps"],"sources":["../../src/listbox/createListBox.ts","../../src/listbox/createOption.ts"],"sourcesContent":["/**\n * Provides the behavior and accessibility implementation for a listbox component.\n * A listbox displays a list of options and allows a user to select one or more of them.\n * Based on @react-aria/listbox useListBox.\n */\n\nimport { createEffect, onCleanup, type JSX } from \"solid-js\";\nimport { createFocusWithin } from \"../interactions/createFocusWithin\";\nimport { createLabel } from \"../label/createLabel\";\nimport { createTypeSelect } from \"../selection/createTypeSelect\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { createId } from \"../ssr\";\nimport { access, type MaybeAccessor } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport type { ListState, Key } from \"@proyecto-viviana/solid-stately\";\n\nexport interface AriaListBoxProps {\n /** An ID for the listbox. */\n id?: string;\n /** Whether the listbox is disabled. */\n isDisabled?: boolean;\n /** The label for the listbox. */\n label?: JSX.Element;\n /** An accessible label for the listbox when no visible label is provided. */\n \"aria-label\"?: string;\n /** The ID of an element that labels the listbox. */\n \"aria-labelledby\"?: string;\n /** The ID of an element that describes the listbox. */\n \"aria-describedby\"?: string;\n /** Handler called when focus moves into the listbox. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler called when focus moves out of the listbox. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler called when the focus state changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler called when an item is activated (pressed). */\n onAction?: (key: Key) => void;\n /** Whether focus should automatically wrap around. */\n shouldFocusWrap?: boolean;\n /** Whether selection should occur on press up. */\n shouldSelectOnPressUp?: boolean;\n /** Whether to focus items on hover. */\n shouldFocusOnHover?: boolean;\n /** Whether the listbox uses virtual scrolling. */\n isVirtualized?: boolean;\n /** Whether options should use virtual focus instead of receiving DOM focus. */\n shouldUseVirtualFocus?: boolean;\n /** The behavior of links in the collection. */\n linkBehavior?: \"action\" | \"selection\" | \"override\" | \"none\";\n /**\n * Unstable upstream override that forces items with actions to prefer\n * selection or action behavior.\n */\n UNSTABLE_itemBehavior?: \"selection\" | \"action\";\n /**\n * Whether keyboard focus movement should also update selection in single selection mode.\n * @default true\n */\n shouldSelectOnFocus?: boolean;\n /** Whether type-to-select is disabled. @default false */\n disallowTypeAhead?: boolean;\n /**\n * The primary orientation of the items. In a horizontal listbox the Left/Right\n * arrows navigate the list (the block-axis Up/Down arrows still work); in a\n * vertical listbox Left/Right are no-ops, matching upstream's\n * `ListKeyboardDelegate` for a `stack` layout.\n * @default \"vertical\"\n */\n orientation?: \"vertical\" | \"horizontal\";\n /**\n * The text direction, used to resolve the horizontal navigation axis. In a\n * horizontal listbox, RTL flips Left/Right (Right=previous, Left=next).\n * @default \"ltr\"\n */\n direction?: \"ltr\" | \"rtl\";\n /**\n * Whether pressing the Escape key should clear selection in the listbox or not.\n * Most experiences should not modify this option as it eliminates a keyboard\n * user's ability to easily clear selection. Only use if the escape key is being\n * handled externally or should not trigger selection clearing contextually.\n * @default \"clearSelection\"\n */\n escapeKeyBehavior?: \"clearSelection\" | \"none\";\n}\n\nexport interface ListBoxAria {\n /** Props for the listbox element. */\n listBoxProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the listbox's label element (if any). */\n labelProps: JSX.HTMLAttributes<HTMLElement>;\n}\n\n// Shared data between listbox and options\nconst listBoxData = new WeakMap<object, ListBoxData>();\n\ninterface ListBoxData {\n id: string;\n onAction?: (key: Key) => void;\n shouldSelectOnPressUp?: boolean;\n shouldFocusOnHover?: boolean;\n isVirtualized?: boolean;\n shouldUseVirtualFocus?: boolean;\n isDisabled?: boolean;\n linkBehavior?: \"action\" | \"selection\" | \"override\" | \"none\";\n UNSTABLE_itemBehavior?: \"selection\" | \"action\";\n}\n\nexport function getListBoxData(state: ListState): ListBoxData | undefined {\n return listBoxData.get(state);\n}\n\n/**\n * Whether a key should be skipped during keyboard navigation. Disabled keys only\n * block navigation under `disabledBehavior: \"all\"` (the default); under\n * `\"selection\"` they stay focusable (selection is still blocked elsewhere).\n * Mirrors `ListKeyboardDelegate.isDisabled` in React Aria, which gates the skip\n * on the resolved `disabledBehavior` from the selection manager.\n */\nfunction isNavigationDisabled<T>(state: ListState<T>, key: Key): boolean {\n return state.isDisabled(key) && state.disabledBehavior() === \"all\";\n}\n\nfunction findNextEnabledKey<T>(\n state: ListState<T>,\n currentKey: Key | null,\n direction: \"next\" | \"prev\",\n wrap: boolean,\n): Key | null {\n const collection = state.collection();\n const getAdjacentKey =\n direction === \"next\"\n ? (key: Key) => collection.getKeyAfter(key)\n : (key: Key) => collection.getKeyBefore(key);\n const getBoundaryKey =\n direction === \"next\" ? () => collection.getFirstKey() : () => collection.getLastKey();\n\n let key = currentKey != null ? getAdjacentKey(currentKey) : getBoundaryKey();\n while (key != null && isNavigationDisabled(state, key)) {\n key = getAdjacentKey(key);\n }\n\n if (key == null && wrap) {\n key = getBoundaryKey();\n while (key != null && isNavigationDisabled(state, key)) {\n key = getAdjacentKey(key);\n }\n }\n\n return key;\n}\n\n/**\n * Provides the behavior and accessibility implementation for a listbox component.\n * A listbox displays a list of options and allows a user to select one or more of them.\n */\nexport function createListBox<T>(\n props: MaybeAccessor<AriaListBoxProps>,\n state: ListState<T>,\n _ref?: () => HTMLElement | null,\n): ListBoxAria {\n const getProps = () => access(props);\n const id = createId(getProps().id);\n\n // Development-time warning for missing accessibility labels\n if (isDevEnv()) {\n const p = getProps();\n if (!p.label && !p[\"aria-label\"] && !p[\"aria-labelledby\"]) {\n console.warn(\n \"[solidaria] A ListBox requires an aria-label or aria-labelledby attribute for accessibility.\",\n );\n }\n }\n\n // Filter DOM props\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const updateSharedData = () => {\n const p = getProps();\n const selectionBehavior = state.selectionBehavior();\n let linkBehavior = p.linkBehavior ?? (selectionBehavior === \"replace\" ? \"action\" : \"override\");\n if (selectionBehavior === \"toggle\" && linkBehavior === \"action\") {\n linkBehavior = \"override\";\n }\n\n listBoxData.set(state, {\n id,\n onAction: p.onAction,\n shouldSelectOnPressUp: p.shouldSelectOnPressUp,\n shouldFocusOnHover: p.shouldFocusOnHover,\n isVirtualized: p.isVirtualized,\n shouldUseVirtualFocus: p.shouldUseVirtualFocus,\n isDisabled: p.isDisabled,\n linkBehavior,\n UNSTABLE_itemBehavior: p.UNSTABLE_itemBehavior,\n });\n };\n\n // Ensure options created in the same render pass can read parent metadata.\n updateSharedData();\n\n // Share data with child options\n createEffect(() => {\n updateSharedData();\n\n onCleanup(() => {\n listBoxData.delete(state);\n });\n });\n\n // Handle focus within\n const { focusWithinProps } = createFocusWithin({\n onFocusWithin: (e) => getProps().onFocus?.(e),\n onBlurWithin: (e) => getProps().onBlur?.(e),\n onFocusWithinChange: (isFocused) => {\n getProps().onFocusChange?.(isFocused);\n // Collection focus lives on the selection manager (upstream tracks it in\n // useSelectableCollection); the ListState-level setFocused may be a\n // widget-level focus state (e.g. Select's trigger focus).\n state.selectionManager.setFocused(isFocused);\n },\n });\n\n // Label handling\n const { labelProps, fieldProps } = createLabel({\n get id() {\n return id;\n },\n get label() {\n return getProps().label;\n },\n get \"aria-label\"() {\n return getProps()[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return getProps()[\"aria-labelledby\"];\n },\n labelElementType: \"span\",\n });\n\n // Type-to-select\n const { typeSelectProps } = createTypeSelect({\n collection: () => state.collection(),\n focusedKey: () => state.focusedKey(),\n onFocusedKeyChange: (key) => state.setFocusedKey(key),\n isKeyDisabled: (key) => state.isDisabled(key),\n get isDisabled() {\n return getProps().disallowTypeAhead ?? false;\n },\n });\n\n // Focus marshalling — the container is a trampoline. When a standalone\n // listbox receives DOM focus with nothing focused yet (e.g. Tab lands on the\n // container, whose roving tabIndex is 0 only while `focusedKey == null`), move\n // the focused key to the first/last option; `createSelectableItem`'s focus\n // effect then pulls REAL DOM focus onto that option and the container rolls to\n // tabIndex -1. This mirrors `useSelectableCollection`'s `onFocus`\n // (useSelectableCollection.ts:409-454) and is why upstream never needs\n // `aria-activedescendant` on a standalone listbox — real focus IS the AT\n // channel. Skipped under `shouldUseVirtualFocus` (ComboBox/Autocomplete keep\n // DOM focus on the input and drive an activedescendant via the virtual-focus\n // channel instead).\n //\n // NOTE on the guard: unlike upstream (whose selectable `onFocus` sets\n // `manager.setFocused(true)` itself and guards on `manager.isFocused`), our\n // `createFocusWithin` already flips `setFocused(true)` via `onFocusWithinChange`\n // — and mergeProps chains it BEFORE this handler — so `manager.isFocused` is\n // already true here. Guard on `focusedKey() == null` instead (only marshal when\n // no option is focused yet). `onFocus` is non-bubbling in Solid, so this fires\n // only when the container element itself receives focus, not on child focus.\n const onListBoxFocus: JSX.EventHandler<HTMLElement, FocusEvent> = (e) => {\n const p = getProps();\n if (p.isDisabled || p.shouldUseVirtualFocus) return;\n // Ignore focus events that bubbled through a portal.\n if (!e.currentTarget.contains(e.target as Node)) return;\n if (state.focusedKey() != null) return;\n\n const manager = state.selectionManager;\n const selectOnFocus = state.selectionBehavior() === \"replace\";\n const navigateToKey = (key: Key | null | undefined) => {\n if (key == null) return;\n state.setFocusedKey(key);\n if (selectOnFocus && !manager.isSelected(key)) {\n state.replaceSelection(key);\n }\n };\n\n const collection = state.collection();\n const relatedTarget = e.relatedTarget as Element | null;\n // Detect tab direction: if focus came from an element that FOLLOWS the\n // listbox in the document, the user is shift-tabbing backward into it, so\n // enter at the last item; otherwise enter at the first.\n if (\n relatedTarget &&\n e.currentTarget.compareDocumentPosition(relatedTarget) & Node.DOCUMENT_POSITION_FOLLOWING\n ) {\n navigateToKey(manager.lastSelectedKey ?? collection.getLastKey());\n } else {\n navigateToKey(manager.firstSelectedKey ?? collection.getFirstKey());\n }\n };\n\n // Keyboard navigation\n const onKeyDown: JSX.EventHandler<HTMLElement, KeyboardEvent> = (e) => {\n const p = getProps();\n if (p.isDisabled) return;\n\n const collection = state.collection();\n const shouldWrap = p.shouldFocusWrap ?? false;\n const shouldSelectOnFocus = p.shouldSelectOnFocus ?? true;\n\n switch (e.key) {\n case \"ArrowDown\": {\n // Only consume the key once a target exists. Mirrors\n // useSelectableCollection (ArrowDown, 211-225): preventDefault is called\n // inside `if (nextKey != null)`, so at the last item without wrap the\n // arrow is left alone to bubble (e.g. to scroll an enclosing region).\n const nextKey = findNextEnabledKey(state, state.focusedKey(), \"next\", shouldWrap);\n if (nextKey != null) {\n e.preventDefault();\n state.setFocusedKey(nextKey);\n if (shouldSelectOnFocus && !e.shiftKey && state.selectionMode() === \"single\") {\n state.replaceSelection(nextKey);\n } else if (e.shiftKey && state.selectionMode() === \"multiple\") {\n state.extendSelection(nextKey, collection);\n }\n }\n break;\n }\n case \"ArrowUp\": {\n const prevKey = findNextEnabledKey(state, state.focusedKey(), \"prev\", shouldWrap);\n if (prevKey != null) {\n e.preventDefault();\n state.setFocusedKey(prevKey);\n if (shouldSelectOnFocus && !e.shiftKey && state.selectionMode() === \"single\") {\n state.replaceSelection(prevKey);\n } else if (e.shiftKey && state.selectionMode() === \"multiple\") {\n state.extendSelection(prevKey, collection);\n }\n }\n break;\n }\n case \"ArrowRight\":\n case \"ArrowLeft\": {\n // Horizontal orientation promotes the inline axis to the primary\n // navigation axis. Upstream's ListKeyboardDelegate strips\n // getKeyLeftOf/getKeyRightOf for a vertical stack, so Left/Right stay\n // no-ops there; in a horizontal stack they move prev/next, flipped\n // under RTL (Right=next, Left=prev in LTR).\n if (p.orientation !== \"horizontal\") break;\n const isRtl = p.direction === \"rtl\";\n const forward = e.key === \"ArrowRight\" ? !isRtl : isRtl;\n const focusedKey = state.focusedKey();\n // With nothing focused, both directions enter at the first item,\n // mirroring upstream's getFirstKey() fallback for Left and Right.\n const nextKey =\n focusedKey != null\n ? findNextEnabledKey(state, focusedKey, forward ? \"next\" : \"prev\", shouldWrap)\n : findNextEnabledKey(state, null, \"next\", false);\n // As with the block axis, only swallow the key when it moves focus\n // (useSelectableCollection ArrowLeft/Right, 243-280).\n if (nextKey != null) {\n e.preventDefault();\n state.setFocusedKey(nextKey);\n if (shouldSelectOnFocus && !e.shiftKey && state.selectionMode() === \"single\") {\n state.replaceSelection(nextKey);\n } else if (e.shiftKey && state.selectionMode() === \"multiple\") {\n state.extendSelection(nextKey, collection);\n }\n }\n break;\n }\n case \"Home\": {\n // Mirror useSelectableCollection (Home, 283-285): with nothing focused,\n // Shift+Home has no anchor to extend a selection from, so leave the\n // event alone (no focus move, no preventDefault).\n if (state.focusedKey() == null && e.shiftKey) break;\n e.preventDefault();\n const firstKey = findNextEnabledKey(state, null, \"next\", false);\n if (firstKey != null) {\n state.setFocusedKey(firstKey);\n if (e.ctrlKey && e.shiftKey && state.selectionMode() === \"multiple\") {\n // Select from current to first\n state.extendSelection(firstKey, collection);\n } else if (shouldSelectOnFocus && !e.shiftKey && state.selectionMode() === \"single\") {\n state.replaceSelection(firstKey);\n }\n }\n break;\n }\n case \"End\": {\n // Mirror useSelectableCollection (End, 300-302): same anchor guard as Home.\n if (state.focusedKey() == null && e.shiftKey) break;\n e.preventDefault();\n const lastKey = findNextEnabledKey(state, null, \"prev\", false);\n if (lastKey != null) {\n state.setFocusedKey(lastKey);\n if (e.ctrlKey && e.shiftKey && state.selectionMode() === \"multiple\") {\n // Select from current to last\n state.extendSelection(lastKey, collection);\n } else if (shouldSelectOnFocus && !e.shiftKey && state.selectionMode() === \"single\") {\n state.replaceSelection(lastKey);\n }\n }\n break;\n }\n case \" \":\n case \"Enter\": {\n if (e.target !== e.currentTarget) {\n break;\n }\n\n e.preventDefault();\n const focusedKey = state.focusedKey();\n // Activation is gated on the navigation-disabled check, not the raw\n // one: under disabledBehavior \"selection\" a focusable disabled option\n // still fires onAction, mirroring useSelectableItem's allowsActions\n // (manager.isDisabled is gated on \"all\"). Selection stays blocked —\n // toggleSelection self-guards on the raw disabled check.\n if (focusedKey != null && !isNavigationDisabled(state, focusedKey)) {\n if (state.selectionMode() !== \"none\") {\n state.toggleSelection(focusedKey);\n }\n p.onAction?.(focusedKey);\n }\n break;\n }\n case \"a\": {\n if ((e.ctrlKey || e.metaKey) && state.selectionMode() === \"multiple\") {\n e.preventDefault();\n state.selectAll();\n }\n break;\n }\n case \"Escape\": {\n // Mirror useSelectableCollection (Escape, 352-362): only clear the\n // selection — and swallow the event — when escapeKeyBehavior is\n // 'clearSelection', there is actually a selection to clear, and empty\n // selection is allowed. With escapeKeyBehavior 'none', or otherwise,\n // leave Escape alone so an enclosing overlay (popover, dialog, combobox)\n // can handle it.\n if (\n (p.escapeKeyBehavior ?? \"clearSelection\") === \"clearSelection\" &&\n !state.disallowEmptySelection() &&\n !state.isEmpty()\n ) {\n e.stopPropagation();\n e.preventDefault();\n state.clearSelection();\n }\n break;\n }\n }\n };\n\n return {\n get labelProps() {\n return labelProps as JSX.HTMLAttributes<HTMLElement>;\n },\n get listBoxProps() {\n const p = getProps();\n const selectionMode = state.selectionMode();\n const virtualFocus = p.shouldUseVirtualFocus ?? false;\n const focusedKey = state.focusedKey();\n\n // Roving container tabIndex mirrors `useSelectableCollection`\n // (useSelectableCollection.ts:581-582): with real option focus, the\n // container is tabbable (0) only while nothing is focused, then rolls to\n // -1 once focus lands on an option so Tab exits the widget. Under virtual\n // focus (ComboBox/Autocomplete) the container is NOT a tab stop at all —\n // upstream leaves `tabIndex` undefined, so the popover listbox never\n // appears in the roving trail. `aria-activedescendant` is the\n // virtual-focus AT channel and is emitted ONLY on that path — a standalone\n // listbox announces the active option through real DOM focus, so upstream\n // never sets it there.\n const tabIndex = p.isDisabled\n ? undefined\n : virtualFocus\n ? undefined\n : focusedKey != null\n ? -1\n : 0;\n\n const baseProps = mergeProps(\n domProps(),\n focusWithinProps as Record<string, unknown>,\n fieldProps as Record<string, unknown>,\n {\n role: \"listbox\",\n tabIndex,\n \"aria-disabled\": p.isDisabled || undefined,\n \"aria-multiselectable\": selectionMode === \"multiple\" ? true : undefined,\n \"aria-activedescendant\":\n virtualFocus && focusedKey != null ? String(focusedKey) : undefined,\n onKeyDown,\n onFocus: onListBoxFocus,\n },\n );\n\n // Add type-select props if enabled\n if (!p.disallowTypeAhead) {\n return mergeProps(\n baseProps,\n typeSelectProps as Record<string, unknown>,\n ) as JSX.HTMLAttributes<HTMLElement>;\n }\n\n return baseProps as JSX.HTMLAttributes<HTMLElement>;\n },\n };\n}\n","/**\n * Provides the behavior and accessibility implementation for an option in a listbox.\n * Based on @react-aria/listbox useOption.\n */\n\nimport { type JSX, type Accessor } from \"solid-js\";\nimport { createHover, type HoverEvents } from \"../interactions/createHover\";\nimport { createFocusRing } from \"../interactions/createFocusRing\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { access, type MaybeAccessor } from \"../utils/reactivity\";\nimport { getListBoxData } from \"./createListBox\";\nimport { getItemCount, type ListState, type Key } from \"@proyecto-viviana/solid-stately\";\nimport { createSelectableItem, type SelectableItemState } from \"../selection/createSelectableItem\";\n\nexport interface AriaOptionProps {\n /** The unique key for the option. */\n key: Key;\n /** Optional DOM id for the option element. Defaults to the key. */\n optionId?: string;\n /** Whether the option is disabled. */\n isDisabled?: boolean;\n /** An accessible label for the option. */\n \"aria-label\"?: string;\n /** Whether selection should occur on press up. */\n shouldSelectOnPressUp?: boolean;\n /** Whether to focus the option on hover. */\n shouldFocusOnHover?: boolean;\n /** Whether the option should use virtual focus instead of receiving DOM focus. */\n shouldUseVirtualFocus?: boolean;\n /** Whether the option is contained in a virtual scrolling listbox. */\n isVirtualized?: boolean;\n /** Whether press-up may occur without the press starting on this option. */\n allowsDifferentPressOrigin?: boolean;\n /** Handler called when hover starts. */\n onHoverStart?: HoverEvents[\"onHoverStart\"];\n /** Handler called when hover ends. */\n onHoverEnd?: HoverEvents[\"onHoverEnd\"];\n /** Handler called when hover state changes. */\n onHoverChange?: HoverEvents[\"onHoverChange\"];\n /** Handler called when the option is activated. */\n onAction?: () => void;\n}\n\nexport interface OptionAria {\n /** Props for the option element. */\n optionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the label text inside the option. */\n labelProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the description text inside the option. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the option is currently selected. */\n isSelected: Accessor<boolean>;\n /** Whether the option is currently focused. */\n isFocused: Accessor<boolean>;\n /** Whether the option is keyboard focused. */\n isFocusVisible: Accessor<boolean>;\n /** Whether the option is currently pressed. */\n isPressed: Accessor<boolean>;\n /** Whether the option is currently hovered. */\n isHovered: Accessor<boolean>;\n /** Whether the option is disabled. */\n isDisabled: Accessor<boolean>;\n /** Whether the option may be selected. */\n allowsSelection: Accessor<boolean>;\n /** Whether the option has an action. */\n hasAction: Accessor<boolean>;\n}\n\n/**\n * Provides the behavior and accessibility implementation for an option in a listbox.\n */\nexport function createOption<T>(\n props: MaybeAccessor<AriaOptionProps>,\n state: ListState<T>,\n _ref?: () => HTMLElement | null,\n): OptionAria {\n const getProps = () => access(props);\n\n const getData = () => getListBoxData(state);\n\n const shouldSelectOnPressUp = () => {\n return getProps().shouldSelectOnPressUp ?? getData()?.shouldSelectOnPressUp;\n };\n\n const shouldFocusOnHover = () => {\n return getProps().shouldFocusOnHover ?? getData()?.shouldFocusOnHover ?? false;\n };\n\n const shouldUseVirtualFocus = () => {\n return getProps().shouldUseVirtualFocus ?? getData()?.shouldUseVirtualFocus ?? false;\n };\n\n const isVirtualized = () => {\n return getProps().isVirtualized ?? getData()?.isVirtualized ?? false;\n };\n\n const allowsDifferentPressOrigin = () => {\n return (\n getProps().allowsDifferentPressOrigin ??\n Boolean(shouldSelectOnPressUp() && shouldFocusOnHover())\n );\n };\n\n const isDisabledProp = () => {\n return Boolean(getData()?.isDisabled || getProps().isDisabled);\n };\n\n const optionId = () => getProps().optionId ?? String(getProps().key);\n\n const selectableItem = createSelectableItem<T>(\n () => {\n const key = getProps().key;\n const hasAction = getProps().onAction != null || getData()?.onAction != null;\n\n return {\n key,\n id: optionId(),\n isDisabled: isDisabledProp(),\n shouldSelectOnPressUp: shouldSelectOnPressUp(),\n allowsDifferentPressOrigin: allowsDifferentPressOrigin(),\n isVirtualized: isVirtualized(),\n shouldUseVirtualFocus: shouldUseVirtualFocus(),\n onAction: hasAction\n ? () => {\n getProps().onAction?.();\n getData()?.onAction?.(key);\n }\n : undefined,\n linkBehavior: getData()?.linkBehavior,\n UNSTABLE_itemBehavior: getData()?.UNSTABLE_itemBehavior,\n };\n },\n state as SelectableItemState<T>,\n () => _ref?.() ?? null,\n );\n\n const { hoverProps, isHovered } = createHover({\n get isDisabled() {\n return selectableItem.isDisabled();\n },\n onHoverStart(e) {\n if (shouldFocusOnHover() && !isFocusVisible()) {\n state.selectionManager.setFocused(true);\n state.selectionManager.setFocusedKey(getProps().key);\n }\n getProps().onHoverStart?.(e);\n },\n onHoverEnd(e) {\n getProps().onHoverEnd?.(e);\n },\n onHoverChange(isHovering) {\n getProps().onHoverChange?.(isHovering);\n },\n });\n\n const { isFocusVisible, focusProps } = createFocusRing();\n\n const labelId = `${getProps().key}-label`;\n const descriptionId = `${getProps().key}-desc`;\n\n return {\n get optionProps() {\n const key = getProps().key;\n const selectionMode = state.selectionMode();\n const ariaLabel = getProps()[\"aria-label\"];\n\n // When the listbox is virtualized the DOM only holds the windowed rows, so\n // (mirroring @react-aria/listbox useOption) publish the item's absolute\n // position in the full collection for assistive tech. Only under\n // virtualization — an un-windowed listbox exposes every row and the browser\n // derives posinset/setsize itself.\n let ariaPosInSet: number | undefined;\n let ariaSetSize: number | undefined;\n if (isVirtualized()) {\n const index = Number(state.collection().getItem(key)?.index);\n ariaPosInSet = Number.isNaN(index) ? undefined : index + 1;\n ariaSetSize = getItemCount(state.collection());\n }\n\n return mergeProps(\n selectableItem.itemProps as Record<string, unknown>,\n hoverProps as Record<string, unknown>,\n focusProps as Record<string, unknown>,\n {\n role: \"option\",\n id: optionId(),\n \"aria-selected\": selectionMode !== \"none\" ? selectableItem.isSelected() : undefined,\n \"aria-disabled\": selectableItem.isDisabled() || undefined,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": !ariaLabel ? labelId : undefined,\n \"aria-describedby\": descriptionId,\n \"aria-posinset\": ariaPosInSet,\n \"aria-setsize\": ariaSetSize,\n \"data-selected\": selectableItem.isSelected() || undefined,\n \"data-focused\": selectableItem.isFocused() || undefined,\n \"data-focus-visible\": (selectableItem.isFocused() && isFocusVisible()) || undefined,\n \"data-pressed\": selectableItem.isPressed() || undefined,\n \"data-disabled\": selectableItem.isDisabled() || undefined,\n \"data-hovered\": isHovered() || undefined,\n } as Record<string, unknown>,\n ) as JSX.HTMLAttributes<HTMLElement>;\n },\n labelProps: {\n id: labelId,\n },\n descriptionProps: {\n id: descriptionId,\n },\n isSelected: selectableItem.isSelected,\n isFocused: selectableItem.isFocused,\n isFocusVisible: () => selectableItem.isFocused() && isFocusVisible(),\n isPressed: selectableItem.isPressed,\n isHovered,\n isDisabled: selectableItem.isDisabled,\n allowsSelection: selectableItem.allowsSelection,\n hasAction: selectableItem.hasAction,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"listbox.jsx","names":["createId"],"sources":["../../src/listbox/createListBox.ts","../../src/listbox/createOption.ts"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/listbox/useListBox.ts\n\n/**\n * Provides the behavior and accessibility implementation for a listbox component.\n * A listbox displays a list of options and allows a user to select one or more of them.\n * Based on @react-aria/listbox useListBox.\n */\n\nimport { createTrackedEffect } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createFocusWithin } from \"../interactions/createFocusWithin\";\nimport { createLabel } from \"../label/createLabel\";\nimport { createSelectableList } from \"../selection/createSelectableList\";\nimport { filterDOMProps } from \"../utils/filterDOMProps\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { createId } from \"../ssr\";\nimport { access, type MaybeAccessor } from \"../utils/reactivity\";\nimport { isDevEnv } from \"../utils/env\";\nimport type { ListState, Key } from \"@proyecto-viviana/solid-stately\";\n\nexport interface AriaListBoxProps {\n /** An ID for the listbox. */\n id?: string;\n /** Whether the listbox is disabled. */\n isDisabled?: boolean;\n /** The label for the listbox. */\n label?: JSX.Element;\n /** An accessible label for the listbox when no visible label is provided. */\n \"aria-label\"?: string;\n /** The ID of an element that labels the listbox. */\n \"aria-labelledby\"?: string;\n /** The ID of an element that describes the listbox. */\n \"aria-describedby\"?: string;\n /** Handler called when focus moves into the listbox. */\n onFocus?: (e: FocusEvent) => void;\n /** Handler called when focus moves out of the listbox. */\n onBlur?: (e: FocusEvent) => void;\n /** Handler called when the focus state changes. */\n onFocusChange?: (isFocused: boolean) => void;\n /** Handler called when an item is activated (pressed). */\n onAction?: (key: Key) => void;\n /** Whether focus should automatically wrap around. */\n shouldFocusWrap?: boolean;\n /** Whether selection should occur on press up. */\n shouldSelectOnPressUp?: boolean;\n /** Whether to focus items on hover. */\n shouldFocusOnHover?: boolean;\n /** Whether the listbox uses virtual scrolling. */\n isVirtualized?: boolean;\n /** Whether options should use virtual focus instead of receiving DOM focus. */\n shouldUseVirtualFocus?: boolean;\n /** The behavior of links in the collection. */\n linkBehavior?: \"action\" | \"selection\" | \"override\" | \"none\";\n /**\n * Unstable upstream override that forces items with actions to prefer\n * selection or action behavior.\n */\n UNSTABLE_itemBehavior?: \"selection\" | \"action\";\n /**\n * Whether keyboard focus movement should also update selection in single selection mode.\n * @default true\n */\n shouldSelectOnFocus?: boolean;\n /** Whether type-to-select is disabled. @default false */\n disallowTypeAhead?: boolean;\n /**\n * The primary orientation of the items. In a horizontal listbox the Left/Right\n * arrows navigate the list (the block-axis Up/Down arrows still work); in a\n * vertical listbox Left/Right are no-ops, matching upstream's\n * `ListKeyboardDelegate` for a `stack` layout.\n * @default \"vertical\"\n */\n orientation?: \"vertical\" | \"horizontal\";\n /**\n * The text direction, used to resolve the horizontal navigation axis. In a\n * horizontal listbox, RTL flips Left/Right (Right=previous, Left=next).\n * @default \"ltr\"\n */\n direction?: \"ltr\" | \"rtl\";\n /**\n * Whether pressing the Escape key should clear selection in the listbox or not.\n * Most experiences should not modify this option as it eliminates a keyboard\n * user's ability to easily clear selection. Only use if the escape key is being\n * handled externally or should not trigger selection clearing contextually.\n * @default \"clearSelection\"\n */\n escapeKeyBehavior?: \"clearSelection\" | \"none\";\n /**\n * Whether Escape and other collection-level interactions may clear the\n * selection. This is an ARIA behavior override and does not change whether\n * an option press may toggle the final selected item.\n */\n disallowEmptySelection?: boolean;\n}\n\nexport interface ListBoxAria {\n /** Props for the listbox element. */\n listBoxProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the listbox's label element (if any). */\n labelProps: JSX.HTMLAttributes<HTMLElement>;\n}\n\n// Shared data between listbox and options\nconst listBoxData = new WeakMap<object, ListBoxData>();\n\ninterface ListBoxData {\n id: string;\n onAction?: (key: Key) => void;\n shouldSelectOnPressUp?: boolean;\n shouldFocusOnHover?: boolean;\n isVirtualized?: boolean;\n shouldUseVirtualFocus?: boolean;\n isDisabled?: boolean;\n linkBehavior?: \"action\" | \"selection\" | \"override\" | \"none\";\n UNSTABLE_itemBehavior?: \"selection\" | \"action\";\n}\n\nexport function getListBoxData(state: ListState): ListBoxData | undefined {\n return listBoxData.get(state);\n}\n\n/**\n * Provides the behavior and accessibility implementation for a listbox component.\n * A listbox displays a list of options and allows a user to select one or more of them.\n */\nexport function createListBox<T>(\n props: MaybeAccessor<AriaListBoxProps>,\n state: ListState<T>,\n ref: () => HTMLElement | null = () => null,\n): ListBoxAria {\n const getProps = () => access(props);\n const fallbackId = createId();\n const id = () => getProps().id ?? fallbackId;\n\n // Development-time warning for missing accessibility labels\n if (isDevEnv()) {\n const p = getProps();\n if (!p.label && !p[\"aria-label\"] && !p[\"aria-labelledby\"]) {\n console.warn(\n \"[solidaria] A ListBox requires an aria-label or aria-labelledby attribute for accessibility.\",\n );\n }\n }\n\n // Filter DOM props\n const domProps = () =>\n filterDOMProps(getProps() as unknown as Record<string, unknown>, { labelable: true });\n\n const updateSharedData = () => {\n const p = getProps();\n const selectionBehavior = state.selectionBehavior();\n let linkBehavior = p.linkBehavior ?? (selectionBehavior === \"replace\" ? \"action\" : \"override\");\n if (selectionBehavior === \"toggle\" && linkBehavior === \"action\") {\n linkBehavior = \"override\";\n }\n\n listBoxData.set(state, {\n id: id(),\n onAction: p.onAction,\n shouldSelectOnPressUp: p.shouldSelectOnPressUp,\n shouldFocusOnHover: p.shouldFocusOnHover,\n isVirtualized: p.isVirtualized,\n shouldUseVirtualFocus: p.shouldUseVirtualFocus,\n isDisabled: p.isDisabled,\n linkBehavior,\n UNSTABLE_itemBehavior: p.UNSTABLE_itemBehavior,\n });\n };\n\n // Ensure options created in the same render pass can read parent metadata.\n updateSharedData();\n\n // Share data with child options\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n updateSharedData();\n\n _s2Cleanups.push(() => {\n listBoxData.delete(state);\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n // Handle focus within\n const { focusWithinProps } = createFocusWithin({\n onFocusWithin: (e) => getProps().onFocus?.(e),\n onBlurWithin: (e) => getProps().onBlur?.(e),\n onFocusWithinChange: (isFocused) => getProps().onFocusChange?.(isFocused),\n });\n\n // Label handling\n const labelAria = createLabel({\n get id() {\n return id();\n },\n get label() {\n return getProps().label;\n },\n get \"aria-label\"() {\n return getProps()[\"aria-label\"];\n },\n get \"aria-labelledby\"() {\n return getProps()[\"aria-labelledby\"];\n },\n labelElementType: \"span\",\n });\n\n const selectableList = createSelectableList<T>({\n selectionManager: state.selectionManager,\n ref,\n get shouldFocusWrap() {\n return getProps().shouldFocusWrap;\n },\n get disallowEmptySelection() {\n return getProps().disallowEmptySelection ?? state.disallowEmptySelection();\n },\n get escapeKeyBehavior() {\n return getProps().escapeKeyBehavior;\n },\n get selectOnFocus() {\n return getProps().shouldSelectOnFocus;\n },\n get disallowTypeAhead() {\n return getProps().disallowTypeAhead;\n },\n get shouldUseVirtualFocus() {\n return getProps().shouldUseVirtualFocus;\n },\n get isVirtualized() {\n return getProps().isVirtualized;\n },\n get linkBehavior() {\n const p = getProps();\n const selectionBehavior = state.selectionBehavior();\n const behavior = p.linkBehavior ?? (selectionBehavior === \"replace\" ? \"action\" : \"override\");\n if (behavior === \"none\") {\n // Collection navigation has no \"none\" mode. Treat links as actions here;\n // createOption still reads \"none\" from the parent listbox metadata.\n return \"action\";\n }\n return selectionBehavior === \"toggle\" && behavior === \"action\" ? \"override\" : behavior;\n },\n get orientation() {\n return getProps().orientation;\n },\n get direction() {\n return getProps().direction ?? \"ltr\";\n },\n });\n\n return {\n get labelProps() {\n return labelAria.labelProps as JSX.HTMLAttributes<HTMLElement>;\n },\n get listBoxProps() {\n const p = getProps();\n const selectionMode = state.selectionMode();\n return mergeProps(\n domProps(),\n focusWithinProps as Record<string, unknown>,\n labelAria.fieldProps as Record<string, unknown>,\n p.isDisabled === true ? {} : (selectableList.listProps as Record<string, unknown>),\n {\n role: \"listbox\",\n \"aria-orientation\": p.orientation ?? \"vertical\",\n \"aria-disabled\": p.isDisabled === true ? \"true\" : undefined,\n \"aria-multiselectable\": selectionMode === \"multiple\" ? \"true\" : undefined,\n },\n ) as JSX.HTMLAttributes<HTMLElement>;\n },\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/listbox/useOption.ts\n\n/**\n * Provides the behavior and accessibility implementation for an option in a listbox.\n * Based on @react-aria/listbox useOption.\n */\n\nimport type { Accessor } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { createHover, type HoverEvents } from \"../interactions/createHover\";\nimport { isFocusVisible } from \"../interactions/createInteractionModality\";\nimport { mergeProps } from \"../utils/mergeProps\";\nimport { access, type MaybeAccessor } from \"../utils/reactivity\";\nimport { createSlotId } from \"../ssr\";\nimport { getListBoxData } from \"./createListBox\";\nimport { getItemCount, type ListState, type Key } from \"@proyecto-viviana/solid-stately\";\nimport { createSelectableItem, type SelectableItemState } from \"../selection/createSelectableItem\";\n\nexport interface AriaOptionProps {\n /** The unique key for the option. */\n key: Key;\n /** Optional DOM id for the option element. Defaults to the key. */\n optionId?: string;\n /** Whether the option is disabled. */\n isDisabled?: boolean;\n /** An accessible label for the option. */\n \"aria-label\"?: string;\n /** Whether selection should occur on press up. */\n shouldSelectOnPressUp?: boolean;\n /** Whether to focus the option on hover. */\n shouldFocusOnHover?: boolean;\n /** Whether the option should use virtual focus instead of receiving DOM focus. */\n shouldUseVirtualFocus?: boolean;\n /** Whether the option is contained in a virtual scrolling listbox. */\n isVirtualized?: boolean;\n /**\n * Function to focus the option, overriding the default DOM focus.\n * Forwarded into `createSelectableItem` (`useSelectableItem` `focus`).\n */\n focus?: () => void;\n /** Whether press-up may occur without the press starting on this option. */\n allowsDifferentPressOrigin?: boolean;\n /** Handler called when hover starts. */\n onHoverStart?: HoverEvents[\"onHoverStart\"];\n /** Handler called when hover ends. */\n onHoverEnd?: HoverEvents[\"onHoverEnd\"];\n /** Handler called when hover state changes. */\n onHoverChange?: HoverEvents[\"onHoverChange\"];\n /** Handler called when the option is activated. */\n onAction?: () => void;\n}\n\nexport interface OptionAria {\n /** Props for the option element. */\n optionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the label text inside the option. */\n labelProps: JSX.HTMLAttributes<HTMLElement>;\n /** Props for the description text inside the option. */\n descriptionProps: JSX.HTMLAttributes<HTMLElement>;\n /** Whether the option is currently selected. */\n isSelected: Accessor<boolean>;\n /** Whether the option is currently focused. */\n isFocused: Accessor<boolean>;\n /** Whether the option is keyboard focused. */\n isFocusVisible: Accessor<boolean>;\n /** Whether the option is currently pressed. */\n isPressed: Accessor<boolean>;\n /** Whether the option is currently hovered. */\n isHovered: Accessor<boolean>;\n /** Whether the option is disabled. */\n isDisabled: Accessor<boolean>;\n /** Whether the option may be selected. */\n allowsSelection: Accessor<boolean>;\n /** Whether the option has an action. */\n hasAction: Accessor<boolean>;\n}\n\n/**\n * Provides the behavior and accessibility implementation for an option in a listbox.\n */\nexport function createOption<T>(\n props: MaybeAccessor<AriaOptionProps>,\n state: ListState<T>,\n _ref?: () => HTMLElement | null,\n): OptionAria {\n const getProps = () => access(props);\n\n const getData = () => getListBoxData(state);\n\n const shouldSelectOnPressUp = () => {\n return getProps().shouldSelectOnPressUp ?? getData()?.shouldSelectOnPressUp;\n };\n\n const shouldFocusOnHover = () => {\n return getProps().shouldFocusOnHover ?? getData()?.shouldFocusOnHover ?? false;\n };\n\n const shouldUseVirtualFocus = () => {\n return getProps().shouldUseVirtualFocus ?? getData()?.shouldUseVirtualFocus ?? false;\n };\n\n const isVirtualized = () => {\n return getProps().isVirtualized ?? getData()?.isVirtualized ?? false;\n };\n\n const allowsDifferentPressOrigin = () => {\n return (\n getProps().allowsDifferentPressOrigin ??\n Boolean(shouldSelectOnPressUp() && shouldFocusOnHover())\n );\n };\n\n const isDisabledProp = () => {\n return Boolean(getData()?.isDisabled || getProps().isDisabled);\n };\n\n const optionId = () => getProps().optionId ?? String(getProps().key);\n\n const selectableItem = createSelectableItem<T>(\n () => {\n const key = getProps().key;\n const hasAction = getProps().onAction != null || getData()?.onAction != null;\n\n return {\n key,\n id: optionId(),\n isDisabled: isDisabledProp(),\n shouldSelectOnPressUp: shouldSelectOnPressUp(),\n allowsDifferentPressOrigin: allowsDifferentPressOrigin(),\n isVirtualized: isVirtualized(),\n shouldUseVirtualFocus: shouldUseVirtualFocus(),\n focus: getProps().focus,\n onAction: hasAction\n ? () => {\n getProps().onAction?.();\n getData()?.onAction?.(key);\n }\n : undefined,\n linkBehavior: getData()?.linkBehavior,\n UNSTABLE_itemBehavior: getData()?.UNSTABLE_itemBehavior,\n };\n },\n state as SelectableItemState<T>,\n () => _ref?.() ?? null,\n );\n\n const { hoverProps, isHovered } = createHover({\n get isDisabled() {\n return selectableItem.isDisabled();\n },\n onHoverStart(e) {\n // useOption.ts:158. Hover focus only while the global modality is pointer.\n if (shouldFocusOnHover() && !isFocusVisible()) {\n state.selectionManager.setFocused(true);\n state.selectionManager.setFocusedKey(getProps().key);\n }\n getProps().onHoverStart?.(e);\n },\n onHoverEnd(e) {\n getProps().onHoverEnd?.(e);\n },\n onHoverChange(isHovering) {\n getProps().onHoverChange?.(isHovering);\n },\n });\n\n // useOption.ts:182. selectionManager.isFocused is the boolean getter that\n // reads the selection signal, not a function. Link behavior stays inside\n // createSelectableItem's itemProps; useOption's separate linkProps merge\n // has no second object here.\n const optionIsFocusVisible = () =>\n selectableItem.isFocused() && state.selectionManager.isFocused && isFocusVisible();\n\n // Mirror useOption: `useSlotId()` for the label and description slots so\n // `aria-labelledby` / `aria-describedby` resolve only when an element with\n // that id is actually in the DOM. A generated-but-unrendered id is the\n // `(missing)` oracle failure on ComboBox/Picker options.\n const labelId = createSlotId();\n const descriptionId = createSlotId();\n\n return {\n get optionProps() {\n const key = getProps().key;\n const selectionMode = state.selectionMode();\n const ariaLabel = getProps()[\"aria-label\"];\n\n // When the listbox is virtualized the DOM only holds the windowed rows, so\n // (mirroring @react-aria/listbox useOption) publish the item's absolute\n // position in the full collection for assistive tech. Only under\n // virtualization — an un-windowed listbox exposes every row and the browser\n // derives posinset/setsize itself.\n let ariaPosInSet: number | undefined;\n let ariaSetSize: number | undefined;\n if (isVirtualized()) {\n const index = Number(state.collection().getItem(key)?.index);\n ariaPosInSet = Number.isNaN(index) ? undefined : index + 1;\n ariaSetSize = getItemCount(state.collection());\n }\n\n return mergeProps(\n selectableItem.itemProps as Record<string, unknown>,\n hoverProps as Record<string, unknown>,\n {\n role: \"option\",\n id: optionId(),\n \"aria-selected\": selectionMode !== \"none\" ? selectableItem.isSelected() : undefined,\n \"aria-disabled\": selectableItem.isDisabled() || undefined,\n \"aria-label\": ariaLabel,\n // RAC useOption.ts:124-126 always publishes the resolved slot ids\n // (undefined when the slot was not rendered) — it does not drop\n // labelledby just because aria-label is also set.\n \"aria-labelledby\": labelId(),\n \"aria-describedby\": descriptionId(),\n \"aria-posinset\": ariaPosInSet,\n \"aria-setsize\": ariaSetSize,\n \"data-selected\": selectableItem.isSelected() || undefined,\n \"data-focused\": selectableItem.isFocused() || undefined,\n \"data-focus-visible\": optionIsFocusVisible() || undefined,\n \"data-pressed\": selectableItem.isPressed() || undefined,\n \"data-disabled\": selectableItem.isDisabled() || undefined,\n \"data-hovered\": isHovered() || undefined,\n } as Record<string, unknown>,\n ) as JSX.HTMLAttributes<HTMLElement>;\n },\n // Getters so the slot id stays reactive: `createSlotId` may clear the id\n // after mount if no element registered it.\n get labelProps() {\n return { id: labelId() };\n },\n get descriptionProps() {\n return { id: descriptionId() };\n },\n isSelected: selectableItem.isSelected,\n isFocused: selectableItem.isFocused,\n isFocusVisible: optionIsFocusVisible,\n isPressed: selectableItem.isPressed,\n isHovered,\n isDisabled: selectableItem.isDisabled,\n allowsSelection: selectableItem.allowsSelection,\n hasAction: selectableItem.hasAction,\n };\n}\n"],"mappings":"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"}
|
package/dist/_chunk/locale.js
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/i18n/useDefaultLocale.ts
|
|
13
|
+
/*
|
|
14
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
15
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
16
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
17
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
*
|
|
19
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
20
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
21
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
22
|
+
* governing permissions and limitations under the License.
|
|
23
|
+
*/
|
|
24
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/i18n/utils.ts
|
|
25
|
+
import { n as useContextOptional } from "./owner.js";
|
|
26
|
+
import { t as access } from "./reactivity.js";
|
|
27
|
+
import { createContext, createMemo, createSignal, createTrackedEffect } from "solid-js";
|
|
28
|
+
import { createComponent } from "@solidjs/web";
|
|
3
29
|
//#region src/i18n/utils.ts
|
|
4
30
|
/**
|
|
5
31
|
* i18n utilities for solidaria
|
|
@@ -8,7 +34,7 @@ import { createComponent } from "solid-js/web";
|
|
|
8
34
|
*
|
|
9
35
|
* Port of @react-aria/i18n utils.
|
|
10
36
|
*/
|
|
11
|
-
const RTL_SCRIPTS = new Set([
|
|
37
|
+
const RTL_SCRIPTS = /* @__PURE__ */ new Set([
|
|
12
38
|
"Arab",
|
|
13
39
|
"Syrc",
|
|
14
40
|
"Samr",
|
|
@@ -20,7 +46,7 @@ const RTL_SCRIPTS = new Set([
|
|
|
20
46
|
"Rohg",
|
|
21
47
|
"Hebr"
|
|
22
48
|
]);
|
|
23
|
-
const RTL_LANGS = new Set([
|
|
49
|
+
const RTL_LANGS = /* @__PURE__ */ new Set([
|
|
24
50
|
"ae",
|
|
25
51
|
"ar",
|
|
26
52
|
"arc",
|
|
@@ -94,7 +120,22 @@ function updateLocale() {
|
|
|
94
120
|
currentLocale = getDefaultLocale();
|
|
95
121
|
for (const listener of listeners) listener(currentLocale);
|
|
96
122
|
}
|
|
97
|
-
const
|
|
123
|
+
const i18nContextSymbol = Symbol.for("solidaria.i18n.context");
|
|
124
|
+
function getI18nContext() {
|
|
125
|
+
const registry = globalThis;
|
|
126
|
+
let contexts = registry[i18nContextSymbol];
|
|
127
|
+
if (!(contexts instanceof WeakMap)) {
|
|
128
|
+
contexts = /* @__PURE__ */ new WeakMap();
|
|
129
|
+
registry[i18nContextSymbol] = contexts;
|
|
130
|
+
}
|
|
131
|
+
let context = contexts.get(createContext);
|
|
132
|
+
if (!context) {
|
|
133
|
+
context = createContext(null);
|
|
134
|
+
contexts.set(createContext, context);
|
|
135
|
+
}
|
|
136
|
+
return context;
|
|
137
|
+
}
|
|
138
|
+
const I18nContext = getI18nContext();
|
|
98
139
|
/**
|
|
99
140
|
* Returns the current browser/system locale, and updates when it changes.
|
|
100
141
|
*
|
|
@@ -108,14 +149,18 @@ const I18nContext = createContext(null);
|
|
|
108
149
|
function createDefaultLocale() {
|
|
109
150
|
if (!currentLocale) currentLocale = getDefaultLocale();
|
|
110
151
|
const [locale, setLocale] = createSignal(currentLocale);
|
|
111
|
-
|
|
152
|
+
createTrackedEffect(() => {
|
|
153
|
+
const _s2Cleanups = [];
|
|
112
154
|
if (typeof window === "undefined") return;
|
|
113
155
|
if (listeners.size === 0) window.addEventListener("languagechange", updateLocale);
|
|
114
156
|
listeners.add(setLocale);
|
|
115
|
-
|
|
157
|
+
_s2Cleanups.push(() => {
|
|
116
158
|
listeners.delete(setLocale);
|
|
117
159
|
if (listeners.size === 0) window.removeEventListener("languagechange", updateLocale);
|
|
118
160
|
});
|
|
161
|
+
return () => {
|
|
162
|
+
for (const c of _s2Cleanups) c();
|
|
163
|
+
};
|
|
119
164
|
});
|
|
120
165
|
return locale;
|
|
121
166
|
}
|
|
@@ -131,7 +176,7 @@ function createDefaultLocale() {
|
|
|
131
176
|
* ```
|
|
132
177
|
*/
|
|
133
178
|
function useLocale() {
|
|
134
|
-
const context =
|
|
179
|
+
const context = useContextOptional(I18nContext);
|
|
135
180
|
const defaultLocale = createDefaultLocale();
|
|
136
181
|
return context || defaultLocale;
|
|
137
182
|
}
|
|
@@ -154,13 +199,14 @@ function useLocale() {
|
|
|
154
199
|
function I18nProvider(props) {
|
|
155
200
|
const defaultLocale = createDefaultLocale();
|
|
156
201
|
const locale = createMemo(() => {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
202
|
+
const localeString = access(props.locale);
|
|
203
|
+
if (localeString) return {
|
|
204
|
+
locale: localeString,
|
|
205
|
+
direction: isRTL(localeString) ? "rtl" : "ltr"
|
|
160
206
|
};
|
|
161
207
|
return defaultLocale();
|
|
162
208
|
});
|
|
163
|
-
return createComponent(I18nContext
|
|
209
|
+
return createComponent(I18nContext, {
|
|
164
210
|
value: locale,
|
|
165
211
|
get children() {
|
|
166
212
|
return props.children;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.js","names":["Accessor","JSX","ParentProps","createContext","createEffect","createMemo","createSignal","onCleanup","useContext","isRTL","Direction","Locale","locale","direction","I18nProviderProps","localeSymbol","Symbol","for","currentLocale","listeners","Set","getDefaultLocale","window","Record","navigator","language","userLanguage","Intl","DateTimeFormat","supportedLocalesOf","updateLocale","listener","I18nContext","createDefaultLocale","setLocale","size","addEventListener","add","delete","removeEventListener","useLocale","context","defaultLocale","I18nProvider","props","Element","_$createComponent","Provider","value","children"],"sources":["../../src/i18n/utils.ts","../../src/i18n/locale.tsx"],"sourcesContent":["/**\n * i18n utilities for solidaria\n *\n * RTL detection and locale utilities.\n *\n * Port of @react-aria/i18n utils.\n */\n\n// https://en.wikipedia.org/wiki/Right-to-left\nconst RTL_SCRIPTS = new Set([\n \"Arab\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\",\n]);\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n]);\n\n/**\n * Determines if a locale is read right to left.\n * Uses Intl.Locale API when available for accurate detection.\n */\nexport function isRTL(localeString: string): boolean {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n if (typeof Intl !== \"undefined\" && Intl.Locale) {\n try {\n const locale = new Intl.Locale(localeString).maximize();\n\n // Use the text info object to get the direction if possible.\n // getTextInfo() was implemented as a property by some browsers before it was standardized as a function.\n const localeAny = locale as unknown as {\n getTextInfo?: () => { direction: string };\n textInfo?: { direction: string };\n };\n const textInfo =\n typeof localeAny.getTextInfo === \"function\" ? localeAny.getTextInfo() : localeAny.textInfo;\n\n if (textInfo) {\n return textInfo.direction === \"rtl\";\n }\n\n // Fallback: guess using the script.\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script);\n }\n } catch {\n // Fall through to language-based detection\n }\n }\n\n // If not, just guess by the language (first part of the locale)\n const lang = localeString.split(\"-\")[0];\n return RTL_LANGS.has(lang);\n}\n\n/**\n * Creates a cache key for formatter options.\n */\nexport function createCacheKey(locale: string, options?: Record<string, unknown>): string {\n if (!options) {\n return locale;\n }\n return (\n locale +\n Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n );\n}\n","/**\n * Locale context and provider for solidaria\n *\n * Provides locale and text direction to the component tree.\n *\n * Port of @react-aria/i18n context and useDefaultLocale.\n */\n\nimport {\n type Accessor,\n type JSX,\n type ParentProps,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n onCleanup,\n useContext,\n} from \"solid-js\";\nimport { isRTL } from \"./utils\";\n\n/** Text direction: left-to-right or right-to-left. */\nexport type Direction = \"ltr\" | \"rtl\";\n\n/** Locale information including language code and text direction. */\nexport interface Locale {\n /** The BCP47 language code for the locale (e.g., 'en-US', 'ar-SA'). */\n locale: string;\n /** The writing direction for the locale. */\n direction: Direction;\n}\n\nexport interface I18nProviderProps extends ParentProps {\n /** The locale to apply to the children. If not provided, uses browser default. */\n locale?: string;\n}\n\n// Symbol for server-provided locale\nconst localeSymbol = Symbol.for(\"solidaria.i18n.locale\");\n\nlet currentLocale: Locale | null = null;\nconst listeners = new Set<(locale: Locale) => void>();\n\n/**\n * Gets the default locale from the browser/system.\n */\nexport function getDefaultLocale(): Locale {\n let locale =\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<symbol, string>)[localeSymbol]) ||\n (typeof navigator !== \"undefined\" &&\n (navigator.language || (navigator as unknown as { userLanguage?: string }).userLanguage)) ||\n \"en-US\";\n\n // Validate the locale is supported\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale]);\n } catch {\n locale = \"en-US\";\n }\n\n return {\n locale,\n direction: isRTL(locale) ? \"rtl\" : \"ltr\",\n };\n}\n\nfunction updateLocale(): void {\n currentLocale = getDefaultLocale();\n for (const listener of listeners) {\n listener(currentLocale);\n }\n}\n\nconst I18nContext = createContext<Accessor<Locale> | null>(null);\n\n/**\n * Returns the current browser/system locale, and updates when it changes.\n *\n * @example\n * ```tsx\n * const locale = createDefaultLocale();\n * console.log(locale().locale); // 'en-US'\n * console.log(locale().direction); // 'ltr'\n * ```\n */\nexport function createDefaultLocale(): Accessor<Locale> {\n if (!currentLocale) {\n currentLocale = getDefaultLocale();\n }\n\n const [locale, setLocale] = createSignal<Locale>(currentLocale);\n\n createEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n if (listeners.size === 0) {\n window.addEventListener(\"languagechange\", updateLocale);\n }\n\n listeners.add(setLocale);\n\n onCleanup(() => {\n listeners.delete(setLocale);\n if (listeners.size === 0) {\n window.removeEventListener(\"languagechange\", updateLocale);\n }\n });\n });\n\n return locale;\n}\n\n/**\n * Returns the current locale and layout direction from context or browser default.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const locale = useLocale();\n * return <div dir={locale().direction}>{locale().locale}</div>;\n * }\n * ```\n */\nexport function useLocale(): Accessor<Locale> {\n const context = useContext(I18nContext);\n const defaultLocale = createDefaultLocale();\n return context || defaultLocale;\n}\n\n/**\n * Provides the locale for the application to all child components.\n *\n * @example\n * ```tsx\n * // Use browser default locale\n * <I18nProvider>\n * <App />\n * </I18nProvider>\n *\n * // Override with specific locale\n * <I18nProvider locale=\"ar-SA\">\n * <App /> // Will have RTL direction\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider(props: I18nProviderProps): JSX.Element {\n const defaultLocale = createDefaultLocale();\n\n const locale = createMemo<Locale>(() => {\n if (props.locale) {\n return {\n locale: props.locale,\n direction: isRTL(props.locale) ? \"rtl\" : \"ltr\",\n };\n }\n return defaultLocale();\n });\n\n return <I18nContext.Provider value={locale}>{props.children}</I18nContext.Provider>;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"locale.js","names":["<I18nContext value={locale}>{props.children}</I18nContext>","value={locale}"],"sources":["../../src/i18n/utils.ts","../../src/i18n/locale.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/i18n/utils.ts\n\n/**\n * i18n utilities for solidaria\n *\n * RTL detection and locale utilities.\n *\n * Port of @react-aria/i18n utils.\n */\n\n// https://en.wikipedia.org/wiki/Right-to-left\nconst RTL_SCRIPTS = new Set([\n \"Arab\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\",\n]);\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n]);\n\n/**\n * Determines if a locale is read right to left.\n * Uses Intl.Locale API when available for accurate detection.\n */\nexport function isRTL(localeString: string): boolean {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n if (typeof Intl !== \"undefined\" && Intl.Locale) {\n try {\n const locale = new Intl.Locale(localeString).maximize();\n\n // Use the text info object to get the direction if possible.\n // getTextInfo() was implemented as a property by some browsers before it was standardized as a function.\n const localeAny = locale as unknown as {\n getTextInfo?: () => { direction: string };\n textInfo?: { direction: string };\n };\n const textInfo =\n typeof localeAny.getTextInfo === \"function\" ? localeAny.getTextInfo() : localeAny.textInfo;\n\n if (textInfo) {\n return textInfo.direction === \"rtl\";\n }\n\n // Fallback: guess using the script.\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script);\n }\n } catch {\n // Fall through to language-based detection\n }\n }\n\n // If not, just guess by the language (first part of the locale)\n const lang = localeString.split(\"-\")[0];\n return RTL_LANGS.has(lang);\n}\n\n/**\n * Creates a cache key for formatter options.\n */\nexport function createCacheKey(locale: string, options?: Record<string, unknown>): string {\n if (!options) {\n return locale;\n }\n return (\n locale +\n Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/i18n/useDefaultLocale.ts\n\n/**\n * Locale context and provider for solidaria\n *\n * Provides locale and text direction to the component tree.\n *\n * Port of @react-aria/i18n context and useDefaultLocale.\n */\n\nimport { useContextOptional } from \"../utils/owner\";\nimport { createContext, createMemo, createSignal, createTrackedEffect } from \"solid-js\";\nimport type { Accessor, Context, ParentProps } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { isRTL } from \"./utils\";\nimport { access } from \"../utils/reactivity\";\n\n/** Text direction: left-to-right or right-to-left. */\nexport type Direction = \"ltr\" | \"rtl\";\n\n/** Locale information including language code and text direction. */\nexport interface Locale {\n /** The BCP47 language code for the locale (e.g., 'en-US', 'ar-SA'). */\n locale: string;\n /** The writing direction for the locale. */\n direction: Direction;\n}\n\nexport interface I18nProviderProps extends ParentProps {\n /** The locale to apply to the children. If not provided, uses browser default. */\n locale?: string;\n}\n\n// Symbol for server-provided locale\nconst localeSymbol = Symbol.for(\"solidaria.i18n.locale\");\n\nlet currentLocale: Locale | null = null;\nconst listeners = new Set<(locale: Locale) => void>();\n\n/**\n * Gets the default locale from the browser/system.\n */\nexport function getDefaultLocale(): Locale {\n let locale =\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<symbol, string>)[localeSymbol]) ||\n (typeof navigator !== \"undefined\" &&\n (navigator.language || (navigator as unknown as { userLanguage?: string }).userLanguage)) ||\n \"en-US\";\n\n // Validate the locale is supported\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale]);\n } catch {\n locale = \"en-US\";\n }\n\n return {\n locale,\n direction: isRTL(locale) ? \"rtl\" : \"ltr\",\n };\n}\n\nfunction updateLocale(): void {\n currentLocale = getDefaultLocale();\n for (const listener of listeners) {\n listener(currentLocale);\n }\n}\n\n// Share a context across module graphs only when they use the same runtime.\n// Solid 2 contexts are callable providers which retain their runtime's owner\n// state; a dev-server restart must not reuse a prior runtime's provider.\nconst i18nContextSymbol = Symbol.for(\"solidaria.i18n.context\");\n\ntype I18nContextValue = Accessor<Locale> | null;\n\nfunction getI18nContext(): Context<I18nContextValue> {\n const registry = globalThis as unknown as Record<\n symbol,\n WeakMap<typeof createContext, Context<I18nContextValue>> | undefined\n >;\n let contexts = registry[i18nContextSymbol];\n // Also replace the legacy single-context cache during an in-process upgrade.\n if (!(contexts instanceof WeakMap)) {\n contexts = new WeakMap();\n registry[i18nContextSymbol] = contexts;\n }\n let context = contexts.get(createContext);\n if (!context) {\n context = createContext<I18nContextValue>(null);\n contexts.set(createContext, context);\n }\n return context;\n}\n\nconst I18nContext = getI18nContext();\n\n/**\n * Returns the current browser/system locale, and updates when it changes.\n *\n * @example\n * ```tsx\n * const locale = createDefaultLocale();\n * console.log(locale().locale); // 'en-US'\n * console.log(locale().direction); // 'ltr'\n * ```\n */\nexport function createDefaultLocale(): Accessor<Locale> {\n if (!currentLocale) {\n currentLocale = getDefaultLocale();\n }\n\n const [locale, setLocale] = createSignal<Locale>(currentLocale);\n\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n if (typeof window === \"undefined\") {\n return;\n }\n\n if (listeners.size === 0) {\n window.addEventListener(\"languagechange\", updateLocale);\n }\n\n listeners.add(setLocale);\n\n _s2Cleanups.push(() => {\n listeners.delete(setLocale);\n if (listeners.size === 0) {\n window.removeEventListener(\"languagechange\", updateLocale);\n }\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n return locale;\n}\n\n/**\n * Returns the current locale and layout direction from context or browser default.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const locale = useLocale();\n * return <div dir={locale().direction}>{locale().locale}</div>;\n * }\n * ```\n */\nexport function useLocale(): Accessor<Locale> {\n const context = useContextOptional(I18nContext);\n const defaultLocale = createDefaultLocale();\n return context || defaultLocale;\n}\n\n/**\n * Provides the locale for the application to all child components.\n *\n * @example\n * ```tsx\n * // Use browser default locale\n * <I18nProvider>\n * <App />\n * </I18nProvider>\n *\n * // Override with specific locale\n * <I18nProvider locale=\"ar-SA\">\n * <App /> // Will have RTL direction\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider(props: I18nProviderProps): JSX.Element {\n const defaultLocale = createDefaultLocale();\n\n const locale = createMemo<Locale>(() => {\n const localeString = access(props.locale);\n if (localeString) {\n return {\n locale: localeString,\n direction: isRTL(localeString) ? \"rtl\" : \"ltr\",\n };\n }\n return defaultLocale();\n });\n\n return <I18nContext value={locale}>{props.children}</I18nContext>;\n}\n"],"mappings":"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"}
|
package/dist/_chunk/locale.jsx
CHANGED
|
@@ -1,4 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
3
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
+
*
|
|
7
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
+
* governing permissions and limitations under the License.
|
|
11
|
+
*/
|
|
12
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/i18n/useDefaultLocale.ts
|
|
13
|
+
/*
|
|
14
|
+
* Copyright 2020 Adobe. All rights reserved.
|
|
15
|
+
* This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
16
|
+
* you may not use this file except in compliance with the License. You may obtain a copy
|
|
17
|
+
* of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
18
|
+
*
|
|
19
|
+
* Unless required by applicable law or agreed to in writing, software distributed under
|
|
20
|
+
* the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
21
|
+
* OF ANY KIND, either express or implied. See the License for the specific language
|
|
22
|
+
* governing permissions and limitations under the License.
|
|
23
|
+
*/
|
|
24
|
+
// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/i18n/utils.ts
|
|
25
|
+
import { n as useContextOptional } from "./owner.jsx";
|
|
26
|
+
import { t as access } from "./reactivity.jsx";
|
|
27
|
+
import { createContext, createMemo, createSignal, createTrackedEffect } from "solid-js";
|
|
2
28
|
//#region src/i18n/utils.ts
|
|
3
29
|
/**
|
|
4
30
|
* i18n utilities for solidaria
|
|
@@ -7,7 +33,7 @@ import { createContext, createEffect, createMemo, createSignal, onCleanup, useCo
|
|
|
7
33
|
*
|
|
8
34
|
* Port of @react-aria/i18n utils.
|
|
9
35
|
*/
|
|
10
|
-
const RTL_SCRIPTS = new Set([
|
|
36
|
+
const RTL_SCRIPTS = /* @__PURE__ */ new Set([
|
|
11
37
|
"Arab",
|
|
12
38
|
"Syrc",
|
|
13
39
|
"Samr",
|
|
@@ -19,7 +45,7 @@ const RTL_SCRIPTS = new Set([
|
|
|
19
45
|
"Rohg",
|
|
20
46
|
"Hebr"
|
|
21
47
|
]);
|
|
22
|
-
const RTL_LANGS = new Set([
|
|
48
|
+
const RTL_LANGS = /* @__PURE__ */ new Set([
|
|
23
49
|
"ae",
|
|
24
50
|
"ar",
|
|
25
51
|
"arc",
|
|
@@ -93,7 +119,22 @@ function updateLocale() {
|
|
|
93
119
|
currentLocale = getDefaultLocale();
|
|
94
120
|
for (const listener of listeners) listener(currentLocale);
|
|
95
121
|
}
|
|
96
|
-
const
|
|
122
|
+
const i18nContextSymbol = Symbol.for("solidaria.i18n.context");
|
|
123
|
+
function getI18nContext() {
|
|
124
|
+
const registry = globalThis;
|
|
125
|
+
let contexts = registry[i18nContextSymbol];
|
|
126
|
+
if (!(contexts instanceof WeakMap)) {
|
|
127
|
+
contexts = /* @__PURE__ */ new WeakMap();
|
|
128
|
+
registry[i18nContextSymbol] = contexts;
|
|
129
|
+
}
|
|
130
|
+
let context = contexts.get(createContext);
|
|
131
|
+
if (!context) {
|
|
132
|
+
context = createContext(null);
|
|
133
|
+
contexts.set(createContext, context);
|
|
134
|
+
}
|
|
135
|
+
return context;
|
|
136
|
+
}
|
|
137
|
+
const I18nContext = getI18nContext();
|
|
97
138
|
/**
|
|
98
139
|
* Returns the current browser/system locale, and updates when it changes.
|
|
99
140
|
*
|
|
@@ -107,14 +148,18 @@ const I18nContext = createContext(null);
|
|
|
107
148
|
function createDefaultLocale() {
|
|
108
149
|
if (!currentLocale) currentLocale = getDefaultLocale();
|
|
109
150
|
const [locale, setLocale] = createSignal(currentLocale);
|
|
110
|
-
|
|
151
|
+
createTrackedEffect(() => {
|
|
152
|
+
const _s2Cleanups = [];
|
|
111
153
|
if (typeof window === "undefined") return;
|
|
112
154
|
if (listeners.size === 0) window.addEventListener("languagechange", updateLocale);
|
|
113
155
|
listeners.add(setLocale);
|
|
114
|
-
|
|
156
|
+
_s2Cleanups.push(() => {
|
|
115
157
|
listeners.delete(setLocale);
|
|
116
158
|
if (listeners.size === 0) window.removeEventListener("languagechange", updateLocale);
|
|
117
159
|
});
|
|
160
|
+
return () => {
|
|
161
|
+
for (const c of _s2Cleanups) c();
|
|
162
|
+
};
|
|
118
163
|
});
|
|
119
164
|
return locale;
|
|
120
165
|
}
|
|
@@ -130,7 +175,7 @@ function createDefaultLocale() {
|
|
|
130
175
|
* ```
|
|
131
176
|
*/
|
|
132
177
|
function useLocale() {
|
|
133
|
-
const context =
|
|
178
|
+
const context = useContextOptional(I18nContext);
|
|
134
179
|
const defaultLocale = createDefaultLocale();
|
|
135
180
|
return context || defaultLocale;
|
|
136
181
|
}
|
|
@@ -153,13 +198,14 @@ function useLocale() {
|
|
|
153
198
|
function I18nProvider(props) {
|
|
154
199
|
const defaultLocale = createDefaultLocale();
|
|
155
200
|
const locale = createMemo(() => {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
201
|
+
const localeString = access(props.locale);
|
|
202
|
+
if (localeString) return {
|
|
203
|
+
locale: localeString,
|
|
204
|
+
direction: isRTL(localeString) ? "rtl" : "ltr"
|
|
159
205
|
};
|
|
160
206
|
return defaultLocale();
|
|
161
207
|
});
|
|
162
|
-
return <I18nContext
|
|
208
|
+
return <I18nContext value={locale}>{props.children}</I18nContext>;
|
|
163
209
|
}
|
|
164
210
|
//#endregion
|
|
165
211
|
export { createCacheKey as a, useLocale as i, createDefaultLocale as n, isRTL as o, getDefaultLocale as r, I18nProvider as t };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locale.jsx","names":[],"sources":["../../src/i18n/utils.ts","../../src/i18n/locale.tsx"],"sourcesContent":["/**\n * i18n utilities for solidaria\n *\n * RTL detection and locale utilities.\n *\n * Port of @react-aria/i18n utils.\n */\n\n// https://en.wikipedia.org/wiki/Right-to-left\nconst RTL_SCRIPTS = new Set([\n \"Arab\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\",\n]);\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n]);\n\n/**\n * Determines if a locale is read right to left.\n * Uses Intl.Locale API when available for accurate detection.\n */\nexport function isRTL(localeString: string): boolean {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n if (typeof Intl !== \"undefined\" && Intl.Locale) {\n try {\n const locale = new Intl.Locale(localeString).maximize();\n\n // Use the text info object to get the direction if possible.\n // getTextInfo() was implemented as a property by some browsers before it was standardized as a function.\n const localeAny = locale as unknown as {\n getTextInfo?: () => { direction: string };\n textInfo?: { direction: string };\n };\n const textInfo =\n typeof localeAny.getTextInfo === \"function\" ? localeAny.getTextInfo() : localeAny.textInfo;\n\n if (textInfo) {\n return textInfo.direction === \"rtl\";\n }\n\n // Fallback: guess using the script.\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script);\n }\n } catch {\n // Fall through to language-based detection\n }\n }\n\n // If not, just guess by the language (first part of the locale)\n const lang = localeString.split(\"-\")[0];\n return RTL_LANGS.has(lang);\n}\n\n/**\n * Creates a cache key for formatter options.\n */\nexport function createCacheKey(locale: string, options?: Record<string, unknown>): string {\n if (!options) {\n return locale;\n }\n return (\n locale +\n Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n );\n}\n","/**\n * Locale context and provider for solidaria\n *\n * Provides locale and text direction to the component tree.\n *\n * Port of @react-aria/i18n context and useDefaultLocale.\n */\n\nimport {\n type Accessor,\n type JSX,\n type ParentProps,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n onCleanup,\n useContext,\n} from \"solid-js\";\nimport { isRTL } from \"./utils\";\n\n/** Text direction: left-to-right or right-to-left. */\nexport type Direction = \"ltr\" | \"rtl\";\n\n/** Locale information including language code and text direction. */\nexport interface Locale {\n /** The BCP47 language code for the locale (e.g., 'en-US', 'ar-SA'). */\n locale: string;\n /** The writing direction for the locale. */\n direction: Direction;\n}\n\nexport interface I18nProviderProps extends ParentProps {\n /** The locale to apply to the children. If not provided, uses browser default. */\n locale?: string;\n}\n\n// Symbol for server-provided locale\nconst localeSymbol = Symbol.for(\"solidaria.i18n.locale\");\n\nlet currentLocale: Locale | null = null;\nconst listeners = new Set<(locale: Locale) => void>();\n\n/**\n * Gets the default locale from the browser/system.\n */\nexport function getDefaultLocale(): Locale {\n let locale =\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<symbol, string>)[localeSymbol]) ||\n (typeof navigator !== \"undefined\" &&\n (navigator.language || (navigator as unknown as { userLanguage?: string }).userLanguage)) ||\n \"en-US\";\n\n // Validate the locale is supported\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale]);\n } catch {\n locale = \"en-US\";\n }\n\n return {\n locale,\n direction: isRTL(locale) ? \"rtl\" : \"ltr\",\n };\n}\n\nfunction updateLocale(): void {\n currentLocale = getDefaultLocale();\n for (const listener of listeners) {\n listener(currentLocale);\n }\n}\n\nconst I18nContext = createContext<Accessor<Locale> | null>(null);\n\n/**\n * Returns the current browser/system locale, and updates when it changes.\n *\n * @example\n * ```tsx\n * const locale = createDefaultLocale();\n * console.log(locale().locale); // 'en-US'\n * console.log(locale().direction); // 'ltr'\n * ```\n */\nexport function createDefaultLocale(): Accessor<Locale> {\n if (!currentLocale) {\n currentLocale = getDefaultLocale();\n }\n\n const [locale, setLocale] = createSignal<Locale>(currentLocale);\n\n createEffect(() => {\n if (typeof window === \"undefined\") {\n return;\n }\n\n if (listeners.size === 0) {\n window.addEventListener(\"languagechange\", updateLocale);\n }\n\n listeners.add(setLocale);\n\n onCleanup(() => {\n listeners.delete(setLocale);\n if (listeners.size === 0) {\n window.removeEventListener(\"languagechange\", updateLocale);\n }\n });\n });\n\n return locale;\n}\n\n/**\n * Returns the current locale and layout direction from context or browser default.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const locale = useLocale();\n * return <div dir={locale().direction}>{locale().locale}</div>;\n * }\n * ```\n */\nexport function useLocale(): Accessor<Locale> {\n const context = useContext(I18nContext);\n const defaultLocale = createDefaultLocale();\n return context || defaultLocale;\n}\n\n/**\n * Provides the locale for the application to all child components.\n *\n * @example\n * ```tsx\n * // Use browser default locale\n * <I18nProvider>\n * <App />\n * </I18nProvider>\n *\n * // Override with specific locale\n * <I18nProvider locale=\"ar-SA\">\n * <App /> // Will have RTL direction\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider(props: I18nProviderProps): JSX.Element {\n const defaultLocale = createDefaultLocale();\n\n const locale = createMemo<Locale>(() => {\n if (props.locale) {\n return {\n locale: props.locale,\n direction: isRTL(props.locale) ? \"rtl\" : \"ltr\",\n };\n }\n return defaultLocale();\n });\n\n return <I18nContext.Provider value={locale}>{props.children}</I18nContext.Provider>;\n}\n"],"mappings":";;;;;;;;;AASA,MAAM,cAAc,IAAI,IAAI;CAC1B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,YAAY,IAAI,IAAI;CACxB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;;;;AAMD,SAAgB,MAAM,cAA+B;CAEnD,IAAI,OAAO,SAAS,eAAe,KAAK,QACtC,IAAI;EACF,MAAM,SAAS,IAAI,KAAK,OAAO,YAAY,CAAC,CAAC,SAAS;EAItD,MAAM,YAAY;EAIlB,MAAM,WACJ,OAAO,UAAU,gBAAgB,aAAa,UAAU,YAAY,IAAI,UAAU;EAEpF,IAAI,UACF,OAAO,SAAS,cAAc;EAIhC,IAAI,OAAO,QACT,OAAO,YAAY,IAAI,OAAO,MAAM;CAExC,QAAQ,CAER;CAIF,MAAM,OAAO,aAAa,MAAM,GAAG,CAAC,CAAC;CACrC,OAAO,UAAU,IAAI,IAAI;AAC3B;;;;AAKA,SAAgB,eAAe,QAAgB,SAA2C;CACxF,IAAI,CAAC,SACH,OAAO;CAET,OACE,SACA,OAAO,QAAQ,OAAO,CAAC,CACpB,MAAM,GAAG,MAAO,EAAE,KAAK,EAAE,KAAK,KAAK,CAAE,CAAC,CACtC,KAAK;AAEZ;;;;;;;;;;ACxDA,MAAM,eAAe,OAAO,IAAI,uBAAuB;AAEvD,IAAI,gBAA+B;AACnC,MAAM,4BAAY,IAAI,IAA8B;;;;AAKpD,SAAgB,mBAA2B;CACzC,IAAI,SACD,OAAO,WAAW,eAChB,OAA6C,iBAC/C,OAAO,cAAc,gBACnB,UAAU,YAAa,UAAmD,iBAC7E;CAGF,IAAI;EACF,KAAK,eAAe,mBAAmB,CAAC,MAAM,CAAC;CACjD,QAAQ;EACN,SAAS;CACX;CAEA,OAAO;EACL;EACA,WAAW,MAAM,MAAM,IAAI,QAAQ;CACrC;AACF;AAEA,SAAS,eAAqB;CAC5B,gBAAgB,iBAAiB;CACjC,KAAK,MAAM,YAAY,WACrB,SAAS,aAAa;AAE1B;AAEA,MAAM,cAAc,cAAuC,IAAI;;;;;;;;;;;AAY/D,SAAgB,sBAAwC;CACtD,IAAI,CAAC,eACH,gBAAgB,iBAAiB;CAGnC,MAAM,CAAC,QAAQ,aAAa,aAAqB,aAAa;CAE9D,mBAAmB;EACjB,IAAI,OAAO,WAAW,aACpB;EAGF,IAAI,UAAU,SAAS,GACrB,OAAO,iBAAiB,kBAAkB,YAAY;EAGxD,UAAU,IAAI,SAAS;EAEvB,gBAAgB;GACd,UAAU,OAAO,SAAS;GAC1B,IAAI,UAAU,SAAS,GACrB,OAAO,oBAAoB,kBAAkB,YAAY;EAE7D,CAAC;CACH,CAAC;CAED,OAAO;AACT;;;;;;;;;;;;AAaA,SAAgB,YAA8B;CAC5C,MAAM,UAAU,WAAW,WAAW;CACtC,MAAM,gBAAgB,oBAAoB;CAC1C,OAAO,WAAW;AACpB;;;;;;;;;;;;;;;;;AAkBA,SAAgB,aAAa,OAAuC;CAClE,MAAM,gBAAgB,oBAAoB;CAE1C,MAAM,SAAS,iBAAyB;EACtC,IAAI,MAAM,QACR,OAAO;GACL,QAAQ,MAAM;GACd,WAAW,MAAM,MAAM,MAAM,IAAI,QAAQ;EAC3C;EAEF,OAAO,cAAc;CACvB,CAAC;CAED,OAAO,CAAC,YAAY,SAAS,OAAO,SAAS,MAAM,SAAS,EAAE,YAAY;AAC5E"}
|
|
1
|
+
{"version":3,"file":"locale.jsx","names":[],"sources":["../../src/i18n/utils.ts","../../src/i18n/locale.tsx"],"sourcesContent":["/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/i18n/utils.ts\n\n/**\n * i18n utilities for solidaria\n *\n * RTL detection and locale utilities.\n *\n * Port of @react-aria/i18n utils.\n */\n\n// https://en.wikipedia.org/wiki/Right-to-left\nconst RTL_SCRIPTS = new Set([\n \"Arab\",\n \"Syrc\",\n \"Samr\",\n \"Mand\",\n \"Thaa\",\n \"Mend\",\n \"Nkoo\",\n \"Adlm\",\n \"Rohg\",\n \"Hebr\",\n]);\n\nconst RTL_LANGS = new Set([\n \"ae\",\n \"ar\",\n \"arc\",\n \"bcc\",\n \"bqi\",\n \"ckb\",\n \"dv\",\n \"fa\",\n \"glk\",\n \"he\",\n \"ku\",\n \"mzn\",\n \"nqo\",\n \"pnb\",\n \"ps\",\n \"sd\",\n \"ug\",\n \"ur\",\n \"yi\",\n]);\n\n/**\n * Determines if a locale is read right to left.\n * Uses Intl.Locale API when available for accurate detection.\n */\nexport function isRTL(localeString: string): boolean {\n // If the Intl.Locale API is available, use it to get the locale's text direction.\n if (typeof Intl !== \"undefined\" && Intl.Locale) {\n try {\n const locale = new Intl.Locale(localeString).maximize();\n\n // Use the text info object to get the direction if possible.\n // getTextInfo() was implemented as a property by some browsers before it was standardized as a function.\n const localeAny = locale as unknown as {\n getTextInfo?: () => { direction: string };\n textInfo?: { direction: string };\n };\n const textInfo =\n typeof localeAny.getTextInfo === \"function\" ? localeAny.getTextInfo() : localeAny.textInfo;\n\n if (textInfo) {\n return textInfo.direction === \"rtl\";\n }\n\n // Fallback: guess using the script.\n if (locale.script) {\n return RTL_SCRIPTS.has(locale.script);\n }\n } catch {\n // Fall through to language-based detection\n }\n }\n\n // If not, just guess by the language (first part of the locale)\n const lang = localeString.split(\"-\")[0];\n return RTL_LANGS.has(lang);\n}\n\n/**\n * Creates a cache key for formatter options.\n */\nexport function createCacheKey(locale: string, options?: Record<string, unknown>): string {\n if (!options) {\n return locale;\n }\n return (\n locale +\n Object.entries(options)\n .sort((a, b) => (a[0] < b[0] ? -1 : 1))\n .join()\n );\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n// Ported to SolidJS for Proyecto Viviana; based on packages/react-aria/src/i18n/useDefaultLocale.ts\n\n/**\n * Locale context and provider for solidaria\n *\n * Provides locale and text direction to the component tree.\n *\n * Port of @react-aria/i18n context and useDefaultLocale.\n */\n\nimport { useContextOptional } from \"../utils/owner\";\nimport { createContext, createMemo, createSignal, createTrackedEffect } from \"solid-js\";\nimport type { Accessor, Context, ParentProps } from \"solid-js\";\nimport type { JSX } from \"@solidjs/web\";\nimport { isRTL } from \"./utils\";\nimport { access } from \"../utils/reactivity\";\n\n/** Text direction: left-to-right or right-to-left. */\nexport type Direction = \"ltr\" | \"rtl\";\n\n/** Locale information including language code and text direction. */\nexport interface Locale {\n /** The BCP47 language code for the locale (e.g., 'en-US', 'ar-SA'). */\n locale: string;\n /** The writing direction for the locale. */\n direction: Direction;\n}\n\nexport interface I18nProviderProps extends ParentProps {\n /** The locale to apply to the children. If not provided, uses browser default. */\n locale?: string;\n}\n\n// Symbol for server-provided locale\nconst localeSymbol = Symbol.for(\"solidaria.i18n.locale\");\n\nlet currentLocale: Locale | null = null;\nconst listeners = new Set<(locale: Locale) => void>();\n\n/**\n * Gets the default locale from the browser/system.\n */\nexport function getDefaultLocale(): Locale {\n let locale =\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<symbol, string>)[localeSymbol]) ||\n (typeof navigator !== \"undefined\" &&\n (navigator.language || (navigator as unknown as { userLanguage?: string }).userLanguage)) ||\n \"en-US\";\n\n // Validate the locale is supported\n try {\n Intl.DateTimeFormat.supportedLocalesOf([locale]);\n } catch {\n locale = \"en-US\";\n }\n\n return {\n locale,\n direction: isRTL(locale) ? \"rtl\" : \"ltr\",\n };\n}\n\nfunction updateLocale(): void {\n currentLocale = getDefaultLocale();\n for (const listener of listeners) {\n listener(currentLocale);\n }\n}\n\n// Share a context across module graphs only when they use the same runtime.\n// Solid 2 contexts are callable providers which retain their runtime's owner\n// state; a dev-server restart must not reuse a prior runtime's provider.\nconst i18nContextSymbol = Symbol.for(\"solidaria.i18n.context\");\n\ntype I18nContextValue = Accessor<Locale> | null;\n\nfunction getI18nContext(): Context<I18nContextValue> {\n const registry = globalThis as unknown as Record<\n symbol,\n WeakMap<typeof createContext, Context<I18nContextValue>> | undefined\n >;\n let contexts = registry[i18nContextSymbol];\n // Also replace the legacy single-context cache during an in-process upgrade.\n if (!(contexts instanceof WeakMap)) {\n contexts = new WeakMap();\n registry[i18nContextSymbol] = contexts;\n }\n let context = contexts.get(createContext);\n if (!context) {\n context = createContext<I18nContextValue>(null);\n contexts.set(createContext, context);\n }\n return context;\n}\n\nconst I18nContext = getI18nContext();\n\n/**\n * Returns the current browser/system locale, and updates when it changes.\n *\n * @example\n * ```tsx\n * const locale = createDefaultLocale();\n * console.log(locale().locale); // 'en-US'\n * console.log(locale().direction); // 'ltr'\n * ```\n */\nexport function createDefaultLocale(): Accessor<Locale> {\n if (!currentLocale) {\n currentLocale = getDefaultLocale();\n }\n\n const [locale, setLocale] = createSignal<Locale>(currentLocale);\n\n createTrackedEffect(() => {\n const _s2Cleanups: Array<() => void> = [];\n\n if (typeof window === \"undefined\") {\n return;\n }\n\n if (listeners.size === 0) {\n window.addEventListener(\"languagechange\", updateLocale);\n }\n\n listeners.add(setLocale);\n\n _s2Cleanups.push(() => {\n listeners.delete(setLocale);\n if (listeners.size === 0) {\n window.removeEventListener(\"languagechange\", updateLocale);\n }\n });\n\n return () => {\n for (const c of _s2Cleanups) c();\n };\n });\n\n return locale;\n}\n\n/**\n * Returns the current locale and layout direction from context or browser default.\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const locale = useLocale();\n * return <div dir={locale().direction}>{locale().locale}</div>;\n * }\n * ```\n */\nexport function useLocale(): Accessor<Locale> {\n const context = useContextOptional(I18nContext);\n const defaultLocale = createDefaultLocale();\n return context || defaultLocale;\n}\n\n/**\n * Provides the locale for the application to all child components.\n *\n * @example\n * ```tsx\n * // Use browser default locale\n * <I18nProvider>\n * <App />\n * </I18nProvider>\n *\n * // Override with specific locale\n * <I18nProvider locale=\"ar-SA\">\n * <App /> // Will have RTL direction\n * </I18nProvider>\n * ```\n */\nexport function I18nProvider(props: I18nProviderProps): JSX.Element {\n const defaultLocale = createDefaultLocale();\n\n const locale = createMemo<Locale>(() => {\n const localeString = access(props.locale);\n if (localeString) {\n return {\n locale: localeString,\n direction: isRTL(localeString) ? \"rtl\" : \"ltr\",\n };\n }\n return defaultLocale();\n });\n\n return <I18nContext value={locale}>{props.children}</I18nContext>;\n}\n"],"mappings":"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"}
|