UNPKG

vue-socials

Version:

Social media share buttons and counts for Vue.js

290 lines (289 loc) 8.7 kB
/** * 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]; }>;