@primitiv-ui/react 0.1.38 → 0.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -2
- package/dist/AccessibleIcon/AccessibleIcon.d.ts +51 -0
- package/dist/AccessibleIcon/AccessibleIcon.js +55 -0
- package/dist/AccessibleIcon/index.d.ts +2 -0
- package/dist/AccessibleIcon/index.js +2 -0
- package/dist/AccessibleIcon/types.d.ts +24 -0
- package/dist/AccessibleIcon/types.js +1 -0
- package/dist/Accordion/Accordion.d.ts +287 -0
- package/dist/Accordion/Accordion.js +330 -0
- package/dist/Accordion/AccordionContext.d.ts +3 -0
- package/dist/Accordion/AccordionContext.js +4 -0
- package/dist/Accordion/hooks/index.d.ts +6 -0
- package/dist/Accordion/hooks/index.js +6 -0
- package/dist/Accordion/hooks/useAccordionContext.d.ts +1 -0
- package/dist/Accordion/hooks/useAccordionContext.js +1 -0
- package/dist/Accordion/hooks/useAccordionHeaderContext.d.ts +1 -0
- package/dist/Accordion/hooks/useAccordionHeaderContext.js +10 -0
- package/dist/Accordion/hooks/useAccordionItem.d.ts +8 -0
- package/dist/Accordion/hooks/useAccordionItem.js +15 -0
- package/dist/Accordion/hooks/useAccordionItemContext.d.ts +1 -0
- package/dist/Accordion/hooks/useAccordionItemContext.js +1 -0
- package/dist/Accordion/hooks/useAccordionRoot.d.ts +16 -0
- package/dist/Accordion/hooks/useAccordionRoot.js +133 -0
- package/dist/Accordion/hooks/useAccordionTrigger.d.ts +298 -0
- package/dist/Accordion/hooks/useAccordionTrigger.js +73 -0
- package/dist/Accordion/index.d.ts +2 -0
- package/dist/Accordion/index.js +2 -0
- package/dist/Accordion/types.d.ts +152 -0
- package/dist/Accordion/types.js +1 -0
- package/dist/Alert/Alert.d.ts +64 -0
- package/dist/Alert/Alert.js +70 -0
- package/dist/Alert/index.d.ts +2 -0
- package/dist/Alert/index.js +2 -0
- package/dist/Alert/types.d.ts +21 -0
- package/dist/Alert/types.js +1 -0
- package/dist/Avatar/Avatar.d.ts +144 -0
- package/dist/Avatar/Avatar.js +187 -0
- package/dist/Avatar/AvatarContext.d.ts +16 -0
- package/dist/Avatar/AvatarContext.js +7 -0
- package/dist/Avatar/hooks/index.d.ts +2 -0
- package/dist/Avatar/hooks/index.js +2 -0
- package/dist/Avatar/hooks/useAvatarContext.d.ts +1 -0
- package/dist/Avatar/hooks/useAvatarContext.js +1 -0
- package/dist/Avatar/hooks/useAvatarImage.d.ts +21 -0
- package/dist/Avatar/hooks/useAvatarImage.js +47 -0
- package/dist/Avatar/index.d.ts +3 -0
- package/dist/Avatar/index.js +3 -0
- package/dist/Avatar/types.d.ts +52 -0
- package/dist/Avatar/types.js +1 -0
- package/dist/Breadcrumb/Breadcrumb.d.ts +280 -0
- package/dist/Breadcrumb/Breadcrumb.js +299 -0
- package/dist/Breadcrumb/index.d.ts +2 -0
- package/dist/Breadcrumb/index.js +2 -0
- package/dist/Breadcrumb/types.d.ts +81 -0
- package/dist/Breadcrumb/types.js +1 -0
- package/dist/Button/Button.d.ts +73 -0
- package/dist/Button/Button.js +84 -0
- package/dist/Button/index.d.ts +2 -0
- package/dist/Button/index.js +2 -0
- package/dist/Button/types.d.ts +32 -0
- package/dist/Button/types.js +1 -0
- package/dist/Carousel/Carousel.d.ts +498 -0
- package/dist/Carousel/Carousel.js +660 -0
- package/dist/Carousel/CarouselContext.d.ts +7 -0
- package/dist/Carousel/CarouselContext.js +8 -0
- package/dist/Carousel/hooks/index.d.ts +5 -0
- package/dist/Carousel/hooks/index.js +5 -0
- package/dist/Carousel/hooks/useCarouselContext.d.ts +1 -0
- package/dist/Carousel/hooks/useCarouselContext.js +10 -0
- package/dist/Carousel/hooks/useCarouselLoop.d.ts +39 -0
- package/dist/Carousel/hooks/useCarouselLoop.js +735 -0
- package/dist/Carousel/hooks/useCarouselRoot.d.ts +97 -0
- package/dist/Carousel/hooks/useCarouselRoot.js +545 -0
- package/dist/Carousel/hooks/useCarouselSlide.d.ts +24 -0
- package/dist/Carousel/hooks/useCarouselSlide.js +62 -0
- package/dist/Carousel/hooks/useCarouselViewport.d.ts +46 -0
- package/dist/Carousel/hooks/useCarouselViewport.js +786 -0
- package/dist/Carousel/index.d.ts +3 -0
- package/dist/Carousel/index.js +3 -0
- package/dist/Carousel/loopEngine.d.ts +26 -0
- package/dist/Carousel/loopEngine.js +48 -0
- package/dist/Carousel/types.d.ts +783 -0
- package/dist/Carousel/types.js +1 -0
- package/dist/Checkbox/Checkbox.d.ts +120 -0
- package/dist/Checkbox/Checkbox.js +155 -0
- package/dist/Checkbox/CheckboxContext.d.ts +13 -0
- package/dist/Checkbox/CheckboxContext.js +3 -0
- package/dist/Checkbox/hooks/index.d.ts +3 -0
- package/dist/Checkbox/hooks/index.js +3 -0
- package/dist/Checkbox/hooks/useCheckboxContext.d.ts +1 -0
- package/dist/Checkbox/hooks/useCheckboxContext.js +1 -0
- package/dist/Checkbox/hooks/useCheckboxInput.d.ts +33 -0
- package/dist/Checkbox/hooks/useCheckboxInput.js +37 -0
- package/dist/Checkbox/hooks/useCheckboxRoot.d.ts +11 -0
- package/dist/Checkbox/hooks/useCheckboxRoot.js +14 -0
- package/dist/Checkbox/index.d.ts +2 -0
- package/dist/Checkbox/index.js +2 -0
- package/dist/Checkbox/types.d.ts +74 -0
- package/dist/Checkbox/types.js +1 -0
- package/dist/CheckboxCard/CheckboxCard.d.ts +132 -0
- package/dist/CheckboxCard/CheckboxCard.js +175 -0
- package/dist/CheckboxCard/CheckboxCardContext.d.ts +15 -0
- package/dist/CheckboxCard/CheckboxCardContext.js +10 -0
- package/dist/CheckboxCard/hooks/index.d.ts +2 -0
- package/dist/CheckboxCard/hooks/index.js +2 -0
- package/dist/CheckboxCard/hooks/useCheckboxCardContext.d.ts +1 -0
- package/dist/CheckboxCard/hooks/useCheckboxCardContext.js +1 -0
- package/dist/CheckboxCard/hooks/useCheckboxCardRoot.d.ts +11 -0
- package/dist/CheckboxCard/hooks/useCheckboxCardRoot.js +12 -0
- package/dist/CheckboxCard/index.d.ts +3 -0
- package/dist/CheckboxCard/index.js +3 -0
- package/dist/CheckboxCard/types.d.ts +87 -0
- package/dist/CheckboxCard/types.js +1 -0
- package/dist/Collapsible/Collapsible.d.ts +243 -0
- package/dist/Collapsible/Collapsible.js +275 -0
- package/dist/Collapsible/CollapsibleContext.d.ts +2 -0
- package/dist/Collapsible/CollapsibleContext.js +3 -0
- package/dist/Collapsible/hooks/index.d.ts +2 -0
- package/dist/Collapsible/hooks/index.js +2 -0
- package/dist/Collapsible/hooks/useCollapsibleRoot.d.ts +9 -0
- package/dist/Collapsible/hooks/useCollapsibleRoot.js +18 -0
- package/dist/Collapsible/hooks/useCollapsibleTrigger.d.ts +299 -0
- package/dist/Collapsible/hooks/useCollapsibleTrigger.js +39 -0
- package/dist/Collapsible/index.d.ts +2 -0
- package/dist/Collapsible/index.js +2 -0
- package/dist/Collapsible/types.d.ts +134 -0
- package/dist/Collapsible/types.js +1 -0
- package/dist/Combobox/Combobox.d.ts +149 -0
- package/dist/Combobox/Combobox.js +355 -0
- package/dist/Combobox/ComboboxContext.d.ts +10 -0
- package/dist/Combobox/ComboboxContext.js +13 -0
- package/dist/Combobox/hooks/index.d.ts +1 -0
- package/dist/Combobox/hooks/index.js +1 -0
- package/dist/Combobox/hooks/useComboboxRoot.d.ts +1 -0
- package/dist/Combobox/hooks/useComboboxRoot.js +1 -0
- package/dist/Combobox/index.d.ts +3 -0
- package/dist/Combobox/index.js +3 -0
- package/dist/Combobox/types.d.ts +126 -0
- package/dist/Combobox/types.js +1 -0
- package/dist/ContextMenu/ContextMenu.d.ts +508 -0
- package/dist/ContextMenu/ContextMenu.js +1005 -0
- package/dist/ContextMenu/ContextMenuContentContext.d.ts +12 -0
- package/dist/ContextMenu/ContextMenuContentContext.js +3 -0
- package/dist/ContextMenu/ContextMenuContext.d.ts +16 -0
- package/dist/ContextMenu/ContextMenuContext.js +3 -0
- package/dist/ContextMenu/ContextMenuGroupContext.d.ts +4 -0
- package/dist/ContextMenu/ContextMenuGroupContext.js +3 -0
- package/dist/ContextMenu/ContextMenuItemIndicatorContext.d.ts +4 -0
- package/dist/ContextMenu/ContextMenuItemIndicatorContext.js +3 -0
- package/dist/ContextMenu/ContextMenuRadioGroupContext.d.ts +5 -0
- package/dist/ContextMenu/ContextMenuRadioGroupContext.js +3 -0
- package/dist/ContextMenu/ContextMenuSubContext.d.ts +8 -0
- package/dist/ContextMenu/ContextMenuSubContext.js +3 -0
- package/dist/ContextMenu/constants.d.ts +2 -0
- package/dist/ContextMenu/constants.js +3 -0
- package/dist/ContextMenu/index.d.ts +2 -0
- package/dist/ContextMenu/index.js +2 -0
- package/dist/ContextMenu/types.d.ts +424 -0
- package/dist/ContextMenu/types.js +1 -0
- package/dist/DirectionProvider/DirectionContext.d.ts +15 -0
- package/dist/DirectionProvider/DirectionContext.js +18 -0
- package/dist/DirectionProvider/DirectionProvider.d.ts +57 -0
- package/dist/DirectionProvider/DirectionProvider.js +59 -0
- package/dist/DirectionProvider/index.d.ts +3 -0
- package/dist/DirectionProvider/index.js +2 -0
- package/dist/DirectionProvider/types.d.ts +34 -0
- package/dist/DirectionProvider/types.js +1 -0
- package/dist/Divider/Divider.d.ts +59 -0
- package/dist/Divider/Divider.js +60 -0
- package/dist/Divider/index.d.ts +2 -0
- package/dist/Divider/index.js +2 -0
- package/dist/Divider/types.d.ts +16 -0
- package/dist/Divider/types.js +1 -0
- package/dist/Drawer/Drawer.d.ts +268 -0
- package/dist/Drawer/Drawer.js +271 -0
- package/dist/Drawer/index.d.ts +2 -0
- package/dist/Drawer/index.js +2 -0
- package/dist/Drawer/types.d.ts +45 -0
- package/dist/Drawer/types.js +1 -0
- package/dist/Dropdown/Dropdown.d.ts +476 -0
- package/dist/Dropdown/Dropdown.js +745 -0
- package/dist/Dropdown/DropdownContentContext.d.ts +12 -0
- package/dist/Dropdown/DropdownContentContext.js +3 -0
- package/dist/Dropdown/DropdownContext.d.ts +10 -0
- package/dist/Dropdown/DropdownContext.js +3 -0
- package/dist/Dropdown/DropdownGroupContext.d.ts +4 -0
- package/dist/Dropdown/DropdownGroupContext.js +3 -0
- package/dist/Dropdown/DropdownItemIndicatorContext.d.ts +9 -0
- package/dist/Dropdown/DropdownItemIndicatorContext.js +3 -0
- package/dist/Dropdown/DropdownRadioGroupContext.d.ts +5 -0
- package/dist/Dropdown/DropdownRadioGroupContext.js +3 -0
- package/dist/Dropdown/DropdownSubContext.d.ts +8 -0
- package/dist/Dropdown/DropdownSubContext.js +3 -0
- package/dist/Dropdown/constants.d.ts +2 -0
- package/dist/Dropdown/constants.js +3 -0
- package/dist/Dropdown/hooks/index.d.ts +9 -0
- package/dist/Dropdown/hooks/index.js +9 -0
- package/dist/Dropdown/hooks/useCloseSiblingSub.d.ts +7 -0
- package/dist/Dropdown/hooks/useCloseSiblingSub.js +13 -0
- package/dist/Dropdown/hooks/useDropdownContent.d.ts +296 -0
- package/dist/Dropdown/hooks/useDropdownContent.js +149 -0
- package/dist/Dropdown/hooks/useDropdownContext.d.ts +1 -0
- package/dist/Dropdown/hooks/useDropdownContext.js +1 -0
- package/dist/Dropdown/hooks/useDropdownGroup.d.ts +294 -0
- package/dist/Dropdown/hooks/useDropdownGroup.js +12 -0
- package/dist/Dropdown/hooks/useDropdownItem.d.ts +13 -0
- package/dist/Dropdown/hooks/useDropdownItem.js +34 -0
- package/dist/Dropdown/hooks/useDropdownLabel.d.ts +292 -0
- package/dist/Dropdown/hooks/useDropdownLabel.js +8 -0
- package/dist/Dropdown/hooks/useDropdownRoot.d.ts +19 -0
- package/dist/Dropdown/hooks/useDropdownRoot.js +25 -0
- package/dist/Dropdown/hooks/useDropdownSubContext.d.ts +1 -0
- package/dist/Dropdown/hooks/useDropdownSubContext.js +1 -0
- package/dist/Dropdown/hooks/useDropdownTrigger.d.ts +302 -0
- package/dist/Dropdown/hooks/useDropdownTrigger.js +18 -0
- package/dist/Dropdown/index.d.ts +2 -0
- package/dist/Dropdown/index.js +2 -0
- package/dist/Dropdown/types.d.ts +496 -0
- package/dist/Dropdown/types.js +1 -0
- package/dist/EmptyState/EmptyState.d.ts +246 -0
- package/dist/EmptyState/EmptyState.js +268 -0
- package/dist/EmptyState/index.d.ts +2 -0
- package/dist/EmptyState/index.js +2 -0
- package/dist/EmptyState/types.d.ts +59 -0
- package/dist/EmptyState/types.js +1 -0
- package/dist/Field/Field.d.ts +178 -0
- package/dist/Field/Field.js +211 -0
- package/dist/Field/FieldContext.d.ts +15 -0
- package/dist/Field/FieldContext.js +3 -0
- package/dist/Field/hooks/index.d.ts +2 -0
- package/dist/Field/hooks/index.js +2 -0
- package/dist/Field/hooks/useFieldContext.d.ts +1 -0
- package/dist/Field/hooks/useFieldContext.js +1 -0
- package/dist/Field/hooks/useFieldProps.d.ts +25 -0
- package/dist/Field/hooks/useFieldProps.js +39 -0
- package/dist/Field/index.d.ts +2 -0
- package/dist/Field/index.js +2 -0
- package/dist/Field/types.d.ts +81 -0
- package/dist/Field/types.js +1 -0
- package/dist/Fieldset/Fieldset.d.ts +124 -0
- package/dist/Fieldset/Fieldset.js +124 -0
- package/dist/Fieldset/index.d.ts +2 -0
- package/dist/Fieldset/index.js +2 -0
- package/dist/Fieldset/types.d.ts +23 -0
- package/dist/Fieldset/types.js +1 -0
- package/dist/Input/Input.d.ts +104 -0
- package/dist/Input/Input.js +116 -0
- package/dist/Input/index.d.ts +2 -0
- package/dist/Input/index.js +2 -0
- package/dist/Input/types.d.ts +27 -0
- package/dist/Input/types.js +1 -0
- package/dist/InputGroup/InputGroup.d.ts +176 -0
- package/dist/InputGroup/InputGroup.js +205 -0
- package/dist/InputGroup/index.d.ts +2 -0
- package/dist/InputGroup/index.js +2 -0
- package/dist/InputGroup/types.d.ts +41 -0
- package/dist/InputGroup/types.js +1 -0
- package/dist/Listbox/Listbox.d.ts +231 -0
- package/dist/Listbox/Listbox.js +339 -0
- package/dist/Listbox/ListboxContext.d.ts +19 -0
- package/dist/Listbox/ListboxContext.js +25 -0
- package/dist/Listbox/constants.d.ts +2 -0
- package/dist/Listbox/constants.js +3 -0
- package/dist/Listbox/hooks/index.d.ts +1 -0
- package/dist/Listbox/hooks/index.js +1 -0
- package/dist/Listbox/hooks/useListboxRoot.d.ts +39 -0
- package/dist/Listbox/hooks/useListboxRoot.js +299 -0
- package/dist/Listbox/index.d.ts +3 -0
- package/dist/Listbox/index.js +3 -0
- package/dist/Listbox/types.d.ts +214 -0
- package/dist/Listbox/types.js +1 -0
- package/dist/MillerColumns/MillerColumns.d.ts +309 -0
- package/dist/MillerColumns/MillerColumns.js +332 -0
- package/dist/MillerColumns/MillerColumnsContext.d.ts +4 -0
- package/dist/MillerColumns/MillerColumnsContext.js +5 -0
- package/dist/MillerColumns/constants.d.ts +2 -0
- package/dist/MillerColumns/constants.js +3 -0
- package/dist/MillerColumns/hooks/index.d.ts +7 -0
- package/dist/MillerColumns/hooks/index.js +7 -0
- package/dist/MillerColumns/hooks/useMillerColumnsColumn.d.ts +8 -0
- package/dist/MillerColumns/hooks/useMillerColumnsColumn.js +16 -0
- package/dist/MillerColumns/hooks/useMillerColumnsColumnContext.d.ts +1 -0
- package/dist/MillerColumns/hooks/useMillerColumnsColumnContext.js +1 -0
- package/dist/MillerColumns/hooks/useMillerColumnsContext.d.ts +1 -0
- package/dist/MillerColumns/hooks/useMillerColumnsContext.js +1 -0
- package/dist/MillerColumns/hooks/useMillerColumnsItem.d.ts +295 -0
- package/dist/MillerColumns/hooks/useMillerColumnsItem.js +122 -0
- package/dist/MillerColumns/hooks/useMillerColumnsItemContext.d.ts +1 -0
- package/dist/MillerColumns/hooks/useMillerColumnsItemContext.js +1 -0
- package/dist/MillerColumns/hooks/useMillerColumnsResizeHandle.d.ts +290 -0
- package/dist/MillerColumns/hooks/useMillerColumnsResizeHandle.js +105 -0
- package/dist/MillerColumns/hooks/useMillerColumnsRoot.d.ts +9 -0
- package/dist/MillerColumns/hooks/useMillerColumnsRoot.js +0 -0
- package/dist/MillerColumns/index.d.ts +4 -0
- package/dist/MillerColumns/index.js +4 -0
- package/dist/MillerColumns/types.d.ts +224 -0
- package/dist/MillerColumns/types.js +1 -0
- package/dist/MillerColumns/useMillerColumnsSelection.d.ts +21 -0
- package/dist/MillerColumns/useMillerColumnsSelection.js +28 -0
- package/dist/MillerColumns/utils.d.ts +62 -0
- package/dist/MillerColumns/utils.js +102 -0
- package/dist/Modal/Modal.d.ts +331 -0
- package/dist/Modal/Modal.js +386 -0
- package/dist/Modal/ModalContext.d.ts +9 -0
- package/dist/Modal/ModalContext.js +10 -0
- package/dist/Modal/hooks/index.d.ts +4 -0
- package/dist/Modal/hooks/index.js +4 -0
- package/dist/Modal/hooks/useModalContent.d.ts +5 -0
- package/dist/Modal/hooks/useModalContent.js +94 -0
- package/dist/Modal/hooks/useModalContext.d.ts +1 -0
- package/dist/Modal/hooks/useModalContext.js +1 -0
- package/dist/Modal/hooks/useModalRoot.d.ts +11 -0
- package/dist/Modal/hooks/useModalRoot.js +39 -0
- package/dist/Modal/hooks/useModalTrigger.d.ts +297 -0
- package/dist/Modal/hooks/useModalTrigger.js +18 -0
- package/dist/Modal/index.d.ts +3 -0
- package/dist/Modal/index.js +3 -0
- package/dist/Modal/types.d.ts +186 -0
- package/dist/Modal/types.js +1 -0
- package/dist/NavigationMenu/NavigationMenu.d.ts +495 -0
- package/dist/NavigationMenu/NavigationMenu.js +645 -0
- package/dist/NavigationMenu/NavigationMenuContext.d.ts +31 -0
- package/dist/NavigationMenu/NavigationMenuContext.js +34 -0
- package/dist/NavigationMenu/constants.d.ts +4 -0
- package/dist/NavigationMenu/constants.js +5 -0
- package/dist/NavigationMenu/hooks/index.d.ts +7 -0
- package/dist/NavigationMenu/hooks/index.js +7 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuEntry.d.ts +13 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuEntry.js +21 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuIndicator.d.ts +16 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuIndicator.js +53 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuLink.d.ts +8 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuLink.js +37 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuRoot.d.ts +26 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuRoot.js +202 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuTopLevelEntry.d.ts +21 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuTopLevelEntry.js +54 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuTrigger.d.ts +16 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuTrigger.js +100 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuViewport.d.ts +21 -0
- package/dist/NavigationMenu/hooks/useNavigationMenuViewport.js +85 -0
- package/dist/NavigationMenu/index.d.ts +3 -0
- package/dist/NavigationMenu/index.js +3 -0
- package/dist/NavigationMenu/types.d.ts +236 -0
- package/dist/NavigationMenu/types.js +1 -0
- package/dist/NavigationMenu/utils.d.ts +37 -0
- package/dist/NavigationMenu/utils.js +64 -0
- package/dist/Popover/Popover.d.ts +239 -0
- package/dist/Popover/Popover.js +293 -0
- package/dist/Popover/PopoverContext.d.ts +4 -0
- package/dist/Popover/PopoverContext.js +5 -0
- package/dist/Popover/hooks/index.d.ts +3 -0
- package/dist/Popover/hooks/index.js +3 -0
- package/dist/Popover/hooks/usePopoverContent.d.ts +19 -0
- package/dist/Popover/hooks/usePopoverContent.js +83 -0
- package/dist/Popover/hooks/usePopoverRoot.d.ts +10 -0
- package/dist/Popover/hooks/usePopoverRoot.js +49 -0
- package/dist/Popover/hooks/usePopoverTrigger.d.ts +297 -0
- package/dist/Popover/hooks/usePopoverTrigger.js +19 -0
- package/dist/Popover/index.d.ts +2 -0
- package/dist/Popover/index.js +2 -0
- package/dist/Popover/types.d.ts +183 -0
- package/dist/Popover/types.js +1 -0
- package/dist/Portal/Portal.d.ts +70 -0
- package/dist/Portal/Portal.js +92 -0
- package/dist/Portal/index.d.ts +2 -0
- package/dist/Portal/index.js +2 -0
- package/dist/Portal/types.d.ts +14 -0
- package/dist/Portal/types.js +1 -0
- package/dist/Progress/Progress.d.ts +126 -0
- package/dist/Progress/Progress.js +172 -0
- package/dist/Progress/ProgressContext.d.ts +16 -0
- package/dist/Progress/ProgressContext.js +7 -0
- package/dist/Progress/hooks/index.d.ts +2 -0
- package/dist/Progress/hooks/index.js +2 -0
- package/dist/Progress/hooks/useProgressContext.d.ts +1 -0
- package/dist/Progress/hooks/useProgressContext.js +1 -0
- package/dist/Progress/hooks/useProgressRoot.d.ts +17 -0
- package/dist/Progress/hooks/useProgressRoot.js +22 -0
- package/dist/Progress/index.d.ts +3 -0
- package/dist/Progress/index.js +3 -0
- package/dist/Progress/types.d.ts +53 -0
- package/dist/Progress/types.js +1 -0
- package/dist/Radio/Radio.d.ts +128 -0
- package/dist/Radio/Radio.js +153 -0
- package/dist/Radio/RadioContext.d.ts +13 -0
- package/dist/Radio/RadioContext.js +3 -0
- package/dist/Radio/hooks/index.d.ts +2 -0
- package/dist/Radio/hooks/index.js +2 -0
- package/dist/Radio/hooks/useRadioContext.d.ts +1 -0
- package/dist/Radio/hooks/useRadioContext.js +1 -0
- package/dist/Radio/hooks/useRadioRoot.d.ts +32 -0
- package/dist/Radio/hooks/useRadioRoot.js +35 -0
- package/dist/Radio/index.d.ts +2 -0
- package/dist/Radio/index.js +2 -0
- package/dist/Radio/types.d.ts +79 -0
- package/dist/Radio/types.js +1 -0
- package/dist/RadioCard/RadioCard.d.ts +176 -0
- package/dist/RadioCard/RadioCard.js +264 -0
- package/dist/RadioCard/RadioCardContext.d.ts +21 -0
- package/dist/RadioCard/RadioCardContext.js +9 -0
- package/dist/RadioCard/RadioCardItemContext.d.ts +14 -0
- package/dist/RadioCard/RadioCardItemContext.js +10 -0
- package/dist/RadioCard/hooks/index.d.ts +3 -0
- package/dist/RadioCard/hooks/index.js +3 -0
- package/dist/RadioCard/hooks/useRadioCardContext.d.ts +1 -0
- package/dist/RadioCard/hooks/useRadioCardContext.js +1 -0
- package/dist/RadioCard/hooks/useRadioCardItemContext.d.ts +1 -0
- package/dist/RadioCard/hooks/useRadioCardItemContext.js +1 -0
- package/dist/RadioCard/hooks/useRadioCardRoot.d.ts +14 -0
- package/dist/RadioCard/hooks/useRadioCardRoot.js +42 -0
- package/dist/RadioCard/index.d.ts +4 -0
- package/dist/RadioCard/index.js +4 -0
- package/dist/RadioCard/types.d.ts +129 -0
- package/dist/RadioCard/types.js +1 -0
- package/dist/RadioGroup/RadioGroup.d.ts +192 -0
- package/dist/RadioGroup/RadioGroup.js +281 -0
- package/dist/RadioGroup/RadioGroupContext.d.ts +12 -0
- package/dist/RadioGroup/RadioGroupContext.js +3 -0
- package/dist/RadioGroup/RadioGroupItemContext.d.ts +4 -0
- package/dist/RadioGroup/RadioGroupItemContext.js +3 -0
- package/dist/RadioGroup/hooks/index.d.ts +3 -0
- package/dist/RadioGroup/hooks/index.js +3 -0
- package/dist/RadioGroup/hooks/useRadioGroupContext.d.ts +1 -0
- package/dist/RadioGroup/hooks/useRadioGroupContext.js +1 -0
- package/dist/RadioGroup/hooks/useRadioGroupItemContext.d.ts +1 -0
- package/dist/RadioGroup/hooks/useRadioGroupItemContext.js +1 -0
- package/dist/RadioGroup/hooks/useRadioGroupRoot.d.ts +14 -0
- package/dist/RadioGroup/hooks/useRadioGroupRoot.js +53 -0
- package/dist/RadioGroup/index.d.ts +2 -0
- package/dist/RadioGroup/index.js +2 -0
- package/dist/RadioGroup/types.d.ts +130 -0
- package/dist/RadioGroup/types.js +1 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +145 -0
- package/dist/SegmentedControl/SegmentedControl.js +229 -0
- package/dist/SegmentedControl/SegmentedControlContext.d.ts +14 -0
- package/dist/SegmentedControl/SegmentedControlContext.js +3 -0
- package/dist/SegmentedControl/hooks/index.d.ts +2 -0
- package/dist/SegmentedControl/hooks/index.js +2 -0
- package/dist/SegmentedControl/hooks/useSegmentedControlContext.d.ts +1 -0
- package/dist/SegmentedControl/hooks/useSegmentedControlContext.js +1 -0
- package/dist/SegmentedControl/hooks/useSegmentedControlRoot.d.ts +14 -0
- package/dist/SegmentedControl/hooks/useSegmentedControlRoot.js +45 -0
- package/dist/SegmentedControl/index.d.ts +2 -0
- package/dist/SegmentedControl/index.js +2 -0
- package/dist/SegmentedControl/types.d.ts +121 -0
- package/dist/SegmentedControl/types.js +1 -0
- package/dist/Select/Select.d.ts +390 -0
- package/dist/Select/Select.js +561 -0
- package/dist/Select/SelectContext.d.ts +31 -0
- package/dist/Select/SelectContext.js +3 -0
- package/dist/Select/SelectItemIndicatorContext.d.ts +23 -0
- package/dist/Select/SelectItemIndicatorContext.js +3 -0
- package/dist/Select/constants.d.ts +6 -0
- package/dist/Select/constants.js +7 -0
- package/dist/Select/hooks/index.d.ts +2 -0
- package/dist/Select/hooks/index.js +2 -0
- package/dist/Select/hooks/useSelectContent.d.ts +301 -0
- package/dist/Select/hooks/useSelectContent.js +134 -0
- package/dist/Select/hooks/useSelectRoot.d.ts +23 -0
- package/dist/Select/hooks/useSelectRoot.js +90 -0
- package/dist/Select/index.d.ts +2 -0
- package/dist/Select/index.js +2 -0
- package/dist/Select/types.d.ts +246 -0
- package/dist/Select/types.js +1 -0
- package/dist/SkipNav/SkipNav.d.ts +137 -0
- package/dist/SkipNav/SkipNav.js +138 -0
- package/dist/SkipNav/index.d.ts +1 -0
- package/dist/SkipNav/index.js +1 -0
- package/dist/SkipNav/types.d.ts +32 -0
- package/dist/SkipNav/types.js +1 -0
- package/dist/Slider/Slider.d.ts +189 -0
- package/dist/Slider/Slider.js +253 -0
- package/dist/Slider/SliderContext.d.ts +48 -0
- package/dist/Slider/SliderContext.js +7 -0
- package/dist/Slider/hooks/index.d.ts +3 -0
- package/dist/Slider/hooks/index.js +3 -0
- package/dist/Slider/hooks/useSliderContext.d.ts +1 -0
- package/dist/Slider/hooks/useSliderContext.js +1 -0
- package/dist/Slider/hooks/useSliderRoot.d.ts +23 -0
- package/dist/Slider/hooks/useSliderRoot.js +123 -0
- package/dist/Slider/hooks/useSliderThumb.d.ts +11 -0
- package/dist/Slider/hooks/useSliderThumb.js +57 -0
- package/dist/Slider/index.d.ts +3 -0
- package/dist/Slider/index.js +3 -0
- package/dist/Slider/types.d.ts +194 -0
- package/dist/Slider/types.js +1 -0
- package/dist/Slider/utils.d.ts +48 -0
- package/dist/Slider/utils.js +105 -0
- package/dist/Slot/Slot.d.ts +126 -0
- package/dist/Slot/Slot.js +210 -0
- package/dist/Slot/composeEventHandlers.d.ts +50 -0
- package/dist/Slot/composeEventHandlers.js +57 -0
- package/dist/Slot/index.d.ts +3 -0
- package/dist/Slot/index.js +3 -0
- package/dist/Slot/types.d.ts +20 -0
- package/dist/Slot/types.js +1 -0
- package/dist/SplitButton/SplitButton.d.ts +286 -0
- package/dist/SplitButton/SplitButton.js +343 -0
- package/dist/SplitButton/SplitButtonContext.d.ts +11 -0
- package/dist/SplitButton/SplitButtonContext.js +12 -0
- package/dist/SplitButton/index.d.ts +2 -0
- package/dist/SplitButton/index.js +1 -0
- package/dist/SplitButton/types.d.ts +161 -0
- package/dist/SplitButton/types.js +1 -0
- package/dist/Status/Status.d.ts +57 -0
- package/dist/Status/Status.js +63 -0
- package/dist/Status/index.d.ts +2 -0
- package/dist/Status/index.js +2 -0
- package/dist/Status/types.d.ts +19 -0
- package/dist/Status/types.js +1 -0
- package/dist/Switch/Switch.d.ts +122 -0
- package/dist/Switch/Switch.js +143 -0
- package/dist/Switch/SwitchContext.d.ts +12 -0
- package/dist/Switch/SwitchContext.js +7 -0
- package/dist/Switch/hooks/index.d.ts +2 -0
- package/dist/Switch/hooks/index.js +2 -0
- package/dist/Switch/hooks/useSwitchContext.d.ts +1 -0
- package/dist/Switch/hooks/useSwitchContext.js +1 -0
- package/dist/Switch/hooks/useSwitchRoot.d.ts +30 -0
- package/dist/Switch/hooks/useSwitchRoot.js +33 -0
- package/dist/Switch/index.d.ts +3 -0
- package/dist/Switch/index.js +3 -0
- package/dist/Switch/types.d.ts +83 -0
- package/dist/Switch/types.js +1 -0
- package/dist/Table/Table.d.ts +443 -0
- package/dist/Table/Table.js +494 -0
- package/dist/Table/TableExpandableContext.d.ts +2 -0
- package/dist/Table/TableExpandableContext.js +3 -0
- package/dist/Table/index.d.ts +2 -0
- package/dist/Table/index.js +2 -0
- package/dist/Table/types.d.ts +214 -0
- package/dist/Table/types.js +1 -0
- package/dist/Tabs/Tabs.d.ts +270 -0
- package/dist/Tabs/Tabs.js +324 -0
- package/dist/Tabs/TabsContext.d.ts +11 -0
- package/dist/Tabs/TabsContext.js +12 -0
- package/dist/Tabs/hooks/index.d.ts +4 -0
- package/dist/Tabs/hooks/index.js +4 -0
- package/dist/Tabs/hooks/useTabsContent.d.ts +10 -0
- package/dist/Tabs/hooks/useTabsContent.js +27 -0
- package/dist/Tabs/hooks/useTabsContext.d.ts +1 -0
- package/dist/Tabs/hooks/useTabsContext.js +1 -0
- package/dist/Tabs/hooks/useTabsRoot.d.ts +21 -0
- package/dist/Tabs/hooks/useTabsRoot.js +97 -0
- package/dist/Tabs/hooks/useTabsTrigger.d.ts +13 -0
- package/dist/Tabs/hooks/useTabsTrigger.js +83 -0
- package/dist/Tabs/index.d.ts +3 -0
- package/dist/Tabs/index.js +3 -0
- package/dist/Tabs/types.d.ts +139 -0
- package/dist/Tabs/types.js +1 -0
- package/dist/Tabs/utils.d.ts +4 -0
- package/dist/Tabs/utils.js +8 -0
- package/dist/Textarea/Textarea.d.ts +81 -0
- package/dist/Textarea/Textarea.js +93 -0
- package/dist/Textarea/index.d.ts +2 -0
- package/dist/Textarea/index.js +2 -0
- package/dist/Textarea/types.d.ts +27 -0
- package/dist/Textarea/types.js +1 -0
- package/dist/Toggle/Toggle.d.ts +82 -0
- package/dist/Toggle/Toggle.js +102 -0
- package/dist/Toggle/index.d.ts +2 -0
- package/dist/Toggle/index.js +2 -0
- package/dist/Toggle/types.d.ts +72 -0
- package/dist/Toggle/types.js +1 -0
- package/dist/ToggleGroup/ToggleGroup.d.ts +144 -0
- package/dist/ToggleGroup/ToggleGroup.js +227 -0
- package/dist/ToggleGroup/ToggleGroupContext.d.ts +2 -0
- package/dist/ToggleGroup/ToggleGroupContext.js +3 -0
- package/dist/ToggleGroup/hooks/index.d.ts +2 -0
- package/dist/ToggleGroup/hooks/index.js +2 -0
- package/dist/ToggleGroup/hooks/useToggleGroupContext.d.ts +1 -0
- package/dist/ToggleGroup/hooks/useToggleGroupContext.js +1 -0
- package/dist/ToggleGroup/hooks/useToggleGroupRoot.d.ts +21 -0
- package/dist/ToggleGroup/hooks/useToggleGroupRoot.js +79 -0
- package/dist/ToggleGroup/index.d.ts +2 -0
- package/dist/ToggleGroup/index.js +2 -0
- package/dist/ToggleGroup/types.d.ts +141 -0
- package/dist/ToggleGroup/types.js +1 -0
- package/dist/Tooltip/Tooltip.d.ts +231 -0
- package/dist/Tooltip/Tooltip.js +279 -0
- package/dist/Tooltip/TooltipContext.d.ts +6 -0
- package/dist/Tooltip/TooltipContext.js +7 -0
- package/dist/Tooltip/hooks/index.d.ts +4 -0
- package/dist/Tooltip/hooks/index.js +4 -0
- package/dist/Tooltip/hooks/useTooltipContent.d.ts +289 -0
- package/dist/Tooltip/hooks/useTooltipContent.js +50 -0
- package/dist/Tooltip/hooks/useTooltipProvider.d.ts +9 -0
- package/dist/Tooltip/hooks/useTooltipProvider.js +60 -0
- package/dist/Tooltip/hooks/useTooltipRoot.d.ts +6 -0
- package/dist/Tooltip/hooks/useTooltipRoot.js +100 -0
- package/dist/Tooltip/hooks/useTooltipTrigger.d.ts +299 -0
- package/dist/Tooltip/hooks/useTooltipTrigger.js +22 -0
- package/dist/Tooltip/index.d.ts +2 -0
- package/dist/Tooltip/index.js +2 -0
- package/dist/Tooltip/types.d.ts +183 -0
- package/dist/Tooltip/types.js +1 -0
- package/dist/Tree/Tree.d.ts +398 -0
- package/dist/Tree/Tree.js +536 -0
- package/dist/Tree/TreeContext.d.ts +4 -0
- package/dist/Tree/TreeContext.js +5 -0
- package/dist/Tree/hooks/index.d.ts +3 -0
- package/dist/Tree/hooks/index.js +3 -0
- package/dist/Tree/hooks/useTreeItemKeyboard.d.ts +16 -0
- package/dist/Tree/hooks/useTreeItemKeyboard.js +71 -0
- package/dist/Tree/hooks/useTreePath.d.ts +88 -0
- package/dist/Tree/hooks/useTreePath.js +96 -0
- package/dist/Tree/hooks/useTreeRoot.d.ts +19 -0
- package/dist/Tree/hooks/useTreeRoot.js +185 -0
- package/dist/Tree/index.d.ts +4 -0
- package/dist/Tree/index.js +4 -0
- package/dist/Tree/types.d.ts +269 -0
- package/dist/Tree/types.js +1 -0
- package/dist/Tree/utils.d.ts +45 -0
- package/dist/Tree/utils.js +79 -0
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +62 -0
- package/dist/VisuallyHidden/VisuallyHidden.js +83 -0
- package/dist/VisuallyHidden/index.d.ts +2 -0
- package/dist/VisuallyHidden/index.js +2 -0
- package/dist/VisuallyHidden/types.d.ts +18 -0
- package/dist/VisuallyHidden/types.js +1 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/useCollection.d.ts +50 -0
- package/dist/hooks/useCollection.js +47 -0
- package/dist/hooks/useControllableState.d.ts +50 -0
- package/dist/hooks/useControllableState.js +14 -0
- package/dist/hooks/useRovingTabindex.d.ts +106 -0
- package/dist/hooks/useRovingTabindex.js +110 -0
- package/dist/hooks/useTypeahead.d.ts +31 -0
- package/dist/hooks/useTypeahead.js +65 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.js +50 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.js +1 -0
- package/dist/useLocalStorage/index.d.ts +1 -0
- package/dist/useLocalStorage/index.js +1 -0
- package/dist/useLocalStorage/useLocalStorage.d.ts +46 -0
- package/dist/useLocalStorage/useLocalStorage.js +125 -0
- package/dist/useMediaQuery/index.d.ts +1 -0
- package/dist/useMediaQuery/index.js +1 -0
- package/dist/useMediaQuery/useMediaQuery.d.ts +30 -0
- package/dist/useMediaQuery/useMediaQuery.js +43 -0
- package/dist/usePagination/index.d.ts +1 -0
- package/dist/usePagination/index.js +1 -0
- package/dist/usePagination/usePagination.d.ts +163 -0
- package/dist/usePagination/usePagination.js +130 -0
- package/dist/utils/createStrictContext.d.ts +33 -0
- package/dist/utils/createStrictContext.js +47 -0
- package/dist/utils/deriveId.d.ts +25 -0
- package/dist/utils/deriveId.js +28 -0
- package/dist/utils/focusable.d.ts +8 -0
- package/dist/utils/focusable.js +16 -0
- package/dist/utils/getKeyToActionMap.d.ts +64 -0
- package/dist/utils/getKeyToActionMap.js +49 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +4 -0
- package/package.json +7 -6
- package/src/AccessibleIcon/AccessibleIcon.tsx +0 -67
- package/src/AccessibleIcon/README.md +0 -42
- package/src/AccessibleIcon/__tests__/AccessibleIcon.test.tsx +0 -52
- package/src/AccessibleIcon/index.ts +0 -2
- package/src/AccessibleIcon/types.ts +0 -25
- package/src/Accordion/Accordion.tsx +0 -455
- package/src/Accordion/AccordionContext.ts +0 -12
- package/src/Accordion/README.md +0 -202
- package/src/Accordion/__tests__/Accordion.asChild.test.tsx +0 -283
- package/src/Accordion/__tests__/Accordion.basic-rendering.test.tsx +0 -348
- package/src/Accordion/__tests__/Accordion.controlled-state.test.tsx +0 -175
- package/src/Accordion/__tests__/Accordion.data-attributes.test.tsx +0 -272
- package/src/Accordion/__tests__/Accordion.disabled-items.test.tsx +0 -353
- package/src/Accordion/__tests__/Accordion.error-handling.test.tsx +0 -152
- package/src/Accordion/__tests__/Accordion.forceMount.test.tsx +0 -119
- package/src/Accordion/__tests__/Accordion.keyboard-interaction.test.tsx +0 -736
- package/src/Accordion/__tests__/Accordion.mouse-interaction.test.tsx +0 -212
- package/src/Accordion/__tests__/Accordion.multiple-mode.test.tsx +0 -90
- package/src/Accordion/__tests__/Accordion.reading-direction.test.tsx +0 -139
- package/src/Accordion/__tests__/Accordion.uncontrolled-state.test.tsx +0 -154
- package/src/Accordion/hooks/index.ts +0 -6
- package/src/Accordion/hooks/useAccordionContext.ts +0 -1
- package/src/Accordion/hooks/useAccordionHeaderContext.ts +0 -10
- package/src/Accordion/hooks/useAccordionItem.ts +0 -22
- package/src/Accordion/hooks/useAccordionItemContext.ts +0 -1
- package/src/Accordion/hooks/useAccordionRoot.ts +0 -188
- package/src/Accordion/hooks/useAccordionTrigger.ts +0 -98
- package/src/Accordion/index.ts +0 -2
- package/src/Accordion/types.ts +0 -174
- package/src/Alert/Alert.tsx +0 -79
- package/src/Alert/README.md +0 -54
- package/src/Alert/__tests__/Alert.test.tsx +0 -33
- package/src/Alert/index.ts +0 -2
- package/src/Alert/types.ts +0 -22
- package/src/Avatar/Avatar.tsx +0 -246
- package/src/Avatar/AvatarContext.ts +0 -26
- package/src/Avatar/README.md +0 -116
- package/src/Avatar/__tests__/Avatar.asChild.test.tsx +0 -53
- package/src/Avatar/__tests__/Avatar.basic-rendering.test.tsx +0 -24
- package/src/Avatar/__tests__/Avatar.error-handling.test.tsx +0 -30
- package/src/Avatar/__tests__/Avatar.fallback.test.tsx +0 -105
- package/src/Avatar/__tests__/Avatar.image-loading.test.tsx +0 -116
- package/src/Avatar/hooks/index.ts +0 -2
- package/src/Avatar/hooks/useAvatarContext.ts +0 -1
- package/src/Avatar/hooks/useAvatarImage.ts +0 -56
- package/src/Avatar/index.ts +0 -3
- package/src/Avatar/types.ts +0 -56
- package/src/Breadcrumb/Breadcrumb.tsx +0 -374
- package/src/Breadcrumb/README.md +0 -158
- package/src/Breadcrumb/__tests__/Breadcrumb.asChild.test.tsx +0 -33
- package/src/Breadcrumb/__tests__/Breadcrumb.basic-rendering.test.tsx +0 -143
- package/src/Breadcrumb/__tests__/Breadcrumb.ellipsis.test.tsx +0 -110
- package/src/Breadcrumb/index.ts +0 -2
- package/src/Breadcrumb/types.ts +0 -88
- package/src/Button/Button.tsx +0 -100
- package/src/Button/README.md +0 -112
- package/src/Button/__tests__/Button.asChild.test.tsx +0 -91
- package/src/Button/__tests__/Button.basic-rendering.test.tsx +0 -132
- package/src/Button/__tests__/Button.contract.test.tsx +0 -72
- package/src/Button/__tests__/Button.disabled.test.tsx +0 -52
- package/src/Button/__tests__/Button.icon-usage.test.tsx +0 -57
- package/src/Button/__tests__/Button.keyboard-interaction.test.tsx +0 -70
- package/src/Button/index.ts +0 -2
- package/src/Button/types.ts +0 -33
- package/src/Carousel/Carousel.tsx +0 -972
- package/src/Carousel/CarouselContext.ts +0 -15
- package/src/Carousel/README.md +0 -1447
- package/src/Carousel/__tests__/Carousel.asChild.test.tsx +0 -178
- package/src/Carousel/__tests__/Carousel.auto-play.test.tsx +0 -617
- package/src/Carousel/__tests__/Carousel.autoplay-status.test.tsx +0 -239
- package/src/Carousel/__tests__/Carousel.basic-rendering.test.tsx +0 -569
- package/src/Carousel/__tests__/Carousel.controlled-state.test.tsx +0 -137
- package/src/Carousel/__tests__/Carousel.drag-status.test.tsx +0 -292
- package/src/Carousel/__tests__/Carousel.dynamic-slides.test.tsx +0 -38
- package/src/Carousel/__tests__/Carousel.error-handling.test.tsx +0 -81
- package/src/Carousel/__tests__/Carousel.ids.test.tsx +0 -111
- package/src/Carousel/__tests__/Carousel.imperative-api.test.tsx +0 -213
- package/src/Carousel/__tests__/Carousel.indicators.test.tsx +0 -661
- package/src/Carousel/__tests__/Carousel.infinite.test.tsx +0 -1453
- package/src/Carousel/__tests__/Carousel.instant-scroll.test.tsx +0 -124
- package/src/Carousel/__tests__/Carousel.intersection-observer.test.tsx +0 -364
- package/src/Carousel/__tests__/Carousel.keyboard-navigation.test.tsx +0 -158
- package/src/Carousel/__tests__/Carousel.loop.test.tsx +0 -163
- package/src/Carousel/__tests__/Carousel.loopEngine.test.ts +0 -77
- package/src/Carousel/__tests__/Carousel.mouse-drag.test.tsx +0 -504
- package/src/Carousel/__tests__/Carousel.multi-slide-bounds.test.tsx +0 -91
- package/src/Carousel/__tests__/Carousel.orientation.test.tsx +0 -207
- package/src/Carousel/__tests__/Carousel.overscroll.test.tsx +0 -532
- package/src/Carousel/__tests__/Carousel.page-snap-points.test.tsx +0 -50
- package/src/Carousel/__tests__/Carousel.play-pause.test.tsx +0 -232
- package/src/Carousel/__tests__/Carousel.prev-next.test.tsx +0 -68
- package/src/Carousel/__tests__/Carousel.progress-text.test.tsx +0 -76
- package/src/Carousel/__tests__/Carousel.reduced-motion.test.tsx +0 -46
- package/src/Carousel/__tests__/Carousel.refresh-progress.test.tsx +0 -84
- package/src/Carousel/__tests__/Carousel.scroll-margin.test.tsx +0 -167
- package/src/Carousel/__tests__/Carousel.scroll-progress.test.tsx +0 -518
- package/src/Carousel/__tests__/Carousel.scroll-snap-change.test.tsx +0 -200
- package/src/Carousel/__tests__/Carousel.scroll-sync.test.tsx +0 -322
- package/src/Carousel/__tests__/Carousel.scroll-to-index.test.tsx +0 -115
- package/src/Carousel/__tests__/Carousel.slide-snap.test.tsx +0 -172
- package/src/Carousel/__tests__/Carousel.slides-per-move.test.tsx +0 -329
- package/src/Carousel/__tests__/Carousel.slides-per-page.test.tsx +0 -267
- package/src/Carousel/__tests__/Carousel.snap-type.test.tsx +0 -35
- package/src/Carousel/__tests__/Carousel.ssr.test.tsx +0 -28
- package/src/Carousel/__tests__/Carousel.touch-interaction.test.tsx +0 -96
- package/src/Carousel/__tests__/Carousel.transition-modes.test.tsx +0 -95
- package/src/Carousel/__tests__/Carousel.translations.test.tsx +0 -180
- package/src/Carousel/__tests__/Carousel.uncontrolled-state.test.tsx +0 -146
- package/src/Carousel/__tests__/Carousel.wheel.test.tsx +0 -160
- package/src/Carousel/hooks/index.ts +0 -5
- package/src/Carousel/hooks/useCarouselContext.ts +0 -13
- package/src/Carousel/hooks/useCarouselLoop.ts +0 -869
- package/src/Carousel/hooks/useCarouselRoot.ts +0 -746
- package/src/Carousel/hooks/useCarouselSlide.ts +0 -80
- package/src/Carousel/hooks/useCarouselViewport.ts +0 -898
- package/src/Carousel/index.ts +0 -3
- package/src/Carousel/loopEngine.ts +0 -54
- package/src/Carousel/types.ts +0 -830
- package/src/Checkbox/Checkbox.tsx +0 -217
- package/src/Checkbox/CheckboxContext.ts +0 -20
- package/src/Checkbox/README.md +0 -137
- package/src/Checkbox/__tests__/Checkbox.basic-rendering.test.tsx +0 -93
- package/src/Checkbox/__tests__/Checkbox.contract.test.tsx +0 -106
- package/src/Checkbox/__tests__/Checkbox.controlled-state.test.tsx +0 -74
- package/src/Checkbox/__tests__/Checkbox.disabled.test.tsx +0 -45
- package/src/Checkbox/__tests__/Checkbox.form.test.tsx +0 -53
- package/src/Checkbox/__tests__/Checkbox.indeterminate.test.tsx +0 -76
- package/src/Checkbox/__tests__/Checkbox.indicator.test.tsx +0 -92
- package/src/Checkbox/__tests__/Checkbox.uncontrolled-state.test.tsx +0 -105
- package/src/Checkbox/hooks/index.ts +0 -3
- package/src/Checkbox/hooks/useCheckboxContext.ts +0 -1
- package/src/Checkbox/hooks/useCheckboxInput.ts +0 -53
- package/src/Checkbox/hooks/useCheckboxRoot.ts +0 -32
- package/src/Checkbox/index.ts +0 -2
- package/src/Checkbox/types.ts +0 -86
- package/src/CheckboxCard/CheckboxCard.tsx +0 -219
- package/src/CheckboxCard/CheckboxCardContext.ts +0 -25
- package/src/CheckboxCard/README.md +0 -114
- package/src/CheckboxCard/__tests__/CheckboxCard.asChild.test.tsx +0 -54
- package/src/CheckboxCard/__tests__/CheckboxCard.basic-rendering.test.tsx +0 -65
- package/src/CheckboxCard/__tests__/CheckboxCard.controlled-state.test.tsx +0 -77
- package/src/CheckboxCard/__tests__/CheckboxCard.disabled.test.tsx +0 -55
- package/src/CheckboxCard/__tests__/CheckboxCard.error-handling.test.tsx +0 -20
- package/src/CheckboxCard/__tests__/CheckboxCard.indeterminate.test.tsx +0 -60
- package/src/CheckboxCard/__tests__/CheckboxCard.indicator.test.tsx +0 -136
- package/src/CheckboxCard/__tests__/CheckboxCard.uncontrolled-state.test.tsx +0 -73
- package/src/CheckboxCard/hooks/index.ts +0 -2
- package/src/CheckboxCard/hooks/useCheckboxCardContext.ts +0 -1
- package/src/CheckboxCard/hooks/useCheckboxCardRoot.ts +0 -30
- package/src/CheckboxCard/index.ts +0 -3
- package/src/CheckboxCard/types.ts +0 -97
- package/src/Collapsible/Collapsible.tsx +0 -378
- package/src/Collapsible/CollapsibleContext.ts +0 -7
- package/src/Collapsible/README.md +0 -214
- package/src/Collapsible/__tests__/Collapsible.asChild.test.tsx +0 -329
- package/src/Collapsible/__tests__/Collapsible.basic-rendering.test.tsx +0 -145
- package/src/Collapsible/__tests__/Collapsible.collapsedHeight.test.tsx +0 -140
- package/src/Collapsible/__tests__/Collapsible.controlled-state.test.tsx +0 -134
- package/src/Collapsible/__tests__/Collapsible.disabled.test.tsx +0 -132
- package/src/Collapsible/__tests__/Collapsible.error-handling.test.tsx +0 -40
- package/src/Collapsible/__tests__/Collapsible.forceMount.test.tsx +0 -111
- package/src/Collapsible/__tests__/Collapsible.triggerIcon.test.tsx +0 -93
- package/src/Collapsible/__tests__/Collapsible.uncontrolled-state.test.tsx +0 -125
- package/src/Collapsible/hooks/index.ts +0 -2
- package/src/Collapsible/hooks/useCollapsibleRoot.ts +0 -34
- package/src/Collapsible/hooks/useCollapsibleTrigger.ts +0 -51
- package/src/Collapsible/index.ts +0 -2
- package/src/Collapsible/types.ts +0 -148
- package/src/Combobox/Combobox.tsx +0 -508
- package/src/Combobox/ComboboxContext.ts +0 -23
- package/src/Combobox/README.md +0 -170
- package/src/Combobox/__tests__/Combobox.asChild.test.tsx +0 -62
- package/src/Combobox/__tests__/Combobox.basic-rendering.test.tsx +0 -16
- package/src/Combobox/__tests__/Combobox.content.test.tsx +0 -36
- package/src/Combobox/__tests__/Combobox.controlled-state.test.tsx +0 -88
- package/src/Combobox/__tests__/Combobox.empty.test.tsx +0 -42
- package/src/Combobox/__tests__/Combobox.ids.test.tsx +0 -66
- package/src/Combobox/__tests__/Combobox.item.test.tsx +0 -76
- package/src/Combobox/__tests__/Combobox.keyboard-interaction.test.tsx +0 -196
- package/src/Combobox/__tests__/Combobox.light-dismiss.test.tsx +0 -101
- package/src/Combobox/__tests__/Combobox.query.test.tsx +0 -105
- package/src/Combobox/hooks/index.ts +0 -1
- package/src/Combobox/hooks/useComboboxRoot.ts +0 -2
- package/src/Combobox/index.ts +0 -3
- package/src/Combobox/types.ts +0 -133
- package/src/ContextMenu/ContextMenu.tsx +0 -1296
- package/src/ContextMenu/ContextMenuContentContext.ts +0 -15
- package/src/ContextMenu/ContextMenuContext.ts +0 -21
- package/src/ContextMenu/ContextMenuGroupContext.ts +0 -8
- package/src/ContextMenu/ContextMenuItemIndicatorContext.ts +0 -8
- package/src/ContextMenu/ContextMenuRadioGroupContext.ts +0 -9
- package/src/ContextMenu/ContextMenuSubContext.ts +0 -15
- package/src/ContextMenu/README.md +0 -275
- package/src/ContextMenu/__tests__/ContextMenu.asChild.test.tsx +0 -186
- package/src/ContextMenu/__tests__/ContextMenu.basic-rendering.test.tsx +0 -39
- package/src/ContextMenu/__tests__/ContextMenu.checkbox-item.test.tsx +0 -168
- package/src/ContextMenu/__tests__/ContextMenu.error-handling.test.tsx +0 -113
- package/src/ContextMenu/__tests__/ContextMenu.group-label.test.tsx +0 -48
- package/src/ContextMenu/__tests__/ContextMenu.item-indicator.test.tsx +0 -88
- package/src/ContextMenu/__tests__/ContextMenu.item.test.tsx +0 -106
- package/src/ContextMenu/__tests__/ContextMenu.keyboard-interaction.test.tsx +0 -227
- package/src/ContextMenu/__tests__/ContextMenu.mouse-interaction.test.tsx +0 -268
- package/src/ContextMenu/__tests__/ContextMenu.radio-item.test.tsx +0 -152
- package/src/ContextMenu/__tests__/ContextMenu.reading-direction.test.tsx +0 -152
- package/src/ContextMenu/__tests__/ContextMenu.separator.test.tsx +0 -47
- package/src/ContextMenu/__tests__/ContextMenu.state-modes.test.tsx +0 -119
- package/src/ContextMenu/__tests__/ContextMenu.sub.test.tsx +0 -407
- package/src/ContextMenu/__tests__/ContextMenu.typeahead.test.tsx +0 -134
- package/src/ContextMenu/constants.ts +0 -4
- package/src/ContextMenu/index.ts +0 -2
- package/src/ContextMenu/types.ts +0 -484
- package/src/DirectionProvider/DirectionContext.ts +0 -21
- package/src/DirectionProvider/DirectionProvider.tsx +0 -69
- package/src/DirectionProvider/README.md +0 -62
- package/src/DirectionProvider/__tests__/DirectionProvider.test.tsx +0 -34
- package/src/DirectionProvider/index.ts +0 -3
- package/src/DirectionProvider/types.ts +0 -36
- package/src/Divider/Divider.tsx +0 -74
- package/src/Divider/README.md +0 -57
- package/src/Divider/__tests__/Divider.contract.test.tsx +0 -66
- package/src/Divider/__tests__/Divider.test.tsx +0 -46
- package/src/Divider/index.ts +0 -2
- package/src/Divider/types.ts +0 -17
- package/src/Drawer/Drawer.tsx +0 -315
- package/src/Drawer/README.md +0 -124
- package/src/Drawer/__tests__/Drawer.behavior.test.tsx +0 -100
- package/src/Drawer/__tests__/Drawer.focus-trap.test.tsx +0 -55
- package/src/Drawer/__tests__/Drawer.rendering.test.tsx +0 -111
- package/src/Drawer/__tests__/Drawer.side.test.tsx +0 -69
- package/src/Drawer/__tests__/dialog-polyfill.ts +0 -39
- package/src/Drawer/index.ts +0 -2
- package/src/Drawer/types.ts +0 -66
- package/src/Dropdown/Dropdown.tsx +0 -985
- package/src/Dropdown/DropdownContentContext.ts +0 -15
- package/src/Dropdown/DropdownContext.ts +0 -17
- package/src/Dropdown/DropdownGroupContext.ts +0 -8
- package/src/Dropdown/DropdownItemIndicatorContext.ts +0 -13
- package/src/Dropdown/DropdownRadioGroupContext.ts +0 -9
- package/src/Dropdown/DropdownSubContext.ts +0 -15
- package/src/Dropdown/README.md +0 -286
- package/src/Dropdown/__tests__/Dropdown.asChild.test.tsx +0 -286
- package/src/Dropdown/__tests__/Dropdown.basic-rendering.test.tsx +0 -43
- package/src/Dropdown/__tests__/Dropdown.checkbox-item.test.tsx +0 -121
- package/src/Dropdown/__tests__/Dropdown.disabled.test.tsx +0 -143
- package/src/Dropdown/__tests__/Dropdown.error-handling.test.tsx +0 -85
- package/src/Dropdown/__tests__/Dropdown.group-label.test.tsx +0 -68
- package/src/Dropdown/__tests__/Dropdown.item-indicator.test.tsx +0 -260
- package/src/Dropdown/__tests__/Dropdown.item.test.tsx +0 -72
- package/src/Dropdown/__tests__/Dropdown.keyboard-edge-cases.test.tsx +0 -77
- package/src/Dropdown/__tests__/Dropdown.keyboard-interaction.test.tsx +0 -310
- package/src/Dropdown/__tests__/Dropdown.mouse-interaction.test.tsx +0 -347
- package/src/Dropdown/__tests__/Dropdown.radio-item.test.tsx +0 -134
- package/src/Dropdown/__tests__/Dropdown.reading-direction.test.tsx +0 -153
- package/src/Dropdown/__tests__/Dropdown.separator.test.tsx +0 -46
- package/src/Dropdown/__tests__/Dropdown.state-modes.test.tsx +0 -100
- package/src/Dropdown/__tests__/Dropdown.sub.test.tsx +0 -185
- package/src/Dropdown/__tests__/Dropdown.trigger.test.tsx +0 -110
- package/src/Dropdown/__tests__/Dropdown.typeahead.test.tsx +0 -133
- package/src/Dropdown/constants.ts +0 -4
- package/src/Dropdown/hooks/index.ts +0 -9
- package/src/Dropdown/hooks/useCloseSiblingSub.ts +0 -13
- package/src/Dropdown/hooks/useDropdownContent.ts +0 -162
- package/src/Dropdown/hooks/useDropdownContext.ts +0 -1
- package/src/Dropdown/hooks/useDropdownGroup.ts +0 -18
- package/src/Dropdown/hooks/useDropdownItem.ts +0 -49
- package/src/Dropdown/hooks/useDropdownLabel.ts +0 -15
- package/src/Dropdown/hooks/useDropdownRoot.ts +0 -57
- package/src/Dropdown/hooks/useDropdownSubContext.ts +0 -1
- package/src/Dropdown/hooks/useDropdownTrigger.ts +0 -31
- package/src/Dropdown/index.ts +0 -2
- package/src/Dropdown/types.ts +0 -558
- package/src/EmptyState/EmptyState.tsx +0 -329
- package/src/EmptyState/README.md +0 -129
- package/src/EmptyState/__tests__/EmptyState.Actions.test.tsx +0 -37
- package/src/EmptyState/__tests__/EmptyState.Description.test.tsx +0 -32
- package/src/EmptyState/__tests__/EmptyState.Media.test.tsx +0 -34
- package/src/EmptyState/__tests__/EmptyState.Root.test.tsx +0 -38
- package/src/EmptyState/__tests__/EmptyState.Title.test.tsx +0 -28
- package/src/EmptyState/index.ts +0 -2
- package/src/EmptyState/types.ts +0 -65
- package/src/Field/Field.tsx +0 -276
- package/src/Field/FieldContext.ts +0 -22
- package/src/Field/README.md +0 -167
- package/src/Field/__tests__/Field.asChild.test.tsx +0 -83
- package/src/Field/__tests__/Field.basic-rendering.test.tsx +0 -115
- package/src/Field/__tests__/Field.contract.test.tsx +0 -91
- package/src/Field/__tests__/Field.error-handling.test.tsx +0 -23
- package/src/Field/__tests__/Field.state-cascade.test.tsx +0 -96
- package/src/Field/hooks/__tests__/useFieldProps.test.tsx +0 -142
- package/src/Field/hooks/index.ts +0 -2
- package/src/Field/hooks/useFieldContext.ts +0 -1
- package/src/Field/hooks/useFieldProps.ts +0 -57
- package/src/Field/index.ts +0 -2
- package/src/Field/types.ts +0 -85
- package/src/Fieldset/Fieldset.tsx +0 -156
- package/src/Fieldset/README.md +0 -74
- package/src/Fieldset/__tests__/Fieldset.basic-rendering.test.tsx +0 -90
- package/src/Fieldset/__tests__/Fieldset.disabled.test.tsx +0 -41
- package/src/Fieldset/index.ts +0 -2
- package/src/Fieldset/types.ts +0 -25
- package/src/Input/Input.tsx +0 -128
- package/src/Input/README.md +0 -180
- package/src/Input/__tests__/Input.asChild.test.tsx +0 -85
- package/src/Input/__tests__/Input.basic-rendering.test.tsx +0 -123
- package/src/Input/__tests__/Input.contract.test.tsx +0 -77
- package/src/Input/__tests__/Input.disabled.test.tsx +0 -49
- package/src/Input/__tests__/Input.field-integration.test.tsx +0 -148
- package/src/Input/index.ts +0 -2
- package/src/Input/types.ts +0 -28
- package/src/InputGroup/InputGroup.tsx +0 -243
- package/src/InputGroup/README.md +0 -178
- package/src/InputGroup/__tests__/InputGroup.asChild.test.tsx +0 -110
- package/src/InputGroup/__tests__/InputGroup.basic-rendering.test.tsx +0 -120
- package/src/InputGroup/__tests__/InputGroup.contract.test.tsx +0 -60
- package/src/InputGroup/index.ts +0 -2
- package/src/InputGroup/types.ts +0 -43
- package/src/Listbox/Listbox.tsx +0 -475
- package/src/Listbox/ListboxContext.ts +0 -48
- package/src/Listbox/README.md +0 -248
- package/src/Listbox/__tests__/Listbox.active-descendant.test.tsx +0 -128
- package/src/Listbox/__tests__/Listbox.asChild.test.tsx +0 -91
- package/src/Listbox/__tests__/Listbox.basic-rendering.test.tsx +0 -16
- package/src/Listbox/__tests__/Listbox.controlled-state.test.tsx +0 -114
- package/src/Listbox/__tests__/Listbox.disabled.test.tsx +0 -90
- package/src/Listbox/__tests__/Listbox.fixtures.ts +0 -27
- package/src/Listbox/__tests__/Listbox.group-label.test.tsx +0 -97
- package/src/Listbox/__tests__/Listbox.group.test.tsx +0 -45
- package/src/Listbox/__tests__/Listbox.keyboard-edge-cases.test.tsx +0 -144
- package/src/Listbox/__tests__/Listbox.keyboard-interaction.test.tsx +0 -112
- package/src/Listbox/__tests__/Listbox.modifier-keys.test.tsx +0 -86
- package/src/Listbox/__tests__/Listbox.multi-select-keyboard.test.tsx +0 -368
- package/src/Listbox/__tests__/Listbox.multiple-mode.test.tsx +0 -91
- package/src/Listbox/__tests__/Listbox.mutation-hardening.test.tsx +0 -480
- package/src/Listbox/__tests__/Listbox.orientation.test.tsx +0 -59
- package/src/Listbox/__tests__/Listbox.reading-direction.test.tsx +0 -65
- package/src/Listbox/__tests__/Listbox.reorder.test.tsx +0 -78
- package/src/Listbox/__tests__/Listbox.selection-follows-focus.test.tsx +0 -64
- package/src/Listbox/__tests__/Listbox.strict-context.test.tsx +0 -21
- package/src/Listbox/__tests__/Listbox.typeahead.test.tsx +0 -123
- package/src/Listbox/__tests__/Listbox.uncontrolled-state.test.tsx +0 -48
- package/src/Listbox/constants.ts +0 -2
- package/src/Listbox/hooks/index.ts +0 -1
- package/src/Listbox/hooks/useListboxRoot.ts +0 -407
- package/src/Listbox/index.ts +0 -3
- package/src/Listbox/types.ts +0 -238
- package/src/MillerColumns/MillerColumns.tsx +0 -490
- package/src/MillerColumns/MillerColumnsContext.ts +0 -25
- package/src/MillerColumns/README.md +0 -348
- package/src/MillerColumns/__tests__/MillerColumns.aria.test.tsx +0 -127
- package/src/MillerColumns/__tests__/MillerColumns.asChild.test.tsx +0 -106
- package/src/MillerColumns/__tests__/MillerColumns.auto-scroll.test.tsx +0 -70
- package/src/MillerColumns/__tests__/MillerColumns.basic-rendering.test.tsx +0 -67
- package/src/MillerColumns/__tests__/MillerColumns.column-projection.test.tsx +0 -161
- package/src/MillerColumns/__tests__/MillerColumns.controlled-state.test.tsx +0 -90
- package/src/MillerColumns/__tests__/MillerColumns.data-attributes.test.tsx +0 -125
- package/src/MillerColumns/__tests__/MillerColumns.disabled-items.test.tsx +0 -65
- package/src/MillerColumns/__tests__/MillerColumns.error-handling.test.tsx +0 -57
- package/src/MillerColumns/__tests__/MillerColumns.fixtures.ts +0 -15
- package/src/MillerColumns/__tests__/MillerColumns.item-indicator.test.tsx +0 -57
- package/src/MillerColumns/__tests__/MillerColumns.keyboard-interaction.test.tsx +0 -214
- package/src/MillerColumns/__tests__/MillerColumns.keyboard-selection-state.test.tsx +0 -96
- package/src/MillerColumns/__tests__/MillerColumns.preview-panel.test.tsx +0 -72
- package/src/MillerColumns/__tests__/MillerColumns.preview-visibility.test.tsx +0 -79
- package/src/MillerColumns/__tests__/MillerColumns.resize.test.tsx +0 -326
- package/src/MillerColumns/__tests__/MillerColumns.roving-tabindex.test.tsx +0 -91
- package/src/MillerColumns/__tests__/MillerColumns.selection.test.tsx +0 -54
- package/src/MillerColumns/__tests__/MillerColumns.styled-parts.test.tsx +0 -143
- package/src/MillerColumns/__tests__/MillerColumns.typeahead.test.tsx +0 -104
- package/src/MillerColumns/__tests__/MillerColumns.uncontrolled-state.test.tsx +0 -70
- package/src/MillerColumns/constants.ts +0 -2
- package/src/MillerColumns/hooks/index.ts +0 -7
- package/src/MillerColumns/hooks/useMillerColumnsColumn.ts +0 -26
- package/src/MillerColumns/hooks/useMillerColumnsColumnContext.ts +0 -1
- package/src/MillerColumns/hooks/useMillerColumnsContext.ts +0 -1
- package/src/MillerColumns/hooks/useMillerColumnsItem.ts +0 -179
- package/src/MillerColumns/hooks/useMillerColumnsItemContext.ts +0 -1
- package/src/MillerColumns/hooks/useMillerColumnsResizeHandle.ts +0 -146
- package/src/MillerColumns/hooks/useMillerColumnsRoot.ts +0 -0
- package/src/MillerColumns/index.ts +0 -7
- package/src/MillerColumns/types.ts +0 -252
- package/src/MillerColumns/useMillerColumnsSelection.ts +0 -31
- package/src/MillerColumns/utils.ts +0 -141
- package/src/Modal/Modal.tsx +0 -515
- package/src/Modal/ModalContext.ts +0 -20
- package/src/Modal/README.md +0 -222
- package/src/Modal/__tests__/Modal.accessibility.test.tsx +0 -167
- package/src/Modal/__tests__/Modal.asChild.test.tsx +0 -162
- package/src/Modal/__tests__/Modal.click-outside.test.tsx +0 -115
- package/src/Modal/__tests__/Modal.content.test.tsx +0 -193
- package/src/Modal/__tests__/Modal.controlled-state.test.tsx +0 -120
- package/src/Modal/__tests__/Modal.error-handling.test.tsx +0 -30
- package/src/Modal/__tests__/Modal.escape-hatches.test.tsx +0 -99
- package/src/Modal/__tests__/Modal.focus-trap.test.tsx +0 -162
- package/src/Modal/__tests__/Modal.imperative-api.test.tsx +0 -119
- package/src/Modal/__tests__/Modal.nested.test.tsx +0 -106
- package/src/Modal/__tests__/Modal.overlay.test.tsx +0 -99
- package/src/Modal/__tests__/Modal.portal.test.tsx +0 -90
- package/src/Modal/__tests__/Modal.presence.test.tsx +0 -111
- package/src/Modal/__tests__/Modal.trigger.test.tsx +0 -70
- package/src/Modal/__tests__/Modal.uncontrolled-state.test.tsx +0 -72
- package/src/Modal/__tests__/dialog-polyfill.ts +0 -40
- package/src/Modal/hooks/index.ts +0 -4
- package/src/Modal/hooks/useModalContent.ts +0 -94
- package/src/Modal/hooks/useModalContext.ts +0 -1
- package/src/Modal/hooks/useModalRoot.ts +0 -81
- package/src/Modal/hooks/useModalTrigger.ts +0 -25
- package/src/Modal/index.ts +0 -3
- package/src/Modal/types.ts +0 -206
- package/src/NavigationMenu/NavigationMenu.tsx +0 -890
- package/src/NavigationMenu/NavigationMenuContext.ts +0 -67
- package/src/NavigationMenu/README.md +0 -355
- package/src/NavigationMenu/__tests__/NavigationMenu.anchor-positioning.test.tsx +0 -132
- package/src/NavigationMenu/__tests__/NavigationMenu.asChild.test.tsx +0 -73
- package/src/NavigationMenu/__tests__/NavigationMenu.basic-rendering.test.tsx +0 -92
- package/src/NavigationMenu/__tests__/NavigationMenu.contract.test.tsx +0 -45
- package/src/NavigationMenu/__tests__/NavigationMenu.controlled-state.test.tsx +0 -134
- package/src/NavigationMenu/__tests__/NavigationMenu.error-handling.test.tsx +0 -62
- package/src/NavigationMenu/__tests__/NavigationMenu.fixtures.tsx +0 -79
- package/src/NavigationMenu/__tests__/NavigationMenu.forceMount.test.tsx +0 -52
- package/src/NavigationMenu/__tests__/NavigationMenu.hover-interaction.test.tsx +0 -254
- package/src/NavigationMenu/__tests__/NavigationMenu.indicator.test.tsx +0 -252
- package/src/NavigationMenu/__tests__/NavigationMenu.keyboard-interaction.test.tsx +0 -294
- package/src/NavigationMenu/__tests__/NavigationMenu.keyboard-navigation.test.tsx +0 -126
- package/src/NavigationMenu/__tests__/NavigationMenu.link.test.tsx +0 -139
- package/src/NavigationMenu/__tests__/NavigationMenu.motion.test.tsx +0 -568
- package/src/NavigationMenu/__tests__/NavigationMenu.mouse-interaction.test.tsx +0 -76
- package/src/NavigationMenu/__tests__/NavigationMenu.uncontrolled-state.test.tsx +0 -30
- package/src/NavigationMenu/__tests__/NavigationMenu.viewport.test.tsx +0 -113
- package/src/NavigationMenu/constants.ts +0 -5
- package/src/NavigationMenu/hooks/index.ts +0 -7
- package/src/NavigationMenu/hooks/useNavigationMenuEntry.ts +0 -33
- package/src/NavigationMenu/hooks/useNavigationMenuIndicator.ts +0 -70
- package/src/NavigationMenu/hooks/useNavigationMenuLink.ts +0 -72
- package/src/NavigationMenu/hooks/useNavigationMenuRoot.ts +0 -301
- package/src/NavigationMenu/hooks/useNavigationMenuTopLevelEntry.ts +0 -65
- package/src/NavigationMenu/hooks/useNavigationMenuTrigger.ts +0 -158
- package/src/NavigationMenu/hooks/useNavigationMenuViewport.ts +0 -101
- package/src/NavigationMenu/index.ts +0 -3
- package/src/NavigationMenu/types.ts +0 -259
- package/src/NavigationMenu/utils.ts +0 -89
- package/src/Popover/Popover.tsx +0 -427
- package/src/Popover/PopoverContext.ts +0 -13
- package/src/Popover/README.md +0 -106
- package/src/Popover/__tests__/Popover.anchor.test.tsx +0 -38
- package/src/Popover/__tests__/Popover.asChild.test.tsx +0 -160
- package/src/Popover/__tests__/Popover.basic-rendering.test.tsx +0 -106
- package/src/Popover/__tests__/Popover.click-outside.test.tsx +0 -149
- package/src/Popover/__tests__/Popover.close.test.tsx +0 -70
- package/src/Popover/__tests__/Popover.content.test.tsx +0 -58
- package/src/Popover/__tests__/Popover.controlled-state.test.tsx +0 -45
- package/src/Popover/__tests__/Popover.error-handling.test.tsx +0 -51
- package/src/Popover/__tests__/Popover.focus.test.tsx +0 -43
- package/src/Popover/__tests__/Popover.keyboard-interaction.test.tsx +0 -71
- package/src/Popover/__tests__/Popover.mouse-interaction.test.tsx +0 -69
- package/src/Popover/__tests__/Popover.uncontrolled-state.test.tsx +0 -44
- package/src/Popover/hooks/index.ts +0 -3
- package/src/Popover/hooks/usePopoverContent.ts +0 -98
- package/src/Popover/hooks/usePopoverRoot.ts +0 -84
- package/src/Popover/hooks/usePopoverTrigger.ts +0 -33
- package/src/Popover/index.ts +0 -2
- package/src/Popover/types.ts +0 -197
- package/src/Portal/Portal.tsx +0 -70
- package/src/Portal/README.md +0 -70
- package/src/Portal/__tests__/Portal.basic-rendering.test.tsx +0 -22
- package/src/Portal/index.ts +0 -2
- package/src/Portal/types.ts +0 -15
- package/src/Progress/Progress.tsx +0 -215
- package/src/Progress/ProgressContext.ts +0 -27
- package/src/Progress/README.md +0 -112
- package/src/Progress/__tests__/Progress.asChild.test.tsx +0 -37
- package/src/Progress/__tests__/Progress.basic-rendering.test.tsx +0 -75
- package/src/Progress/__tests__/Progress.error-handling.test.tsx +0 -40
- package/src/Progress/__tests__/Progress.fixtures.ts +0 -7
- package/src/Progress/__tests__/Progress.value.test.tsx +0 -104
- package/src/Progress/hooks/index.ts +0 -2
- package/src/Progress/hooks/useProgressContext.ts +0 -1
- package/src/Progress/hooks/useProgressRoot.ts +0 -45
- package/src/Progress/index.ts +0 -3
- package/src/Progress/types.ts +0 -59
- package/src/Radio/README.md +0 -160
- package/src/Radio/Radio.tsx +0 -210
- package/src/Radio/RadioContext.ts +0 -19
- package/src/Radio/__tests__/Radio.basic-rendering.test.tsx +0 -80
- package/src/Radio/__tests__/Radio.contract.test.tsx +0 -106
- package/src/Radio/__tests__/Radio.controlled-state.test.tsx +0 -79
- package/src/Radio/__tests__/Radio.disabled.test.tsx +0 -48
- package/src/Radio/__tests__/Radio.native-grouping.test.tsx +0 -77
- package/src/Radio/__tests__/Radio.parts.test.tsx +0 -76
- package/src/Radio/__tests__/Radio.uncontrolled-state.test.tsx +0 -96
- package/src/Radio/hooks/index.ts +0 -2
- package/src/Radio/hooks/useRadioContext.ts +0 -1
- package/src/Radio/hooks/useRadioRoot.ts +0 -51
- package/src/Radio/index.ts +0 -2
- package/src/Radio/types.ts +0 -90
- package/src/RadioCard/README.md +0 -134
- package/src/RadioCard/RadioCard.tsx +0 -354
- package/src/RadioCard/RadioCardContext.ts +0 -35
- package/src/RadioCard/RadioCardItemContext.ts +0 -23
- package/src/RadioCard/__tests__/RadioCard.asChild.test.tsx +0 -76
- package/src/RadioCard/__tests__/RadioCard.basic-rendering.test.tsx +0 -95
- package/src/RadioCard/__tests__/RadioCard.controlled-state.test.tsx +0 -107
- package/src/RadioCard/__tests__/RadioCard.disabled-items.test.tsx +0 -111
- package/src/RadioCard/__tests__/RadioCard.error-handling.test.tsx +0 -35
- package/src/RadioCard/__tests__/RadioCard.indicator.test.tsx +0 -119
- package/src/RadioCard/__tests__/RadioCard.keyboard-interaction.test.tsx +0 -211
- package/src/RadioCard/__tests__/RadioCard.orientation.test.tsx +0 -90
- package/src/RadioCard/__tests__/RadioCard.reading-direction.test.tsx +0 -65
- package/src/RadioCard/__tests__/RadioCard.ref-forwarding.test.tsx +0 -54
- package/src/RadioCard/__tests__/RadioCard.uncontrolled-state.test.tsx +0 -129
- package/src/RadioCard/hooks/index.ts +0 -3
- package/src/RadioCard/hooks/useRadioCardContext.ts +0 -1
- package/src/RadioCard/hooks/useRadioCardItemContext.ts +0 -1
- package/src/RadioCard/hooks/useRadioCardRoot.ts +0 -88
- package/src/RadioCard/index.ts +0 -4
- package/src/RadioCard/types.ts +0 -145
- package/src/RadioGroup/README.md +0 -185
- package/src/RadioGroup/RadioGroup.tsx +0 -370
- package/src/RadioGroup/RadioGroupContext.ts +0 -23
- package/src/RadioGroup/RadioGroupItemContext.ts +0 -10
- package/src/RadioGroup/__tests__/RadioGroup.asChild.test.tsx +0 -105
- package/src/RadioGroup/__tests__/RadioGroup.basic-rendering.test.tsx +0 -80
- package/src/RadioGroup/__tests__/RadioGroup.controlled-state.test.tsx +0 -109
- package/src/RadioGroup/__tests__/RadioGroup.disabled-keydown-guards.test.tsx +0 -68
- package/src/RadioGroup/__tests__/RadioGroup.disabled.test.tsx +0 -106
- package/src/RadioGroup/__tests__/RadioGroup.error-handling.test.tsx +0 -33
- package/src/RadioGroup/__tests__/RadioGroup.indicator.test.tsx +0 -85
- package/src/RadioGroup/__tests__/RadioGroup.keyboard-interaction.test.tsx +0 -135
- package/src/RadioGroup/__tests__/RadioGroup.orientation.test.tsx +0 -90
- package/src/RadioGroup/__tests__/RadioGroup.reading-direction.test.tsx +0 -65
- package/src/RadioGroup/__tests__/RadioGroup.ref-forwarding.test.tsx +0 -74
- package/src/RadioGroup/__tests__/RadioGroup.roving-tabindex.test.tsx +0 -136
- package/src/RadioGroup/__tests__/RadioGroup.uncontrolled-state.test.tsx +0 -96
- package/src/RadioGroup/hooks/index.ts +0 -3
- package/src/RadioGroup/hooks/useRadioGroupContext.ts +0 -1
- package/src/RadioGroup/hooks/useRadioGroupItemContext.ts +0 -1
- package/src/RadioGroup/hooks/useRadioGroupRoot.ts +0 -98
- package/src/RadioGroup/index.ts +0 -2
- package/src/RadioGroup/types.ts +0 -146
- package/src/SegmentedControl/README.md +0 -154
- package/src/SegmentedControl/SegmentedControl.tsx +0 -309
- package/src/SegmentedControl/SegmentedControlContext.ts +0 -28
- package/src/SegmentedControl/__tests__/SegmentedControl.asChild.test.tsx +0 -50
- package/src/SegmentedControl/__tests__/SegmentedControl.basic-rendering.test.tsx +0 -100
- package/src/SegmentedControl/__tests__/SegmentedControl.controlled-state.test.tsx +0 -107
- package/src/SegmentedControl/__tests__/SegmentedControl.disabled-keydown-guards.test.tsx +0 -62
- package/src/SegmentedControl/__tests__/SegmentedControl.disabled.test.tsx +0 -151
- package/src/SegmentedControl/__tests__/SegmentedControl.error-handling.test.tsx +0 -17
- package/src/SegmentedControl/__tests__/SegmentedControl.keyboard-interaction.test.tsx +0 -117
- package/src/SegmentedControl/__tests__/SegmentedControl.orientation.test.tsx +0 -54
- package/src/SegmentedControl/__tests__/SegmentedControl.reading-direction.test.tsx +0 -56
- package/src/SegmentedControl/__tests__/SegmentedControl.ref-forwarding.test.tsx +0 -45
- package/src/SegmentedControl/__tests__/SegmentedControl.roving-tabindex.test.tsx +0 -104
- package/src/SegmentedControl/__tests__/SegmentedControl.uncontrolled-state.test.tsx +0 -94
- package/src/SegmentedControl/hooks/index.ts +0 -2
- package/src/SegmentedControl/hooks/useSegmentedControlContext.ts +0 -1
- package/src/SegmentedControl/hooks/useSegmentedControlRoot.ts +0 -87
- package/src/SegmentedControl/index.ts +0 -2
- package/src/SegmentedControl/types.ts +0 -138
- package/src/Select/README.md +0 -168
- package/src/Select/Select.tsx +0 -746
- package/src/Select/SelectContext.ts +0 -38
- package/src/Select/SelectItemIndicatorContext.ts +0 -29
- package/src/Select/__tests__/Select.asChild.test.tsx +0 -36
- package/src/Select/__tests__/Select.basic-rendering.test.tsx +0 -36
- package/src/Select/__tests__/Select.controlled-state.test.tsx +0 -69
- package/src/Select/__tests__/Select.data-attributes.test.tsx +0 -29
- package/src/Select/__tests__/Select.field-integration.test.tsx +0 -150
- package/src/Select/__tests__/Select.form.test.tsx +0 -38
- package/src/Select/__tests__/Select.group.test.tsx +0 -42
- package/src/Select/__tests__/Select.keyboard-edge.test.tsx +0 -95
- package/src/Select/__tests__/Select.keyboard.test.tsx +0 -124
- package/src/Select/__tests__/Select.mutation-hardening.test.tsx +0 -317
- package/src/Select/__tests__/Select.native-item.test.tsx +0 -30
- package/src/Select/__tests__/Select.open-close.test.tsx +0 -57
- package/src/Select/__tests__/Select.placeholder.test.tsx +0 -50
- package/src/Select/__tests__/Select.rich-asChild.test.tsx +0 -60
- package/src/Select/__tests__/Select.rich-mode.test.tsx +0 -16
- package/src/Select/__tests__/Select.selection.test.tsx +0 -104
- package/src/Select/__tests__/Select.separator.test.tsx +0 -71
- package/src/Select/__tests__/Select.strict-context.test.tsx +0 -36
- package/src/Select/__tests__/Select.typeahead.test.tsx +0 -156
- package/src/Select/__tests__/Select.value-mirror.test.tsx +0 -240
- package/src/Select/constants.ts +0 -8
- package/src/Select/hooks/index.ts +0 -2
- package/src/Select/hooks/useSelectContent.ts +0 -149
- package/src/Select/hooks/useSelectRoot.ts +0 -149
- package/src/Select/index.ts +0 -2
- package/src/Select/types.ts +0 -272
- package/src/SkipNav/README.md +0 -87
- package/src/SkipNav/SkipNav.tsx +0 -161
- package/src/SkipNav/__tests__/SkipNav.basic-rendering.test.tsx +0 -29
- package/src/SkipNav/__tests__/SkipNav.ids.test.tsx +0 -19
- package/src/SkipNav/index.ts +0 -1
- package/src/SkipNav/types.ts +0 -34
- package/src/Slider/README.md +0 -245
- package/src/Slider/Slider.tsx +0 -361
- package/src/Slider/SliderContext.ts +0 -58
- package/src/Slider/__tests__/Slider.asChild.test.tsx +0 -119
- package/src/Slider/__tests__/Slider.basic-rendering.test.tsx +0 -157
- package/src/Slider/__tests__/Slider.controlled-state.test.tsx +0 -78
- package/src/Slider/__tests__/Slider.disabled.test.tsx +0 -82
- package/src/Slider/__tests__/Slider.error-handling.test.tsx +0 -45
- package/src/Slider/__tests__/Slider.fixtures.ts +0 -53
- package/src/Slider/__tests__/Slider.form.test.tsx +0 -67
- package/src/Slider/__tests__/Slider.inverted.test.tsx +0 -112
- package/src/Slider/__tests__/Slider.keyboard-interaction.test.tsx +0 -118
- package/src/Slider/__tests__/Slider.multiple-thumbs.test.tsx +0 -84
- package/src/Slider/__tests__/Slider.orientation.test.tsx +0 -101
- package/src/Slider/__tests__/Slider.pointer-interaction.test.tsx +0 -205
- package/src/Slider/__tests__/Slider.reading-direction.test.tsx +0 -99
- package/src/Slider/__tests__/Slider.uncontrolled-state.test.tsx +0 -69
- package/src/Slider/__tests__/Slider.value-commit.test.tsx +0 -103
- package/src/Slider/hooks/index.ts +0 -3
- package/src/Slider/hooks/useSliderContext.ts +0 -1
- package/src/Slider/hooks/useSliderRoot.ts +0 -197
- package/src/Slider/hooks/useSliderThumb.ts +0 -77
- package/src/Slider/index.ts +0 -3
- package/src/Slider/types.ts +0 -205
- package/src/Slider/utils.ts +0 -155
- package/src/Slot/Slot.tsx +0 -238
- package/src/Slot/__tests__/Slot.test.tsx +0 -273
- package/src/Slot/__tests__/composeEventHandlers.test.ts +0 -74
- package/src/Slot/composeEventHandlers.ts +0 -62
- package/src/Slot/index.ts +0 -3
- package/src/Slot/types.ts +0 -21
- package/src/SplitButton/README.md +0 -225
- package/src/SplitButton/SplitButton.tsx +0 -457
- package/src/SplitButton/SplitButtonContext.ts +0 -26
- package/src/SplitButton/__tests__/SplitButton.accessibility.test.tsx +0 -55
- package/src/SplitButton/__tests__/SplitButton.asChild.test.tsx +0 -51
- package/src/SplitButton/__tests__/SplitButton.basic-rendering.test.tsx +0 -57
- package/src/SplitButton/__tests__/SplitButton.data-attributes.test.tsx +0 -28
- package/src/SplitButton/__tests__/SplitButton.disabled.test.tsx +0 -79
- package/src/SplitButton/__tests__/SplitButton.error-handling.test.tsx +0 -29
- package/src/SplitButton/__tests__/SplitButton.keyboard-interaction.test.tsx +0 -56
- package/src/SplitButton/__tests__/SplitButton.state-modes.test.tsx +0 -68
- package/src/SplitButton/index.ts +0 -2
- package/src/SplitButton/types.ts +0 -186
- package/src/Status/README.md +0 -50
- package/src/Status/Status.tsx +0 -72
- package/src/Status/__tests__/Status.test.tsx +0 -33
- package/src/Status/index.ts +0 -2
- package/src/Status/types.ts +0 -20
- package/src/Switch/README.md +0 -126
- package/src/Switch/Switch.tsx +0 -203
- package/src/Switch/SwitchContext.ts +0 -20
- package/src/Switch/__tests__/Switch.asChild.test.tsx +0 -38
- package/src/Switch/__tests__/Switch.basic-rendering.test.tsx +0 -102
- package/src/Switch/__tests__/Switch.contract.test.tsx +0 -114
- package/src/Switch/__tests__/Switch.controlled-state.test.tsx +0 -77
- package/src/Switch/__tests__/Switch.disabled.test.tsx +0 -55
- package/src/Switch/__tests__/Switch.error-handling.test.tsx +0 -20
- package/src/Switch/__tests__/Switch.form.test.tsx +0 -55
- package/src/Switch/__tests__/Switch.keyboard-interaction.test.tsx +0 -56
- package/src/Switch/__tests__/Switch.recipe.test.ts +0 -19
- package/src/Switch/__tests__/Switch.thumb.test.tsx +0 -84
- package/src/Switch/__tests__/Switch.uncontrolled-state.test.tsx +0 -118
- package/src/Switch/hooks/index.ts +0 -2
- package/src/Switch/hooks/useSwitchContext.ts +0 -1
- package/src/Switch/hooks/useSwitchRoot.ts +0 -49
- package/src/Switch/index.ts +0 -3
- package/src/Switch/types.ts +0 -95
- package/src/Table/README.md +0 -307
- package/src/Table/Table.tsx +0 -636
- package/src/Table/TableExpandableContext.ts +0 -7
- package/src/Table/__tests__/Table.Body.test.tsx +0 -61
- package/src/Table/__tests__/Table.Caption.test.tsx +0 -70
- package/src/Table/__tests__/Table.Cell.test.tsx +0 -73
- package/src/Table/__tests__/Table.DetailRow.test.tsx +0 -83
- package/src/Table/__tests__/Table.ExpandTrigger.test.tsx +0 -102
- package/src/Table/__tests__/Table.Expandable.test.tsx +0 -121
- package/src/Table/__tests__/Table.Footer.test.tsx +0 -61
- package/src/Table/__tests__/Table.Head.test.tsx +0 -61
- package/src/Table/__tests__/Table.Header.test.tsx +0 -73
- package/src/Table/__tests__/Table.Root.test.tsx +0 -49
- package/src/Table/__tests__/Table.Row.test.tsx +0 -67
- package/src/Table/__tests__/Table.ScrollArea.test.tsx +0 -83
- package/src/Table/__tests__/Table.contract.test.tsx +0 -80
- package/src/Table/index.ts +0 -2
- package/src/Table/types.ts +0 -237
- package/src/Tabs/README.md +0 -111
- package/src/Tabs/Tabs.tsx +0 -465
- package/src/Tabs/TabsContext.ts +0 -21
- package/src/Tabs/__tests__/Tabs.activation-mode.test.tsx +0 -172
- package/src/Tabs/__tests__/Tabs.asChild.test.tsx +0 -91
- package/src/Tabs/__tests__/Tabs.basic-rendering.test.tsx +0 -498
- package/src/Tabs/__tests__/Tabs.change-event-callbacks.test.tsx +0 -157
- package/src/Tabs/__tests__/Tabs.contract.test.tsx +0 -153
- package/src/Tabs/__tests__/Tabs.controlled-state.test.tsx +0 -152
- package/src/Tabs/__tests__/Tabs.disabled-tabs.test.tsx +0 -239
- package/src/Tabs/__tests__/Tabs.error-handling.test.tsx +0 -82
- package/src/Tabs/__tests__/Tabs.fixtures.ts +0 -171
- package/src/Tabs/__tests__/Tabs.imperative-api.test.tsx +0 -118
- package/src/Tabs/__tests__/Tabs.keyboard-interaction.test.tsx +0 -192
- package/src/Tabs/__tests__/Tabs.lazy-mount.test.tsx +0 -78
- package/src/Tabs/__tests__/Tabs.mouse-interaction.test.tsx +0 -216
- package/src/Tabs/__tests__/Tabs.reading-direction.test.tsx +0 -58
- package/src/Tabs/__tests__/Tabs.uncontrolled-state.test.tsx +0 -197
- package/src/Tabs/hooks/index.ts +0 -4
- package/src/Tabs/hooks/useTabsContent.ts +0 -32
- package/src/Tabs/hooks/useTabsContext.ts +0 -1
- package/src/Tabs/hooks/useTabsRoot.ts +0 -172
- package/src/Tabs/hooks/useTabsTrigger.ts +0 -116
- package/src/Tabs/index.ts +0 -3
- package/src/Tabs/types.ts +0 -166
- package/src/Tabs/utils.ts +0 -8
- package/src/Textarea/README.md +0 -98
- package/src/Textarea/Textarea.tsx +0 -104
- package/src/Textarea/__tests__/Textarea.asChild.test.tsx +0 -85
- package/src/Textarea/__tests__/Textarea.basic-rendering.test.tsx +0 -112
- package/src/Textarea/__tests__/Textarea.disabled.test.tsx +0 -49
- package/src/Textarea/__tests__/Textarea.field-integration.test.tsx +0 -134
- package/src/Textarea/index.ts +0 -2
- package/src/Textarea/types.ts +0 -28
- package/src/Toggle/README.md +0 -97
- package/src/Toggle/Toggle.tsx +0 -126
- package/src/Toggle/__tests__/Toggle.asChild.test.tsx +0 -42
- package/src/Toggle/__tests__/Toggle.basic-rendering.test.tsx +0 -33
- package/src/Toggle/__tests__/Toggle.controlled-state.test.tsx +0 -60
- package/src/Toggle/__tests__/Toggle.disabled.test.tsx +0 -34
- package/src/Toggle/__tests__/Toggle.keyboard-interaction.test.tsx +0 -42
- package/src/Toggle/__tests__/Toggle.uncontrolled-state.test.tsx +0 -40
- package/src/Toggle/index.ts +0 -2
- package/src/Toggle/types.ts +0 -77
- package/src/ToggleGroup/README.md +0 -137
- package/src/ToggleGroup/ToggleGroup.tsx +0 -321
- package/src/ToggleGroup/ToggleGroupContext.ts +0 -9
- package/src/ToggleGroup/__tests__/ToggleGroup.asChild.test.tsx +0 -85
- package/src/ToggleGroup/__tests__/ToggleGroup.basic-rendering.test.tsx +0 -59
- package/src/ToggleGroup/__tests__/ToggleGroup.disabled.test.tsx +0 -54
- package/src/ToggleGroup/__tests__/ToggleGroup.dynamic-items.test.tsx +0 -70
- package/src/ToggleGroup/__tests__/ToggleGroup.error-handling.test.tsx +0 -23
- package/src/ToggleGroup/__tests__/ToggleGroup.keyboard-interaction.test.tsx +0 -173
- package/src/ToggleGroup/__tests__/ToggleGroup.multiple-mode.test.tsx +0 -144
- package/src/ToggleGroup/__tests__/ToggleGroup.reading-direction.test.tsx +0 -28
- package/src/ToggleGroup/__tests__/ToggleGroup.ref-forwarding.test.tsx +0 -58
- package/src/ToggleGroup/__tests__/ToggleGroup.single-mode.test.tsx +0 -139
- package/src/ToggleGroup/hooks/index.ts +0 -2
- package/src/ToggleGroup/hooks/useToggleGroupContext.ts +0 -1
- package/src/ToggleGroup/hooks/useToggleGroupRoot.ts +0 -130
- package/src/ToggleGroup/index.ts +0 -2
- package/src/ToggleGroup/types.ts +0 -165
- package/src/Tooltip/README.md +0 -214
- package/src/Tooltip/Tooltip.tsx +0 -369
- package/src/Tooltip/TooltipContext.ts +0 -20
- package/src/Tooltip/__tests__/Tooltip.asChild.test.tsx +0 -77
- package/src/Tooltip/__tests__/Tooltip.basic-rendering.test.tsx +0 -230
- package/src/Tooltip/__tests__/Tooltip.controlled-state.test.tsx +0 -128
- package/src/Tooltip/__tests__/Tooltip.error-handling.test.tsx +0 -37
- package/src/Tooltip/__tests__/Tooltip.escape-hatches.test.tsx +0 -146
- package/src/Tooltip/__tests__/Tooltip.focus-interaction.test.tsx +0 -88
- package/src/Tooltip/__tests__/Tooltip.hover-interaction.test.tsx +0 -179
- package/src/Tooltip/__tests__/Tooltip.keyboard-interaction.test.tsx +0 -219
- package/src/Tooltip/__tests__/Tooltip.skip-delay.test.tsx +0 -232
- package/src/Tooltip/__tests__/Tooltip.timer-coordination.test.tsx +0 -223
- package/src/Tooltip/__tests__/Tooltip.uncontrolled-state.test.tsx +0 -67
- package/src/Tooltip/hooks/__tests__/useTooltipProvider.test.tsx +0 -40
- package/src/Tooltip/hooks/index.ts +0 -4
- package/src/Tooltip/hooks/useTooltipContent.ts +0 -56
- package/src/Tooltip/hooks/useTooltipProvider.ts +0 -79
- package/src/Tooltip/hooks/useTooltipRoot.ts +0 -130
- package/src/Tooltip/hooks/useTooltipTrigger.ts +0 -44
- package/src/Tooltip/index.ts +0 -2
- package/src/Tooltip/types.ts +0 -193
- package/src/Tree/README.md +0 -403
- package/src/Tree/Tree.tsx +0 -771
- package/src/Tree/TreeContext.ts +0 -24
- package/src/Tree/__tests__/Tree.aria.test.tsx +0 -53
- package/src/Tree/__tests__/Tree.asChild.test.tsx +0 -134
- package/src/Tree/__tests__/Tree.basic-rendering.test.tsx +0 -111
- package/src/Tree/__tests__/Tree.branch-behaviour.test.tsx +0 -87
- package/src/Tree/__tests__/Tree.controlled-expansion.test.tsx +0 -92
- package/src/Tree/__tests__/Tree.data-attributes.test.tsx +0 -88
- package/src/Tree/__tests__/Tree.disabled-items.test.tsx +0 -196
- package/src/Tree/__tests__/Tree.error-handling.test.tsx +0 -71
- package/src/Tree/__tests__/Tree.forceMount.test.tsx +0 -72
- package/src/Tree/__tests__/Tree.keyboard-interaction.test.tsx +0 -150
- package/src/Tree/__tests__/Tree.multiple-selection.test.tsx +0 -151
- package/src/Tree/__tests__/Tree.range-selection.test.tsx +0 -200
- package/src/Tree/__tests__/Tree.recursion-depth.test.tsx +0 -73
- package/src/Tree/__tests__/Tree.roving-tabindex.test.tsx +0 -117
- package/src/Tree/__tests__/Tree.selection-path.test.tsx +0 -404
- package/src/Tree/__tests__/Tree.single-selection.test.tsx +0 -108
- package/src/Tree/__tests__/Tree.styled-wrapper.test.tsx +0 -159
- package/src/Tree/__tests__/Tree.uncontrolled-expansion.test.tsx +0 -69
- package/src/Tree/hooks/index.ts +0 -3
- package/src/Tree/hooks/useTreeItemKeyboard.ts +0 -86
- package/src/Tree/hooks/useTreePath.ts +0 -100
- package/src/Tree/hooks/useTreeRoot.ts +0 -279
- package/src/Tree/index.ts +0 -8
- package/src/Tree/types.ts +0 -298
- package/src/Tree/utils.ts +0 -101
- package/src/VisuallyHidden/README.md +0 -58
- package/src/VisuallyHidden/VisuallyHidden.tsx +0 -94
- package/src/VisuallyHidden/__tests__/VisuallyHidden.test.tsx +0 -73
- package/src/VisuallyHidden/index.ts +0 -2
- package/src/VisuallyHidden/types.ts +0 -19
- package/src/hooks/index.ts +0 -4
- package/src/hooks/useCollection.ts +0 -74
- package/src/hooks/useControllableState.ts +0 -81
- package/src/hooks/useRovingTabindex.ts +0 -178
- package/src/hooks/useTypeahead.ts +0 -95
- package/src/index.ts +0 -52
- package/src/test/intersectionObserverPolyfill.ts +0 -90
- package/src/test/popoverPolyfill.ts +0 -86
- package/src/test/resizeObserverPolyfill.ts +0 -80
- package/src/test/scrollPolyfill.ts +0 -23
- package/src/types.ts +0 -14
- package/src/useLocalStorage/__tests__/useLocalStorage.reading.test.tsx +0 -31
- package/src/useLocalStorage/__tests__/useLocalStorage.resilience.test.tsx +0 -97
- package/src/useLocalStorage/__tests__/useLocalStorage.ssr.test.tsx +0 -20
- package/src/useLocalStorage/__tests__/useLocalStorage.writing.test.tsx +0 -72
- package/src/useLocalStorage/index.ts +0 -1
- package/src/useLocalStorage/useLocalStorage.ts +0 -140
- package/src/useMediaQuery/README.md +0 -66
- package/src/useMediaQuery/__tests__/useMediaQuery.matching.test.tsx +0 -42
- package/src/useMediaQuery/__tests__/useMediaQuery.ssr.test.tsx +0 -19
- package/src/useMediaQuery/__tests__/useMediaQuery.subscription.test.tsx +0 -89
- package/src/useMediaQuery/index.ts +0 -1
- package/src/useMediaQuery/useMediaQuery.ts +0 -49
- package/src/usePagination/README.md +0 -170
- package/src/usePagination/__tests__/usePagination.navigation.test.tsx +0 -109
- package/src/usePagination/__tests__/usePagination.page-count.test.tsx +0 -56
- package/src/usePagination/__tests__/usePagination.page-state.test.tsx +0 -87
- package/src/usePagination/__tests__/usePagination.range.test.tsx +0 -82
- package/src/usePagination/__tests__/usePagination.slice.test.tsx +0 -59
- package/src/usePagination/__tests__/usePagination.windowing.test.tsx +0 -68
- package/src/usePagination/index.ts +0 -1
- package/src/usePagination/usePagination.ts +0 -292
- package/src/utils/__tests__/createStrictContext.test.tsx +0 -69
- package/src/utils/__tests__/deriveId.test.ts +0 -28
- package/src/utils/__tests__/getKeyToActionMap.test.ts +0 -106
- package/src/utils/createStrictContext.ts +0 -53
- package/src/utils/deriveId.ts +0 -31
- package/src/utils/focusable.ts +0 -15
- package/src/utils/getKeyToActionMap.ts +0 -95
- package/src/utils/index.ts +0 -4
|
@@ -0,0 +1,786 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, } from "react";
|
|
3
|
+
import { useCarouselContext } from "./useCarouselContext.js";
|
|
4
|
+
// A pointer movement below this many pixels (along the scroll axis) is
|
|
5
|
+
// still a click, not a drag — so a link/button inside a slide keeps
|
|
6
|
+
// working under the pointer that just tapped it.
|
|
7
|
+
const DRAG_THRESHOLD_PX = 3;
|
|
8
|
+
// Amplifies the pointer delta applied to scrollLeft/scrollTop during a
|
|
9
|
+
// drag. A slide can be many hundreds of pixels wide, and a literal 1:1
|
|
10
|
+
// ratio means dragging the slide's full width to move through it once —
|
|
11
|
+
// far more physical movement than the gesture should cost. 2x means a
|
|
12
|
+
// drag needs to cover only half the on-screen distance to produce the
|
|
13
|
+
// same scroll, without introducing momentum (the multiplier only scales
|
|
14
|
+
// the *tracked* delta; there's still no motion after release).
|
|
15
|
+
const DRAG_SENSITIVITY = 2;
|
|
16
|
+
function clamp(value, min, max) {
|
|
17
|
+
return Math.min(Math.max(value, min), max);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Owns the Viewport-side scroll-state sync — bidirectional.
|
|
21
|
+
*
|
|
22
|
+
* **State → scroll.** When `currentPage` flips for any reason
|
|
23
|
+
* (NextTrigger, Indicator click, autoplay tick, imperative goTo), the
|
|
24
|
+
* effect locates the first slide of the target page via the published
|
|
25
|
+
* `slidesRef`, reads its `getBoundingClientRect` relative to the
|
|
26
|
+
* viewport, and calls `scrollTo` so the visual surface tracks React
|
|
27
|
+
* state. The current `scrollLeft` is included in the target so the
|
|
28
|
+
* calculation is correct mid-scroll. The run also asserts
|
|
29
|
+
* `isProgrammaticScrollRef` so the IntersectionObserver fallback
|
|
30
|
+
* doesn't treat the in-flight animation as a user scroll and undo the
|
|
31
|
+
* page change; the flag clears on `scrollend` (with a timeout
|
|
32
|
+
* fallback for environments that don't fire it).
|
|
33
|
+
*
|
|
34
|
+
* **Scroll → state.** When the user swipes the viewport, the browser
|
|
35
|
+
* fires `scrollsnapchange` with the new snap target. The handler
|
|
36
|
+
* looks up which slide that target is, computes
|
|
37
|
+
* `floor(slideIndex / slidesPerPage)`, and calls `goTo` on the new
|
|
38
|
+
* page (skipping when the page is unchanged so consumers don't see
|
|
39
|
+
* spurious onPageChange callbacks, and bailing when the snap target
|
|
40
|
+
* isn't one of our registered slides). An `IntersectionObserver`
|
|
41
|
+
* provides the same page-drive for browsers without `scrollsnapchange`,
|
|
42
|
+
* but stands down when the event is supported (it is authoritative);
|
|
43
|
+
* the observer still always feeds `isInView`.
|
|
44
|
+
*
|
|
45
|
+
* **Keyboard → state.** Returns an `onKeyDown` handler that wires the
|
|
46
|
+
* WAI-ARIA Carousel pattern arrow keys (`ArrowRight` / `ArrowLeft` for
|
|
47
|
+
* next / previous) plus `Home` / `End` (first / last) onto the same
|
|
48
|
+
* imperative API the trigger buttons call, so smooth scroll matches
|
|
49
|
+
* the click path. The handler only fires when the Viewport itself is
|
|
50
|
+
* the focus target — focus inside a slide keeps its native arrow-key
|
|
51
|
+
* semantics — and respects `canGoNext` / `canGoPrevious` so it clamps
|
|
52
|
+
* at the ends.
|
|
53
|
+
*/
|
|
54
|
+
export function useCarouselViewport() {
|
|
55
|
+
const { slidesRef, slideKeys, slidesPerPage, effectiveSlidesPerMove, maxOffset, currentPageOffset, pageForSlideIndex, totalPages, currentPage, goTo, next, previous, canGoNext, canGoPrevious, transition, snapAlign, orientation, loop, allowMouseDrag, onDragStatusChange, onOverscrollStatusChange, inViewThreshold, refreshTick, visibleSlideIndicesRef, setSlideInView, isProgrammaticScrollRef, instantScrollRef, setDragging, setOverscrolling, setScrollProgress, setSlideProgress, } = useCarouselContext();
|
|
56
|
+
// The observer's own `threshold` option accepts a number or number[]
|
|
57
|
+
// as-is; for the "in view" cutoff a single number is used directly, and
|
|
58
|
+
// an array uses its highest value (the strictest crossing) — matching
|
|
59
|
+
// the single-boolean semantics `isInView`/the IO page-drive fallback need.
|
|
60
|
+
const inViewCutoff = Array.isArray(inViewThreshold)
|
|
61
|
+
? Math.max(...inViewThreshold)
|
|
62
|
+
: inViewThreshold;
|
|
63
|
+
const internalRef = useRef(null);
|
|
64
|
+
// Set to true by the scrollsnapchange handler and the IntersectionObserver
|
|
65
|
+
// callback before they call goTo(), so the scroll effect knows the page
|
|
66
|
+
// change originated from a user scroll (CSS snap already positioned the
|
|
67
|
+
// viewport) and must not call scrollTo() again.
|
|
68
|
+
const isUserScrollRef = useRef(false);
|
|
69
|
+
// Callback ref so the consumer can compose their own ref with ours
|
|
70
|
+
// via `composeRefs` later (cycle 22 introduces asChild). For now,
|
|
71
|
+
// it just stashes the node.
|
|
72
|
+
const viewportRef = useCallback((node) => {
|
|
73
|
+
internalRef.current = node;
|
|
74
|
+
}, []);
|
|
75
|
+
// Mouse click-and-drag scrolling. Opt-in via `allowMouseDrag` (default
|
|
76
|
+
// false) — an unconditionally-on drag could conflict with a consumer's own
|
|
77
|
+
// drag-sensitive slide content (a nested carousel, a draggable card, a
|
|
78
|
+
// canvas). When enabled, tracks the pointer at DRAG_SENSITIVITY× (no
|
|
79
|
+
// momentum — the multiplier only scales the tracked delta, motion still
|
|
80
|
+
// stops dead on release) by writing scrollLeft/scrollTop directly during
|
|
81
|
+
// the drag; release lets the
|
|
82
|
+
// existing scroll-snap-type settle to the nearest slide, which the
|
|
83
|
+
// scrollsnapchange sync above already picks up for free — no extra "scroll
|
|
84
|
+
// → state" wiring needed here. `dragStateRef.current.dragging` only flips
|
|
85
|
+
// true once the pointer clears DRAG_THRESHOLD_PX, so a plain click (no
|
|
86
|
+
// capture, no preventDefault) still reaches a link/button under the
|
|
87
|
+
// pointer untouched. The delta is always computed against the *start*
|
|
88
|
+
// scroll position (not incrementally from the last move), and
|
|
89
|
+
// scrollLeft/scrollTop is direction-mode-agnostic — dragging right always
|
|
90
|
+
// reveals content that was to the left, in both LTR and the
|
|
91
|
+
// now-standardized negative-scrollLeft RTL convention — so no RTL
|
|
92
|
+
// special-casing is needed.
|
|
93
|
+
const dragStateRef = useRef(null);
|
|
94
|
+
// Browsers still synthesize a click at the release point after a drag
|
|
95
|
+
// unless it's suppressed — set once a drag crosses the threshold, consumed
|
|
96
|
+
// (and cleared) by the next click, so a link/button under the release
|
|
97
|
+
// point doesn't fire.
|
|
98
|
+
const suppressNextClickRef = useRef(false);
|
|
99
|
+
const onPointerDown = useCallback((event) => {
|
|
100
|
+
if (!allowMouseDrag ||
|
|
101
|
+
event.pointerType !== "mouse" ||
|
|
102
|
+
transition !== "slide") {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// Guaranteed populated — this handler only ever fires as a React
|
|
106
|
+
// event on the very element viewportRef attached to.
|
|
107
|
+
const viewport = internalRef.current;
|
|
108
|
+
const vertical = orientation === "vertical";
|
|
109
|
+
dragStateRef.current = {
|
|
110
|
+
pointerId: event.pointerId,
|
|
111
|
+
startClient: vertical ? event.clientY : event.clientX,
|
|
112
|
+
startScroll: vertical ? viewport.scrollTop : viewport.scrollLeft,
|
|
113
|
+
dragging: false,
|
|
114
|
+
overscrollEdge: null,
|
|
115
|
+
};
|
|
116
|
+
}, [allowMouseDrag, orientation, transition]);
|
|
117
|
+
// A real <img>/<a> inside a slide is natively draggable, and starting a
|
|
118
|
+
// drag over one fires the browser's own HTML5 drag-and-drop (the
|
|
119
|
+
// semi-transparent ghost that follows the cursor) — which visually
|
|
120
|
+
// competes with the custom pointer-based drag-to-scroll below. Only
|
|
121
|
+
// suppressed when allowMouseDrag is opted into; a consumer who hasn't
|
|
122
|
+
// enabled our drag-to-scroll keeps native image/link dragging untouched.
|
|
123
|
+
const onDragStart = useCallback((event) => {
|
|
124
|
+
if (!allowMouseDrag)
|
|
125
|
+
return;
|
|
126
|
+
event.preventDefault();
|
|
127
|
+
}, [allowMouseDrag]);
|
|
128
|
+
const onPointerMove = useCallback((event) => {
|
|
129
|
+
const drag = dragStateRef.current;
|
|
130
|
+
if (!drag || event.pointerId !== drag.pointerId)
|
|
131
|
+
return;
|
|
132
|
+
// Guaranteed populated (see onPointerDown).
|
|
133
|
+
const viewport = internalRef.current;
|
|
134
|
+
const vertical = orientation === "vertical";
|
|
135
|
+
const clientPos = vertical ? event.clientY : event.clientX;
|
|
136
|
+
const delta = clientPos - drag.startClient;
|
|
137
|
+
if (!drag.dragging) {
|
|
138
|
+
if (Math.abs(delta) < DRAG_THRESHOLD_PX)
|
|
139
|
+
return;
|
|
140
|
+
drag.dragging = true;
|
|
141
|
+
suppressNextClickRef.current = true;
|
|
142
|
+
viewport.setPointerCapture?.(drag.pointerId);
|
|
143
|
+
viewport.setAttribute("data-dragging", "");
|
|
144
|
+
setDragging(true);
|
|
145
|
+
onDragStatusChange?.({
|
|
146
|
+
type: "dragging.start",
|
|
147
|
+
page: currentPage,
|
|
148
|
+
isDragging: true,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
onDragStatusChange?.({
|
|
153
|
+
type: "dragging",
|
|
154
|
+
page: currentPage,
|
|
155
|
+
isDragging: true,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Overscroll: dragging further past a boundary the carousel has
|
|
159
|
+
// already reached. Positive delta drags toward the start edge,
|
|
160
|
+
// negative delta toward the end edge — see the scrollLeft/scrollTop
|
|
161
|
+
// assignment below (the same convention the regular drag scroll
|
|
162
|
+
// uses). Only meaningful once the drag threshold is crossed
|
|
163
|
+
// (drag.dragging, asserted above).
|
|
164
|
+
const overscrollEdge = delta > 0 && !canGoPrevious
|
|
165
|
+
? "start"
|
|
166
|
+
: delta < 0 && !canGoNext
|
|
167
|
+
? "end"
|
|
168
|
+
: null;
|
|
169
|
+
if (overscrollEdge) {
|
|
170
|
+
const amount = Math.abs(delta) * DRAG_SENSITIVITY;
|
|
171
|
+
const type = drag.overscrollEdge ? "overscroll" : "overscroll.start";
|
|
172
|
+
drag.overscrollEdge = overscrollEdge;
|
|
173
|
+
setOverscrolling(true);
|
|
174
|
+
viewport.setAttribute("data-overscroll", overscrollEdge);
|
|
175
|
+
onOverscrollStatusChange?.({
|
|
176
|
+
type,
|
|
177
|
+
edge: overscrollEdge,
|
|
178
|
+
source: "drag",
|
|
179
|
+
amount,
|
|
180
|
+
page: currentPage,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
else if (drag.overscrollEdge) {
|
|
184
|
+
const endedEdge = drag.overscrollEdge;
|
|
185
|
+
drag.overscrollEdge = null;
|
|
186
|
+
setOverscrolling(false);
|
|
187
|
+
viewport.removeAttribute("data-overscroll");
|
|
188
|
+
onOverscrollStatusChange?.({
|
|
189
|
+
type: "overscroll.end",
|
|
190
|
+
edge: endedEdge,
|
|
191
|
+
source: "drag",
|
|
192
|
+
amount: 0,
|
|
193
|
+
page: currentPage,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
event.preventDefault();
|
|
197
|
+
const nextScroll = drag.startScroll - delta * DRAG_SENSITIVITY;
|
|
198
|
+
if (vertical)
|
|
199
|
+
viewport.scrollTop = nextScroll;
|
|
200
|
+
else
|
|
201
|
+
viewport.scrollLeft = nextScroll;
|
|
202
|
+
}, [
|
|
203
|
+
orientation,
|
|
204
|
+
currentPage,
|
|
205
|
+
onDragStatusChange,
|
|
206
|
+
setDragging,
|
|
207
|
+
canGoNext,
|
|
208
|
+
canGoPrevious,
|
|
209
|
+
onOverscrollStatusChange,
|
|
210
|
+
setOverscrolling,
|
|
211
|
+
]);
|
|
212
|
+
const endDrag = useCallback(() => {
|
|
213
|
+
const drag = dragStateRef.current;
|
|
214
|
+
if (!drag)
|
|
215
|
+
return;
|
|
216
|
+
if (drag.dragging) {
|
|
217
|
+
internalRef.current?.releasePointerCapture?.(drag.pointerId);
|
|
218
|
+
internalRef.current?.removeAttribute("data-dragging");
|
|
219
|
+
setDragging(false);
|
|
220
|
+
onDragStatusChange?.({
|
|
221
|
+
type: "dragging.end",
|
|
222
|
+
page: currentPage,
|
|
223
|
+
isDragging: false,
|
|
224
|
+
});
|
|
225
|
+
if (drag.overscrollEdge) {
|
|
226
|
+
internalRef.current?.removeAttribute("data-overscroll");
|
|
227
|
+
setOverscrolling(false);
|
|
228
|
+
onOverscrollStatusChange?.({
|
|
229
|
+
type: "overscroll.end",
|
|
230
|
+
edge: drag.overscrollEdge,
|
|
231
|
+
source: "drag",
|
|
232
|
+
amount: 0,
|
|
233
|
+
page: currentPage,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
dragStateRef.current = null;
|
|
238
|
+
}, [
|
|
239
|
+
currentPage,
|
|
240
|
+
onDragStatusChange,
|
|
241
|
+
setDragging,
|
|
242
|
+
onOverscrollStatusChange,
|
|
243
|
+
setOverscrolling,
|
|
244
|
+
]);
|
|
245
|
+
const onClickCapture = useCallback((event) => {
|
|
246
|
+
if (suppressNextClickRef.current) {
|
|
247
|
+
suppressNextClickRef.current = false;
|
|
248
|
+
event.preventDefault();
|
|
249
|
+
event.stopPropagation();
|
|
250
|
+
}
|
|
251
|
+
}, []);
|
|
252
|
+
// Read prefers-reduced-motion once on mount; choose scrollTo
|
|
253
|
+
// behavior accordingly so we don't fight the OS-level setting.
|
|
254
|
+
// `useMemo` runs during render, so this must be SSR-safe: on the server
|
|
255
|
+
// there is no `window`, and reading it unguarded threw. Default to "smooth"
|
|
256
|
+
// there — the first client scroll re-reads it anyway (nothing scrolls on the
|
|
257
|
+
// server), so the resolved behaviour is never actually server-rendered.
|
|
258
|
+
const scrollBehavior = useMemo(() => typeof window !== "undefined" &&
|
|
259
|
+
window.matchMedia?.("(prefers-reduced-motion: reduce)").matches
|
|
260
|
+
? "instant"
|
|
261
|
+
: "smooth", []);
|
|
262
|
+
useEffect(() => {
|
|
263
|
+
// transition="none" hands the visual to consumer CSS; we don't
|
|
264
|
+
// touch viewport.scrollTo at all in that mode. loop="infinite" is driven by
|
|
265
|
+
// the transform engine (useCarouselLoop), not native scroll — this effect
|
|
266
|
+
// stands down for it.
|
|
267
|
+
if (transition !== "slide" || loop === "infinite")
|
|
268
|
+
return;
|
|
269
|
+
const firstSlideKey = slideKeys[currentPageOffset];
|
|
270
|
+
// No slides registered yet, or page out of range: nothing to scroll to.
|
|
271
|
+
if (!firstSlideKey)
|
|
272
|
+
return;
|
|
273
|
+
// Both viewport ref and the slide element are guaranteed populated
|
|
274
|
+
// here — the effect runs post-commit (after callback refs fire) and
|
|
275
|
+
// any key in slideKeys was just registered into slidesRef in
|
|
276
|
+
// lockstep by useCarouselRoot.registerSlide.
|
|
277
|
+
// A user swipe via CSS scroll-snap has already positioned the viewport;
|
|
278
|
+
// calling scrollTo on top would start a second animation and cause jank.
|
|
279
|
+
if (isUserScrollRef.current) {
|
|
280
|
+
isUserScrollRef.current = false;
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
const viewport = internalRef.current;
|
|
284
|
+
// Mark the scroll as programmatic so the IntersectionObserver
|
|
285
|
+
// doesn't treat the in-flight animation as a user scroll and undo
|
|
286
|
+
// the page change. next() / previous() also set this — re-asserting
|
|
287
|
+
// here covers indicator-driven goTo and the initial scroll on
|
|
288
|
+
// mount, neither of which goes through next() / previous().
|
|
289
|
+
isProgrammaticScrollRef.current = true;
|
|
290
|
+
// Scroll the *viewport itself* — never `targetEl.scrollIntoView()`, which
|
|
291
|
+
// walks every scrollable ancestor (including the page/window) and so scrolls
|
|
292
|
+
// the whole document when the carousel is off-screen. We read the target
|
|
293
|
+
// slide's `getBoundingClientRect` relative to the viewport and add the delta
|
|
294
|
+
// to the current scroll offset (so the maths is correct mid-scroll), then let
|
|
295
|
+
// the consumer's `scroll-snap-align` make the final correction — we never
|
|
296
|
+
// fight the snap engine. The scroll axis follows `orientation`; the cross axis
|
|
297
|
+
// is untouched, so the viewport never drifts on the other axis. `start` aligns
|
|
298
|
+
// the slide's leading edge to the viewport's; `center` centres it; `end`
|
|
299
|
+
// aligns its trailing edge.
|
|
300
|
+
const targetEl = slidesRef.current.get(firstSlideKey);
|
|
301
|
+
// A loop-mode switch reparents the slides into / out of the transform track,
|
|
302
|
+
// so a slide can unmount + re-register in the same commit that re-runs this
|
|
303
|
+
// effect: the key is still in slideKeys but its element isn't back in slidesRef
|
|
304
|
+
// yet. Bail; the re-register bumps slideKeys and re-runs this against the
|
|
305
|
+
// settled set. (Same race the --slide-progress effect below already guards.)
|
|
306
|
+
if (!targetEl)
|
|
307
|
+
return;
|
|
308
|
+
const vertical = orientation === "vertical";
|
|
309
|
+
const viewportRect = viewport.getBoundingClientRect();
|
|
310
|
+
const targetRect = targetEl.getBoundingClientRect();
|
|
311
|
+
const currentScroll = vertical ? viewport.scrollTop : viewport.scrollLeft;
|
|
312
|
+
const delta = vertical
|
|
313
|
+
? targetRect.top - viewportRect.top
|
|
314
|
+
: targetRect.left - viewportRect.left;
|
|
315
|
+
// The target slide's own snapAlign (Carousel.Slide's `snapAlign` prop,
|
|
316
|
+
// already merged with the root default) is read off the DOM rather than
|
|
317
|
+
// context, since only the slide component knows whether it set a
|
|
318
|
+
// per-slide override. `Carousel.Slide` always publishes data-snap-align
|
|
319
|
+
// on a valid snap-start slide — the only kind `firstSlideKey` ever is
|
|
320
|
+
// (see useCarouselSlide's isSnapStart gate) — so this is never
|
|
321
|
+
// undefined in practice; no fallback needed. `snapAlign` (the root
|
|
322
|
+
// value) stays a dependency below purely so this effect re-runs and
|
|
323
|
+
// re-reads the DOM when it changes without an accompanying page change.
|
|
324
|
+
const effectiveSnapAlign = targetEl.dataset.snapAlign;
|
|
325
|
+
// For center/end, the leftover space must be measured against the whole
|
|
326
|
+
// *page* (every slide sharing this page, edge to edge) rather than just
|
|
327
|
+
// the leading slide's own box — a multi-slide page's other members would
|
|
328
|
+
// otherwise be excluded from the alignment math entirely, undershooting
|
|
329
|
+
// the scroll and leaving the page's trailing slide(s) clipped off-screen.
|
|
330
|
+
// `start` doesn't depend on this (its alignOffset is always 0), but
|
|
331
|
+
// computing it unconditionally costs nothing and keeps the code path
|
|
332
|
+
// uniform. The last member's index is clamped to the actual slide count
|
|
333
|
+
// (slidesPerPage can exceed how many slides really exist).
|
|
334
|
+
const lastMemberIndex = Math.min(currentPageOffset + slidesPerPage - 1, slideKeys.length - 1);
|
|
335
|
+
// Present whenever targetEl is (a loop-mode reparent unmounts every slide
|
|
336
|
+
// together, so the guard above already caught a mid-reparent run).
|
|
337
|
+
const lastMemberEl = slidesRef.current.get(slideKeys[lastMemberIndex]);
|
|
338
|
+
const lastMemberRect = lastMemberEl.getBoundingClientRect();
|
|
339
|
+
// Computed as left/top + width/height, not the rect's own .right/.bottom
|
|
340
|
+
// — real DOMRects derive those the same way, but keeping the maths
|
|
341
|
+
// explicit here matches the plain-object rect fixtures used in tests.
|
|
342
|
+
const pageSpan = vertical
|
|
343
|
+
? lastMemberRect.top + lastMemberRect.height - targetRect.top
|
|
344
|
+
: lastMemberRect.left + lastMemberRect.width - targetRect.left;
|
|
345
|
+
const leftoverSpace = vertical
|
|
346
|
+
? viewport.clientHeight - pageSpan
|
|
347
|
+
: viewport.clientWidth - pageSpan;
|
|
348
|
+
const alignOffset = effectiveSnapAlign === "center"
|
|
349
|
+
? leftoverSpace / 2
|
|
350
|
+
: effectiveSnapAlign === "end"
|
|
351
|
+
? leftoverSpace
|
|
352
|
+
: 0;
|
|
353
|
+
const position = currentScroll + delta - alignOffset;
|
|
354
|
+
// instantScrollRef is a one-shot override set by this specific next() /
|
|
355
|
+
// previous() / goTo() call — consumed (and cleared) immediately so it
|
|
356
|
+
// never leaks into a later page change that didn't request it (e.g. a
|
|
357
|
+
// user swipe or a subsequent plain next()).
|
|
358
|
+
const behavior = instantScrollRef.current ? "instant" : scrollBehavior;
|
|
359
|
+
instantScrollRef.current = false;
|
|
360
|
+
viewport.scrollTo(vertical ? { top: position, behavior } : { left: position, behavior });
|
|
361
|
+
// Clear the programmatic-scroll guard once the animation settles.
|
|
362
|
+
// `scrollend` is the reliable signal in real browsers; the setTimeout
|
|
363
|
+
// is a fallback for environments (jsdom, older Safari) that don't fire
|
|
364
|
+
// it. The timeout is longer than any typical smooth-scroll duration so
|
|
365
|
+
// real-browser IO entries that fire mid-animation are still suppressed.
|
|
366
|
+
// Re-clearing the flag is harmless, so no idempotency guard is needed.
|
|
367
|
+
const clearFlag = () => {
|
|
368
|
+
isProgrammaticScrollRef.current = false;
|
|
369
|
+
};
|
|
370
|
+
viewport.addEventListener("scrollend", clearFlag, { once: true });
|
|
371
|
+
const timeoutId = setTimeout(() => {
|
|
372
|
+
viewport.removeEventListener("scrollend", clearFlag);
|
|
373
|
+
clearFlag();
|
|
374
|
+
}, 600);
|
|
375
|
+
return () => {
|
|
376
|
+
clearTimeout(timeoutId);
|
|
377
|
+
viewport.removeEventListener("scrollend", clearFlag);
|
|
378
|
+
};
|
|
379
|
+
}, [
|
|
380
|
+
transition,
|
|
381
|
+
snapAlign,
|
|
382
|
+
orientation,
|
|
383
|
+
loop,
|
|
384
|
+
currentPageOffset,
|
|
385
|
+
slidesPerPage,
|
|
386
|
+
slideKeys,
|
|
387
|
+
slidesRef,
|
|
388
|
+
refreshTick,
|
|
389
|
+
scrollBehavior,
|
|
390
|
+
]);
|
|
391
|
+
// Keeps every page's leading slide `scroll-margin` extended out to its
|
|
392
|
+
// page's actual last member, so a user's own swipe/wheel/touch — settled
|
|
393
|
+
// entirely by the browser's native scroll-snap, never by the scrollTo
|
|
394
|
+
// effect above — also spans the whole page for center/end alignment
|
|
395
|
+
// instead of just the leading slide's own box (the same fix applied to
|
|
396
|
+
// the programmatic scroll, just expressed as a native snap-area
|
|
397
|
+
// extension rather than a scrollTo offset). A single slide-per-page
|
|
398
|
+
// carousel needs no extension at all, so this is a no-op there. Runs for
|
|
399
|
+
// every page up front (not just the current one), since a fast native
|
|
400
|
+
// fling under `mandatory` snapping can settle on a page the effect above
|
|
401
|
+
// never programmatically targeted.
|
|
402
|
+
useEffect(() => {
|
|
403
|
+
if (transition !== "slide" || slidesPerPage <= 1)
|
|
404
|
+
return;
|
|
405
|
+
// Guaranteed populated — this effect only runs post-commit, and
|
|
406
|
+
// slidesRef.current is a plain useRef(new Map()) in useCarouselRoot,
|
|
407
|
+
// never null.
|
|
408
|
+
const viewport = internalRef.current;
|
|
409
|
+
const vertical = orientation === "vertical";
|
|
410
|
+
const recomputeScrollMargins = () => {
|
|
411
|
+
const slides = slidesRef.current;
|
|
412
|
+
for (let page = 0; page < totalPages; page++) {
|
|
413
|
+
const offset = Math.min(page * effectiveSlidesPerMove, maxOffset);
|
|
414
|
+
const lastIndex = Math.min(offset + slidesPerPage - 1, slideKeys.length - 1);
|
|
415
|
+
// Guaranteed populated — any key in slideKeys was just registered
|
|
416
|
+
// into slidesRef in lockstep by useCarouselRoot.registerSlide (see
|
|
417
|
+
// the scroll-position effect above).
|
|
418
|
+
const leadingEl = slides.get(slideKeys[offset]);
|
|
419
|
+
const lastEl = slides.get(slideKeys[lastIndex]);
|
|
420
|
+
const leadingRect = leadingEl.getBoundingClientRect();
|
|
421
|
+
const lastRect = lastEl.getBoundingClientRect();
|
|
422
|
+
// Computed as left/top + width/height (not .right/.bottom) to match
|
|
423
|
+
// the plain-object rect fixtures used in tests — real DOMRects
|
|
424
|
+
// derive those the same way.
|
|
425
|
+
const extra = vertical
|
|
426
|
+
? lastRect.top + lastRect.height - (leadingRect.top + leadingRect.height)
|
|
427
|
+
: lastRect.left + lastRect.width - (leadingRect.left + leadingRect.width);
|
|
428
|
+
leadingEl.style.scrollMarginInlineEnd = vertical ? "" : `${extra}px`;
|
|
429
|
+
leadingEl.style.scrollMarginBlockEnd = vertical ? `${extra}px` : "";
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
recomputeScrollMargins();
|
|
433
|
+
// Equal-share slide sizes derive from the viewport's own width/height, so
|
|
434
|
+
// the px extension above must stay current across resizes, not just
|
|
435
|
+
// page/slide-count changes (which the effect already re-runs for).
|
|
436
|
+
const resizeObserver = new ResizeObserver(recomputeScrollMargins);
|
|
437
|
+
resizeObserver.observe(viewport);
|
|
438
|
+
return () => resizeObserver.disconnect();
|
|
439
|
+
}, [
|
|
440
|
+
transition,
|
|
441
|
+
orientation,
|
|
442
|
+
slidesPerPage,
|
|
443
|
+
effectiveSlidesPerMove,
|
|
444
|
+
maxOffset,
|
|
445
|
+
totalPages,
|
|
446
|
+
slideKeys,
|
|
447
|
+
slidesRef,
|
|
448
|
+
]);
|
|
449
|
+
// Continuous scroll-progress signal — a live 0..1 global value plus a
|
|
450
|
+
// per-slide -1..1 center-distance, both mirrored onto CSS custom
|
|
451
|
+
// properties for real-time visual consumption without a React
|
|
452
|
+
// re-render. Unconditional (unlike the scroll-margin effect above,
|
|
453
|
+
// which is meaningless outside `transition: "slide"`) — progress
|
|
454
|
+
// should degrade gracefully to near-zero in `fade` mode rather than
|
|
455
|
+
// not exist at all.
|
|
456
|
+
useEffect(() => {
|
|
457
|
+
const viewport = internalRef.current;
|
|
458
|
+
const vertical = orientation === "vertical";
|
|
459
|
+
// Coalesces any number of scroll/resize signals within one animation
|
|
460
|
+
// frame into a single recompute — a native `scroll` event can fire many
|
|
461
|
+
// times per frame during momentum scrolling, and each recompute reads
|
|
462
|
+
// getBoundingClientRect() per slide (a forced-layout read), so batching
|
|
463
|
+
// avoids a textbook scroll-jank anti-pattern. `pendingFrame` is a plain
|
|
464
|
+
// closure variable, not a ref — it never needs to outlive this specific
|
|
465
|
+
// effect instance.
|
|
466
|
+
let pendingFrame = null;
|
|
467
|
+
const recomputeProgress = () => {
|
|
468
|
+
const maxScroll = vertical
|
|
469
|
+
? viewport.scrollHeight - viewport.clientHeight
|
|
470
|
+
: viewport.scrollWidth - viewport.clientWidth;
|
|
471
|
+
const scrollPos = vertical ? viewport.scrollTop : viewport.scrollLeft;
|
|
472
|
+
// Math.abs, not the raw signed value — modern browsers standardize
|
|
473
|
+
// RTL scrollLeft on the "negative" convention (0 at the start, down
|
|
474
|
+
// to -maxScroll at the end), so this makes "distance travelled from
|
|
475
|
+
// the start" monotonic in both directions with no dir/
|
|
476
|
+
// getComputedStyle read, mirroring why the drag handler above needs
|
|
477
|
+
// no RTL special-casing either.
|
|
478
|
+
const scrollProgress = maxScroll > 0 ? clamp(Math.abs(scrollPos) / maxScroll, 0, 1) : 0;
|
|
479
|
+
setScrollProgress(scrollProgress);
|
|
480
|
+
viewport.style.setProperty("--carousel-progress", String(scrollProgress));
|
|
481
|
+
const viewportRect = viewport.getBoundingClientRect();
|
|
482
|
+
const viewportHalfSize = vertical
|
|
483
|
+
? viewportRect.height / 2
|
|
484
|
+
: viewportRect.width / 2;
|
|
485
|
+
const viewportCenter = vertical
|
|
486
|
+
? viewportRect.top + viewportHalfSize
|
|
487
|
+
: viewportRect.left + viewportHalfSize;
|
|
488
|
+
const slides = slidesRef.current;
|
|
489
|
+
slideKeys.forEach((key, index) => {
|
|
490
|
+
const slideEl = slides.get(key);
|
|
491
|
+
// A slide can unmount in the same commit that re-runs this effect
|
|
492
|
+
// (orientation is one of its other dependencies) — the removed
|
|
493
|
+
// slide's ref callback deletes it from slidesRef synchronously
|
|
494
|
+
// during the mutation phase, while this effect's own closure still
|
|
495
|
+
// has the pre-drop slideKeys (its slideKeys update hasn't flushed
|
|
496
|
+
// a render yet). Skip the orphaned key; the next slideKeys change
|
|
497
|
+
// re-runs this effect against the settled set. Same race as the
|
|
498
|
+
// IntersectionObserver effect above.
|
|
499
|
+
if (!slideEl)
|
|
500
|
+
return;
|
|
501
|
+
const slideRect = slideEl.getBoundingClientRect();
|
|
502
|
+
const slideCenter = vertical
|
|
503
|
+
? slideRect.top + slideRect.height / 2
|
|
504
|
+
: slideRect.left + slideRect.width / 2;
|
|
505
|
+
const slideProgress = viewportHalfSize > 0
|
|
506
|
+
? clamp((slideCenter - viewportCenter) / viewportHalfSize, -1, 1)
|
|
507
|
+
: 0;
|
|
508
|
+
setSlideProgress(index, slideProgress);
|
|
509
|
+
slideEl.style.setProperty("--slide-progress", String(slideProgress));
|
|
510
|
+
});
|
|
511
|
+
};
|
|
512
|
+
const scheduleRecompute = () => {
|
|
513
|
+
if (pendingFrame !== null)
|
|
514
|
+
return;
|
|
515
|
+
pendingFrame = requestAnimationFrame(() => {
|
|
516
|
+
pendingFrame = null;
|
|
517
|
+
recomputeProgress();
|
|
518
|
+
});
|
|
519
|
+
};
|
|
520
|
+
recomputeProgress();
|
|
521
|
+
viewport.addEventListener("scroll", scheduleRecompute, { passive: true });
|
|
522
|
+
const resizeObserver = new ResizeObserver(scheduleRecompute);
|
|
523
|
+
resizeObserver.observe(viewport);
|
|
524
|
+
return () => {
|
|
525
|
+
viewport.removeEventListener("scroll", scheduleRecompute);
|
|
526
|
+
resizeObserver.disconnect();
|
|
527
|
+
if (pendingFrame !== null)
|
|
528
|
+
cancelAnimationFrame(pendingFrame);
|
|
529
|
+
};
|
|
530
|
+
}, [orientation, slideKeys, slidesRef, setScrollProgress, setSlideProgress]);
|
|
531
|
+
// Horizontal mouse-wheel translation. A physical scroll wheel (vertical
|
|
532
|
+
// notches, deltaY only) already natively scrolls a vertically-scrollable
|
|
533
|
+
// container, so orientation="vertical" needs nothing here. But browsers
|
|
534
|
+
// only auto-translate a plain vertical wheel to horizontal scroll when
|
|
535
|
+
// Shift is held, so a horizontal (the default) carousel gets no scroll at
|
|
536
|
+
// all from a physical wheel without this. Registered via addEventListener
|
|
537
|
+
// (not the React onWheel prop) with { passive: false } — React attaches
|
|
538
|
+
// wheel listeners as passive by default, which would silently no-op
|
|
539
|
+
// preventDefault() and let the page scroll vertically at the same time.
|
|
540
|
+
// Deliberately stands down whenever deltaX is non-negligible: a trackpad
|
|
541
|
+
// or Magic Mouse horizontal swipe already produces real deltaX and already
|
|
542
|
+
// scrolls a horizontal viewport natively via the same mechanism as touch —
|
|
543
|
+
// this must never fight that, only fill the gap a plain vertical wheel
|
|
544
|
+
// leaves. deltaY is normalized from line/page units to pixels so a
|
|
545
|
+
// physical wheel's larger, fewer DOM_DELTA_LINE ticks feel proportional to
|
|
546
|
+
// a trackpad's many small DOM_DELTA_PIXEL ones.
|
|
547
|
+
useEffect(() => {
|
|
548
|
+
// Infinite is transform-driven, not a scroll container — no wheel-to-scroll.
|
|
549
|
+
if (transition !== "slide" ||
|
|
550
|
+
orientation === "vertical" ||
|
|
551
|
+
loop === "infinite")
|
|
552
|
+
return;
|
|
553
|
+
const viewport = internalRef.current;
|
|
554
|
+
const handler = (event) => {
|
|
555
|
+
if (Math.abs(event.deltaX) > 0.5)
|
|
556
|
+
return;
|
|
557
|
+
let deltaY = event.deltaY;
|
|
558
|
+
if (event.deltaMode === WheelEvent.DOM_DELTA_LINE) {
|
|
559
|
+
deltaY *= 16;
|
|
560
|
+
}
|
|
561
|
+
else if (event.deltaMode === WheelEvent.DOM_DELTA_PAGE) {
|
|
562
|
+
deltaY *= viewport.clientWidth;
|
|
563
|
+
}
|
|
564
|
+
// Overscroll: a wheel notch pushing forward/backward while already
|
|
565
|
+
// at that boundary. A single discrete tick — no meaningful distance
|
|
566
|
+
// to report, unlike the continuous drag case.
|
|
567
|
+
if (deltaY > 0 && !canGoNext) {
|
|
568
|
+
onOverscrollStatusChange?.({
|
|
569
|
+
type: "overscroll",
|
|
570
|
+
edge: "end",
|
|
571
|
+
source: "wheel",
|
|
572
|
+
amount: 0,
|
|
573
|
+
page: currentPage,
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
else if (deltaY < 0 && !canGoPrevious) {
|
|
577
|
+
onOverscrollStatusChange?.({
|
|
578
|
+
type: "overscroll",
|
|
579
|
+
edge: "start",
|
|
580
|
+
source: "wheel",
|
|
581
|
+
amount: 0,
|
|
582
|
+
page: currentPage,
|
|
583
|
+
});
|
|
584
|
+
}
|
|
585
|
+
event.preventDefault();
|
|
586
|
+
viewport.scrollLeft += deltaY;
|
|
587
|
+
};
|
|
588
|
+
viewport.addEventListener("wheel", handler, { passive: false });
|
|
589
|
+
return () => viewport.removeEventListener("wheel", handler);
|
|
590
|
+
}, [
|
|
591
|
+
transition,
|
|
592
|
+
orientation,
|
|
593
|
+
loop,
|
|
594
|
+
canGoNext,
|
|
595
|
+
canGoPrevious,
|
|
596
|
+
currentPage,
|
|
597
|
+
onOverscrollStatusChange,
|
|
598
|
+
]);
|
|
599
|
+
// User-driven scroll → state. Listen for scrollsnapchange and update
|
|
600
|
+
// currentPage from the snapped slide's index. The viewport ref is
|
|
601
|
+
// guaranteed populated post-commit (callback ref runs first).
|
|
602
|
+
useEffect(() => {
|
|
603
|
+
// Infinite is transform-driven (useCarouselLoop) with no native scroll, so
|
|
604
|
+
// it emits no scrollsnapchange — this sync is for the scroll-snap modes.
|
|
605
|
+
if (transition !== "slide" || loop === "infinite")
|
|
606
|
+
return;
|
|
607
|
+
const viewport = internalRef.current;
|
|
608
|
+
const handler = (event) => {
|
|
609
|
+
// The snapped slide is reported on the axis the viewport scrolls:
|
|
610
|
+
// snapTargetBlock for a vertical carousel, snapTargetInline otherwise.
|
|
611
|
+
const snapEvent = event;
|
|
612
|
+
const target = orientation === "vertical"
|
|
613
|
+
? snapEvent.snapTargetBlock
|
|
614
|
+
: snapEvent.snapTargetInline;
|
|
615
|
+
// findIndex returns -1 when the snap target isn't one of our
|
|
616
|
+
// registered slides — e.g. a consumer-wrapped element inside the
|
|
617
|
+
// viewport. Ignore those; only registered slides drive the page.
|
|
618
|
+
const slideIndex = slideKeys.findIndex((key) => slidesRef.current.get(key) === target);
|
|
619
|
+
if (slideIndex < 0)
|
|
620
|
+
return;
|
|
621
|
+
const targetPage = pageForSlideIndex(slideIndex);
|
|
622
|
+
if (targetPage !== currentPage) {
|
|
623
|
+
isUserScrollRef.current = true;
|
|
624
|
+
goTo(targetPage);
|
|
625
|
+
}
|
|
626
|
+
};
|
|
627
|
+
viewport.addEventListener("scrollsnapchange", handler);
|
|
628
|
+
return () => viewport.removeEventListener("scrollsnapchange", handler);
|
|
629
|
+
}, [
|
|
630
|
+
transition,
|
|
631
|
+
loop,
|
|
632
|
+
orientation,
|
|
633
|
+
slideKeys,
|
|
634
|
+
slidesRef,
|
|
635
|
+
pageForSlideIndex,
|
|
636
|
+
currentPage,
|
|
637
|
+
goTo,
|
|
638
|
+
]);
|
|
639
|
+
// IntersectionObserver fallback for browsers without scrollsnapchange,
|
|
640
|
+
// and the source of truth for isInView() on the imperative API. The
|
|
641
|
+
// observer fires whenever a slide crosses the inViewThreshold visibility
|
|
642
|
+
// threshold (0.6 by default); the lowest-index visible slide derives the
|
|
643
|
+
// active page.
|
|
644
|
+
useEffect(() => {
|
|
645
|
+
if (transition !== "slide")
|
|
646
|
+
return;
|
|
647
|
+
// When the browser fires scrollsnapchange (Chrome 129+), that event is
|
|
648
|
+
// the authoritative source of the active page — snapTargetInline is the
|
|
649
|
+
// precisely-snapped slide. The observer below then only feeds isInView.
|
|
650
|
+
// Its lowest-index-visible heuristic is a coarse page fallback for
|
|
651
|
+
// browsers without the event, and would mis-track a centre-aligned
|
|
652
|
+
// carousel that shows several slides at once (it follows the leftmost
|
|
653
|
+
// visible slide, not the centred one), so it must not drive the page
|
|
654
|
+
// when the event is available.
|
|
655
|
+
const supportsSnapEvents = "onscrollsnapchange" in window;
|
|
656
|
+
const observer = new IntersectionObserver((entries) => {
|
|
657
|
+
// The live observer only observes elements still present in
|
|
658
|
+
// slidesRef (the setup loop skips orphaned keys), and a stale
|
|
659
|
+
// observer is disconnected on cleanup when the effect re-runs, so
|
|
660
|
+
// by the time a callback fires both lookups (slideKeys.findIndex →
|
|
661
|
+
// registered key, and the slidesRef get → element) resolve.
|
|
662
|
+
for (const entry of entries) {
|
|
663
|
+
const idx = slideKeys.findIndex((key) => slidesRef.current.get(key) === entry.target);
|
|
664
|
+
setSlideInView(idx, entry.isIntersecting && entry.intersectionRatio >= inViewCutoff);
|
|
665
|
+
}
|
|
666
|
+
// isInView is updated above regardless; only the page-drive below
|
|
667
|
+
// is the fallback that scrollsnapchange supersedes. Infinite is
|
|
668
|
+
// transform-driven — its page never comes from viewport visibility — so
|
|
669
|
+
// the page-drive stands down there too (the isInView feed above stays).
|
|
670
|
+
if (supportsSnapEvents || loop === "infinite")
|
|
671
|
+
return;
|
|
672
|
+
const visible = visibleSlideIndicesRef.current;
|
|
673
|
+
if (visible.size === 0)
|
|
674
|
+
return;
|
|
675
|
+
const firstVisible = Math.min(...visible);
|
|
676
|
+
const targetPage = pageForSlideIndex(firstVisible);
|
|
677
|
+
// Guard: if a programmatic scroll is in flight (e.g. user clicked
|
|
678
|
+
// NextTrigger and the smooth-scroll animation hasn't settled), the
|
|
679
|
+
// IO may still see the old slide as ≥ the cutoff visible. Calling
|
|
680
|
+
// goTo here would undo the navigation, so skip until the flag clears.
|
|
681
|
+
if (targetPage !== currentPage && !isProgrammaticScrollRef.current) {
|
|
682
|
+
isUserScrollRef.current = true;
|
|
683
|
+
goTo(targetPage);
|
|
684
|
+
}
|
|
685
|
+
}, { threshold: inViewThreshold });
|
|
686
|
+
for (const key of slideKeys) {
|
|
687
|
+
// A slide can unmount in the same commit that re-runs this effect — a
|
|
688
|
+
// dynamic slide-count drop removes its element from slidesRef during the
|
|
689
|
+
// mutation phase while this effect still closes over the pre-drop
|
|
690
|
+
// slideKeys. Skip the orphaned key; the registerSlide that unmounted it
|
|
691
|
+
// schedules a fresh slideKeys, re-running this effect to observe the
|
|
692
|
+
// settled set.
|
|
693
|
+
const element = slidesRef.current.get(key);
|
|
694
|
+
if (element)
|
|
695
|
+
observer.observe(element);
|
|
696
|
+
}
|
|
697
|
+
return () => observer.disconnect();
|
|
698
|
+
}, [
|
|
699
|
+
transition,
|
|
700
|
+
loop,
|
|
701
|
+
slideKeys,
|
|
702
|
+
slidesRef,
|
|
703
|
+
pageForSlideIndex,
|
|
704
|
+
currentPage,
|
|
705
|
+
goTo,
|
|
706
|
+
setSlideInView,
|
|
707
|
+
visibleSlideIndicesRef,
|
|
708
|
+
inViewThreshold,
|
|
709
|
+
inViewCutoff,
|
|
710
|
+
]);
|
|
711
|
+
// Keyboard navigation per the WAI-ARIA Carousel pattern: arrow keys
|
|
712
|
+
// route through the same imperative API as the trigger buttons so the
|
|
713
|
+
// smooth scroll and loop-wrap animation match the click path. The
|
|
714
|
+
// event.target === currentTarget guard restricts handling to the
|
|
715
|
+
// Viewport itself — focus inside a slide (e.g. on a link or form
|
|
716
|
+
// control) keeps its native arrow-key semantics.
|
|
717
|
+
const onKeyDown = useCallback((event) => {
|
|
718
|
+
// Restrict to keypresses originating on the Viewport itself —
|
|
719
|
+
// focus inside a slide (e.g. on a link or form control) keeps
|
|
720
|
+
// its native arrow-key semantics.
|
|
721
|
+
if (event.target !== event.currentTarget)
|
|
722
|
+
return;
|
|
723
|
+
// The paging arrows follow the scroll axis: Down/Up for a vertical
|
|
724
|
+
// carousel, Right/Left otherwise. Home/End are axis-agnostic.
|
|
725
|
+
const forwardKey = orientation === "vertical" ? "ArrowDown" : "ArrowRight";
|
|
726
|
+
const backwardKey = orientation === "vertical" ? "ArrowUp" : "ArrowLeft";
|
|
727
|
+
if (event.key === forwardKey) {
|
|
728
|
+
event.preventDefault();
|
|
729
|
+
if (canGoNext) {
|
|
730
|
+
next();
|
|
731
|
+
}
|
|
732
|
+
else {
|
|
733
|
+
onOverscrollStatusChange?.({
|
|
734
|
+
type: "overscroll",
|
|
735
|
+
edge: "end",
|
|
736
|
+
source: "keyboard",
|
|
737
|
+
amount: 0,
|
|
738
|
+
page: currentPage,
|
|
739
|
+
});
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
else if (event.key === backwardKey) {
|
|
743
|
+
event.preventDefault();
|
|
744
|
+
if (canGoPrevious) {
|
|
745
|
+
previous();
|
|
746
|
+
}
|
|
747
|
+
else {
|
|
748
|
+
onOverscrollStatusChange?.({
|
|
749
|
+
type: "overscroll",
|
|
750
|
+
edge: "start",
|
|
751
|
+
source: "keyboard",
|
|
752
|
+
amount: 0,
|
|
753
|
+
page: currentPage,
|
|
754
|
+
});
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
else if (event.key === "Home") {
|
|
758
|
+
event.preventDefault();
|
|
759
|
+
goTo(0);
|
|
760
|
+
}
|
|
761
|
+
else if (event.key === "End") {
|
|
762
|
+
event.preventDefault();
|
|
763
|
+
goTo(totalPages - 1);
|
|
764
|
+
}
|
|
765
|
+
}, [
|
|
766
|
+
orientation,
|
|
767
|
+
canGoNext,
|
|
768
|
+
canGoPrevious,
|
|
769
|
+
next,
|
|
770
|
+
previous,
|
|
771
|
+
goTo,
|
|
772
|
+
totalPages,
|
|
773
|
+
currentPage,
|
|
774
|
+
onOverscrollStatusChange,
|
|
775
|
+
]);
|
|
776
|
+
return {
|
|
777
|
+
viewportRef,
|
|
778
|
+
onKeyDown,
|
|
779
|
+
onDragStart,
|
|
780
|
+
onPointerDown,
|
|
781
|
+
onPointerMove,
|
|
782
|
+
onPointerUp: endDrag,
|
|
783
|
+
onPointerCancel: endDrag,
|
|
784
|
+
onClickCapture,
|
|
785
|
+
};
|
|
786
|
+
}
|