/**
 * Hey!
 *
 * Base socials mixin used for every social component
 * which have share window. It provides a method for window.open()
 * and has props for window features. Also has a method for component render.
 */
import { VNode, PropType, DefineComponent } from 'vue';
import { IWindowFeatures } from '../../types/common/windowFeatures';
export interface IBaseSocialDataOptions {
    shareDialog: Window | null;
    shareDialogCloseIntervalId: number | undefined;
}
export declare type TBaseSocialPropsOptions<T> = {
    windowFeatures: IWindowFeatures;
    shareOptions: T;
    useNativeBehavior: boolean;
};
export declare type TBaseSocialMixin<T> = DefineComponent<TBaseSocialPropsOptions<T>>;
export declare const DEFAULT_WINDOW_FEATURES: {
    width: number;
    height: number;
};
/**
 * Wrapper around Vue mixin to pass parameters inside.
 * We use multiple parameters instead of a single object because
 * it causes problems with tree-shaking. I don't know why.
 * A little bit inconvenient, but overall OK :)
 */
export default function BaseSocials<T>(name: string, customWindowFeatures?: IWindowFeatures, customShareOptions?: T, customAriaLabel?: string, isShareOptionsRequired?: boolean, isWindowFeaturesRequired?: boolean): DefineComponent<{
    /**
     * Requested features of the new window
     * @link https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features
     */
    windowFeatures: {
        type: PropType<IWindowFeatures>;
        default: () => IWindowFeatures | {
            width: number;
            height: number;
        };
        required: boolean | undefined;
    };
    /**
     * Share parameters for social network
     */
    shareOptions: {
        type: PropType<T>;
        default: () => T;
        required: true;
    };
    /**
     * Use native link behavior instead of window.open()
     */
    useNativeBehavior: {
        type: PropType<boolean>;
        default: boolean;
    };
}, unknown, IBaseSocialDataOptions, {
    /**
     * Merge default and user window features
     */
    mergedWindowFeatures(): IWindowFeatures;
    /**
     * Calculate the aria-label for a link.
     * It replaces @s in a string with a social network name.
     */
    ariaLabel(): string;
}, {
    /**
     * Create new share popup from url
     * @link https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Syntax
     */
    openShareDialog(url: string): void;
    /**
     * Create new share component
     */
    generateComponent(url: string): VNode;
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("click" | "popup-block" | "popup-open" | "popup-close" | "popup-focus")[], "click" | "popup-block" | "popup-open" | "popup-close" | "popup-focus", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<{
    windowFeatures: IWindowFeatures;
    shareOptions: {
        type: PropType<T>;
        default: () => T;
        required: true;
    } extends {
        type: true | null;
    } ? any : {
        type: PropType<T>;
        default: () => T;
        required: true;
    } extends ObjectConstructor | {
        type: ObjectConstructor;
    } ? Record<string, any> : {
        type: PropType<T>;
        default: () => T;
        required: true;
    } extends BooleanConstructor | {
        type: BooleanConstructor;
    } ? boolean : {
        type: PropType<T>;
        default: () => T;
        required: true;
    } extends import("vue").Prop<infer V, infer D> ? unknown extends V ? D : V : {
        type: PropType<T>;
        default: () => T;
        required: true;
    };
    useNativeBehavior: boolean;
} & {}>, { [K in "windowFeatures" | "useNativeBehavior" | ({
    type: PropType<T>;
    default: () => T;
    required: true;
} extends {
    type: BooleanConstructor;
    required: true;
} ? never : "shareOptions")]: {
    /**
     * Requested features of the new window
     * @link https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features
     */
    windowFeatures: {
        type: PropType<IWindowFeatures>;
        default: () => IWindowFeatures | {
            width: number;
            height: number;
        };
        required: boolean | undefined;
    };
    /**
     * Share parameters for social network
     */
    shareOptions: {
        type: PropType<T>;
        default: () => T;
        required: true;
    };
    /**
     * Use native link behavior instead of window.open()
     */
    useNativeBehavior: {
        type: PropType<boolean>;
        default: boolean;
    };
}[K] extends null ? any : {
    /**
     * Requested features of the new window
     * @link https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features
     */
    windowFeatures: {
        type: PropType<IWindowFeatures>;
        default: () => IWindowFeatures | {
            width: number;
            height: number;
        };
        required: boolean | undefined;
    };
    /**
     * Share parameters for social network
     */
    shareOptions: {
        type: PropType<T>;
        default: () => T;
        required: true;
    };
    /**
     * Use native link behavior instead of window.open()
     */
    useNativeBehavior: {
        type: PropType<boolean>;
        default: boolean;
    };
}[K] extends {
    type: true | null;
} ? any : {
    /**
     * Requested features of the new window
     * @link https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features
     */
    windowFeatures: {
        type: PropType<IWindowFeatures>;
        default: () => IWindowFeatures | {
            width: number;
            height: number;
        };
        required: boolean | undefined;
    };
    /**
     * Share parameters for social network
     */
    shareOptions: {
        type: PropType<T>;
        default: () => T;
        required: true;
    };
    /**
     * Use native link behavior instead of window.open()
     */
    useNativeBehavior: {
        type: PropType<boolean>;
        default: boolean;
    };
}[K] extends ObjectConstructor | {
    type: ObjectConstructor;
} ? Record<string, any> : {
    /**
     * Requested features of the new window
     * @link https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features
     */
    windowFeatures: {
        type: PropType<IWindowFeatures>;
        default: () => IWindowFeatures | {
            width: number;
            height: number;
        };
        required: boolean | undefined;
    };
    /**
     * Share parameters for social network
     */
    shareOptions: {
        type: PropType<T>;
        default: () => T;
        required: true;
    };
    /**
     * Use native link behavior instead of window.open()
     */
    useNativeBehavior: {
        type: PropType<boolean>;
        default: boolean;
    };
}[K] extends BooleanConstructor | {
    type: BooleanConstructor;
} ? boolean : {
    /**
     * Requested features of the new window
     * @link https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features
     */
    windowFeatures: {
        type: PropType<IWindowFeatures>;
        default: () => IWindowFeatures | {
            width: number;
            height: number;
        };
        required: boolean | undefined;
    };
    /**
     * Share parameters for social network
     */
    shareOptions: {
        type: PropType<T>;
        default: () => T;
        required: true;
    };
    /**
     * Use native link behavior instead of window.open()
     */
    useNativeBehavior: {
        type: PropType<boolean>;
        default: boolean;
    };
}[K] extends import("vue").Prop<infer V, infer D> ? unknown extends V ? D : V : {
    /**
     * Requested features of the new window
     * @link https://developer.mozilla.org/en-US/docs/Web/API/Window/open#Window_features
     */
    windowFeatures: {
        type: PropType<IWindowFeatures>;
        default: () => IWindowFeatures | {
            width: number;
            height: number;
        };
        required: boolean | undefined;
    };
    /**
     * Share parameters for social network
     */
    shareOptions: {
        type: PropType<T>;
        default: () => T;
        required: true;
    };
    /**
     * Use native link behavior instead of window.open()
     */
    useNativeBehavior: {
        type: PropType<boolean>;
        default: boolean;
    };
}[K]; }>;
