radix-vue
Version:
Vue port for Radix UI Primitives.
225 lines (224 loc) • 8.17 kB
TypeScript
import type { Ref } from 'vue';
import type { GraceIntent } from './utils';
import type { FocusScopeProps } from '../FocusScope';
import type { RovingFocusGroupEmits } from '../RovingFocus';
import type { DismissableLayerEmits, DismissableLayerProps } from '../DismissableLayer';
import type { PopperContentProps } from '../Popper';
export interface MenuContentContext {
onItemEnter(event: PointerEvent): boolean;
onItemLeave(event: PointerEvent): void;
onTriggerLeave(event: PointerEvent): boolean;
searchRef: Ref<string>;
pointerGraceTimerRef: Ref<number>;
onPointerGraceIntentChange(intent: GraceIntent | null): void;
}
export declare const injectMenuContentContext: <T extends MenuContentContext | null | undefined = MenuContentContext>(fallback?: T | undefined) => T extends null ? MenuContentContext | null : MenuContentContext, provideMenuContentContext: (contextValue: MenuContentContext) => MenuContentContext;
export interface MenuContentImplPrivateProps {
disableOutsidePointerEvents?: DismissableLayerProps['disableOutsidePointerEvents'];
/**
* Whether scrolling outside the `MenuContent` should be prevented
* (default: `false`)
*/
disableOutsideScroll?: boolean;
/**
* Whether focus should be trapped within the `MenuContent`
* (default: false)
*/
trapFocus?: FocusScopeProps['trapped'];
}
export type MenuContentImplEmits = DismissableLayerEmits & Omit<RovingFocusGroupEmits, 'update:currentTabStopId'> & {
'openAutoFocus': [event: Event];
/**
* Event handler called when auto-focusing on close.
* Can be prevented.
*/
'closeAutoFocus': [event: Event];
};
export interface MenuContentImplProps extends MenuContentImplPrivateProps, Omit<PopperContentProps, 'dir' | 'onPlaced'> {
/**
* Whether keyboard navigation should loop around
* @defaultValue false
*/
loop?: boolean;
}
export interface MenuRootContentProps extends Omit<PopperContentProps, 'dir' | 'onPlaced'> {
/**
* Whether keyboard navigation should loop around
* @defaultValue false
*/
loop?: boolean;
}
declare const _default: __VLS_WithTemplateSlots<import("vue").DefineComponent<{
loop: {
type: import("vue").PropType<boolean>;
};
asChild: {
type: import("vue").PropType<boolean>;
};
as: {
type: import("vue").PropType<import('../Primitive').AsTag | import("vue").Component>;
};
align: {
type: import("vue").PropType<"center" | "end" | "start">;
default: "center" | "end" | "start";
};
disableOutsidePointerEvents: {
type: import("vue").PropType<boolean>;
};
trapFocus: {
type: import("vue").PropType<boolean>;
};
sticky: {
type: import("vue").PropType<"partial" | "always">;
default: "partial" | "always";
};
side: {
type: import("vue").PropType<"right" | "left" | "bottom" | "top">;
default: "right" | "left" | "bottom" | "top";
};
sideOffset: {
type: import("vue").PropType<number>;
default: number;
};
alignOffset: {
type: import("vue").PropType<number>;
default: number;
};
avoidCollisions: {
type: import("vue").PropType<boolean>;
default: boolean;
};
collisionBoundary: {
type: import("vue").PropType<Element | (Element | null)[] | null>;
default: () => never[];
};
collisionPadding: {
type: import("vue").PropType<number | Partial<Record<"right" | "left" | "bottom" | "top", number>>>;
default: number;
};
arrowPadding: {
type: import("vue").PropType<number>;
default: number;
};
hideWhenDetached: {
type: import("vue").PropType<boolean>;
default: boolean;
};
updatePositionStrategy: {
type: import("vue").PropType<"always" | "optimized">;
default: "always" | "optimized";
};
prioritizePosition: {
type: import("vue").PropType<boolean>;
default: boolean;
};
disableOutsideScroll: {
type: import("vue").PropType<boolean>;
};
}, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
escapeKeyDown: (event: KeyboardEvent) => void;
pointerDownOutside: (event: import('../DismissableLayer').PointerDownOutsideEvent) => void;
focusOutside: (event: import('../DismissableLayer').FocusOutsideEvent) => void;
interactOutside: (event: import('../DismissableLayer').PointerDownOutsideEvent | import('../DismissableLayer').FocusOutsideEvent) => void;
dismiss: () => void;
openAutoFocus: (event: Event) => void;
closeAutoFocus: (event: Event) => void;
entryFocus: (event: Event) => void;
}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
loop: {
type: import("vue").PropType<boolean>;
};
asChild: {
type: import("vue").PropType<boolean>;
};
as: {
type: import("vue").PropType<import('../Primitive').AsTag | import("vue").Component>;
};
align: {
type: import("vue").PropType<"center" | "end" | "start">;
default: "center" | "end" | "start";
};
disableOutsidePointerEvents: {
type: import("vue").PropType<boolean>;
};
trapFocus: {
type: import("vue").PropType<boolean>;
};
sticky: {
type: import("vue").PropType<"partial" | "always">;
default: "partial" | "always";
};
side: {
type: import("vue").PropType<"right" | "left" | "bottom" | "top">;
default: "right" | "left" | "bottom" | "top";
};
sideOffset: {
type: import("vue").PropType<number>;
default: number;
};
alignOffset: {
type: import("vue").PropType<number>;
default: number;
};
avoidCollisions: {
type: import("vue").PropType<boolean>;
default: boolean;
};
collisionBoundary: {
type: import("vue").PropType<Element | (Element | null)[] | null>;
default: () => never[];
};
collisionPadding: {
type: import("vue").PropType<number | Partial<Record<"right" | "left" | "bottom" | "top", number>>>;
default: number;
};
arrowPadding: {
type: import("vue").PropType<number>;
default: number;
};
hideWhenDetached: {
type: import("vue").PropType<boolean>;
default: boolean;
};
updatePositionStrategy: {
type: import("vue").PropType<"always" | "optimized">;
default: "always" | "optimized";
};
prioritizePosition: {
type: import("vue").PropType<boolean>;
default: boolean;
};
disableOutsideScroll: {
type: import("vue").PropType<boolean>;
};
}>> & {
onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
onPointerDownOutside?: ((event: import('../DismissableLayer').PointerDownOutsideEvent) => any) | undefined;
onFocusOutside?: ((event: import('../DismissableLayer').FocusOutsideEvent) => any) | undefined;
onInteractOutside?: ((event: import('../DismissableLayer').PointerDownOutsideEvent | import('../DismissableLayer').FocusOutsideEvent) => any) | undefined;
onDismiss?: (() => any) | undefined;
onOpenAutoFocus?: ((event: Event) => any) | undefined;
onCloseAutoFocus?: ((event: Event) => any) | undefined;
onEntryFocus?: ((event: Event) => any) | undefined;
}, {
align: "center" | "end" | "start";
sticky: "partial" | "always";
side: "right" | "left" | "bottom" | "top";
sideOffset: number;
alignOffset: number;
avoidCollisions: boolean;
collisionBoundary: Element | (Element | null)[] | null;
collisionPadding: number | Partial<Record<"right" | "left" | "bottom" | "top", number>>;
arrowPadding: number;
hideWhenDetached: boolean;
updatePositionStrategy: "always" | "optimized";
prioritizePosition: boolean;
}, {}>, {
default?(_: {}): any;
}>;
export default _default;
type __VLS_WithTemplateSlots<T, S> = T & {
new (): {
$slots: S;
};
};