diff --git a/signature_pad/signature_pad-tests.ts b/signature_pad/signature_pad-tests.ts
new file mode 100644
index 000000000..57c42e7d4
--- /dev/null
+++ b/signature_pad/signature_pad-tests.ts
@@ -0,0 +1,39 @@
+///
+
+/* TEST 1 - Basic structure and usage */
+function BasicTest() {
+ var canvas = document.querySelector("canvas");
+
+ var signaturePad = new SignaturePad(canvas);
+
+ // Returns signature image as data URL
+ signaturePad.toDataURL();
+
+ // Draws signature image from data URL
+ signaturePad.fromDataURL("data:image/png;base64,iVBORw0K...");
+
+ // Clears the canvas
+ signaturePad.clear();
+
+ // Returns true if canvas is empty, otherwise returns false
+ signaturePad.isEmpty();
+}
+
+/* TEST 2 - You can set options during initialization: */
+function SetDuringInit() {
+ var canvas = document.querySelector("canvas");
+ var signaturePad = new SignaturePad(canvas, {
+ minWidth: 5,
+ maxWidth: 10,
+ penColor: "rgb(66, 133, 244)"
+ });
+}
+
+/* TEST 3 - or during runtime: */
+function RuntimeChange() {
+ var canvas = document.querySelector("canvas");
+ var signaturePad = new SignaturePad(canvas);
+ signaturePad.minWidth = 5;
+ signaturePad.maxWidth = 10;
+ signaturePad.penColor = "rgb(66, 133, 244)";
+}
diff --git a/signature_pad/signature_pad.d.ts b/signature_pad/signature_pad.d.ts
new file mode 100644
index 000000000..10d6a03d6
--- /dev/null
+++ b/signature_pad/signature_pad.d.ts
@@ -0,0 +1,122 @@
+// Type definitions for signature_pad
+// Project: https://github.com/szimek/signature_pad
+// Definitions by: Abubaker Bashir
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+// Project by: Szymon Nowak
+
+declare module SignaturePad {
+ class Point {
+ x: number;
+ y: number;
+ time: number;
+ constructor(x: number, y: number, time: number);
+ velocityFrom(start: Point): number;
+ distanceTo(start: Point): number;
+ }
+
+ class CurveControl {
+ c1: Point;
+ c2: Point;
+ constructor(c1: Point, c2: Point);
+ }
+
+ class Bezier {
+ startPoint: Point;
+ control1: CurveControl;
+ control2: CurveControl;
+ endPoint: Point;
+ constructor(startPoint: Point, control1: Point, control2: Point, endPoint: Point);
+ length(): number;
+ _point(t: number, start: number, c1: number, c2: number, end: number): number;
+ }
+
+ interface SignaturePadOptions {
+ /**
+ * (float) Weight used to modify new velocity based on the previous velocity. Defaults to 0.7.
+ */
+ velocityFilterWeight?: number;
+ /**
+ * (float) Minimum width of a line. Defaults to 0.5.
+ */
+ minWidth?: number;
+ /**
+ * (float) Maximum width of a line. Defaults to 2.5.
+ */
+ maxWidth?: number;
+ /**
+ * (float or function) Radius of a single dot.
+ */
+ dotSize?: Function;
+ /**
+ * (string) Color used to draw the lines. Can be any color format accepted by context.fillStyle.
+ * Defaults to "black".
+ */
+ penColor?: string;
+ /**
+ * (string) Color used to clear the background. Can be any color format accepted by context.fillStyle.
+ * Defaults to "rgba(0,0,0,0)" (transparent black). Use a non-transparent color e.g. "rgb(255,255,255)"
+ * (opaque white) if you'd like to save signatures as JPEG images.
+ */
+ backgroundColor?: string;
+ /**
+ * (function) Callback when stroke begin.
+ */
+ onEnd?: Function;
+ /**
+ * (function) Callback when stroke end.
+ */
+ onBegin?: Function;
+ }
+}
+
+declare class SignaturePad {
+ points: Array;
+ _lastVelocity: number;
+ _lastWidth: number;
+ _isEmpty: boolean;
+ _mouseButtonDown: boolean;
+ _ctx: CanvasRenderingContext2D;
+ _canvas: HTMLCanvasElement;
+ velocityFilterWeight: number;
+ minWidth: number;
+ maxWidth: number;
+ dotSize: Function;
+ penColor: string;
+ backgroundColor: string;
+ onEnd: Function;
+ onBegin: Function;
+
+ constructor(canvas: Element, options?: SignaturePad.SignaturePadOptions);
+ /**
+ * Clears the canvas
+ */
+ clear(): void;
+ /**
+ * Returns true if canvas is empty, otherwise returns false
+ */
+ isEmpty(): boolean;
+ /**
+ * Draws signature image from data URL
+ */
+ fromDataURL(dataUrl: string): void;
+ /**
+ * Returns signature image as data URL
+ */
+ toDataURL(): string;
+
+ _strokeBegin(event: Event): void;
+ _strokeUpdate(event: Event): void;
+ _strokeDraw(point: SignaturePad.Point): void;
+ _strokeEnd(event: Event): void;
+ _handleMouseEvents(): void;
+ _handleTouchEvents(): void;
+ _reset(): void;
+ _createPoint(event: Event): SignaturePad.Point;
+ _addPoint(point: SignaturePad.Point): void;
+ _calculateCurveControlPoints(point1: SignaturePad.Point, point2: SignaturePad.Point, point3: SignaturePad.Point): void;
+
+ _addCurve(curve: SignaturePad.Bezier): void;
+ _drawPoint(x: number, y: number, size: number): void;
+ _drawCurve(curve: SignaturePad.Bezier, startWidth: number, endWidth: number): void;
+ _strokeWidth(velocity: number): void;
+}
\ No newline at end of file