vue-socials
Version:
Social media share buttons and counts for Vue.js
290 lines (289 loc) • 8.7 kB
TypeScript
/**
* 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]; }>;