diff --git a/types/react-share/index.d.ts b/types/react-share/index.d.ts new file mode 100644 index 0000000000..756b917014 --- /dev/null +++ b/types/react-share/index.d.ts @@ -0,0 +1,205 @@ +// Type definitions for react-share 2.1 +// Project: https://github.com/nygardk/react-share#readme +// Definitions by: icopp +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.6 + +import * as React from 'react'; + +// ============================================================================= +// Share buttons +// ============================================================================= + +export interface CommonShareButtonProps { + /** + * URL of the shared page + */ + url: string; + /** Disables click action and adds `disabled` class */ + disabled?: boolean; + /** + * Style when button is disabled + * @default { opacity: 0.6 } + */ + disabledStyle?: React.StyleHTMLAttributes; + windowWidth?: number; + windowHeight?: number; + /** + * Takes a function that returns a Promise to be fulfilled before calling + * `onClick`. If you do not return promise, `onClick` is called immediately. + */ + beforeOnClick?: () => Promise; + /** + * Takes a function to be called after closing share dialog. + */ + onShareWindowClose?: () => void; + /** + * An object to pass any additional properties, such as `aria-*` attributes. + */ + additionalProps?: React.HTMLAttributes; +} + +export const FacebookShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** A quote to be shared along with the link. */ + quote?: string; + /** + * A hashtag specified by the developer to be added to the shared + * content. People will still have the opportunity to remove this + * hashtag in the dialog. The hashtag should include the hash symbol. + */ + hashtag?: string; + } +>; +export const GooglePlusShareButton: React.StatelessComponent< + CommonShareButtonProps +>; +export const LinkedinShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + /** Description of the shared page */ + description?: string; + } +>; +export const TwitterShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + via?: string; + hashtags?: string[]; + } +>; +export const TelegramShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + } +>; +export const WhatsappShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + /** + * Separates title from the url + * @default ' ' + */ + separator?: string; + } +>; +export const PinterestShareButton: React.StatelessComponent< + CommonShareButtonProps & { + media: string; + /** Description of the shared page */ + description?: string; + } +>; +export const VKShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + /** Description of the shared page */ + description?: string; + /** An absolute link to the image that will be shared */ + image?: string; + } +>; +export const OKShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + /** Description of the shared page */ + description?: string; + } +>; +export const RedditShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + } +>; +export const TumblrShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + tags?: string[]; + /** Description of the shared page */ + caption?: string; + } +>; +export const LivejournalShareButton: React.StatelessComponent< + CommonShareButtonProps & { title?: string; description?: string } +>; +export const MalruShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + title?: string; + /** Description of the shared page */ + description?: string; + /** An absolute link to the image that will be shared */ + image?: string; + } +>; +export const EmailShareButton: React.StatelessComponent< + CommonShareButtonProps & { + /** Title of the shared page */ + subject?: string; + /** Body of the email, defaults to shared url. */ + body?: string; + } +>; + +// ============================================================================= +// Share counts +// ============================================================================= + +export interface ShareCountComponentProps { + /** The URL you are sharing */ + url: string; + /** Classes to apply (if any) */ + className?: string; + /** Supply a function as the child to render anything but the count */ + children?: (shareCount: number) => React.ReactNode; +} + +export const FacebookShareCount: React.StatelessComponent; +export const GooglePlusShareCount: React.StatelessComponent; +export const LinkedinShareCount: React.StatelessComponent; +export const PinterestShareCount: React.StatelessComponent; +export const VKShareCount: React.StatelessComponent; +export const OKShareCount: React.StatelessComponent; +export const RedditShareCount: React.StatelessComponent; +export const TumblrShareCount: React.StatelessComponent; + +// ============================================================================= +// Icons +// ============================================================================= + +export interface IconComponentProps { + /** Icon size in pixels */ + size?: number; + /** Whether to show round or rect icons */ + round?: boolean; + /** Customize background style, e.g. fill */ + iconBgStyle?: React.CSSProperties; + /** + * Customize logo's fill color + * @default 'white' + */ + logoFillColor?: string; +} + +export const FacebookIcon: React.StatelessComponent; +export const TwitterIcon: React.StatelessComponent; +export const TelegramIcon: React.StatelessComponent; +export const WhatsappIcon: React.StatelessComponent; +export const GooglePlusIcon: React.StatelessComponent; +export const LinkedinIcon: React.StatelessComponent; +export const PinterestIcon: React.StatelessComponent; +export const VKIcon: React.StatelessComponent; +export const OKIcon: React.StatelessComponent; +export const RedditIcon: React.StatelessComponent; +export const TumblrIcon: React.StatelessComponent; +export const LivejournalIcon: React.StatelessComponent; +export const MailruIcon: React.StatelessComponent; +export const EmailIcon: React.StatelessComponent; diff --git a/types/react-share/react-share-tests.ts b/types/react-share/react-share-tests.ts new file mode 100644 index 0000000000..6b4628f8e0 --- /dev/null +++ b/types/react-share/react-share-tests.ts @@ -0,0 +1,25 @@ +import { + FacebookShareCount, // $ExpectType StatelessComponent + GooglePlusShareCount, // $ExpectType StatelessComponent + LinkedinShareCount, // $ExpectType StatelessComponent + PinterestShareCount, // $ExpectType StatelessComponent + VKShareCount, // $ExpectType StatelessComponent + OKShareCount, // $ExpectType StatelessComponent + RedditShareCount, // $ExpectType StatelessComponent + TumblrShareCount, // $ExpectType StatelessComponent + + FacebookIcon, // $ExpectType StatelessComponent + TwitterIcon, // $ExpectType StatelessComponent + TelegramIcon, // $ExpectType StatelessComponent + WhatsappIcon, // $ExpectType StatelessComponent + GooglePlusIcon, // $ExpectType StatelessComponent + LinkedinIcon, // $ExpectType StatelessComponent + PinterestIcon, // $ExpectType StatelessComponent + VKIcon, // $ExpectType StatelessComponent + OKIcon, // $ExpectType StatelessComponent + RedditIcon, // $ExpectType StatelessComponent + TumblrIcon, // $ExpectType StatelessComponent + LivejournalIcon, // $ExpectType StatelessComponent + MailruIcon, // $ExpectType StatelessComponent + EmailIcon, // $ExpectType StatelessComponent +} from 'react-share'; diff --git a/types/react-share/tsconfig.json b/types/react-share/tsconfig.json new file mode 100644 index 0000000000..2b5932cab4 --- /dev/null +++ b/types/react-share/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "react-share-tests.ts" + ] +} diff --git a/types/react-share/tslint.json b/types/react-share/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/react-share/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }