// flow-typed signature: f234bb9aa083eadba8d747200fa5a8ca
// flow-typed version: <<STUB>>/animationjs_v^0.1.5/flow_v0.42.0

/**
 * This is an autogenerated libdef stub for:
 *
 *   'animationjs'
 *
 * Fill this stub out by replacing all the `any` types.
 *
 * Once filled out, we encourage you to share your work with the 
 * community by sending a pull request to: 
 * https://github.com/flowtype/flow-typed
 */

declare module 'animationjs' {
  declare module.exports: any;
}

/**
 * We include stubs for each file inside this npm package in case you need to
 * require those files directly. Feel free to delete any files that aren't
 * needed.
 */
declare module 'animationjs/build/animation.common' {
  declare module.exports: any;
}

declare module 'animationjs/build/animation.debug' {
  declare module.exports: any;
}

declare module 'animationjs/build/animation' {
  declare module.exports: any;
}

declare module 'animationjs/Gruntfile' {
  declare module.exports: any;
}

declare module 'animationjs/src/animation' {
  declare module.exports: any;
}

// Filename aliases
declare module 'animationjs/build/animation.common.js' {
  declare module.exports: $Exports<'animationjs/build/animation.common'>;
}
declare module 'animationjs/build/animation.debug.js' {
  declare module.exports: $Exports<'animationjs/build/animation.debug'>;
}
declare module 'animationjs/build/animation.js' {
  declare module.exports: $Exports<'animationjs/build/animation'>;
}
declare module 'animationjs/Gruntfile.js' {
  declare module.exports: $Exports<'animationjs/Gruntfile'>;
}
declare module 'animationjs/src/animation.js' {
  declare module.exports: $Exports<'animationjs/src/animation'>;
}
