diff --git a/keyboardjs/keyboardjs.d.ts b/keyboardjs/keyboardjs.d.ts
index dfafd30a8..6a5c10f96 100644
--- a/keyboardjs/keyboardjs.d.ts
+++ b/keyboardjs/keyboardjs.d.ts
@@ -1,50 +1,135 @@
-// Type definitions for KeyboardJS
+// Type definitions for KeyboardJS v2.2.0
// Project: https://github.com/RobertWHurst/KeyboardJS
-// Definitions by: Vincent Bortone
+// Definitions by: David Asmuth
// Definitions: https://github.com/borisyankov/DefinitelyTyped
-// A JavaScript library for binding keyboard combos without the pain of key codes and key combo conflicts.
+// KeyboardJS is a library for use in the browser (node.js compatible).
+// It Allows developers to easily setup key bindings. Use key combos to setup complex bindings.
+// KeyboardJS also provides contexts. Contexts are great for single page applications.
+// They allow you to scope your bindings to various parts of your application.
+// Out of the box keyboardJS uses a US keyboard locale. If you need support for
+// a different type of keyboard KeyboardJS provides custom locale support so you can create
+// with a locale that better matches your needs.
-interface KeyboardJSSubBinding {
- clear(): void;
+declare module keyboardjs {
+
+ /**
+ * Information and functions in the current callback.
+ */
+ interface KeyEvent{
+ preventRepeat(): void;
+ }
+
+ /**
+ * Callback function when a keyCombo is triggered.
+ * @see KeyEvent
+ */
+ interface Callback {
+ /**
+ * Keyevent
+ */
+ (e: KeyEvent): void;
+ }
+
+ // ---------- Key Binding ---------- //
+
+ /**
+ * Binds a keyCombo to specific callback functions.
+ * @param keyCombo String of keys to be pressed to execute callbacks.
+ * @param pressed Callback that gets execute when the keyCombostate is 'pressed', can be null.
+ * @param released Callback that gets execute when the keyCombostate is 'released'
+ */
+ export function bind(keyCombo: string, pressed: Callback, released: Callback): void;
+ /**
+ * Binds a keyCombo to specific callback functions.
+ * @param keyCombo String of keys to be pressed to execute callbacks.
+ * @param pressed Callback that gets executed when the keyCombostate is 'pressed'
+ */
+ export function bind(keyCombo: string, pressed: Callback): void;
+
+
+ /**
+ * Unbinds a keyCombo
+ * @param keyCombo String of keys to be pressed to execute callbacks.
+ */
+ export function unbind(keyCombo: string): void;
+
+ // ---------- Context ---------- //
+
+ /**
+ * Sets the context KeyboardJS operates in. Default is global context.
+ * Bindings in global context will execute in all contexts.
+ * @param identifier The name of the context. If the context doesn't exists, it will be created.
+ * Use 'global' to switch to global context.
+ */
+ export function setContext(identifier: string): void;
+ /**
+ * Executes a Callback without loosing the current context.
+ * @param identifier The name of the context the callback should be in. If the context doesn't exists, it will be created.
+ * @param inContextCallBack The callback function. Will be executed in the given context.
+ */
+ export function withContext(identifier: string, inContextCallBack: () => void): void;
+ /**
+ * Returns the context KeyboardJS currently operates in.
+ */
+ export function getContext(): string;
+
+ // ---------- KeyboardJS Control ---------- //
+
+ /**
+ * The keyboard will no longer trigger bindings.
+ */
+ export function pause(): void;
+ /**
+ * The keyboard will once again trigger bindings.
+ */
+ export function resume(): void;
+ /**
+ * All active bindings will released and unbound.
+ */
+ export function reset(): void;
+
+ // ---------- Virtual Key Press ---------- //
+
+ /**
+ * Triggers a key press. Stays in pressed state until released.
+ * @param keyCombo String of keys to be pressed to execute 'pressed' callbacks.
+ */
+ export function pressKey(keyCombo: string): void
+ /**
+ * Triggers a key release.
+ * @param keyCombo String of keys to be released to execute 'released' callbacks.
+ */
+ export function releaseKey(keyCombo: string): void;
+ /**
+ * Releases all keys.
+ */
+ export function releaseAllKeys(): void;
+
+ // ---------- Attachment ---------- //
+
+ /**
+ * Attaches keyboardJS a specific window and a specific document or form.
+ * @param myWin The window to attach to.
+ * @param myDoc The document or form to attach to.
+ */
+ export function watch(myWin: Window, myDoc: Document | HTMLFormElement): void;
+ /**
+ * Attaches keyboardJS to the current window and a specific document or form.
+ * @param myDoc The document or form to attach to.
+ */
+ export function watch(myDoc: Document | HTMLFormElement): void;
+ /**
+ * Attaches keyboardJS to the current window an document.
+ */
+ export function watch(): void;
+
+ /**
+ * Detaches KeyboardJS from the window and documant/element
+ */
+ export function stop();
}
-interface KeyboardJSBinding {
- clear(): void;
- on(eventName: string, callbacks?: any): KeyboardJSSubBinding;
-}
-
-interface KeyboardJSLocale {
- map: any;
- macros: any[];
-}
-
-interface KeyboardJSStatic {
- enable(): void;
- disable(): void;
- activeKeys(): string[];
- on(keyCombo:string, onDownCallback?: (keyEvent: Event, keysPressed: string[], keyCombo: string) => void, onUpCallback?: (keyEvent: Event, keysPressed: string[], keyCombo: string) => void): KeyboardJSBinding;
- clear: {
- (keyCombo: string): void; // Call signature
- key(keyName: string): void; // Method
- };
- locale: {
- (localeName: string): KeyboardJSLocale; // Call signature
- register(localeName: string, localeDefinition: KeyboardJSLocale): void; // Method
- };
- macro: {
- (keyCombo:string , keyNames: string[]): void; // Call signature
- remove(keyCombo: string): void; // Method
- };
- key: {
- name(keyCode: number): string[];
- code(keyName: string): any;
- };
- combo: {
- active(keyCombo: string): boolean;
- parse(keyCombo: any): any[];
- stringify(keyComboArray: any): string;
- };
-}
-
-declare var KeyboardJS: KeyboardJSStatic;
+declare module 'keyboardjs' {
+ export = keyboardjs;
+}
\ No newline at end of file