#{{ page.title }}
+{{ page.description }}
+diff --git a/autoload.inc b/autoload.inc new file mode 100644 index 0000000..88222b4 --- /dev/null +++ b/autoload.inc @@ -0,0 +1,4 @@ + 'bootstrap', + 'inpath' => new \SYSTEM\PLIB('popper/'), + 'outpath' => new \SYSTEM\PLIB('popper/docu/'), + 'inpath_md' => new \SYSTEM\PLIB('popper/docu/structure.xml'), + 'outpath_md' => new \SYSTEM\PLIB('popper/wiki/'), + 'cachepath' => new \SYSTEM\PLIB('popper/docu/cache/'), + 'ignore' => array(), + 'sourcecode' => true, + 'parseprivate' => false, + 'title' => 'LIB - Popper.js'); + } +} \ No newline at end of file diff --git a/lib/.bithoundrc b/lib/.bithoundrc new file mode 100644 index 0000000..f58bfec --- /dev/null +++ b/lib/.bithoundrc @@ -0,0 +1,18 @@ +{ + "dependencies": { + "mute": [ + "jsdoc-to-markdown" + ] + }, + "critics": { + "lint": { "engine": "none" } + }, + "ignore": [ + "**/docs/**", + "packages/scripts/**", + "packages/test-utils/**" + ], + "test": [ + "**/tests/**" + ] +} diff --git a/lib/.codeclimate.yml b/lib/.codeclimate.yml new file mode 100644 index 0000000..28c695d --- /dev/null +++ b/lib/.codeclimate.yml @@ -0,0 +1,11 @@ +engines: + duplication: + enabled: false + eslint: + enabled: false + channel: eslint-3 + fixme: + enabled: true +ratings: + paths: + - "src/**/*.js" diff --git a/lib/.editorconfig b/lib/.editorconfig new file mode 100644 index 0000000..898e0c8 --- /dev/null +++ b/lib/.editorconfig @@ -0,0 +1,9 @@ +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false diff --git a/lib/.github/ISSUE_TEMPLATE.md b/lib/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..22f2e54 --- /dev/null +++ b/lib/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,36 @@ + + +### CodePen demo + + + +https://codepen.io/pen?template=wGqJEz + +### Steps to reproduce the problem + +1. +2. +3. + +### What is the expected behavior? + + + +### What went wrong? + + + +### Any other comments? + + diff --git a/lib/.github/PULL_REQUEST_TEMPLATE.md b/lib/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..cea1cd9 --- /dev/null +++ b/lib/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ + diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 0000000..92d01f3 --- /dev/null +++ b/lib/.gitignore @@ -0,0 +1,24 @@ +# https://git-scm.com/docs/gitignore +# https://help.github.com/articles/ignoring-files +# Example .gitignore files: https://github.com/github/gitignore +node_modules +.DS_Store +.tmp +.chrome +*.log +.jekyll-metadata +dist +.idea/ +*.log +package-lock.json +coverage.info + +# When you switch branches, things can get messy +_site +.sass-cache + +# Exclude Nuget .nuspec because we generate it from package.json +# during the npm publish step, this to avoid duplication +#=============================================================== +package.nuspec +*.nupkg diff --git a/lib/.jsdoc b/lib/.jsdoc new file mode 100644 index 0000000..11144a5 --- /dev/null +++ b/lib/.jsdoc @@ -0,0 +1,19 @@ +{ + "tags": { + "allowUnknownTags": true + }, + "plugins": ["plugins/markdown"], + "templates": { + "cleverLinks": false, + "monospaceLinks": false + }, + "opts": { + "encoding": "utf8", + "destination": "./docs/", + "recurse": true, + "query": "value", + "private": true, + "lenient": true + + } +} diff --git a/lib/.travis.yml b/lib/.travis.yml new file mode 100644 index 0000000..4a43eb6 --- /dev/null +++ b/lib/.travis.yml @@ -0,0 +1,29 @@ +language: node_js +node_js: 8.1.1 +before_install: + - curl -o- -L https://yarnpkg.com/install.sh | bash + - export PATH="$HOME/.yarn/bin:$PATH" +script: + - bundlesize-init + - COVERAGE=true BROWSERS=SLChrome,SLInternetExplorer10,SLFirefox,SLInternetExplorer11 travis_retry yarn test + - BROWSERS=SLEdge,SLSafari travis_retry yarn test # coverage leads to problems with these browsers + - yarn build # make sure build works fine +after_success: + - bundlesize + - yarn global add codeclimate-test-reporter lcov-result-merger + - lcov-result-merger "packages/**/.tmp/coverage/report-lcov/lcov.info" > coverage.info + - codeclimate-test-reporter < coverage.info +addons: + sauce_connect: + username: "popperjs" + code_climate: + repo_token: 5d692bc0fbeb0e2141bba54efdb6aa8f941b10c7f8c4ac95de781e706cf44de1 + jwt: + secure: "lRwBWS0UOdrcqmZupsMP7cCtrm1YOXxJMxu6qejzhLwasfvmtc6oSVUrEeaxBg2KTc8YM9l5faRPYSKcjy8fTfiCIT6SbB1/F/PFCim3KZc9QxEUNXuIkpPSLOxzNN+tYQdZJobkar8dLonqpn1jrsoLMz2wyFp5ze03hdhqa3/Itt6r3LAQMNaIdXzbgwZY7CIQ5BZWqopFWjRRzBCYXWev5Su695+AFEGt7G32d8m9z66383aZ0xFF6f9nsgu17LY+2Fw+0G7ts3MG+bcN7RtEhiWax5q4kM+8ud7Q9qs/bmdz8eQ3uXVKcOeddNat5S4QATiDB/fayo54rYWfPLNOkZkIS9JiWDN3Z0psJzROyaKgwmdBrDgOmEcaq8kcL8iWM9nRkNjrHdVyooob5J70oHHkB/Swz0vVowK4Q1hXxcFiwC8w43baOotMIFMcixHtFNsaEWg7J+CGIm852bVFPvFZCD+tw9UoP2BJcg/MpA/uvxvLL0U5wO5ZZjS9618U1Kn/DNCg+4NC6vTNT9htny9KBAKn70JNFZrKcfHWgv8cnyhhS9sJKjuyvYz1IF8eQ4CHX9klG1N1JGwFKAfSToySIcBs1ra1m+jG9c3zdJwLc+sfPKnfvF5t4kTLRpM3oENsFR2oIBsV0Tu2npb5wUVZ+YWIBVgLMj0xNaI=" +cache: + yarn: true + directories: + - node_modules +branches: + only: + - master diff --git a/lib/CHANGELOG.md b/lib/CHANGELOG.md new file mode 100644 index 0000000..696da49 --- /dev/null +++ b/lib/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog moved! + +You can find the releases history with the relative changes visiting the dedicated GitHub page: + +https://github.com/FezVrasta/popper.js/releases diff --git a/lib/CODE_OF_CONDUCT.md b/lib/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..24114a3 --- /dev/null +++ b/lib/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at federico.zivolo@gmail.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/lib/CONTRIBUTING.md b/lib/CONTRIBUTING.md new file mode 100644 index 0000000..db87c3a --- /dev/null +++ b/lib/CONTRIBUTING.md @@ -0,0 +1,95 @@ +# Contributing to Popper.js + +## Report bugs + +If you find a bug, please, try to isolate the specific case and provide a fiddle on CodePen or JSFiddle to make it easy to reproduce the problem and help others finding a solution. +You can use [this CodePen](http://codepen.io/FezVrasta/pen/wGqJEz) which already includes Popper.js. + +If your issue is not about a bug, please make sure to consider posting on StackOverflow instead. + +Feature requests are welcome! + +## Setup + +Run `yarn` to install the needed dependencies. + +Note that `npm` is not supported because this projects makes use of the Yarn workspaces. + +## Developing + +The repository is a monorepo managed by [Lerna](https://github.com/lerna/lerna), this makes it +possible to manage multiple projects on the same repository. + +In our case, the main projects are `popper` and `tooltip`, which are the home of Popper.js and Tooltip.js +All our packages are stored in the `packages/` folder. + + +### Adopt an issue + +All the issues, if not assigned to someone, can be adopted by anyone. Just make sure to comment on +the issue to let know other users about your intention to work on it. +Also, remember to comment again in case you end up abandoning the issue. + +Each issue has a `DIFFICULTY: *` label to help you pick the one with the difficulty level adapt to you. +Additionally, check out the `PRIORITY: *` label to see which issues should take precedence over the others. +If possible, prefer issues with an higher priority, but if you want to adopt an issue with lower priority, +it's not a problem! + +Issues with `NEEDS: CI test` need a PR that integrates a test in the test suite to reproduce the bug, +this is very useful because it allows other developers to try to fix the bug having a feedback. + + +### Style conventions + +You don't have to worry about code style conventions, [prettier](https://github.com/prettier/prettier) +will automatically format your code once you commit your changes. + +### Test + +We strive to keep the code coverage as high as possible, but above all, we want to avoid +to introduce or reintroduce bugs in our code base. + +For this reason, every time a code change is made, we must make sure that a test is covering +the code we just changed. +If we fix a bug, we add a test to avoid that this bug pops up again in the future. + +To help us with this process, we have a karma + jasmine environment to test Popper.js and Tooltip.js + +The tests are located in the `tests/` folder of the two projects. (e.g. `packages/popper/tests/`) + + +```bash +# You can run all the repositories tests running +yarn test + +# or a single project's tests with +yarn test --scope=popper.js # or tooltip.js +``` + +If you want to run the tests in watch mode: + +```bash +# You can run all the repositories tests running +yarn test:dev + +# or a single project's tests with +yarn test:dev --scope=popper.js # or tooltip.js +``` + +Do you want to test your changes against all the supported browsers? Feel free to send a PR +and your changes will get automatically tested. + + +### Build + +To create a new release run: + +```bash +# to build both projects +yarn build + +# or to build a single project +yarn build --scope=popper.js # or tooltip.js +``` + +You can also build and watch for changes to automatically refresh the build using the `--watch` option. diff --git a/lib/LICENSE.md b/lib/LICENSE.md new file mode 100644 index 0000000..c0bd0cd --- /dev/null +++ b/lib/LICENSE.md @@ -0,0 +1,25 @@ +The MIT License (MIT) +===================== + +Copyright © 2016 Federico Zivolo and contributors + +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. diff --git a/lib/MENTIONS.md b/lib/MENTIONS.md new file mode 100644 index 0000000..9fa51b3 --- /dev/null +++ b/lib/MENTIONS.md @@ -0,0 +1,88 @@ +# Projects using Popper.js + +Popper.js aims to be a foundation block to build powerful libraries on top of it. + +In this page we try to collect a list of libraries built with it: + +# Integration in frameworks and view libraries + +You can easily use Popper.js inside your application written using one of the +most common frameworks or view libraries thank to the following projects. + +> We are looking for awesome libraries to integrate Popper.js into other + frameworks and libraries. +> Have you written an integration library for your favourite framework? Let us know! + +## React + +### [react-popper](https://github.com/souporserious/react-popper) + +React wrapper around Popper.js. (@FezVrasta approved! 👍) + +### [ak-layer](https://www.npmjs.com/package/ak-layer) + +React wrapper around Popper.js, maintained by [Atlassian](https://www.atlassian.com/). + +## Angular + +### [ngx-popper](https://github.com/MrFrankel/ngx-popper) + +Angular wrapper for Popper.js + +## AngularJS + +### [angular-popper](https://www.npmjs.com/package/angular-popper) + +This component is in alpha base, you can contribute to it! + +## Vue.js + +The Vue.js situation is particular, there are several UI frameworks that use +Popper.js internally, but only few "basic" components that let you use Popper.js with it. + +### [vue-popper-component](https://github.com/antongorodezkiy/vue-popper-component) + +Simple Vue.js component for Popper.js. + +### [vue-popperjs](https://github.com/RobinCK/vue-popper) + +VueJS 2.x popover component based [popper.js](https://popper.js.org/) + +### [vue-directive-tooltip](https://www.npmjs.com/package/vue-directive-tooltip) + +Vue.js tooltip directive (based on Popper.js) + +### [v-tooltip](https://github.com/Akryum/v-tooltip) + +Vue.js 2.x directive + +## Ember.js + +### [ember-popper](https://github.com/kybishop/ember-popper) + +An Ember-centric wrapper around Popper.js. + +## Preact and Inferno + +### [react-popper](https://github.com/souporserious/react-popper) + +It is developed for React but it works fine with both Preact and Inferno if +you alias `react` and `react-dom` to `preact-compat` or `inferno-compat`. + +# Other projects + +### [Tippy.js](https://atomiks.github.io/tippyjs/) + +A lightweight, pure JavaScript tooltip library. + + +----------- + +For an always updated list of projects using Popper.js, please visit: + +- [npmjs.com depended list](https://www.npmjs.com/browse/depended/popper.js) +- [NPM-Graph list](https://npm-graph.com/NpmPackage/popper.js) + +### Want to see your library or project in this page? + +Fork this repository, edit this page and send a Pull Request! diff --git a/lib/README.md b/lib/README.md new file mode 100644 index 0000000..0ec44b6 --- /dev/null +++ b/lib/README.md @@ -0,0 +1,226 @@ + + +
+ A library used to position poppers in web applications. +
+ + + +
+
+
+
+## Wut? Poppers?
+
+A popper is an element on the screen which "pops out" from the natural flow of your application.
+Common examples of poppers are tooltips, popovers and drop-downs.
+
+
+## So, yet another tooltip library?
+
+Well, basically, **no**.
+Popper.js is a **positioning engine**, its purpose is to calculate the position of an element
+to make it possible to position it near a given reference element.
+
+The engine is completely modular and most of its features are implemented as **modifiers**
+(similar to middlewares or plugins).
+The whole code base is written in ES2015 and its features are automatically tested on real browsers thanks to [SauceLabs](https://saucelabs.com/) and [TravisCI](https://travis-ci.org/).
+
+Popper.js has zero dependencies. No jQuery, no LoDash, nothing.
+It's used by big companies like [Twitter in Bootstrap v4](https://getbootstrap.com/), [Microsoft in WebClipper](https://github.com/OneNoteDev/WebClipper) and [Atlassian in AtlasKit](https://aui-cdn.atlassian.com/atlaskit/registry/).
+
+### Popper.js
+
+This is the engine, the library that computes and, optionally, applies the styles to
+the poppers.
+
+Some of the key points are:
+
+- Position elements keeping them in their original DOM context (doesn't mess with your DOM!);
+- Allows to export the computed informations to integrate with React and other view libraries;
+- Supports Shadow DOM elements;
+- Completely customizable thanks to the modifiers based structure;
+
+Visit our [project page](https://fezvrasta.github.io/popper.js) to see a lot of examples of what you can do with Popper.js!
+
+Find [the documentation here](docs/_includes/popper-documentation.md).
+
+
+### Tooltip.js
+
+Since lots of users just need a simple way to integrate powerful tooltips in their projects,
+we created **Tooltip.js**.
+It's a small library that makes it easy to automatically create tooltips using as engine Popper.js.
+Its API is almost identical to the famous tooltip system of Bootstrap, in this way it will be
+easy to integrate it in your projects.
+The tooltips generated by Tooltip.js are accessible thanks to the `aria` tags.
+
+Find [the documentation here](docs/_includes/tooltip-documentation.md).
+
+
+
+ + The available placements are the same you are used to with Popper.js: +
+ +It just works
+Hover me to see 4 tooltips!
++ Try dragging the reference element on the left side, its popper will move on its bottom edge. + Then, try to move the reference element on the bottom left corner, it will move on its top edge. +
+{% highlight javascript %} +var popper = new Popper(referenceElement, onLeftPopper, { + placement: 'left', + modifiers: { + flip: { + behavior: ['left', 'bottom', 'top'] + }, + preventOverflow: { + boundariesElement: container, + }, + }, +}); +{% endhighlight %} diff --git a/lib/docs/_includes/example20.html b/lib/docs/_includes/example20.html new file mode 100644 index 0000000..8d506aa --- /dev/null +++ b/lib/docs/_includes/example20.html @@ -0,0 +1,54 @@ +Drag me
+on the edges
+Flipping popper
+which never flips to right
+ ++ You can show, hide or toggle a tooltip programmatically: +
+ +Manually triggered
+
+ In this example we have a relative div which contains a div with overflow: scroll.
+ Inside it, there are our popper and reference elements.
+
Scroll me
+up and down
+I follow it
+staying between boundaries
+ ++ Shift your poppers on start or end of its reference element side. +
+ +{% highlight javascript %} +var shiftStart = new Popper(referenceElement, shiftStartPopper, { + placement: 'left-start', +}); + +var shiftEnd = new Popper(referenceElement, shiftEndPopper, { + placement: 'bottom-end', +}); +{% endhighlight %} diff --git a/lib/docs/_includes/example40.html b/lib/docs/_includes/example40.html new file mode 100644 index 0000000..445c04b --- /dev/null +++ b/lib/docs/_includes/example40.html @@ -0,0 +1,38 @@ +Reference
+Shifted popper
+on start
+ +Shifted popper
+on end
+ +
+ By default, poppers use as boundaries the page viewport.
+ Scroll the page to see the popper flip when hits the page viewport margins.
+
Pop
+on the bottom
+Popper on bottom
+Flips when hits viewport
+ +The dataObject is an object containing all the informations used by Popper.js
+this object get passed to modifiers and to the onCreate and onUpdate callbacks.
The referenceObject is an object that provides an interface compatible with Popper.js
+and lets you use it as replacement of a real DOM node.
+You can use this method to position a popper relatively to a set of coordinates
+in case you don't have a DOM node to use as reference.
new Popper(referenceObject, popperNode);
+NB: This feature isn't supported in Internet Explorer 10
+objectModifiers are plugins used to alter the behavior of your poppers.
+Popper.js uses a set of 9 modifiers to provide all the basic functionalities
+needed by the library.
Usually you don't want to override the order, fn and onLoad props.
+All the other properties are configurations that could be tweaked.
dataObjectModifier function, each modifier can have a function of this type assigned
+to its fn property.
+These functions will be called on each update, this means that you must
+make sure they are performant enough to avoid performance bottlenecks.
functionfunctionObject
+ * [.placement](#Popper.Defaults.placement)
+ * [.eventsEnabled](#Popper.Defaults.eventsEnabled)
+ * [.removeOnDestroy](#Popper.Defaults.removeOnDestroy)
+ * [.modifiers](#Popper.Defaults.modifiers)
+ * [.onCreate()](#Popper.Defaults.onCreate)
+ * [.onUpdate()](#Popper.Defaults.onUpdate)
+ * [.placements](#Popper.placements) : enum
+ * [.update()](#Popper.update)
+ * [.destroy()](#Popper.destroy)
+ * [.enableEventListeners()](#Popper.enableEventListeners)
+ * [.disableEventListeners()](#Popper.disableEventListeners)
+ * [.scheduleUpdate()](#Popper.scheduleUpdate)
+
+
+
+### new Popper(reference, popper, options)
+Create a new Popper.js instance
+
+**Returns**: Object - instance - The generated Popper.js instance
+
+| Param | Type | Description |
+| --- | --- | --- |
+| reference | HTMLElement \| [referenceObject](#referenceObject) | The reference element used to position the popper |
+| popper | HTMLElement | The HTML element used as popper. |
+| options | Object | Your custom options to override the ones defined in [Defaults](#defaults) |
+
+
+
+### Popper.Defaults : Object
+Default options provided to Popper.js constructor.Popper](#Popper)
+
+* [.Defaults](#Popper.Defaults) : Object
+ * [.placement](#Popper.Defaults.placement)
+ * [.eventsEnabled](#Popper.Defaults.eventsEnabled)
+ * [.removeOnDestroy](#Popper.Defaults.removeOnDestroy)
+ * [.modifiers](#Popper.Defaults.modifiers)
+ * [.onCreate()](#Popper.Defaults.onCreate)
+ * [.onUpdate()](#Popper.Defaults.onUpdate)
+
+
+
+#### Defaults.placement
+Popper's placement
+
+**Kind**: static property of [Defaults](#Popper.Defaults)
+**Properties**
+
+| Name | Type | Default |
+| --- | --- | --- |
+| placement | [placements](#Popper.placements) | 'bottom' |
+
+
+
+#### Defaults.eventsEnabled
+Whether events (resize, scroll) are initially enabled
+
+**Kind**: static property of [Defaults](#Popper.Defaults)
+**Properties**
+
+| Name | Type | Default |
+| --- | --- | --- |
+| eventsEnabled | Boolean | true |
+
+
+
+#### Defaults.removeOnDestroy
+Set to true if you want to automatically remove the popper when
+you call the `destroy` method.
+
+**Kind**: static property of [Defaults](#Popper.Defaults)
+**Properties**
+
+| Name | Type | Default |
+| --- | --- | --- |
+| removeOnDestroy | Boolean | false |
+
+
+
+#### Defaults.modifiers
+List of modifiers used to modify the offsets before they are applied to the popper.
+They provide most of the functionalities of Popper.js
+
+**Kind**: static property of [Defaults](#Popper.Defaults)
+**Properties**
+
+| Type |
+| --- |
+| [modifiers](#modifiers) |
+
+
+
+#### Defaults.onCreate()
+Callback called when the popper is created.Defaults](#Popper.Defaults)
+**Properties**
+
+| Type |
+| --- |
+| [onCreate](#onCreate) |
+
+
+
+#### Defaults.onUpdate()
+Callback called when the popper is updated, this callback is not called
+on the initialization/creation of the popper, but only on subsequent
+updates.Defaults](#Popper.Defaults)
+**Properties**
+
+| Type |
+| --- |
+| [onUpdate](#onUpdate) |
+
+
+
+### Popper.placements : enum
+List of accepted placements to use as values of the `placement` option.Popper](#Popper)
+**Read only**: true
+
+
+### Popper.update()
+Updates the position of the popper, computing the new offsets and applying
+the new style.Popper](#Popper)
+
+
+### Popper.destroy()
+Destroy the popper
+
+**Kind**: static method of [Popper](#Popper)
+
+
+### Popper.enableEventListeners()
+It will add resize/scroll events and start recalculating
+position of the popper element when they are triggered.
+
+**Kind**: static method of [Popper](#Popper)
+
+
+### Popper.disableEventListeners()
+It will remove resize/scroll events and won't recalculate popper position
+when they are triggered. It also won't trigger onUpdate callback anymore,
+unless you call `update` method manually.
+
+**Kind**: static method of [Popper](#Popper)
+
+
+### Popper.scheduleUpdate()
+Schedule an update, it will run on the next UI update available
+
+**Kind**: static method of [Popper](#Popper)
+
+
+## dataObject
+The `dataObject` is an object containing all the informations used by Popper.js
+this object get passed to modifiers and to the `onCreate` and `onUpdate` callbacks.
+
+**Kind**: global variable
+**Properties**
+
+| Name | Type | Description |
+| --- | --- | --- |
+| data.instance | Object | The Popper.js instance |
+| data.placement | String | Placement applied to popper |
+| data.originalPlacement | String | Placement originally defined on init |
+| data.flipped | Boolean | True if popper has been flipped by flip modifier |
+| data.hide | Boolean | True if the reference element is out of boundaries, useful to know when to hide the popper. |
+| data.arrowElement | HTMLElement | Node used as arrow by arrow modifier |
+| data.styles | Object | Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`) |
+| data.arrowStyles | Object | Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`) |
+| data.boundaries | Object | Offsets of the popper boundaries |
+| data.offsets | Object | The measurements of popper, reference and arrow elements. |
+| data.offsets.popper | Object | `top`, `left`, `width`, `height` values |
+| data.offsets.reference | Object | `top`, `left`, `width`, `height` values |
+| data.offsets.arrow | Object | `top` and `left` offsets, only one of them will be different from 0 |
+
+
+
+## referenceObject
+The `referenceObject` is an object that provides an interface compatible with Popper.js
+and lets you use it as replacement of a real DOM node.function | A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. |
+| data.clientWidth | number | An ES6 getter that will return the width of the virtual reference element. |
+| data.clientHeight | number | An ES6 getter that will return the height of the virtual reference element. |
+
+
+
+## modifiers : object
+Modifiers are plugins used to alter the behavior of your poppers.object
+ * [~shift](#modifiers..shift)
+ * [.order](#modifiers..shift.order)
+ * [.enabled](#modifiers..shift.enabled)
+ * [.fn](#modifiers..shift.fn)
+ * [~offset](#modifiers..offset)
+ * [.order](#modifiers..offset.order)
+ * [.enabled](#modifiers..offset.enabled)
+ * [.fn](#modifiers..offset.fn)
+ * [.offset](#modifiers..offset.offset)
+ * [~preventOverflow](#modifiers..preventOverflow)
+ * [.order](#modifiers..preventOverflow.order)
+ * [.enabled](#modifiers..preventOverflow.enabled)
+ * [.fn](#modifiers..preventOverflow.fn)
+ * [.priority](#modifiers..preventOverflow.priority)
+ * [.padding](#modifiers..preventOverflow.padding)
+ * [.boundariesElement](#modifiers..preventOverflow.boundariesElement)
+ * [~keepTogether](#modifiers..keepTogether)
+ * [.order](#modifiers..keepTogether.order)
+ * [.enabled](#modifiers..keepTogether.enabled)
+ * [.fn](#modifiers..keepTogether.fn)
+ * [~arrow](#modifiers..arrow)
+ * [.order](#modifiers..arrow.order)
+ * [.enabled](#modifiers..arrow.enabled)
+ * [.fn](#modifiers..arrow.fn)
+ * [.element](#modifiers..arrow.element)
+ * [~flip](#modifiers..flip)
+ * [.order](#modifiers..flip.order)
+ * [.enabled](#modifiers..flip.enabled)
+ * [.fn](#modifiers..flip.fn)
+ * [.behavior](#modifiers..flip.behavior)
+ * [.padding](#modifiers..flip.padding)
+ * [.boundariesElement](#modifiers..flip.boundariesElement)
+ * [~inner](#modifiers..inner)
+ * [.order](#modifiers..inner.order)
+ * [.enabled](#modifiers..inner.enabled)
+ * [.fn](#modifiers..inner.fn)
+ * [~hide](#modifiers..hide)
+ * [.order](#modifiers..hide.order)
+ * [.enabled](#modifiers..hide.enabled)
+ * [.fn](#modifiers..hide.fn)
+ * [~computeStyle](#modifiers..computeStyle)
+ * [.order](#modifiers..computeStyle.order)
+ * [.enabled](#modifiers..computeStyle.enabled)
+ * [.fn](#modifiers..computeStyle.fn)
+ * [.gpuAcceleration](#modifiers..computeStyle.gpuAcceleration)
+ * [.x](#modifiers..computeStyle.x)
+ * [.y](#modifiers..computeStyle.y)
+ * [~applyStyle](#modifiers..applyStyle)
+ * [.order](#modifiers..applyStyle.order)
+ * [.enabled](#modifiers..applyStyle.enabled)
+ * [.fn](#modifiers..applyStyle.fn)
+ * [.onLoad](#modifiers..applyStyle.onLoad)
+ * ~~[.gpuAcceleration](#modifiers..applyStyle.gpuAcceleration)~~
+
+
+
+### modifiers~shift
+Modifier used to shift the popper on the start or end of its reference
+element.modifiers](#modifiers)
+
+* [~shift](#modifiers..shift)
+ * [.order](#modifiers..shift.order)
+ * [.enabled](#modifiers..shift.enabled)
+ * [.fn](#modifiers..shift.fn)
+
+
+
+#### shift.order
+**Kind**: static property of [shift](#modifiers..shift)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 100 | Index used to define the order of execution |
+
+
+
+#### shift.enabled
+**Kind**: static property of [shift](#modifiers..shift)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### shift.fn
+**Kind**: static property of [shift](#modifiers..shift)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+### modifiers~offset
+The `offset` modifier can shift your popper on both its axis.
+
+It accepts the following units:
+- `px` or unitless, interpreted as pixels
+- `%` or `%r`, percentage relative to the length of the reference element
+- `%p`, percentage relative to the length of the popper element
+- `vw`, CSS viewport width unit
+- `vh`, CSS viewport height unit
+
+For length is intended the main axis relative to the placement of the popper.modifiers](#modifiers)
+
+* [~offset](#modifiers..offset)
+ * [.order](#modifiers..offset.order)
+ * [.enabled](#modifiers..offset.enabled)
+ * [.fn](#modifiers..offset.fn)
+ * [.offset](#modifiers..offset.offset)
+
+
+
+#### offset.order
+**Kind**: static property of [offset](#modifiers..offset)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 200 | Index used to define the order of execution |
+
+
+
+#### offset.enabled
+**Kind**: static property of [offset](#modifiers..offset)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### offset.fn
+**Kind**: static property of [offset](#modifiers..offset)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+#### offset.offset
+**Kind**: static property of [offset](#modifiers..offset)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| offset | Number \| String | 0 | The offset value as described in the modifier description |
+
+
+
+### modifiers~preventOverflow
+Modifier used to prevent the popper from being positioned outside the boundary.
+
+An scenario exists where the reference itself is not within the boundaries.modifiers](#modifiers)
+
+* [~preventOverflow](#modifiers..preventOverflow)
+ * [.order](#modifiers..preventOverflow.order)
+ * [.enabled](#modifiers..preventOverflow.enabled)
+ * [.fn](#modifiers..preventOverflow.fn)
+ * [.priority](#modifiers..preventOverflow.priority)
+ * [.padding](#modifiers..preventOverflow.padding)
+ * [.boundariesElement](#modifiers..preventOverflow.boundariesElement)
+
+
+
+#### preventOverflow.order
+**Kind**: static property of [preventOverflow](#modifiers..preventOverflow)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 300 | Index used to define the order of execution |
+
+
+
+#### preventOverflow.enabled
+**Kind**: static property of [preventOverflow](#modifiers..preventOverflow)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### preventOverflow.fn
+**Kind**: static property of [preventOverflow](#modifiers..preventOverflow)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+#### preventOverflow.priority
+**Kind**: static property of [preventOverflow](#modifiers..preventOverflow)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| priority | Array | ['left','right','top','bottom'] | Popper will try to prevent overflow following these priorities by default, then, it could overflow on the left and on top of the `boundariesElement` |
+
+
+
+#### preventOverflow.padding
+**Kind**: static property of [preventOverflow](#modifiers..preventOverflow)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| padding | number | 5 | Amount of pixel used to define a minimum distance between the boundaries and the popper this makes sure the popper has always a little padding between the edges of its container |
+
+
+
+#### preventOverflow.boundariesElement
+**Kind**: static property of [preventOverflow](#modifiers..preventOverflow)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| boundariesElement | String \| HTMLElement | 'scrollParent' | Boundaries used by the modifier, can be `scrollParent`, `window`, `viewport` or any DOM element. |
+
+
+
+### modifiers~keepTogether
+Modifier used to make sure the reference and its popper stay near eachothers
+without leaving any gap between the two. Expecially useful when the arrow is
+enabled and you want to assure it to point to its reference element.
+It cares only about the first axis, you can still have poppers with margin
+between the popper and its reference element.
+
+**Kind**: inner property of [modifiers](#modifiers)
+
+* [~keepTogether](#modifiers..keepTogether)
+ * [.order](#modifiers..keepTogether.order)
+ * [.enabled](#modifiers..keepTogether.enabled)
+ * [.fn](#modifiers..keepTogether.fn)
+
+
+
+#### keepTogether.order
+**Kind**: static property of [keepTogether](#modifiers..keepTogether)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 400 | Index used to define the order of execution |
+
+
+
+#### keepTogether.enabled
+**Kind**: static property of [keepTogether](#modifiers..keepTogether)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### keepTogether.fn
+**Kind**: static property of [keepTogether](#modifiers..keepTogether)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+### modifiers~arrow
+This modifier is used to move the `arrowElement` of the popper to make
+sure it is positioned between the reference element and its popper element.
+It will read the outer size of the `arrowElement` node to detect how many
+pixels of conjuction are needed.
+
+It has no effect if no `arrowElement` is provided.
+
+**Kind**: inner property of [modifiers](#modifiers)
+
+* [~arrow](#modifiers..arrow)
+ * [.order](#modifiers..arrow.order)
+ * [.enabled](#modifiers..arrow.enabled)
+ * [.fn](#modifiers..arrow.fn)
+ * [.element](#modifiers..arrow.element)
+
+
+
+#### arrow.order
+**Kind**: static property of [arrow](#modifiers..arrow)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 500 | Index used to define the order of execution |
+
+
+
+#### arrow.enabled
+**Kind**: static property of [arrow](#modifiers..arrow)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### arrow.fn
+**Kind**: static property of [arrow](#modifiers..arrow)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+#### arrow.element
+**Kind**: static property of [arrow](#modifiers..arrow)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| element | String \| HTMLElement | '[x-arrow]' | Selector or node used as arrow |
+
+
+
+### modifiers~flip
+Modifier used to flip the popper's placement when it starts to overlap its
+reference element.
+
+Requires the `preventOverflow` modifier before it in order to work.
+
+**NOTE:** this modifier will interrupt the current update cycle and will
+restart it if it detects the need to flip the placement.
+
+**Kind**: inner property of [modifiers](#modifiers)
+
+* [~flip](#modifiers..flip)
+ * [.order](#modifiers..flip.order)
+ * [.enabled](#modifiers..flip.enabled)
+ * [.fn](#modifiers..flip.fn)
+ * [.behavior](#modifiers..flip.behavior)
+ * [.padding](#modifiers..flip.padding)
+ * [.boundariesElement](#modifiers..flip.boundariesElement)
+
+
+
+#### flip.order
+**Kind**: static property of [flip](#modifiers..flip)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 600 | Index used to define the order of execution |
+
+
+
+#### flip.enabled
+**Kind**: static property of [flip](#modifiers..flip)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### flip.fn
+**Kind**: static property of [flip](#modifiers..flip)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+#### flip.behavior
+**Kind**: static property of [flip](#modifiers..flip)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| behavior | String \| Array | 'flip' | The behavior used to change the popper's placement. It can be one of `flip`, `clockwise`, `counterclockwise` or an array with a list of valid placements (with optional variations). |
+
+
+
+#### flip.padding
+**Kind**: static property of [flip](#modifiers..flip)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| padding | number | 5 | The popper will flip if it hits the edges of the `boundariesElement` |
+
+
+
+#### flip.boundariesElement
+**Kind**: static property of [flip](#modifiers..flip)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| boundariesElement | String \| HTMLElement | 'viewport' | The element which will define the boundaries of the popper position, the popper will never be placed outside of the defined boundaries (except if keepTogether is enabled) |
+
+
+
+### modifiers~inner
+Modifier used to make the popper flow toward the inner of the reference element.
+By default, when this modifier is disabled, the popper will be placed outside
+the reference element.
+
+**Kind**: inner property of [modifiers](#modifiers)
+
+* [~inner](#modifiers..inner)
+ * [.order](#modifiers..inner.order)
+ * [.enabled](#modifiers..inner.enabled)
+ * [.fn](#modifiers..inner.fn)
+
+
+
+#### inner.order
+**Kind**: static property of [inner](#modifiers..inner)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 700 | Index used to define the order of execution |
+
+
+
+#### inner.enabled
+**Kind**: static property of [inner](#modifiers..inner)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | false | Whether the modifier is enabled or not |
+
+
+
+#### inner.fn
+**Kind**: static property of [inner](#modifiers..inner)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+### modifiers~hide
+Modifier used to hide the popper when its reference element is outside of the
+popper boundaries. It will set a `x-out-of-boundaries` attribute which can
+be used to hide with a CSS selector the popper when its reference is
+out of boundaries.
+
+Requires the `preventOverflow` modifier before it in order to work.
+
+**Kind**: inner property of [modifiers](#modifiers)
+
+* [~hide](#modifiers..hide)
+ * [.order](#modifiers..hide.order)
+ * [.enabled](#modifiers..hide.enabled)
+ * [.fn](#modifiers..hide.fn)
+
+
+
+#### hide.order
+**Kind**: static property of [hide](#modifiers..hide)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 800 | Index used to define the order of execution |
+
+
+
+#### hide.enabled
+**Kind**: static property of [hide](#modifiers..hide)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### hide.fn
+**Kind**: static property of [hide](#modifiers..hide)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+### modifiers~computeStyle
+Computes the style that will be applied to the popper element to gets
+properly positioned.
+
+Note that this modifier will not touch the DOM, it just prepares the styles
+so that `applyStyle` modifier can apply it. This separation is useful
+in case you need to replace `applyStyle` with a custom implementation.
+
+This modifier has `850` as `order` value to maintain backward compatibility
+with previous versions of Popper.js. Expect the modifiers ordering method
+to change in future major versions of the library.
+
+**Kind**: inner property of [modifiers](#modifiers)
+
+* [~computeStyle](#modifiers..computeStyle)
+ * [.order](#modifiers..computeStyle.order)
+ * [.enabled](#modifiers..computeStyle.enabled)
+ * [.fn](#modifiers..computeStyle.fn)
+ * [.gpuAcceleration](#modifiers..computeStyle.gpuAcceleration)
+ * [.x](#modifiers..computeStyle.x)
+ * [.y](#modifiers..computeStyle.y)
+
+
+
+#### computeStyle.order
+**Kind**: static property of [computeStyle](#modifiers..computeStyle)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 850 | Index used to define the order of execution |
+
+
+
+#### computeStyle.enabled
+**Kind**: static property of [computeStyle](#modifiers..computeStyle)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### computeStyle.fn
+**Kind**: static property of [computeStyle](#modifiers..computeStyle)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+#### computeStyle.gpuAcceleration
+**Kind**: static property of [computeStyle](#modifiers..computeStyle)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| gpuAcceleration | Boolean | true | If true, it uses the CSS 3d transformation to position the popper. Otherwise, it will use the `top` and `left` properties. |
+
+
+
+#### computeStyle.x
+**Kind**: static property of [computeStyle](#modifiers..computeStyle)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| x | string | "'bottom'" | Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. Change this if your popper should grow in a direction different from `bottom` |
+
+
+
+#### computeStyle.y
+**Kind**: static property of [computeStyle](#modifiers..computeStyle)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| x | string | "'left'" | Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. Change this if your popper should grow in a direction different from `right` |
+
+
+
+### modifiers~applyStyle
+Applies the computed styles to the popper element.
+
+All the DOM manipulations are limited to this modifier. This is useful in case
+you want to integrate Popper.js inside a framework or view library and you
+want to delegate all the DOM manipulations to it.
+
+Note that if you disable this modifier, you must make sure the popper element
+has its position set to `absolute` before Popper.js can do its work!
+
+Just disable this modifier and define you own to achieve the desired effect.
+
+**Kind**: inner property of [modifiers](#modifiers)
+
+* [~applyStyle](#modifiers..applyStyle)
+ * [.order](#modifiers..applyStyle.order)
+ * [.enabled](#modifiers..applyStyle.enabled)
+ * [.fn](#modifiers..applyStyle.fn)
+ * [.onLoad](#modifiers..applyStyle.onLoad)
+ * ~~[.gpuAcceleration](#modifiers..applyStyle.gpuAcceleration)~~
+
+
+
+#### applyStyle.order
+**Kind**: static property of [applyStyle](#modifiers..applyStyle)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| order | number | 900 | Index used to define the order of execution |
+
+
+
+#### applyStyle.enabled
+**Kind**: static property of [applyStyle](#modifiers..applyStyle)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| enabled | Boolean | true | Whether the modifier is enabled or not |
+
+
+
+#### applyStyle.fn
+**Kind**: static property of [applyStyle](#modifiers..applyStyle)
+**Properties**
+
+| Type |
+| --- |
+| [ModifierFn](#ModifierFn) |
+
+
+
+#### applyStyle.onLoad
+**Kind**: static property of [applyStyle](#modifiers..applyStyle)
+**Properties**
+
+| Type |
+| --- |
+| function |
+
+
+
+#### ~~applyStyle.gpuAcceleration~~
+***Deprecated***
+
+**Kind**: static property of [applyStyle](#modifiers..applyStyle)
+**Properties**
+
+| Name | Type | Default | Description |
+| --- | --- | --- | --- |
+| gpuAcceleration | Boolean | true | If true, it uses the CSS 3d transformation to position the popper. Otherwise, it will use the `top` and `left` properties. |
+
+
+
+## ModifierFn(data, options) ⇒ [dataObject](#dataObject)
+Modifier function, each modifier can have a function of this type assigned
+to its `fn` property.dataObject](#dataObject) - The data object, properly modified
+
+| Param | Type | Description |
+| --- | --- | --- |
+| data | [dataObject](#dataObject) | The data object generated by `update` method |
+| options | Object | Modifiers configuration and options |
+
+
+
+## onUpdate : function
+**Kind**: global typedef
+
+| Param | Type |
+| --- | --- |
+| data | [dataObject](#dataObject) |
+
+
+
+## onCreate : function
+**Kind**: global typedef
+
+| Param | Type |
+| --- | --- |
+| data | [dataObject](#dataObject) |
+
diff --git a/lib/docs/_includes/scripts.html b/lib/docs/_includes/scripts.html
new file mode 100644
index 0000000..05454a0
--- /dev/null
+++ b/lib/docs/_includes/scripts.html
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/docs/_includes/tooltip-documentation.md b/lib/docs/_includes/tooltip-documentation.md
new file mode 100644
index 0000000..63cef33
--- /dev/null
+++ b/lib/docs/_includes/tooltip-documentation.md
@@ -0,0 +1,84 @@
+
+
+## Tooltip
+**Kind**: global class
+
+* [Tooltip](#Tooltip)
+ * [new Tooltip(reference, options)](#new_Tooltip_new)
+ * _instance_
+ * [.show()](#Tooltip+show)
+ * [.hide()](#Tooltip+hide)
+ * [.dispose()](#Tooltip+dispose)
+ * [.toggle()](#Tooltip+toggle)
+ * _static_
+ * [.PlacementFunction](#Tooltip.PlacementFunction) ⇒ String
+ * [.TitleFunction](#Tooltip.TitleFunction) ⇒ String
+
+
+
+### new Tooltip(reference, options)
+Create a new Tooltip.js instance
+
+**Returns**: Object - instance - The generated tooltip instance
+
+| Param | Type | Default | Description |
+| --- | --- | --- | --- |
+| reference | HTMLElement | | The DOM node used as reference of the tooltip (it can be a jQuery element). |
+| options | Object | | |
+| options.placement | String | bottom | Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -end), left(-start, -end)` |
+| options.container | HTMLElement \| String \| false | false | Append the tooltip to a specific element. |
+| options.delay | Number \| Object | 0 | Delay showing and hiding the tooltip (ms) - does not apply to manual trigger type. If a number is supplied, delay is applied to both hide/show. Object structure is: `{ show: 500, hide: 100 }` |
+| options.html | Boolean | false | Insert HTML into the tooltip. If false, the content will inserted with `innerText`. |
+| options.placement | String \| PlacementFunction | 'top' | One of the allowed placements, or a function returning one of them. |
+| [options.template] | String | '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' | Base HTML to used when creating the tooltip. The tooltip's `title` will be injected into the `.tooltip-inner` or `.tooltip__inner`. `.tooltip-arrow` or `.tooltip__arrow` will become the tooltip's arrow. The outermost wrapper element should have the `.tooltip` class. |
+| options.title | String \| HTMLElement \| TitleFunction | '' | Default title value if `title` attribute isn't present. |
+| [options.trigger] | String | 'hover focus' | How tooltip is triggered - click, hover, focus, manual. You may pass multiple triggers; separate them with a space. `manual` cannot be combined with any other trigger. |
+| options.boundariesElement | HTMLElement | | The element used as boundaries for the tooltip. For more information refer to Popper.js' [boundariesElement docs](https://popper.js.org/popper-documentation.html) |
+| options.offset | Number \| String | 0 | Offset of the tooltip relative to its reference. For more information refer to Popper.js' [offset docs](https://popper.js.org/popper-documentation.html) |
+| options.popperOptions | Object | {} | Popper options, will be passed directly to popper instance. For more information refer to Popper.js' [options docs](https://popper.js.org/popper-documentation.html) |
+
+
+
+### tooltip.show()
+Reveals an element's tooltip. This is considered a "manual" triggering of the tooltip.
+Tooltips with zero-length titles are never displayed.
+
+**Kind**: instance method of [Tooltip](#Tooltip)
+
+
+### tooltip.hide()
+Hides an element’s tooltip. This is considered a “manual” triggering of the tooltip.
+
+**Kind**: instance method of [Tooltip](#Tooltip)
+
+
+### tooltip.dispose()
+Hides and destroys an element’s tooltip.
+
+**Kind**: instance method of [Tooltip](#Tooltip)
+
+
+### tooltip.toggle()
+Toggles an element’s tooltip. This is considered a “manual” triggering of the tooltip.
+
+**Kind**: instance method of [Tooltip](#Tooltip)
+
+
+### Tooltip.PlacementFunction ⇒ String
+Placement function, its context is the Tooltip instance.
+
+**Kind**: static typedef of [Tooltip](#Tooltip)
+**Returns**: String - placement - One of the allowed placement options.
+
+| Param | Type | Description |
+| --- | --- | --- |
+| tooltip | HTMLElement | tooltip DOM node. |
+| reference | HTMLElement | reference DOM node. |
+
+
+
+### Tooltip.TitleFunction ⇒ String
+Title function, its context is the Tooltip instance.
+
+**Kind**: static typedef of [Tooltip](#Tooltip)
+**Returns**: String - placement - The desired title.
diff --git a/lib/docs/_layouts/default.html b/lib/docs/_layouts/default.html
new file mode 100644
index 0000000..f23c347
--- /dev/null
+++ b/lib/docs/_layouts/default.html
@@ -0,0 +1,29 @@
+
+
+
+
+ {% include head.html %}
+
+
+
+
+ {{ page.description }}
+{{ page.description }}
+{{ page.description }}
+
+ Trust us, managing poppers can be a pain, we have learned it the hard way!
+ For this reason we have created Popper.js, your new best friend.
+
+ Popper.js is just ~6KB minified and gzpipped, zero dependencies.
+ Its code base is in ES6 and is automatically tested against several browsers.
+ If this is not enough, it plays super nicely with
+ React, AngularJS and more!
+
We know, every popper has its own story. You must be able to fully customize
+ its behavior with ease. We have prepared a set of awesome options to satisfy your needs!
But they will never be enough, for this reason, Popper.js supports plugins (we call them "Modifiers")
++ You decide where the popper will stay, choose between the four sides of your + reference element and shift it on the start or at the end of it. +
++ We don't want your poppers to get lost. Give them some boundaries to make sure + they will stay within them. +
++ What if your popper hits walls? Will it act like a ghost, passing through it, + or will it change side of its reference element? It's up to you. +
+
+ Poppers have arrows, usually.
+ We take care of them making sure they stay in the right place: between popper
+ and reference element.
+
+ We automatically detect when your popper should be absolutely positioned or + fixed. Don't worry about that! +
++ No lag, period. Each position update takes almost no time to + refresh your poppers. No compromises. +
++ When you need surgical precision about the position of your popper, + set an offset to it to shift it by the given amount of pixels. +
+
+ Our plugin system allows you to add any kind of feature to Popper.js.
+ Most of the built-in behaviors are written as modifiers!
+
Visit our GitHub page to know how to get Popper.js and to learn more about it.
+| t |
+ Since Popper.js is an engine, we wanted to provide a library that shows you how + you can use it in the real world. +
++ Tooltip.js can create, show, hide and toggle tooltips. Its API is almost identical + to the one used by Bootstrap for their tooltips, if you know Bootstrap, you already + know Tooltip.js! +
+Visit our GitHub page to know how to get Tooltip.js and to learn more about it.
++ A library used to position poppers in web applications. +
+ + + +
+
+
+
+## Wut? Poppers?
+
+A popper is an element on the screen which "pops out" from the natural flow of your application.
+Common examples of poppers are tooltips, popovers and drop-downs.
+
+
+## So, yet another tooltip library?
+
+Well, basically, **no**.
+Popper.js is a **positioning engine**, its purpose is to calculate the position of an element
+to make it possible to position it near a given reference element.
+
+The engine is completely modular and most of its features are implemented as **modifiers**
+(similar to middlewares or plugins).
+The whole code base is written in ES2015 and its features are automatically tested on real browsers thanks to [SauceLabs](https://saucelabs.com/) and [TravisCI](https://travis-ci.org/).
+
+Popper.js has zero dependencies. No jQuery, no LoDash, nothing.
+It's used by big companies like [Twitter in Bootstrap v4](https://getbootstrap.com/), [Microsoft in WebClipper](https://github.com/OneNoteDev/WebClipper) and [Atlassian in AtlasKit](https://aui-cdn.atlassian.com/atlaskit/registry/).
+
+### Popper.js
+
+This is the engine, the library that computes and, optionally, applies the styles to
+the poppers.
+
+Some of the key points are:
+
+- Position elements keeping them in their original DOM context (doesn't mess with your DOM!);
+- Allows to export the computed informations to integrate with React and other view libraries;
+- Supports Shadow DOM elements;
+- Completely customizable thanks to the modifiers based structure;
+
+Visit our [project page](https://fezvrasta.github.io/popper.js) to see a lot of examples of what you can do with Popper.js!
+
+Find [the documentation here](/docs/_includes/popper-documentation.md).
+
+
+### Tooltip.js
+
+Since lots of users just need a simple way to integrate powerful tooltips in their projects,
+we created **Tooltip.js**.
+It's a small library that makes it easy to automatically create tooltips using as engine Popper.js.
+Its API is almost identical to the famous tooltip system of Bootstrap, in this way it will be
+easy to integrate it in your projects.
+The tooltips generated by Tooltip.js are accessible thanks to the `aria` tags.
+
+Find [the documentation here](/docs/_includes/tooltip-documentation.md).
+
+
+## Installation
+Popper.js is available on the following package managers and CDNs:
+
+| Source | |
+|:-------|:---------------------------------------------------------------------------------|
+| npm | `npm install popper.js --save` |
+| yarn | `yarn add popper.js` |
+| NuGet | `PM> Install-Package popper.js` |
+| Bower | `bower install popper.js --save` |
+| unpkg | [`https://unpkg.com/popper.js`](https://unpkg.com/popper.js) |
+| cdnjs | [`https://cdnjs.com/libraries/popper.js`](https://cdnjs.com/libraries/popper.js) |
+
+Tooltip.js as well:
+
+| Source | |
+|:-------|:---------------------------------------------------------------------------------|
+| npm | `npm install tooltip.js --save` |
+| yarn | `yarn add tooltip.js` |
+| Bower* | `bower install tooltip.js=https://unpkg.com/tooltip.js --save` |
+| unpkg | [`https://unpkg.com/tooltip.js`](https://unpkg.com/tooltip.js) |
+| cdnjs | [`https://cdnjs.com/libraries/popper.js`](https://cdnjs.com/libraries/popper.js) |
+
+\*: Bower isn't officially supported, it can be used to install Tooltip.js only trough the unpkg.com CDN. This method has the limitation of not being able to define a specific version of the library. Bower and Popper.js suggests to use npm or Yarn for your projects.
+For more info, [read the related issue](https://github.com/FezVrasta/popper.js/issues/390).
+
+### Dist targets
+
+Popper.js is currently shipped with 3 targets in mind: UMD, ESM and ESNext.
+
+- UMD - Universal Module Definition: AMD, RequireJS and globals;
+- ESM - ES Modules: For webpack/Rollup or browser supporting the spec;
+- ESNext: Available in `dist/`, can be used with webpack and `babel-preset-env`;
+
+Make sure to use the right one for your needs. If you want to import it with a `
+
+