reka-ui 2.9.9 → 2.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AlertDialog/AlertDialogContent.cjs +2 -1
- package/dist/AlertDialog/AlertDialogContent.cjs.map +1 -1
- package/dist/AlertDialog/AlertDialogContent.js +2 -1
- package/dist/AlertDialog/AlertDialogContent.js.map +1 -1
- package/dist/AlertDialog/AlertDialogRoot.cjs +4 -0
- package/dist/AlertDialog/AlertDialogRoot.cjs.map +1 -1
- package/dist/AlertDialog/AlertDialogRoot.js +4 -0
- package/dist/AlertDialog/AlertDialogRoot.js.map +1 -1
- package/dist/Checkbox/CheckboxRoot.cjs +27 -18
- package/dist/Checkbox/CheckboxRoot.cjs.map +1 -1
- package/dist/Checkbox/CheckboxRoot.js +28 -19
- package/dist/Checkbox/CheckboxRoot.js.map +1 -1
- package/dist/Collection/Collection.cjs +2 -1
- package/dist/Collection/Collection.cjs.map +1 -1
- package/dist/Collection/Collection.js +2 -1
- package/dist/Collection/Collection.js.map +1 -1
- package/dist/Combobox/ComboboxContent.cjs +8 -0
- package/dist/Combobox/ComboboxContent.cjs.map +1 -1
- package/dist/Combobox/ComboboxContent.js +8 -0
- package/dist/Combobox/ComboboxContent.js.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.cjs +18 -2
- package/dist/Combobox/ComboboxContentImpl.cjs.map +1 -1
- package/dist/Combobox/ComboboxContentImpl.js +18 -2
- package/dist/Combobox/ComboboxContentImpl.js.map +1 -1
- package/dist/Combobox/ComboboxItem.cjs +11 -2
- package/dist/Combobox/ComboboxItem.cjs.map +1 -1
- package/dist/Combobox/ComboboxItem.js +12 -3
- package/dist/Combobox/ComboboxItem.js.map +1 -1
- package/dist/ConfigProvider/ConfigProvider.cjs +7 -1
- package/dist/ConfigProvider/ConfigProvider.cjs.map +1 -1
- package/dist/ConfigProvider/ConfigProvider.js +7 -1
- package/dist/ConfigProvider/ConfigProvider.js.map +1 -1
- package/dist/ContextMenu/ContextMenuContent.cjs +4 -0
- package/dist/ContextMenu/ContextMenuContent.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuContent.js +4 -0
- package/dist/ContextMenu/ContextMenuContent.js.map +1 -1
- package/dist/ContextMenu/ContextMenuSubContent.cjs +4 -0
- package/dist/ContextMenu/ContextMenuSubContent.cjs.map +1 -1
- package/dist/ContextMenu/ContextMenuSubContent.js +4 -0
- package/dist/ContextMenu/ContextMenuSubContent.js.map +1 -1
- package/dist/DateField/DateFieldInput.cjs +3 -1
- package/dist/DateField/DateFieldInput.cjs.map +1 -1
- package/dist/DateField/DateFieldInput.js +3 -1
- package/dist/DateField/DateFieldInput.js.map +1 -1
- package/dist/DateField/DateFieldRoot.cjs +7 -1
- package/dist/DateField/DateFieldRoot.cjs.map +1 -1
- package/dist/DateField/DateFieldRoot.js +7 -1
- package/dist/DateField/DateFieldRoot.js.map +1 -1
- package/dist/DatePicker/DatePickerContent.cjs +8 -0
- package/dist/DatePicker/DatePickerContent.cjs.map +1 -1
- package/dist/DatePicker/DatePickerContent.js +8 -0
- package/dist/DatePicker/DatePickerContent.js.map +1 -1
- package/dist/DatePicker/DatePickerRoot.cjs +4 -0
- package/dist/DatePicker/DatePickerRoot.cjs.map +1 -1
- package/dist/DatePicker/DatePickerRoot.js +4 -0
- package/dist/DatePicker/DatePickerRoot.js.map +1 -1
- package/dist/DateRangePicker/DateRangePickerContent.cjs +8 -0
- package/dist/DateRangePicker/DateRangePickerContent.cjs.map +1 -1
- package/dist/DateRangePicker/DateRangePickerContent.js +8 -0
- package/dist/DateRangePicker/DateRangePickerContent.js.map +1 -1
- package/dist/Dialog/DialogContent.cjs +16 -10
- package/dist/Dialog/DialogContent.cjs.map +1 -1
- package/dist/Dialog/DialogContent.js +17 -11
- package/dist/Dialog/DialogContent.js.map +1 -1
- package/dist/Dialog/DialogContentImpl.cjs +8 -1
- package/dist/Dialog/DialogContentImpl.cjs.map +1 -1
- package/dist/Dialog/DialogContentImpl.js +8 -1
- package/dist/Dialog/DialogContentImpl.js.map +1 -1
- package/dist/Dialog/DialogContentModal.cjs +23 -5
- package/dist/Dialog/DialogContentModal.cjs.map +1 -1
- package/dist/Dialog/DialogContentModal.js +24 -6
- package/dist/Dialog/DialogContentModal.js.map +1 -1
- package/dist/Dialog/DialogContentNonModal.cjs +18 -2
- package/dist/Dialog/DialogContentNonModal.cjs.map +1 -1
- package/dist/Dialog/DialogContentNonModal.js +19 -3
- package/dist/Dialog/DialogContentNonModal.js.map +1 -1
- package/dist/Dialog/DialogOverlay.cjs +12 -6
- package/dist/Dialog/DialogOverlay.cjs.map +1 -1
- package/dist/Dialog/DialogOverlay.js +13 -7
- package/dist/Dialog/DialogOverlay.js.map +1 -1
- package/dist/Dialog/DialogOverlayImpl.cjs +8 -1
- package/dist/Dialog/DialogOverlayImpl.cjs.map +1 -1
- package/dist/Dialog/DialogOverlayImpl.js +9 -2
- package/dist/Dialog/DialogOverlayImpl.js.map +1 -1
- package/dist/Dialog/DialogRoot.cjs +7 -1
- package/dist/Dialog/DialogRoot.cjs.map +1 -1
- package/dist/Dialog/DialogRoot.js +7 -1
- package/dist/Dialog/DialogRoot.js.map +1 -1
- package/dist/DismissableLayer/DismissableLayer.cjs +27 -10
- package/dist/DismissableLayer/DismissableLayer.cjs.map +1 -1
- package/dist/DismissableLayer/DismissableLayer.js +28 -11
- package/dist/DismissableLayer/DismissableLayer.js.map +1 -1
- package/dist/Drawer/DrawerClose.cjs +48 -0
- package/dist/Drawer/DrawerClose.cjs.map +1 -0
- package/dist/Drawer/DrawerClose.js +42 -0
- package/dist/Drawer/DrawerClose.js.map +1 -0
- package/dist/Drawer/DrawerContent.cjs +139 -0
- package/dist/Drawer/DrawerContent.cjs.map +1 -0
- package/dist/Drawer/DrawerContent.js +133 -0
- package/dist/Drawer/DrawerContent.js.map +1 -0
- package/dist/Drawer/DrawerContentImpl.cjs +298 -0
- package/dist/Drawer/DrawerContentImpl.cjs.map +1 -0
- package/dist/Drawer/DrawerContentImpl.js +292 -0
- package/dist/Drawer/DrawerContentImpl.js.map +1 -0
- package/dist/Drawer/DrawerDescription.cjs +45 -0
- package/dist/Drawer/DrawerDescription.cjs.map +1 -0
- package/dist/Drawer/DrawerDescription.js +39 -0
- package/dist/Drawer/DrawerDescription.js.map +1 -0
- package/dist/Drawer/DrawerHandle.cjs +48 -0
- package/dist/Drawer/DrawerHandle.cjs.map +1 -0
- package/dist/Drawer/DrawerHandle.js +42 -0
- package/dist/Drawer/DrawerHandle.js.map +1 -0
- package/dist/Drawer/DrawerIndent.cjs +78 -0
- package/dist/Drawer/DrawerIndent.cjs.map +1 -0
- package/dist/Drawer/DrawerIndent.js +72 -0
- package/dist/Drawer/DrawerIndent.js.map +1 -0
- package/dist/Drawer/DrawerIndentBackground.cjs +49 -0
- package/dist/Drawer/DrawerIndentBackground.cjs.map +1 -0
- package/dist/Drawer/DrawerIndentBackground.js +43 -0
- package/dist/Drawer/DrawerIndentBackground.js.map +1 -0
- package/dist/Drawer/DrawerOverlay.cjs +66 -0
- package/dist/Drawer/DrawerOverlay.cjs.map +1 -0
- package/dist/Drawer/DrawerOverlay.js +60 -0
- package/dist/Drawer/DrawerOverlay.js.map +1 -0
- package/dist/Drawer/DrawerOverlayImpl.cjs +69 -0
- package/dist/Drawer/DrawerOverlayImpl.cjs.map +1 -0
- package/dist/Drawer/DrawerOverlayImpl.js +63 -0
- package/dist/Drawer/DrawerOverlayImpl.js.map +1 -0
- package/dist/Drawer/DrawerPortal.cjs +47 -0
- package/dist/Drawer/DrawerPortal.cjs.map +1 -0
- package/dist/Drawer/DrawerPortal.js +41 -0
- package/dist/Drawer/DrawerPortal.js.map +1 -0
- package/dist/Drawer/DrawerProvider.cjs +80 -0
- package/dist/Drawer/DrawerProvider.cjs.map +1 -0
- package/dist/Drawer/DrawerProvider.js +68 -0
- package/dist/Drawer/DrawerProvider.js.map +1 -0
- package/dist/Drawer/DrawerRoot.cjs +197 -0
- package/dist/Drawer/DrawerRoot.cjs.map +1 -0
- package/dist/Drawer/DrawerRoot.js +185 -0
- package/dist/Drawer/DrawerRoot.js.map +1 -0
- package/dist/Drawer/DrawerSwipeArea.cjs +87 -0
- package/dist/Drawer/DrawerSwipeArea.cjs.map +1 -0
- package/dist/Drawer/DrawerSwipeArea.js +81 -0
- package/dist/Drawer/DrawerSwipeArea.js.map +1 -0
- package/dist/Drawer/DrawerTitle.cjs +45 -0
- package/dist/Drawer/DrawerTitle.cjs.map +1 -0
- package/dist/Drawer/DrawerTitle.js +39 -0
- package/dist/Drawer/DrawerTitle.js.map +1 -0
- package/dist/Drawer/DrawerTrigger.cjs +64 -0
- package/dist/Drawer/DrawerTrigger.cjs.map +1 -0
- package/dist/Drawer/DrawerTrigger.js +58 -0
- package/dist/Drawer/DrawerTrigger.js.map +1 -0
- package/dist/Drawer/DrawerViewport.cjs +49 -0
- package/dist/Drawer/DrawerViewport.cjs.map +1 -0
- package/dist/Drawer/DrawerViewport.js +43 -0
- package/dist/Drawer/DrawerViewport.js.map +1 -0
- package/dist/Drawer/utils.cjs +185 -0
- package/dist/Drawer/utils.cjs.map +1 -0
- package/dist/Drawer/utils.js +149 -0
- package/dist/Drawer/utils.js.map +1 -0
- package/dist/DropdownMenu/DropdownMenuContent.cjs +4 -0
- package/dist/DropdownMenu/DropdownMenuContent.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuContent.js +4 -0
- package/dist/DropdownMenu/DropdownMenuContent.js.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubContent.cjs +4 -0
- package/dist/DropdownMenu/DropdownMenuSubContent.cjs.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubContent.js +4 -0
- package/dist/DropdownMenu/DropdownMenuSubContent.js.map +1 -1
- package/dist/FocusScope/FocusScope.cjs +31 -11
- package/dist/FocusScope/FocusScope.cjs.map +1 -1
- package/dist/FocusScope/FocusScope.js +32 -12
- package/dist/FocusScope/FocusScope.js.map +1 -1
- package/dist/HoverCard/HoverCardContent.cjs +8 -0
- package/dist/HoverCard/HoverCardContent.cjs.map +1 -1
- package/dist/HoverCard/HoverCardContent.js +8 -0
- package/dist/HoverCard/HoverCardContent.js.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.cjs +8 -0
- package/dist/HoverCard/HoverCardContentImpl.cjs.map +1 -1
- package/dist/HoverCard/HoverCardContentImpl.js +8 -0
- package/dist/HoverCard/HoverCardContentImpl.js.map +1 -1
- package/dist/HoverCard/HoverCardRoot.cjs +9 -2
- package/dist/HoverCard/HoverCardRoot.cjs.map +1 -1
- package/dist/HoverCard/HoverCardRoot.js +9 -2
- package/dist/HoverCard/HoverCardRoot.js.map +1 -1
- package/dist/HoverCard/HoverCardTrigger.cjs +6 -0
- package/dist/HoverCard/HoverCardTrigger.cjs.map +1 -1
- package/dist/HoverCard/HoverCardTrigger.js +6 -0
- package/dist/HoverCard/HoverCardTrigger.js.map +1 -1
- package/dist/Listbox/ListboxRoot.cjs +4 -1
- package/dist/Listbox/ListboxRoot.cjs.map +1 -1
- package/dist/Listbox/ListboxRoot.js +4 -1
- package/dist/Listbox/ListboxRoot.js.map +1 -1
- package/dist/Listbox/ListboxVirtualizer.cjs +7 -3
- package/dist/Listbox/ListboxVirtualizer.cjs.map +1 -1
- package/dist/Listbox/ListboxVirtualizer.js +7 -3
- package/dist/Listbox/ListboxVirtualizer.js.map +1 -1
- package/dist/Menu/MenuContent.cjs +4 -0
- package/dist/Menu/MenuContent.cjs.map +1 -1
- package/dist/Menu/MenuContent.js +4 -0
- package/dist/Menu/MenuContent.js.map +1 -1
- package/dist/Menu/MenuContentImpl.cjs +4 -0
- package/dist/Menu/MenuContentImpl.cjs.map +1 -1
- package/dist/Menu/MenuContentImpl.js +4 -0
- package/dist/Menu/MenuContentImpl.js.map +1 -1
- package/dist/Menu/MenuRootContentModal.cjs +4 -0
- package/dist/Menu/MenuRootContentModal.cjs.map +1 -1
- package/dist/Menu/MenuRootContentModal.js +4 -0
- package/dist/Menu/MenuRootContentModal.js.map +1 -1
- package/dist/Menu/MenuRootContentNonModal.cjs +4 -0
- package/dist/Menu/MenuRootContentNonModal.cjs.map +1 -1
- package/dist/Menu/MenuRootContentNonModal.js +4 -0
- package/dist/Menu/MenuRootContentNonModal.js.map +1 -1
- package/dist/Menu/MenuSubContent.cjs +4 -0
- package/dist/Menu/MenuSubContent.cjs.map +1 -1
- package/dist/Menu/MenuSubContent.js +4 -0
- package/dist/Menu/MenuSubContent.js.map +1 -1
- package/dist/Menubar/MenubarContent.cjs +4 -0
- package/dist/Menubar/MenubarContent.cjs.map +1 -1
- package/dist/Menubar/MenubarContent.js +4 -0
- package/dist/Menubar/MenubarContent.js.map +1 -1
- package/dist/Menubar/MenubarSubContent.cjs +4 -0
- package/dist/Menubar/MenubarSubContent.cjs.map +1 -1
- package/dist/Menubar/MenubarSubContent.js +4 -0
- package/dist/Menubar/MenubarSubContent.js.map +1 -1
- package/dist/Popover/PopoverContent.cjs +8 -0
- package/dist/Popover/PopoverContent.cjs.map +1 -1
- package/dist/Popover/PopoverContent.js +8 -0
- package/dist/Popover/PopoverContent.js.map +1 -1
- package/dist/Popover/PopoverContentImpl.cjs +8 -0
- package/dist/Popover/PopoverContentImpl.cjs.map +1 -1
- package/dist/Popover/PopoverContentImpl.js +8 -0
- package/dist/Popover/PopoverContentImpl.js.map +1 -1
- package/dist/Popover/PopoverContentModal.cjs +8 -0
- package/dist/Popover/PopoverContentModal.cjs.map +1 -1
- package/dist/Popover/PopoverContentModal.js +8 -0
- package/dist/Popover/PopoverContentModal.js.map +1 -1
- package/dist/Popover/PopoverContentNonModal.cjs +8 -0
- package/dist/Popover/PopoverContentNonModal.cjs.map +1 -1
- package/dist/Popover/PopoverContentNonModal.js +8 -0
- package/dist/Popover/PopoverContentNonModal.js.map +1 -1
- package/dist/Popper/PopperContent.cjs +49 -6
- package/dist/Popper/PopperContent.cjs.map +1 -1
- package/dist/Popper/PopperContent.js +50 -7
- package/dist/Popper/PopperContent.js.map +1 -1
- package/dist/Popper/utils.cjs +10 -5
- package/dist/Popper/utils.cjs.map +1 -1
- package/dist/Popper/utils.js +10 -5
- package/dist/Popper/utils.js.map +1 -1
- package/dist/RadioGroup/Radio.cjs +27 -22
- package/dist/RadioGroup/Radio.cjs.map +1 -1
- package/dist/RadioGroup/Radio.js +28 -23
- package/dist/RadioGroup/Radio.js.map +1 -1
- package/dist/Rating/RatingItem.cjs +66 -0
- package/dist/Rating/RatingItem.cjs.map +1 -0
- package/dist/Rating/RatingItem.js +54 -0
- package/dist/Rating/RatingItem.js.map +1 -0
- package/dist/Rating/RatingItemIndicator.cjs +89 -0
- package/dist/Rating/RatingItemIndicator.cjs.map +1 -0
- package/dist/Rating/RatingItemIndicator.js +83 -0
- package/dist/Rating/RatingItemIndicator.js.map +1 -0
- package/dist/Rating/RatingRoot.cjs +136 -0
- package/dist/Rating/RatingRoot.cjs.map +1 -0
- package/dist/Rating/RatingRoot.js +124 -0
- package/dist/Rating/RatingRoot.js.map +1 -0
- package/dist/RovingFocus/RovingFocusItem.cjs +5 -0
- package/dist/RovingFocus/RovingFocusItem.cjs.map +1 -1
- package/dist/RovingFocus/RovingFocusItem.js +6 -1
- package/dist/RovingFocus/RovingFocusItem.js.map +1 -1
- package/dist/Select/SelectContent.cjs +8 -0
- package/dist/Select/SelectContent.cjs.map +1 -1
- package/dist/Select/SelectContent.js +8 -0
- package/dist/Select/SelectContent.js.map +1 -1
- package/dist/Select/SelectContentImpl.cjs +8 -0
- package/dist/Select/SelectContentImpl.cjs.map +1 -1
- package/dist/Select/SelectContentImpl.js +8 -0
- package/dist/Select/SelectContentImpl.js.map +1 -1
- package/dist/Select/SelectPopperPosition.cjs +8 -0
- package/dist/Select/SelectPopperPosition.cjs.map +1 -1
- package/dist/Select/SelectPopperPosition.js +8 -0
- package/dist/Select/SelectPopperPosition.js.map +1 -1
- package/dist/Select/SelectRoot.cjs +10 -5
- package/dist/Select/SelectRoot.cjs.map +1 -1
- package/dist/Select/SelectRoot.js +10 -5
- package/dist/Select/SelectRoot.js.map +1 -1
- package/dist/Select/SelectTrigger.cjs +25 -14
- package/dist/Select/SelectTrigger.cjs.map +1 -1
- package/dist/Select/SelectTrigger.js +25 -14
- package/dist/Select/SelectTrigger.js.map +1 -1
- package/dist/Switch/SwitchRoot.cjs +25 -18
- package/dist/Switch/SwitchRoot.cjs.map +1 -1
- package/dist/Switch/SwitchRoot.js +26 -19
- package/dist/Switch/SwitchRoot.js.map +1 -1
- package/dist/Tabs/TabsIndicator.cjs +4 -0
- package/dist/Tabs/TabsIndicator.cjs.map +1 -1
- package/dist/Tabs/TabsIndicator.js +4 -0
- package/dist/Tabs/TabsIndicator.js.map +1 -1
- package/dist/Teleport/Teleport.cjs +6 -3
- package/dist/Teleport/Teleport.cjs.map +1 -1
- package/dist/Teleport/Teleport.js +7 -4
- package/dist/Teleport/Teleport.js.map +1 -1
- package/dist/Toggle/Toggle.cjs +21 -16
- package/dist/Toggle/Toggle.cjs.map +1 -1
- package/dist/Toggle/Toggle.js +22 -17
- package/dist/Toggle/Toggle.js.map +1 -1
- package/dist/Toolbar/ToolbarToggleItem.cjs +5 -2
- package/dist/Toolbar/ToolbarToggleItem.cjs.map +1 -1
- package/dist/Toolbar/ToolbarToggleItem.js +5 -2
- package/dist/Toolbar/ToolbarToggleItem.js.map +1 -1
- package/dist/Tree/TreeItem.cjs +18 -2
- package/dist/Tree/TreeItem.cjs.map +1 -1
- package/dist/Tree/TreeItem.js +18 -2
- package/dist/Tree/TreeItem.js.map +1 -1
- package/dist/Tree/TreeVirtualizer.cjs +2 -1
- package/dist/Tree/TreeVirtualizer.cjs.map +1 -1
- package/dist/Tree/TreeVirtualizer.js +2 -1
- package/dist/Tree/TreeVirtualizer.js.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.cjs +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.cjs.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js.map +1 -1
- package/dist/composables/useDrawerSnapPoints.cjs +130 -0
- package/dist/composables/useDrawerSnapPoints.cjs.map +1 -0
- package/dist/composables/useDrawerSnapPoints.js +124 -0
- package/dist/composables/useDrawerSnapPoints.js.map +1 -0
- package/dist/composables/useSwipeDismiss.cjs +397 -0
- package/dist/composables/useSwipeDismiss.cjs.map +1 -0
- package/dist/composables/useSwipeDismiss.js +391 -0
- package/dist/composables/useSwipeDismiss.js.map +1 -0
- package/dist/constant/components.cjs +20 -0
- package/dist/constant/components.cjs.map +1 -1
- package/dist/constant/components.js +20 -0
- package/dist/constant/components.js.map +1 -1
- package/dist/constant.d.cts +2 -0
- package/dist/constant.d.cts.map +1 -1
- package/dist/constant.d.ts +2 -0
- package/dist/constant.d.ts.map +1 -1
- package/dist/date/utils.cjs +1 -1
- package/dist/date/utils.cjs.map +1 -1
- package/dist/date/utils.js +1 -1
- package/dist/date/utils.js.map +1 -1
- package/dist/index.cjs +45 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +24 -2
- package/dist/index2.d.cts.map +1 -1
- package/dist/index3.d.cts +68 -29
- package/dist/index3.d.cts.map +1 -1
- package/dist/index3.d.ts +68 -29
- package/dist/index3.d.ts.map +1 -1
- package/dist/index4.d.cts +1648 -1190
- package/dist/index4.d.cts.map +1 -1
- package/dist/index4.d.ts +1660 -1202
- package/dist/index4.d.ts.map +1 -1
- package/dist/internal.cjs +1 -1
- package/dist/internal.d.cts +3 -3
- package/dist/internal.d.ts +3 -3
- package/dist/internal.js +1 -1
- package/dist/namespaced/index.cjs +22 -0
- package/dist/namespaced/index.d.cts +22 -2
- package/dist/namespaced/index.d.mts +22 -2
- package/dist/namespaced/index.mjs +22 -2
- package/dist/nuxt/index.d.cts +2 -1
- package/dist/nuxt/index.d.mts +2 -1
- package/dist/resolver/index.d.cts +2 -1
- package/dist/resolver/index.d.mts +2 -1
- package/dist/shared/useEmitAsProps.cjs +5 -0
- package/dist/shared/useEmitAsProps.cjs.map +1 -1
- package/dist/shared/useEmitAsProps.js +5 -0
- package/dist/shared/useEmitAsProps.js.map +1 -1
- package/dist/shared/useForwardPropsEmits.cjs +0 -12
- package/dist/shared/useForwardPropsEmits.cjs.map +1 -1
- package/dist/shared/useForwardPropsEmits.js +0 -12
- package/dist/shared/useForwardPropsEmits.js.map +1 -1
- package/dist/shared/useForwardScopeId.cjs +34 -0
- package/dist/shared/useForwardScopeId.cjs.map +1 -0
- package/dist/shared/useForwardScopeId.js +28 -0
- package/dist/shared/useForwardScopeId.js.map +1 -0
- package/dist/shared/useId.cjs +7 -8
- package/dist/shared/useId.cjs.map +1 -1
- package/dist/shared/useId.js +7 -8
- package/dist/shared/useId.js.map +1 -1
- package/dist/shared/useSize.cjs +6 -2
- package/dist/shared/useSize.cjs.map +1 -1
- package/dist/shared/useSize.js +7 -3
- package/dist/shared/useSize.js.map +1 -1
- package/dist/shared.cjs +2 -2
- package/dist/shared.d.cts +2 -2
- package/dist/shared.d.ts +2 -2
- package/dist/shared.js +2 -2
- package/dist/utils/style.cjs +1 -1
- package/dist/utils/style.cjs.map +1 -1
- package/dist/utils/style.js +1 -1
- package/dist/utils/style.js.map +1 -1
- package/package.json +7 -5
- package/src/AlertDialog/AlertDialogContent.vue +6 -1
- package/src/Checkbox/CheckboxRoot.vue +28 -16
- package/src/Collection/Collection.ts +2 -1
- package/src/Combobox/ComboboxContentImpl.vue +20 -4
- package/src/Combobox/ComboboxItem.vue +1 -0
- package/src/ConfigProvider/ConfigProvider.vue +11 -1
- package/src/DateField/DateFieldInput.vue +6 -1
- package/src/DateField/DateFieldRoot.vue +6 -1
- package/src/Dialog/DialogContent.vue +16 -2
- package/src/Dialog/DialogContentImpl.vue +9 -2
- package/src/Dialog/DialogContentModal.vue +23 -4
- package/src/Dialog/DialogContentNonModal.vue +21 -3
- package/src/Dialog/DialogOverlay.vue +4 -0
- package/src/Dialog/DialogOverlayImpl.vue +7 -2
- package/src/Dialog/DialogRoot.vue +10 -1
- package/src/DismissableLayer/DismissableLayer.vue +75 -23
- package/src/Drawer/DrawerClose.vue +25 -0
- package/src/Drawer/DrawerContent.vue +98 -0
- package/src/Drawer/DrawerContentImpl.vue +386 -0
- package/src/Drawer/DrawerDescription.vue +24 -0
- package/src/Drawer/DrawerHandle.vue +25 -0
- package/src/Drawer/DrawerIndent.vue +61 -0
- package/src/Drawer/DrawerIndentBackground.vue +26 -0
- package/src/Drawer/DrawerOverlay.vue +42 -0
- package/src/Drawer/DrawerOverlayImpl.vue +54 -0
- package/src/Drawer/DrawerPortal.vue +17 -0
- package/src/Drawer/DrawerProvider.vue +87 -0
- package/src/Drawer/DrawerRoot.vue +244 -0
- package/src/Drawer/DrawerSwipeArea.vue +73 -0
- package/src/Drawer/DrawerTitle.vue +24 -0
- package/src/Drawer/DrawerTrigger.vue +44 -0
- package/src/Drawer/DrawerViewport.vue +34 -0
- package/src/Drawer/composables/useDrawerSnapPoints.ts +200 -0
- package/src/Drawer/composables/useSwipeDismiss.ts +557 -0
- package/src/Drawer/index.ts +74 -0
- package/src/Drawer/utils.ts +205 -0
- package/src/FocusScope/FocusScope.vue +76 -19
- package/src/HoverCard/HoverCardRoot.vue +7 -1
- package/src/HoverCard/HoverCardTrigger.vue +11 -0
- package/src/Listbox/ListboxRoot.vue +7 -4
- package/src/Listbox/ListboxVirtualizer.vue +19 -3
- package/src/Popper/PopperContent.vue +45 -4
- package/src/Popper/utils.ts +17 -7
- package/src/RadioGroup/Radio.vue +22 -14
- package/src/Rating/RatingItem.vue +1 -0
- package/src/Rating/RatingItemIndicator.vue +3 -2
- package/src/Rating/RatingRoot.vue +6 -3
- package/src/Rating/index.ts +3 -3
- package/src/RovingFocus/RovingFocusItem.vue +12 -1
- package/src/Select/SelectRoot.vue +4 -1
- package/src/Select/SelectTrigger.vue +49 -33
- package/src/Splitter/utils/style.ts +1 -1
- package/src/Switch/SwitchRoot.vue +20 -12
- package/src/Tabs/TabsIndicator.vue +5 -0
- package/src/Teleport/Teleport.vue +8 -4
- package/src/Toggle/Toggle.vue +18 -9
- package/src/Toolbar/ToolbarToggleItem.vue +4 -1
- package/src/Tree/TreeItem.vue +18 -0
- package/src/Tree/TreeRoot.vue +2 -2
- package/src/Tree/TreeVirtualizer.vue +3 -1
- package/src/VisuallyHidden/VisuallyHidden.vue +1 -1
- package/src/index.ts +2 -0
- package/src/shared/date/utils.ts +1 -1
- package/src/shared/index.ts +2 -2
- package/src/shared/useEmitAsProps.test-d.ts +77 -0
- package/src/shared/useEmitAsProps.ts +83 -4
- package/src/shared/useForwardProps.ts +1 -1
- package/src/shared/useForwardPropsEmits.ts +17 -2
- package/src/shared/useForwardScopeId.ts +26 -0
- package/src/shared/useId.ts +14 -6
- package/src/shared/useSize.ts +9 -4
- package/dist/shared/trap-focus.cjs +0 -35
- package/dist/shared/trap-focus.cjs.map +0 -1
- package/dist/shared/trap-focus.js +0 -30
- package/dist/shared/trap-focus.js.map +0 -1
- package/src/shared/trap-focus.ts +0 -43
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { createContext } from '@/shared'
|
|
3
|
+
|
|
4
|
+
export interface DrawerVisualState {
|
|
5
|
+
swipeProgress: number
|
|
6
|
+
frontmostHeight: number
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface DrawerVisualStateStore {
|
|
10
|
+
getSnapshot: () => DrawerVisualState
|
|
11
|
+
set: (next: Partial<DrawerVisualState>) => void
|
|
12
|
+
subscribe: (listener: () => void) => () => void
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface DrawerProviderContext {
|
|
16
|
+
active: import('vue').Ref<boolean>
|
|
17
|
+
setDrawerOpen: (id: string, open: boolean) => void
|
|
18
|
+
removeDrawer: (id: string) => void
|
|
19
|
+
visualStateStore: DrawerVisualStateStore
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const [injectDrawerProviderContext, provideDrawerProviderContext]
|
|
23
|
+
= createContext<DrawerProviderContext>('DrawerProvider')
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<script setup lang="ts">
|
|
27
|
+
import { computed, ref } from 'vue'
|
|
28
|
+
|
|
29
|
+
function createVisualStateStore(): DrawerVisualStateStore {
|
|
30
|
+
let state: DrawerVisualState = { swipeProgress: 0, frontmostHeight: 0 }
|
|
31
|
+
const listeners = new Set<() => void>()
|
|
32
|
+
return {
|
|
33
|
+
getSnapshot: () => state,
|
|
34
|
+
set(next) {
|
|
35
|
+
const nextProgress = next.swipeProgress !== undefined
|
|
36
|
+
? (Number.isFinite(next.swipeProgress) ? next.swipeProgress : 0)
|
|
37
|
+
: state.swipeProgress
|
|
38
|
+
const nextHeight = next.frontmostHeight !== undefined
|
|
39
|
+
? (Number.isFinite(next.frontmostHeight) ? next.frontmostHeight : 0)
|
|
40
|
+
: state.frontmostHeight
|
|
41
|
+
if (nextProgress === state.swipeProgress && nextHeight === state.frontmostHeight)
|
|
42
|
+
return
|
|
43
|
+
state = { swipeProgress: nextProgress, frontmostHeight: nextHeight }
|
|
44
|
+
listeners.forEach(l => l())
|
|
45
|
+
},
|
|
46
|
+
subscribe(listener) {
|
|
47
|
+
listeners.add(listener)
|
|
48
|
+
return () => listeners.delete(listener)
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const openById = ref(new Map<string, boolean>())
|
|
54
|
+
const visualStateStore = createVisualStateStore()
|
|
55
|
+
|
|
56
|
+
const active = computed(() => {
|
|
57
|
+
for (const open of openById.value.values()) {
|
|
58
|
+
if (open)
|
|
59
|
+
return true
|
|
60
|
+
}
|
|
61
|
+
return false
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
provideDrawerProviderContext({
|
|
65
|
+
active,
|
|
66
|
+
setDrawerOpen(id, open) {
|
|
67
|
+
const prev = openById.value.get(id)
|
|
68
|
+
if (prev === open)
|
|
69
|
+
return
|
|
70
|
+
const next = new Map(openById.value)
|
|
71
|
+
next.set(id, open)
|
|
72
|
+
openById.value = next
|
|
73
|
+
},
|
|
74
|
+
removeDrawer(id) {
|
|
75
|
+
if (!openById.value.has(id))
|
|
76
|
+
return
|
|
77
|
+
const next = new Map(openById.value)
|
|
78
|
+
next.delete(id)
|
|
79
|
+
openById.value = next
|
|
80
|
+
},
|
|
81
|
+
visualStateStore,
|
|
82
|
+
})
|
|
83
|
+
</script>
|
|
84
|
+
|
|
85
|
+
<template>
|
|
86
|
+
<slot />
|
|
87
|
+
</template>
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Ref } from 'vue'
|
|
3
|
+
import type {
|
|
4
|
+
DrawerSnapPoint,
|
|
5
|
+
NestedSwipeProgressStore,
|
|
6
|
+
SwipeDirection,
|
|
7
|
+
} from './utils'
|
|
8
|
+
import { createContext, useId } from '@/shared'
|
|
9
|
+
|
|
10
|
+
export type DrawerModal = boolean | 'trap-focus'
|
|
11
|
+
|
|
12
|
+
export type DrawerOpenChangeReason
|
|
13
|
+
= | 'swipe'
|
|
14
|
+
| 'escape-key'
|
|
15
|
+
| 'outside-press'
|
|
16
|
+
| 'click'
|
|
17
|
+
| 'cancel'
|
|
18
|
+
| 'trigger-press'
|
|
19
|
+
| 'close-press'
|
|
20
|
+
|
|
21
|
+
export interface DrawerOpenChangeDetails {
|
|
22
|
+
reason?: DrawerOpenChangeReason
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface DrawerRootProps {
|
|
26
|
+
/** v-model:open */
|
|
27
|
+
open?: boolean
|
|
28
|
+
defaultOpen?: boolean
|
|
29
|
+
/**
|
|
30
|
+
* Modality of the drawer.
|
|
31
|
+
* - `true` (default): modal with focus trap, scroll lock, and outside-press dismiss
|
|
32
|
+
* - `'trap-focus'`: traps focus but allows outside pointer events (non-modal side panels)
|
|
33
|
+
* - `false`: non-modal
|
|
34
|
+
*/
|
|
35
|
+
modal?: DrawerModal
|
|
36
|
+
/** Direction to swipe to dismiss. @default 'down' */
|
|
37
|
+
swipeDirection?: SwipeDirection
|
|
38
|
+
/** Preset snap positions (fractions 0-1, pixels >1, or '148px'/'30rem' strings) */
|
|
39
|
+
snapPoints?: DrawerSnapPoint[]
|
|
40
|
+
/** v-model:snapPoint */
|
|
41
|
+
snapPoint?: DrawerSnapPoint | null
|
|
42
|
+
defaultSnapPoint?: DrawerSnapPoint | null
|
|
43
|
+
/**
|
|
44
|
+
* When true, snaps to the next sequential snap point (one step at a time).
|
|
45
|
+
* When false, snaps to the nearest snap point by distance.
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
snapToSequentialPoints?: boolean
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type DrawerRootEmits = {
|
|
52
|
+
'update:open': [value: boolean, details?: DrawerOpenChangeDetails]
|
|
53
|
+
'update:openComplete': [value: boolean]
|
|
54
|
+
'update:snapPoint': [value: DrawerSnapPoint | null]
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface DrawerRootContext {
|
|
58
|
+
open: Readonly<Ref<boolean>>
|
|
59
|
+
modal: Ref<DrawerModal>
|
|
60
|
+
swipeDirection: Ref<SwipeDirection>
|
|
61
|
+
snapPoints: Ref<DrawerSnapPoint[] | undefined>
|
|
62
|
+
activeSnapPoint: Ref<DrawerSnapPoint | null | undefined>
|
|
63
|
+
snapToSequentialPoints: Ref<boolean>
|
|
64
|
+
popupHeight: Ref<number>
|
|
65
|
+
frontmostHeight: Ref<number>
|
|
66
|
+
hasNestedDrawer: Ref<boolean>
|
|
67
|
+
nestedOpenDrawerCount: Ref<number>
|
|
68
|
+
nestedSwiping: Ref<boolean>
|
|
69
|
+
isSwiping: Ref<boolean>
|
|
70
|
+
nestedSwipeProgressStore: NestedSwipeProgressStore
|
|
71
|
+
onOpenChange: (value: boolean, reason?: DrawerOpenChangeReason) => void
|
|
72
|
+
notifyOpenComplete: (value: boolean) => void
|
|
73
|
+
setActiveSnapPoint: (point: DrawerSnapPoint | null) => void
|
|
74
|
+
onPopupHeightChange: (height: number) => void
|
|
75
|
+
onNestedFrontmostHeightChange: (height: number) => void
|
|
76
|
+
onNestedDrawerPresenceChange: (present: boolean) => void
|
|
77
|
+
onNestedSwipingChange: (swiping: boolean) => void
|
|
78
|
+
onNestedSwipeProgressChange: (progress: number) => void
|
|
79
|
+
onSwipingChange: (swiping: boolean) => void
|
|
80
|
+
notifyParentFrontmostHeight?: (height: number) => void
|
|
81
|
+
notifyParentSwipingChange?: (swiping: boolean) => void
|
|
82
|
+
notifyParentSwipeProgressChange?: (progress: number) => void
|
|
83
|
+
notifyParentHasNestedDrawer?: (present: boolean) => void
|
|
84
|
+
triggerElement: Ref<HTMLElement | undefined>
|
|
85
|
+
contentElement: Ref<HTMLElement | undefined>
|
|
86
|
+
contentId: string
|
|
87
|
+
titleId: string
|
|
88
|
+
descriptionId: string
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export const [injectDrawerRootContext, provideDrawerRootContext]
|
|
92
|
+
= createContext<DrawerRootContext>('DrawerRoot')
|
|
93
|
+
</script>
|
|
94
|
+
|
|
95
|
+
<script setup lang="ts">
|
|
96
|
+
import { useVModel } from '@vueuse/core'
|
|
97
|
+
import { computed, onUnmounted, ref, toRefs, watch } from 'vue'
|
|
98
|
+
import { injectDrawerProviderContext } from './DrawerProvider.vue'
|
|
99
|
+
import { createNestedSwipeProgressStore } from './utils'
|
|
100
|
+
|
|
101
|
+
const props = withDefaults(defineProps<DrawerRootProps>(), {
|
|
102
|
+
open: undefined,
|
|
103
|
+
defaultOpen: false,
|
|
104
|
+
modal: true,
|
|
105
|
+
swipeDirection: 'down',
|
|
106
|
+
snapPoints: undefined,
|
|
107
|
+
snapPoint: undefined,
|
|
108
|
+
defaultSnapPoint: undefined,
|
|
109
|
+
snapToSequentialPoints: false,
|
|
110
|
+
})
|
|
111
|
+
const emit = defineEmits<DrawerRootEmits>()
|
|
112
|
+
|
|
113
|
+
defineSlots<{
|
|
114
|
+
default?: (props: { open: boolean, close: () => void }) => any
|
|
115
|
+
}>()
|
|
116
|
+
|
|
117
|
+
// Manual open state management — we need to pass optional details on emit
|
|
118
|
+
const uncontrolledOpen = ref(props.defaultOpen)
|
|
119
|
+
const open = computed<boolean>({
|
|
120
|
+
get: () => props.open ?? uncontrolledOpen.value,
|
|
121
|
+
set: (value) => { uncontrolledOpen.value = value },
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
const activeSnapPoint = useVModel(props, 'snapPoint', emit, {
|
|
125
|
+
defaultValue: props.defaultSnapPoint ?? null,
|
|
126
|
+
passive: (props.snapPoint === undefined) as false,
|
|
127
|
+
eventName: 'update:snapPoint',
|
|
128
|
+
}) as Ref<DrawerSnapPoint | null | undefined>
|
|
129
|
+
|
|
130
|
+
const { modal, swipeDirection, snapPoints, snapToSequentialPoints } = toRefs(props)
|
|
131
|
+
|
|
132
|
+
const triggerElement = ref<HTMLElement>()
|
|
133
|
+
const contentElement = ref<HTMLElement>()
|
|
134
|
+
const popupHeight = ref(0)
|
|
135
|
+
const frontmostHeight = ref(0)
|
|
136
|
+
const hasNestedDrawer = ref(false)
|
|
137
|
+
const nestedOpenDrawerCount = ref(0)
|
|
138
|
+
const nestedSwiping = ref(false)
|
|
139
|
+
const isSwiping = ref(false)
|
|
140
|
+
const nestedSwipeProgressStore = createNestedSwipeProgressStore()
|
|
141
|
+
|
|
142
|
+
// Optional parent context for nested drawer support
|
|
143
|
+
const parentContext = injectDrawerRootContext(null)
|
|
144
|
+
|
|
145
|
+
// Optional provider context for drawer state tracking
|
|
146
|
+
const providerContext = injectDrawerProviderContext(null)
|
|
147
|
+
|
|
148
|
+
const contentId = useId(undefined, 'reka-drawer-content')
|
|
149
|
+
const titleId = useId(undefined, 'reka-drawer-title')
|
|
150
|
+
const descriptionId = useId(undefined, 'reka-drawer-description')
|
|
151
|
+
|
|
152
|
+
provideDrawerRootContext({
|
|
153
|
+
open,
|
|
154
|
+
modal,
|
|
155
|
+
swipeDirection,
|
|
156
|
+
snapPoints,
|
|
157
|
+
activeSnapPoint,
|
|
158
|
+
snapToSequentialPoints,
|
|
159
|
+
popupHeight,
|
|
160
|
+
frontmostHeight,
|
|
161
|
+
hasNestedDrawer,
|
|
162
|
+
nestedOpenDrawerCount,
|
|
163
|
+
nestedSwiping,
|
|
164
|
+
isSwiping,
|
|
165
|
+
nestedSwipeProgressStore,
|
|
166
|
+
onOpenChange(value, reason) {
|
|
167
|
+
if (open.value === value)
|
|
168
|
+
return
|
|
169
|
+
const details: DrawerOpenChangeDetails | undefined = reason ? { reason } : undefined
|
|
170
|
+
uncontrolledOpen.value = value
|
|
171
|
+
emit('update:open', value, details)
|
|
172
|
+
},
|
|
173
|
+
notifyOpenComplete(value) {
|
|
174
|
+
emit('update:openComplete', value)
|
|
175
|
+
},
|
|
176
|
+
setActiveSnapPoint(point) { activeSnapPoint.value = point },
|
|
177
|
+
onPopupHeightChange(h) {
|
|
178
|
+
popupHeight.value = h
|
|
179
|
+
providerContext?.visualStateStore.set({ frontmostHeight: h })
|
|
180
|
+
},
|
|
181
|
+
onNestedFrontmostHeightChange(h) { frontmostHeight.value = h },
|
|
182
|
+
onNestedDrawerPresenceChange(present) {
|
|
183
|
+
if (present)
|
|
184
|
+
nestedOpenDrawerCount.value++
|
|
185
|
+
else
|
|
186
|
+
nestedOpenDrawerCount.value = Math.max(0, nestedOpenDrawerCount.value - 1)
|
|
187
|
+
hasNestedDrawer.value = nestedOpenDrawerCount.value > 0
|
|
188
|
+
parentContext?.notifyParentHasNestedDrawer?.(present)
|
|
189
|
+
},
|
|
190
|
+
onNestedSwipingChange(swiping) {
|
|
191
|
+
nestedSwiping.value = swiping
|
|
192
|
+
parentContext?.notifyParentSwipingChange?.(swiping)
|
|
193
|
+
},
|
|
194
|
+
onNestedSwipeProgressChange(progress) {
|
|
195
|
+
nestedSwipeProgressStore.set(progress)
|
|
196
|
+
parentContext?.notifyParentSwipeProgressChange?.(progress)
|
|
197
|
+
providerContext?.visualStateStore.set({ swipeProgress: progress })
|
|
198
|
+
},
|
|
199
|
+
onSwipingChange(swiping) {
|
|
200
|
+
isSwiping.value = swiping
|
|
201
|
+
},
|
|
202
|
+
notifyParentFrontmostHeight: parentContext?.onNestedFrontmostHeightChange,
|
|
203
|
+
notifyParentSwipingChange: parentContext?.onNestedSwipingChange,
|
|
204
|
+
notifyParentSwipeProgressChange: parentContext?.onNestedSwipeProgressChange,
|
|
205
|
+
notifyParentHasNestedDrawer: parentContext?.onNestedDrawerPresenceChange,
|
|
206
|
+
triggerElement,
|
|
207
|
+
contentElement,
|
|
208
|
+
contentId,
|
|
209
|
+
titleId,
|
|
210
|
+
descriptionId,
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
function handleClose() {
|
|
214
|
+
if (!open.value)
|
|
215
|
+
return
|
|
216
|
+
uncontrolledOpen.value = false
|
|
217
|
+
emit('update:open', false, { reason: 'close-press' })
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Sync open state with DrawerProvider
|
|
221
|
+
watch(open, (isOpen) => {
|
|
222
|
+
if (isOpen) {
|
|
223
|
+
providerContext?.setDrawerOpen(contentId, true)
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
providerContext?.setDrawerOpen(contentId, false)
|
|
227
|
+
}
|
|
228
|
+
}, { immediate: true })
|
|
229
|
+
|
|
230
|
+
// `update:openComplete` is emitted by DrawerContentImpl after the popup's
|
|
231
|
+
// enter/exit transition actually finishes (via transitionend/animationend on
|
|
232
|
+
// the popup element). DrawerRoot just exposes the notify hook through context.
|
|
233
|
+
|
|
234
|
+
onUnmounted(() => {
|
|
235
|
+
providerContext?.removeDrawer(contentId)
|
|
236
|
+
})
|
|
237
|
+
</script>
|
|
238
|
+
|
|
239
|
+
<template>
|
|
240
|
+
<slot
|
|
241
|
+
:open="open"
|
|
242
|
+
:close="handleClose"
|
|
243
|
+
/>
|
|
244
|
+
</template>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { SwipeDirection } from './utils'
|
|
3
|
+
import type { PrimitiveProps } from '@/Primitive'
|
|
4
|
+
|
|
5
|
+
export interface DrawerSwipeAreaProps extends PrimitiveProps {
|
|
6
|
+
/** Override the open swipe direction (defaults to opposite of Root's swipeDirection). */
|
|
7
|
+
swipeDirection?: SwipeDirection
|
|
8
|
+
/** Disable swipe-to-open. */
|
|
9
|
+
disabled?: boolean
|
|
10
|
+
}
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<script setup lang="ts">
|
|
14
|
+
import { computed } from 'vue'
|
|
15
|
+
import { Primitive } from '@/Primitive'
|
|
16
|
+
import { useForwardExpose } from '@/shared'
|
|
17
|
+
import { useSwipeDismiss } from './composables/useSwipeDismiss'
|
|
18
|
+
import { injectDrawerRootContext } from './DrawerRoot.vue'
|
|
19
|
+
import { DRAWER_CSS_VARS } from './utils'
|
|
20
|
+
|
|
21
|
+
const props = withDefaults(defineProps<DrawerSwipeAreaProps>(), {
|
|
22
|
+
as: 'div',
|
|
23
|
+
disabled: false,
|
|
24
|
+
})
|
|
25
|
+
const { forwardRef, currentElement } = useForwardExpose()
|
|
26
|
+
const rootContext = injectDrawerRootContext()
|
|
27
|
+
|
|
28
|
+
const OPPOSITE: Record<string, string> = {
|
|
29
|
+
up: 'down',
|
|
30
|
+
down: 'up',
|
|
31
|
+
left: 'right',
|
|
32
|
+
right: 'left',
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const openDirection = computed<SwipeDirection>(() => {
|
|
36
|
+
if (props.swipeDirection)
|
|
37
|
+
return props.swipeDirection
|
|
38
|
+
return (OPPOSITE[rootContext.swipeDirection.value] ?? 'up') as SwipeDirection
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
const enabled = computed(() => !props.disabled && !rootContext.open.value)
|
|
42
|
+
|
|
43
|
+
// Keep the directions array reactive — `[openDirection.value]` would capture
|
|
44
|
+
// the initial value only and ignore prop/state updates.
|
|
45
|
+
const directions = computed<SwipeDirection[]>(() => [openDirection.value])
|
|
46
|
+
|
|
47
|
+
useSwipeDismiss({
|
|
48
|
+
enabled,
|
|
49
|
+
elementRef: currentElement,
|
|
50
|
+
directions,
|
|
51
|
+
movementCssVars: {
|
|
52
|
+
x: DRAWER_CSS_VARS.swipeMovementX,
|
|
53
|
+
y: DRAWER_CSS_VARS.swipeMovementY,
|
|
54
|
+
},
|
|
55
|
+
onDismiss() {
|
|
56
|
+
rootContext.onOpenChange(true, 'swipe')
|
|
57
|
+
},
|
|
58
|
+
onSwipingChange(swiping) {
|
|
59
|
+
rootContext.onNestedSwipingChange(swiping)
|
|
60
|
+
},
|
|
61
|
+
})
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
<template>
|
|
65
|
+
<Primitive
|
|
66
|
+
v-bind="props"
|
|
67
|
+
:ref="forwardRef"
|
|
68
|
+
:data-state="rootContext.open.value ? 'open' : 'closed'"
|
|
69
|
+
:data-swipe-direction="openDirection"
|
|
70
|
+
>
|
|
71
|
+
<slot />
|
|
72
|
+
</Primitive>
|
|
73
|
+
</template>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { PrimitiveProps } from '@/Primitive'
|
|
3
|
+
|
|
4
|
+
export interface DrawerTitleProps extends PrimitiveProps {}
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { Primitive } from '@/Primitive'
|
|
9
|
+
import { useForwardExpose } from '@/shared'
|
|
10
|
+
import { injectDrawerRootContext } from './DrawerRoot.vue'
|
|
11
|
+
|
|
12
|
+
const props = withDefaults(defineProps<DrawerTitleProps>(), { as: 'h2' })
|
|
13
|
+
const rootContext = injectDrawerRootContext()
|
|
14
|
+
useForwardExpose()
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<Primitive
|
|
19
|
+
v-bind="props"
|
|
20
|
+
:id="rootContext.titleId"
|
|
21
|
+
>
|
|
22
|
+
<slot />
|
|
23
|
+
</Primitive>
|
|
24
|
+
</template>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { PrimitiveProps } from '@/Primitive'
|
|
3
|
+
|
|
4
|
+
export interface DrawerTriggerProps extends PrimitiveProps {}
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { onUnmounted, watch } from 'vue'
|
|
9
|
+
import { Primitive } from '@/Primitive'
|
|
10
|
+
import { useForwardExpose } from '@/shared'
|
|
11
|
+
import { injectDrawerRootContext } from './DrawerRoot.vue'
|
|
12
|
+
|
|
13
|
+
const props = withDefaults(defineProps<DrawerTriggerProps>(), { as: 'button' })
|
|
14
|
+
const rootContext = injectDrawerRootContext()
|
|
15
|
+
const { forwardRef, currentElement } = useForwardExpose()
|
|
16
|
+
|
|
17
|
+
// Keep triggerElement in sync with the rendered element — useForwardExpose's
|
|
18
|
+
// currentElement is a reactive computed ref, and v-if / conditional rendering
|
|
19
|
+
// can swap the underlying DOM node, so a one-shot onMounted assignment would
|
|
20
|
+
// go stale and break finalFocus restoration in DrawerContent.
|
|
21
|
+
watch(currentElement, (el) => {
|
|
22
|
+
rootContext.triggerElement.value = el
|
|
23
|
+
}, { immediate: true })
|
|
24
|
+
|
|
25
|
+
onUnmounted(() => {
|
|
26
|
+
if (rootContext.triggerElement.value === currentElement.value)
|
|
27
|
+
rootContext.triggerElement.value = undefined
|
|
28
|
+
})
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<template>
|
|
32
|
+
<Primitive
|
|
33
|
+
v-bind="props"
|
|
34
|
+
:ref="forwardRef"
|
|
35
|
+
:type="as === 'button' ? 'button' : undefined"
|
|
36
|
+
aria-haspopup="dialog"
|
|
37
|
+
:aria-expanded="rootContext.open.value"
|
|
38
|
+
:aria-controls="rootContext.open.value ? rootContext.contentId : undefined"
|
|
39
|
+
:data-state="rootContext.open.value ? 'open' : 'closed'"
|
|
40
|
+
@click="rootContext.onOpenChange(true, 'trigger-press')"
|
|
41
|
+
>
|
|
42
|
+
<slot />
|
|
43
|
+
</Primitive>
|
|
44
|
+
</template>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { PrimitiveProps } from '@/Primitive'
|
|
3
|
+
|
|
4
|
+
export interface DrawerViewportProps extends PrimitiveProps {}
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import { Primitive } from '@/Primitive'
|
|
9
|
+
import { useForwardExpose } from '@/shared'
|
|
10
|
+
import { injectDrawerRootContext } from './DrawerRoot.vue'
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Optional scrollable viewport wrapper. Mirrors Base UI's `Drawer.Viewport`.
|
|
14
|
+
*
|
|
15
|
+
* In Base UI the viewport owns the gesture state machine; in this port the
|
|
16
|
+
* gesture logic lives on `DrawerContent` / `DrawerContentImpl` directly, so
|
|
17
|
+
* this component is currently a passthrough that carries the `data-drawer-viewport`
|
|
18
|
+
* attribute for downstream selectors. It exists primarily for API parity.
|
|
19
|
+
*/
|
|
20
|
+
const props = withDefaults(defineProps<DrawerViewportProps>(), { as: 'div' })
|
|
21
|
+
const { forwardRef } = useForwardExpose()
|
|
22
|
+
const rootContext = injectDrawerRootContext()
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<template>
|
|
26
|
+
<Primitive
|
|
27
|
+
v-bind="props"
|
|
28
|
+
:ref="forwardRef"
|
|
29
|
+
data-drawer-viewport=""
|
|
30
|
+
:data-state="rootContext.open.value ? 'open' : 'closed'"
|
|
31
|
+
>
|
|
32
|
+
<slot />
|
|
33
|
+
</Primitive>
|
|
34
|
+
</template>
|