@primitiv-ui/react 0.1.38 → 0.1.39
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
|
@@ -1,869 +0,0 @@
|
|
|
1
|
-
import { PointerEvent, useCallback, useEffect, useRef } from "react";
|
|
2
|
-
|
|
3
|
-
import { flingTarget, normalizeOffset, shortestStep } from "../loopEngine.ts";
|
|
4
|
-
import { useCarouselContext } from "./useCarouselContext";
|
|
5
|
-
|
|
6
|
-
// The programmatic glide (button / keyboard / indicator / autoplay) is a CSS
|
|
7
|
-
// transition on the track — GPU-composited, so it's smooth on mobile where a
|
|
8
|
-
// per-frame JS repaint of the slides stutters. These are the fallback timing for
|
|
9
|
-
// the headless package used with no registry stylesheet; the registry sheet's
|
|
10
|
-
// --primitiv-carousel-glide-{duration,easing} (default: the same motion tokens,
|
|
11
|
-
// re-pointable per --glide-* preset or by hand) override them. Ease-out gives the
|
|
12
|
-
// momentum feel of a page flying in and settling.
|
|
13
|
-
const GLIDE_DURATION = "500ms";
|
|
14
|
-
const GLIDE_EASE = "cubic-bezier(0, 0, 0.2, 1)";
|
|
15
|
-
|
|
16
|
-
// Build the glide's `transition` value, reading the duration/easing custom
|
|
17
|
-
// properties off the track (a consumer retunes them via CSS) and falling back to
|
|
18
|
-
// the built-in timing when they're unset. Only the infinite loop uses this — every
|
|
19
|
-
// other mode glides via native scroll, whose speed/easing the browser owns.
|
|
20
|
-
function glideTransition(track: HTMLElement): string {
|
|
21
|
-
const styles = getComputedStyle(track);
|
|
22
|
-
const duration =
|
|
23
|
-
styles.getPropertyValue("--primitiv-carousel-glide-duration").trim() ||
|
|
24
|
-
GLIDE_DURATION;
|
|
25
|
-
const easing =
|
|
26
|
-
styles.getPropertyValue("--primitiv-carousel-glide-easing").trim() ||
|
|
27
|
-
GLIDE_EASE;
|
|
28
|
-
return `transform ${duration} ${easing}`;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// The engine's own inline style writes on a real slide (paint()'s `visibility`
|
|
32
|
-
// and `--slide-progress`) happen continuously — every navigation, every drag
|
|
33
|
-
// pointermove, every rAF tick of an animated glide. Strip them out before
|
|
34
|
-
// comparing a "style" mutation's before/after, so the clone-content observer
|
|
35
|
-
// (below) doesn't mistake this routine bookkeeping for a genuine consumer
|
|
36
|
-
// change and thrash rebuildClones() dozens of times a second.
|
|
37
|
-
function styleWithoutEngineProps(cssText: string | null): string {
|
|
38
|
-
return (cssText ?? "")
|
|
39
|
-
.split(";")
|
|
40
|
-
.map((decl) => decl.trim())
|
|
41
|
-
.filter(
|
|
42
|
-
(decl) =>
|
|
43
|
-
decl &&
|
|
44
|
-
!decl.startsWith("visibility:") &&
|
|
45
|
-
!decl.startsWith("--slide-progress:"),
|
|
46
|
-
)
|
|
47
|
-
.sort()
|
|
48
|
-
.join(";");
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
// data-state/data-index churn every navigation (the leading slide's active
|
|
52
|
-
// state flips) — routine, and stripped from the clone anyway (rebuildClones
|
|
53
|
-
// removes both), so reacting to them would rebuild on every page change for
|
|
54
|
-
// no visible difference, including mid-glide while a clone might be on
|
|
55
|
-
// screen (the exact class of flash this whole engine exists to avoid). A
|
|
56
|
-
// "style" mutation needs the finer check above, since the engine and a
|
|
57
|
-
// consumer (e.g. a gradient swap) both write to the same attribute.
|
|
58
|
-
// Everything else — a slide's other attributes, its children, or their text
|
|
59
|
-
// — genuinely can change the clone's content, so those still trigger a
|
|
60
|
-
// rebuild.
|
|
61
|
-
function isMeaningfulSlideMutation(m: MutationRecord): boolean {
|
|
62
|
-
if (m.type !== "attributes") return true;
|
|
63
|
-
if (m.attributeName === "data-state" || m.attributeName === "data-index")
|
|
64
|
-
return false;
|
|
65
|
-
if (m.attributeName === "style") {
|
|
66
|
-
const target = m.target as HTMLElement;
|
|
67
|
-
return (
|
|
68
|
-
styleWithoutEngineProps(m.oldValue) !==
|
|
69
|
-
styleWithoutEngineProps(target.getAttribute("style"))
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// Pointer travel (px, along the axis) before a press becomes a drag — below it
|
|
76
|
-
// a tap still reaches a link/button inside a slide.
|
|
77
|
-
const DRAG_THRESHOLD_PX = 3;
|
|
78
|
-
// How far a fling carries past the release point: released velocity (px/ms) ×
|
|
79
|
-
// this (ms) is the projected distance, then snapped to a page boundary. Larger
|
|
80
|
-
// = a flick travels further. Tuned for feel on device.
|
|
81
|
-
const FLING_DECEL_MS = 120;
|
|
82
|
-
|
|
83
|
-
/** Live track measurement the engine paints against. */
|
|
84
|
-
type Geometry = {
|
|
85
|
-
track: HTMLElement;
|
|
86
|
-
slides: HTMLDivElement[];
|
|
87
|
-
count: number;
|
|
88
|
-
stride: number;
|
|
89
|
-
// One period: the length of the real-slide run. The clone buffers are a full
|
|
90
|
-
// period each side, so the strip is periodic with this length and a re-base by
|
|
91
|
-
// it shows pixel-identical content.
|
|
92
|
-
trackLength: number;
|
|
93
|
-
// The measured layout position of the first REAL slide (past the leading clone
|
|
94
|
-
// buffer). Subtracting it places real slide 0 at `align`, so the constant
|
|
95
|
-
// buffer offset — and RTL, where the buffer sits on the other side — are handled
|
|
96
|
-
// by measurement rather than a hard-coded term.
|
|
97
|
-
basePos: number;
|
|
98
|
-
// The track's own content-box size along the axis (one viewport). The window
|
|
99
|
-
// that decides which slides stay painted is measured against it.
|
|
100
|
-
trackSize: number;
|
|
101
|
-
align: number;
|
|
102
|
-
// +1 for a left-to-right / top-to-bottom axis, −1 for RTL (where the flex row
|
|
103
|
-
// reverses and slide positions run backwards). The offset and drag delta are
|
|
104
|
-
// multiplied by it, so the logical engine stays direction-agnostic and only the
|
|
105
|
-
// physical paint mirrors.
|
|
106
|
-
dir: number;
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* The infinite-loop transform engine (RFC 0018, clone-strip revision). Active
|
|
111
|
-
* only for `loop="infinite"` (+ `transition="slide"`); every other mode keeps the
|
|
112
|
-
* native-scroll-snap {@link useCarouselViewport}.
|
|
113
|
-
*
|
|
114
|
-
* **Why clones.** The track is a static, contiguous strip —
|
|
115
|
-
* `[clones of every slide] [the real slides] [clones of every slide]` — laid out
|
|
116
|
-
* as one flex row on a single compositor layer. Navigation only ever translates
|
|
117
|
-
* the *whole track*; no slide ever moves relative to it. When a glide carries past
|
|
118
|
-
* the last real slide onto a clone, a settle-time **re-base** shifts the track by
|
|
119
|
-
* exactly one period so the identical real slide sits at the same pixels. Because
|
|
120
|
-
* the strip is periodic and every slide is already-painted DOM, the re-base
|
|
121
|
-
* reveals nothing unrasterised and nothing moves — structurally eliminating the
|
|
122
|
-
* iOS seam flash a per-slide `wrapShift` fill could never avoid (it moved slides
|
|
123
|
-
* discontinuously, which iOS can't pre-rasterise).
|
|
124
|
-
*
|
|
125
|
-
* **Programmatic** navigation glides the **short way** to the active page via a
|
|
126
|
-
* GPU-composited transition. **Touch / mouse drag** follows the pointer 1:1
|
|
127
|
-
* (transition off) and, on release, a velocity-projected fling snaps to the
|
|
128
|
-
* nearest **page** boundary. Drag paints at the normalized offset so it wraps
|
|
129
|
-
* within the one-period buffer no matter how far you drag.
|
|
130
|
-
*
|
|
131
|
-
* Geometry is read from layout (`offsetLeft`/`offsetTop`); it's only meaningful in
|
|
132
|
-
* a real browser (jsdom reports zero), so the pixel behaviour is exercised in
|
|
133
|
-
* Playwright while the control flow is unit-tested with mocked geometry.
|
|
134
|
-
*/
|
|
135
|
-
export function useCarouselLoop() {
|
|
136
|
-
const {
|
|
137
|
-
slideKeys,
|
|
138
|
-
slidesRef,
|
|
139
|
-
currentPageOffset,
|
|
140
|
-
effectiveSlidesPerMove,
|
|
141
|
-
orientation,
|
|
142
|
-
transition,
|
|
143
|
-
loop,
|
|
144
|
-
snapAlign,
|
|
145
|
-
refreshTick,
|
|
146
|
-
instantScrollRef,
|
|
147
|
-
directJumpRef,
|
|
148
|
-
goTo,
|
|
149
|
-
pageForSlideIndex,
|
|
150
|
-
allowMouseDrag,
|
|
151
|
-
} = useCarouselContext();
|
|
152
|
-
|
|
153
|
-
const isInfinite = loop === "infinite" && transition === "slide";
|
|
154
|
-
const vertical = orientation === "vertical";
|
|
155
|
-
const trackRef = useRef<HTMLDivElement | null>(null);
|
|
156
|
-
const headCloneRef = useRef<HTMLDivElement | null>(null);
|
|
157
|
-
const tailCloneRef = useRef<HTMLDivElement | null>(null);
|
|
158
|
-
// The scroll position in real-slide space (px): 0 = real slide 0 at `align`.
|
|
159
|
-
// At rest it's a page boundary within [0, trackLength); a glide may carry it
|
|
160
|
-
// outside that range onto a clone, and the settle re-base brings it back.
|
|
161
|
-
const offsetRef = useRef(0);
|
|
162
|
-
// Latest active-page leading index, read by the resize observer — so it can
|
|
163
|
-
// re-home to the current page without re-subscribing on every navigation.
|
|
164
|
-
const currentPageOffsetRef = useRef(currentPageOffset);
|
|
165
|
-
currentPageOffsetRef.current = currentPageOffset;
|
|
166
|
-
// The geometry the resize observer last acted on — lets it no-op a spurious
|
|
167
|
-
// fire (see the observer effect below) instead of unconditionally interrupting
|
|
168
|
-
// whatever the track is currently doing.
|
|
169
|
-
const lastResizeGeometryRef = useRef<{
|
|
170
|
-
stride: number;
|
|
171
|
-
align: number;
|
|
172
|
-
basePos: number;
|
|
173
|
-
trackSize: number;
|
|
174
|
-
dir: number;
|
|
175
|
-
count: number;
|
|
176
|
-
} | null>(null);
|
|
177
|
-
// The first positioning is instant — a glide from slide 0 to the initial page
|
|
178
|
-
// on mount would be a pointless animation on load.
|
|
179
|
-
const positionedRef = useRef(false);
|
|
180
|
-
// One-shot: a fling's release (onPointerUp) already drives the track directly
|
|
181
|
-
// via its own glideTo() call, which may deliberately target a clone position
|
|
182
|
-
// (the same "animate onto the clone, rebase on settle" pattern a click-driven
|
|
183
|
-
// glide uses) — it only calls goTo() afterwards to sync `currentPage`, not to
|
|
184
|
-
// ask for a second glide. But that goTo() is a state update, and this same
|
|
185
|
-
// positioning effect (below) reacts to it: its own boundGlideStart() rebases
|
|
186
|
-
// *before* computing a step, and unlike a click (which never lands off the
|
|
187
|
-
// clone buffer until the fling's own target does), the fling's target is
|
|
188
|
-
// usually already exactly one trackLength past a real position at the
|
|
189
|
-
// instant it crosses the seam — so the rebase fires for real, snapping the
|
|
190
|
-
// just-started animated glide to its settled position with an *instant,
|
|
191
|
-
// untransitioned* repaint before the browser ever renders a single frame of
|
|
192
|
-
// it. Net effect: the fling's fling-worth of smooth motion collapses into a
|
|
193
|
-
// hard, instant snap — the "release/settle snaps abruptly" a human tester
|
|
194
|
-
// flagged, reproducible only when a swipe crosses the seam (the one case
|
|
195
|
-
// where the fling's own target actually needs rebasing). Set right before
|
|
196
|
-
// that goTo() call, consumed by the effect on its very next run.
|
|
197
|
-
const dragHandledPositionRef = useRef(false);
|
|
198
|
-
// Live drag state: null when not dragging.
|
|
199
|
-
const dragRef = useRef<{
|
|
200
|
-
pointerId: number;
|
|
201
|
-
startClient: number;
|
|
202
|
-
startOffset: number;
|
|
203
|
-
lastClient: number;
|
|
204
|
-
lastTime: number;
|
|
205
|
-
velocity: number;
|
|
206
|
-
dragging: boolean;
|
|
207
|
-
geometry: Geometry;
|
|
208
|
-
} | null>(null);
|
|
209
|
-
|
|
210
|
-
const trackCallbackRef = useCallback((node: HTMLDivElement | null) => {
|
|
211
|
-
trackRef.current = node;
|
|
212
|
-
}, []);
|
|
213
|
-
const headCallbackRef = useCallback((node: HTMLDivElement | null) => {
|
|
214
|
-
headCloneRef.current = node;
|
|
215
|
-
}, []);
|
|
216
|
-
const tailCallbackRef = useCallback((node: HTMLDivElement | null) => {
|
|
217
|
-
tailCloneRef.current = node;
|
|
218
|
-
}, []);
|
|
219
|
-
|
|
220
|
-
const realSlides = useCallback(
|
|
221
|
-
() =>
|
|
222
|
-
slideKeys
|
|
223
|
-
.map((key) => slidesRef.current!.get(key))
|
|
224
|
-
.filter((el): el is HTMLDivElement => el != null),
|
|
225
|
-
[slideKeys, slidesRef],
|
|
226
|
-
);
|
|
227
|
-
|
|
228
|
-
// Measure the track from live layout. Null when there's nothing to loop
|
|
229
|
-
// (fewer than two slides) or the browser hasn't laid it out yet (jsdom
|
|
230
|
-
// reports a zero stride).
|
|
231
|
-
const measure = useCallback((): Geometry | null => {
|
|
232
|
-
const track = trackRef.current!;
|
|
233
|
-
const slides = realSlides();
|
|
234
|
-
const count = slides.length;
|
|
235
|
-
if (count < 2) return null;
|
|
236
|
-
// Measure with getBoundingClientRect, not offsetLeft/Width: the latter round
|
|
237
|
-
// to whole pixels, and on a multi-slide page that rounding accumulates over
|
|
238
|
-
// the page's several strides into a visible edge misalignment (a slide clipped
|
|
239
|
-
// at one viewport edge, a gap at the other). Every rect carries the track's
|
|
240
|
-
// current transform, so positions are read as DIFFERENCES (slide − slide,
|
|
241
|
-
// slide − track): the transform cancels, leaving the pure sub-pixel layout.
|
|
242
|
-
const start = (r: DOMRect) => (vertical ? r.top : r.left);
|
|
243
|
-
const extent = (r: DOMRect) => (vertical ? r.height : r.width);
|
|
244
|
-
const trackRect = track.getBoundingClientRect();
|
|
245
|
-
const r0 = slides[0]!.getBoundingClientRect();
|
|
246
|
-
const r1 = slides[1]!.getBoundingClientRect();
|
|
247
|
-
// Signed gap between the first two slides. RTL lays the row out backwards, so
|
|
248
|
-
// it comes out negative — the sign is the axis direction, the magnitude the
|
|
249
|
-
// stride. Zero means the browser hasn't laid the track out yet (jsdom): bail.
|
|
250
|
-
const rawStride = start(r1) - start(r0);
|
|
251
|
-
if (rawStride === 0) return null;
|
|
252
|
-
const dir = rawStride < 0 ? -1 : 1;
|
|
253
|
-
const stride = Math.abs(rawStride);
|
|
254
|
-
const trackLength = stride * count;
|
|
255
|
-
const basePos = start(r0) - start(trackRect);
|
|
256
|
-
const trackSize = extent(trackRect);
|
|
257
|
-
const slideSize = extent(r0);
|
|
258
|
-
// Where real slide 0 should rest, per its snap alignment. The active page can
|
|
259
|
-
// span several slides; `align` places the whole page. Under RTL (dir −1) the
|
|
260
|
-
// reading start is the RIGHT edge, so start/end swap; centre is symmetric.
|
|
261
|
-
const pageSpan = (effectiveSlidesPerMove - 1) * stride + slideSize;
|
|
262
|
-
const edgeAlign =
|
|
263
|
-
dir < 0
|
|
264
|
-
? snapAlign === "start"
|
|
265
|
-
? "end"
|
|
266
|
-
: snapAlign === "end"
|
|
267
|
-
? "start"
|
|
268
|
-
: "center"
|
|
269
|
-
: snapAlign;
|
|
270
|
-
const align =
|
|
271
|
-
edgeAlign === "center"
|
|
272
|
-
? (trackSize - pageSpan) / 2
|
|
273
|
-
: edgeAlign === "end"
|
|
274
|
-
? trackSize - pageSpan
|
|
275
|
-
: 0;
|
|
276
|
-
return {
|
|
277
|
-
track,
|
|
278
|
-
slides,
|
|
279
|
-
count,
|
|
280
|
-
stride,
|
|
281
|
-
trackLength,
|
|
282
|
-
basePos,
|
|
283
|
-
trackSize,
|
|
284
|
-
align,
|
|
285
|
-
dir,
|
|
286
|
-
};
|
|
287
|
-
}, [realSlides, vertical, snapAlign, effectiveSlidesPerMove]);
|
|
288
|
-
|
|
289
|
-
// Translate the whole track from `from` to `offset`. `animate` runs it as a
|
|
290
|
-
// GPU-composited CSS transition (the smooth glide) that sweeps that range;
|
|
291
|
-
// otherwise it snaps (`from` === `offset`). No per-slide transform — every
|
|
292
|
-
// slide (real and clone) rides the track's single bitmap.
|
|
293
|
-
const paint = useCallback(
|
|
294
|
-
(offset: number, from: number, g: Geometry, animate: boolean) => {
|
|
295
|
-
g.track.style.transition = animate ? glideTransition(g.track) : "none";
|
|
296
|
-
// Place real slide 0 (at layout position basePos) at `align`, then carry the
|
|
297
|
-
// offset. dir mirrors the offset under RTL; the block axis never mirrors. A 2D
|
|
298
|
-
// translate (not translate3d) so the wide clone strip isn't force-promoted to
|
|
299
|
-
// one permanent GPU layer — iOS rasterises such a layer in tiles on demand,
|
|
300
|
-
// blanking slides at rest until they fill in.
|
|
301
|
-
const trackShift = g.align - g.basePos - g.dir * offset;
|
|
302
|
-
g.track.style.transform = vertical
|
|
303
|
-
? `translate(0px, ${trackShift}px)`
|
|
304
|
-
: `translate(${trackShift}px, 0px)`;
|
|
305
|
-
// Window the painted set. The strip is much wider than the screen, and iOS
|
|
306
|
-
// rasterises a wide composited surface in tiles on demand — the entering
|
|
307
|
-
// edge blanks for a frame. So paint only the slides on (or sweeping through,
|
|
308
|
-
// or within a viewport's slack of) the viewport and `visibility: hidden` the
|
|
309
|
-
// rest: a hidden slide is still laid out — measured, registered, interactive
|
|
310
|
-
// once shown — but contributes nothing to rasterise, keeping the surface
|
|
311
|
-
// ~one screen wide. The window covers the whole glide sweep [from, offset]
|
|
312
|
-
// so an entering slide is already painted before it arrives and a leaving one
|
|
313
|
-
// stays painted until it's gone.
|
|
314
|
-
const margin = g.trackSize;
|
|
315
|
-
const viewportHalf = g.trackSize / 2;
|
|
316
|
-
const trackRect = g.track.getBoundingClientRect();
|
|
317
|
-
const trackStart = vertical ? trackRect.top : trackRect.left;
|
|
318
|
-
for (const el of g.track.querySelectorAll<HTMLElement>(
|
|
319
|
-
"[data-carousel-slide]",
|
|
320
|
-
)) {
|
|
321
|
-
// Layout position within the track, transform-cancelled (same trick as
|
|
322
|
-
// measure): the slide and the track carry the same live transform.
|
|
323
|
-
const r = el.getBoundingClientRect();
|
|
324
|
-
const p = (vertical ? r.top : r.left) - trackStart;
|
|
325
|
-
const sz = vertical ? r.height : r.width;
|
|
326
|
-
const edge = p + g.align - g.basePos;
|
|
327
|
-
const a = edge - g.dir * from;
|
|
328
|
-
const b = edge - g.dir * offset;
|
|
329
|
-
const near = Math.max(a, b) + sz >= -margin;
|
|
330
|
-
const far = Math.min(a, b) <= g.trackSize + margin;
|
|
331
|
-
el.style.visibility = near && far ? "" : "hidden";
|
|
332
|
-
// --slide-progress: the same -1..0..1 signal native scroll mode writes
|
|
333
|
-
// (see useCarouselViewport's "Continuous scroll progress" effect) —
|
|
334
|
-
// parallax (and any other consumer) reads this, and native mode derives
|
|
335
|
-
// it from real scroll position, which never exists here (the engine
|
|
336
|
-
// translates the track via transform; nothing ever scrolls). `b` is
|
|
337
|
-
// already this slide's viewport-relative position at the settled
|
|
338
|
-
// offset, so its center compared to the viewport's own center
|
|
339
|
-
// (trackSize/2) gives the identical signal with no extra DOM reads —
|
|
340
|
-
// correct for every discrete paint (instant moves, and every one of a
|
|
341
|
-
// drag's many calls); an animated glide's *live* mid-transition value
|
|
342
|
-
// is additionally driven by the rAF ticker below.
|
|
343
|
-
const slideCenter = b + sz / 2;
|
|
344
|
-
const progress =
|
|
345
|
-
viewportHalf > 0
|
|
346
|
-
? Math.max(
|
|
347
|
-
-1,
|
|
348
|
-
Math.min(1, (slideCenter - viewportHalf) / viewportHalf),
|
|
349
|
-
)
|
|
350
|
-
: 0;
|
|
351
|
-
el.style.setProperty("--slide-progress", String(progress));
|
|
352
|
-
}
|
|
353
|
-
},
|
|
354
|
-
[vertical],
|
|
355
|
-
);
|
|
356
|
-
|
|
357
|
-
// Re-read *live* (as-currently-rendered) positions and re-derive
|
|
358
|
-
// --slide-progress from them — unlike paint()'s analytic version (which
|
|
359
|
-
// computes the settled value from the target offset, correct for every
|
|
360
|
-
// discrete call but not for what's on screen mid-transition), this reflects
|
|
361
|
-
// whatever position the CSS transition has actually interpolated to at the
|
|
362
|
-
// moment of the call. Mirrors useCarouselViewport's native recomputeProgress
|
|
363
|
-
// (viewport-center vs. slide-center, both from getBoundingClientRect) — the
|
|
364
|
-
// same signal, just derived from the track's transform instead of real
|
|
365
|
-
// scroll, since nothing here ever scrolls.
|
|
366
|
-
const liveSlideProgress = useCallback(
|
|
367
|
-
(g: Geometry) => {
|
|
368
|
-
// Structural, not defensive: the track is always rendered as the
|
|
369
|
-
// viewport's direct child (Carousel.tsx) whenever isInfinite is true,
|
|
370
|
-
// which is the only condition under which this ever runs.
|
|
371
|
-
const viewportEl = g.track.parentElement!;
|
|
372
|
-
const viewportRect = viewportEl.getBoundingClientRect();
|
|
373
|
-
const viewportCenter = vertical
|
|
374
|
-
? viewportRect.top + viewportRect.height / 2
|
|
375
|
-
: viewportRect.left + viewportRect.width / 2;
|
|
376
|
-
const viewportHalf =
|
|
377
|
-
(vertical ? viewportRect.height : viewportRect.width) / 2;
|
|
378
|
-
for (const el of g.track.querySelectorAll<HTMLElement>(
|
|
379
|
-
"[data-carousel-slide]",
|
|
380
|
-
)) {
|
|
381
|
-
const r = el.getBoundingClientRect();
|
|
382
|
-
const center = vertical ? r.top + r.height / 2 : r.left + r.width / 2;
|
|
383
|
-
const progress =
|
|
384
|
-
viewportHalf > 0
|
|
385
|
-
? Math.max(
|
|
386
|
-
-1,
|
|
387
|
-
Math.min(1, (center - viewportCenter) / viewportHalf),
|
|
388
|
-
)
|
|
389
|
-
: 0;
|
|
390
|
-
el.style.setProperty("--slide-progress", String(progress));
|
|
391
|
-
}
|
|
392
|
-
},
|
|
393
|
-
[vertical],
|
|
394
|
-
);
|
|
395
|
-
|
|
396
|
-
// Live-read on every frame for the DURATION of an animated glide, so a
|
|
397
|
-
// parallax slide's content drifts smoothly alongside the track's own CSS
|
|
398
|
-
// transition instead of snapping straight to the settled value paint()
|
|
399
|
-
// already set. Only animated glides need this — an instant move or a drag
|
|
400
|
-
// (which calls paint() on every pointermove) is already exact and smooth
|
|
401
|
-
// from the analytic value alone.
|
|
402
|
-
const progressRafRef = useRef<number | null>(null);
|
|
403
|
-
const stopProgressTicker = useCallback(() => {
|
|
404
|
-
if (progressRafRef.current !== null) {
|
|
405
|
-
cancelAnimationFrame(progressRafRef.current);
|
|
406
|
-
progressRafRef.current = null;
|
|
407
|
-
}
|
|
408
|
-
}, []);
|
|
409
|
-
const startProgressTicker = useCallback(
|
|
410
|
-
(g: Geometry) => {
|
|
411
|
-
stopProgressTicker();
|
|
412
|
-
const tick = () => {
|
|
413
|
-
liveSlideProgress(g);
|
|
414
|
-
progressRafRef.current = requestAnimationFrame(tick);
|
|
415
|
-
};
|
|
416
|
-
progressRafRef.current = requestAnimationFrame(tick);
|
|
417
|
-
},
|
|
418
|
-
[stopProgressTicker, liveSlideProgress],
|
|
419
|
-
);
|
|
420
|
-
// Stop any in-flight ticker on unmount — otherwise it keeps firing against a
|
|
421
|
-
// detached DOM forever.
|
|
422
|
-
useEffect(() => stopProgressTicker, [stopProgressTicker]);
|
|
423
|
-
|
|
424
|
-
// Bring `offsetRef` back into [0, trackLength) and repaint instantly. A period
|
|
425
|
-
// is a whole clone buffer, so the shown pixels are identical — invisible.
|
|
426
|
-
const rebase = useCallback(
|
|
427
|
-
(g: Geometry) => {
|
|
428
|
-
const normalized = normalizeOffset(offsetRef.current, g.trackLength);
|
|
429
|
-
if (normalized === offsetRef.current) return;
|
|
430
|
-
offsetRef.current = normalized;
|
|
431
|
-
paint(normalized, normalized, g, false);
|
|
432
|
-
},
|
|
433
|
-
[paint],
|
|
434
|
-
);
|
|
435
|
-
|
|
436
|
-
// Re-base BEFORE a glide, not only on settle. Rapid navigation retargets the
|
|
437
|
-
// transition before it ends, so `transitionend` never fires and the offset would
|
|
438
|
-
// otherwise accumulate a stride per step and translate the track clean off the
|
|
439
|
-
// one-period clone buffer into unpainted space (a blank until you pause). The
|
|
440
|
-
// forced reflow commits the instant re-base so the animated glide starts from the
|
|
441
|
-
// bounded position; the whole-period shift is invisible.
|
|
442
|
-
const boundGlideStart = useCallback(
|
|
443
|
-
(g: Geometry) => {
|
|
444
|
-
rebase(g);
|
|
445
|
-
void (vertical ? g.track.offsetHeight : g.track.offsetWidth);
|
|
446
|
-
},
|
|
447
|
-
[rebase, vertical],
|
|
448
|
-
);
|
|
449
|
-
|
|
450
|
-
// Move the track to `target` — animated unless this is an `instant` nav, the
|
|
451
|
-
// first positioning, or the user prefers reduced motion. An animated glide runs
|
|
452
|
-
// to the raw target (which may land on a clone) and re-bases on transitionend;
|
|
453
|
-
// an instant move re-bases up front so it never rests on a clone.
|
|
454
|
-
const glideTo = useCallback(
|
|
455
|
-
(target: number, instant: boolean, g: Geometry) => {
|
|
456
|
-
const reduce = !!window.matchMedia?.("(prefers-reduced-motion: reduce)")
|
|
457
|
-
?.matches;
|
|
458
|
-
const animate = !instant && !reduce;
|
|
459
|
-
if (animate) {
|
|
460
|
-
// Sweep from where the track sits now to the target so the window covers
|
|
461
|
-
// every slide the glide passes over.
|
|
462
|
-
const from = offsetRef.current;
|
|
463
|
-
offsetRef.current = target;
|
|
464
|
-
paint(target, from, g, true);
|
|
465
|
-
startProgressTicker(g);
|
|
466
|
-
} else {
|
|
467
|
-
offsetRef.current = normalizeOffset(target, g.trackLength);
|
|
468
|
-
paint(offsetRef.current, offsetRef.current, g, false);
|
|
469
|
-
stopProgressTicker();
|
|
470
|
-
}
|
|
471
|
-
},
|
|
472
|
-
[paint, startProgressTicker, stopProgressTicker],
|
|
473
|
-
);
|
|
474
|
-
|
|
475
|
-
// Rebuild the clone buffers: a full period of aria-hidden, inert copies each
|
|
476
|
-
// side makes the strip periodic so every seam is contiguous already-painted
|
|
477
|
-
// DOM. Copies are presentational only — they carry no registration, index, or
|
|
478
|
-
// focusable state.
|
|
479
|
-
const rebuildClones = useCallback(() => {
|
|
480
|
-
// The holders render with the track in infinite mode, so they're mounted
|
|
481
|
-
// by the time this runs (same guarantee measure() relies on) — including
|
|
482
|
-
// when called from the mutation observer below, whose own cleanup
|
|
483
|
-
// (disconnect) tears down in the same synchronous effect-flush pass that
|
|
484
|
-
// unmounts the holders, so there's no window where this runs with stale
|
|
485
|
-
// refs.
|
|
486
|
-
const head = headCloneRef.current!;
|
|
487
|
-
const tail = tailCloneRef.current!;
|
|
488
|
-
head.replaceChildren();
|
|
489
|
-
tail.replaceChildren();
|
|
490
|
-
const slides = realSlides();
|
|
491
|
-
if (slides.length < 2) return;
|
|
492
|
-
for (const holder of [head, tail]) {
|
|
493
|
-
for (const slide of slides) {
|
|
494
|
-
const clone = slide.cloneNode(true) as HTMLElement;
|
|
495
|
-
clone.setAttribute("aria-hidden", "true");
|
|
496
|
-
clone.setAttribute("inert", "");
|
|
497
|
-
clone.setAttribute("data-carousel-clone", "");
|
|
498
|
-
clone.removeAttribute("data-index");
|
|
499
|
-
clone.removeAttribute("data-state");
|
|
500
|
-
clone.style.transform = "";
|
|
501
|
-
// Strip every id in the copied subtree: a duplicate id is invalid HTML and
|
|
502
|
-
// would break `getElementById` / label associations against the real slide.
|
|
503
|
-
clone.removeAttribute("id");
|
|
504
|
-
for (const withId of clone.querySelectorAll("[id]"))
|
|
505
|
-
withId.removeAttribute("id");
|
|
506
|
-
holder.appendChild(clone);
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
}, [realSlides]);
|
|
510
|
-
|
|
511
|
-
// Rebuild whenever the slide *set* changes (count, order, identity).
|
|
512
|
-
useEffect(() => {
|
|
513
|
-
if (!isInfinite) return;
|
|
514
|
-
rebuildClones();
|
|
515
|
-
}, [isInfinite, slideKeys, refreshTick, rebuildClones]);
|
|
516
|
-
|
|
517
|
-
// Also rebuild whenever a slide's own *content* changes underneath the same
|
|
518
|
-
// key — e.g. a consumer swapping a slide's children (an image for a
|
|
519
|
-
// gradient, text for a different caption) without touching the slide
|
|
520
|
-
// count/keys. The effect above doesn't see this (its deps are all
|
|
521
|
-
// structural), so a clone would otherwise keep showing stale content
|
|
522
|
-
// indefinitely: crossing the seam briefly shows the stale clone before the
|
|
523
|
-
// settle re-base swaps in the fresh real slide at the same pixels — a
|
|
524
|
-
// flash of old content that "quickly changes" to the new one. A
|
|
525
|
-
// MutationObserver on each real slide's subtree catches this regardless of
|
|
526
|
-
// *what* changed; no extra coalescing needed on top of it — the browser
|
|
527
|
-
// already batches every mutation from one synchronous commit into a single
|
|
528
|
-
// callback invocation (unlike a native 'scroll' event, which is why
|
|
529
|
-
// useCarouselViewport's own progress effect needs its own rAF batching).
|
|
530
|
-
useEffect(() => {
|
|
531
|
-
if (!isInfinite) return;
|
|
532
|
-
const slides = realSlides();
|
|
533
|
-
if (slides.length === 0) return;
|
|
534
|
-
const observer = new MutationObserver((mutations) => {
|
|
535
|
-
const meaningful = mutations.some((m) => isMeaningfulSlideMutation(m));
|
|
536
|
-
if (meaningful) rebuildClones();
|
|
537
|
-
});
|
|
538
|
-
for (const slide of slides) {
|
|
539
|
-
observer.observe(slide, {
|
|
540
|
-
childList: true,
|
|
541
|
-
subtree: true,
|
|
542
|
-
attributes: true,
|
|
543
|
-
attributeOldValue: true,
|
|
544
|
-
characterData: true,
|
|
545
|
-
});
|
|
546
|
-
}
|
|
547
|
-
return () => observer.disconnect();
|
|
548
|
-
}, [isInfinite, slideKeys, refreshTick, realSlides, rebuildClones]);
|
|
549
|
-
|
|
550
|
-
// Re-base once a glide settles. jsdom runs no transitions, so this fires only in
|
|
551
|
-
// a real browser (tests dispatch a synthetic transitionend); it's idempotent, so
|
|
552
|
-
// an interrupted or spurious event is safe.
|
|
553
|
-
useEffect(() => {
|
|
554
|
-
if (!isInfinite) return;
|
|
555
|
-
// Mounted with the track in infinite mode (as measure() assumes).
|
|
556
|
-
const track = trackRef.current!;
|
|
557
|
-
const onEnd = (event: TransitionEvent) => {
|
|
558
|
-
if (event.propertyName !== "transform") return;
|
|
559
|
-
// The glide is over — stop live-reading every frame (rebase's own
|
|
560
|
-
// paint(), if it runs, already set the settled analytic value).
|
|
561
|
-
stopProgressTicker();
|
|
562
|
-
const g = measure();
|
|
563
|
-
if (g) rebase(g);
|
|
564
|
-
};
|
|
565
|
-
track.addEventListener("transitionend", onEnd);
|
|
566
|
-
return () => track.removeEventListener("transitionend", onEnd);
|
|
567
|
-
}, [isInfinite, measure, rebase, stopProgressTicker]);
|
|
568
|
-
|
|
569
|
-
// Drive the track to the active page whenever it changes — the short way, so a
|
|
570
|
-
// wrap glides one step onto the adjacent (clone) slide. Targets the page's
|
|
571
|
-
// **leading slide index** (`currentPageOffset`): for multi-slide a page move
|
|
572
|
-
// glides a whole page of strides. `refreshTick`/`slideKeys` re-home the track
|
|
573
|
-
// after a layout or slide-set change.
|
|
574
|
-
useEffect(() => {
|
|
575
|
-
if (!isInfinite) return;
|
|
576
|
-
// A fling's own onPointerUp already drove the glide directly and only
|
|
577
|
-
// triggered this render to sync `currentPage` — skip re-rebasing/re-gliding
|
|
578
|
-
// on top of that in-flight animation (see dragHandledPositionRef's comment).
|
|
579
|
-
if (dragHandledPositionRef.current) {
|
|
580
|
-
dragHandledPositionRef.current = false;
|
|
581
|
-
return;
|
|
582
|
-
}
|
|
583
|
-
const g = measure();
|
|
584
|
-
if (!g) return;
|
|
585
|
-
// Keep the resize observer's baseline current, so even its guaranteed first
|
|
586
|
-
// fire (browsers report an element's size once right after `.observe()`, with
|
|
587
|
-
// no real change) has a snapshot to compare against and correctly no-ops
|
|
588
|
-
// instead of interrupting this navigation (see the observer effect below).
|
|
589
|
-
lastResizeGeometryRef.current = {
|
|
590
|
-
stride: g.stride,
|
|
591
|
-
align: g.align,
|
|
592
|
-
basePos: g.basePos,
|
|
593
|
-
trackSize: g.trackSize,
|
|
594
|
-
dir: g.dir,
|
|
595
|
-
count: g.count,
|
|
596
|
-
};
|
|
597
|
-
// Bound the offset first so rapid, transition-interrupting navigation can't
|
|
598
|
-
// accumulate it off the clone buffer.
|
|
599
|
-
boundGlideStart(g);
|
|
600
|
-
const logical =
|
|
601
|
-
((Math.round(offsetRef.current / g.stride) % g.count) + g.count) %
|
|
602
|
-
g.count;
|
|
603
|
-
// A direct jump (goTo/scrollToIndex — most visibly an indicator/thumbnail
|
|
604
|
-
// click) takes the literal distance between the two real slide indices, not
|
|
605
|
-
// the ring's shortest wrap: both `logical` and `currentPageOffset` already
|
|
606
|
-
// live in the same unwrapped [0, count) slide-index space, so this is a
|
|
607
|
-
// plain subtraction, never the modular one shortestStep does for a relative
|
|
608
|
-
// next()/previous() step. That's what makes picking the last page from the
|
|
609
|
-
// first visibly travel forward through every slide in between, matching the
|
|
610
|
-
// indicators' own reading order, instead of silently taking the one-step-
|
|
611
|
-
// back route around the ring just because it's shorter.
|
|
612
|
-
const step = directJumpRef.current
|
|
613
|
-
? currentPageOffset - logical
|
|
614
|
-
: shortestStep(logical, currentPageOffset, g.count);
|
|
615
|
-
directJumpRef.current = false;
|
|
616
|
-
const target = offsetRef.current + step * g.stride;
|
|
617
|
-
const instant = instantScrollRef.current || !positionedRef.current;
|
|
618
|
-
instantScrollRef.current = false;
|
|
619
|
-
positionedRef.current = true;
|
|
620
|
-
glideTo(target, instant, g);
|
|
621
|
-
}, [
|
|
622
|
-
isInfinite,
|
|
623
|
-
currentPageOffset,
|
|
624
|
-
refreshTick,
|
|
625
|
-
slideKeys,
|
|
626
|
-
measure,
|
|
627
|
-
glideTo,
|
|
628
|
-
boundGlideStart,
|
|
629
|
-
instantScrollRef,
|
|
630
|
-
]);
|
|
631
|
-
|
|
632
|
-
// Re-measure on any layout / size change. The native-scroll viewport has its own
|
|
633
|
-
// ResizeObservers; the transform engine needs one too, or it keeps stale geometry
|
|
634
|
-
// whenever the container resizes or a size-affecting knob changes with no React
|
|
635
|
-
// signal the engine can see (peek, ratio, density, a multi-slide gap — all
|
|
636
|
-
// registry CSS) — leaving the track misaligned, or the paint window hiding the
|
|
637
|
-
// wrong slides, until the next navigation. Observing the track catches container /
|
|
638
|
-
// peek changes; observing a slide catches ratio / density / multi-slide-gap
|
|
639
|
-
// changes (which resize the slide but not the 100%-wide track). Re-home to the
|
|
640
|
-
// current page instantly, which also re-runs the paint window against the fresh
|
|
641
|
-
// geometry — this is what recovers slides a first, pre-layout measure mis-hid.
|
|
642
|
-
useEffect(() => {
|
|
643
|
-
if (!isInfinite) return;
|
|
644
|
-
const track = trackRef.current!;
|
|
645
|
-
const rehome = () => {
|
|
646
|
-
const g = measure();
|
|
647
|
-
if (!g) return;
|
|
648
|
-
// The browser fires a ResizeObserver callback once automatically right
|
|
649
|
-
// after `.observe()`, even when nothing has actually resized (it reports
|
|
650
|
-
// the initial size — real behaviour our test double doesn't replicate, so
|
|
651
|
-
// this only surfaces on a device). An unconditional rehome would then
|
|
652
|
-
// unconditionally interrupt whatever the track is doing: mid-glide, it'd
|
|
653
|
-
// kill the CSS transition, snap straight to the rest position, and collapse
|
|
654
|
-
// the paint window to a single point instead of the swept range — hiding
|
|
655
|
-
// the slide still mid-transition (the "current slide vanishes on Prev"
|
|
656
|
-
// report). Skip when the measured geometry hasn't actually changed; a
|
|
657
|
-
// *genuine* resize (a real one always changes at least one of these) still
|
|
658
|
-
// rehomes as before.
|
|
659
|
-
const last = lastResizeGeometryRef.current;
|
|
660
|
-
if (
|
|
661
|
-
last &&
|
|
662
|
-
last.stride === g.stride &&
|
|
663
|
-
last.align === g.align &&
|
|
664
|
-
last.basePos === g.basePos &&
|
|
665
|
-
last.trackSize === g.trackSize &&
|
|
666
|
-
last.dir === g.dir &&
|
|
667
|
-
last.count === g.count
|
|
668
|
-
) {
|
|
669
|
-
return;
|
|
670
|
-
}
|
|
671
|
-
lastResizeGeometryRef.current = {
|
|
672
|
-
stride: g.stride,
|
|
673
|
-
align: g.align,
|
|
674
|
-
basePos: g.basePos,
|
|
675
|
-
trackSize: g.trackSize,
|
|
676
|
-
dir: g.dir,
|
|
677
|
-
count: g.count,
|
|
678
|
-
};
|
|
679
|
-
offsetRef.current = normalizeOffset(
|
|
680
|
-
currentPageOffsetRef.current * g.stride,
|
|
681
|
-
g.trackLength,
|
|
682
|
-
);
|
|
683
|
-
paint(offsetRef.current, offsetRef.current, g, false);
|
|
684
|
-
};
|
|
685
|
-
const observer = new ResizeObserver(rehome);
|
|
686
|
-
// The track catches container / peek changes; the slides catch ratio /
|
|
687
|
-
// density / multi-slide-gap changes (which resize a slide but not the
|
|
688
|
-
// 100%-wide track). One observer, many targets.
|
|
689
|
-
observer.observe(track);
|
|
690
|
-
for (const slide of realSlides()) observer.observe(slide);
|
|
691
|
-
return () => observer.disconnect();
|
|
692
|
-
}, [isInfinite, measure, paint, realSlides]);
|
|
693
|
-
|
|
694
|
-
const axisClient = useCallback(
|
|
695
|
-
(event: PointerEvent) => (vertical ? event.clientY : event.clientX),
|
|
696
|
-
[vertical],
|
|
697
|
-
);
|
|
698
|
-
|
|
699
|
-
// Start a drag (these handlers are only wired for infinite — see dragHandlers).
|
|
700
|
-
// Touch drag is always on (there's no native scroll to fall back to); mouse
|
|
701
|
-
// drag stays opt-in via allowMouseDrag. Bails when there's nothing to loop.
|
|
702
|
-
const onPointerDown = useCallback(
|
|
703
|
-
(event: PointerEvent<HTMLDivElement>) => {
|
|
704
|
-
if (event.pointerType === "mouse" && !allowMouseDrag) return;
|
|
705
|
-
const geometry = measure();
|
|
706
|
-
if (!geometry) return;
|
|
707
|
-
const client = axisClient(event);
|
|
708
|
-
dragRef.current = {
|
|
709
|
-
pointerId: event.pointerId,
|
|
710
|
-
startClient: client,
|
|
711
|
-
startOffset: offsetRef.current,
|
|
712
|
-
lastClient: client,
|
|
713
|
-
lastTime: event.timeStamp,
|
|
714
|
-
velocity: 0,
|
|
715
|
-
dragging: false,
|
|
716
|
-
geometry,
|
|
717
|
-
};
|
|
718
|
-
},
|
|
719
|
-
[allowMouseDrag, measure, axisClient],
|
|
720
|
-
);
|
|
721
|
-
|
|
722
|
-
// The offset as of the last actual paint() call during a drag — separate
|
|
723
|
-
// from offsetRef itself, which onPointerMove updates on *every* event, so
|
|
724
|
-
// the coalesced repaint below still knows the true "from" for its sweep
|
|
725
|
-
// even after several pointermoves were skipped in favour of one per frame.
|
|
726
|
-
const dragPaintFromRef = useRef(0);
|
|
727
|
-
// rAF id for a pending, not-yet-run coalesced drag repaint; null when none
|
|
728
|
-
// is scheduled.
|
|
729
|
-
const dragFrameRef = useRef<number | null>(null);
|
|
730
|
-
|
|
731
|
-
// Paint the drag's current position (if a frame is pending) right away and
|
|
732
|
-
// cancel it, instead of waiting for rAF — called on release so the fling's
|
|
733
|
-
// own glide always starts from what's actually on screen, not a stale
|
|
734
|
-
// pre-rAF frame.
|
|
735
|
-
const flushDragFrame = useCallback(
|
|
736
|
-
(g: Geometry) => {
|
|
737
|
-
if (dragFrameRef.current === null) return;
|
|
738
|
-
cancelAnimationFrame(dragFrameRef.current);
|
|
739
|
-
dragFrameRef.current = null;
|
|
740
|
-
paint(offsetRef.current, dragPaintFromRef.current, g, false);
|
|
741
|
-
dragPaintFromRef.current = offsetRef.current;
|
|
742
|
-
},
|
|
743
|
-
[paint],
|
|
744
|
-
);
|
|
745
|
-
// A stray pending frame would otherwise paint against a detached track.
|
|
746
|
-
useEffect(() => {
|
|
747
|
-
return () => {
|
|
748
|
-
if (dragFrameRef.current !== null)
|
|
749
|
-
cancelAnimationFrame(dragFrameRef.current);
|
|
750
|
-
};
|
|
751
|
-
}, []);
|
|
752
|
-
|
|
753
|
-
// Follow the pointer 1:1 (offset moves opposite the finger), tracking velocity
|
|
754
|
-
// for the release fling. The painted offset is normalized so the track wraps
|
|
755
|
-
// within the one-period buffer however far the drag runs — invisibly, since a
|
|
756
|
-
// period shows identical content. Crossing the threshold captures the pointer
|
|
757
|
-
// and marks it a drag so the synthesised click is suppressed.
|
|
758
|
-
//
|
|
759
|
-
// Touch can report pointermove faster than the display refreshes, and every
|
|
760
|
-
// paint() re-measures every slide's live position — reacting to each raw
|
|
761
|
-
// event instead of once per frame reads/writes layout more than the
|
|
762
|
-
// compositor can use, the kind of per-event work that reads as jank on real
|
|
763
|
-
// hardware even though jsdom can't show it. `offsetRef` (cheap: no DOM
|
|
764
|
-
// access) still updates on every event so velocity tracking and the
|
|
765
|
-
// eventual fling stay exact; only the paint() call itself — the expensive
|
|
766
|
-
// part — coalesces to one per animation frame, always using whichever
|
|
767
|
-
// offset was current when that frame actually ran.
|
|
768
|
-
const onPointerMove = useCallback(
|
|
769
|
-
(event: PointerEvent<HTMLDivElement>) => {
|
|
770
|
-
const drag = dragRef.current;
|
|
771
|
-
if (!drag || event.pointerId !== drag.pointerId) return;
|
|
772
|
-
const client = axisClient(event);
|
|
773
|
-
const g = drag.geometry;
|
|
774
|
-
const elapsed = event.timeStamp - drag.lastTime;
|
|
775
|
-
if (elapsed > 0) {
|
|
776
|
-
drag.velocity = (-g.dir * (client - drag.lastClient)) / elapsed;
|
|
777
|
-
}
|
|
778
|
-
drag.lastClient = client;
|
|
779
|
-
drag.lastTime = event.timeStamp;
|
|
780
|
-
if (
|
|
781
|
-
!drag.dragging &&
|
|
782
|
-
Math.abs(client - drag.startClient) > DRAG_THRESHOLD_PX
|
|
783
|
-
) {
|
|
784
|
-
drag.dragging = true;
|
|
785
|
-
event.currentTarget.setPointerCapture?.(drag.pointerId);
|
|
786
|
-
// A drag starting mid-glide takes over from here — every subsequent
|
|
787
|
-
// pointermove already repaints the analytic value, so a still-running
|
|
788
|
-
// ticker from that interrupted glide would just be redundant work.
|
|
789
|
-
stopProgressTicker();
|
|
790
|
-
dragPaintFromRef.current = offsetRef.current;
|
|
791
|
-
}
|
|
792
|
-
if (!drag.dragging) return;
|
|
793
|
-
const raw = drag.startOffset - g.dir * (client - drag.startClient);
|
|
794
|
-
offsetRef.current = normalizeOffset(raw, g.trackLength);
|
|
795
|
-
if (dragFrameRef.current !== null) return;
|
|
796
|
-
dragFrameRef.current = requestAnimationFrame(() => {
|
|
797
|
-
dragFrameRef.current = null;
|
|
798
|
-
// Carry the offset from *before* this coalesced repaint as `from`, not
|
|
799
|
-
// this frame's own new value — identical across ordinary frames (a few
|
|
800
|
-
// px apart, same as the finger), but the one frame a drag crosses the
|
|
801
|
-
// loop seam, normalizeOffset wraps the new value by a whole
|
|
802
|
-
// trackLength relative to the old one. Passing both lets paint()'s
|
|
803
|
-
// sweep span that gap, so the slide the wrap reveals is already
|
|
804
|
-
// unhidden (and had a frame to rasterise) instead of popping in
|
|
805
|
-
// unrendered on the very frame it's needed — the same "entering edge
|
|
806
|
-
// blanks for a frame" risk paint()'s sweep already exists to avoid for
|
|
807
|
-
// a click-driven glide, just reached here by a drag's continuous wrap
|
|
808
|
-
// instead of an animated transition.
|
|
809
|
-
paint(offsetRef.current, dragPaintFromRef.current, g, false);
|
|
810
|
-
dragPaintFromRef.current = offsetRef.current;
|
|
811
|
-
});
|
|
812
|
-
},
|
|
813
|
-
[axisClient, paint, stopProgressTicker],
|
|
814
|
-
);
|
|
815
|
-
|
|
816
|
-
// Release: project the fling to a page boundary, glide there directly, and
|
|
817
|
-
// separately sync the active page to where it lands. dragHandledPositionRef
|
|
818
|
-
// tells the positioning effect (below) this navigation is already fully
|
|
819
|
-
// driven — its own boundGlideStart()/glideTo() would otherwise re-rebase and
|
|
820
|
-
// clobber this glide the instant it's already re-rendered off the goTo()
|
|
821
|
-
// below, snapping it to an instant stop before the browser paints a frame of
|
|
822
|
-
// it (see the ref's own comment).
|
|
823
|
-
const onPointerUp = useCallback(
|
|
824
|
-
(event: PointerEvent<HTMLDivElement>) => {
|
|
825
|
-
const drag = dragRef.current;
|
|
826
|
-
if (!drag || event.pointerId !== drag.pointerId) return;
|
|
827
|
-
dragRef.current = null;
|
|
828
|
-
if (!drag.dragging) return;
|
|
829
|
-
const g = drag.geometry;
|
|
830
|
-
// Paint the drag's true final position now rather than leaving it to a
|
|
831
|
-
// pending rAF that may not have run yet — otherwise the fling's own
|
|
832
|
-
// glide below would sweep from a stale, pre-rAF-frame position instead
|
|
833
|
-
// of where the finger actually released.
|
|
834
|
-
flushDragFrame(g);
|
|
835
|
-
// Snap to PAGE boundaries: a page advances `effectiveSlidesPerMove` slides.
|
|
836
|
-
// For a single-slide page this is just `g.stride`.
|
|
837
|
-
const pageStride = g.stride * effectiveSlidesPerMove;
|
|
838
|
-
const target = flingTarget(
|
|
839
|
-
offsetRef.current,
|
|
840
|
-
drag.velocity,
|
|
841
|
-
FLING_DECEL_MS,
|
|
842
|
-
pageStride,
|
|
843
|
-
);
|
|
844
|
-
glideTo(target, false, g);
|
|
845
|
-
dragHandledPositionRef.current = true;
|
|
846
|
-
const index =
|
|
847
|
-
((Math.round(target / g.stride) % g.count) + g.count) % g.count;
|
|
848
|
-
goTo(pageForSlideIndex(index));
|
|
849
|
-
},
|
|
850
|
-
[glideTo, goTo, pageForSlideIndex, effectiveSlidesPerMove, flushDragFrame],
|
|
851
|
-
);
|
|
852
|
-
|
|
853
|
-
const dragHandlers = isInfinite
|
|
854
|
-
? {
|
|
855
|
-
onPointerDown,
|
|
856
|
-
onPointerMove,
|
|
857
|
-
onPointerUp,
|
|
858
|
-
onPointerCancel: onPointerUp,
|
|
859
|
-
}
|
|
860
|
-
: null;
|
|
861
|
-
|
|
862
|
-
return {
|
|
863
|
-
trackRef: trackCallbackRef,
|
|
864
|
-
headCloneRef: headCallbackRef,
|
|
865
|
-
tailCloneRef: tailCallbackRef,
|
|
866
|
-
isInfinite,
|
|
867
|
-
dragHandlers,
|
|
868
|
-
};
|
|
869
|
-
}
|