Skip to content

Commit

Permalink
Add some typescript typings
Browse files Browse the repository at this point in the history
Add typescript typings for the core components and some of the plugins.

This can serve as a starting point for adding types to the other
plugins.
  • Loading branch information
dobesv committed Jul 19, 2019
1 parent b8f75e2 commit cb00f94
Show file tree
Hide file tree
Showing 21 changed files with 429 additions and 12 deletions.
1 change: 1 addition & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ lib/**
draft-js-*/lib/**
scripts/**
docs/build/**
*.d.ts
4 changes: 3 additions & 1 deletion draft-js-anchor-plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"url": "https://github.com/draft-js-plugins/draft-js-plugins.git"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
"keywords": [
"editor",
"wysiwyg",
Expand All @@ -25,9 +26,10 @@
],
"scripts": {
"clean": "../node_modules/.bin/rimraf lib",
"build": "npm run clean && npm run build:js && npm run build:css",
"build": "npm run clean && npm run build:js && npm run build:css && npm run build:ts",
"build:js": "WEBPACK_CONFIG=$(pwd)/webpack.config.js BABEL_DISABLE_CACHE=1 BABEL_ENV=production NODE_ENV=production ../node_modules/.bin/babel --out-dir='lib' --ignore='__test__/*' src",
"build:css": "node ../scripts/concatCssFiles $(pwd) && ../node_modules/.bin/rimraf lib-css",
"build:ts": "../node_modules/.bin/cpx src/*.d.ts lib/",
"prepublish": "npm run build"
},
"license": "MIT",
Expand Down
19 changes: 19 additions & 0 deletions draft-js-anchor-plugin/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { EditorPlugin } from "draft-js-plugins-editor";
import { AnchorHTMLAttributes, ComponentType } from "react";

export interface AnchorPluginTheme {
link?: string;
input?: string;
inputInvalid?: string;
}

export interface AnchorPluginConfig {
theme?: AnchorPluginTheme;
placeholder?: string;
Link?: ComponentType<AnchorHTMLAttributes<HTMLAnchorElement>>;
linkTarget?: string;
}

declare const createAnchorPlugin: (config: AnchorPluginConfig) => EditorPlugin;

export default createAnchorPlugin;
5 changes: 4 additions & 1 deletion draft-js-buttons/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"url": "https://github.com/draft-js-plugins/draft-js-plugins.git"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
"keywords": [
"editor",
"wysiwyg",
Expand All @@ -22,7 +23,9 @@
"react-component"
],
"scripts": {
"build": "BABEL_ENV=production ../node_modules/.bin/babel --out-dir='lib' --ignore='__tests__/*' src",
"build": "npm run build:js && npm run build:ts",
"build:js": "BABEL_ENV=production ../node_modules/.bin/babel --out-dir='lib' --ignore='__tests__/*' src",
"build:ts": "../node_modules/.bin/cpx src/*.d.ts lib/",
"prepublish": "npm run build"
},
"license": "MIT",
Expand Down
59 changes: 59 additions & 0 deletions draft-js-buttons/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { EditorState } from "draft-js";
import { ComponentType, ReactNode } from "react";

export interface DraftJsButtonTheme {
// CSS classes to apply
active: string;
button: string;
buttonWrapper: string;
}

export interface DraftJsButtonProps {
theme?: DraftJsButtonTheme;
}

export interface DraftJsBlockAlignmentButtonProps extends DraftJsButtonProps {
alignment: string;

setAlignment(alignment: string): void;
}

type DraftJsBlockAlignmentButtonType = ComponentType<
DraftJsBlockAlignmentButtonProps
>;

export const AlignBlockCenterButton: DraftJsBlockAlignmentButtonType;
export const AlignBlockDefaultButton: DraftJsBlockAlignmentButtonType;
export const AlignBlockLeftButton: DraftJsBlockAlignmentButtonType;
export const AlignBlockRightButton: DraftJsBlockAlignmentButtonType;

export interface DraftJsStyleButtonProps extends DraftJsButtonProps {
setEditorState(editorState: EditorState): void;

getEditorState(): EditorState;
}

type DraftJsStyleButtonType = ComponentType<DraftJsStyleButtonProps>;

export const createBlockStyleButton: (
alignment: string,
children: ReactNode
) => DraftJsStyleButtonType;
export const createInlineStyleButton: (
alignment: string,
children: ReactNode
) => DraftJsStyleButtonType;

export const BlockquoteButton: DraftJsStyleButtonType;
export const BoldButton: DraftJsStyleButtonType;
export const CodeBlockButton: DraftJsStyleButtonType;
export const CodeButton: DraftJsStyleButtonType;
export const HeadlineOneButton: DraftJsStyleButtonType;
export const HeadlineThreeButton: DraftJsStyleButtonType;
export const HeadlineTwoButton: DraftJsStyleButtonType;
export const ItalicButton: DraftJsStyleButtonType;
export const OrderedListButton: DraftJsStyleButtonType;
export const SubButton: DraftJsStyleButtonType;
export const SupButton: DraftJsStyleButtonType;
export const UnderlineButton: DraftJsStyleButtonType;
export const UnorderedListButton: DraftJsStyleButtonType;
4 changes: 3 additions & 1 deletion draft-js-drag-n-drop-plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"url": "https://github.com/draft-js-plugins/draft-js-plugins.git"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
"keywords": [
"editor",
"wysiwyg",
Expand All @@ -23,8 +24,9 @@
],
"scripts": {
"clean": "../node_modules/.bin/rimraf lib",
"build": "npm run clean && npm run build:js",
"build": "npm run clean && npm run build:js && npm run build:ts",
"build:js": "WEBPACK_CONFIG=$(pwd)/webpack.config.js BABEL_DISABLE_CACHE=1 BABEL_ENV=production NODE_ENV=production ../node_modules/.bin/babel --out-dir='lib' --ignore='__test__/*' src",
"build:ts": "../node_modules/.bin/cpx src/*.d.ts lib/",
"prepublish": "npm run build"
},
"license": "MIT",
Expand Down
9 changes: 9 additions & 0 deletions draft-js-drag-n-drop-plugin/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { DraftDecorator } from "draft-js";
import { EditorPlugin } from "draft-js-plugins-editor";

type DragNDropEditorPlugin = EditorPlugin & {
decorator: DraftDecorator;
};

declare const createBlockDndPlugin: () => DragNDropEditorPlugin;
export default createBlockDndPlugin;
4 changes: 3 additions & 1 deletion draft-js-emoji-plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"url": "https://github.com/draft-js-plugins/draft-js-plugins.git"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
"keywords": [
"editor",
"wysiwyg",
Expand All @@ -24,9 +25,10 @@
],
"scripts": {
"clean": "../node_modules/.bin/rimraf lib",
"build": "npm run clean && npm run build:js && npm run build:css",
"build": "npm run clean && npm run build:js && npm run build:css && npm run build:ts",
"build:js": "WEBPACK_CONFIG=$(pwd)/webpack.config.js BABEL_DISABLE_CACHE=1 BABEL_ENV=production NODE_ENV=production ../node_modules/.bin/babel --out-dir='lib' --ignore='__test__/*' src",
"build:css": "node ../scripts/concatCssFiles $(pwd) && ../node_modules/.bin/rimraf lib-css",
"build:ts": "../node_modules/.bin/cpx src/*.d.ts lib/",
"prepublish": "npm run build"
},
"license": "MIT",
Expand Down
84 changes: 84 additions & 0 deletions draft-js-emoji-plugin/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import { EditorPlugin } from "draft-js-plugins-editor";
import { List } from "immutable";
import {ComponentType, CSSProperties, ReactNode} from "react";

export interface EmojiPluginTheme {
emoji?: string;

emojiSuggestions?: string;

emojiSuggestionsEntry?: string;
emojiSuggestionsEntryFocused?: string;
emojiSuggestionsEntryText?: string;
emojiSuggestionsEntryIcon?: string;

emojiSelect?: string;

emojiSelectButton?: string;
emojiSelectButtonPressed?: string;

emojiSelectPopover?: string;
emojiSelectPopoverClosed?: string;
emojiSelectPopoverTitle?: string;
emojiSelectPopoverGroups?: string;

emojiSelectPopoverGroup?: string;
emojiSelectPopoverGroupTitle?: string;
emojiSelectPopoverGroupList?: string;
emojiSelectPopoverGroupItem?: string;

emojiSelectPopoverToneSelect?: string;
emojiSelectPopoverToneSelectList?: string;
emojiSelectPopoverToneSelectItem?: string;

emojiSelectPopoverEntry?: string;
emojiSelectPopoverEntryFocused?: string;
emojiSelectPopoverEntryIcon?: string;

emojiSelectPopoverNav?: string;
emojiSelectPopoverNavItem?: string;
emojiSelectPopoverNavEntry?: string;
emojiSelectPopoverNavEntryActive?: string;

emojiSelectPopoverScrollbar?: string;
emojiSelectPopoverScrollbarThumb?: string;
}

export interface EmojiSuggestionsState {
isActive?: boolean;
focusedOptionIndex: number;
}

export interface EmojiSelectGroup {
title: string;
icon: ReactNode;
categories: string[];
}

export interface EmojiPluginConfig {
theme?: EmojiPluginTheme;
imagePath?: string;
imageType?: string;
allowImageCache?: boolean;
positionSuggestions?: (arg: {
decoratorRect: DOMRect;
popover: Element;
props: { suggestions: any[] };
state: EmojiSuggestionsState;
filteredEmojis: List<string>;
}) => CSSProperties;
priorityList?: { [k: string]: string | undefined };
selectGroups?: EmojiSelectGroup[];
selectButtonContent?: string;
toneSelectOpenDelay?: number;
useNativeArt?: boolean;
}

type EmojiEditorPlugin = EditorPlugin & {
EmojiSuggestions: ComponentType<unknown>;
EmojiSelect: ComponentType<unknown>;
}

declare const createEmojiPlugin: (config?: EmojiPluginConfig) => EmojiEditorPlugin;

export default createEmojiPlugin;
4 changes: 3 additions & 1 deletion draft-js-focus-plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"url": "https://github.com/draft-js-plugins/draft-js-plugins.git"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
"keywords": [
"editor",
"wysiwyg",
Expand All @@ -23,9 +24,10 @@
],
"scripts": {
"clean": "../node_modules/.bin/rimraf lib",
"build": "npm run clean && npm run build:js && npm run build:css",
"build": "npm run clean && npm run build:js && npm run build:css && npm run build:ts",
"build:js": "WEBPACK_CONFIG=$(pwd)/webpack.config.js BABEL_DISABLE_CACHE=1 BABEL_ENV=production NODE_ENV=production ../node_modules/.bin/babel --out-dir='lib' --ignore='__test__/*' src",
"build:css": "node ../scripts/concatCssFiles $(pwd) && ../node_modules/.bin/rimraf lib-css",
"build:ts": "../node_modules/.bin/cpx src/*.d.ts lib/",
"prepublish": "npm run build"
},
"license": "MIT",
Expand Down
8 changes: 8 additions & 0 deletions draft-js-focus-plugin/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { DraftDecorator } from "draft-js";
import { EditorPlugin } from "draft-js-plugins-editor";

type FocusEditorPlugin = EditorPlugin & { decorator: DraftDecorator };

declare const createFocusPlugin: () => FocusEditorPlugin;

export default createFocusPlugin;
4 changes: 3 additions & 1 deletion draft-js-image-plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"url": "https://github.com/draft-js-plugins/draft-js-plugins.git"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
"keywords": [
"editor",
"wysiwyg",
Expand All @@ -23,9 +24,10 @@
],
"scripts": {
"clean": "../node_modules/.bin/rimraf lib",
"build": "npm run clean && npm run build:js && npm run build:css",
"build": "npm run clean && npm run build:js && npm run build:css && npm run build:ts",
"build:js": "WEBPACK_CONFIG=$(pwd)/webpack.config.js BABEL_DISABLE_CACHE=1 BABEL_ENV=production NODE_ENV=production ../node_modules/.bin/babel --out-dir='lib' --ignore='__test__/*' src",
"build:css": "node ../scripts/concatCssFiles $(pwd) && ../node_modules/.bin/rimraf lib-css",
"build:ts": "../node_modules/.bin/cpx src/*.d.ts lib/",
"prepublish": "npm run build"
},
"license": "MIT",
Expand Down
26 changes: 26 additions & 0 deletions draft-js-image-plugin/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { EditorState } from "draft-js";
import { EditorPlugin } from "draft-js-plugins-editor";
import { ComponentType, ImgHTMLAttributes } from "react";

export interface ImagePluginTheme {
image: string;
}

export interface ImagePluginConfig {
theme?: ImagePluginTheme;
imageComponent?: ComponentType<ImgHTMLAttributes<HTMLImageElement>>;
}

export type ImageEditorPlugin = EditorPlugin & {
addImage: (
editorState: EditorState,
url: string,
extraData?: object
) => EditorState;
};

declare const createImagePlugin: (
config?: ImagePluginConfig
) => ImageEditorPlugin;

export default createImagePlugin;
4 changes: 3 additions & 1 deletion draft-js-inline-toolbar-plugin/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"url": "https://github.com/draft-js-plugins/draft-js-plugins.git"
},
"main": "lib/index.js",
"types": "lib/index.d.ts",
"keywords": [
"editor",
"wysiwyg",
Expand All @@ -23,9 +24,10 @@
],
"scripts": {
"clean": "../node_modules/.bin/rimraf lib",
"build": "npm run clean && npm run build:js && npm run build:css",
"build": "npm run clean && npm run build:js && npm run build:css && npm run build:ts",
"build:js": "WEBPACK_CONFIG=$(pwd)/webpack.config.js BABEL_DISABLE_CACHE=1 BABEL_ENV=production NODE_ENV=production ../node_modules/.bin/babel --out-dir='lib' --ignore='__test__/*' src",
"build:css": "node ../scripts/concatCssFiles $(pwd) && ../node_modules/.bin/rimraf lib-css",
"build:ts": "../node_modules/.bin/cpx src/*.d.ts lib/",
"prepublish": "npm run build"
},
"license": "MIT",
Expand Down
42 changes: 42 additions & 0 deletions draft-js-inline-toolbar-plugin/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { EditorPlugin } from "draft-js-plugins-editor";
import { ComponentType, ReactNode } from "react";
import { EditorState } from "draft-js";

export interface InlineToolbarPluginTheme {
buttonStyles?: {
buttonWrapper?: string;
button?: string;
active?: string;
};
toolbarStyles?: {
toolbar?: string;
};
separatorStyles?: {
separator?: string;
};
}

export interface InlineToolbarPluginConfig {
theme: InlineToolbarPluginTheme;
}

export interface ToolbarChildrenProps {
theme: InlineToolbarPluginTheme["buttonStyles"];
getEditorState: () => EditorState;
setEditorState: (editorState: EditorState) => void;
onOverrideContent: (content: ComponentType<ToolbarChildrenProps>) => void;
}

export interface ToolbarProps {
children(externalProps: ToolbarChildrenProps): ReactNode;
}

export type InlineToolBarPlugin = EditorPlugin & {
InlineToolbar: ComponentType<ToolbarProps>;
};

declare const createInlineToolbarPlugin: (
config?: InlineToolbarPluginConfig
) => InlineToolBarPlugin;

export default createInlineToolbarPlugin;
Loading

0 comments on commit cb00f94

Please sign in to comment.