Full Code of needim/noty for AI

master 82f11352c38d cached
147 files
1.4 MB
410.6k tokens
470 symbols
1 requests
Download .txt
Showing preview only (1,453K chars total). Download the full file or copy to clipboard to get everything.
Repository: needim/noty
Branch: master
Commit: 82f11352c38d
Files: 147
Total size: 1.4 MB

Directory structure:
gitextract_8xne0dab/

├── .babelrc
├── .codeclimate.yml
├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   └── ISSUE_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── Gruntfile.js
├── LICENSE.txt
├── README.markdown
├── bower.json
├── browserstack-builds.json
├── browserstack-session.json
├── browserstack.json
├── composer.json
├── demo/
│   ├── animate.css
│   ├── bouncejs/
│   │   └── bounce.js
│   ├── demo.css
│   ├── demo.js
│   ├── font-awesome/
│   │   └── fonts/
│   │       └── FontAwesome.otf
│   ├── fonts/
│   │   └── stylesheet.css
│   ├── index.html
│   ├── push.html
│   └── sendpush.js
├── docs/
│   ├── .nojekyll
│   ├── README.md
│   ├── _assets/
│   │   ├── docs.js
│   │   ├── docsify.js
│   │   └── vue.css
│   ├── _navbar.md
│   ├── _sidebar.md
│   ├── animations.md
│   ├── api.md
│   ├── bakers.md
│   ├── browsers.md
│   ├── confirm.md
│   ├── index.html
│   ├── installation.md
│   ├── options.md
│   ├── push.md
│   ├── themes.md
│   ├── types.md
│   └── v2/
│       ├── animations.html
│       ├── api.html
│       ├── confirmations.html
│       ├── index.html
│       ├── layouts.html
│       ├── options.html
│       ├── releases.html
│       ├── themes.html
│       └── vendor/
│           ├── animate.css
│           ├── custom.css
│           ├── documentation.js
│           ├── fastclick.js
│           ├── google-code-prettify/
│           │   ├── prettify.css
│           │   └── prettify.js
│           ├── main.js
│           ├── noty-2.4.1/
│           │   ├── .gitignore
│           │   ├── Gruntfile.js
│           │   ├── LICENSE.txt
│           │   ├── README.markdown
│           │   ├── bower.json
│           │   ├── composer.json
│           │   ├── demo/
│           │   │   ├── allLayouts.html
│           │   │   ├── allTypes.html
│           │   │   ├── animate.css
│           │   │   ├── api.html
│           │   │   ├── buttons.css
│           │   │   ├── consumingAlert.html
│           │   │   ├── customContainer.html
│           │   │   ├── font-awesome/
│           │   │   │   └── fonts/
│           │   │   │       └── FontAwesome.otf
│           │   │   ├── index.html
│           │   │   ├── issue302.html
│           │   │   ├── jquery-1.8.0.js
│           │   │   ├── killer.html
│           │   │   ├── noanim.html
│           │   │   ├── notification_html.js
│           │   │   ├── progressbar.html
│           │   │   ├── themeBootstrap.html
│           │   │   ├── themeCss.html
│           │   │   ├── usingMaxVisible.html
│           │   │   ├── usingWithAnimate.css.html
│           │   │   ├── usingWithButtons.html
│           │   │   ├── usingWithButtons2.html
│           │   │   ├── usingWithModal.html
│           │   │   └── usingWithOldOptions.html
│           │   ├── js/
│           │   │   └── noty/
│           │   │       ├── jquery.noty.js
│           │   │       ├── layouts/
│           │   │       │   ├── bottom.js
│           │   │       │   ├── bottomCenter.js
│           │   │       │   ├── bottomLeft.js
│           │   │       │   ├── bottomRight.js
│           │   │       │   ├── center.js
│           │   │       │   ├── centerLeft.js
│           │   │       │   ├── centerRight.js
│           │   │       │   ├── inline.js
│           │   │       │   ├── top.js
│           │   │       │   ├── topCenter.js
│           │   │       │   ├── topLeft.js
│           │   │       │   └── topRight.js
│           │   │       ├── packaged/
│           │   │       │   └── jquery.noty.packaged.js
│           │   │       ├── promise.js
│           │   │       └── themes/
│           │   │           ├── bootstrap.js
│           │   │           ├── default.js
│           │   │           ├── metroui.js
│           │   │           ├── relax.js
│           │   │           └── semanticUI.js
│           │   ├── noty.jquery.json
│           │   └── package.json
│           ├── ps-icon-pack.css
│           └── showdown/
│               └── showdown.js
├── index.d.ts
├── lib/
│   ├── noty.css
│   ├── noty.js
│   └── themes/
│       ├── bootstrap-v3.css
│       ├── bootstrap-v4.css
│       ├── light.css
│       ├── metroui.css
│       ├── mint.css
│       ├── nest.css
│       ├── relax.css
│       ├── semanticui.css
│       └── sunset.css
├── manifest.json.template
├── package.json
├── postcss.config.js
├── service-worker.js.template
├── src/
│   ├── api.js
│   ├── button.js
│   ├── index.js
│   ├── noty.scss
│   ├── push.js
│   ├── themes/
│   │   ├── bootstrap-v3.scss
│   │   ├── bootstrap-v4.scss
│   │   ├── light.scss
│   │   ├── metroui.scss
│   │   ├── mint.scss
│   │   ├── nest.scss
│   │   ├── relax.scss
│   │   ├── semanticui.scss
│   │   └── sunset.scss
│   └── utils.js
├── test/
│   ├── index.html
│   ├── unit/
│   │   ├── init.test.js
│   │   └── phantom.js
│   └── vendor/
│       ├── qunit-theme-ninja.css
│       └── qunit.js
└── webpack.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .babelrc
================================================
{
  "presets": ["es2015"],
  "plugins": ["babel-plugin-add-module-exports"]
}

================================================
FILE: .codeclimate.yml
================================================
engines:
  eslint:
    enabled: true
  fixme:
    enabled: true
ratings:
  paths:
  - "src/**/*.js"
exclude_paths:
- test/**/*
- demo/**/*
- node_modules/**/*


================================================
FILE: .editorconfig
================================================
# editorconfig.org
root = true

[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false


================================================
FILE: .github/FUNDING.yml
================================================
github: [needim]
patreon: needim
ko_fi: needim


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
> **_Noty version_**: ..... 
> **_Browser_**: .....
> **_OS_**: .....
> **_jsFiddle link (if available)_**: .....
----------


================================================
FILE: .gitignore
================================================
child/

.DS_Store

.idea/

node_modules/
_SpecRunner.html
/.vscode/
yarn.lock
.nyc_output
coverage
manifest.json
service-worker.js


================================================
FILE: .travis.yml
================================================
language: node_js
node_js:
  - "7"
branches:
  only:
    - master


================================================
FILE: Gruntfile.js
================================================
module.exports = function (grunt) {
  'use strict'

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    usebanner: {
      taskName: {
        options: {
          position: 'top',
          banner: '/* \n  @package NOTY - Dependency-free notification library \n' +
          '  @version version: <%= pkg.version %> \n' +
          '  @contributors https://github.com/needim/noty/graphs/contributors \n' +
          '  @documentation Examples and Documentation - https://ned.im/noty \n' +
          '  @license Licensed under the MIT licenses: http://www.opensource.org/licenses/mit-license.php \n*/\n',
          linebreak: true
        },
        files: {
          src: ['lib/noty.js', 'lib/noty.min.js']
        }
      }
    },
    qunit: {
      options: {
        inject: 'test/unit/phantom.js'
      },
      files: 'test/index.html'
    },
    connect: {
      server: {
        options: {
          port: 3000,
          base: '.'
        }
      }
    },
    sass: {
      dist: {
        options: {
          style: 'expanded',
          sourcemap: 'file'
        },
        files: [{
          expand: true,
          cwd: 'src/themes',
          src: ['*.scss'],
          dest: 'lib/themes',
          ext: '.css'
        }]
      }
    },
    curl: {
      builds: {
        src: {
          url: 'https://www.browserstack.com/automate/builds.json',
          auth: {
            user: process.env.BROWSERSTACK_USERNAME,
            pass: process.env.BROWSERSTACK_KEY
          }
        },
        dest: 'browserstack-builds.json'
      },
      session: {
        src: {
          url: 'https://www.browserstack.com/automate/builds/' + grunt.file.readJSON('browserstack-builds.json')[0]['automation_build']['hashed_id'] + '/sessions.json',
          auth: {
            user: process.env.BROWSERSTACK_USERNAME,
            pass: process.env.BROWSERSTACK_KEY
          }
        },
        dest: 'browserstack-session.json'
      }
    }
  })

  require('load-grunt-tasks')(grunt)

  grunt.registerTask('bs-create-md', function () {
    const session = grunt.file.readJSON('browserstack-session.json')
    const file = 'docs/browsers.md'
    let contents = '!> This data is provided by BrowserStack Automate \n\n\n'

    contents += `#### ${session[0].automation_session.build_name} \n\n`
    contents += '| OS | Browser | Result | Details | \n'
    contents += '| --- | --- | --- | --- | \n'

    session.forEach(function (s) {
      grunt.log.writeln(s.automation_session.hashed_id)
      contents += `| ${s.automation_session.os} ${s.automation_session.os_version} | ${s.automation_session.browser} ${s.automation_session.browser_version}  | ${s.automation_session.status} | [view](${s.automation_session.public_url}) |`
      contents += '\n'
    })

    grunt.file.write(file, contents)
  })

  grunt.registerTask('browserstack-md', ['curl:builds', 'curl:session', 'bs-create-md'])
  grunt.registerTask('banner', 'usebanner')
  grunt.registerTask('test', 'qunit')
  grunt.registerTask('saucelabs', ['qunit', 'connect', 'saucelabs-qunit'])
  grunt.registerTask('default', ['test'])
  grunt.registerTask('themes', ['sass'])
}


================================================
FILE: LICENSE.txt
================================================
Copyright (c) 2012 Nedim Arabacı

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

================================================
FILE: README.markdown
================================================
# DEPRECATED

<p>
   This repository is no longer supported, please consider using alternatives.
</p>

