<!-- Do not edit this file. It is automatically generated by API Documenter. -->

[Home](./index.md) &gt; [@empathyco/x-components](./x-components.md) &gt; [BaseModal](./x-components.basemodal.md)

## BaseModal variable

Base component with no XPlugin dependencies that serves as a utility for constructing more complex modals.

**Signature:**

```typescript
_default: import("vue").DefineComponent<{
    open: {
        type: BooleanConstructor;
        required: true;
    };
    focusOnOpen: {
        type: BooleanConstructor;
        default: boolean;
    };
    referenceSelector: StringConstructor;
    animation: {
        type: (StringConstructor | ObjectConstructor | FunctionConstructor)[];
        default: () => import("vue").DefineComponent<{}, {}, any, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
    };
    overlayAnimation: {
        type: (StringConstructor | ObjectConstructor | FunctionConstructor)[];
        default: () => import("vue").DefineComponent<{}, {}, any, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
    };
    contentClass: StringConstructor;
    overlayClass: StringConstructor;
}, {
    emitOverlayClicked: (event: Event) => void;
    isWaitingForLeave: import("vue").Ref<boolean>;
    modalContentRef: import("vue").Ref<HTMLDivElement | undefined>;
    modalRef: import("vue").Ref<HTMLDivElement | undefined>;
}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click:overlay" | "focusin:body")[], "click:overlay" | "focusin:body", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
    open: {
        type: BooleanConstructor;
        required: true;
    };
    focusOnOpen: {
        type: BooleanConstructor;
        default: boolean;
    };
    referenceSelector: StringConstructor;
    animation: {
        type: (StringConstructor | ObjectConstructor | FunctionConstructor)[];
        default: () => import("vue").DefineComponent<{}, {}, any, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
    };
    overlayAnimation: {
        type: (StringConstructor | ObjectConstructor | FunctionConstructor)[];
        default: () => import("vue").DefineComponent<{}, {}, any, import("vue").ComputedOptions, import("vue").MethodOptions, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
    };
    contentClass: StringConstructor;
    overlayClass: StringConstructor;
}>> & {
    "onClick:overlay"?: ((...args: any[]) => any) | undefined;
    "onFocusin:body"?: ((...args: any[]) => any) | undefined;
}, {
    focusOnOpen: boolean;
    animation: string | Function | Record<string, any>;
    overlayAnimation: string | Function | Record<string, any>;
}, {}>
```