[![No Maintenance Intended](http://unmaintained.tech/badge.svg)](http://unmaintained.tech/)

<p align="center">
  <a href="https://ned.im/noty?ref=readme">
    <img src="https://ned.im/noty/_media/noty-v3-logo.png" width=200 height=70>
  </a>

  <p align="center">
    Dependency-free notification library.
    <br>
    <a href="https://ned.im/noty"><strong>Documentation &raquo;</strong></a>
  </p>

  <p align="center">
    <a href="https://github.com/needim/noty/releases"><img src="https://img.shields.io/github/release/needim/noty.svg" alt="GitHub release"></a>
    <a href="https://bower.io/"><img src="https://img.shields.io/bower/v/noty.svg" alt="Bower version"></a>
    <a href="https://www.npmjs.com/package/noty"><img src="https://img.shields.io/npm/v/noty.svg" alt="NPM version"></a>
    <a href="https://packagist.org/packages/needim/noty"><img src="https://img.shields.io/packagist/v/needim/noty.svg" alt="Packagist version"></a>
    <a href="https://cdnjs.com/libraries/noty"><img src="https://img.shields.io/cdnjs/v/noty.svg" alt="CDNJS version"></a>
    <br>
    <img src="https://img.shields.io/david/needim/noty.svg" alt="Dependencies">
    <img src="https://img.shields.io/david/dev/needim/noty.svg" alt="Dev Dependencies">
    <br>
    <a href="https://travis-ci.org/needim/noty"><img src="https://img.shields.io/travis/needim/noty/master.svg" alt="Travis"></a>
    <a href="https://www.npmjs.com/package/noty"><img src="https://img.shields.io/npm/dm/noty.svg?label=npm%20downloads" alt="NPM Downloads"></a>
    <a href="https://github.com/needim/noty/graphs/contributors"><img src="https://img.shields.io/github/contributors/needim/noty.svg" alt="Contributors"></a>
  </p>
</p>

<br>

## Hi

**NOTY** is a notification library that makes it easy to create **alert** - **success** - **error** - **warning** - **information** - **confirmation** messages as an alternative the standard alert dialog.

The notifications can be positioned at the;
**top** - **topLeft** - **topCenter** - **topRight** - **center** - **centerLeft** - **centerRight** - **bottom** - **bottomLeft** - **bottomCenter** - **bottomRight**

There are lots of other options in the API to customise the text, animation, buttons and much more.

It also has various callbacks for the buttons, opening closing the notifications and queue control.

---

### Features

- [x] Dependency-free
- [x] Web Push Notifications with Service Worker support
- [x] UMD
- [x] Named queue system
- [x] Has 11 layouts, 5 notification styles, 5+ themes
- [x] Custom container (inline notifications)
- [x] Confirm notifications
- [x] TTL
- [x] Progress bar indicator for timed notifications
- [x] Supports css animations, [animate.css](https://github.com/daneden/animate.css), [mojs](https://github.com/legomushroom/mojs), [bounce.js](https://github.com/tictail/bounce.js), [velocity](https://github.com/julianshapiro/velocity) and other animation libraries
- [x] 2 close options: click, button
- [x] API & Callbacks
- [x] Custom templating
- [x] Document visibility control (blur, focus)

### Documentation

Documentation and examples are here: <http://ned.im/noty>

---

##### Basic Usage

```js
import Noty from "noty";

new Noty({
  text: "Notification text"
}).show();

// or

const Noty = require("noty");

new Noty({
  text: "Notification text"
}).show();
```

##### Development

```console
$ npm run dev
$ npm test
$ npm run build
$ npm run browserstack
$ npm run serve-docs
```

##### Development environment

- [x] Standard
- [x] Prettier
- [x] ES6 & Babel & Webpack
- [x] Sass
- [x] Autoprefixer
- [x] QUnit
- [x] BrowserStack
- [x] Pre-commit tests
- [x] Travis CI

[![JavaScript Style Guide](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://github.com/feross/standard)


================================================
FILE: bower.json
================================================
{
  "name": "noty",
  "description": "Noty - Notification library",
  "license": "MIT",
  "homepage": "http://ned.im/noty",
  "main": "lib/noty.js",
  "keywords": [
    "noty",
    "notification",
    "alert",
    "confirmation"
  ],
  "ignore": [
    "node_modules",
    "tests"
  ],
  "authors": [
    "Nedim Arabacı <nedimarabaci@gmail.com>"
  ]
}


================================================
FILE: browserstack-builds.json
================================================
[{"automation_build":{"name":"Local run  2017 07 27T17:31:03.314Z","duration":null,"status":"done","hashed_id":"7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0"}},{"automation_build":{"name":"Local run  2017 07 27T16:47:55.918Z","duration":null,"status":"done","hashed_id":"31f78fc1bfbe5c32506ca9c3acd06182f45314ed"}},{"automation_build":{"name":"Local run  2017 07 27T16:41:51.361Z","duration":null,"status":"done","hashed_id":"7bba6ab979ebd503c9cdccaf58d385f2b878fbce"}},{"automation_build":{"name":"Local run  2017 07 27T16:38:09.816Z","duration":null,"status":"done","hashed_id":"3a9b655e94c3a6a9e755036df49e9896c14b6f9c"}},{"automation_build":{"name":"Local run  2017 07 27T16:37:04.214Z","duration":null,"status":"done","hashed_id":"c66c5b2a11cc1ee6644d1fa2e9f6eff7a6a0cbec"}},{"automation_build":{"name":"Local run  2017 07 27T15:24:14.586Z","duration":null,"status":"done","hashed_id":"715319d73cd4103da0a40c2a06b7a66b1bfc6d6d"}}]

================================================
FILE: browserstack-session.json
================================================
[
  {
    "automation_session": {
      "name": null,
      "duration": 48,
      "os": "Windows",
      "os_version": "10",
      "browser_version": "46.0",
      "browser": "opera",
      "device": null,
      "status": "done",
      "hashed_id": "c259644238854e4628696d8cfea9482b96a78a07",
      "reason": null,
      "build_name": "Local run  2017 07 27T17:31:03.314Z",
      "project_name": "noty",
      "logs": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/c259644238854e4628696d8cfea9482b96a78a07/logs",
      "browser_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/c259644238854e4628696d8cfea9482b96a78a07",
      "public_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/c259644238854e4628696d8cfea9482b96a78a07?auth_token=f87c9cb1ab62bb7b85af973cc2a1b03bd9d35fbc6a9e38b716fe38b01c4c3480",
      "video_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/c259644238854e4628696d8cfea9482b96a78a07/video-c259644238854e4628696d8cfea9482b96a78a07.mp4?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=L9qIjHCc4zQU%2BuRTWn3EFgmyHhQ%3D\u0026response-content-type=video%2Fmp4",
      "browser_console_logs_url": "https://www.browserstack.com/s3-upload/bs-selenium-logs-euw/s3-eu-west-1/c259644238854e4628696d8cfea9482b96a78a07/c259644238854e4628696d8cfea9482b96a78a07-console-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=IkOSopxHZ4nSX6QGOtkxYa%2FSp5Y%3D\u0026response-content-type=text%2Fplain",
      "har_logs_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/c259644238854e4628696d8cfea9482b96a78a07/c259644238854e4628696d8cfea9482b96a78a07-har-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=AW4U9XEaaZxPLERvua8%2FLQlnvY0%3D"
    }
  },
  {
    "automation_session": {
      "name": null,
      "duration": 54,
      "os": "Windows",
      "os_version": "10",
      "browser_version": "59.0",
      "browser": "chrome",
      "device": null,
      "status": "done",
      "hashed_id": "dc87007925cb5729ac8aa2a6136aab1fb6808cc1",
      "reason": null,
      "build_name": "Local run  2017 07 27T17:31:03.314Z",
      "project_name": "noty",
      "logs": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/dc87007925cb5729ac8aa2a6136aab1fb6808cc1/logs",
      "browser_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/dc87007925cb5729ac8aa2a6136aab1fb6808cc1",
      "public_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/dc87007925cb5729ac8aa2a6136aab1fb6808cc1?auth_token=04d2d0b39bcdbb76153ee28e3acf67099ecbd9a093c6176df9ad892c083663c6",
      "video_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/dc87007925cb5729ac8aa2a6136aab1fb6808cc1/video-dc87007925cb5729ac8aa2a6136aab1fb6808cc1.mp4?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=A6DNc457B5vqFNxOvP6B%2F0tCYZk%3D\u0026response-content-type=video%2Fmp4",
      "browser_console_logs_url": "https://www.browserstack.com/s3-upload/bs-selenium-logs-euw/s3-eu-west-1/dc87007925cb5729ac8aa2a6136aab1fb6808cc1/dc87007925cb5729ac8aa2a6136aab1fb6808cc1-console-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=yz1BugMpwOrl2h9i84A6BQtr7Cs%3D\u0026response-content-type=text%2Fplain",
      "har_logs_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/dc87007925cb5729ac8aa2a6136aab1fb6808cc1/dc87007925cb5729ac8aa2a6136aab1fb6808cc1-har-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=kaUFdYGXBcjY5ZxokYZ7cYjhGpk%3D"
    }
  },
  {
    "automation_session": {
      "name": null,
      "duration": 45,
      "os": "OS X",
      "os_version": "El Capitan",
      "browser_version": "9.1",
      "browser": "safari",
      "device": null,
      "status": "done",
      "hashed_id": "0c60211cab5840456ac824443e3be99b195597b5",
      "reason": null,
      "build_name": "Local run  2017 07 27T17:31:03.314Z",
      "project_name": "noty",
      "logs": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/0c60211cab5840456ac824443e3be99b195597b5/logs",
      "browser_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/0c60211cab5840456ac824443e3be99b195597b5",
      "public_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/0c60211cab5840456ac824443e3be99b195597b5?auth_token=9daf8b81531fe858108d9d76317b171c7dca69dee3ac3a25e065810fd353b837",
      "video_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/0c60211cab5840456ac824443e3be99b195597b5/video-0c60211cab5840456ac824443e3be99b195597b5.mp4?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=p32SrCXGkJ15m79Gvxq86P1tzXU%3D\u0026response-content-type=video%2Fmp4",
      "browser_console_logs_url": "https://www.browserstack.com/s3-upload/bs-selenium-logs-euw/s3-eu-west-1/0c60211cab5840456ac824443e3be99b195597b5/0c60211cab5840456ac824443e3be99b195597b5-console-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=E6AhIFzy%2FHX5QD6%2BUd1T8WPWhXY%3D\u0026response-content-type=text%2Fplain",
      "har_logs_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/0c60211cab5840456ac824443e3be99b195597b5/0c60211cab5840456ac824443e3be99b195597b5-har-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=CIaBXl9nhoeip5EEktV5Rqrg7vI%3D"
    }
  },
  {
    "automation_session": {
      "name": null,
      "duration": 50,
      "os": "Windows",
      "os_version": "10",
      "browser_version": "54.0",
      "browser": "firefox",
      "device": null,
      "status": "done",
      "hashed_id": "336cf3a8db5363d7683f01392d4d328fce18838a",
      "reason": null,
      "build_name": "Local run  2017 07 27T17:31:03.314Z",
      "project_name": "noty",
      "logs": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/336cf3a8db5363d7683f01392d4d328fce18838a/logs",
      "browser_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/336cf3a8db5363d7683f01392d4d328fce18838a",
      "public_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/336cf3a8db5363d7683f01392d4d328fce18838a?auth_token=e93ad65f77003c53f0e7392f2bbd38d56811d1d6ce4e1f9f098494caa240ef21",
      "video_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/336cf3a8db5363d7683f01392d4d328fce18838a/video-336cf3a8db5363d7683f01392d4d328fce18838a.mp4?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=rJTPrYODLubpcgwCqZsW2mXo0JY%3D\u0026response-content-type=video%2Fmp4",
      "browser_console_logs_url": "https://www.browserstack.com/s3-upload/bs-selenium-logs-euw/s3-eu-west-1/336cf3a8db5363d7683f01392d4d328fce18838a/336cf3a8db5363d7683f01392d4d328fce18838a-console-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=FQCd3lZU3tixlx9j0EiqqjAUnYY%3D\u0026response-content-type=text%2Fplain",
      "har_logs_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/336cf3a8db5363d7683f01392d4d328fce18838a/336cf3a8db5363d7683f01392d4d328fce18838a-har-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=44zYIcazKHQzvD2F%2BEmhUFjwmHg%3D"
    }
  },
  {
    "automation_session": {
      "name": null,
      "duration": 47,
      "os": "Windows",
      "os_version": "10",
      "browser_version": "15.0",
      "browser": "edge",
      "device": null,
      "status": "done",
      "hashed_id": "a2bb1f252f478c5b5cd4fdc06158830305120ea2",
      "reason": null,
      "build_name": "Local run  2017 07 27T17:31:03.314Z",
      "project_name": "noty",
      "logs": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/a2bb1f252f478c5b5cd4fdc06158830305120ea2/logs",
      "browser_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/a2bb1f252f478c5b5cd4fdc06158830305120ea2",
      "public_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/a2bb1f252f478c5b5cd4fdc06158830305120ea2?auth_token=c75ad2904602c489145eaf2ce18b8f5723a843cb6c8dcc62a60982dc6109ef27",
      "video_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/a2bb1f252f478c5b5cd4fdc06158830305120ea2/video-a2bb1f252f478c5b5cd4fdc06158830305120ea2.mp4?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=7Jf1rpd9%2FUvHyI3wSIwdYBsD1JE%3D\u0026response-content-type=video%2Fmp4",
      "browser_console_logs_url": "https://www.browserstack.com/s3-upload/bs-selenium-logs-euw/s3-eu-west-1/a2bb1f252f478c5b5cd4fdc06158830305120ea2/a2bb1f252f478c5b5cd4fdc06158830305120ea2-console-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=4soYSJ2wA1By7Oohu8047VYYE30%3D\u0026response-content-type=text%2Fplain",
      "har_logs_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/a2bb1f252f478c5b5cd4fdc06158830305120ea2/a2bb1f252f478c5b5cd4fdc06158830305120ea2-har-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=a%2BVdRuZNZPDx%2BqOg90n3WzIP8lU%3D"
    }
  },
  {
    "automation_session": {
      "name": null,
      "duration": 30,
      "os": "Windows",
      "os_version": "8",
      "browser_version": "10.0",
      "browser": "ie",
      "device": null,
      "status": "done",
      "hashed_id": "d85b895f81c51f9cd5c72c225c9f155b331902c6",
      "reason": null,
      "build_name": "Local run  2017 07 27T17:31:03.314Z",
      "project_name": "noty",
      "logs": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/d85b895f81c51f9cd5c72c225c9f155b331902c6/logs",
      "browser_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/d85b895f81c51f9cd5c72c225c9f155b331902c6",
      "public_url": "https://www.browserstack.com/automate/builds/7d2483377687d162b9bc20fcaf3cb1bfb8f5bec0/sessions/d85b895f81c51f9cd5c72c225c9f155b331902c6?auth_token=bd85550ce628686d6485062a32cc869abf2dcb7a2b9862b3884ebc7d4283d344",
      "video_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/d85b895f81c51f9cd5c72c225c9f155b331902c6/video-d85b895f81c51f9cd5c72c225c9f155b331902c6.mp4?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=TZYrsY8GWzdcXP0IrAvQ2LisTQQ%3D\u0026response-content-type=video%2Fmp4",
      "browser_console_logs_url": "https://www.browserstack.com/s3-upload/bs-selenium-logs-euw/s3-eu-west-1/d85b895f81c51f9cd5c72c225c9f155b331902c6/d85b895f81c51f9cd5c72c225c9f155b331902c6-console-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=yQkCo8qp1BkJU5tXN%2FgEZaGjTzU%3D\u0026response-content-type=text%2Fplain",
      "har_logs_url": "https://www.browserstack.com/s3-upload/bs-video-logs-euw/s3-eu-west-1/d85b895f81c51f9cd5c72c225c9f155b331902c6/d85b895f81c51f9cd5c72c225c9f155b331902c6-har-logs.txt?AWSAccessKeyId=AKIAIN2TCEEW2SVRV5JA\u0026Expires=1509231864\u0026Signature=LIp46ukF%2FZunjjONYzweREZP73s%3D"
    }
  }
]


================================================
FILE: browserstack.json
================================================
{
  "test_framework": "qunit",
  "test_path": "test/index.html",
  "browsers": [
    {
      "browser": "ie",
      "browser_version": "10",
      "os": "Windows",
      "os_version": "8"
    },
    {
      "browser": "edge",
      "browser_version": "latest",
      "os": "Windows",
      "os_version": "10"
    },
    {
      "browser": "firefox",
      "browser_version": "latest",
      "os": "Windows",
      "os_version": "10"
    },
    {
      "browser": "chrome",
      "browser_version": "latest",
      "os": "Windows",
      "os_version": "10"
    },
    {
      "browser": "opera",
      "browser_version": "latest",
      "os": "Windows",
      "os_version": "10"
    },
    {
      "browser": "safari",
      "browser_version": "latest",
      "os": "OS X",
      "os_version": "El Capitan"
    }
  ]
}


================================================
FILE: composer.json
================================================
{
	"name": "needim/noty",
	"description": "Noty is a library that makes it easy to create alert - success - error - warning - information - confirmation messages as an alternative the standard alert dialog.",
	"type": "library",
	"license": "MIT",
	"homepage": "http://ned.im/noty",
	"keywords": [
		"noty",
		"notification"
	],
	"authors": [
		{
			"name": "Nedim Arabaci",
			"homepage": "http://ned.im",
			"role": "Developer"
		}
	],
	"minimum-stability": "dev"
}


================================================
FILE: demo/animate.css
================================================
@charset "UTF-8";

/*!
 * animate.css -http://daneden.me/animate
 * Version - 3.5.1
 * Licensed under the MIT license - http://opensource.org/licenses/MIT
 *
 * Copyright (c) 2016 Daniel Eden
 */

.animated {
  -webkit-animation-duration: 1s;
  animation-duration: 1s;
  -webkit-animation-fill-mode: both;
  animation-fill-mode: both;
}

.animated.infinite {
  -webkit-animation-iteration-count: infinite;
  animation-iteration-count: infinite;
}

.animated.hinge {
  -webkit-animation-duration: 2s;
  animation-duration: 2s;
}

.animated.flipOutX,
.animated.flipOutY,
.animated.bounceIn,
.animated.bounceOut {
  -webkit-animation-duration: .75s;
  animation-duration: .75s;
}

@-webkit-keyframes bounce {
  from, 20%, 53%, 80%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    -webkit-transform: translate3d(0,0,0);
    transform: translate3d(0,0,0);
  }

  40%, 43% {
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
    -webkit-transform: translate3d(0, -30px, 0);
    transform: translate3d(0, -30px, 0);
  }

  70% {
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
    -webkit-transform: translate3d(0, -15px, 0);
    transform: translate3d(0, -15px, 0);
  }

  90% {
    -webkit-transform: translate3d(0,-4px,0);
    transform: translate3d(0,-4px,0);
  }
}

@keyframes bounce {
  from, 20%, 53%, 80%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    -webkit-transform: translate3d(0,0,0);
    transform: translate3d(0,0,0);
  }

  40%, 43% {
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
    -webkit-transform: translate3d(0, -30px, 0);
    transform: translate3d(0, -30px, 0);
  }

  70% {
    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
    -webkit-transform: translate3d(0, -15px, 0);
    transform: translate3d(0, -15px, 0);
  }

  90% {
    -webkit-transform: translate3d(0,-4px,0);
    transform: translate3d(0,-4px,0);
  }
}

.bounce {
  -webkit-animation-name: bounce;
  animation-name: bounce;
  -webkit-transform-origin: center bottom;
  transform-origin: center bottom;
}

@-webkit-keyframes flash {
  from, 50%, to {
    opacity: 1;
  }

  25%, 75% {
    opacity: 0;
  }
}

@keyframes flash {
  from, 50%, to {
    opacity: 1;
  }

  25%, 75% {
    opacity: 0;
  }
}

.flash {
  -webkit-animation-name: flash;
  animation-name: flash;
}

/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */

@-webkit-keyframes pulse {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  50% {
    -webkit-transform: scale3d(1.05, 1.05, 1.05);
    transform: scale3d(1.05, 1.05, 1.05);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

@keyframes pulse {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  50% {
    -webkit-transform: scale3d(1.05, 1.05, 1.05);
    transform: scale3d(1.05, 1.05, 1.05);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

.pulse {
  -webkit-animation-name: pulse;
  animation-name: pulse;
}

@-webkit-keyframes rubberBand {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  30% {
    -webkit-transform: scale3d(1.25, 0.75, 1);
    transform: scale3d(1.25, 0.75, 1);
  }

  40% {
    -webkit-transform: scale3d(0.75, 1.25, 1);
    transform: scale3d(0.75, 1.25, 1);
  }

  50% {
    -webkit-transform: scale3d(1.15, 0.85, 1);
    transform: scale3d(1.15, 0.85, 1);
  }

  65% {
    -webkit-transform: scale3d(.95, 1.05, 1);
    transform: scale3d(.95, 1.05, 1);
  }

  75% {
    -webkit-transform: scale3d(1.05, .95, 1);
    transform: scale3d(1.05, .95, 1);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

@keyframes rubberBand {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  30% {
    -webkit-transform: scale3d(1.25, 0.75, 1);
    transform: scale3d(1.25, 0.75, 1);
  }

  40% {
    -webkit-transform: scale3d(0.75, 1.25, 1);
    transform: scale3d(0.75, 1.25, 1);
  }

  50% {
    -webkit-transform: scale3d(1.15, 0.85, 1);
    transform: scale3d(1.15, 0.85, 1);
  }

  65% {
    -webkit-transform: scale3d(.95, 1.05, 1);
    transform: scale3d(.95, 1.05, 1);
  }

  75% {
    -webkit-transform: scale3d(1.05, .95, 1);
    transform: scale3d(1.05, .95, 1);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

.rubberBand {
  -webkit-animation-name: rubberBand;
  animation-name: rubberBand;
}

@-webkit-keyframes shake {
  from, to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  10%, 30%, 50%, 70%, 90% {
    -webkit-transform: translate3d(-10px, 0, 0);
    transform: translate3d(-10px, 0, 0);
  }

  20%, 40%, 60%, 80% {
    -webkit-transform: translate3d(10px, 0, 0);
    transform: translate3d(10px, 0, 0);
  }
}

@keyframes shake {
  from, to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  10%, 30%, 50%, 70%, 90% {
    -webkit-transform: translate3d(-10px, 0, 0);
    transform: translate3d(-10px, 0, 0);
  }

  20%, 40%, 60%, 80% {
    -webkit-transform: translate3d(10px, 0, 0);
    transform: translate3d(10px, 0, 0);
  }
}

.shake {
  -webkit-animation-name: shake;
  animation-name: shake;
}

@-webkit-keyframes headShake {
  0% {
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }

  6.5% {
    -webkit-transform: translateX(-6px) rotateY(-9deg);
    transform: translateX(-6px) rotateY(-9deg);
  }

  18.5% {
    -webkit-transform: translateX(5px) rotateY(7deg);
    transform: translateX(5px) rotateY(7deg);
  }

  31.5% {
    -webkit-transform: translateX(-3px) rotateY(-5deg);
    transform: translateX(-3px) rotateY(-5deg);
  }

  43.5% {
    -webkit-transform: translateX(2px) rotateY(3deg);
    transform: translateX(2px) rotateY(3deg);
  }

  50% {
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }
}

@keyframes headShake {
  0% {
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }

  6.5% {
    -webkit-transform: translateX(-6px) rotateY(-9deg);
    transform: translateX(-6px) rotateY(-9deg);
  }

  18.5% {
    -webkit-transform: translateX(5px) rotateY(7deg);
    transform: translateX(5px) rotateY(7deg);
  }

  31.5% {
    -webkit-transform: translateX(-3px) rotateY(-5deg);
    transform: translateX(-3px) rotateY(-5deg);
  }

  43.5% {
    -webkit-transform: translateX(2px) rotateY(3deg);
    transform: translateX(2px) rotateY(3deg);
  }

  50% {
    -webkit-transform: translateX(0);
    transform: translateX(0);
  }
}

.headShake {
  -webkit-animation-timing-function: ease-in-out;
  animation-timing-function: ease-in-out;
  -webkit-animation-name: headShake;
  animation-name: headShake;
}

@-webkit-keyframes swing {
  20% {
    -webkit-transform: rotate3d(0, 0, 1, 15deg);
    transform: rotate3d(0, 0, 1, 15deg);
  }

  40% {
    -webkit-transform: rotate3d(0, 0, 1, -10deg);
    transform: rotate3d(0, 0, 1, -10deg);
  }

  60% {
    -webkit-transform: rotate3d(0, 0, 1, 5deg);
    transform: rotate3d(0, 0, 1, 5deg);
  }

  80% {
    -webkit-transform: rotate3d(0, 0, 1, -5deg);
    transform: rotate3d(0, 0, 1, -5deg);
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 0deg);
    transform: rotate3d(0, 0, 1, 0deg);
  }
}

@keyframes swing {
  20% {
    -webkit-transform: rotate3d(0, 0, 1, 15deg);
    transform: rotate3d(0, 0, 1, 15deg);
  }

  40% {
    -webkit-transform: rotate3d(0, 0, 1, -10deg);
    transform: rotate3d(0, 0, 1, -10deg);
  }

  60% {
    -webkit-transform: rotate3d(0, 0, 1, 5deg);
    transform: rotate3d(0, 0, 1, 5deg);
  }

  80% {
    -webkit-transform: rotate3d(0, 0, 1, -5deg);
    transform: rotate3d(0, 0, 1, -5deg);
  }

  to {
    -webkit-transform: rotate3d(0, 0, 1, 0deg);
    transform: rotate3d(0, 0, 1, 0deg);
  }
}

.swing {
  -webkit-transform-origin: top center;
  transform-origin: top center;
  -webkit-animation-name: swing;
  animation-name: swing;
}

@-webkit-keyframes tada {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  10%, 20% {
    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
  }

  30%, 50%, 70%, 90% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
  }

  40%, 60%, 80% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

@keyframes tada {
  from {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }

  10%, 20% {
    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
  }

  30%, 50%, 70%, 90% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
  }

  40%, 60%, 80% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
  }

  to {
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

.tada {
  -webkit-animation-name: tada;
  animation-name: tada;
}

/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */

@-webkit-keyframes wobble {
  from {
    -webkit-transform: none;
    transform: none;
  }

  15% {
    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
  }

  30% {
    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
  }

  45% {
    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
  }

  60% {
    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
  }

  75% {
    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
  }

  to {
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes wobble {
  from {
    -webkit-transform: none;
    transform: none;
  }

  15% {
    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
  }

  30% {
    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
  }

  45% {
    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
  }

  60% {
    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
  }

  75% {
    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
  }

  to {
    -webkit-transform: none;
    transform: none;
  }
}

.wobble {
  -webkit-animation-name: wobble;
  animation-name: wobble;
}

@-webkit-keyframes jello {
  from, 11.1%, to {
    -webkit-transform: none;
    transform: none;
  }

  22.2% {
    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
    transform: skewX(-12.5deg) skewY(-12.5deg);
  }

  33.3% {
    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
    transform: skewX(6.25deg) skewY(6.25deg);
  }

  44.4% {
    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
    transform: skewX(-3.125deg) skewY(-3.125deg);
  }

  55.5% {
    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
    transform: skewX(1.5625deg) skewY(1.5625deg);
  }

  66.6% {
    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
    transform: skewX(-0.78125deg) skewY(-0.78125deg);
  }

  77.7% {
    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
    transform: skewX(0.390625deg) skewY(0.390625deg);
  }

  88.8% {
    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
  }
}

@keyframes jello {
  from, 11.1%, to {
    -webkit-transform: none;
    transform: none;
  }

  22.2% {
    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
    transform: skewX(-12.5deg) skewY(-12.5deg);
  }

  33.3% {
    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
    transform: skewX(6.25deg) skewY(6.25deg);
  }

  44.4% {
    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
    transform: skewX(-3.125deg) skewY(-3.125deg);
  }

  55.5% {
    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
    transform: skewX(1.5625deg) skewY(1.5625deg);
  }

  66.6% {
    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
    transform: skewX(-0.78125deg) skewY(-0.78125deg);
  }

  77.7% {
    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
    transform: skewX(0.390625deg) skewY(0.390625deg);
  }

  88.8% {
    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
  }
}

.jello {
  -webkit-animation-name: jello;
  animation-name: jello;
  -webkit-transform-origin: center;
  transform-origin: center;
}

@-webkit-keyframes bounceIn {
  from, 20%, 40%, 60%, 80%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  0% {
    opacity: 0;
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }

  20% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  40% {
    -webkit-transform: scale3d(.9, .9, .9);
    transform: scale3d(.9, .9, .9);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(1.03, 1.03, 1.03);
    transform: scale3d(1.03, 1.03, 1.03);
  }

  80% {
    -webkit-transform: scale3d(.97, .97, .97);
    transform: scale3d(.97, .97, .97);
  }

  to {
    opacity: 1;
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

@keyframes bounceIn {
  from, 20%, 40%, 60%, 80%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  0% {
    opacity: 0;
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }

  20% {
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  40% {
    -webkit-transform: scale3d(.9, .9, .9);
    transform: scale3d(.9, .9, .9);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(1.03, 1.03, 1.03);
    transform: scale3d(1.03, 1.03, 1.03);
  }

  80% {
    -webkit-transform: scale3d(.97, .97, .97);
    transform: scale3d(.97, .97, .97);
  }

  to {
    opacity: 1;
    -webkit-transform: scale3d(1, 1, 1);
    transform: scale3d(1, 1, 1);
  }
}

.bounceIn {
  -webkit-animation-name: bounceIn;
  animation-name: bounceIn;
}

@-webkit-keyframes bounceInDown {
  from, 60%, 75%, 90%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  0% {
    opacity: 0;
    -webkit-transform: translate3d(0, -3000px, 0);
    transform: translate3d(0, -3000px, 0);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(0, 25px, 0);
    transform: translate3d(0, 25px, 0);
  }

  75% {
    -webkit-transform: translate3d(0, -10px, 0);
    transform: translate3d(0, -10px, 0);
  }

  90% {
    -webkit-transform: translate3d(0, 5px, 0);
    transform: translate3d(0, 5px, 0);
  }

  to {
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes bounceInDown {
  from, 60%, 75%, 90%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  0% {
    opacity: 0;
    -webkit-transform: translate3d(0, -3000px, 0);
    transform: translate3d(0, -3000px, 0);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(0, 25px, 0);
    transform: translate3d(0, 25px, 0);
  }

  75% {
    -webkit-transform: translate3d(0, -10px, 0);
    transform: translate3d(0, -10px, 0);
  }

  90% {
    -webkit-transform: translate3d(0, 5px, 0);
    transform: translate3d(0, 5px, 0);
  }

  to {
    -webkit-transform: none;
    transform: none;
  }
}

.bounceInDown {
  -webkit-animation-name: bounceInDown;
  animation-name: bounceInDown;
}

@-webkit-keyframes bounceInLeft {
  from, 60%, 75%, 90%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  0% {
    opacity: 0;
    -webkit-transform: translate3d(-3000px, 0, 0);
    transform: translate3d(-3000px, 0, 0);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(25px, 0, 0);
    transform: translate3d(25px, 0, 0);
  }

  75% {
    -webkit-transform: translate3d(-10px, 0, 0);
    transform: translate3d(-10px, 0, 0);
  }

  90% {
    -webkit-transform: translate3d(5px, 0, 0);
    transform: translate3d(5px, 0, 0);
  }

  to {
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes bounceInLeft {
  from, 60%, 75%, 90%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  0% {
    opacity: 0;
    -webkit-transform: translate3d(-3000px, 0, 0);
    transform: translate3d(-3000px, 0, 0);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(25px, 0, 0);
    transform: translate3d(25px, 0, 0);
  }

  75% {
    -webkit-transform: translate3d(-10px, 0, 0);
    transform: translate3d(-10px, 0, 0);
  }

  90% {
    -webkit-transform: translate3d(5px, 0, 0);
    transform: translate3d(5px, 0, 0);
  }

  to {
    -webkit-transform: none;
    transform: none;
  }
}

.bounceInLeft {
  -webkit-animation-name: bounceInLeft;
  animation-name: bounceInLeft;
}

@-webkit-keyframes bounceInRight {
  from, 60%, 75%, 90%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  from {
    opacity: 0;
    -webkit-transform: translate3d(3000px, 0, 0);
    transform: translate3d(3000px, 0, 0);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(-25px, 0, 0);
    transform: translate3d(-25px, 0, 0);
  }

  75% {
    -webkit-transform: translate3d(10px, 0, 0);
    transform: translate3d(10px, 0, 0);
  }

  90% {
    -webkit-transform: translate3d(-5px, 0, 0);
    transform: translate3d(-5px, 0, 0);
  }

  to {
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes bounceInRight {
  from, 60%, 75%, 90%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  from {
    opacity: 0;
    -webkit-transform: translate3d(3000px, 0, 0);
    transform: translate3d(3000px, 0, 0);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(-25px, 0, 0);
    transform: translate3d(-25px, 0, 0);
  }

  75% {
    -webkit-transform: translate3d(10px, 0, 0);
    transform: translate3d(10px, 0, 0);
  }

  90% {
    -webkit-transform: translate3d(-5px, 0, 0);
    transform: translate3d(-5px, 0, 0);
  }

  to {
    -webkit-transform: none;
    transform: none;
  }
}

.bounceInRight {
  -webkit-animation-name: bounceInRight;
  animation-name: bounceInRight;
}

@-webkit-keyframes bounceInUp {
  from, 60%, 75%, 90%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 3000px, 0);
    transform: translate3d(0, 3000px, 0);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(0, -20px, 0);
    transform: translate3d(0, -20px, 0);
  }

  75% {
    -webkit-transform: translate3d(0, 10px, 0);
    transform: translate3d(0, 10px, 0);
  }

  90% {
    -webkit-transform: translate3d(0, -5px, 0);
    transform: translate3d(0, -5px, 0);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

@keyframes bounceInUp {
  from, 60%, 75%, 90%, to {
    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
  }

  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 3000px, 0);
    transform: translate3d(0, 3000px, 0);
  }

  60% {
    opacity: 1;
    -webkit-transform: translate3d(0, -20px, 0);
    transform: translate3d(0, -20px, 0);
  }

  75% {
    -webkit-transform: translate3d(0, 10px, 0);
    transform: translate3d(0, 10px, 0);
  }

  90% {
    -webkit-transform: translate3d(0, -5px, 0);
    transform: translate3d(0, -5px, 0);
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

.bounceInUp {
  -webkit-animation-name: bounceInUp;
  animation-name: bounceInUp;
}

@-webkit-keyframes bounceOut {
  20% {
    -webkit-transform: scale3d(.9, .9, .9);
    transform: scale3d(.9, .9, .9);
  }

  50%, 55% {
    opacity: 1;
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }
}

@keyframes bounceOut {
  20% {
    -webkit-transform: scale3d(.9, .9, .9);
    transform: scale3d(.9, .9, .9);
  }

  50%, 55% {
    opacity: 1;
    -webkit-transform: scale3d(1.1, 1.1, 1.1);
    transform: scale3d(1.1, 1.1, 1.1);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }
}

.bounceOut {
  -webkit-animation-name: bounceOut;
  animation-name: bounceOut;
}

@-webkit-keyframes bounceOutDown {
  20% {
    -webkit-transform: translate3d(0, 10px, 0);
    transform: translate3d(0, 10px, 0);
  }

  40%, 45% {
    opacity: 1;
    -webkit-transform: translate3d(0, -20px, 0);
    transform: translate3d(0, -20px, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }
}

@keyframes bounceOutDown {
  20% {
    -webkit-transform: translate3d(0, 10px, 0);
    transform: translate3d(0, 10px, 0);
  }

  40%, 45% {
    opacity: 1;
    -webkit-transform: translate3d(0, -20px, 0);
    transform: translate3d(0, -20px, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }
}

.bounceOutDown {
  -webkit-animation-name: bounceOutDown;
  animation-name: bounceOutDown;
}

@-webkit-keyframes bounceOutLeft {
  20% {
    opacity: 1;
    -webkit-transform: translate3d(20px, 0, 0);
    transform: translate3d(20px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }
}

@keyframes bounceOutLeft {
  20% {
    opacity: 1;
    -webkit-transform: translate3d(20px, 0, 0);
    transform: translate3d(20px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }
}

.bounceOutLeft {
  -webkit-animation-name: bounceOutLeft;
  animation-name: bounceOutLeft;
}

@-webkit-keyframes bounceOutRight {
  20% {
    opacity: 1;
    -webkit-transform: translate3d(-20px, 0, 0);
    transform: translate3d(-20px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }
}

@keyframes bounceOutRight {
  20% {
    opacity: 1;
    -webkit-transform: translate3d(-20px, 0, 0);
    transform: translate3d(-20px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }
}

.bounceOutRight {
  -webkit-animation-name: bounceOutRight;
  animation-name: bounceOutRight;
}

@-webkit-keyframes bounceOutUp {
  20% {
    -webkit-transform: translate3d(0, -10px, 0);
    transform: translate3d(0, -10px, 0);
  }

  40%, 45% {
    opacity: 1;
    -webkit-transform: translate3d(0, 20px, 0);
    transform: translate3d(0, 20px, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }
}

@keyframes bounceOutUp {
  20% {
    -webkit-transform: translate3d(0, -10px, 0);
    transform: translate3d(0, -10px, 0);
  }

  40%, 45% {
    opacity: 1;
    -webkit-transform: translate3d(0, 20px, 0);
    transform: translate3d(0, 20px, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }
}

.bounceOutUp {
  -webkit-animation-name: bounceOutUp;
  animation-name: bounceOutUp;
}

@-webkit-keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

.fadeIn {
  -webkit-animation-name: fadeIn;
  animation-name: fadeIn;
}

@-webkit-keyframes fadeInDown {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes fadeInDown {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.fadeInDown {
  -webkit-animation-name: fadeInDown;
  animation-name: fadeInDown;
}

@-webkit-keyframes fadeInDownBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes fadeInDownBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.fadeInDownBig {
  -webkit-animation-name: fadeInDownBig;
  animation-name: fadeInDownBig;
}

@-webkit-keyframes fadeInLeft {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes fadeInLeft {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.fadeInLeft {
  -webkit-animation-name: fadeInLeft;
  animation-name: fadeInLeft;
}

@-webkit-keyframes fadeInLeftBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes fadeInLeftBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.fadeInLeftBig {
  -webkit-animation-name: fadeInLeftBig;
  animation-name: fadeInLeftBig;
}

@-webkit-keyframes fadeInRight {
  from {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes fadeInRight {
  from {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.fadeInRight {
  -webkit-animation-name: fadeInRight;
  animation-name: fadeInRight;
}

@-webkit-keyframes fadeInRightBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes fadeInRightBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.fadeInRightBig {
  -webkit-animation-name: fadeInRightBig;
  animation-name: fadeInRightBig;
}

@-webkit-keyframes fadeInUp {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes fadeInUp {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.fadeInUp {
  -webkit-animation-name: fadeInUp;
  animation-name: fadeInUp;
}

@-webkit-keyframes fadeInUpBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes fadeInUpBig {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.fadeInUpBig {
  -webkit-animation-name: fadeInUpBig;
  animation-name: fadeInUpBig;
}

@-webkit-keyframes fadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

@keyframes fadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

.fadeOut {
  -webkit-animation-name: fadeOut;
  animation-name: fadeOut;
}

@-webkit-keyframes fadeOutDown {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
}

@keyframes fadeOutDown {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
}

.fadeOutDown {
  -webkit-animation-name: fadeOutDown;
  animation-name: fadeOutDown;
}

@-webkit-keyframes fadeOutDownBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }
}

@keyframes fadeOutDownBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, 2000px, 0);
    transform: translate3d(0, 2000px, 0);
  }
}

.fadeOutDownBig {
  -webkit-animation-name: fadeOutDownBig;
  animation-name: fadeOutDownBig;
}

@-webkit-keyframes fadeOutLeft {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }
}

@keyframes fadeOutLeft {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }
}

.fadeOutLeft {
  -webkit-animation-name: fadeOutLeft;
  animation-name: fadeOutLeft;
}

@-webkit-keyframes fadeOutLeftBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }
}

@keyframes fadeOutLeftBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(-2000px, 0, 0);
    transform: translate3d(-2000px, 0, 0);
  }
}

.fadeOutLeftBig {
  -webkit-animation-name: fadeOutLeftBig;
  animation-name: fadeOutLeftBig;
}

@-webkit-keyframes fadeOutRight {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }
}

@keyframes fadeOutRight {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }
}

.fadeOutRight {
  -webkit-animation-name: fadeOutRight;
  animation-name: fadeOutRight;
}

@-webkit-keyframes fadeOutRightBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }
}

@keyframes fadeOutRightBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(2000px, 0, 0);
    transform: translate3d(2000px, 0, 0);
  }
}

.fadeOutRightBig {
  -webkit-animation-name: fadeOutRightBig;
  animation-name: fadeOutRightBig;
}

@-webkit-keyframes fadeOutUp {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
}

@keyframes fadeOutUp {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
}

.fadeOutUp {
  -webkit-animation-name: fadeOutUp;
  animation-name: fadeOutUp;
}

@-webkit-keyframes fadeOutUpBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }
}

@keyframes fadeOutUpBig {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(0, -2000px, 0);
    transform: translate3d(0, -2000px, 0);
  }
}

.fadeOutUpBig {
  -webkit-animation-name: fadeOutUpBig;
  animation-name: fadeOutUpBig;
}

@-webkit-keyframes flip {
  from {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
  }

  40% {
    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
  }

  50% {
    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  80% {
    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
    transform: perspective(400px) scale3d(.95, .95, .95);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }
}

@keyframes flip {
  from {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
  }

  40% {
    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
  }

  50% {
    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  80% {
    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
    transform: perspective(400px) scale3d(.95, .95, .95);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }
}

.animated.flip {
  -webkit-backface-visibility: visible;
  backface-visibility: visible;
  -webkit-animation-name: flip;
  animation-name: flip;
}

@-webkit-keyframes flipInX {
  from {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  60% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }
}

@keyframes flipInX {
  from {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  60% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }
}

.flipInX {
  -webkit-backface-visibility: visible !important;
  backface-visibility: visible !important;
  -webkit-animation-name: flipInX;
  animation-name: flipInX;
}

@-webkit-keyframes flipInY {
  from {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  60% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }
}

@keyframes flipInY {
  from {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
    opacity: 0;
  }

  40% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
    -webkit-animation-timing-function: ease-in;
    animation-timing-function: ease-in;
  }

  60% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
  }

  to {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }
}

.flipInY {
  -webkit-backface-visibility: visible !important;
  backface-visibility: visible !important;
  -webkit-animation-name: flipInY;
  animation-name: flipInY;
}

@-webkit-keyframes flipOutX {
  from {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }

  30% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    opacity: 1;
  }

  to {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    opacity: 0;
  }
}

@keyframes flipOutX {
  from {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }

  30% {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
    opacity: 1;
  }

  to {
    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
    opacity: 0;
  }
}

.flipOutX {
  -webkit-animation-name: flipOutX;
  animation-name: flipOutX;
  -webkit-backface-visibility: visible !important;
  backface-visibility: visible !important;
}

@-webkit-keyframes flipOutY {
  from {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }

  30% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    opacity: 1;
  }

  to {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    opacity: 0;
  }
}

@keyframes flipOutY {
  from {
    -webkit-transform: perspective(400px);
    transform: perspective(400px);
  }

  30% {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
    opacity: 1;
  }

  to {
    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
    opacity: 0;
  }
}

.flipOutY {
  -webkit-backface-visibility: visible !important;
  backface-visibility: visible !important;
  -webkit-animation-name: flipOutY;
  animation-name: flipOutY;
}

@-webkit-keyframes lightSpeedIn {
  from {
    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
    transform: translate3d(100%, 0, 0) skewX(-30deg);
    opacity: 0;
  }

  60% {
    -webkit-transform: skewX(20deg);
    transform: skewX(20deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: skewX(-5deg);
    transform: skewX(-5deg);
    opacity: 1;
  }

  to {
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

@keyframes lightSpeedIn {
  from {
    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
    transform: translate3d(100%, 0, 0) skewX(-30deg);
    opacity: 0;
  }

  60% {
    -webkit-transform: skewX(20deg);
    transform: skewX(20deg);
    opacity: 1;
  }

  80% {
    -webkit-transform: skewX(-5deg);
    transform: skewX(-5deg);
    opacity: 1;
  }

  to {
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

.lightSpeedIn {
  -webkit-animation-name: lightSpeedIn;
  animation-name: lightSpeedIn;
  -webkit-animation-timing-function: ease-out;
  animation-timing-function: ease-out;
}

@-webkit-keyframes lightSpeedOut {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
    transform: translate3d(100%, 0, 0) skewX(30deg);
    opacity: 0;
  }
}

@keyframes lightSpeedOut {
  from {
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
    transform: translate3d(100%, 0, 0) skewX(30deg);
    opacity: 0;
  }
}

.lightSpeedOut {
  -webkit-animation-name: lightSpeedOut;
  animation-name: lightSpeedOut;
  -webkit-animation-timing-function: ease-in;
  animation-timing-function: ease-in;
}

@-webkit-keyframes rotateIn {
  from {
    -webkit-transform-origin: center;
    transform-origin: center;
    -webkit-transform: rotate3d(0, 0, 1, -200deg);
    transform: rotate3d(0, 0, 1, -200deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: center;
    transform-origin: center;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

@keyframes rotateIn {
  from {
    -webkit-transform-origin: center;
    transform-origin: center;
    -webkit-transform: rotate3d(0, 0, 1, -200deg);
    transform: rotate3d(0, 0, 1, -200deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: center;
    transform-origin: center;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

.rotateIn {
  -webkit-animation-name: rotateIn;
  animation-name: rotateIn;
}

@-webkit-keyframes rotateInDownLeft {
  from {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

@keyframes rotateInDownLeft {
  from {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

.rotateInDownLeft {
  -webkit-animation-name: rotateInDownLeft;
  animation-name: rotateInDownLeft;
}

@-webkit-keyframes rotateInDownRight {
  from {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

@keyframes rotateInDownRight {
  from {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

.rotateInDownRight {
  -webkit-animation-name: rotateInDownRight;
  animation-name: rotateInDownRight;
}

@-webkit-keyframes rotateInUpLeft {
  from {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

@keyframes rotateInUpLeft {
  from {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

.rotateInUpLeft {
  -webkit-animation-name: rotateInUpLeft;
  animation-name: rotateInUpLeft;
}

@-webkit-keyframes rotateInUpRight {
  from {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: rotate3d(0, 0, 1, -90deg);
    transform: rotate3d(0, 0, 1, -90deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

@keyframes rotateInUpRight {
  from {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: rotate3d(0, 0, 1, -90deg);
    transform: rotate3d(0, 0, 1, -90deg);
    opacity: 0;
  }

  to {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: none;
    transform: none;
    opacity: 1;
  }
}

.rotateInUpRight {
  -webkit-animation-name: rotateInUpRight;
  animation-name: rotateInUpRight;
}

@-webkit-keyframes rotateOut {
  from {
    -webkit-transform-origin: center;
    transform-origin: center;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: center;
    transform-origin: center;
    -webkit-transform: rotate3d(0, 0, 1, 200deg);
    transform: rotate3d(0, 0, 1, 200deg);
    opacity: 0;
  }
}

@keyframes rotateOut {
  from {
    -webkit-transform-origin: center;
    transform-origin: center;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: center;
    transform-origin: center;
    -webkit-transform: rotate3d(0, 0, 1, 200deg);
    transform: rotate3d(0, 0, 1, 200deg);
    opacity: 0;
  }
}

.rotateOut {
  -webkit-animation-name: rotateOut;
  animation-name: rotateOut;
}

@-webkit-keyframes rotateOutDownLeft {
  from {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }
}

@keyframes rotateOutDownLeft {
  from {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate3d(0, 0, 1, 45deg);
    transform: rotate3d(0, 0, 1, 45deg);
    opacity: 0;
  }
}

.rotateOutDownLeft {
  -webkit-animation-name: rotateOutDownLeft;
  animation-name: rotateOutDownLeft;
}

@-webkit-keyframes rotateOutDownRight {
  from {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}

@keyframes rotateOutDownRight {
  from {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}

.rotateOutDownRight {
  -webkit-animation-name: rotateOutDownRight;
  animation-name: rotateOutDownRight;
}

@-webkit-keyframes rotateOutUpLeft {
  from {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}

@keyframes rotateOutUpLeft {
  from {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: left bottom;
    transform-origin: left bottom;
    -webkit-transform: rotate3d(0, 0, 1, -45deg);
    transform: rotate3d(0, 0, 1, -45deg);
    opacity: 0;
  }
}

.rotateOutUpLeft {
  -webkit-animation-name: rotateOutUpLeft;
  animation-name: rotateOutUpLeft;
}

@-webkit-keyframes rotateOutUpRight {
  from {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: rotate3d(0, 0, 1, 90deg);
    transform: rotate3d(0, 0, 1, 90deg);
    opacity: 0;
  }
}

@keyframes rotateOutUpRight {
  from {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    opacity: 1;
  }

  to {
    -webkit-transform-origin: right bottom;
    transform-origin: right bottom;
    -webkit-transform: rotate3d(0, 0, 1, 90deg);
    transform: rotate3d(0, 0, 1, 90deg);
    opacity: 0;
  }
}

.rotateOutUpRight {
  -webkit-animation-name: rotateOutUpRight;
  animation-name: rotateOutUpRight;
}

@-webkit-keyframes hinge {
  0% {
    -webkit-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  20%, 60% {
    -webkit-transform: rotate3d(0, 0, 1, 80deg);
    transform: rotate3d(0, 0, 1, 80deg);
    -webkit-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  40%, 80% {
    -webkit-transform: rotate3d(0, 0, 1, 60deg);
    transform: rotate3d(0, 0, 1, 60deg);
    -webkit-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(0, 700px, 0);
    transform: translate3d(0, 700px, 0);
    opacity: 0;
  }
}

@keyframes hinge {
  0% {
    -webkit-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  20%, 60% {
    -webkit-transform: rotate3d(0, 0, 1, 80deg);
    transform: rotate3d(0, 0, 1, 80deg);
    -webkit-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
  }

  40%, 80% {
    -webkit-transform: rotate3d(0, 0, 1, 60deg);
    transform: rotate3d(0, 0, 1, 60deg);
    -webkit-transform-origin: top left;
    transform-origin: top left;
    -webkit-animation-timing-function: ease-in-out;
    animation-timing-function: ease-in-out;
    opacity: 1;
  }

  to {
    -webkit-transform: translate3d(0, 700px, 0);
    transform: translate3d(0, 700px, 0);
    opacity: 0;
  }
}

.hinge {
  -webkit-animation-name: hinge;
  animation-name: hinge;
}

/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */

@-webkit-keyframes rollIn {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

@keyframes rollIn {
  from {
    opacity: 0;
    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
  }

  to {
    opacity: 1;
    -webkit-transform: none;
    transform: none;
  }
}

.rollIn {
  -webkit-animation-name: rollIn;
  animation-name: rollIn;
}

/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */

@-webkit-keyframes rollOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
  }
}

@keyframes rollOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
  }
}

.rollOut {
  -webkit-animation-name: rollOut;
  animation-name: rollOut;
}

@-webkit-keyframes zoomIn {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }

  50% {
    opacity: 1;
  }
}

@keyframes zoomIn {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }

  50% {
    opacity: 1;
  }
}

.zoomIn {
  -webkit-animation-name: zoomIn;
  animation-name: zoomIn;
}

@-webkit-keyframes zoomInDown {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

@keyframes zoomInDown {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

.zoomInDown {
  -webkit-animation-name: zoomInDown;
  animation-name: zoomInDown;
}

@-webkit-keyframes zoomInLeft {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

@keyframes zoomInLeft {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

.zoomInLeft {
  -webkit-animation-name: zoomInLeft;
  animation-name: zoomInLeft;
}

@-webkit-keyframes zoomInRight {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

@keyframes zoomInRight {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

.zoomInRight {
  -webkit-animation-name: zoomInRight;
  animation-name: zoomInRight;
}

@-webkit-keyframes zoomInUp {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

@keyframes zoomInUp {
  from {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  60% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

.zoomInUp {
  -webkit-animation-name: zoomInUp;
  animation-name: zoomInUp;
}

@-webkit-keyframes zoomOut {
  from {
    opacity: 1;
  }

  50% {
    opacity: 0;
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }

  to {
    opacity: 0;
  }
}

@keyframes zoomOut {
  from {
    opacity: 1;
  }

  50% {
    opacity: 0;
    -webkit-transform: scale3d(.3, .3, .3);
    transform: scale3d(.3, .3, .3);
  }

  to {
    opacity: 0;
  }
}

.zoomOut {
  -webkit-animation-name: zoomOut;
  animation-name: zoomOut;
}

@-webkit-keyframes zoomOutDown {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
    -webkit-transform-origin: center bottom;
    transform-origin: center bottom;
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

@keyframes zoomOutDown {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
    -webkit-transform-origin: center bottom;
    transform-origin: center bottom;
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

.zoomOutDown {
  -webkit-animation-name: zoomOutDown;
  animation-name: zoomOutDown;
}

@-webkit-keyframes zoomOutLeft {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
    transform: scale(.1) translate3d(-2000px, 0, 0);
    -webkit-transform-origin: left center;
    transform-origin: left center;
  }
}

@keyframes zoomOutLeft {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
    transform: scale(.1) translate3d(-2000px, 0, 0);
    -webkit-transform-origin: left center;
    transform-origin: left center;
  }
}

.zoomOutLeft {
  -webkit-animation-name: zoomOutLeft;
  animation-name: zoomOutLeft;
}

@-webkit-keyframes zoomOutRight {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
    transform: scale(.1) translate3d(2000px, 0, 0);
    -webkit-transform-origin: right center;
    transform-origin: right center;
  }
}

@keyframes zoomOutRight {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
  }

  to {
    opacity: 0;
    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
    transform: scale(.1) translate3d(2000px, 0, 0);
    -webkit-transform-origin: right center;
    transform-origin: right center;
  }
}

.zoomOutRight {
  -webkit-animation-name: zoomOutRight;
  animation-name: zoomOutRight;
}

@-webkit-keyframes zoomOutUp {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
    -webkit-transform-origin: center bottom;
    transform-origin: center bottom;
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

@keyframes zoomOutUp {
  40% {
    opacity: 1;
    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
  }

  to {
    opacity: 0;
    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
    -webkit-transform-origin: center bottom;
    transform-origin: center bottom;
    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
  }
}

.zoomOutUp {
  -webkit-animation-name: zoomOutUp;
  animation-name: zoomOutUp;
}

@-webkit-keyframes slideInDown {
  from {
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

@keyframes slideInDown {
  from {
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

.slideInDown {
  -webkit-animation-name: slideInDown;
  animation-name: slideInDown;
}

@-webkit-keyframes slideInLeft {
  from {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

@keyframes slideInLeft {
  from {
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

.slideInLeft {
  -webkit-animation-name: slideInLeft;
  animation-name: slideInLeft;
}

@-webkit-keyframes slideInRight {
  from {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

@keyframes slideInRight {
  from {
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

.slideInRight {
  -webkit-animation-name: slideInRight;
  animation-name: slideInRight;
}

@-webkit-keyframes slideInUp {
  from {
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

@keyframes slideInUp {
  from {
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
    visibility: visible;
  }

  to {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

.slideInUp {
  -webkit-animation-name: slideInUp;
  animation-name: slideInUp;
}

@-webkit-keyframes slideOutDown {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
}

@keyframes slideOutDown {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }
}

.slideOutDown {
  -webkit-animation-name: slideOutDown;
  animation-name: slideOutDown;
}

@-webkit-keyframes slideOutLeft {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }
}

@keyframes slideOutLeft {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(-100%, 0, 0);
    transform: translate3d(-100%, 0, 0);
  }
}

.slideOutLeft {
  -webkit-animation-name: slideOutLeft;
  animation-name: slideOutLeft;
}

@-webkit-keyframes slideOutRight {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }
}

@keyframes slideOutRight {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(100%, 0, 0);
    transform: translate3d(100%, 0, 0);
  }
}

.slideOutRight {
  -webkit-animation-name: slideOutRight;
  animation-name: slideOutRight;
}

@-webkit-keyframes slideOutUp {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
}

@keyframes slideOutUp {
  from {
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }

  to {
    visibility: hidden;
    -webkit-transform: translate3d(0, -100%, 0);
    transform: translate3d(0, -100%, 0);
  }
}

.slideOutUp {
  -webkit-animation-name: slideOutUp;
  animation-name: slideOutUp;
}


================================================
FILE: demo/bouncejs/bounce.js
================================================
/**
 * Bounce.js 0.8.2
 * MIT license
 */
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Bounce=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
var Component, EasingClasses, Matrix4D;

Matrix4D = _dereq_("../math/matrix4d");

EasingClasses = {
  bounce: _dereq_("../easing/bounce"),
  sway: _dereq_("../easing/sway"),
  hardbounce: _dereq_("../easing/hardbounce"),
  hardsway: _dereq_("../easing/hardsway")
};

Component = (function() {
  Component.prototype.easing = "bounce";

  Component.prototype.duration = 1000;

  Component.prototype.delay = 0;

  Component.prototype.from = null;

  Component.prototype.to = null;

  function Component(options) {
    options || (options = {});
    if (options.easing != null) {
      this.easing = options.easing;
    }
    if (options.duration != null) {
      this.duration = options.duration;
    }
    if (options.delay != null) {
      this.delay = options.delay;
    }
    if (options.from != null) {
      this.from = options.from;
    }
    if (options.to != null) {
      this.to = options.to;
    }
    this.easingObject = new EasingClasses[this.easing](options);
  }

  Component.prototype.calculateEase = function(ratio) {
    return this.easingObject.calculate(ratio);
  };

  Component.prototype.getMatrix = function() {
    return new Matrix4D().identity();
  };

  Component.prototype.getEasedMatrix = function(ratio) {
    return this.getMatrix();
  };

  Component.prototype.serialize = function() {
    var key, serialized, value, _ref;
    serialized = {
      type: this.constructor.name.toLowerCase(),
      easing: this.easing,
      duration: this.duration,
      delay: this.delay,
      from: this.from,
      to: this.to
    };
    _ref = this.easingObject.serialize();
    for (key in _ref) {
      value = _ref[key];
      serialized[key] = value;
    }
    return serialized;
  };

  return Component;

})();

module.exports = Component;


},{"../easing/bounce":6,"../easing/hardbounce":7,"../easing/hardsway":8,"../easing/sway":10,"../math/matrix4d":13}],2:[function(_dereq_,module,exports){
var Component, Matrix4D, Rotate, Vector2D,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

Matrix4D = _dereq_("../math/matrix4d");

Vector2D = _dereq_("../math/vector2d");

Component = _dereq_("./index");

Rotate = (function(_super) {
  __extends(Rotate, _super);

  Rotate.prototype.from = 0;

  Rotate.prototype.to = 90;

  function Rotate() {
    Rotate.__super__.constructor.apply(this, arguments);
    this.diff = this.to - this.from;
  }

  Rotate.prototype.getMatrix = function(degrees) {
    var c, radians, s;
    radians = (degrees / 180) * Math.PI;
    c = Math.cos(radians);
    s = Math.sin(radians);
    return new Matrix4D([c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
  };

  Rotate.prototype.getEasedMatrix = function(ratio) {
    var easedAngle, easedRatio;
    easedRatio = this.calculateEase(ratio);
    easedAngle = this.from + this.diff * easedRatio;
    return this.getMatrix(easedAngle);
  };

  return Rotate;

})(Component);

module.exports = Rotate;


},{"../math/matrix4d":13,"../math/vector2d":14,"./index":1}],3:[function(_dereq_,module,exports){
var Component, Matrix4D, Scale, Vector2D,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

Matrix4D = _dereq_("../math/matrix4d");

Vector2D = _dereq_("../math/vector2d");

Component = _dereq_("./index");

Scale = (function(_super) {
  __extends(Scale, _super);

  Scale.prototype.from = {
    x: 0.5,
    y: 0.5
  };

  Scale.prototype.to = {
    x: 1,
    y: 1
  };

  function Scale() {
    Scale.__super__.constructor.apply(this, arguments);
    this.fromVector = new Vector2D(this.from.x, this.from.y);
    this.toVector = new Vector2D(this.to.x, this.to.y);
    this.diff = this.toVector.clone().subtract(this.fromVector);
  }

  Scale.prototype.getMatrix = function(x, y) {
    var z;
    z = 1;
    return new Matrix4D([x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1]);
  };

  Scale.prototype.getEasedMatrix = function(ratio) {
    var easedRatio, easedVector;
    easedRatio = this.calculateEase(ratio);
    easedVector = this.fromVector.clone().add(this.diff.clone().multiply(easedRatio));
    return this.getMatrix(easedVector.x, easedVector.y);
  };

  return Scale;

})(Component);

module.exports = Scale;


},{"../math/matrix4d":13,"../math/vector2d":14,"./index":1}],4:[function(_dereq_,module,exports){
var Component, Matrix4D, Skew, Vector2D,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

Matrix4D = _dereq_("../math/matrix4d");

Vector2D = _dereq_("../math/vector2d");

Component = _dereq_("./index");

Skew = (function(_super) {
  __extends(Skew, _super);

  Skew.prototype.from = {
    x: 0,
    y: 0
  };

  Skew.prototype.to = {
    x: 20,
    y: 0
  };

  function Skew() {
    Skew.__super__.constructor.apply(this, arguments);
    this.fromVector = new Vector2D(this.from.x, this.from.y);
    this.toVector = new Vector2D(this.to.x, this.to.y);
    this.diff = this.toVector.clone().subtract(this.fromVector);
  }

  Skew.prototype.getMatrix = function(degreesX, degreesY) {
    var radiansX, radiansY, tx, ty;
    radiansX = (degreesX / 180) * Math.PI;
    radiansY = (degreesY / 180) * Math.PI;
    tx = Math.tan(radiansX);
    ty = Math.tan(radiansY);
    return new Matrix4D([1, tx, 0, 0, ty, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
  };

  Skew.prototype.getEasedMatrix = function(ratio) {
    var easedRatio, easedVector;
    easedRatio = this.calculateEase(ratio);
    easedVector = this.fromVector.clone().add(this.diff.clone().multiply(easedRatio));
    return this.getMatrix(easedVector.x, easedVector.y);
  };

  return Skew;

})(Component);

module.exports = Skew;


},{"../math/matrix4d":13,"../math/vector2d":14,"./index":1}],5:[function(_dereq_,module,exports){
var Component, Matrix4D, Translate, Vector2D,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

Matrix4D = _dereq_("../math/matrix4d");

Vector2D = _dereq_("../math/vector2d");

Component = _dereq_("./index");

Translate = (function(_super) {
  __extends(Translate, _super);

  Translate.prototype.from = {
    x: 0,
    y: 0
  };

  Translate.prototype.to = {
    x: 0,
    y: 0
  };

  function Translate() {
    Translate.__super__.constructor.apply(this, arguments);
    this.fromVector = new Vector2D(this.from.x, this.from.y);
    this.toVector = new Vector2D(this.to.x, this.to.y);
    this.diff = this.toVector.clone().subtract(this.fromVector);
  }

  Translate.prototype.getMatrix = function(x, y) {
    var z;
    z = 0;
    return new Matrix4D([1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1]);
  };

  Translate.prototype.getEasedMatrix = function(ratio) {
    var easedRatio, easedVector;
    easedRatio = this.calculateEase(ratio);
    easedVector = this.fromVector.clone().add(this.diff.clone().multiply(easedRatio));
    return this.getMatrix(easedVector.x, easedVector.y);
  };

  return Translate;

})(Component);

module.exports = Translate;


},{"../math/matrix4d":13,"../math/vector2d":14,"./index":1}],6:[function(_dereq_,module,exports){
var BounceEasing, Easing,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

Easing = _dereq_("./index");

BounceEasing = (function(_super) {
  __extends(BounceEasing, _super);

  BounceEasing.prototype.bounces = 4;

  BounceEasing.prototype.stiffness = 3;

  function BounceEasing(options) {
    var threshold;
    if (options == null) {
      options = {};
    }
    BounceEasing.__super__.constructor.apply(this, arguments);
    if (options.stiffness != null) {
      this.stiffness = options.stiffness;
    }
    if (options.bounces != null) {
      this.bounces = options.bounces;
    }
    this.alpha = this.stiffness / 100;
    threshold = 0.005 / Math.pow(10, this.stiffness);
    this.limit = Math.floor(Math.log(threshold) / -this.alpha);
    this.omega = this.calculateOmega(this.bounces, this.limit);
  }

  BounceEasing.prototype.calculate = function(ratio) {
    var t;
    if (ratio >= 1) {
      return 1;
    }
    t = ratio * this.limit;
    return 1 - this.exponent(t) * this.oscillation(t);
  };

  BounceEasing.prototype.calculateOmega = function(bounces, limit) {
    return (this.bounces + 0.5) * Math.PI / this.limit;
  };

  BounceEasing.prototype.exponent = function(t) {
    return Math.pow(Math.E, -this.alpha * t);
  };

  BounceEasing.prototype.oscillation = function(t) {
    return Math.cos(this.omega * t);
  };

  BounceEasing.prototype.serialize = function() {
    return {
      stiffness: this.stiffness,
      bounces: this.bounces
    };
  };

  return BounceEasing;

})(Easing);

module.exports = BounceEasing;


},{"./index":9}],7:[function(_dereq_,module,exports){
var BounceEasing, HardBounceEasing,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

BounceEasing = _dereq_("./bounce");

HardBounceEasing = (function(_super) {
  __extends(HardBounceEasing, _super);

  function HardBounceEasing() {
    return HardBounceEasing.__super__.constructor.apply(this, arguments);
  }

  HardBounceEasing.prototype.oscillation = function(t) {
    return Math.abs(Math.cos(this.omega * t));
  };

  return HardBounceEasing;

})(BounceEasing);

module.exports = HardBounceEasing;


},{"./bounce":6}],8:[function(_dereq_,module,exports){
var HardSwayEasing, SwayEasing,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

SwayEasing = _dereq_("./sway");

HardSwayEasing = (function(_super) {
  __extends(HardSwayEasing, _super);

  function HardSwayEasing() {
    return HardSwayEasing.__super__.constructor.apply(this, arguments);
  }

  HardSwayEasing.prototype.oscillation = function(t) {
    return Math.abs(Math.sin(this.omega * t));
  };

  return HardSwayEasing;

})(SwayEasing);

module.exports = HardSwayEasing;


},{"./sway":10}],9:[function(_dereq_,module,exports){
var Easing, MathHelpers;

MathHelpers = _dereq_("../math/helpers");

Easing = (function() {
  function Easing() {}

  Easing.prototype.calculate = function(ratio) {
    return ratio;
  };

  Easing.prototype.serialize = function() {
    return {};
  };

  Easing.prototype.findOptimalKeyPoints = function(threshold, resolution) {
    var area, halfway, i, keyPoint, keyPoints, loops, result, values;
    if (threshold == null) {
      threshold = 1.0;
    }
    if (resolution == null) {
      resolution = 1000;
    }
    keyPoints = [0];
    values = (function() {
      var _i, _results;
      _results = [];
      for (i = _i = 0; 0 <= resolution ? _i < resolution : _i > resolution; i = 0 <= resolution ? ++_i : --_i) {
        _results.push(this.calculate(i / resolution));
      }
      return _results;
    }).call(this);
    keyPoints = keyPoints.concat(MathHelpers.findTurningPoints(values));
    keyPoints.push(resolution - 1);
    i = 0;
    loops = 1000;
    while (loops--) {
      if (i === keyPoints.length - 1) {
        break;
      }
      area = MathHelpers.areaBetweenLineAndCurve(values, keyPoints[i], keyPoints[i + 1]);
      if (area <= threshold) {
        i++;
      } else {
        halfway = Math.round(keyPoints[i] + (keyPoints[i + 1] - keyPoints[i]) / 2);
        keyPoints.splice(i + 1, 0, halfway);
      }
    }
    if (loops === 0) {
      return [];
    }
    return result = (function() {
      var _i, _len, _results;
      _results = [];
      for (_i = 0, _len = keyPoints.length; _i < _len; _i++) {
        keyPoint = keyPoints[_i];
        _results.push(keyPoint / (resolution - 1));
      }
      return _results;
    })();
  };

  return Easing;

})();

module.exports = Easing;


},{"../math/helpers":12}],10:[function(_dereq_,module,exports){
var BounceEasing, SwayEasing,
  __hasProp = {}.hasOwnProperty,
  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };

BounceEasing = _dereq_("./bounce");

SwayEasing = (function(_super) {
  __extends(SwayEasing, _super);

  function SwayEasing() {
    return SwayEasing.__super__.constructor.apply(this, arguments);
  }

  SwayEasing.prototype.calculate = function(ratio) {
    var t;
    if (ratio >= 1) {
      return 0;
    }
    t = ratio * this.limit;
    return this.exponent(t) * this.oscillation(t);
  };

  SwayEasing.prototype.calculateOmega = function(bounces, limit) {
    return this.bounces * Math.PI / this.limit;
  };

  SwayEasing.prototype.oscillation = function(t) {
    return Math.sin(this.omega * t);
  };

  return SwayEasing;

})(BounceEasing);

module.exports = SwayEasing;


},{"./bounce":6}],11:[function(_dereq_,module,exports){
var Bounce, ComponentClasses, Matrix4D;

Matrix4D = _dereq_("./math/matrix4d");

ComponentClasses = {
  scale: _dereq_("./components/scale"),
  rotate: _dereq_("./components/rotate"),
  translate: _dereq_("./components/translate"),
  skew: _dereq_("./components/skew")
};

Bounce = (function() {
  Bounce.FPS = 30;

  Bounce.counter = 1;

  Bounce.prototype.components = null;

  Bounce.prototype.duration = 0;

  function Bounce() {
    this.components = [];
  }

  Bounce.prototype.scale = function(options) {
    return this.addComponent(new ComponentClasses["scale"](options));
  };

  Bounce.prototype.rotate = function(options) {
    return this.addComponent(new ComponentClasses["rotate"](options));
  };

  Bounce.prototype.translate = function(options) {
    return this.addComponent(new ComponentClasses["translate"](options));
  };

  Bounce.prototype.skew = function(options) {
    return this.addComponent(new ComponentClasses["skew"](options));
  };

  Bounce.prototype.addComponent = function(component) {
    this.components.push(component);
    this.updateDuration();
    return this;
  };

  Bounce.prototype.serialize = function() {
    var component, serialized, _i, _len, _ref;
    serialized = [];
    _ref = this.components;
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      component = _ref[_i];
      serialized.push(component.serialize());
    }
    return serialized;
  };

  Bounce.prototype.deserialize = function(serialized) {
    var options, _i, _len;
    for (_i = 0, _len = serialized.length; _i < _len; _i++) {
      options = serialized[_i];
      this.addComponent(new ComponentClasses[options.type](options));
    }
    return this;
  };

  Bounce.prototype.updateDuration = function() {
    return this.duration = this.components.map(function(component) {
      return component.duration + component.delay;
    }).reduce(function(a, b) {
      return Math.max(a, b);
    });
  };

  Bounce.prototype.define = function(name) {
    this.name = name || Bounce.generateName();
    this.styleElement = document.createElement("style");
    this.styleElement.innerHTML = this.getKeyframeCSS({
      name: this.name,
      prefix: true
    });
    document.body.appendChild(this.styleElement);
    return this;
  };

  Bounce.prototype.applyTo = function(elements, options) {
    var css, deferred, element, prefix, prefixes, _i, _j, _len, _len1, _ref;
    if (options == null) {
      options = {};
    }
    this.define();
    if (!elements.length) {
      elements = [elements];
    }
    prefixes = this.getPrefixes();
    deferred = null;
    if (window.jQuery && window.jQuery.Deferred) {
      deferred = new window.jQuery.Deferred();
    }
    for (_i = 0, _len = elements.length; _i < _len; _i++) {
      element = elements[_i];
      _ref = prefixes.animation;
      for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
        prefix = _ref[_j];
        css = [this.name, "" + this.duration + "ms", "linear", "both"];
        if (options.loop) {
          css.push("infinite");
        }
        element.style["" + prefix + "animation"] = css.join(" ");
      }
    }
    if (!options.loop) {
      setTimeout(((function(_this) {
        return function() {
          if (options.remove) {
            _this.remove();
          }
          if (typeof options.onComplete === "function") {
            options.onComplete();
          }
          if (deferred) {
            return deferred.resolve();
          }
        };
      })(this)), this.duration);
    }
    return deferred;
  };

  Bounce.prototype.remove = function() {
    var _ref;
    if (!this.styleElement) {
      return;
    }
    if (this.styleElement.remove) {
      return this.styleElement.remove();
    } else {
      return (_ref = this.styleElement.parentNode) != null ? _ref.removeChild(this.styleElement) : void 0;
    }
  };

  Bounce.prototype.getPrefixes = function(force) {
    var prefixes, style;
    prefixes = {
      transform: [""],
      animation: [""]
    };
    style = document.createElement("dummy").style;
    if (force || (!("transform" in style) && "webkitTransform" in style)) {
      prefixes.transform = ["-webkit-", ""];
    }
    if (force || (!("animation" in style) && "webkitAnimation" in style)) {
      prefixes.animation = ["-webkit-", ""];
    }
    return prefixes;
  };

  Bounce.prototype.getKeyframeCSS = function(options) {
    var animations, key, keyframeList, keyframes, matrix, prefix, prefixes, transformString, transforms, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2;
    if (options == null) {
      options = {};
    }
    this.name = options.name || Bounce.generateName();
    prefixes = {
      transform: [""],
      animation: [""]
    };
    if (options.prefix || options.forcePrefix) {
      prefixes = this.getPrefixes(options.forcePrefix);
    }
    keyframeList = [];
    keyframes = this.getKeyframes(options);
    _ref = this.keys;
    for (_i = 0, _len = _ref.length; _i < _len; _i++) {
      key = _ref[_i];
      matrix = keyframes[key];
      transformString = "matrix3d" + matrix;
      transforms = [];
      _ref1 = prefixes.transform;
      for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
        prefix = _ref1[_j];
        transforms.push("" + prefix + "transform: " + transformString + ";");
      }
      keyframeList.push("" + (Math.round(key * 100 * 100) / 100) + "% { " + (transforms.join(" ")) + " }");
    }
    animations = [];
    _ref2 = prefixes.animation;
    for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
      prefix = _ref2[_k];
      animations.push("@" + prefix + "keyframes " + this.name + " { \n  " + (keyframeList.join("\n  ")) + " \n}");
    }
    return animations.join("\n\n");
  };

  Bounce.prototype.getKeyframes = function(options) {
    var component, componentKeys, currentTime, frames, i, key, keyframes, keys, matrix, ratio, _i, _j, _k, _l, _len, _len1, _len2, _ref, _ref1;
    if (options == null) {
      options = {};
    }
    keys = [0, 1];
    if (options.optimized) {
      _ref = this.components;
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        component = _ref[_i];
        componentKeys = component.easingObject.findOptimalKeyPoints().map((function(_this) {
          return function(key) {
            return (key * component.duration / _this.duration) + (component.delay / _this.duration);
          };
        })(this));
        if (component.delay) {
          componentKeys.push((component.delay / this.duration) - 0.001);
        }
        keys = keys.concat(componentKeys);
      }
    } else {
      frames = Math.round((this.duration / 1000) * Bounce.FPS);
      for (i = _j = 0; 0 <= frames ? _j <= frames : _j >= frames; i = 0 <= frames ? ++_j : --_j) {
        keys.push(i / frames);
      }
    }
    keys = keys.sort(function(a, b) {
      return a - b;
    });
    this.keys = [];
    keyframes = {};
    for (_k = 0, _len1 = keys.length; _k < _len1; _k++) {
      key = keys[_k];
      if (keyframes[key]) {
        continue;
      }
      matrix = new Matrix4D().identity();
      _ref1 = this.components;
      for (_l = 0, _len2 = _ref1.length; _l < _len2; _l++) {
        component = _ref1[_l];
        currentTime = key * this.duration;
        if ((component.delay - currentTime) > 1e-8) {
          continue;
        }
        ratio = (key - component.delay / this.duration) / (component.duration / this.duration);
        matrix.multiply(component.getEasedMatrix(ratio));
      }
      this.keys.push(key);
      keyframes[key] = matrix.transpose().toFixed(3);
    }
    return keyframes;
  };

  Bounce.generateName = function() {
    return "animation-" + (Bounce.counter++);
  };

  Bounce.isSupported = function() {
    var property, propertyIsSupported, propertyList, propertyLists, style, _i, _j, _len, _len1;
    style = document.createElement("dummy").style;
    propertyLists = [["transform", "webkitTransform"], ["animation", "webkitAnimation"]];
    for (_i = 0, _len = propertyLists.length; _i < _len; _i++) {
      propertyList = propertyLists[_i];
      propertyIsSupported = false;
      for (_j = 0, _len1 = propertyList.length; _j < _len1; _j++) {
        property = propertyList[_j];
        propertyIsSupported || (propertyIsSupported = property in style);
      }
      if (!propertyIsSupported) {
        return false;
      }
    }
    return true;
  };

  return Bounce;

})();

module.exports = Bounce;


},{"./components/rotate":2,"./components/scale":3,"./components/skew":4,"./components/translate":5,"./math/matrix4d":13}],12:[function(_dereq_,module,exports){
var MathHelpers;

MathHelpers = (function() {
  function MathHelpers() {}

  MathHelpers.prototype.sign = function(value) {
    if (value < 0) {
      return -1;
    }
    return 1;
  };

  MathHelpers.prototype.findTurningPoints = function(values) {
    var i, signA, signB, turningPoints, _i, _ref;
    turningPoints = [];
    for (i = _i = 1, _ref = values.length - 1; 1 <= _ref ? _i < _ref : _i > _ref; i = 1 <= _ref ? ++_i : --_i) {
      signA = this.sign(values[i] - values[i - 1]);
      signB = this.sign(values[i + 1] - values[i]);
      if (signA !== signB) {
        turningPoints.push(i);
      }
    }
    return turningPoints;
  };

  MathHelpers.prototype.areaBetweenLineAndCurve = function(values, start, end) {
    var area, curveValue, i, length, lineValue, yEnd, yStart, _i;
    length = end - start;
    yStart = values[start];
    yEnd = values[end];
    area = 0;
    for (i = _i = 0; 0 <= length ? _i <= length : _i >= length; i = 0 <= length ? ++_i : --_i) {
      curveValue = values[start + i];
      lineValue = yStart + (i / length) * (yEnd - yStart);
      area += Math.abs(lineValue - curveValue);
    }
    return area;
  };

  return MathHelpers;

})();

module.exports = new MathHelpers;


},{}],13:[function(_dereq_,module,exports){
var Matrix4D;

Matrix4D = (function() {
  Matrix4D.prototype._array = null;

  function Matrix4D(array) {
    this._array = (array != null ? array.slice(0) : void 0) || [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  }

  Matrix4D.prototype.equals = function(matrix) {
    return this.toString() === matrix.toString();
  };

  Matrix4D.prototype.identity = function() {
    this.setArray([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
    return this;
  };

  Matrix4D.prototype.multiply = function(matrix) {
    var i, j, k, res, value, _i, _j, _k;
    res = new Matrix4D;
    for (i = _i = 0; _i < 4; i = ++_i) {
      for (j = _j = 0; _j < 4; j = ++_j) {
        for (k = _k = 0; _k < 4; k = ++_k) {
          value = res.get(i, j) + this.get(i, k) * matrix.get(k, j);
          res.set(i, j, value);
        }
      }
    }
    return this.copy(res);
  };

  Matrix4D.prototype.transpose = function() {
    var a;
    a = this.getArray();
    this.setArray([a[0], a[4], a[8], a[12], a[1], a[5], a[9], a[13], a[2], a[6], a[10], a[14], a[3], a[7], a[11], a[15]]);
    return this;
  };

  Matrix4D.prototype.get = function(row, column) {
    return this.getArray()[row * 4 + column];
  };

  Matrix4D.prototype.set = function(row, column, value) {
    return this._array[row * 4 + column] = value;
  };

  Matrix4D.prototype.copy = function(matrix) {
    this._array = matrix.getArray();
    return this;
  };

  Matrix4D.prototype.clone = function() {
    return new Matrix4D(this.getArray());
  };

  Matrix4D.prototype.getArray = function() {
    return this._array.slice(0);
  };

  Matrix4D.prototype.setArray = function(array) {
    this._array = array;
    return this;
  };

  Matrix4D.prototype.toString = function() {
    return "(" + (this.getArray().join(", ")) + ")";
  };

  Matrix4D.prototype.toFixed = function(n) {
    var value;
    this._array = (function() {
      var _i, _len, _ref, _results;
      _ref = this._array;
      _results = [];
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        value = _ref[_i];
        _results.push(parseFloat(value.toFixed(n)));
      }
      return _results;
    }).call(this);
    return this;
  };

  return Matrix4D;

})();

module.exports = Matrix4D;


},{}],14:[function(_dereq_,module,exports){
var Vector2D;

Vector2D = (function() {
  Vector2D.prototype.x = 0;

  Vector2D.prototype.y = 0;

  function Vector2D(x, y) {
    this.x = x != null ? x : 0;
    this.y = y != null ? y : 0;
  }

  Vector2D.prototype.add = function(vector) {
    if (!Vector2D.isVector2D(vector)) {
      return this._addScalar(vector);
    }
    this.x += vector.x;
    this.y += vector.y;
    return this;
  };

  Vector2D.prototype._addScalar = function(n) {
    this.x += n;
    this.y += n;
    return this;
  };

  Vector2D.prototype.subtract = function(vector) {
    if (!Vector2D.isVector2D(vector)) {
      return this._subtractScalar(vector);
    }
    this.x -= vector.x;
    this.y -= vector.y;
    return this;
  };

  Vector2D.prototype._subtractScalar = function(n) {
    return this._addScalar(-n);
  };

  Vector2D.prototype.multiply = function(vector) {
    if (!Vector2D.isVector2D(vector)) {
      return this._multiplyScalar(vector);
    }
    this.x *= vector.x;
    this.y *= vector.y;
    return this;
  };

  Vector2D.prototype._multiplyScalar = function(n) {
    this.x *= n;
    this.y *= n;
    return this;
  };

  Vector2D.prototype.divide = function(vector) {
    if (!Vector2D.isVector2D(vector)) {
      return this._divideScalar(vector);
    }
    this.x /= vector.x;
    this.y /= vector.y;
    return this;
  };

  Vector2D.prototype._divideScalar = function(n) {
    return this._multiplyScalar(1 / n);
  };

  Vector2D.prototype.clone = function() {
    return new Vector2D(this.x, this.y);
  };

  Vector2D.prototype.copy = function(vector) {
    this.x = vector.x;
    this.y = vector.y;
    return this;
  };

  Vector2D.prototype.equals = function(vector) {
    return vector.x === this.x && vector.y === this.y;
  };

  Vector2D.prototype.toString = function() {
    return "(" + this.x + ", " + this.y + ")";
  };

  Vector2D.prototype.toFixed = function(n) {
    this.x = parseFloat(this.x.toFixed(n));
    this.y = parseFloat(this.y.toFixed(n));
    return this;
  };

  Vector2D.prototype.toArray = function() {
    return [this.x, this.y];
  };

  Vector2D.isVector2D = function(item) {
    return item instanceof Vector2D;
  };

  return Vector2D;

})();

module.exports = Vector2D;


},{}]},{},[11])
(11)
});

================================================
FILE: demo/demo.css
================================================
body {
  font-family: 'GothamRoundedLight', sans-serif;
  font-weight: 300;
  background-color: rgb(255, 253, 250);
  background-image: url('bg-dot.png');
  background-size: 41px 40px;
  background-position: 0 0;
  background-repeat: repeat;
}

a, strong {
  color: inherit;
  font-family: 'GothamRoundedMedium', sans-serif;
}

a:hover {
  text-decoration: none;
}

.activity-item i {
  float: left;
  margin-top: 3px;
  font-size: 16px;
}

div.activity {
  margin-left: 28px;
  line-height: 1.4em;
}

div.activity-item {
  padding: 7px 12px;
}

div.activity > span {
  display: block;
  font-size: .8em;
}

#custom_container {
  border: 2px solid #ccc;
  width: 500px;
  max-width: 100%;
  margin: 40px auto;
  min-height: 100px;
  border-radius: 5px;
  background: rgba(255, 255, 255, .5);
  overflow: hidden;
}

.logo {
  text-align: center;
  background: rgb(255, 253, 250);
  padding: 0 20px;
  width: 200px;
  margin: 0 auto;
}

select:focus {
  outline: none;
}

select {
  /* General styling */
  height: 30px;
  width: 137px;
  padding-left: 10px;

  color: #222;
  border-radius: 3px;
  border: 0 solid #222;
  margin: 0 3px;

  /* Removes the default <select> styling */
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;

  /* Positions background arrow image */
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAh0lEQVQ4T93TMQrCUAzG8V9x8QziiYSuXdzFC7h4AcELOPQAdXYovZCHEATlgQV5GFTe1ozJlz/kS1IpjKqw3wQBVyy++JI0y1GTe7DCBbMAckeNIQKk/BanALBB+16LtnDELoMcsM/BESDlz2heDR3WePwKSLo5eoxz3z6NNcFD+vu3ij14Aqz/DxGbKB7CAAAAAElFTkSuQmCC');
  background-repeat: no-repeat;
  background-position: 115px center;
}


.button {
  display: inline-block;
  position: relative;
  padding: .8em 1.3em;
  font-size: 11px;
  letter-spacing: 1px;
  font-weight: 800;
  text-transform: uppercase;
  line-height: 1.2;
  outline: 0;
  background: #AC8FFD;
  border: 2px solid #948CE2;
  color: #fff;
  text-shadow: none;
  border-radius: 2px;
}

.button:hover {
  color: #fff;
  background-color: #c0a7fd;
  border-color: #948CE2;
}


.button:disabled {
  background: #dddddd;
  color: #333;
  opacity: .5;
}

.button:disabled:hover {
  background: #dddddd;
  opacity: .5;
}


================================================
FILE: demo/demo.js
================================================
(function () {

  var mojsOpenExample = function (promise) {
    var n = this
    var Timeline = new mojs.Timeline()
    var body = new mojs.Html({
      el: n.barDom,
      x: {500: 0, delay: 0, duration: 500, easing: 'elastic.out'},
      isForce3d: true,
      onComplete: function () {
        promise(function(resolve) {
          resolve()
        })
      }
    })

    var parent = new mojs.Shape({
      parent: n.barDom,
      width: 200,
      height: n.barDom.getBoundingClientRect().height,
      radius: 0,
      x: {[150]: -150},
      duration: 1.2 * 500,
      isShowStart: true
    })

    n.barDom.style['overflow'] = 'visible'
    parent.el.style['overflow'] = 'hidden'

    var burst = new mojs.Burst({
      parent: parent.el,
      count: 10,
      top: n.barDom.getBoundingClientRect().height + 75,
      degree: 90,
      radius: 75,
      angle: {[-90]: 40},
      children: {
        fill: '#EBD761',
        delay: 'stagger(500, -50)',
        radius: 'rand(8, 25)',
        direction: -1,
        isSwirl: true
      }
    })

    const fadeBurst = new mojs.Burst({
      parent: parent.el,
      count: 2,
      degree: 0,
      angle: 75,
      radius: {0: 100},
      top: '90%',
      children: {
        fill: '#EBD761',
        pathScale: [.65, 1],
        radius: 'rand(12, 15)',
        direction: [-1, 1],
        delay: .8 * 500,
        isSwirl: true
      }
    })

    Timeline.add(body, burst, fadeBurst, parent)
    Timeline.play()
  }

  var mojsCloseExample = function (promise) {
    var n = this
    new mojs.Html({
      el: n.barDom,
      x: {0: 500, delay: 0, duration: 250, easing: 'cubic.out'},
      opacity: {1: 0, delay: 0, duration: 250},
      isForce3d: true,
      onComplete: function () {
        promise(function(resolve) {
          resolve()
        })
      }
    }).play()
  }

  var bouncejsOpenExample = function () {
    var n = this
    new Bounce()
      .translate({
        from: {x: 450, y: 0},
        to: {x: 0, y: 0},
        easing: 'bounce',
        duration: 1000,
        bounces: 4,
        stiffness: 3
      })
      .scale({
        from: {x: 1.2, y: 1},
        to: {x: 1, y: 1},
        easing: 'bounce',
        duration: 1000,
        delay: 100,
        bounces: 4,
        stiffness: 1
      })
      .scale({
        from: {x: 1, y: 1.2},
        to: {x: 1, y: 1},
        easing: 'bounce',
        duration: 1000,
        delay: 100,
        bounces: 6,
        stiffness: 1
      })
      .applyTo(n.barDom, {
        onComplete: function () {
          n.resume()
        }
      })
  }

  var bouncejsCloseExample = function () {
    var n = this
    new Bounce()
      .translate({
        from: {x: 0, y: 0},
        to: {x: 450, y: 0},
        easing: 'bounce',
        duration: 500,
        bounces: 4,
        stiffness: 1
      })
      .applyTo(n.barDom, {
        onComplete: function () {
          n.barDom.parentNode.removeChild(n.barDom)
        }
      })
  }

  var velocityShowExample = function () {
    var n = this

    Velocity(n.barDom, {
      left: 450,
      scaleY: 2
    }, {
      duration: 0
    })
    Velocity(n.barDom, {
      left: 0,
      scaleY: 1
    }, {
      easing: [8, 8]
    })
  }

  var velocityCloseExample = function () {
    var n = this

    Velocity(n.barDom, {
      left: '+=-50'
    }, {
      easing: [8, 8, 2],
      duration: 350
    })
    Velocity(n.barDom, {
      left: 450,
      scaleY: .2,
      height: 0,
      margin: 0
    }, {
      easing: [8, 8],
      complete: function () {
        n.barDom.parentNode.removeChild(n.barDom)
      }
    })
  }

  Noty.overrideDefaults({
    layout: 'topRight',
    theme: 'mint',
    closeWith: ['click'],
    timeout: 5000,
    animation: {
      open: mojsOpenExample,
      close: mojsCloseExample
    }
  })

   setTimeout(function() {
     new Noty({
       type: 'success',
       layout: 'bottomRight',
       text: "<b>Testing 2<br/><br/> ",
       timeout: false,
       modal: true,
       closeWith: ['click'],
       animation: {
         open: false,
         close: false
       }
     }).show()
   }, 2000)

  // setTimeout(function() {
  //   new Noty({
  //     text: 'B) This notification <strong>plays a sound</strong> and <strong>updates the document title</strong> with count <i>if document is hidden</i>',
  //     type: 'warning',
  //     layout: 'topRight',
  //     id: 'customID1'
  //   }).show()
  // }, 3000)

//    setTimeout(function() {
//      new Noty({
//        text: 'B) This notification <strong>plays a sound</strong> and <strong>updates the document title</strong> with count <i>if document is hidden</i>',
//        type: 'warning',
//        layout: 'topRight',
//        sounds: {
//          sources: ['sound-example.wav'],
//          volume: .2,
//          conditions: ['docHidden']
//        },
//        titleCount: {
//          conditions: ['docHidden']
//        },
//        closeWith: ['click', 'backdrop'],
//        queue: "Q2",
//        timeout: 2000,
//        killer: "Q1",
//        modal: true
//      }).show()
//    }, 5100)

  var notes = []
  notes['alert'] = 'Best check yo self, you\'re not looking too good.'
  notes['error'] = 'Change a few things up and try submitting again.'
  notes['success'] = 'You successfully read this important alert message.'
  notes['information'] = 'This alert needs your attention, but it\'s not super important.'
  notes['warning'] = '<strong>Warning!</strong> <br /> Best check yo self, you\'re not looking too good.'

  document.querySelector('.runner').addEventListener('click', function (e) {
    e.preventDefault()

    var layout = document.querySelector('select#layout')
    var type = document.querySelector('select#type')

    layout = layout.options[layout.selectedIndex].text
    type = type.options[type.selectedIndex].text

    var types = ['alert', 'error', 'success', 'information', 'warning']
    if (type === 'random')
      type = types[Math.floor(Math.random() * types.length)]

    if (layout === 'inline') {
      new Noty({
        text: notes[type],
        type: type,
        timeout: 5000,
        container: '#custom_container'
      }).show()
      return false
    }

    new Noty({
      text: notes[type],
      type: type,
      timeout: 5000,
      layout: layout
    }).show()

    return false
  })

  function getRandomInt (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min
  }

  var notification_alert = '<div class="activity-item"> <i class="fa fa-tasks text-warning"></i> <div class="activity"> There are <a href="/">6 new tasks</a> waiting for you. Don\'t forget! <span>3 hours ago</span> </div> </div>',
    notification_info = '<div class="activity-item"> <i class="fa fa-check text-success"></i> <div class="activity"> Mail server was updated. See <a href="#">changelog</a> <span>2 hours ago</span> </div> </div>',
    notification_success = '<div class="activity-item"> <i class="fa fa-heart text-danger"></i> <div class="activity"> Your <a href="#">latest post</a> was liked by <a href="#">John Doe</a> <span>35 minutes ago</span> </div> </div>',
    notification_warning = '<div class="activity-item"> <i class="fa fa-shopping-cart text-success"></i> <div class="activity"> <a href="#">Jane</a> ordered 2 copies of <a href="#">OEM license</a> <span>14 minutes ago</span> </div> </div>',
    notification_error = '<div class="activity-item"> <i class="fa fa-times-circle text-danger"></i> <div class="activity"> Opps! something bad happend! <span>14 minutes ago</span> </div> </div>'

  Noty.setMaxVisible(5) // global queue's max visible amount (default is 5)
  Noty.setMaxVisible(5, 'bottomRight')

//            var n1 = new Noty({
//                text   : notification_alert,
//                type   : 'alert',
//                timeout: false
//            }).show();
//            var n2 = new Noty({
//                text   : notification_success,
//                type   : 'success',
//                timeout: getRandomInt(4000, 10000)
//            }).show();
//
//            var n3 = new Noty({
//                text   : notification_warning,
//                type   : 'warning',
//                timeout: getRandomInt(4000, 10000)
//            }).show();
//            var n4 = new Noty({
//                text   : notification_error,
//                type   : 'error',
//                timeout: getRandomInt(4000, 10000)
//            }).show();
//            var n5 = new Noty({
//                text   : notification_info,
//                type   : 'info',
//                timeout: getRandomInt(4000, 10000)
//            }).show();
//            var n6 = new Noty({
//                text   : notification_success,
//                type   : 'success',
//                timeout: getRandomInt(4000, 10000)
//            }).show();

//            setTimeout(function() {
//                n1.setText('Opps something is changed!', true);
//            }, 1000);
//
//            setTimeout(function() {
//                n1.setTheme('relax', false);
//            }, 1000);
//
//            setTimeout(function() {
//                n1.setTheme('semanticui', false);
//            }, 3000);
//
//            setTimeout(function() {
//                n1.setTheme('relax', true);
//            }, 3000);
//
//            setTimeout(function() {
//                n1.close();
//            }, 4000);
//
//            setTimeout(function() {
//                n1.show();
//            }, 5000);

//            var alternate_usage_example = new Noty({
//                text   : "Noty v3 - usage:2",
//                timeout: false,
//                type   : 'warning',
//                buttons: [
//                    Noty.button('button 1', 'btn btn-success', function () {
//                        console.log('button 1 clicked');
//                    }, {id: 'button1', 'data-status': 'ok'}),
//                    Noty.button('button 2', 'btn btn-error', function () {
//                        console.log('button 2 clicked');
//                        alternate_usage_example.close();
//                    })
//                ]
//            }).on('beforeShow', function () {
//                console.log('usage:2 beforeShow');
//            }).on('onShow', function () {
//                console.log('usage:2 onShow');
//            }).on('onTemplate', function () {
//                console.log('usage:2 onTemplate');
//            }).on('afterShow', function () {
//                console.log('usage:2 afterShow');
//            }).show();

})()


================================================
FILE: demo/fonts/stylesheet.css
================================================
@font-face {
    font-family: 'GothamRoundedBold';
    src: url('gothamrnd-bold.eot');
    src: url('gothamrnd-bold.eot') format('embedded-opentype'),
         url('gothamrnd-bold.woff') format('woff'),
         url('gothamrnd-bold.ttf') format('truetype'),
         url('gothamrnd-bold.svg#GothamRoundedBold') format('svg');
}

@font-face {
    font-family: 'GothamRoundedBook';
    src: url('gothamrnd-book.eot');
    src: url('gothamrnd-book.eot') format('embedded-opentype'),
         url('gothamrnd-book.woff') format('woff'),
         url('gothamrnd-book.ttf') format('truetype'),
         url('gothamrnd-book.svg#GothamRoundedBook') format('svg');
}
@font-face {
    font-family: 'GothamRoundedMedium';
    src: url('gothamrnd-medium.eot');
    src: url('gothamrnd-medium.eot') format('embedded-opentype'),
         url('gothamrnd-medium.woff') format('woff'),
         url('gothamrnd-medium.ttf') format('truetype'),
         url('gothamrnd-medium.svg#GothamRoundedMedium') format('svg');
}
@font-face {
    font-family: 'GothamRoundedLight';
    src: url('gothamrnd-light.eot');
    src: url('gothamrnd-light.eot') format('embedded-opentype'),
         url('gothamrnd-light.woff') format('woff'),
         url('gothamrnd-light.ttf') format('truetype'),
         url('gothamrnd-light.svg#GothamRoundedLight') format('svg');
}


================================================
FILE: demo/index.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>NOTY v3 Demo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <link href="https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700&amp;subset=latin-ext" rel="stylesheet">
  <link rel="stylesheet" href="../lib/noty.css"/>
  <link rel="stylesheet" href="../lib/themes/mint.css"/>
  <link rel="stylesheet" href="demo/animate.css"/>
  <link rel="stylesheet" href="demo/fonts/stylesheet.css"/>
  <link rel="stylesheet" href="demo/font-awesome/css/font-awesome.min.css"/>
  <link rel="stylesheet" href="demo/demo.css"/>
</head>
<body>

<div class="logo">
  <img src="demo/noty-logo.png" alt="">
</div>

<div>
  <p class="mt30" style="text-align: center">
    <select class="" name="layout" id="layout">
      <option value="top">top</option>
      <option value="topLeft">topLeft</option>
      <option value="topCenter">topCenter</option>
      <option value="topRight" selected>topRight</option>
      <option value="center">center</option>
      <option value="centerLeft">centerLeft</option>
      <option value="centerRight">centerRight</option>
      <option value="bottom">bottom</option>
      <option value="bottomLeft">bottomLeft</option>
      <option value="bottomCenter">bottomCenter</option>
      <option value="bottomRight">bottomRight</option>
      <optgroup label="Custom Container">
        <option value="inline">inline</option>
      </optgroup>
    </select>
    <select name="type" id="type">
      <option value="random" selected>random</option>
      <option value="alert">alert</option>
      <option value="success">success</option>
      <option value="warning">warning</option>
      <option value="error">error</option>
      <option value="information">information</option>
    </select>
    <br><br>
    <a href="#run" class="btn button runner"
       style="position: relative; top: -3px; margin-left: 10px; text-decoration: none">CREATE</a>
  </p>
</div>

<div id="custom_container">
  <h2 style="text-align: center">Custom Container</h2>
</div>

<script src="//cdn.jsdelivr.net/velocity/1.5/velocity.min.js"></script>
<script src="//cdn.jsdelivr.net/mojs/latest/mo.min.js"></script>
<script type="text/javascript" src="demo/bouncejs/bounce.js"></script>
<script type="text/javascript" src="../lib/noty.js"></script>
<script type="text/javascript" src="demo/demo.js"></script>

</body>
</html>


================================================
FILE: demo/push.html
================================================
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>NOTY v3 Push Demo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <link href="https://fonts.googleapis.com/css?family=Ubuntu:300,400,500,700&amp;subset=latin-ext" rel="stylesheet">
  <link rel="stylesheet" href="../lib/noty.css"/>
  <link rel="stylesheet" href="animate.css"/>
  <link rel="stylesheet" href="fonts/stylesheet.css"/>
  <link rel="stylesheet" href="font-awesome/css/font-awesome.min.css"/>
  <link rel="stylesheet" href="demo.css"/>

  <link rel="manifest" href="../manifest.json">
</head>
<body>

<div class="logo">
  <img src="noty-logo.png" alt="">
</div>

<div>
  <p class="mt30" style="text-align: center">
    <button class="btn button request">REQUEST PERMISSION</button>
  </p>
</div>

<div id="logs-wrapper">
  <pre id="logs"></pre>
</div>

<script type="text/javascript" src="../lib/noty.js"></script>
<script type="text/javascript" src="store.everything.min.js"></script>

<script type="text/javascript">
  (function () {

    function addListener (el, events, cb, useCapture = false) {
      events = events.split(' ')
      for (let i = 0; i < events.length; i++) {
        if (document.addEventListener) {
          el.addEventListener(events[i], cb, useCapture)
        } else if (document.attachEvent) {
          el.attachEvent('on' + events[i], cb)
        }
      }
    }

    var logs = document.querySelector('#logs')
    var reqBtn = document.querySelector('.request')

    window.NotyPush = Noty.Push()
      .on('onPermissionGranted', function () {
        console.log('Perm: granted')
        logs.innerHTML += 'Perm: granted' + '\n'
        updateBtn()
      })
      .on('onPermissionDenied', function () {
        console.log('Perm: denied')
        logs.innerHTML += 'Perm: denied' + '\n'
        updateBtn()
      })
      .on('onSubscriptionSuccess', function (subData) {
        console.log('Subscription:', subData)
        logs.innerHTML += 'Subscription: (YOU NEED TO STORE THIS VALUES FOR LATER USE)' + '\n' + JSON.stringify(subData, null, 2) + '\n'

        store.set('subData', subData)
        updateBtn()
      })
      .on('onSubscriptionCancel', function (subData) {
        console.log('Subscription: canceled')
        logs.innerHTML += 'Subscription: canceled' + '\n'
        updateBtn()
      })
      .on('onWorkerSuccess', function () {
        console.log('Worker: installed')
        logs.innerHTML += 'Worker: installed' + '\n'
        updateBtn()
      })
      .on('onWorkerError', function (err) {
        console.log('Worker: failed', err)
        logs.innerHTML += 'Worker: failed' + '\n' + JSON.stringify(err, null, 2) + '\n'
        updateBtn()
      })
      .on('onWorkerNotSupported', function (err) {
        console.log('Worker: not supported', err)
        logs.innerHTML += 'Worker: not supported' + '\n'
        updateBtn()
      })

    addListener(reqBtn, 'click', function (e) {
      e.preventDefault()

      var op = reqBtn.attributes['data-op']
      if (op === 'request') {
        NotyPush.requestSubscription(true)
      } else if (op === 'print') {
        logs.innerHTML += 'Subscription: (YOU NEED TO STORE THIS VALUES FOR LATER USE)' + '\n' + JSON.stringify(store.get('subData'), null, 2) + '\n'
      }

      return false
    })

    function updateBtn () {
      if (window.NotyPush.getPermissionStatus() === 'granted') {
        if (window.NotyPush.isSWRegistered()) {
          reqBtn.disabled = false
          reqBtn.innerHTML = 'Print Subscription Data <br> (granted:sw:ok)'
          reqBtn.attributes['data-op'] = 'print'
        } else {
          reqBtn.disabled = false
          reqBtn.innerHTML = 'Print Subscription Data <br> (granted:sw:fail)'
          reqBtn.attributes['data-op'] = 'request'
        }
      } else if (window.NotyPush.getPermissionStatus() === 'denied') {
        reqBtn.innerHTML = 'Push is blocked by user'
        reqBtn.disabled = true
      } else if (window.NotyPush.getPermissionStatus() === 'default') {
        reqBtn.innerHTML = 'Request Subscription'
        reqBtn.disabled = false
        reqBtn.attributes['data-op'] = 'request'
      }
    }

    updateBtn()

  })()
</script>

</body>
</html>


================================================
FILE: demo/sendpush.js
================================================
const webpush = require('web-push')

const vapidKeys = webpush.generateVAPIDKeys()

// Create a project on the Firebase Developer Console for the key
// https://console.firebase.google.com/
webpush.setGCMAPIKey(process.env.NOTY_PUSH_API_KEY)

webpush.setVapidDetails(
  'mailto:nedimarabaci@gmail.com',
  vapidKeys.publicKey,
  vapidKeys.privateKey
)

const pushSubscription = {
  endpoint: '<-https://android.googleapis.com/gcm/send/dF3pK2rWhOQ..........->',
  keys: {
    auth: '<-insert-auth-key-here->',
    p256dh: '<-insert-p256dh-key-here->'
  }
}

webpush.sendNotification(pushSubscription, JSON.stringify({
  title: 'Noty title',
  body: 'Noty body',
  icon: 'https://avatars1.githubusercontent.com/u/3040386?v=3&s=200',
  image: 'https://cdn.dribbble.com/users/252805/screenshots/2760603/dribbble-notification.png',
  url: 'http://ned.im/noty/?ref=webPushTest',
  actions: [
    {action: 'actionYes', 'title': 'Yes', 'icon': 'https://cdn2.iconfinder.com/data/icons/navigation-set-arrows-part-two/32/Check-128.png'},
    {action: 'actionNo', 'title': 'No', 'icon': 'https://cdn0.iconfinder.com/data/icons/navigation-set-arrows-part-one/32/Close-128.png'}
  ]
}))


================================================
FILE: docs/.nojekyll
================================================


================================================
FILE: docs/README.md
================================================
# ![logo](_media/noty-v3-logo.png)

> A Dependency-free notification library

<div style="position:relative;">
    <iframe src="https://smashing.tools/widget" frameBorder="0" height="257" width="320" style="border-radius: 20px; pointer-events: none; margin: 0"></iframe>
    <a style="position:absolute; top:0; left:0; display:inline-block; width:320px; height:257px; z-index:5;" target="_blank" href="https://smashing.tools?ref=ned.im">
    </a>
</div>

<p>
<button id="example-runner" class="button">Show me a notification</button>
</p>

<a class="github-button" href="https://github.com/needim/noty" data-icon="octicon-star" data-size="large" data-show-count="true" aria-label="Star needim/noty on GitHub">Star</a>
<a class="github-button" href="https://github.com/needim/noty/fork" data-icon="octicon-repo-forked" data-size="large" data-show-count="true" aria-label="Fork needim/noty on GitHub">Fork</a>
<a class="github-button" href="https://github.com/needim/noty/subscription" data-icon="octicon-eye" data-size="large" data-show-count="true" aria-label="Watch needim/noty on GitHub">Watch</a>
<a class="github-button" href="https://github.com/needim" data-size="large" data-show-count="true" aria-label="Follow @needim on GitHub">Follow @needim</a>

<p align="left">
<a href="https://github.com/needim/noty/releases"><img src="https://img.shields.io/github/release/needim/noty.svg" alt="GitHub release"></a>
<a href="https://bower.io/"><img src="https://img.shields.io/bower/v/noty.svg" alt="Bower version"></a>
<a href="https://www.npmjs.com/package/noty"><img src="https://img.shields.io/npm/v/noty.svg" alt="NPM version"></a>
<a href="https://packagist.org/packages/needim/noty"><img src="https://img.shields.io/packagist/v/needim/noty.svg" alt="Packagist version"></a>
<br>
<a href="https://www.npmjs.com/package/noty"><img src="https://img.shields.io/npm/dm/noty.svg?label=npm%20downloads" alt="NPM Downloads"></a>
<a href="https://github.com/needim/noty/graphs/contributors"><img src="https://img.shields.io/github/contributors/needim/noty.svg" alt="Contributors"></a>
</p>

##  Sponsored By

<div class="supported-by" style="margin-right: 20px">
    <a target="_blank" href="https://idealecasinos.nl/">
        <img src="_media/ideal_casinos_logo_140_140.svg" width="120" alt="online casinos met ideal">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://www.correctcasinos.com/free-slots/">
        <img src="_media/correct-casino-logo.svg" width="250" alt="Best Free Slots">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://www.browserstack.com?ref=notyjs">
        <img src="_media/browserstack.svg" width="220" alt="">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://www.boostmmr.com/">
        <img src="https://i.ibb.co/99682Vb/boostmmr.jpg" width="180" alt="">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://goread.io/buy-instagram-followers">
        <img src="_media/Favicongoread.png" width="85" alt="Buy Instagram Followers">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://nettikasinot.org" style="background: #2B5FC1;
    padding: 9px 10px 13px 10px;">
        <img src="_media/nettikasinot.svg" width="185" alt="Nettikasinot">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://www.gambledex.com/">
        <img src="_media/gambledex.png" width="80" alt="Gambledex">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://casinoshunter.com/online-casinos/real-money/">
        <img src="_media/casinoshunter-dark.png" width="150" alt="Casinos Hunter">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://reddogcasino.com/en/games/blackjack">
        <img src="_media/Red-Dog-Casino-Logo.png" width="150" alt="RedDogCasino">
    </a>
</div>

<div class="supported-by">
    <a target="_blank" href="https://slotsempire.com">
        <img src="_media/slots-empire.webp" width="150" alt="Online Slots Empire Casino">
    </a>
</div>

##  Became a Patron

If you enjoy my work and want to support me creating stuff, I'm on Patreon!<br>
<a class="jmgFob" href="https://www.patreon.com/bePatron?u=5075261" data-patreon-widget-type="become-patron-button">
<span class="sc-ifAKCX hyFnYR"><svg viewBox="0 0 569 546" version="1.1" xmlns="http://www.w3.org/2000/svg"><title>Patreon logo</title><g><circle data-color="1" id="Oval" cx="362.589996" cy="204.589996" r="204.589996"></circle><rect data-color="2" id="Rectangle" x="0" y="0" width="100" height="545.799988"></rect></g></svg></span>
Become a Patron!
</a>

!> v2 Documentation is <a href="/noty/v2">here</a>

## Features

- Dependency-free
- UMD
- Web Push Notifications with Service Worker support
- Named queue system
- Has 11 layouts, 5 notification styles, 5+ themes
- Custom container (inline notifications)
- Confirm notifications
- TTL with timeout option
- Progress bar indicator for timed notifications
- Supports css animations, **animate.css**, **mojs**, **bounce.js**, **velocity** and others
- 2 close options: click, button
- API & Callbacks
- Custom templating
- Document visibility control (blur, focus)


================================================
FILE: docs/_assets/docs.js
================================================
var velocityShow = function (promise) {
  var n = this
  $.Velocity(n.barDom, {
    left: 450,
    scaleY: 2
  }, {
      duration: 0
    })
  $.Velocity(n.barDom, {
    left: 0,
    scaleY: 1
  }, {
      easing: [8, 8],
      complete: function () {
        promise(function (resolve) {
          resolve()
        })
      }
    })
}

var velocityClose = function (promise) {
  var n = this
  $.Velocity(n.barDom, {
    left: '+=-50'
  }, {
      easing: [8, 8, 2],
      duration: 350
    })
  $.Velocity(n.barDom, {
    left: 450,
    scaleY: .2,
    height: 0,
    margin: 0
  }, {
      easing: [8, 8],
      complete: function () {
        promise(function (resolve) {
          resolve()
        })
      }
    })
}

var mojsShow = function (promise) {
  var n = this
  var Timeline = new mojs.Timeline()
  var body = new mojs.Html({
    el: n.barDom,
    x: { 500: 0, delay: 0, duration: 500, easing: 'elastic.out' },
    isForce3d: true,
    onComplete: function () {
      promise(function (resolve) {
        resolve()
      })
    }
  })

  var parent = new mojs.Shape({
    parent: n.barDom,
    width: 200,
    height: n.barDom.getBoundingClientRect().height,
    radius: 0,
    x: { [150]: -150 },
    duration: 1.2 * 500,
    isShowStart: true
  })

  n.barDom.style['overflow'] = 'visible'
  parent.el.style['overflow'] = 'hidden'

  var burst = new mojs.Burst({
    parent: parent.el,
    count: 10,
    top: n.barDom.getBoundingClientRect().height + 75,
    degree: 90,
    radius: 75,
    angle: { [-90]: 40 },
    children: {
      fill: '#EBD761',
      delay: 'stagger(500, -50)',
      radius: 'rand(8, 25)',
      direction: -1,
      isSwirl: true
    }
  })

  var fadeBurst = new mojs.Burst({
    parent: parent.el,
    count: 2,
    degree: 0,
    angle: 75,
    radius: { 0: 100 },
    top: '90%',
    children: {
      fill: '#EBD761',
      pathScale: [.65, 1],
      radius: 'rand(12, 15)',
      direction: [-1, 1],
      delay: .8 * 500,
      isSwirl: true
    }
  })

  Timeline.add(body, burst, fadeBurst, parent)
  Timeline.play()
}

var mojsClose = function (promise) {
  var n = this
  new mojs.Html({
    el: n.barDom,
    x: { 0: 500, delay: 10, duration: 500, easing: 'cubic.out' },
    isForce3d: true,
    onComplete: function () {
      promise(function (resolve) {
        resolve()
      })
    }
  }).play()
}

var bouncejsShow = function (promise) {
  var n = this
  new Bounce()
    .translate({
      from: { x: 450, y: 0 }, to: { x: 0, y: 0 },
      easing: 'bounce',
      duration: 1000,
      bounces: 4,
      stiffness: 3
    })
    .scale({
      from: { x: 1.2, y: 1 }, to: { x: 1, y: 1 },
      easing: 'bounce',
      duration: 1000,
      delay: 100,
      bounces: 4,
      stiffness: 1
    })
    .scale({
      from: { x: 1, y: 1.2 }, to: { x: 1, y: 1 },
      easing: 'bounce',
      duration: 1000,
      delay: 100,
      bounces: 6,
      stiffness: 1
    })
    .applyTo(n.barDom, {
      onComplete: function () {
        promise(function (resolve) {
          resolve()
        })
      }
    })
}

var bouncejsClose = function (promise) {
  var n = this
  new Bounce()
    .translate({
      from: { x: 0, y: 0 }, to: { x: 450, y: 0 },
      easing: 'bounce',
      duration: 500,
      bounces: 4,
      stiffness: 1
    })
    .applyTo(n.barDom, {
      onComplete: function () {
        promise(function (resolve) {
          resolve()
        })
      }
    })
}

$('body').on('click', '#example-runner', function (e) {
  new Noty({
    text: '<div class="text-left">I\'m an example notification. <strong>Hi!</strong></div>',
    type: 'warning',
    theme: 'mint',
    layout: 'topRight',
    timeout: 4000,
    animation: {
      open: mojsShow,
      close: mojsClose
    }
  }).show()
})

$('body').on('click', '#example-animatecss', function (e) {
  new Noty({
    type: 'warning',
    text: 'NOTY - a Dependency-free notification library!',
    animation: {
      open: 'animated bounceInRight', // Animate.css class names
      close: 'animated bounceOutRight' // Animate.css class names
    }
  }).show();
})

$('body').on('click', '#example-bouncejs', function (e) {
  new Noty({
    type: 'warning',
    text: 'NOTY - a Dependency-free notification library!',
    animation: {
      open: bouncejsShow,
      close: bouncejsClose
    }
  }).show();
})

$('body').on('click', '#example-mojs', function (e) {
  new Noty({
    type: 'warning',
    text: 'NOTY - a Dependency-free notification library!',
    animation: {
      open: mojsShow,
      close: mojsClose
    }
  }).show();
})

$('body').on('click', '#example-velocity', function (e) {
  new Noty({
    type: 'warning',
    text: 'NOTY - a Dependency-free notification library!',
    animation: {
      open: velocityShow,
      close: velocityClose
    }
  }).show();
})

setTimeout(function () {
  new Noty({
    text: '<div class="text-center">Wubba lubba dub dub! <strong>v3.1.3 released!</strong></div>',
    type: 'information',
    theme: 'mint',
    layout: 'topRight',
    timeout: 4000,
    animation: {
      open: mojsShow,
      close: mojsClose
    }
  }).show()
}, 2000)

function RenderPreviews () {
  console.log("run")

  Noty.setMaxVisible(999999999);

  $themePreview = $(".theme-previews")
  $themePreviews = ["mint", "sunset", "relax", "nest", "metroui", "semanticui", "light", "bootstrap-v3", "bootstrap-v4"]
  if ($themePreview.length != 0) {

    $.each($themePreviews, function (i, theme) {

      $(".theme-preview-" + theme).append($("<h4>" + theme + "</h4>"))

      console.log(theme)

      generatePreview(theme, 'alert')
      generatePreview(theme, 'success')
      generatePreview(theme, 'warning')
      generatePreview(theme, 'error')
      generatePreview(theme, 'information')
      generatePreview(theme, 'confirm')

    });

    function generatePreview (theme, type) {
      var notes = [];
      notes['alert'] = 'Best check yo self, you\'re not looking too good.';
      notes['error'] = 'Change a few things up and try submitting again.';
      notes['success'] = 'You successfully read this important alert message.';
      notes['information'] = 'This alert needs your attention, but it\'s not super important.';
      notes['warning'] = '<strong>Warning!</strong> <br /> Best check yo self, you\'re not looking too good.';
      notes['confirm'] = 'Do you want to continue?';
      new Noty({
        text: notes[type],
        container: ".theme-preview-" + theme,
        type: type,
        theme: theme,
        dismissQueue: true,
        force: false,
        closeWith: [],
        buttons: (type != 'confirm') ? false : [
          Noty.button('YES', 'btn btn-success', function () {
            console.log('button 1 clicked');
          }),

          Noty.button('NO', 'btn btn-error', function () {
            console.log('button 2 clicked');
          })
        ]
      }).show()
    }

  } else {
    console.log("shit")
  }
}



================================================
FILE: docs/_assets/docsify.js
================================================
(function () {
'use strict';

/**
 * Create a cached version of a pure function.
 */
function cached (fn) {
  var cache = Object.create(null);
  return function cachedFn (str) {
    var hit = cache[str];
    return hit || (cache[str] = fn(str))
  }
}

/**
 * Hyphenate a camelCase string.
 */
var hyphenate = cached(function (str) {
  return str.replace(/([A-Z])/g, function (m) { return '-' + m.toLowerCase(); })
});

/**
 * Simple Object.assign polyfill
 */
var merge = Object.assign || function (to) {
  var arguments$1 = arguments;

  var hasOwn = Object.prototype.hasOwnProperty;

  for (var i = 1; i < arguments.length; i++) {
    var from = Object(arguments$1[i]);

    for (var key in from) {
      if (hasOwn.call(from, key)) {
        to[key] = from[key];
      }
    }
  }

  return to
};

/**
 * Check if value is primitive
 */
function isPrimitive (value) {
  return typeof value === 'string' || typeof value === 'number'
}

/**
 * Perform no operation.
 */
function noop () {}

/**
 * Check if value is function
 */
function isFn (obj) {
  return typeof obj === 'function'
}

var config = merge({
  el: '#app',
  repo: '',
  maxLevel: 6,
  subMaxLevel: 0,
  loadSidebar: null,
  loadNavbar: null,
  homepage: 'README.md',
  coverpage: '',
  basePath: '',
  auto2top: false,
  name: '',
  themeColor: '',
  nameLink: window.location.pathname,
  autoHeader: false,
  executeScript: null,
  noEmoji: false,
  ga: '',
  mergeNavbar: false,
  formatUpdated: '',
  externalLinkTarget: '_blank',
  routerModel: 'hash',
  noCompileLinks: []
}, window.$docsify);

var script = document.currentScript ||
  [].slice.call(document.getElementsByTagName('script'))
    .filter(function (n) { return /docsify\./.test(n.src); })[0];

if (script) {
  for (var prop in config) {
    var val = script.getAttribute('data-' + hyphenate(prop));

    if (isPrimitive(val)) {
      config[prop] = val === '' ? true : val;
    }
  }

  if (config.loadSidebar === true) { config.loadSidebar = '_sidebar.md'; }
  if (config.loadNavbar === true) { config.loadNavbar = '_navbar.md'; }
  if (config.coverpage === true) { config.coverpage = '_coverpage.md'; }
  if (config.repo === true) { config.repo = ''; }
  if (config.name === true) { config.name = ''; }
}

window.$docsify = config;

function initLifecycle (vm) {
  var hooks = [
    'init',
    'mounted',
    'beforeEach',
    'afterEach',
    'doneEach',
    'ready'
  ];

  vm._hooks = {};
  vm._lifecycle = {};
  hooks.forEach(function (hook) {
    var arr = vm._hooks[hook] = [];
    vm._lifecycle[hook] = function (fn) { return arr.push(fn); };
  });
}

function callHook (vm, hook, data, next) {
  if ( next === void 0 ) next = noop;

  var queue = vm._hooks[hook];

  var step = function (index) {
    var hook = queue[index];
    if (index >= queue.length) {
      next(data);
    } else {
      if (typeof hook === 'function') {
        if (hook.length === 2) {
          hook(data, function (result) {
            data = result;
            step(index + 1);
          });
        } else {
          var result = hook(data);
          data = result !== undefined ? result : data;
          step(index + 1);
        }
      } else {
        step(index + 1);
      }
    }
  };

  step(0);
}

var cacheNode = {};

/**
 * Get Node
 * @param  {String|Element} el
 * @param  {Boolean} noCache
 * @return {Element}
 */
function getNode (el, noCache) {
  if ( noCache === void 0 ) noCache = false;

  if (typeof el === 'string') {
    if (typeof window.Vue !== 'undefined') {
      return find(el)
    }
    el = noCache ? find(el) : (cacheNode[el] || (cacheNode[el] = find(el)));
  }

  return el
}

var $ = document;

var body = $.body;

var head = $.head;

/**
 * Find element
 * @example
 * find('nav') => document.querySelector('nav')
 * find(nav, 'a') => nav.querySelector('a')
 */
function find (el, node) {
  return node ? el.querySelector(node) : $.querySelector(el)
}

/**
 * Find all elements
 * @example
 * findAll('a') => [].slice.call(document.querySelectorAll('a'))
 * findAll(nav, 'a') => [].slice.call(nav.querySelectorAll('a'))
 */
function findAll (el, node) {
  return [].slice.call(node ? el.querySelectorAll(node) : $.querySelectorAll(el))
}

function create (node, tpl) {
  node = $.createElement(node);
  if (tpl) { node.innerHTML = tpl; }
  return node
}

function appendTo (target, el) {
  return target.appendChild(el)
}

function before (target, el) {
  return target.insertBefore(el, target.children[0])
}

function on (el, type, handler) {
  isFn(type)
    ? window.addEventListener(el, type)
    : el.addEventListener(type, handler);
}

function off (el, type, handler) {
  isFn(type)
    ? window.removeEventListener(el, type)
    : el.removeEventListener(type, handler);
}

/**
 * Toggle class
 *
 * @example
 * toggleClass(el, 'active') => el.classList.toggle('active')
 * toggleClass(el, 'add', 'active') => el.classList.add('active')
 */
function toggleClass (el, type, val) {
  el && el.classList[val ? type : 'toggle'](val || type);
}


var dom = Object.freeze({
	getNode: getNode,
	$: $,
	body: body,
	head: head,
	find: find,
	findAll: findAll,
	create: create,
	appendTo: appendTo,
	before: before,
	on: on,
	off: off,
	toggleClass: toggleClass
});

var inBrowser = typeof window !== 'undefined';

var isMobile = inBrowser && document.body.clientWidth <= 600;

/**
 * @see https://github.com/MoOx/pjax/blob/master/lib/is-supported.js
 */
var supportsPushState = inBrowser && (function () {
  // Borrowed wholesale from https://github.com/defunkt/jquery-pjax
  return window.history &&
    window.history.pushState &&
    window.history.replaceState &&
    // pushState isn’t reliable on iOS until 5.
    !navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/)
})();

/**
 * Render github corner
 * @param  {Object} data
 * @return {String}
 */
function corner (data) {
  if (!data) { return '' }
  if (!/\/\//.test(data)) { data = 'https://github.com/' + data; }
  data = data.replace(/^git\+/, '');

  return (
  "<a href=\"" + data + "\" class=\"github-corner\" aria-label=\"View source on Github\">" +
    '<svg viewBox="0 0 250 250" aria-hidden="true">' +
      '<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path>' +
      '<path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin: 130px 106px;" class="octo-arm"></path>' +
      '<path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path>' +
    '</svg>' +
  '</a>')
}

/**
 * Render main content
 */
function main (config) {
  var aside = (
    '<button class="sidebar-toggle">' +
      '<div class="sidebar-toggle-button">' +
        '<span></span><span></span><span></span>' +
      '</div>' +
    '</button>' +
    '<aside class="sidebar">' +
      (config.name
        ? ("<h1><a class=\"app-name-link\" data-nosearch>" + (config.name) + "</a></h1>")
        : '') +
      '<div class="sidebar-nav"><!--sidebar--></div>' +
    '</aside>');

  return (isMobile ? (aside + "<main>") : ("<main>" + aside)) +
      '<section class="content">' +
        '<article class="markdown-section" id="main"><!--main--></article>' +
      '</section>' +
    '</main>'
}

/**
 * Cover Page
 */
function cover () {
  var SL = ', 100%, 85%';
  var bgc = 'linear-gradient(to left bottom, ' +
  "hsl(" + (Math.floor(Math.random() * 255) + SL) + ") 0%," +
  "hsl(" + (Math.floor(Math.random() * 255) + SL) + ") 100%)";

  return "<section class=\"cover\" style=\"background: " + bgc + "\">" +
    '<div class="cover-main"></div>' +
    '<div class="mask"></div>' +
  '</section>'
}

/**
 * Render tree
 * @param  {Array} tree
 * @param  {String} tpl
 * @return {String}
 */
function tree (toc, tpl) {
  if ( tpl === void 0 ) tpl = '';

  if (!toc || !toc.length) { return '' }

  toc.forEach(function (node) {
    tpl += "<li><a class=\"section-link\" href=\"" + (node.slug) + "\">" + (node.title) + "</a></li>";
    if (node.children) {
      tpl += "<li><ul class=\"children\">" + (tree(node.children)) + "</li></ul>";
    }
  });

  return tpl
}

function helper (className, content) {
  return ("<p class=\"" + className + "\">" + (content.slice(5).trim()) + "</p>")
}

function theme (color) {
  return ("<style>:root{--theme-color: " + color + ";}</style>")
}

var barEl;
var timeId;

/**
 * Init progress component
 */
function init () {
  var div = create('div');

  div.classList.add('progress');
  appendTo(body, div);
  barEl = div;
}
/**
 * Render progress bar
 */
var progressbar = function (ref) {
  var loaded = ref.loaded;
  var total = ref.total;
  var step = ref.step;

  var num;

  !barEl && init();

  if (step) {
    num = parseInt(barEl.style.width || 0, 10) + step;
    num = num > 80 ? 80 : num;
  } else {
    num = Math.floor(loaded / total * 100);
  }

  barEl.style.opacity = 1;
  barEl.style.width = num >= 95 ? '100%' : num + '%';

  if (num >= 95) {
    clearTimeout(timeId);
    timeId = setTimeout(function (_) {
      barEl.style.opacity = 0;
      barEl.style.width = '0%';
    }, 200);
  }
};

var cache = {};

/**
 * Simple ajax get
 * @param {string} url
 * @param {boolean} [hasBar=false] has progress bar
 * @return { then(resolve, reject), abort }
 */
function get (url, hasBar) {
  if ( hasBar === void 0 ) hasBar = false;

  var xhr = new XMLHttpRequest();
  var on = function () {
    xhr.addEventListener.apply(xhr, arguments);
  };
  var cached$$1 = cache[url];

  if (cached$$1) {
    return { then: function (cb) { return cb(cached$$1.content, cached$$1.opt); }, abort: noop }
  }

  xhr.open('GET', url);
  xhr.send();

  return {
    then: function (success, error) {
      if ( error === void 0 ) error = noop;

      if (hasBar) {
        var id = setInterval(function (_) { return progressbar({
          step: Math.floor(Math.random() * 5 + 1)
        }); }, 500);

        on('progress', progressbar);
        on('loadend', function (evt) {
          progressbar(evt);
          clearInterval(id);
        });
      }

      on('error', error);
      on('load', function (ref) {
        var target = ref.target;

        if (target.status >= 400) {
          error(target);
        } else {
          var result = cache[url] = {
            content: target.response,
            opt: {
              updatedAt: xhr.getResponseHeader('last-modified')
            }
          };

          success(result.content, result.opt);
        }
      });
    },
    abort: function (_) { return xhr.readyState !== 4 && xhr.abort(); }
  }
}

function replaceVar (block, color) {
  block.innerHTML = block.innerHTML
    .replace(/var\(\s*--theme-color.*?\)/g, color);
}

var cssVars = function (color) {
  // Variable support
  if (window.CSS &&
      window.CSS.supports &&
      window.CSS.supports('(--v:red)')) { return }

  var styleBlocks = findAll('style:not(.inserted),link');[].forEach.call(styleBlocks, function (block) {
    if (block.nodeName === 'STYLE') {
      replaceVar(block, color);
    } else if (block.nodeName === 'LINK') {
      var href = block.getAttribute('href');

      if (!/\.css$/.test(href)) { return }

      get(href).then(function (res) {
        var style = create('style', res);

        head.appendChild(style);
        replaceVar(style, color);
      });
    }
  });
};

var RGX = /([^{]*?)\w(?=\})/g;

var dict = {
	YYYY: 'getFullYear',
	YY: 'getYear',
	MM: function (d) {
		return d.getMonth() + 1;
	},
	DD: 'getDate',
	HH: 'getHours',
	mm: 'getMinutes',
	ss: 'getSeconds'
};

var tinydate = function (str) {
	var parts=[], offset=0;
	str.replace(RGX, function (key, _, idx) {
		// save preceding string
		parts.push(str.substring(offset, idx - 1));
		offset = idx += key.length + 1;
		// save function
		parts.push(function(d){
			return ('00' + (typeof dict[key]==='string' ? d[dict[key]]() : dict[key](d))).slice(-key.length);
		});
	});

	if (offset !== str.length) {
		parts.push(str.substring(offset));
	}

	return function (arg) {
		var out='', i=0, d=arg||new Date();
		for (; i<parts.length; i++) {
			out += (typeof parts[i]==='string') ? parts[i] : parts[i](d);
		}
		return out;
	};
};

var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};





function createCommonjsModule(fn, module) {
	return module = { exports: {} }, fn(module, module.exports), module.exports;
}

var marked = createCommonjsModule(function (module, exports) {
/**
 * marked - a markdown parser
 * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
 * https://github.com/chjj/marked
 */

(function() {

/**
 * Block-Level Grammar
 */

var block = {
  newline: /^\n+/,
  code: /^( {4}[^\n]+\n*)+/,
  fences: noop,
  hr: /^( *[-*_]){3,} *(?:\n+|$)/,
  heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
  nptable: noop,
  lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
  blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,
  list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
  html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,
  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
  table: noop,
  paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
  text: /^[^\n]+/
};

block.bullet = /(?:[*+-]|\d+\.)/;
block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
block.item = replace(block.item, 'gm')
  (/bull/g, block.bullet)
  ();

block.list = replace(block.list)
  (/bull/g, block.bullet)
  ('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))')
  ('def', '\\n+(?=' + block.def.source + ')')
  ();

block.blockquote = replace(block.blockquote)
  ('def', block.def)
  ();

block._tag = '(?!(?:'
  + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
  + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
  + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b';

block.html = replace(block.html)
  ('comment', /<!--[\s\S]*?-->/)
  ('closed', /<(tag)[\s\S]+?<\/\1>/)
  ('closing', /<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)
  (/tag/g, block._tag)
  ();

block.paragraph = replace(block.paragraph)
  ('hr', block.hr)
  ('heading', block.heading)
  ('lheading', block.lheading)
  ('blockquote', block.blockquote)
  ('tag', '<' + block._tag)
  ('def', block.def)
  ();

/**
 * Normal Block Grammar
 */

block.normal = merge({}, block);

/**
 * GFM Block Grammar
 */

block.gfm = merge({}, block.normal, {
  fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,
  paragraph: /^/,
  heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/
});

block.gfm.paragraph = replace(block.paragraph)
  ('(?!', '(?!'
    + block.gfm.fences.source.replace('\\1', '\\2') + '|'
    + block.list.source.replace('\\1', '\\3') + '|')
  ();

/**
 * GFM + Tables Block Grammar
 */

block.tables = merge({}, block.gfm, {
  nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,
  table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/
});

/**
 * Block Lexer
 */

function Lexer(options) {
  this.tokens = [];
  this.tokens.links = {};
  this.options = options || marked.defaults;
  this.rules = block.normal;

  if (this.options.gfm) {
    if (this.options.tables) {
      this.rules = block.tables;
    } else {
      this.rules = block.gfm;
    }
  }
}

/**
 * Expose Block Rules
 */

Lexer.rules = block;

/**
 * Static Lex Method
 */

Lexer.lex = function(src, options) {
  var lexer = new Lexer(options);
  return lexer.lex(src);
};

/**
 * Preprocessing
 */

Lexer.prototype.lex = function(src) {
  src = src
    .replace(/\r\n|\r/g, '\n')
    .replace(/\t/g, '    ')
    .replace(/\u00a0/g, ' ')
    .replace(/\u2424/g, '\n');

  return this.token(src, true);
};

/**
 * Lexing
 */

Lexer.prototype.token = function(src, top, bq) {
  var this$1 = this;

  var src = src.replace(/^ +$/gm, '')
    , next
    , loose
    , cap
    , bull
    , b
    , item
    , space
    , i
    , l;

  while (src) {
    // newline
    if (cap = this$1.rules.newline.exec(src)) {
      src = src.substring(cap[0].length);
      if (cap[0].length > 1) {
        this$1.tokens.push({
          type: 'space'
        });
      }
    }

    // code
    if (cap = this$1.rules.code.exec(src)) {
      src = src.substring(cap[0].length);
      cap = cap[0].replace(/^ {4}/gm, '');
      this$1.tokens.push({
        type: 'code',
        text: !this$1.options.pedantic
          ? cap.replace(/\n+$/, '')
          : cap
      });
      continue;
    }

    // fences (gfm)
    if (cap = this$1.rules.fences.exec(src)) {
      src = src.substring(cap[0].length);
      this$1.tokens.push({
        type: 'code',
        lang: cap[2],
        text: cap[3] || ''
      });
      continue;
    }

    // heading
    if (cap = this$1.rules.heading.exec(src)) {
      src = src.substring(cap[0].length);
      this$1.tokens.push({
        type: 'heading',
        depth: cap[1].length,
        text: cap[2]
      });
      continue;
    }

    // table no leading pipe (gfm)
    if (top && (cap = this$1.rules.nptable.exec(src))) {
      src = src.substring(cap[0].length);

      item = {
        type: 'table',
        header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
        cells: cap[3].replace(/\n$/, '').split('\n')
      };

      for (i = 0; i < item.align.length; i++) {
        if (/^ *-+: *$/.test(item.align[i])) {
          item.align[i] = 'right';
        } else if (/^ *:-+: *$/.test(item.align[i])) {
          item.align[i] = 'center';
        } else if (/^ *:-+ *$/.test(item.align[i])) {
          item.align[i] = 'left';
        } else {
          item.align[i] = null;
        }
      }

      for (i = 0; i < item.cells.length; i++) {
        item.cells[i] = item.cells[i].split(/ *\| */);
      }

      this$1.tokens.push(item);

      continue;
    }

    // lheading
    if (cap = this$1.rules.lheading.exec(src)) {
      src = src.substring(cap[0].length);
      this$1.tokens.push({
        type: 'heading',
        depth: cap[2] === '=' ? 1 : 2,
        text: cap[1]
      });
      continue;
    }

    // hr
    if (cap = this$1.rules.hr.exec(src)) {
      src = src.substring(cap[0].length);
      this$1.tokens.push({
        type: 'hr'
      });
      continue;
    }

    // blockquote
    if (cap = this$1.rules.blockquote.exec(src)) {
      src = src.substring(cap[0].length);

      this$1.tokens.push({
        type: 'blockquote_start'
      });

      cap = cap[0].replace(/^ *> ?/gm, '');

      // Pass `top` to keep the current
      // "toplevel" state. This is exactly
      // how markdown.pl works.
      this$1.token(cap, top, true);

      this$1.tokens.push({
        type: 'blockquote_end'
      });

      continue;
    }

    // list
    if (cap = this$1.rules.list.exec(src)) {
      src = src.substring(cap[0].length);
      bull = cap[2];

      this$1.tokens.push({
        type: 'list_start',
        ordered: bull.length > 1
      });

      // Get each top-level item.
      cap = cap[0].match(this$1.rules.item);

      next = false;
      l = cap.length;
      i = 0;

      for (; i < l; i++) {
        item = cap[i];

        // Remove the list item's bullet
        // so it is seen as the next token.
        space = item.length;
        item = item.replace(/^ *([*+-]|\d+\.) +/, '');

        // Outdent whatever the
        // list item contains. Hacky.
        if (~item.indexOf('\n ')) {
          space -= item.length;
          item = !this$1.options.pedantic
            ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
            : item.replace(/^ {1,4}/gm, '');
        }

        // Determine whether the next list item belongs here.
        // Backpedal if it does not belong in this list.
        if (this$1.options.smartLists && i !== l - 1) {
          b = block.bullet.exec(cap[i + 1])[0];
          if (bull !== b && !(bull.length > 1 && b.length > 1)) {
            src = cap.slice(i + 1).join('\n') + src;
            i = l - 1;
          }
        }

        // Determine whether item is loose or not.
        // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
        // for discount behavior.
        loose = next || /\n\n(?!\s*$)/.test(item);
        if (i !== l - 1) {
          next = item.charAt(item.length - 1) === '\n';
          if (!loose) { loose = next; }
        }

        this$1.tokens.push({
          type: loose
            ? 'loose_item_start'
            : 'list_item_start'
        });

        // Recurse.
        this$1.token(item, false, bq);

        this$1.tokens.push({
          type: 'list_item_end'
        });
      }

      this$1.tokens.push({
        type: 'list_end'
      });

      continue;
    }

    // html
    if (cap = this$1.rules.html.exec(src)) {
      src = src.substring(cap[0].length);
      this$1.tokens.push({
        type: this$1.options.sanitize
          ? 'paragraph'
          : 'html',
        pre: !this$1.options.sanitizer
          && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),
        text: cap[0]
      });
      continue;
    }

    // def
    if ((!bq && top) && (cap = this$1.rules.def.exec(src))) {
      src = src.substring(cap[0].length);
      this$1.tokens.links[cap[1].toLowerCase()] = {
        href: cap[2],
        title: cap[3]
      };
      continue;
    }

    // table (gfm)
    if (top && (cap = this$1.rules.table.exec(src))) {
      src = src.substring(cap[0].length);

      item = {
        type: 'table',
        header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
        cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n')
      };

      for (i = 0; i < item.align.length; i++) {
        if (/^ *-+: *$/.test(item.align[i])) {
          item.align[i] = 'right';
        } else if (/^ *:-+: *$/.test(item.align[i])) {
          item.align[i] = 'center';
        } else if (/^ *:-+ *$/.test(item.align[i])) {
          item.align[i] = 'left';
        } else {
          item.align[i] = null;
        }
      }

      for (i = 0; i < item.cells.length; i++) {
        item.cells[i] = item.cells[i]
          .replace(/^ *\| *| *\| *$/g, '')
          .split(/ *\| */);
      }

      this$1.tokens.push(item);

      continue;
    }

    // top-level paragraph
    if (top && (cap = this$1.rules.paragraph.exec(src))) {
      src = src.substring(cap[0].length);
      this$1.tokens.push({
        type: 'paragraph',
        text: cap[1].charAt(cap[1].length - 1) === '\n'
          ? cap[1].slice(0, -1)
          : cap[1]
      });
      continue;
    }

    // text
    if (cap = this$1.rules.text.exec(src)) {
      // Top-level should never reach here.
      src = src.substring(cap[0].length);
      this$1.tokens.push({
        type: 'text',
        text: cap[0]
      });
      continue;
    }

    if (src) {
      throw new
        Error('Infinite loop on byte: ' + src.charCodeAt(0));
    }
  }

  return this.tokens;
};

/**
 * Inline-Level Grammar
 */

var inline = {
  escape: /^\\([\\`*{}\[\]()#+\-.!_>])/,
  autolink: /^<([^ >]+(@|:\/)[^ >]+)>/,
  url: noop,
  tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
  link: /^!?\[(inside)\]\(href\)/,
  reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
  nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
  strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
  em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
  code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,
  br: /^ {2,}\n(?!\s*$)/,
  del: noop,
  text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/
};

inline._inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;
inline._href = /\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;

inline.link = replace(inline.link)
  ('inside', inline._inside)
  ('href', inline._href)
  ();

inline.reflink = replace(inline.reflink)
  ('inside', inline._inside)
  ();

/**
 * Normal Inline Grammar
 */

inline.normal = merge({}, inline);

/**
 * Pedantic Inline Grammar
 */

inline.pedantic = merge({}, inline.normal, {
  strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
  em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/
});

/**
 * GFM Inline Grammar
 */

inline.gfm = merge({}, inline.normal, {
  escape: replace(inline.escape)('])', '~|])')(),
  url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,
  del: /^~~(?=\S)([\s\S]*?\S)~~/,
  text: replace(inline.text)
    (']|', '~]|')
    ('|', '|https?://|')
    ()
});

/**
 * GFM + Line Breaks Inline Grammar
 */

inline.breaks = merge({}, inline.gfm, {
  br: replace(inline.br)('{2,}', '*')(),
  text: replace(inline.gfm.text)('{2,}', '*')()
});

/**
 * Inline Lexer & Compiler
 */

function InlineLexer(links, options) {
  this.options = options || marked.defaults;
  this.links = links;
  this.rules = inline.normal;
  this.renderer = this.options.renderer || new Renderer;
  this.renderer.options = this.options;

  if (!this.links) {
    throw new
      Error('Tokens array requires a `links` property.');
  }

  if (this.options.gfm) {
    if (this.options.breaks) {
      this.rules = inline.breaks;
    } else {
      this.rules = inline.gfm;
    }
  } else if (this.options.pedantic) {
    this.rules = inline.pedantic;
  }
}

/**
 * Expose Inline Rules
 */

InlineLexer.rules = inline;

/**
 * Static Lexing/Compiling Method
 */

InlineLexer.output = function(src, links, options) {
  var inline = new InlineLexer(links, options);
  return inline.output(src);
};

/**
 * Lexing/Compiling
 */

InlineLexer.prototype.output = function(src) {
  var this$1 = this;

  var out = ''
    , link
    , text
    , href
    , cap;

  while (src) {
    // escape
    if (cap = this$1.rules.escape.exec(src)) {
      src = src.substring(cap[0].length);
      out += cap[1];
      continue;
    }

    // autolink
    if (cap = this$1.rules.autolink.exec(src)) {
      src = src.substring(cap[0].length);
      if (cap[2] === '@') {
        text = cap[1].charAt(6) === ':'
          ? this$1.mangle(cap[1].substring(7))
          : this$1.mangle(cap[1]);
        href = this$1.mangle('mailto:') + text;
      } else {
        text = escape(cap[1]);
        href = text;
      }
      out += this$1.renderer.link(href, null, text);
      continue;
    }

    // url (gfm)
    if (!this$1.inLink && (cap = this$1.rules.url.exec(src))) {
      src = src.substring(cap[0].length);
      text = escape(cap[1]);
      href = text;
      out += this$1.renderer.link(href, null, text);
      continue;
    }

    // tag
    if (cap = this$1.rules.tag.exec(src)) {
      if (!this$1.inLink && /^<a /i.test(cap[0])) {
        this$1.inLink = true;
      } else if (this$1.inLink && /^<\/a>/i.test(cap[0])) {
        this$1.inLink = false;
      }
      src = src.substring(cap[0].length);
      out += this$1.options.sanitize
        ? this$1.options.sanitizer
          ? this$1.options.sanitizer(cap[0])
          : escape(cap[0])
        : cap[0];
      continue;
    }

    // link
    if (cap = this$1.rules.link.exec(src)) {
      src = src.substring(cap[0].length);
      this$1.inLink = true;
      out += this$1.outputLink(cap, {
        href: cap[2],
        title: cap[3]
      });
      this$1.inLink = false;
      continue;
    }

    // reflink, nolink
    if ((cap = this$1.rules.reflink.exec(src))
        || (cap = this$1.rules.nolink.exec(src))) {
      src = src.substring(cap[0].length);
      link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
      link = this$1.links[link.toLowerCase()];
      if (!link || !link.href) {
        out += cap[0].charAt(0);
        src = cap[0].substring(1) + src;
        continue;
      }
      this$1.inLink = true;
      out += this$1.outputLink(cap, link);
      this$1.inLink = false;
      continue;
    }

    // strong
    if (cap = this$1.rules.strong.exec(src)) {
      src = src.substring(cap[0].length);
      out += this$1.renderer.strong(this$1.output(cap[2] || cap[1]));
      continue;
    }

    // em
    if (cap = this$1.rules.em.exec(src)) {
      src = src.substring(cap[0].length);
      out += this$1.renderer.em(this$1.output(cap[2] || cap[1]));
      continue;
    }

    // code
    if (cap = this$1.rules.code.exec(src)) {
      src = src.substring(cap[0].length);
      out += this$1.renderer.codespan(escape(cap[2], true));
      continue;
    }

    // br
    if (cap = this$1.rules.br.exec(src)) {
      src = src.substring(cap[0].length);
      out += this$1.renderer.br();
      continue;
    }

    // del (gfm)
    if (cap = this$1.rules.del.exec(src)) {
      src = src.substring(cap[0].length);
      out += this$1.renderer.del(this$1.output(cap[1]));
      continue;
    }

    // text
    if (cap = this$1.rules.text.exec(src)) {
      src = src.substring(cap[0].length);
      out += this$1.renderer.text(escape(this$1.smartypants(cap[0])));
      continue;
    }

    if (src) {
      throw new
        Error('Infinite loop on byte: ' + src.charCodeAt(0));
    }
  }

  return out;
};

/**
 * Compile Link
 */

InlineLexer.prototype.outputLink = function(cap, link) {
  var href = escape(link.href)
    , title = link.title ? escape(link.title) : null;

  return cap[0].charAt(0) !== '!'
    ? this.renderer.link(href, title, this.output(cap[1]))
    : this.renderer.image(href, title, escape(cap[1]));
};

/**
 * Smartypants Transformations
 */

InlineLexer.prototype.smartypants = function(text) {
  if (!this.options.smartypants) { return text; }
  return text
    // em-dashes
    .replace(/---/g, '\u2014')
    // en-dashes
    .replace(/--/g, '\u2013')
    // opening singles
    .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
    // closing singles & apostrophes
    .replace(/'/g, '\u2019')
    // opening doubles
    .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
    // closing doubles
    .replace(/"/g, '\u201d')
    // ellipses
    .replace(/\.{3}/g, '\u2026');
};

/**
 * Mangle Links
 */

InlineLexer.prototype.mangle = function(text) {
  if (!this.options.mangle) { return text; }
  var out = ''
    , l = text.length
    , i = 0
    , ch;

  for (; i < l; i++) {
    ch = text.charCodeAt(i);
    if (Math.random() > 0.5) {
      ch = 'x' + ch.toString(16);
    }
    out += '&#' + ch + ';';
  }

  return out;
};

/**
 * Renderer
 */

function Renderer(options) {
  this.options = options || {};
}

Renderer.prototype.code = function(code, lang, escaped) {
  if (this.options.highlight) {
    var out = this.options.highlight(code, lang);
    if (out != null && out !== code) {
      escaped = true;
      code = out;
    }
  }

  if (!lang) {
    return '<pre><code>'
      + (escaped ? code : escape(code, true))
      + '\n</code></pre>';
  }

  return '<pre><code class="'
    + this.options.langPrefix
    + escape(lang, true)
    + '">'
    + (escaped ? code : escape(code, true))
    + '\n</code></pre>\n';
};

Renderer.prototype.blockquote = function(quote) {
  return '<blockquote>\n' + quote + '</blockquote>\n';
};

Renderer.prototype.html = function(html) {
  return html;
};

Renderer.prototype.heading = function(text, level, raw) {
  return '<h'
    + level
    + ' id="'
    + this.options.headerPrefix
    + raw.toLowerCase().replace(/[^\w]+/g, '-')
    + '">'
    + text
    + '</h'
    + level
    + '>\n';
};

Renderer.prototype.hr = function() {
  return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
};

Renderer.prototype.list = function(body, ordered) {
  var type = ordered ? 'ol' : 'ul';
  return '<' + type + '>\n' + body + '</' + type + '>\n';
};

Renderer.prototype.listitem = function(text) {
  return '<li>' + text + '</li>\n';
};

Renderer.prototype.paragraph = function(text) {
  return '<p>' + text + '</p>\n';
};

Renderer.prototype.table = function(header, body) {
  return '<table>\n'
    + '<thead>\n'
    + header
    + '</thead>\n'
    + '<tbody>\n'
    + body
    + '</tbody>\n'
    + '</table>\n';
};

Renderer.prototype.tablerow = function(content) {
  return '<tr>\n' + content + '</tr>\n';
};

Renderer.prototype.tablecell = function(content, flags) {
  var type = flags.header ? 'th' : 'td';
  var tag = flags.align
    ? '<' + type + ' style="text-align:' + flags.align + '">'
    : '<' + type + '>';
  return tag + content + '</' + type + '>\n';
};

// span level renderer
Renderer.prototype.strong = function(text) {
  return '<strong>' + text + '</strong>';
};

Renderer.prototype.em = function(text) {
  return '<em>' + text + '</em>';
};

Renderer.prototype.codespan = function(text) {
  return '<code>' + text + '</code>';
};

Renderer.prototype.br = function() {
  return this.options.xhtml ? '<br/>' : '<br>';
};

Renderer.prototype.del = function(text) {
  return '<del>' + text + '</del>';
};

Renderer.prototype.link = function(href, title, text) {
  if (this.options.sanitize) {
    try {
      var prot = decodeURIComponent(unescape(href))
        .replace(/[^\w:]/g, '')
        .toLowerCase();
    } catch (e) {
      return '';
    }
    if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) {
      return '';
    }
  }
  var out = '<a href="' + href + '"';
  if (title) {
    out += ' title="' + title + '"';
  }
  out += '>' + text + '</a>';
  return out;
};

Renderer.prototype.image = function(href, title, text) {
  var out = '<img src="' + href + '" alt="' + text + '"';
  if (title) {
    out += ' title="' + title + '"';
  }
  out += this.options.xhtml ? '/>' : '>';
  return out;
};

Renderer.prototype.text = function(text) {
  return text;
};

/**
 * Parsing & Compiling
 */

function Parser(options) {
  this.tokens = [];
  this.token = null;
  this.options = options || marked.defaults;
  this.options.renderer = this.options.renderer || new Renderer;
  this.renderer = this.options.renderer;
  this.renderer.options = this.options;
}

/**
 * Static Parse Method
 */

Parser.parse = function(src, options, renderer) {
  var parser = new Parser(options, renderer);
  return parser.parse(src);
};

/**
 * Parse Loop
 */

Parser.prototype.parse = function(src) {
  var this$1 = this;

  this.inline = new InlineLexer(src.links, this.options, this.renderer);
  this.tokens = src.reverse();

  var out = '';
  while (this.next()) {
    out += this$1.tok();
  }

  return out;
};

/**
 * Next Token
 */

Parser.prototype.next = function() {
  return this.token = this.tokens.pop();
};

/**
 * Preview Next Token
 */

Parser.prototype.peek = function() {
  return this.tokens[this.tokens.length - 1] || 0;
};

/**
 * Parse Text Tokens
 */

Parser.prototype.parseText = function() {
  var this$1 = this;

  var body = this.token.text;

  while (this.peek().type === 'text') {
    body += '\n' + this$1.next().text;
  }

  return this.inline.output(body);
};

/**
 * Parse Current Token
 */

Parser.prototype.tok = function() {
  var this$1 = this;

  switch (this.token.type) {
    case 'space': {
      return '';
    }
    case 'hr': {
      return this.renderer.hr();
    }
    case 'heading': {
      return this.renderer.heading(
        this.inline.output(this.token.text),
        this.token.depth,
        this.token.text);
    }
    case 'code': {
      return this.renderer.code(this.token.text,
        this.token.lang,
        this.token.escaped);
    }
    case 'table': {
      var header = ''
        , body = ''
        , i
        , row
        , cell
        , flags
        , j;

      // header
      cell = '';
      for (i = 0; i < this.token.header.length; i++) {
        flags = { header: true, align: this$1.token.align[i] };
        cell += this$1.renderer.tablecell(
          this$1.inline.output(this$1.token.header[i]),
          { header: true, align: this$1.token.align[i] }
        );
      }
      header += this.renderer.tablerow(cell);

      for (i = 0; i < this.token.cells.length; i++) {
        row = this$1.token.cells[i];

        cell = '';
        for (j = 0; j < row.length; j++) {
          cell += this$1.renderer.tablecell(
            this$1.inline.output(row[j]),
            { header: false, align: this$1.token.align[j] }
          );
        }

        body += this$1.renderer.tablerow(cell);
      }
      return this.renderer.table(header, body);
    }
    case 'blockquote_start': {
      var body = '';

      while (this.next().type !== 'blockquote_end') {
        body += this$1.tok();
      }

      return this.renderer.blockquote(body);
    }
    case 'list_start': {
      var body = ''
        , ordered = this.token.ordered;

      while (this.next().type !== 'list_end') {
        body += this$1.tok();
      }

      return this.renderer.list(body, ordered);
    }
    case 'list_item_start': {
      var body = '';

      while (this.next().type !== 'list_item_end') {
        body += this$1.token.type === 'text'
          ? this$1.parseText()
          : this$1.tok();
      }

      return this.renderer.listitem(body);
    }
    case 'loose_item_start': {
      var body = '';

      while (this.next().type !=
Download .txt
gitextract_8xne0dab/

├── .babelrc
├── .codeclimate.yml
├── .editorconfig
├── .github/
│   ├── FUNDING.yml
│   └── ISSUE_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── Gruntfile.js
├── LICENSE.txt
├── README.markdown
├── bower.json
├── browserstack-builds.json
├── browserstack-session.json
├── browserstack.json
├── composer.json
├── demo/
│   ├── animate.css
│   ├── bouncejs/
│   │   └── bounce.js
│   ├── demo.css
│   ├── demo.js
│   ├── font-awesome/
│   │   └── fonts/
│   │       └── FontAwesome.otf
│   ├── fonts/
│   │   └── stylesheet.css
│   ├── index.html
│   ├── push.html
│   └── sendpush.js
├── docs/
│   ├── .nojekyll
│   ├── README.md
│   ├── _assets/
│   │   ├── docs.js
│   │   ├── docsify.js
│   │   └── vue.css
│   ├── _navbar.md
│   ├── _sidebar.md
│   ├── animations.md
│   ├── api.md
│   ├── bakers.md
│   ├── browsers.md
│   ├── confirm.md
│   ├── index.html
│   ├── installation.md
│   ├── options.md
│   ├── push.md
│   ├── themes.md
│   ├── types.md
│   └── v2/
│       ├── animations.html
│       ├── api.html
│       ├── confirmations.html
│       ├── index.html
│       ├── layouts.html
│       ├── options.html
│       ├── releases.html
│       ├── themes.html
│       └── vendor/
│           ├── animate.css
│           ├── custom.css
│           ├── documentation.js
│           ├── fastclick.js
│           ├── google-code-prettify/
│           │   ├── prettify.css
│           │   └── prettify.js
│           ├── main.js
│           ├── noty-2.4.1/
│           │   ├── .gitignore
│           │   ├── Gruntfile.js
│           │   ├── LICENSE.txt
│           │   ├── README.markdown
│           │   ├── bower.json
│           │   ├── composer.json
│           │   ├── demo/
│           │   │   ├── allLayouts.html
│           │   │   ├── allTypes.html
│           │   │   ├── animate.css
│           │   │   ├── api.html
│           │   │   ├── buttons.css
│           │   │   ├── consumingAlert.html
│           │   │   ├── customContainer.html
│           │   │   ├── font-awesome/
│           │   │   │   └── fonts/
│           │   │   │       └── FontAwesome.otf
│           │   │   ├── index.html
│           │   │   ├── issue302.html
│           │   │   ├── jquery-1.8.0.js
│           │   │   ├── killer.html
│           │   │   ├── noanim.html
│           │   │   ├── notification_html.js
│           │   │   ├── progressbar.html
│           │   │   ├── themeBootstrap.html
│           │   │   ├── themeCss.html
│           │   │   ├── usingMaxVisible.html
│           │   │   ├── usingWithAnimate.css.html
│           │   │   ├── usingWithButtons.html
│           │   │   ├── usingWithButtons2.html
│           │   │   ├── usingWithModal.html
│           │   │   └── usingWithOldOptions.html
│           │   ├── js/
│           │   │   └── noty/
│           │   │       ├── jquery.noty.js
│           │   │       ├── layouts/
│           │   │       │   ├── bottom.js
│           │   │       │   ├── bottomCenter.js
│           │   │       │   ├── bottomLeft.js
│           │   │       │   ├── bottomRight.js
│           │   │       │   ├── center.js
│           │   │       │   ├── centerLeft.js
│           │   │       │   ├── centerRight.js
│           │   │       │   ├── inline.js
│           │   │       │   ├── top.js
│           │   │       │   ├── topCenter.js
│           │   │       │   ├── topLeft.js
│           │   │       │   └── topRight.js
│           │   │       ├── packaged/
│           │   │       │   └── jquery.noty.packaged.js
│           │   │       ├── promise.js
│           │   │       └── themes/
│           │   │           ├── bootstrap.js
│           │   │           ├── default.js
│           │   │           ├── metroui.js
│           │   │           ├── relax.js
│           │   │           └── semanticUI.js
│           │   ├── noty.jquery.json
│           │   └── package.json
│           ├── ps-icon-pack.css
│           └── showdown/
│               └── showdown.js
├── index.d.ts
├── lib/
│   ├── noty.css
│   ├── noty.js
│   └── themes/
│       ├── bootstrap-v3.css
│       ├── bootstrap-v4.css
│       ├── light.css
│       ├── metroui.css
│       ├── mint.css
│       ├── nest.css
│       ├── relax.css
│       ├── semanticui.css
│       └── sunset.css
├── manifest.json.template
├── package.json
├── postcss.config.js
├── service-worker.js.template
├── src/
│   ├── api.js
│   ├── button.js
│   ├── index.js
│   ├── noty.scss
│   ├── push.js
│   ├── themes/
│   │   ├── bootstrap-v3.scss
│   │   ├── bootstrap-v4.scss
│   │   ├── light.scss
│   │   ├── metroui.scss
│   │   ├── mint.scss
│   │   ├── nest.scss
│   │   ├── relax.scss
│   │   ├── semanticui.scss
│   │   └── sunset.scss
│   └── utils.js
├── test/
│   ├── index.html
│   ├── unit/
│   │   ├── init.test.js
│   │   └── phantom.js
│   └── vendor/
│       ├── qunit-theme-ninja.css
│       └── qunit.js
└── webpack.config.js
Download .txt
SYMBOL INDEX (470 symbols across 23 files)

FILE: demo/bouncejs/bounce.js
  function s (line 5) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
  function Component (line 28) | function Component(options) {
  function ctor (line 88) | function ctor() { this.constructor = child; }
  function Rotate (line 103) | function Rotate() {
  function ctor (line 133) | function ctor() { this.constructor = child; }
  function Scale (line 154) | function Scale() {
  function ctor (line 184) | function ctor() { this.constructor = child; }
  function Skew (line 205) | function Skew() {
  function ctor (line 238) | function ctor() { this.constructor = child; }
  function Translate (line 259) | function Translate() {
  function ctor (line 289) | function ctor() { this.constructor = child; }
  function BounceEasing (line 300) | function BounceEasing(options) {
  function ctor (line 356) | function ctor() { this.constructor = child; }
  function HardBounceEasing (line 363) | function HardBounceEasing() {
  function ctor (line 381) | function ctor() { this.constructor = child; }
  function HardSwayEasing (line 388) | function HardSwayEasing() {
  function Easing (line 409) | function Easing() {}
  function ctor (line 476) | function ctor() { this.constructor = child; }
  function SwayEasing (line 483) | function SwayEasing() {
  function Bounce (line 532) | function Bounce() {
  function MathHelpers (line 792) | function MathHelpers() {}
  function Matrix4D (line 841) | function Matrix4D(array) {
  function Vector2D (line 935) | function Vector2D(x, y) {

FILE: demo/demo.js
  function getRandomInt (line 271) | function getRandomInt (min, max) {

FILE: docs/_assets/docs.js
  function RenderPreviews (line 249) | function RenderPreviews () {

FILE: docs/_assets/docsify.js
  function cached (line 7) | function cached (fn) {
  function isPrimitive (line 46) | function isPrimitive (value) {
  function noop (line 53) | function noop () {}
  function isFn (line 58) | function isFn (obj) {
  function initLifecycle (line 109) | function initLifecycle (vm) {
  function callHook (line 127) | function callHook (vm, hook, data, next) {
  function getNode (line 165) | function getNode (el, noCache) {
  function find (line 190) | function find (el, node) {
  function findAll (line 200) | function findAll (el, node) {
  function create (line 204) | function create (node, tpl) {
  function appendTo (line 210) | function appendTo (target, el) {
  function before (line 214) | function before (target, el) {
  function on (line 218) | function on (el, type, handler) {
  function off (line 224) | function off (el, type, handler) {
  function toggleClass (line 237) | function toggleClass (el, type, val) {
  function corner (line 278) | function corner (data) {
  function main (line 296) | function main (config) {
  function cover (line 320) | function cover () {
  function tree (line 338) | function tree (toc, tpl) {
  function helper (line 353) | function helper (className, content) {
  function theme (line 357) | function theme (color) {
  function init (line 367) | function init () {
  function get (line 413) | function get (url, hasBar) {
  function replaceVar (line 467) | function replaceVar (block, color) {
  function createCommonjsModule (line 541) | function createCommonjsModule(fn, module) {
  function Lexer (line 647) | function Lexer(options) {
  function InlineLexer (line 1067) | function InlineLexer(links, options) {
  function Renderer (line 1309) | function Renderer(options) {
  function Parser (line 1456) | function Parser(options) {
  function escape (line 1642) | function escape(html, encode) {
  function unescape (line 1651) | function unescape(html) {
  function replace (line 1665) | function replace(regex, opt) {
  function noop (line 1677) | function noop() {}
  function merge (line 1680) | function merge(obj) {
  function marked (line 1704) | function marked(src, opt, callback) {
  function genTree (line 2646) | function genTree (toc, maxLevel) {
  function slugify (line 2669) | function slugify (str) {
  function replace (line 2694) | function replace (m, $1) {
  function emojify (line 2698) | function emojify (text) {
  function parseQuery (line 2708) | function parseQuery (query) {
  function stringifyQuery (line 2727) | function stringifyQuery (obj) {
  function getPath (line 2739) | function getPath () {
  function btn (line 2958) | function btn (el, router) {
  function sticky (line 2975) | function sticky () {
  function getAndActive (line 2995) | function getAndActive (router, el, isParent, autoTitle) {
  function highlight (line 3026) | function highlight () {
  function scrollActiveSidebar (line 3074) | function scrollActiveSidebar (router) {
  function scrollIntoView (line 3099) | function scrollIntoView (id) {
  function scroll2Top (line 3106) | function scroll2Top (offset) {
  function executeScript (line 3112) | function executeScript () {
  function formatUpdated (line 3124) | function formatUpdated (html, updated, fn) {
  function renderMain (line 3134) | function renderMain (html) {
  function renderNameLink (line 3158) | function renderNameLink (vm) {
  function renderMixin (line 3174) | function renderMixin (proto) {
  function initRender (line 3279) | function initRender (vm) {
  function getAlias (line 3333) | function getAlias (path, alias, last) {
  function getFileName (line 3342) | function getFileName (path) {
  function replaceHash (line 3391) | function replaceHash (path) {
  function HashHistory (line 3403) | function HashHistory (config) {
  function HTML5History (line 3489) | function HTML5History (config) {
  function routerMixin (line 3574) | function routerMixin (proto) {
  function updateRender (line 3580) | function updateRender (vm) {
  function initRouter (line 3586) | function initRouter (vm) {
  function eventMixin (line 3615) | function eventMixin (proto) {
  function initEvent (line 3622) | function initEvent (vm) {
  function loadNested (line 3633) | function loadNested (path, file, next, vm, first) {
  function fetchMixin (line 3643) | function fetchMixin (proto) {
  function initFetch (line 3718) | function initFetch (vm) {
  function initMixin (line 3738) | function initMixin (proto) {
  function initPlugin (line 3754) | function initPlugin (vm) {
  function Docsify (line 3785) | function Docsify () {

FILE: docs/v2/vendor/documentation.js
  function generatePreview (line 138) | function generatePreview($container, theme, type) {

FILE: docs/v2/vendor/fastclick.js
  function FastClick (line 27) | function FastClick(layer) {

FILE: docs/v2/vendor/google-code-prettify/prettify.js
  function L (line 2) | function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var...
  function M (line 6) | function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.classN...
  function B (line 7) | function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}
  function x (line 7) | function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(...
  function u (line 9) | function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''...
  function D (line 12) | function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.clas...
  function k (line 15) | function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(...
  function C (line 15) | function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-m...
  function E (line 15) | function E(a){var m=
  function m (line 25) | function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Inf...

FILE: docs/v2/vendor/main.js
  function handleTweets (line 164) | function handleTweets(tweets){
  function initializeMap (line 387) | function initializeMap() {
  function initialize (line 448) | function initialize() {
  function setup (line 457) | function setup() {
  function setActivePage (line 602) | function setActivePage() {
  function setMasonry (line 632) | function setMasonry() {
  function setBlogMasonry (line 683) | function setBlogMasonry() {
  function fillBars (line 732) | function fillBars() {
  function setupLigtbox (line 744) | function setupLigtbox() {
  function setCurrentMenuItem (line 783) | function setCurrentMenuItem() {
  function showProjectDetails (line 795) | function showProjectDetails(url) {
  function hideProjectDetails (line 831) | function hideProjectDetails(forever, safeClose) {
  function giveDetailUrl (line 857) | function giveDetailUrl() {
  function showLoader (line 874) | function showLoader() {
  function hideLoader (line 877) | function hideLoader() {

FILE: docs/v2/vendor/noty-2.4.1/demo/jquery-1.8.0.js
  function createOptions (line 910) | function createOptions( options ) {
  function dataAttr (line 1800) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 1832) | function isEmptyDataObject( obj ) {
  function returnFalse (line 3282) | function returnFalse() {
  function returnTrue (line 3285) | function returnTrue() {
  function multipleContexts (line 4638) | function multipleContexts( selector, contexts, results, seed ) {
  function handlePOSGroup (line 4646) | function handlePOSGroup( selector, posfilter, argument, contexts, seed, ...
  function handlePOS (line 4661) | function handlePOS( selector, context, results, seed, groups ) {
  function tokenize (line 4733) | function tokenize( selector, context, xml ) {
  function addCombinator (line 4791) | function addCombinator( matcher, combinator, context ) {
  function addMatcher (line 4834) | function addMatcher( higher, deeper ) {
  function matcherFromTokens (line 4844) | function matcherFromTokens( tokens, context, xml ) {
  function matcherFromGroupMatchers (line 4860) | function matcherFromGroupMatchers( matchers ) {
  function isDisconnected (line 5290) | function isDisconnected( node ) {
  function sibling (line 5294) | function sibling( cur, dir ) {
  function winnow (line 5402) | function winnow( elements, qualifier, keep ) {
  function createSafeFragment (line 5435) | function createSafeFragment( document ) {
  function findOrAppend (line 5819) | function findOrAppend( elem, tag ) {
  function cloneCopyEvent (line 5823) | function cloneCopyEvent( src, dest ) {
  function cloneFixAttributes (line 5851) | function cloneFixAttributes( src, dest ) {
  function getAll (line 5998) | function getAll( elem ) {
  function fixDefaultChecked (line 6011) | function fixDefaultChecked( elem ) {
  function jQuerySub (line 6306) | function jQuerySub( selector, context ) {
  function vendorPropName (line 6350) | function vendorPropName( style, name ) {
  function isHidden (line 6372) | function isHidden( elem, el ) {
  function showHide (line 6377) | function showHide( elements, show ) {
  function setPositiveNumber (line 6685) | function setPositiveNumber( elem, value, subtract ) {
  function augmentWidthOrHeight (line 6692) | function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
  function getWidthOrHeight (line 6734) | function getWidthOrHeight( elem, name, extra ) {
  function css_defaultDisplay (line 6774) | function css_defaultDisplay( nodeName ) {
  function buildParams (line 7026) | function buildParams( prefix, obj, traditional, add ) {
  function addToPrefiltersOrTransports (line 7115) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7149) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7191) | function ajaxExtend( target, src ) {
  function done (line 7502) | function done( status, nativeStatusText, responses, headers ) {
  function ajaxHandleResponses (line 7795) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 7857) | function ajaxConvert( s, response ) {
  function createStandardXHR (line 8124) | function createStandardXHR() {
  function createActiveXHR (line 8130) | function createActiveXHR() {
  function createFxNow (line 8385) | function createFxNow() {
  function createTweens (line 8392) | function createTweens( animation, props ) {
  function Animation (line 8407) | function Animation( elem, properties, options ) {
  function propFilter (line 8503) | function propFilter( props, specialEasing ) {
  function defaultPrefilter (line 8570) | function defaultPrefilter( elem, props, opts ) {
  function Tween (line 8685) | function Tween( elem, options, prop, end, easing ) {
  function genFx (line 8863) | function genFx( type, includeWidth ) {
  function getWindow (line 9160) | function getWindow( elem ) {

FILE: docs/v2/vendor/noty-2.4.1/js/noty/jquery.noty.js
  function F (line 13) | function F() {

FILE: docs/v2/vendor/noty-2.4.1/js/noty/packaged/jquery.noty.packaged.js
  function F (line 23) | function F() {

FILE: docs/v2/vendor/noty-2.4.1/js/noty/promise.js
  function createFlags (line 27) | function createFlags( flags ) {
  function resolve (line 167) | function resolve() {
  function handleQueueMarkDefer (line 186) | function handleQueueMarkDefer( elem, type, src ) {
  function resolve (line 414) | function resolve() {

FILE: docs/v2/vendor/showdown/showdown.js
  function getDefaultOpts (line 7) | function getDefaultOpts(simple) {
  function validate (line 326) | function validate(extension, name) {
  function escapeCharactersCallback (line 525) | function escapeCharactersCallback(wholeMatch, m1) {
  function _constructor (line 765) | function _constructor() {
  function _parseExtension (line 797) | function _parseExtension(ext, name) {
  function legacyExtensionLoading (line 861) | function legacyExtensionLoading(ext, name) {
  function listen (line 893) | function listen(name, callback) {
  function rTrimInputText (line 908) | function rTrimInputText(text) {
  function replaceLink (line 1223) | function replaceLink(wm, link, m2, m3, trailingPunctuation) {
  function replaceMail (line 1235) | function replaceMail(wholeMatch, mail) {
  function headerId (line 1822) | function headerId(m) {
  function writeImageTag (line 1858) | function writeImageTag (wholeMatch, altText, linkId, url, width, height,...
  function processListItems (line 1963) | function processListItems (listStr, trimTrailing) {
  function parseConsecutiveLists (line 2079) | function parseConsecutiveLists(list, listType, trimTrailing) {
  function parseStyles (line 2354) | function parseStyles(sLine) {
  function parseHeaders (line 2366) | function parseHeaders(header, style) {
  function parseCells (line 2377) | function parseCells(cell, style) {
  function buildTable (line 2382) | function buildTable(headers, cells) {

FILE: index.d.ts
  class Noty (line 5) | class Noty {
  type Type (line 75) | type Type = 'alert' | 'success' | 'warning' | 'error' | 'info' | 'inform...
  type Theme (line 76) | type Theme = string;
  type Layout (line 77) | type Layout = 'top' | 'topLeft' | 'topCenter' | 'topRight' | 'center' | ...
  type Event (line 78) | type Event = 'beforeShow' | 'onShow' | 'afterShow' | 'onClose' | 'afterC...
  type Button (line 80) | interface Button {
  type Options (line 84) | interface Options {

FILE: lib/noty.js
  function __webpack_require__ (line 24) | function __webpack_require__(moduleId) {
  function _interopRequireWildcard (line 118) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function inArray (line 122) | function inArray(needle, haystack, argStrict) {
  function stopPropagation (line 142) | function stopPropagation(evt) {
  function generateID (line 176) | function generateID() {
  function outerHeight (line 190) | function outerHeight(el) {
  function camelCase (line 202) | function camelCase(string) {
  function getVendorProp (line 208) | function getVendorProp(name) {
  function getStyleProp (line 224) | function getStyleProp(name) {
  function applyCss (line 229) | function applyCss(element, prop, value) {
  function addListener (line 254) | function addListener(el, events, cb) {
  function hasClass (line 267) | function hasClass(element, name) {
  function addClass (line 272) | function addClass(element, name) {
  function removeClass (line 282) | function removeClass(element, name) {
  function remove (line 295) | function remove(element) {
  function classList (line 301) | function classList(element) {
  function visibilityChangeFlow (line 305) | function visibilityChangeFlow() {
  function createAudioElements (line 372) | function createAudioElements(ref) {
  function getExtension (line 402) | function getExtension(fileName) {
  function _interopRequireWildcard (line 437) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function getQueueCounts (line 542) | function getQueueCounts() {
  function addToQueue (line 565) | function addToQueue(ref) {
  function removeFromQueue (line 577) | function removeFromQueue(ref) {
  function queueRender (line 593) | function queueRender() {
  function queueRenderAll (line 606) | function queueRenderAll() {
  function ghostFix (line 616) | function ghostFix(ref) {
  function build (line 638) | function build(ref) {
  function hasButtons (line 656) | function hasButtons(ref) {
  function buildButtons (line 664) | function buildButtons(ref) {
  function handleModal (line 685) | function handleModal(ref) {
  function handleModalClose (line 699) | function handleModalClose(ref) {
  function createModal (line 720) | function createModal() {
  function findOrCreateContainer (line 736) | function findOrCreateContainer(ref) {
  function queueClose (line 759) | function queueClose(ref) {
  function dequeueClose (line 780) | function dequeueClose(ref) {
  function fire (line 799) | function fire(ref, eventName) {
  function openFlow (line 813) | function openFlow(ref) {
  function closeFlow (line 830) | function closeFlow(ref) {
  function _interopRequireWildcard (line 864) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _classCallCheck (line 866) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function defineProperties (line 898) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _classCallCheck (line 900) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function Push (line 903) | function Push() {
  function objectOrFunction (line 1162) | function objectOrFunction(x) {
  function isFunction (line 1167) | function isFunction(x) {
  function setScheduler (line 1202) | function setScheduler(scheduleFn) {
  function setAsap (line 1206) | function setAsap(asapFn) {
  function useNextTick (line 1219) | function useNextTick() {
  function useVertxTimer (line 1228) | function useVertxTimer() {
  function useMutationObserver (line 1238) | function useMutationObserver() {
  function useMessageChannel (line 1250) | function useMessageChannel() {
  function useSetTimeout (line 1258) | function useSetTimeout() {
  function flush (line 1268) | function flush() {
  function attemptVertx (line 1282) | function attemptVertx() {
  function then (line 1307) | function then(onFulfillment, onRejection) {
  function resolve$1 (line 1365) | function resolve$1(object) {
  function noop (line 1380) | function noop() {}
  function selfFulfillment (line 1388) | function selfFulfillment() {
  function cannotReturnOwn (line 1392) | function cannotReturnOwn() {
  function getThen (line 1396) | function getThen(promise) {
  function tryThen (line 1405) | function tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {
  function handleForeignThenable (line 1413) | function handleForeignThenable(promise, thenable, then$$1) {
  function handleOwnThenable (line 1442) | function handleOwnThenable(promise, thenable) {
  function handleMaybeThenable (line 1456) | function handleMaybeThenable(promise, maybeThenable, then$$1) {
  function resolve (line 1473) | function resolve(promise, value) {
  function publishRejection (line 1483) | function publishRejection(promise) {
  function fulfill (line 1491) | function fulfill(promise, value) {
  function reject (line 1504) | function reject(promise, reason) {
  function subscribe (line 1514) | function subscribe(parent, child, onFulfillment, onRejection) {
  function publish (line 1529) | function publish(promise) {
  function ErrorObject (line 1555) | function ErrorObject() {
  function tryCatch (line 1561) | function tryCatch(callback, detail) {
  function invokeCallback (line 1570) | function invokeCallback(settled, promise, callback, detail) {
  function initializePromise (line 1610) | function initializePromise(promise, resolver) {
  function nextId (line 1623) | function nextId() {
  function makePromise (line 1627) | function makePromise(promise) {
  function Enumerator$1 (line 1634) | function Enumerator$1(Constructor, input) {
  function validationError (line 1662) | function validationError() {
  function all$1 (line 1773) | function all$1(entries) {
  function race$1 (line 1842) | function race$1(entries) {
  function reject$1 (line 1894) | function reject$1(reason) {
  function needsResolver (line 1902) | function needsResolver() {
  function needsNew (line 1906) | function needsNew() {
  function Promise$2 (line 2013) | function Promise$2(resolver) {
  function polyfill$1 (line 2263) | function polyfill$1() {
  function defineProperties (line 2325) | function defineProperties(target, props) { for (var i = 0; i < props.len...
  function _interopRequireWildcard (line 2345) | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { ret...
  function _interopRequireDefault (line 2347) | function _interopRequireDefault(obj) { return obj && obj.__esModule ? ob...
  function _classCallCheck (line 2349) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
  function Noty (line 2356) | function Noty() {
  function setTimeout (line 2593) | function setTimeout(_x) {
  function defaultSetTimout (line 2913) | function defaultSetTimout() {
  function defaultClearTimeout (line 2916) | function defaultClearTimeout () {
  function runTimeout (line 2939) | function runTimeout(fun) {
  function runClearTimeout (line 2964) | function runClearTimeout(marker) {
  function cleanUpNextTick (line 2996) | function cleanUpNextTick() {
  function drainQueue (line 3011) | function drainQueue() {
  function Item (line 3049) | function Item(fun, array) {
  function noop (line 3063) | function noop() {}

FILE: src/api.js
  function getQueueCounts (line 107) | function getQueueCounts (queueName = 'global') {
  function addToQueue (line 128) | function addToQueue (ref) {
  function removeFromQueue (line 140) | function removeFromQueue (ref) {
  function queueRender (line 156) | function queueRender (queueName = 'global') {
  function queueRenderAll (line 167) | function queueRenderAll () {
  function ghostFix (line 177) | function ghostFix (ref) {
  function build (line 199) | function build (ref) {
  function hasButtons (line 220) | function hasButtons (ref) {
  function buildButtons (line 228) | function buildButtons (ref) {
  function handleModal (line 249) | function handleModal (ref) {
  function handleModalClose (line 263) | function handleModalClose (ref) {
  function createModal (line 284) | function createModal () {
  function findOrCreateContainer (line 300) | function findOrCreateContainer (ref) {
  function queueClose (line 323) | function queueClose (ref) {
  function dequeueClose (line 347) | function dequeueClose (ref) {
  function fire (line 366) | function fire (ref, eventName) {
  function openFlow (line 380) | function openFlow (ref) {
  function closeFlow (line 397) | function closeFlow (ref) {

FILE: src/button.js
  class NotyButton (line 3) | class NotyButton {
    method constructor (line 4) | constructor (html, classes, cb, attributes = {}) {

FILE: src/index.js
  class Noty (line 10) | class Noty {
    method constructor (line 15) | constructor (options = {}) {
    method on (line 65) | on (eventName, cb = () => {}) {
    method show (line 76) | show () {
    method stop (line 244) | stop () {
    method resume (line 252) | resume () {
    method setTimeout (line 261) | setTimeout (ms) {
    method setText (line 290) | setText (html, optionsOverride = false) {
    method setType (line 305) | setType (type, optionsOverride = false) {
    method setTheme (line 328) | setTheme (theme, optionsOverride = false) {
    method close (line 349) | close () {
    method closeAll (line 400) | static closeAll (queueName = false) {
    method clearQueue (line 419) | static clearQueue (queueName = 'global') {
    method Queues (line 429) | static get Queues () {
    method PageHidden (line 436) | static get PageHidden () {
    method overrideDefaults (line 444) | static overrideDefaults (obj) {
    method setMaxVisible (line 454) | static setMaxVisible (amount = API.DefaultMaxVisible, queueName = 'glo...
    method button (line 470) | static button (innerHtml, classes = null, cb, attributes = {}) {
    method version (line 477) | static version () {
    method Push (line 485) | static Push (workerPath) {

FILE: src/push.js
  class Push (line 1) | class Push {
    method constructor (line 2) | constructor (workerPath = '/service-worker.js') {
    method on (line 22) | on (eventName, cb = () => {}) {
    method fire (line 30) | fire (eventName, params = []) {
    method create (line 40) | create () {
    method isSupported (line 47) | isSupported () {
    method getPermissionStatus (line 63) | getPermissionStatus () {
    method getEndpoint (line 97) | getEndpoint (subscription) {
    method isSWRegistered (line 112) | isSWRegistered () {
    method unregisterWorker (line 123) | unregisterWorker () {
    method requestSubscription (line 138) | requestSubscription (userVisibleOnly = true) {

FILE: src/utils.js
  function inArray (line 5) | function inArray (needle, haystack, argStrict) {
  function stopPropagation (line 25) | function stopPropagation (evt) {
  function generateID (line 59) | function generateID (prefix = '') {
  function outerHeight (line 71) | function outerHeight (el) {
  function camelCase (line 83) | function camelCase (string) {
  function getVendorProp (line 91) | function getVendorProp (name) {
  function getStyleProp (line 107) | function getStyleProp (name) {
  function applyCss (line 112) | function applyCss (element, prop, value) {
  function addListener (line 137) | function addListener (el, events, cb, useCapture = false) {
  function hasClass (line 148) | function hasClass (element, name) {
  function addClass (line 153) | function addClass (element, name) {
  function removeClass (line 163) | function removeClass (element, name) {
  function remove (line 176) | function remove (element) {
  function classList (line 182) | function classList (element) {
  function visibilityChangeFlow (line 189) | function visibilityChangeFlow () {
  function createAudioElements (line 263) | function createAudioElements (ref) {
  function getExtension (line 293) | function getExtension (fileName) {

FILE: test/unit/init.test.js
  function fakeEvent (line 4) | function fakeEvent (el, e) {

FILE: test/unit/phantom.js
  function sendMessage (line 18) | function sendMessage () {

FILE: test/vendor/qunit.js
  function defineProperties (line 58) | function defineProperties(target, props) {
  function diff (line 137) | function diff(a, b) {
  function inArray (line 162) | function inArray(elem, array) {
  function objectValues (line 173) | function objectValues(obj) {
  function extend (line 186) | function extend(a, b, undefOnly) {
  function objectType (line 200) | function objectType(obj) {
  function is (line 237) | function is(type, obj) {
  function useStrictEquality (line 254) | function useStrictEquality(a, b) {
  function compareConstructors (line 271) | function compareConstructors(a, b) {
  function getRegExpFlags (line 299) | function getRegExpFlags(regexp) {
  function isContainer (line 303) | function isContainer(val) {
  function breadthFirstCompareChild (line 307) | function breadthFirstCompareChild(a, b) {
  function typeEquiv (line 525) | function typeEquiv(a, b) {
  function innerEquiv (line 539) | function innerEquiv(a, b) {
  function quote (line 642) | function quote(str) {
  function literal (line 645) | function literal(o) {
  function join (line 648) | function join(pre, arr, post) {
  function array (line 660) | function array(arr, stack) {
  function isArray (line 676) | function isArray(obj) {
  function emit (line 938) | function emit(eventName, data) {
  function on (line 961) | function on(eventName, callback) {
  function registerLoggingCallbacks (line 982) | function registerLoggingCallbacks(obj) {
  function runLoggingCallbacks (line 1012) | function runLoggingCallbacks(key, args) {
  function extractStacktrace (line 1025) | function extractStacktrace(e, offset) {
  function sourceFromStacktrace (line 1051) | function sourceFromStacktrace(offset) {
  function TestReport (line 1068) | function TestReport(name, suite, options) {
  function Test (line 1160) | function Test(settings) {
  function getNotStartedModules (line 1206) | function getNotStartedModules(startModule) {
  function runTest (line 1285) | function runTest(test) {
  function callHook (line 1322) | function callHook() {
  function processHooks (line 1333) | function processHooks(test, module) {
  function run (line 1442) | function run() {
  function moduleChainNameMatch (line 1568) | function moduleChainNameMatch(testModule) {
  function moduleChainIdMatch (line 1579) | function moduleChainIdMatch(testModule) {
  function pushFailure (line 1635) | function pushFailure() {
  function generateHash (line 1648) | function generateHash(module, testName) {
  function synchronize (line 1670) | function synchronize(callback, priority, seed) {
  function unitSamplerGenerator (line 1700) | function unitSamplerGenerator(seed) {
  function saveGlobal (line 1719) | function saveGlobal() {
  function checkPollution (line 1736) | function checkPollution() {
  function test (line 1755) | function test(testName, callback) {
  function todo (line 1768) | function todo(testName, callback) {
  function skip (line 1783) | function skip(testName) {
  function only (line 1797) | function only(testName, callback) {
  function internalStop (line 1814) | function internalStop(test) {
  function internalRecover (line 1841) | function internalRecover(test) {
  function internalStart (line 1847) | function internalStart(test) {
  function numberOfTests (line 1891) | function numberOfTests(module) {
  function notifyTestsRan (line 1905) | function notifyTestsRan(module) {
  function consoleProxy (line 1918) | function consoleProxy(method) {
  function Assert (line 1931) | function Assert(testContext) {
  function errorString (line 2256) | function errorString(error) {
  function exportQUnit (line 2278) | function exportQUnit(QUnit) {
  function SuiteReport (line 2312) | function SuiteReport(name, parentSuite) {
  function onError (line 2427) | function onError(error) {
  function createModule (line 2501) | function createModule() {
  function setCurrentModule (line 2530) | function setCurrentModule(module) {
  function scheduleBegin (line 2620) | function scheduleBegin() {
  function begin (line 2634) | function begin() {
  function process (line 2670) | function process(last) {
  function done (line 2696) | function done() {
  function setHook (line 2727) | function setHook(module, hookName) {
  function storeFixture (line 2749) | function storeFixture() {
  function resetFixture (line 2765) | function resetFixture() {
  function getUrlParams (line 2844) | function getUrlParams() {
  function decodeQueryParam (line 2868) | function decodeQueryParam(param) {
  function escapeText (line 2881) | function escapeText(s) {
  function addEvent (line 2919) | function addEvent(elem, type, fn) {
  function removeEvent (line 2923) | function removeEvent(elem, type, fn) {
  function addEvents (line 2927) | function addEvents(elems, type, fn) {
  function hasClass (line 2934) | function hasClass(elem, name) {
  function addClass (line 2938) | function addClass(elem, name) {
  function toggleClass (line 2944) | function toggleClass(elem, name, force) {
  function removeClass (line 2952) | function removeClass(elem, name) {
  function id (line 2964) | function id(name) {
  function abortTests (line 2968) | function abortTests() {
  function interceptNavigation (line 2978) | function interceptNavigation(ev) {
  function getUrlConfigHtml (line 2988) | function getUrlConfigHtml() {
  function toolbarChanged (line 3042) | function toolbarChanged() {
  function setUrl (line 3073) | function setUrl(params) {
  function applyUrlParams (line 3101) | function applyUrlParams() {
  function toolbarUrlConfigContainer (line 3123) | function toolbarUrlConfigContainer() {
  function abortTestsButton (line 3135) | function abortTestsButton() {
  function toolbarLooseFilter (line 3143) | function toolbarLooseFilter() {
  function moduleListHtml (line 3170) | function moduleListHtml() {
  function toolbarModuleFilter (line 3185) | function toolbarModuleFilter() {
  function appendToolbar (line 3315) | function appendToolbar() {
  function appendHeader (line 3326) | function appendHeader() {
  function appendBanner (line 3334) | function appendBanner() {
  function appendTestResults (line 3342) | function appendTestResults() {
  function appendFilteredTest (line 3366) | function appendFilteredTest() {
  function appendUserAgent (line 3374) | function appendUserAgent() {
  function appendInterface (line 3383) | function appendInterface() {
  function appendTestsList (line 3397) | function appendTestsList(modules) {
  function appendTest (line 3411) | function appendTest(name, testId, moduleName) {
  function getNameHtml (line 3518) | function getNameHtml(name, module) {
  function stripHtml (line 3550) | function stripHtml(string) {
  function DiffMatchPatch (line 3801) | function DiffMatchPatch() {}
  function diffHalfMatchI (line 4169) | function diffHalfMatchI(longtext, shorttext, i) {
  function diffLinesToCharsMunge (line 4650) | function diffLinesToCharsMunge(text) {
Condensed preview — 147 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,539K chars).
[
  {
    "path": ".babelrc",
    "chars": 77,
    "preview": "{\n  \"presets\": [\"es2015\"],\n  \"plugins\": [\"babel-plugin-add-module-exports\"]\n}"
  },
  {
    "path": ".codeclimate.yml",
    "chars": 159,
    "preview": "engines:\n  eslint:\n    enabled: true\n  fixme:\n    enabled: true\nratings:\n  paths:\n  - \"src/**/*.js\"\nexclude_paths:\n- tes"
  },
  {
    "path": ".editorconfig",
    "chars": 207,
    "preview": "# editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 47,
    "preview": "github: [needim]\npatreon: needim\nko_fi: needim\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 125,
    "preview": "> **_Noty version_**: ..... \n> **_Browser_**: .....\n> **_OS_**: .....\n> **_jsFiddle link (if available)_**: .....\n------"
  },
  {
    "path": ".gitignore",
    "chars": 131,
    "preview": "child/\n\n.DS_Store\n\n.idea/\n\nnode_modules/\n_SpecRunner.html\n/.vscode/\nyarn.lock\n.nyc_output\ncoverage\nmanifest.json\nservice"
  },
  {
    "path": ".travis.yml",
    "chars": 66,
    "preview": "language: node_js\nnode_js:\n  - \"7\"\nbranches:\n  only:\n    - master\n"
  },
  {
    "path": "Gruntfile.js",
    "chars": 3165,
    "preview": "module.exports = function (grunt) {\n  'use strict'\n\n  grunt.initConfig({\n    pkg: grunt.file.readJSON('package.json'),\n "
  },
  {
    "path": "LICENSE.txt",
    "chars": 1056,
    "preview": "Copyright (c) 2012 Nedim Arabacı\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this s"
  },
  {
    "path": "README.markdown",
    "chars": 3871,
    "preview": "# DEPRECATED\n\n<p>\n   This repository is no longer supported, please consider using alternatives.\n</p>\n\n[![No Maintenance"
  },
  {
    "path": "bower.json",
    "chars": 351,
    "preview": "{\n  \"name\": \"noty\",\n  \"description\": \"Noty - Notification library\",\n  \"license\": \"MIT\",\n  \"homepage\": \"http://ned.im/not"
  },
  {
    "path": "browserstack-builds.json",
    "chars": 931,
    "preview": "[{\"automation_build\":{\"name\":\"Local run  2017 07 27T17:31:03.314Z\",\"duration\":null,\"status\":\"done\",\"hashed_id\":\"7d248337"
  },
  {
    "path": "browserstack-session.json",
    "chars": 11700,
    "preview": "[\n  {\n    \"automation_session\": {\n      \"name\": null,\n      \"duration\": 48,\n      \"os\": \"Windows\",\n      \"os_version\": \""
  },
  {
    "path": "browserstack.json",
    "chars": 818,
    "preview": "{\n  \"test_framework\": \"qunit\",\n  \"test_path\": \"test/index.html\",\n  \"browsers\": [\n    {\n      \"browser\": \"ie\",\n      \"bro"
  },
  {
    "path": "composer.json",
    "chars": 468,
    "preview": "{\n\t\"name\": \"needim/noty\",\n\t\"description\": \"Noty is a library that makes it easy to create alert - success - error - warn"
  },
  {
    "path": "demo/animate.css",
    "chars": 72259,
    "preview": "@charset \"UTF-8\";\n\n/*!\n * animate.css -http://daneden.me/animate\n * Version - 3.5.1\n * Licensed under the MIT license - "
  },
  {
    "path": "demo/bouncejs/bounce.js",
    "chars": 29546,
    "preview": "/**\n * Bounce.js 0.8.2\n * MIT license\n */\n!function(e){if(\"object\"==typeof exports)module.exports=e();else if(\"function\""
  },
  {
    "path": "demo/demo.css",
    "chars": 2224,
    "preview": "body {\n  font-family: 'GothamRoundedLight', sans-serif;\n  font-weight: 300;\n  background-color: rgb(255, 253, 250);\n  ba"
  },
  {
    "path": "demo/demo.js",
    "chars": 10568,
    "preview": "(function () {\n\n  var mojsOpenExample = function (promise) {\n    var n = this\n    var Timeline = new mojs.Timeline()\n   "
  },
  {
    "path": "demo/fonts/stylesheet.css",
    "chars": 1334,
    "preview": "@font-face {\n    font-family: 'GothamRoundedBold';\n    src: url('gothamrnd-bold.eot');\n    src: url('gothamrnd-bold.eot'"
  },
  {
    "path": "demo/index.html",
    "chars": 2452,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>NOTY v3 Demo</title>\n  <meta name=\"viewport\" c"
  },
  {
    "path": "demo/push.html",
    "chars": 4264,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <title>NOTY v3 Push Demo</title>\n  <meta name=\"viewpo"
  },
  {
    "path": "demo/sendpush.js",
    "chars": 1172,
    "preview": "const webpush = require('web-push')\n\nconst vapidKeys = webpush.generateVAPIDKeys()\n\n// Create a project on the Firebase "
  },
  {
    "path": "docs/.nojekyll",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "docs/README.md",
    "chars": 5240,
    "preview": "# ![logo](_media/noty-v3-logo.png)\n\n> A Dependency-free notification library\n\n<div style=\"position:relative;\">\n    <ifra"
  },
  {
    "path": "docs/_assets/docs.js",
    "chars": 6941,
    "preview": "var velocityShow = function (promise) {\n  var n = this\n  $.Velocity(n.barDom, {\n    left: 450,\n    scaleY: 2\n  }, {\n    "
  },
  {
    "path": "docs/_assets/docsify.js",
    "chars": 90534,
    "preview": "(function () {\n'use strict';\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache "
  },
  {
    "path": "docs/_assets/vue.css",
    "chars": 16608,
    "preview": "* {\n  -webkit-font-smoothing: antialiased;\n  -webkit-overflow-scrolling: touch;\n  -webkit-tap-highlight-color: rgba(0, 0"
  },
  {
    "path": "docs/_navbar.md",
    "chars": 38,
    "preview": "- Translations\n    - [English](/)\n    "
  },
  {
    "path": "docs/_sidebar.md",
    "chars": 923,
    "preview": "<p align=\"center\" id=\"bas\">\n<a href=\"/noty/#/bakers\" id=\"become-a-sponsor\" class=\"bas\">Become a Sponsor</a>\n</p>\n\n- [<di"
  },
  {
    "path": "docs/animations.md",
    "chars": 7635,
    "preview": "### CSS Animations\n\nUsing with class names. (like animate.css)\n\n```javascript\nnew Noty({\n    text: 'NOTY - a dependency-"
  },
  {
    "path": "docs/api.md",
    "chars": 2173,
    "preview": "### API Methods\n\n```javascript\nvar n = new Noty({text: 'Hi!'});\n\nconsole.log(n); // Returns a NOTY javascript object\n\nn."
  },
  {
    "path": "docs/bakers.md",
    "chars": 3332,
    "preview": "# Support my Projects\n\nHi! Noty.js and [my other libraries](https://github.com/needim) are MIT licensed open source proj"
  },
  {
    "path": "docs/browsers.md",
    "chars": 1711,
    "preview": "!> This data is provided by BrowserStack Automate \n\n\n#### Local run  2017 07 27T17:31:03.314Z \n\n| OS | Browser | Result "
  },
  {
    "path": "docs/confirm.md",
    "chars": 672,
    "preview": "We can set button objects with an array like below;\n\n```javascript\nvar n = new Noty({\n  text: 'Do you want to continue? "
  },
  {
    "path": "docs/index.html",
    "chars": 8279,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n  <meta charset=\"UTF-8\">\n  <title>NOTY - a dependency-free notification library"
  },
  {
    "path": "docs/installation.md",
    "chars": 1331,
    "preview": "Include **lib/noty.css** & **lib/noty.js**\nor use Bower, NPM, Yarn or Composer\n\n```html\n<link href=\"lib/noty.css\" rel=\"s"
  },
  {
    "path": "docs/options.md",
    "chars": 4500,
    "preview": "Creating a notification;\n\n```javascript\nnew Noty({\n    ...\n    text: 'Some notification text',\n    ...\n}).show();\n```\n\nA"
  },
  {
    "path": "docs/push.md",
    "chars": 3784,
    "preview": "With v3.1.0-beta push notifications are supported with service worker implementation.\n\n### Preparation Steps\n\n* 1) Creat"
  },
  {
    "path": "docs/themes.md",
    "chars": 1102,
    "preview": "**Available Themes**: <br> `mint`, `sunset`, `relax`, `nest`, `metroui`, `semanticui`, `light`, `bootstrap-v3`, `bootstr"
  },
  {
    "path": "docs/types.md",
    "chars": 550,
    "preview": "**Types**: <br> `alert`, `success`, `warning`, `error`, `info/information`\n\n**Layouts**: <br> `top`, `topLeft`, `topCent"
  },
  {
    "path": "docs/v2/animations.html",
    "chars": 9422,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "docs/v2/api.html",
    "chars": 8414,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "docs/v2/confirmations.html",
    "chars": 8099,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "docs/v2/index.html",
    "chars": 9078,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "docs/v2/layouts.html",
    "chars": 10537,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "docs/v2/options.html",
    "chars": 9196,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "docs/v2/releases.html",
    "chars": 7277,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "docs/v2/themes.html",
    "chars": 9452,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <meta charset=\"utf-8\" />\n    <meta name=\"viewport\" content=\"width=device-wi"
  },
  {
    "path": "docs/v2/vendor/animate.css",
    "chars": 42777,
    "preview": "/*\r\nAnimate.css - http://daneden.me/animate\r\nLICENSED UNDER THE  MIT LICENSE (MIT)\r\n\r\nCopyright (c) 2012 Dan Eden\r\n\r\nPer"
  },
  {
    "path": "docs/v2/vendor/custom.css",
    "chars": 9139,
    "preview": "/*\n * What follows is the result of much research on cross-browser styling.\n * Credit left inline and big thanks to Nico"
  },
  {
    "path": "docs/v2/vendor/documentation.js",
    "chars": 8114,
    "preview": "$(function () {\n  if ($('.prettyprint').length) {\n    window.prettyPrint && prettyPrint();\n  }\n\n  noty({\n    text: '<str"
  },
  {
    "path": "docs/v2/vendor/fastclick.js",
    "chars": 24878,
    "preview": "/**\r\n * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.\r\n *\r\n * @version 0.6.11\r\n * @co"
  },
  {
    "path": "docs/v2/vendor/google-code-prettify/prettify.css",
    "chars": 879,
    "preview": ".str {\r\n  color: #EC7600;\r\n}\r\n\r\n.kwd {\r\n  color: #93C763;\r\n}\r\n\r\n.com {\r\n  color: #66747B;\r\n}\r\n\r\n.typ {\r\n  color: #678CB1"
  },
  {
    "path": "docs/v2/vendor/google-code-prettify/prettify.js",
    "chars": 13632,
    "preview": "var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;\n(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92"
  },
  {
    "path": "docs/v2/vendor/main.js",
    "chars": 25982,
    "preview": "/* global variables */\r\nvar classicLayout = false;\r\nvar portfolioKeyword;\r\nvar $container, $blog_container;\r\n\r\nwindow.an"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/.gitignore",
    "chars": 68,
    "preview": "child/\n\n.DS_Store\n\n.idea/\n\nnode_modules/\n_SpecRunner.html\n/.vscode/\n"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/Gruntfile.js",
    "chars": 2359,
    "preview": "module.exports = function(grunt) {\n    grunt.initConfig({\n\n        bump  : {\n            options: {\n                file"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/LICENSE.txt",
    "chars": 1056,
    "preview": "Copyright (c) 2012 Nedim Arabacı\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this s"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/README.markdown",
    "chars": 2695,
    "preview": "# noty - A jQuery Notification Plugin\n\n![noty v2 logo](http://ned.im/noty/v2/img/projects/noty-v2-logo.png \"noty v2\")\n\n*"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/bower.json",
    "chars": 226,
    "preview": "{\n    \"name\"       : \"noty\",\n    \"main\"       : \"js/noty/packaged/jquery.noty.packaged.js\",\n    \"ignore\"     : [],\n    \""
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/composer.json",
    "chars": 577,
    "preview": "{\n\t\"name\": \"needim/noty\",\n\t\"description\": \"noty is a jQuery plugin that makes it easy to create alert - success - error "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/allLayouts.html",
    "chars": 1826,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/allTypes.html",
    "chars": 1763,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/animate.css",
    "chars": 72922,
    "preview": "@charset \"UTF-8\";\n/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license - http://opensource.org/lic"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/api.html",
    "chars": 2378,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/buttons.css",
    "chars": 11385,
    "preview": "/*!\n * Bootstrap Buttons v2.0.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://ww"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/consumingAlert.html",
    "chars": 1578,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/customContainer.html",
    "chars": 2580,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/index.html",
    "chars": 2178,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/issue302.html",
    "chars": 1923,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/jquery-1.8.0.js",
    "chars": 258375,
    "preview": "/*!\n * jQuery JavaScript Library v1.8.0\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Cop"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/killer.html",
    "chars": 2084,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/noanim.html",
    "chars": 1907,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/notification_html.js",
    "chars": 1024,
    "preview": "// notification body's can be any html string or just string\nvar notification_html = [];\nnotification_html[0] = '<div cl"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/progressbar.html",
    "chars": 2550,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/themeBootstrap.html",
    "chars": 1946,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/themeCss.html",
    "chars": 7927,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/usingMaxVisible.html",
    "chars": 2392,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <me"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/usingWithAnimate.css.html",
    "chars": 2481,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/usingWithButtons.html",
    "chars": 2508,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/usingWithButtons2.html",
    "chars": 2407,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/usingWithModal.html",
    "chars": 1777,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/demo/usingWithOldOptions.html",
    "chars": 1113,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n    <met"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/jquery.noty.js",
    "chars": 19340,
    "preview": "/*!\n @package noty - jQuery Notification Plugin\n @version version: 2.4.1\n @contributors https://github.com/needim/noty/v"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/bottom.js",
    "chars": 792,
    "preview": "$.noty.layouts.bottom = {\n    name     : 'bottom',\n    options  : {},\n    container: {\n        object  : '<ul id=\"noty_b"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/bottomCenter.js",
    "chars": 995,
    "preview": "$.noty.layouts.bottomCenter = {\n    name     : 'bottomCenter',\n    options  : { // overrides options\n\n    },\n    contain"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/bottomLeft.js",
    "chars": 997,
    "preview": "$.noty.layouts.bottomLeft = {\n    name     : 'bottomLeft',\n    options  : { // overrides options\n\n    },\n    container: "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/bottomRight.js",
    "chars": 1002,
    "preview": "$.noty.layouts.bottomRight = {\n    name     : 'bottomRight',\n    options  : { // overrides options\n\n    },\n    container"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/center.js",
    "chars": 1699,
    "preview": "$.noty.layouts.center = {\n    name     : 'center',\n    options  : { // overrides options\n\n    },\n    container: {\n      "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/centerLeft.js",
    "chars": 1712,
    "preview": "$.noty.layouts.centerLeft = {\n    name     : 'centerLeft',\n    options  : { // overrides options\n\n    },\n    container: "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/centerRight.js",
    "chars": 1716,
    "preview": "$.noty.layouts.centerRight = {\n    name     : 'centerRight',\n    options  : { // overrides options\n\n    },\n    container"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/inline.js",
    "chars": 684,
    "preview": "$.noty.layouts.inline = {\n    name     : 'inline',\n    options  : {},\n    container: {\n        object  : '<ul class=\"not"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/top.js",
    "chars": 779,
    "preview": "$.noty.layouts.top = {\n    name     : 'top',\n    options  : {},\n    container: {\n        object  : '<ul id=\"noty_top_lay"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/topCenter.js",
    "chars": 982,
    "preview": "$.noty.layouts.topCenter = {\n    name     : 'topCenter',\n    options  : { // overrides options\n\n    },\n    container: {\n"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/topLeft.js",
    "chars": 985,
    "preview": "$.noty.layouts.topLeft = {\n    name     : 'topLeft',\n    options  : { // overrides options\n\n    },\n    container: {\n    "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/layouts/topRight.js",
    "chars": 990,
    "preview": "$.noty.layouts.topRight = {\n    name     : 'topRight',\n    options  : { // overrides options\n\n    },\n    container: {\n  "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/packaged/jquery.noty.packaged.js",
    "chars": 53468,
    "preview": "!function(root, factory) {\n\t if (typeof define === 'function' && define.amd) {\n\t\t define(['jquery'], factory);\n\t } else "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/promise.js",
    "chars": 12040,
    "preview": "/*!\n * Noty Helpers Javascript From JQuery Javascript Library\n *\n * Ported by Maksim Pecherskiy.  Original Licensing:\n *"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/themes/bootstrap.js",
    "chars": 1903,
    "preview": "$.noty.themes.bootstrapTheme = {\n  name    : 'bootstrapTheme',\n  modal   : {\n    css: {\n      position       : 'fixed',\n"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/themes/default.js",
    "chars": 6504,
    "preview": "$.noty.themes.defaultTheme = {\n  name    : 'defaultTheme',\n  helpers : {\n    borderFix: function () {\n      if (this.opt"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/themes/metroui.js",
    "chars": 4443,
    "preview": "$.noty.themes.metroui = {\n  name    : 'metroui',\n  helpers : {},\n  modal   : {\n    css: {\n      position       : 'fixed'"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/themes/relax.js",
    "chars": 4787,
    "preview": "$.noty.themes.relax = {\n  name    : 'relax',\n  helpers : {},\n  modal   : {\n    css: {\n      position       : 'fixed',\n  "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/js/noty/themes/semanticUI.js",
    "chars": 2849,
    "preview": "$.noty.themes.semanticUI = {\n  name: 'semanticUI',\n\n  template: '<div class=\"ui message\"><div class=\"content\"><div class"
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/noty.jquery.json",
    "chars": 1089,
    "preview": "{\n    \"name\"        : \"noty\",\n    \"version\"     : \"2.4.1\",\n    \"title\"       : \"noty - a jquery notification plugin\",\n  "
  },
  {
    "path": "docs/v2/vendor/noty-2.4.1/package.json",
    "chars": 912,
    "preview": "{\n\t\"name\": \"noty\",\n\t\"version\": \"2.4.1\",\n\t\"title\": \"noty - a jquery notification plugin\",\n\t\"description\": \"noty is a jQue"
  },
  {
    "path": "docs/v2/vendor/ps-icon-pack.css",
    "chars": 24405,
    "preview": "@charset \"UTF-8\";\n\n@font-face {\n  font-family: \"prestashop-official-pack\";\n  src:url(\"../fonts/prestashop-official-pack."
  },
  {
    "path": "docs/v2/vendor/showdown/showdown.js",
    "chars": 72899,
    "preview": ";/*! showdown 21-12-2016 */\r\n(function(){\r\n/**\n * Created by Tivie on 13-07-2015.\n */\n\nfunction getDefaultOpts(simple) {"
  },
  {
    "path": "index.d.ts",
    "chars": 3030,
    "preview": "declare module 'noty' {\n\texport = Noty;\n}\n\ndeclare class Noty {\n\tconstructor(options?: Noty.Options);\n\n\t/**\n\t * Show a N"
  },
  {
    "path": "lib/noty.css",
    "chars": 5589,
    "preview": ".noty_layout_mixin, #noty_layout__top, #noty_layout__topLeft, #noty_layout__topCenter, #noty_layout__topRight, #noty_lay"
  },
  {
    "path": "lib/noty.js",
    "chars": 81013,
    "preview": "/* \r\n  @package NOTY - Dependency-free notification library \r\n  @version version: 3.2.0-beta \r\n  @contributors https://g"
  },
  {
    "path": "lib/themes/bootstrap-v3.css",
    "chars": 1413,
    "preview": ".noty_theme__bootstrap-v3.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  position: relative;\n  border: 1px solid tran"
  },
  {
    "path": "lib/themes/bootstrap-v4.css",
    "chars": 1429,
    "preview": ".noty_theme__bootstrap-v4.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  position: relative;\n  border: 1px solid tran"
  },
  {
    "path": "lib/themes/light.css",
    "chars": 1342,
    "preview": ".noty_theme__light.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative; }\n  .noty"
  },
  {
    "path": "lib/themes/metroui.css",
    "chars": 1058,
    "preview": ".noty_theme__metroui.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  position: relative;\n  box-shadow: rgba(0, 0, 0, 0"
  },
  {
    "path": "lib/themes/mint.css",
    "chars": 950,
    "preview": ".noty_theme__mint.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative; }\n  .noty_"
  },
  {
    "path": "lib/themes/nest.css",
    "chars": 3195,
    "preview": ".noty_theme__nest.noty_bar {\n  margin: 0 0 15px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative;\n  box"
  },
  {
    "path": "lib/themes/relax.css",
    "chars": 1342,
    "preview": ".noty_theme__relax.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative; }\n  .noty"
  },
  {
    "path": "lib/themes/semanticui.css",
    "chars": 1243,
    "preview": ".noty_theme__semanticui.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  position: relative;\n  border: 1px solid transp"
  },
  {
    "path": "lib/themes/sunset.css",
    "chars": 1212,
    "preview": ".noty_theme__sunset.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative; }\n  .not"
  },
  {
    "path": "manifest.json.template",
    "chars": 147,
    "preview": "{\n  \"name\": \"NOTY\",\n  \"short_name\": \"NOTY\",\n  \"start_url\": \"./demo/push.html\",\n  \"display\": \"standalone\",\n  \"gcm_sender_"
  },
  {
    "path": "package.json",
    "chars": 2665,
    "preview": "{\n  \"name\": \"noty\",\n  \"version\": \"3.2.0-beta\",\n  \"title\": \"Noty - Dependency-free notification library\",\n  \"description\""
  },
  {
    "path": "postcss.config.js",
    "chars": 111,
    "preview": "module.exports = {\n  plugins: [\n    require('autoprefixer')({\n      browsers: ['last 8 versions']\n    })\n  ]\n}\n"
  },
  {
    "path": "service-worker.js.template",
    "chars": 1278,
    "preview": "self.addEventListener('install', event => {\n  self.skipWaiting()\n  console.log('worker installed', event)\n})\n\nself.addEv"
  },
  {
    "path": "src/api.js",
    "chars": 8568,
    "preview": "import * as Utils from 'utils'\n\nexport let PageHidden = false\nexport let DocModalCount = 0\n\nconst DocTitleProps = {\n  or"
  },
  {
    "path": "src/button.js",
    "chars": 486,
    "preview": "import * as Utils from 'utils'\n\nexport class NotyButton {\n  constructor (html, classes, cb, attributes = {}) {\n    this."
  },
  {
    "path": "src/index.js",
    "chars": 11040,
    "preview": "/* global VERSION */\n\nimport 'noty.scss'\nimport Promise from 'es6-promise'\nimport * as Utils from 'utils'\nimport * as AP"
  },
  {
    "path": "src/noty.scss",
    "chars": 4119,
    "preview": "$noty-primary-color: #333 !default;\n$noty-default-width: 325px !default;\n$noty-corner-space: 20px !default;\n\n.noty_layou"
  },
  {
    "path": "src/push.js",
    "chars": 5405,
    "preview": "export class Push {\n  constructor (workerPath = '/service-worker.js') {\n    this.subData = {}\n    this.workerPath = work"
  },
  {
    "path": "src/themes/bootstrap-v3.scss",
    "chars": 1239,
    "preview": ".noty_theme__bootstrap-v3.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  position: relative;\n  border: 1px solid tran"
  },
  {
    "path": "src/themes/bootstrap-v4.scss",
    "chars": 1256,
    "preview": ".noty_theme__bootstrap-v4.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  position: relative;\n  border: 1px solid tran"
  },
  {
    "path": "src/themes/light.scss",
    "chars": 1077,
    "preview": ".noty_theme__light.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative;\n\n  .noty_"
  },
  {
    "path": "src/themes/metroui.scss",
    "chars": 943,
    "preview": ".noty_theme__metroui.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  position: relative;\n  box-shadow: rgba(0, 0, 0, 0"
  },
  {
    "path": "src/themes/mint.scss",
    "chars": 893,
    "preview": ".noty_theme__mint.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative;\n\n  .noty_b"
  },
  {
    "path": "src/themes/nest.scss",
    "chars": 2948,
    "preview": ".noty_theme__nest.noty_bar {\n  margin: 0 0 15px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative;\n  box"
  },
  {
    "path": "src/themes/relax.scss",
    "chars": 1077,
    "preview": ".noty_theme__relax.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative;\n\n  .noty_"
  },
  {
    "path": "src/themes/semanticui.scss",
    "chars": 1170,
    "preview": ".noty_theme__semanticui.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  position: relative;\n  border: 1px solid transp"
  },
  {
    "path": "src/themes/sunset.scss",
    "chars": 908,
    "preview": ".noty_theme__sunset.noty_bar {\n  margin: 4px 0;\n  overflow: hidden;\n  border-radius: 2px;\n  position: relative;\n\n  .noty"
  },
  {
    "path": "src/utils.js",
    "chars": 6872,
    "preview": "import * as API from 'api'\n\nexport const animationEndEvents = 'webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimat"
  },
  {
    "path": "test/index.html",
    "chars": 2186,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initia"
  },
  {
    "path": "test/unit/init.test.js",
    "chars": 12513,
    "preview": "$(function () {\n  'use strict'\n\n  function fakeEvent (el, e) {\n    if (document.createEvent) {\n      var event = documen"
  },
  {
    "path": "test/unit/phantom.js",
    "chars": 2052,
    "preview": "/*\n * grunt-contrib-qunit\n * http://gruntjs.com/\n *\n * Copyright (c) 2014 \"Cowboy\" Ben Alman, contributors\n * Licensed u"
  },
  {
    "path": "test/vendor/qunit-theme-ninja.css",
    "chars": 4579,
    "preview": "/**\n * QUnit Ninja Theme by Jamie Hoover v1.1.0\n * Modified by Nedim Arabacı\n * https://github.com/Krinkle/qunit-theme-n"
  },
  {
    "path": "test/vendor/qunit.js",
    "chars": 138940,
    "preview": "/*!\n * QUnit 2.2.0\n * https://qunitjs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under th"
  },
  {
    "path": "webpack.config.js",
    "chars": 2033,
    "preview": "/* global __dirname, require, module */\n'use strict'\n\nconst webpack = require('webpack')\nconst path = require('path')\nco"
  }
]

// ... and 2 more files (download for full content)

About this extraction

This page contains the full source code of the needim/noty GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 147 files (1.4 MB), approximately 410.6k tokens, and a symbol index with 470 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!