diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..5ad82278 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,42 @@ +module.exports = { + "env": { + "browser" : true, + "commonjs": true, + "es6" : true, + "node" : true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 6, + "sourceType" : "module" + }, + "plugins": [ + "html" + ], + "rules": { + "array-bracket-spacing" : ["error", "never"], + "array-callback-return" : ["error"], + "block-scoped-var" : ["error"], + "block-spacing" : ["error", "always"], + "curly" : ["error"], + "dot-notation" : ["error"], + "eqeqeq" : ["error"], + "indent" : ["error", 4], + "linebreak-style" : ["error", "unix"], + "no-console" : ["warn"], + "no-floating-decimal" : ["error"], + "no-implicit-coercion" : ["error"], + "no-implicit-globals" : ["error"], + "no-loop-func" : ["error"], + "no-return-assign" : ["error"], + "no-template-curly-in-string": ["error"], + "no-unneeded-ternary" : ["error"], + "no-unused-vars" : ["error", { "args": "none" }], + "no-useless-computed-key" : ["error"], + "no-useless-return" : ["error"], + "no-var" : ["error"], + "prefer-const" : ["error"], + "quotes" : ["error", "single"], + "semi" : ["error", "always"] + } +}; diff --git a/.gitignore b/.gitignore index 77b24d96..8a59dac3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,13 @@ -# Doc build artifacts -# en_build/* -# docs/*/doxygen-warning-log.txt -# docs/*/sphinx-warning-log.txt -# docs/*/sphinx-warning-log-sanitized.txt -# ./*/xml/ -# ./*/xml_in/ -# ./*/man/ -# docs/doxygen_sqlite3.db -# en_build/html/searchindex.js +# Folders +build +coverage +dist +node_modules + +# Files +*.log + +# OS +._* +.cache +.DS_Store diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 3cce948f..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "restructuredtext.confPath": "" -} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..5db857e9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,44 @@ +# Change Log + +## 0.4.0 + +*2018-10-10* + +- Added docsify-tabs support and demo. +- Added heading level 5-6 styles. +- Fixed `` line height presentation. + +## 0.3.0 + +*2018-08-07* + +- Added `--sidebar-nav-pagelink-background-size` property. + +## 0.2.0 + +*2018-08-07* + +- Updated css-vars-ponyfill dependency to address potential issues with + CSS custom properties in legacy browsers. + +## 0.1.2 + +*2018-06-23* + +- Updated Simple and Simple-Dark themes: Fixed `--notice-tip-border-color` + value inheriting from `-theme-color` +- Fixed high CPU usage in Safari when using Simple or Simple-Dark themes + +## 0.1.1 + +*2018-06-08* + +- Update package.json, index.md and README copy +- Update default theme: remove borders from `` and `` +- Update simple theme: change `
` style to match important/tip style + +## 0.1.0 + +*2018-06-07* + +- Initial release diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..51e689fe --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 John Hildenbiddle + +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/README.md b/README.md index 8c64904e..21cf5203 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,21 @@ -# M5Stack Official Documentation +# M5Stack -### Here is the source code of m5stack documentation. If you want to read the details of it, visit this URL(*https://m5stack.readthedocs.io*) please. +**Welcome to M5Stack Documents!** -### CONTENT +## Introduction -#### 1. [Product Documents](https://m5stack.readthedocs.io/en/latest/product-documents/index.html) -#### 2. [Get Started](https://m5stack.readthedocs.io/en/latest/get-started/index.html) -#### 3. [API Reference](https://m5stack.readthedocs.io/en/latest/api-reference/index.html) -#### 4. [M5Stack Cases](https://m5stack.readthedocs.io/en/latest/basic-cases/index.html) -#### 5. [M5Stack Awesome](https://m5stack.readthedocs.io/en/latest/m5stack-awesome/index.html) -#### 6. [FAQ](https://m5stack.readthedocs.io/en/latest/m5stack-faq/index.html) +**M5 stack is a modular stackable development device. The M stands for Modular and 5 stands for the the units compact 5 x 5 cm size.** + +**The M5 stack aims to take the pain out of developing your new inventions and ideas. M5 stack comes packed with sensors, wifi, bluetooth, a screen and its own power supply which avoids the inconvenience of messy wires strewn across breadboards and adding new functionality is as simple as stacking it on top of one of the many expansion modules or plugging in a unit via the handy grove connectors.** + +Our a series of core boards are based on **ESP32** chip. + +Our aim is "**Stackable Board is Product**". Here's the [Official Website](www.m5stack.com) + + +## Contact & Support + +- :computer: Visit [Official Website](www.m5stack.com) for newest product +- :busts_in_silhouette: Sign in our [Forum](http://forum.m5stack.com) for more designs with M5Stack +- :mailbox_with_mail: If you have any questions, you can contact us by [Email](tech@m5stack.com) +- :convenience_store: If you want to get our products, access our [store](http://www.aliexpress.com/store/all-wholesale-products/3226069.html?spm=2114.12010108.100004.3.7e3a5379KoyhDo) diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/WebIDE_check_code.png b/_static/M5Stack_MicroPython_UserGuidePictures/WebIDE_check_code.png deleted file mode 100644 index 202c78bb..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/WebIDE_check_code.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/check_code_on_m5stack.png b/_static/M5Stack_MicroPython_UserGuidePictures/check_code_on_m5stack.png deleted file mode 100644 index b04f65b0..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/check_code_on_m5stack.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/create_a_new_project.png b/_static/M5Stack_MicroPython_UserGuidePictures/create_a_new_project.png deleted file mode 100644 index eb1bc1c7..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/create_a_new_project.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/download_m5cloud_firmware_to_m5stack_board.png b/_static/M5Stack_MicroPython_UserGuidePictures/download_m5cloud_firmware_to_m5stack_board.png deleted file mode 100644 index 9a8d514f..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/download_m5cloud_firmware_to_m5stack_board.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/hello_world_prj.png b/_static/M5Stack_MicroPython_UserGuidePictures/hello_world_prj.png deleted file mode 100644 index 938887b5..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/hello_world_prj.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/linux_check_usb_port.png b/_static/M5Stack_MicroPython_UserGuidePictures/linux_check_usb_port.png deleted file mode 100644 index d7e2191b..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/linux_check_usb_port.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/linux_m5cloud_firmware_name.png b/_static/M5Stack_MicroPython_UserGuidePictures/linux_m5cloud_firmware_name.png deleted file mode 100644 index 774a8486..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/linux_m5cloud_firmware_name.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/register_m5stack_acount.png b/_static/M5Stack_MicroPython_UserGuidePictures/register_m5stack_acount.png deleted file mode 100644 index 21158d9c..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/register_m5stack_acount.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/webIDE_binding_device_interface.png b/_static/M5Stack_MicroPython_UserGuidePictures/webIDE_binding_device_interface.png deleted file mode 100644 index ae2091fa..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/webIDE_binding_device_interface.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/wifi_connect_successfully.png b/_static/M5Stack_MicroPython_UserGuidePictures/wifi_connect_successfully.png deleted file mode 100644 index 41c96780..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/wifi_connect_successfully.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/wifisetup.png b/_static/M5Stack_MicroPython_UserGuidePictures/wifisetup.png deleted file mode 100644 index 900bc566..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/wifisetup.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/windows_connect_m5stack_AP.png b/_static/M5Stack_MicroPython_UserGuidePictures/windows_connect_m5stack_AP.png deleted file mode 100644 index 262809c7..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/windows_connect_m5stack_AP.png and /dev/null differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/windows_download_firmware.png b/_static/M5Stack_MicroPython_UserGuidePictures/windows_download_firmware.png deleted file mode 100644 index d70843bf..00000000 Binary files a/_static/M5Stack_MicroPython_UserGuidePictures/windows_download_firmware.png and /dev/null differ diff --git a/_static/about-doc.png b/_static/about-doc.png deleted file mode 100644 index f52f1658..00000000 Binary files a/_static/about-doc.png and /dev/null differ diff --git a/_static/api-reference.gif b/_static/api-reference.gif deleted file mode 100644 index 7fd81755..00000000 Binary files a/_static/api-reference.gif and /dev/null differ diff --git a/_static/arduino_cc_package.png b/_static/arduino_cc_package.png deleted file mode 100644 index 4ebf5bf8..00000000 Binary files a/_static/arduino_cc_package.png and /dev/null differ diff --git a/_static/choose_version.png b/_static/choose_version.png deleted file mode 100644 index c8927df1..00000000 Binary files a/_static/choose_version.png and /dev/null differ diff --git a/_static/clone_esp32_idf.png b/_static/clone_esp32_idf.png deleted file mode 100644 index c28d8776..00000000 Binary files a/_static/clone_esp32_idf.png and /dev/null differ diff --git a/_static/clone_esp32_idf_subdir.png b/_static/clone_esp32_idf_subdir.png deleted file mode 100644 index c79a139e..00000000 Binary files a/_static/clone_esp32_idf_subdir.png and /dev/null differ diff --git a/_static/contribute.gif b/_static/contribute.gif deleted file mode 100644 index 48a45089..00000000 Binary files a/_static/contribute.gif and /dev/null differ diff --git a/_static/download_idf.png b/_static/download_idf.png deleted file mode 100644 index 90d21ebd..00000000 Binary files a/_static/download_idf.png and /dev/null differ diff --git a/_static/establish_serial_port/esp32-devkitc-in-device-manager.png b/_static/establish_serial_port/esp32-devkitc-in-device-manager.png deleted file mode 100644 index 640fc8e3..00000000 Binary files a/_static/establish_serial_port/esp32-devkitc-in-device-manager.png and /dev/null differ diff --git a/_static/establish_serial_port/esp32-wrover-kit-in-device-manager.png b/_static/establish_serial_port/esp32-wrover-kit-in-device-manager.png deleted file mode 100644 index e953e135..00000000 Binary files a/_static/establish_serial_port/esp32-wrover-kit-in-device-manager.png and /dev/null differ diff --git a/_static/establish_serial_port/putty-settings-linux.png b/_static/establish_serial_port/putty-settings-linux.png deleted file mode 100644 index 7b04f922..00000000 Binary files a/_static/establish_serial_port/putty-settings-linux.png and /dev/null differ diff --git a/_static/establish_serial_port/putty-settings-windows.png b/_static/establish_serial_port/putty-settings-windows.png deleted file mode 100644 index d08d6ab1..00000000 Binary files a/_static/establish_serial_port/putty-settings-windows.png and /dev/null differ diff --git a/_static/get-started.gif b/_static/get-started.gif deleted file mode 100644 index 7a7a8023..00000000 Binary files a/_static/get-started.gif and /dev/null differ diff --git a/_static/getting_started_pics/m5stack_core.png b/_static/getting_started_pics/m5stack_core.png deleted file mode 100644 index 5b4f451d..00000000 Binary files a/_static/getting_started_pics/m5stack_core.png and /dev/null differ diff --git a/_static/linux-logo.png b/_static/linux-logo.png deleted file mode 100644 index 1112db65..00000000 Binary files a/_static/linux-logo.png and /dev/null differ diff --git a/_static/m5-arduino.png b/_static/m5-arduino.png deleted file mode 100644 index 5b4f451d..00000000 Binary files a/_static/m5-arduino.png and /dev/null differ diff --git a/_static/m5stack-awesome.gif b/_static/m5stack-awesome.gif deleted file mode 100644 index 0b969c20..00000000 Binary files a/_static/m5stack-awesome.gif and /dev/null differ diff --git a/_static/m5stack-faq.gif b/_static/m5stack-faq.gif deleted file mode 100644 index bc9dd36d..00000000 Binary files a/_static/m5stack-faq.gif and /dev/null differ diff --git a/_static/macos-logo.png b/_static/macos-logo.png deleted file mode 100644 index 289d1f60..00000000 Binary files a/_static/macos-logo.png and /dev/null differ diff --git a/_static/product_pics/units/M5GO_Unit_makey.png b/_static/product_pics/units/M5GO_Unit_makey.png deleted file mode 100644 index 5f521337..00000000 Binary files a/_static/product_pics/units/M5GO_Unit_makey.png and /dev/null differ diff --git a/_static/product_pics/units/M5GO_Unit_thermal.png b/_static/product_pics/units/M5GO_Unit_thermal.png deleted file mode 100644 index a4b29864..00000000 Binary files a/_static/product_pics/units/M5GO_Unit_thermal.png and /dev/null differ diff --git a/_static/product_pics/units/UTB8IUiJCiaMiuJk43PTq6ySmXXaX.jpg b/_static/product_pics/units/UTB8IUiJCiaMiuJk43PTq6ySmXXaX.jpg deleted file mode 100644 index 8f734206..00000000 Binary files a/_static/product_pics/units/UTB8IUiJCiaMiuJk43PTq6ySmXXaX.jpg and /dev/null differ diff --git a/_static/project-configuration.png b/_static/project-configuration.png deleted file mode 100644 index e724556c..00000000 Binary files a/_static/project-configuration.png and /dev/null differ diff --git a/_static/resources.gif b/_static/resources.gif deleted file mode 100644 index cde4bd80..00000000 Binary files a/_static/resources.gif and /dev/null differ diff --git a/_static/screenshots/ESP32CAM_Browser.png b/_static/screenshots/ESP32CAM_Browser.png deleted file mode 100644 index dae1e500..00000000 Binary files a/_static/screenshots/ESP32CAM_Browser.png and /dev/null differ diff --git a/_static/screenshots/ESP32CAM_M5CAM.png b/_static/screenshots/ESP32CAM_M5CAM.png deleted file mode 100644 index 61b396a4..00000000 Binary files a/_static/screenshots/ESP32CAM_M5CAM.png and /dev/null differ diff --git a/_static/screenshots/ESP32CAM_Terminal.png b/_static/screenshots/ESP32CAM_Terminal.png deleted file mode 100644 index 3c5763a9..00000000 Binary files a/_static/screenshots/ESP32CAM_Terminal.png and /dev/null differ diff --git a/_static/screenshots/FactoryTest_result.png b/_static/screenshots/FactoryTest_result.png deleted file mode 100644 index ab97ede8..00000000 Binary files a/_static/screenshots/FactoryTest_result.png and /dev/null differ diff --git a/_static/screenshots/arduino_path.png b/_static/screenshots/arduino_path.png deleted file mode 100644 index f88b1bae..00000000 Binary files a/_static/screenshots/arduino_path.png and /dev/null differ diff --git a/_static/screenshots/arduino_windows_installer.png b/_static/screenshots/arduino_windows_installer.png deleted file mode 100644 index 48fe3042..00000000 Binary files a/_static/screenshots/arduino_windows_installer.png and /dev/null differ diff --git a/_static/screenshots/clone_esp32_idf.png b/_static/screenshots/clone_esp32_idf.png deleted file mode 100644 index c28d8776..00000000 Binary files a/_static/screenshots/clone_esp32_idf.png and /dev/null differ diff --git a/_static/screenshots/clone_esp32_idf_subdir.png b/_static/screenshots/clone_esp32_idf_subdir.png deleted file mode 100644 index c79a139e..00000000 Binary files a/_static/screenshots/clone_esp32_idf_subdir.png and /dev/null differ diff --git a/_static/screenshots/download_idf.png b/_static/screenshots/download_idf.png deleted file mode 100644 index 90d21ebd..00000000 Binary files a/_static/screenshots/download_idf.png and /dev/null differ diff --git a/_static/screenshots/download_m5stack_lib.png b/_static/screenshots/download_m5stack_lib.png deleted file mode 100644 index e90782b6..00000000 Binary files a/_static/screenshots/download_m5stack_lib.png and /dev/null differ diff --git a/_static/screenshots/download_xtensa_tools.png b/_static/screenshots/download_xtensa_tools.png deleted file mode 100644 index c5156796..00000000 Binary files a/_static/screenshots/download_xtensa_tools.png and /dev/null differ diff --git a/_static/screenshots/mkdir_espressif.png b/_static/screenshots/mkdir_espressif.png deleted file mode 100644 index a770caa8..00000000 Binary files a/_static/screenshots/mkdir_espressif.png and /dev/null differ diff --git a/_static/screenshots/my_com.png b/_static/screenshots/my_com.png deleted file mode 100644 index cfbd437b..00000000 Binary files a/_static/screenshots/my_com.png and /dev/null differ diff --git a/_static/select_arduino_install_path.png b/_static/select_arduino_install_path.png deleted file mode 100644 index e0e0db86..00000000 Binary files a/_static/select_arduino_install_path.png and /dev/null differ diff --git a/_static/select_arduino_lib.png b/_static/select_arduino_lib.png deleted file mode 100644 index e820d183..00000000 Binary files a/_static/select_arduino_lib.png and /dev/null differ diff --git a/_static/select_board_and_com.png b/_static/select_board_and_com.png deleted file mode 100644 index 4476f38d..00000000 Binary files a/_static/select_board_and_com.png and /dev/null differ diff --git a/_static/select_demo.png b/_static/select_demo.png deleted file mode 100644 index 45183285..00000000 Binary files a/_static/select_demo.png and /dev/null differ diff --git a/_static/select_get_exe_file.png b/_static/select_get_exe_file.png deleted file mode 100644 index 9d715826..00000000 Binary files a/_static/select_get_exe_file.png and /dev/null differ diff --git a/_static/what-you-need.png b/_static/what-you-need.png deleted file mode 100644 index 328c277c..00000000 Binary files a/_static/what-you-need.png and /dev/null differ diff --git a/_static/windows-logo.png b/_static/windows-logo.png deleted file mode 100644 index 122f53a2..00000000 Binary files a/_static/windows-logo.png and /dev/null differ diff --git a/en/get-started/M5GO/get_started_M5GO_ThermalCam.rst b/docs/.nojekyll similarity index 100% rename from en/get-started/M5GO/get_started_M5GO_ThermalCam.rst rename to docs/.nojekyll diff --git a/docs/_coverpage.md b/docs/_coverpage.md new file mode 100644 index 00000000..6b8e43d9 --- /dev/null +++ b/docs/_coverpage.md @@ -0,0 +1,12 @@ +![logo](assets/img/coverpage_logo.png) + +# Style Dictionary + +> Style once, use everywhere. + +**Style Dictionary** is a build system that allows you to define styles once, in a way for any platform or language to consume. A single place to create and edit your styles, and a single command exports these rules to all the places you need them - iOS, Android, CSS, JS, HTML, sketch files, style documentation, or anything you can think of. It is available as a CLI through npm, but can also be used like any normal node module if you want to extend its functionality. + +[GitHub](https://github.com/amzn/style-dictionary) +[Get Started](README.md) + +![color](#D9F8F5) diff --git a/docs/_navbar.md b/docs/_navbar.md new file mode 100644 index 00000000..7f7de872 --- /dev/null +++ b/docs/_navbar.md @@ -0,0 +1,3 @@ +- [中文](/cn/) +- [En](/) +- [日本語](/jp/) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 00000000..e00744e8 --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,21 @@ +- Getting started + - [Overview](README.md) + - [Quick Start](quick_start.md) + - [Examples](examples.md) + - [Package structure](package_structure.md) + - [Extending](extending.md) + +- Reference + - [API](api.md) + - [Transforms](transforms.md) + - [Transform groups](transform_groups.md) + - [Formats](formats.md) + - [Templates](templates.md) + - [Actions](actions.md) + - [Build process](build_process.md) + +- **Links** +- [![Code](https://icongr.am/feather/code.svg?size=16&color=808080)Demo Sandbox](https://codesandbox.io/s/xv36w4695o) +- [![Github](https://github.com/watson8544/M5Stack-Documentation-docsify)Github](https://github.com/watson8544/M5Stack-Documentation-docsify) +- [![NPM](https://icongram.jgog.in/simple/npm.svg?colored&size=16)NPM](https://www.npmjs.com/package/docsify-themeable) +- [![Twitter](https://icongram.jgog.in/simple/twitter.svg?colored&size=16)@jhildenbiddle](http://twitter.com/jhildenbiddle) \ No newline at end of file diff --git a/docs/actions.md b/docs/actions.md new file mode 100644 index 00000000..1fe90a01 --- /dev/null +++ b/docs/actions.md @@ -0,0 +1,44 @@ +# Actions + +Actions provide a way to run custom build code such as generating binary assets like images. + +Here are all the actions that come with the Style Dictionary build system. We try to include what most people might need. You can define custom actions with the [`registerAction`](api.md#registeraction). If you think we are missing some things, take a look at our [contributing docs](https://github.com/amzn/style-dictionary/blob/master/CONTRIBUTING.md) and send us a pull request! If you have a specific need for your project, you can always write your own [custom actions](#adding-custom-actions). + +You use actions in your config file under platforms > [platform] > actions + +```json +{ + "source": ["properties/**/*.json"], + "platforms": { + "android": { + "transformGroup": "android", + "files": [], + "actions": ["copy_assets"] + } + } +} +``` + + +---- + +## Pre-defined Actions + +[lib/common/actions.js](https://github.com/amzn/style-dictionary/blob/master/lib/common/actions.js) + +### android/copyImages + + +Action to copy images into appropriate android directories. + + +* * * + +### copy_assets + + +Action that copies everything in the assets directory to a new assets directory in the build path of the platform. + + +* * * + diff --git a/docs/api_reference.md b/docs/api_reference.md new file mode 100644 index 00000000..a577e149 --- /dev/null +++ b/docs/api_reference.md @@ -0,0 +1 @@ +[LCD](api_reference/api_lcd) \ No newline at end of file diff --git a/docs/api_reference/api_lcd.md b/docs/api_reference/api_lcd.md new file mode 100644 index 00000000..dfccb863 --- /dev/null +++ b/docs/api_reference/api_lcd.md @@ -0,0 +1,295 @@ +# LCD + +### buildAllPlatforms +> StyleDictionary.buildAllPlatforms() ⇒ [style-dictionary](#module_style-dictionary) + + + + +The only top-level method that needs to be called +to build the Style Dictionary. + +**Example** +```js +const StyleDictionary = require('style-dictionary').extend('config.json'); +StyleDictionary.buildAllPlatforms(); +``` + +* * * + +### buildPlatform +> StyleDictionary.buildPlatform(platform) ⇒ [style-dictionary](#module_style-dictionary) + + + + +Takes a platform and performs all transforms to +the properties object (non-mutative) then +builds all the files and performs any actions. This is useful if you only want to +build the artifacts of one platform to speed up the build process. + +This method is also used internally in [buildAllPlatforms](#buildAllPlatforms) to +build each platform defined in the config. + + +| Param | Type | Description | +| --- | --- | --- | +| platform | String | Name of the platform you want to build. | + +**Example** +```js +StyleDictionary.buildPlatform('web'); +``` +```bash +$ style-dictionary build --platform web +``` + +* * * + +### cleanAllPlatforms +> StyleDictionary.cleanAllPlatforms() ⇒ [style-dictionary](#module_style-dictionary) + + + + +Does the reverse of [buildAllPlatforms](#buildAllPlatforms) by +performing a clean on each platform. This removes all the files +defined in the platform and calls the undo method on any actions. + + +* * * + +### cleanPlatform +> StyleDictionary.cleanPlatform(platform) ⇒ [style-dictionary](#module_style-dictionary) + + + + +Takes a platform and performs all transforms to +the properties object (non-mutative) then +cleans all the files and perfoms the undo method of any [actions](actions.md). + + +| Param | Type | +| --- | --- | +| platform | String | + + +* * * + +### exportPlatform +> StyleDictionary.exportPlatform(platform) ⇒ Object + + + + +Exports a properties object with applied +platform transforms. + +This is useful if you want to use a style +dictionary in JS build tools like webpack. + + +| Param | Type | Description | +| --- | --- | --- | +| platform | String | The platform to be exported. Must be defined on the style dictionary. | + + +* * * + +### extend +> StyleDictionary.extend(config) ⇒ [style-dictionary](#module_style-dictionary) + + + + +Create a Style Dictionary + + +| Param | Type | Description | +| --- | --- | --- | +| config | [Config](#Config) | Configuration options to build your style dictionary. If you pass a string, it will be used as a path to a JSON config file. You can also pass an object with the configuration. | + +**Example** +```js +const StyleDictionary = require('style-dictionary').extend('config.json'); + +const StyleDictionary = require('style-dictionary').extend({ + source: ['properties/*.json'], + platforms: { + scss: { + transformGroup: 'scss', + buildPath: 'build/', + files: [{ + destination: 'variables.scss', + format: 'scss/variables' + }] + } + // ... + } +}); +``` + +* * * + +### registerAction +> StyleDictionary.registerAction(action) ⇒ [style-dictionary](#module_style-dictionary) + + + + +Adds a custom action to the style property builder. Custom +actions can do whatever you need, such as: copying files, +base64'ing files, running other build scripts, etc. +After you register a custom action, you then use that +action in a platform your config.json + +Actions run after the files in a platform are generated so you +can perform operations on files generated by the style dictionary. +Actions are run sequentially, if you write synchronous code then +it will block other actions, or if you use asynchronous code like Promises +it will not block. + + +| Param | Type | Description | +| --- | --- | --- | +| action | Object | | +| action.name | String | The name of the action | +| action.do | function | The action in the form of a function. | +| [action.undo] | function | A function that undoes the action. | + +**Example** +```js +StyleDictionary.registerAction({ + name: 'copy_assets', + do: function(dictionary, config) { + console.log('Copying assets directory'); + fs.copySync('assets', config.buildPath + 'assets'); + }, + undo: function(dictionary, config) { + console.log('Cleaning assets directory'); + fs.removeSync(config.buildPath + 'assets'); + } +}); +``` + +* * * + +### registerFormat +> StyleDictionary.registerFormat(format) ⇒ [style-dictionary](#module_style-dictionary) + + + + +Add a custom format to the style dictionary + + +| Param | Type | Description | +| --- | --- | --- | +| format | Object | | +| format.name | String | Name of the format to be referenced in your config.json | +| format.formatter | function | Function to perform the format. Takes 2 arguments, `dictionary` and `config` Must return a string. | + +**Example** +```js +StyleDictionary.registerFormat({ + name: 'json', + formatter: function(dictionary, config) { + return JSON.stringify(dictionary.properties, null, 2); + } +}) +``` + +* * * + +### registerTemplate +> StyleDictionary.registerTemplate(template) ⇒ [style-dictionary](#module_style-dictionary) + + + + +Add a custom template to the Style Dictionary + + +| Param | Type | Description | +| --- | --- | --- | +| template | Object | | +| template.name | String | The name of your template. You will refer to this in your config.json file. | +| template.template | String | Path to your lodash template | + +**Example** +```js +StyleDictionary.registerTemplate({ + name: 'Swift/colors', + template: __dirname + '/templates/swift/colors.template' +}); +``` + +* * * + +### registerTransform +> StyleDictionary.registerTransform(transform) ⇒ [style-dictionary](#module_style-dictionary) + + + + +Add a custom transform to the Style Dictionary +Transforms can manipulate a property's name, value, or attributes + + +| Param | Type | Description | +| --- | --- | --- | +| transform | Object | Transform object | +| transform.type | String | Type of transform, can be: name, attribute, or value | +| transform.name | String | Name of the transformer so a transformGroup can call a list of transforms. | +| [transform.matcher] | function | Matcher function, return boolean if transform should be applied. If you omit the matcher function, it will match all properties. | +| transform.transformer | function | Performs a transform on a property object, should return a string or object depending on the type. Will only update certain properties so you can't mess up property objects on accident. | + +**Example** +```js +StyleDictionary.registerTransform({ + name: 'time/seconds', + type: 'value', + matcher: function(prop) { + return prop.attributes.category === 'time'; + }, + transformer: function(prop) { + // Note the use of prop.original.value, + // before any transforms are performed, the build system + // clones the original property to the 'original' attribute. + return (parseInt(prop.original.value) / 1000).toString() + 's'; + } +}); +``` + +* * * + +### registerTransformGroup +> StyleDictionary.registerTransformGroup(transformGroup) ⇒ [style-dictionary](#module_style-dictionary) + + + + +Add a custom transformGroup to the Style Dictionary, which is a +group of transforms. + + +| Param | Type | Description | +| --- | --- | --- | +| transformGroup | Object | | +| transformGroup.name | String | Name of the transform group that will be referenced in config.json | +| transformGroup.transforms | Array.<String> | Array of strings that reference the name of transforms to be applied in order. Transforms must be defined and match the name or there will be an error at build time. | + +**Example** +```js +StyleDictionary.registerTransformGroup({ + name: 'Swift', + transforms: [ + 'attribute/cti', + 'size/pt', + 'name/cti' + ] +}); +``` + +* * * diff --git a/docs/assets/css/main.css b/docs/assets/css/main.css new file mode 100644 index 00000000..77743a08 --- /dev/null +++ b/docs/assets/css/main.css @@ -0,0 +1,48 @@ +:root {--theme-color: hsl(204, 90%, 45%);} + +.markdown-section a { + color: var(--theme-color,#42b983); +} + +.markdown-section iframe[src*="buttons.github.io"] { + margin: 0; +} + +figure.thumbnails img { + margin: 0.75em 0; + border-radius: 3px; + box-shadow: 0 2px 6px rgba(0,0,0,0.1), 0 4px 12px rgba(0,0,0,0.15); +} + +@media (min-width: 30em) { + figure.thumbnails:after { + content: ""; + display: table; + clear: both; + } + + figure.thumbnails img { + float: left; + width: calc(50% - 0.75em); + } + + figure.thumbnails img:nth-child(even) { + margin-left: 1.5em; + } + + @supports (display: flex) { + figure.thumbnails { + display: flex; + align-items: center; + } + + figure.thumbnails img { + flex-grow: 1; + width: 0; + } + + figure.thumbnails img + img { + margin: 0 0 0 1.5em; + } + } +} diff --git a/docs/assets/img/coverpage_logo.png b/docs/assets/img/coverpage_logo.png new file mode 100644 index 00000000..bb803643 Binary files /dev/null and b/docs/assets/img/coverpage_logo.png differ diff --git a/_static/pics/M5Bala.jpg b/docs/assets/img/getting_started_pics/M5Bala.jpg similarity index 100% rename from _static/pics/M5Bala.jpg rename to docs/assets/img/getting_started_pics/M5Bala.jpg diff --git a/_static/getting_started_pics/arduino_logo.png b/docs/assets/img/getting_started_pics/arduino_logo.png similarity index 100% rename from _static/getting_started_pics/arduino_logo.png rename to docs/assets/img/getting_started_pics/arduino_logo.png diff --git a/_static/getting_started_pics/blockly.png b/docs/assets/img/getting_started_pics/blockly.png similarity index 100% rename from _static/getting_started_pics/blockly.png rename to docs/assets/img/getting_started_pics/blockly.png diff --git a/_static/getting_started_pics/blockly_and_micropython.png b/docs/assets/img/getting_started_pics/blockly_and_micropython.png similarity index 100% rename from _static/getting_started_pics/blockly_and_micropython.png rename to docs/assets/img/getting_started_pics/blockly_and_micropython.png diff --git a/_static/getting_started_pics/establish_serial_connection/2.png b/docs/assets/img/getting_started_pics/establish_serial_connection/2.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/2.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/2.png diff --git a/_static/getting_started_pics/establish_serial_connection/3.png b/docs/assets/img/getting_started_pics/establish_serial_connection/3.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/3.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/3.png diff --git a/_static/getting_started_pics/establish_serial_connection/4.png b/docs/assets/img/getting_started_pics/establish_serial_connection/4.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/4.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/4.png diff --git a/_static/getting_started_pics/establish_serial_connection/5.png b/docs/assets/img/getting_started_pics/establish_serial_connection/5.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/5.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/5.png diff --git a/_static/getting_started_pics/establish_serial_connection/6.png b/docs/assets/img/getting_started_pics/establish_serial_connection/6.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/6.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/6.png diff --git a/_static/getting_started_pics/establish_serial_connection/7.png b/docs/assets/img/getting_started_pics/establish_serial_connection/7.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/7.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/7.png diff --git a/_static/getting_started_pics/establish_serial_connection/8.png b/docs/assets/img/getting_started_pics/establish_serial_connection/8.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/8.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/8.png diff --git a/_static/getting_started_pics/establish_serial_connection/9.png b/docs/assets/img/getting_started_pics/establish_serial_connection/9.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/9.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/9.png diff --git a/_static/getting_started_pics/establish_serial_connection/macOS_CP2104_dmg.png b/docs/assets/img/getting_started_pics/establish_serial_connection/macOS_CP2104_dmg.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/macOS_CP2104_dmg.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/macOS_CP2104_dmg.png diff --git a/_static/getting_started_pics/establish_serial_connection/macOS_CP2104_pkg.png b/docs/assets/img/getting_started_pics/establish_serial_connection/macOS_CP2104_pkg.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/macOS_CP2104_pkg.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/macOS_CP2104_pkg.png diff --git a/_static/getting_started_pics/establish_serial_connection/windows_download_CP2104_USB_driver.png b/docs/assets/img/getting_started_pics/establish_serial_connection/windows_download_CP2104_USB_driver.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/windows_download_CP2104_USB_driver.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/windows_download_CP2104_USB_driver.png diff --git a/_static/getting_started_pics/establish_serial_connection/windows_install_usb_driver01.png b/docs/assets/img/getting_started_pics/establish_serial_connection/windows_install_usb_driver01.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/windows_install_usb_driver01.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/windows_install_usb_driver01.png diff --git a/_static/getting_started_pics/establish_serial_connection/windows_install_usb_driver02.png b/docs/assets/img/getting_started_pics/establish_serial_connection/windows_install_usb_driver02.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/windows_install_usb_driver02.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/windows_install_usb_driver02.png diff --git a/_static/getting_started_pics/establish_serial_connection/windows_install_usb_driver03.png b/docs/assets/img/getting_started_pics/establish_serial_connection/windows_install_usb_driver03.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/windows_install_usb_driver03.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/windows_install_usb_driver03.png diff --git a/_static/getting_started_pics/establish_serial_connection/windows_m5stack_in_device_manager.png b/docs/assets/img/getting_started_pics/establish_serial_connection/windows_m5stack_in_device_manager.png similarity index 100% rename from _static/getting_started_pics/establish_serial_connection/windows_m5stack_in_device_manager.png rename to docs/assets/img/getting_started_pics/establish_serial_connection/windows_m5stack_in_device_manager.png diff --git a/_static/stepmotor_pic/show_motors_files_added.png b/docs/assets/img/getting_started_pics/get_started_stepmotormodule/show_motors_files_added.png similarity index 100% rename from _static/stepmotor_pic/show_motors_files_added.png rename to docs/assets/img/getting_started_pics/get_started_stepmotormodule/show_motors_files_added.png diff --git a/_static/stepmotor_pic/stepmotor_test.png b/docs/assets/img/getting_started_pics/get_started_stepmotormodule/stepmotor_test.png similarity index 100% rename from _static/stepmotor_pic/stepmotor_test.png rename to docs/assets/img/getting_started_pics/get_started_stepmotormodule/stepmotor_test.png diff --git a/_static/stepmotor_pic/upload_module_files.png b/docs/assets/img/getting_started_pics/get_started_stepmotormodule/upload_module_files.png similarity index 100% rename from _static/stepmotor_pic/upload_module_files.png rename to docs/assets/img/getting_started_pics/get_started_stepmotormodule/upload_module_files.png diff --git a/_static/getting_started_pics/burn_firmware_01.png b/docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_01.png similarity index 100% rename from _static/getting_started_pics/burn_firmware_01.png rename to docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_01.png diff --git a/_static/getting_started_pics/burn_firmware_02.png b/docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_02.png similarity index 100% rename from _static/getting_started_pics/burn_firmware_02.png rename to docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_02.png diff --git a/_static/getting_started_pics/burn_firmware_03.png b/docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_03.png similarity index 100% rename from _static/getting_started_pics/burn_firmware_03.png rename to docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_03.png diff --git a/_static/getting_started_pics/burn_firmware_04.png b/docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_04.png similarity index 100% rename from _static/getting_started_pics/burn_firmware_04.png rename to docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_04.png diff --git a/_static/getting_started_pics/burn_firmware_05.png b/docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_05.png similarity index 100% rename from _static/getting_started_pics/burn_firmware_05.png rename to docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_05.png diff --git a/_static/getting_started_pics/burn_firmware_06.png b/docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_06.png similarity index 100% rename from _static/getting_started_pics/burn_firmware_06.png rename to docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_06.png diff --git a/_static/getting_started_pics/burn_firmware_07.png b/docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_07.png similarity index 100% rename from _static/getting_started_pics/burn_firmware_07.png rename to docs/assets/img/getting_started_pics/how_to_burn_firmware/burn_firmware_07.png diff --git a/_static/getting_started_pics/download_M5Burner.png b/docs/assets/img/getting_started_pics/how_to_burn_firmware/download_M5Burner.png similarity index 100% rename from _static/getting_started_pics/download_M5Burner.png rename to docs/assets/img/getting_started_pics/how_to_burn_firmware/download_M5Burner.png diff --git a/_static/getting_started_pics/m5camera.jpg b/docs/assets/img/getting_started_pics/m5camera.jpg similarity index 100% rename from _static/getting_started_pics/m5camera.jpg rename to docs/assets/img/getting_started_pics/m5camera.jpg diff --git a/_static/getting_started_pics/m5go.jpg b/docs/assets/img/getting_started_pics/m5go.jpg similarity index 100% rename from _static/getting_started_pics/m5go.jpg rename to docs/assets/img/getting_started_pics/m5go.jpg diff --git a/docs/assets/img/getting_started_pics/m5stack_core.png b/docs/assets/img/getting_started_pics/m5stack_core.png new file mode 100644 index 00000000..2251e674 Binary files /dev/null and b/docs/assets/img/getting_started_pics/m5stack_core.png differ diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/display_hello_world.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/display_hello_world.png similarity index 100% rename from _static/M5Stack_MicroPython_UserGuidePictures/display_hello_world.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/display_hello_world.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_download_arduino_ide.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_download_arduino_ide.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_download_arduino_ide.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_download_arduino_ide.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_example_hello_world.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_example_hello_world.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_example_hello_world.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_example_hello_world.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_install_m5stack_lib.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_install_m5stack_lib.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_install_m5stack_lib.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_install_m5stack_lib.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_search_m5stack.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_search_m5stack.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_search_m5stack.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_search_m5stack.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_security_and_privacy.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_security_and_privacy.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_security_and_privacy.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_security_and_privacy.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_security_and_privacy_01.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_security_and_privacy_01.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_security_and_privacy_01.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_security_and_privacy_01.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_security_and_privacy_02.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_security_and_privacy_02.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_security_and_privacy_02.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_security_and_privacy_02.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_select_board.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_select_board.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_select_board.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_select_board.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_select_example.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_select_example.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_select_example.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_select_example.png diff --git a/_static/getting_started_pics/m5stack_core/macOS_select_serial_port.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_select_serial_port.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/macOS_select_serial_port.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/mac/macOS_select_serial_port.png diff --git a/_static/getting_started_pics/m5stack_core/arduino_cc_package.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/arduino_cc_package.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/arduino_cc_package.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/arduino_cc_package.png diff --git a/_static/getting_started_pics/m5stack_core/arduino_upload.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/arduino_upload.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/arduino_upload.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/arduino_upload.png diff --git a/_static/getting_started_pics/m5stack_core/display_hello_world.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/display_hello_world.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/display_hello_world.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/display_hello_world.png diff --git a/_static/getting_started_pics/m5stack_core/download_arduino_esp32_completed.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/download_arduino_esp32_completed.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/download_arduino_esp32_completed.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/download_arduino_esp32_completed.png diff --git a/_static/getting_started_pics/m5stack_core/execute_batch_file.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/execute_batch_file.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/execute_batch_file.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/execute_batch_file.png diff --git a/_static/getting_started_pics/m5stack_core/execute_batch_file_for_downloading_arduino_esp32.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/execute_batch_file_for_downloading_arduino_esp32.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/execute_batch_file_for_downloading_arduino_esp32.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/execute_batch_file_for_downloading_arduino_esp32.png diff --git a/_static/getting_started_pics/m5stack_core/incompatible.jpg b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/incompatible.jpg similarity index 100% rename from _static/getting_started_pics/m5stack_core/incompatible.jpg rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/incompatible.jpg diff --git a/_static/getting_started_pics/m5stack_core/install_arduino_2.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/install_arduino_2.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/install_arduino_2.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/install_arduino_2.png diff --git a/_static/getting_started_pics/m5stack_core/install_m5stack_lib_01.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/install_m5stack_lib_01.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/install_m5stack_lib_01.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/install_m5stack_lib_01.png diff --git a/_static/getting_started_pics/m5stack_core/install_m5stack_lib_02.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/install_m5stack_lib_02.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/install_m5stack_lib_02.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/install_m5stack_lib_02.png diff --git a/_static/getting_started_pics/m5stack_core/select_an_example.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/select_an_example.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/select_an_example.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/select_an_example.png diff --git a/_static/getting_started_pics/m5stack_core/select_arduino_install_path.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/select_arduino_install_path.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/select_arduino_install_path.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/select_arduino_install_path.png diff --git a/_static/getting_started_pics/m5stack_core/select_board_baudrate_serial_port.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/select_board_baudrate_serial_port.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/select_board_baudrate_serial_port.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/select_board_baudrate_serial_port.png diff --git a/_static/getting_started_pics/m5stack_core/select_m5stack_core_board.jpg b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/select_m5stack_core_board.jpg similarity index 100% rename from _static/getting_started_pics/m5stack_core/select_m5stack_core_board.jpg rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/select_m5stack_core_board.jpg diff --git a/_static/getting_started_pics/m5stack_core/update_m5stack_lib.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/update_m5stack_lib.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/update_m5stack_lib.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_arduino_m5core/windows/update_m5stack_lib.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/apikey.jpg b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/apikey.jpg similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/apikey.jpg rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/apikey.jpg diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/change_wifi.jpg b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/change_wifi.jpg similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/change_wifi.jpg rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/change_wifi.jpg diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/click_for_apikey.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/click_for_apikey.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/click_for_apikey.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/click_for_apikey.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/connect_wifi_successfully.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/connect_wifi_successfully.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/connect_wifi_successfully.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/connect_wifi_successfully.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/core_home_page.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/core_home_page.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/core_home_page.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/core_home_page.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_loop_block.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_loop_block.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_loop_block.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_loop_block.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_music_block.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_music_block.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_music_block.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_music_block.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_timer_block.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_timer_block.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_timer_block.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/drag_timer_block.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/draw_heart.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/draw_heart.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/draw_heart.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/draw_heart.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/draw_ui.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/draw_ui.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/draw_ui.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/draw_ui.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/input_apikey.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/input_apikey.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/input_apikey.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/input_apikey.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/input_wifi_password.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/input_wifi_password.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/input_wifi_password.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/input_wifi_password.png diff --git a/_static/M5Stack_MicroPython_UserGuidePictures/m5stack_connet_wifi.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/m5stack_connet_wifi.png similarity index 100% rename from _static/M5Stack_MicroPython_UserGuidePictures/m5stack_connet_wifi.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/m5stack_connet_wifi.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/program_with_blockly.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/program_with_blockly.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/program_with_blockly.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/program_with_blockly.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/run_and_upload.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/run_and_upload.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/run_and_upload.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/run_and_upload.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/webide.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/webide.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/webide.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/webide.png diff --git a/_static/getting_started_pics/m5stack_core/get_started_with_uiflow/whole_program.png b/docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/whole_program.png similarity index 100% rename from _static/getting_started_pics/m5stack_core/get_started_with_uiflow/whole_program.png rename to docs/assets/img/getting_started_pics/m5stack_core/get_started_with_uiflow/whole_program.png diff --git a/_static/getting_started_pics/micropython_logo.png b/docs/assets/img/getting_started_pics/micropython_logo.png similarity index 100% rename from _static/getting_started_pics/micropython_logo.png rename to docs/assets/img/getting_started_pics/micropython_logo.png diff --git a/_static/getting_started_pics/programming_mode_arduino.png b/docs/assets/img/getting_started_pics/programming_mode_arduino.png similarity index 100% rename from _static/getting_started_pics/programming_mode_arduino.png rename to docs/assets/img/getting_started_pics/programming_mode_arduino.png diff --git a/_static/getting_started_pics/programming_mode_blockly.png b/docs/assets/img/getting_started_pics/programming_mode_blockly.png similarity index 100% rename from _static/getting_started_pics/programming_mode_blockly.png rename to docs/assets/img/getting_started_pics/programming_mode_blockly.png diff --git a/_static/getting_started_pics/programming_mode_micropython.png b/docs/assets/img/getting_started_pics/programming_mode_micropython .png similarity index 100% rename from _static/getting_started_pics/programming_mode_micropython.png rename to docs/assets/img/getting_started_pics/programming_mode_micropython .png diff --git a/docs/assets/img/getting_started_pics/programming_mode_micropython.png b/docs/assets/img/getting_started_pics/programming_mode_micropython.png new file mode 100644 index 00000000..0eadd75c Binary files /dev/null and b/docs/assets/img/getting_started_pics/programming_mode_micropython.png differ diff --git a/_static/pics/ESP32CAM.jpg b/docs/assets/img/introduction_pics/ESP32CAM.jpg similarity index 100% rename from _static/pics/ESP32CAM.jpg rename to docs/assets/img/introduction_pics/ESP32CAM.jpg diff --git a/_static/pics/FAQ.jpg b/docs/assets/img/introduction_pics/FAQ.jpg similarity index 100% rename from _static/pics/FAQ.jpg rename to docs/assets/img/introduction_pics/FAQ.jpg diff --git a/en_build/html/_images/M5Bala.jpg b/docs/assets/img/introduction_pics/M5Bala.jpg similarity index 100% rename from en_build/html/_images/M5Bala.jpg rename to docs/assets/img/introduction_pics/M5Bala.jpg diff --git a/_static/pics/M5GO.jpg b/docs/assets/img/introduction_pics/M5GO.jpg similarity index 100% rename from _static/pics/M5GO.jpg rename to docs/assets/img/introduction_pics/M5GO.jpg diff --git a/_static/pics/get-started.jpg b/docs/assets/img/introduction_pics/get-started.jpg similarity index 100% rename from _static/pics/get-started.jpg rename to docs/assets/img/introduction_pics/get-started.jpg diff --git a/_static/pics/m5-api-reference.jpg b/docs/assets/img/introduction_pics/m5-api-reference.jpg similarity index 100% rename from _static/pics/m5-api-reference.jpg rename to docs/assets/img/introduction_pics/m5-api-reference.jpg diff --git a/_static/pics/m5-arduino.jpg b/docs/assets/img/introduction_pics/m5-arduino.jpg similarity index 100% rename from _static/pics/m5-arduino.jpg rename to docs/assets/img/introduction_pics/m5-arduino.jpg diff --git a/_static/pics/m5-awesome.jpg b/docs/assets/img/introduction_pics/m5-awesome.jpg similarity index 100% rename from _static/pics/m5-awesome.jpg rename to docs/assets/img/introduction_pics/m5-awesome.jpg diff --git a/_static/pics/m5-micropython.jpg b/docs/assets/img/introduction_pics/m5-micropython.jpg similarity index 100% rename from _static/pics/m5-micropython.jpg rename to docs/assets/img/introduction_pics/m5-micropython.jpg diff --git a/_static/pics/m5-stepmotor.jpg b/docs/assets/img/introduction_pics/m5-stepmotor.jpg similarity index 100% rename from _static/pics/m5-stepmotor.jpg rename to docs/assets/img/introduction_pics/m5-stepmotor.jpg diff --git a/_static/pics/m5stack-forum.jpg b/docs/assets/img/introduction_pics/m5stack-forum.jpg similarity index 100% rename from _static/pics/m5stack-forum.jpg rename to docs/assets/img/introduction_pics/m5stack-forum.jpg diff --git a/_static/pics/product-documents.jpg b/docs/assets/img/introduction_pics/product-documents.jpg similarity index 100% rename from _static/pics/product-documents.jpg rename to docs/assets/img/introduction_pics/product-documents.jpg diff --git a/_static/m5stack.png b/docs/assets/img/m5stack.png similarity index 100% rename from _static/m5stack.png rename to docs/assets/img/m5stack.png diff --git a/docs/assets/img/notice-icons.sketch b/docs/assets/img/notice-icons.sketch new file mode 100644 index 00000000..8700f585 Binary files /dev/null and b/docs/assets/img/notice-icons.sketch differ diff --git a/en_build/html/_images/get-started.jpg b/docs/assets/img/product_pics/1.jpg similarity index 72% rename from en_build/html/_images/get-started.jpg rename to docs/assets/img/product_pics/1.jpg index 54491d69..6bdbc10d 100644 Binary files a/en_build/html/_images/get-started.jpg and b/docs/assets/img/product_pics/1.jpg differ diff --git a/en_build/html/_images/m5-awesome.jpg b/docs/assets/img/product_pics/2.jpg similarity index 68% rename from en_build/html/_images/m5-awesome.jpg rename to docs/assets/img/product_pics/2.jpg index 7d3673af..65d0ce4e 100644 Binary files a/en_build/html/_images/m5-awesome.jpg and b/docs/assets/img/product_pics/2.jpg differ diff --git a/en_build/html/_images/product-documents.jpg b/docs/assets/img/product_pics/3.jpg similarity index 60% rename from en_build/html/_images/product-documents.jpg rename to docs/assets/img/product_pics/3.jpg index 7dbec619..bde5489a 100644 Binary files a/en_build/html/_images/product-documents.jpg and b/docs/assets/img/product_pics/3.jpg differ diff --git a/en_build/html/_images/FAQ.jpg b/docs/assets/img/product_pics/4.jpg similarity index 57% rename from en_build/html/_images/FAQ.jpg rename to docs/assets/img/product_pics/4.jpg index 36176da5..691a4a75 100644 Binary files a/en_build/html/_images/FAQ.jpg and b/docs/assets/img/product_pics/4.jpg differ diff --git a/docs/assets/img/product_pics/5.jpg b/docs/assets/img/product_pics/5.jpg new file mode 100644 index 00000000..17fbe018 Binary files /dev/null and b/docs/assets/img/product_pics/5.jpg differ diff --git a/docs/assets/img/product_pics/6.jpg b/docs/assets/img/product_pics/6.jpg new file mode 100644 index 00000000..82f33cc9 Binary files /dev/null and b/docs/assets/img/product_pics/6.jpg differ diff --git a/docs/assets/img/product_pics/accessory.png b/docs/assets/img/product_pics/accessory.png new file mode 100644 index 00000000..e029cb51 Binary files /dev/null and b/docs/assets/img/product_pics/accessory.png differ diff --git a/docs/assets/img/product_pics/application.png b/docs/assets/img/product_pics/application.png new file mode 100644 index 00000000..8dda325f Binary files /dev/null and b/docs/assets/img/product_pics/application.png differ diff --git a/docs/assets/img/product_pics/applications/bala_1.jpg b/docs/assets/img/product_pics/applications/bala_1.jpg new file mode 100644 index 00000000..7fa2fbd8 Binary files /dev/null and b/docs/assets/img/product_pics/applications/bala_1.jpg differ diff --git a/docs/assets/img/product_pics/applications/bala_2.jpg b/docs/assets/img/product_pics/applications/bala_2.jpg new file mode 100644 index 00000000..3e8ccdb7 Binary files /dev/null and b/docs/assets/img/product_pics/applications/bala_2.jpg differ diff --git a/docs/assets/img/product_pics/applications/bala_3.jpg b/docs/assets/img/product_pics/applications/bala_3.jpg new file mode 100644 index 00000000..7c26844c Binary files /dev/null and b/docs/assets/img/product_pics/applications/bala_3.jpg differ diff --git a/docs/assets/img/product_pics/applications/bala_4.jpg b/docs/assets/img/product_pics/applications/bala_4.jpg new file mode 100644 index 00000000..9b5d4b57 Binary files /dev/null and b/docs/assets/img/product_pics/applications/bala_4.jpg differ diff --git a/docs/assets/img/product_pics/applications/bala_5.jpg b/docs/assets/img/product_pics/applications/bala_5.jpg new file mode 100644 index 00000000..2e96da5c Binary files /dev/null and b/docs/assets/img/product_pics/applications/bala_5.jpg differ diff --git a/docs/assets/img/product_pics/base.png b/docs/assets/img/product_pics/base.png new file mode 100644 index 00000000..8bcc6ed8 Binary files /dev/null and b/docs/assets/img/product_pics/base.png differ diff --git a/_static/product_pics/core/fire/interface_fire.jpg b/docs/assets/img/product_pics/core/fire/interface_fire.jpg similarity index 100% rename from _static/product_pics/core/fire/interface_fire.jpg rename to docs/assets/img/product_pics/core/fire/interface_fire.jpg diff --git a/docs/assets/img/product_pics/core/fire/product_pic_fire.jpg b/docs/assets/img/product_pics/core/fire/product_pic_fire.jpg new file mode 100644 index 00000000..876dca1e Binary files /dev/null and b/docs/assets/img/product_pics/core/fire/product_pic_fire.jpg differ diff --git a/_static/product_pics/core/fire/simple_sch_just_for_fire.jpg b/docs/assets/img/product_pics/core/fire/simple_sch_just_for_fire.jpg similarity index 100% rename from _static/product_pics/core/fire/simple_sch_just_for_fire.jpg rename to docs/assets/img/product_pics/core/fire/simple_sch_just_for_fire.jpg diff --git a/docs/assets/img/product_pics/cores.png b/docs/assets/img/product_pics/cores.png new file mode 100644 index 00000000..c15048e2 Binary files /dev/null and b/docs/assets/img/product_pics/cores.png differ diff --git a/docs/assets/img/product_pics/module.png b/docs/assets/img/product_pics/module.png new file mode 100644 index 00000000..7f57a63a Binary files /dev/null and b/docs/assets/img/product_pics/module.png differ diff --git a/docs/assets/img/product_pics/tool.png b/docs/assets/img/product_pics/tool.png new file mode 100644 index 00000000..3b6749f6 Binary files /dev/null and b/docs/assets/img/product_pics/tool.png differ diff --git a/docs/assets/img/product_pics/unit.png b/docs/assets/img/product_pics/unit.png new file mode 100644 index 00000000..8c5dc281 Binary files /dev/null and b/docs/assets/img/product_pics/unit.png differ diff --git a/docs/assets/img/product_pics/units/5款unit.zip b/docs/assets/img/product_pics/units/5款unit.zip new file mode 100644 index 00000000..788b57a0 Binary files /dev/null and b/docs/assets/img/product_pics/units/5款unit.zip differ diff --git a/docs/assets/img/product_pics/units/5款unit/ADC2.png b/docs/assets/img/product_pics/units/5款unit/ADC2.png new file mode 100644 index 00000000..acc27efe Binary files /dev/null and b/docs/assets/img/product_pics/units/5款unit/ADC2.png differ diff --git a/docs/assets/img/product_pics/units/5款unit/COLOR2.png b/docs/assets/img/product_pics/units/5款unit/COLOR2.png new file mode 100644 index 00000000..d5b27942 Binary files /dev/null and b/docs/assets/img/product_pics/units/5款unit/COLOR2.png differ diff --git a/docs/assets/img/product_pics/units/5款unit/DAC2.png b/docs/assets/img/product_pics/units/5款unit/DAC2.png new file mode 100644 index 00000000..1e61b81f Binary files /dev/null and b/docs/assets/img/product_pics/units/5款unit/DAC2.png differ diff --git a/docs/assets/img/product_pics/units/5款unit/NCIR2.png b/docs/assets/img/product_pics/units/5款unit/NCIR2.png new file mode 100644 index 00000000..8c5670d6 Binary files /dev/null and b/docs/assets/img/product_pics/units/5款unit/NCIR2.png differ diff --git a/docs/assets/img/product_pics/units/5款unit/ToF2.png b/docs/assets/img/product_pics/units/5款unit/ToF2.png new file mode 100644 index 00000000..d5d6768f Binary files /dev/null and b/docs/assets/img/product_pics/units/5款unit/ToF2.png differ diff --git a/docs/assets/img/product_pics/units/COLOR1.png b/docs/assets/img/product_pics/units/COLOR1.png new file mode 100644 index 00000000..6a00aa42 Binary files /dev/null and b/docs/assets/img/product_pics/units/COLOR1.png differ diff --git a/_static/product_pics/units/M5GO_Unit_3.96.jpg b/docs/assets/img/product_pics/units/M5GO_Unit_3.96.jpg similarity index 100% rename from _static/product_pics/units/M5GO_Unit_3.96.jpg rename to docs/assets/img/product_pics/units/M5GO_Unit_3.96.jpg diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_adc.png b/docs/assets/img/product_pics/units/M5GO_Unit_adc.png new file mode 100644 index 00000000..e19e0012 Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_adc.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_angle.png b/docs/assets/img/product_pics/units/M5GO_Unit_angle.png new file mode 100644 index 00000000..fd69376e Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_angle.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_button.png b/docs/assets/img/product_pics/units/M5GO_Unit_button.png new file mode 100644 index 00000000..114e6df2 Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_button.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_dac.png b/docs/assets/img/product_pics/units/M5GO_Unit_dac.png new file mode 100644 index 00000000..1c6b1a56 Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_dac.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_dual_button.png b/docs/assets/img/product_pics/units/M5GO_Unit_dual_button.png new file mode 100644 index 00000000..2758c9aa Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_dual_button.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_env.png b/docs/assets/img/product_pics/units/M5GO_Unit_env.png new file mode 100644 index 00000000..89838b9a Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_env.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_hub.png b/docs/assets/img/product_pics/units/M5GO_Unit_hub.png new file mode 100644 index 00000000..89f4a9cd Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_hub.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_ir.jpg b/docs/assets/img/product_pics/units/M5GO_Unit_ir.jpg new file mode 100644 index 00000000..820b2f87 Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_ir.jpg differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_ir.png b/docs/assets/img/product_pics/units/M5GO_Unit_ir.png new file mode 100644 index 00000000..521ff903 Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_ir.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_joystick.png b/docs/assets/img/product_pics/units/M5GO_Unit_joystick.png new file mode 100644 index 00000000..11c9dfd7 Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_joystick.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_joystick_2.png b/docs/assets/img/product_pics/units/M5GO_Unit_joystick_2.png new file mode 100644 index 00000000..3371eb1d Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_joystick_2.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_joystick_3.png b/docs/assets/img/product_pics/units/M5GO_Unit_joystick_3.png new file mode 100644 index 00000000..25e9830e Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_joystick_3.png differ diff --git a/_static/product_pics/units/M5GO_Unit_light.png b/docs/assets/img/product_pics/units/M5GO_Unit_light.png similarity index 100% rename from _static/product_pics/units/M5GO_Unit_light.png rename to docs/assets/img/product_pics/units/M5GO_Unit_light.png diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_makey.png b/docs/assets/img/product_pics/units/M5GO_Unit_makey.png new file mode 100644 index 00000000..e02510fc Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_makey.png differ diff --git a/_static/product_pics/units/M5GO_Unit_makey_interface.png b/docs/assets/img/product_pics/units/M5GO_Unit_makey_interface.png similarity index 100% rename from _static/product_pics/units/M5GO_Unit_makey_interface.png rename to docs/assets/img/product_pics/units/M5GO_Unit_makey_interface.png diff --git a/_static/product_pics/units/M5GO_Unit_moisture.jpg b/docs/assets/img/product_pics/units/M5GO_Unit_moisture.jpg similarity index 100% rename from _static/product_pics/units/M5GO_Unit_moisture.jpg rename to docs/assets/img/product_pics/units/M5GO_Unit_moisture.jpg diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_ncir.png b/docs/assets/img/product_pics/units/M5GO_Unit_ncir.png new file mode 100644 index 00000000..4e777913 Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_ncir.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_pir.png b/docs/assets/img/product_pics/units/M5GO_Unit_pir.png new file mode 100644 index 00000000..e8fe1768 Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_pir.png differ diff --git a/_static/product_pics/units/M5GO_Unit_proto.png b/docs/assets/img/product_pics/units/M5GO_Unit_proto.png similarity index 100% rename from _static/product_pics/units/M5GO_Unit_proto.png rename to docs/assets/img/product_pics/units/M5GO_Unit_proto.png diff --git a/_static/product_pics/units/M5GO_Unit_relay.png b/docs/assets/img/product_pics/units/M5GO_Unit_relay.png similarity index 100% rename from _static/product_pics/units/M5GO_Unit_relay.png rename to docs/assets/img/product_pics/units/M5GO_Unit_relay.png diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_rgb.png b/docs/assets/img/product_pics/units/M5GO_Unit_rgb.png new file mode 100644 index 00000000..3c00333e Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_rgb.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_thermal.png b/docs/assets/img/product_pics/units/M5GO_Unit_thermal.png new file mode 100644 index 00000000..c457b69c Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_thermal.png differ diff --git a/docs/assets/img/product_pics/units/M5GO_Unit_tof.png b/docs/assets/img/product_pics/units/M5GO_Unit_tof.png new file mode 100644 index 00000000..0a1c319f Binary files /dev/null and b/docs/assets/img/product_pics/units/M5GO_Unit_tof.png differ diff --git a/docs/assets/img/product_pics/units/PLUS1.zip b/docs/assets/img/product_pics/units/PLUS1.zip new file mode 100644 index 00000000..05280220 Binary files /dev/null and b/docs/assets/img/product_pics/units/PLUS1.zip differ diff --git a/docs/assets/img/product_pics/units/unit_makey_application.jpg b/docs/assets/img/product_pics/units/unit_makey_application.jpg new file mode 100644 index 00000000..a08cf48e Binary files /dev/null and b/docs/assets/img/product_pics/units/unit_makey_application.jpg differ diff --git a/en_build/html/_images/programming_mode_arduino.png b/docs/assets/img/programming_mode_arduino.png similarity index 100% rename from en_build/html/_images/programming_mode_arduino.png rename to docs/assets/img/programming_mode_arduino.png diff --git a/en_build/html/_images/programming_mode_blockly.png b/docs/assets/img/programming_mode_blockly.png similarity index 100% rename from en_build/html/_images/programming_mode_blockly.png rename to docs/assets/img/programming_mode_blockly.png diff --git a/en_build/html/_images/programming_mode_micropython.png b/docs/assets/img/programming_mode_micropython.png similarity index 100% rename from en_build/html/_images/programming_mode_micropython.png rename to docs/assets/img/programming_mode_micropython.png diff --git a/_static/FactoryTest_result.png b/docs/assets/img/screenshots/FactoryTest_result.png similarity index 100% rename from _static/FactoryTest_result.png rename to docs/assets/img/screenshots/FactoryTest_result.png diff --git a/_static/arduino_path.png b/docs/assets/img/screenshots/arduino_path.png similarity index 100% rename from _static/arduino_path.png rename to docs/assets/img/screenshots/arduino_path.png diff --git a/_static/arduino_windows_installer.png b/docs/assets/img/screenshots/arduino_windows_installer.png similarity index 100% rename from _static/arduino_windows_installer.png rename to docs/assets/img/screenshots/arduino_windows_installer.png diff --git a/_static/screenshots/download_m5go_thermal_firmware_01.png b/docs/assets/img/screenshots/download_m5go_thermal_firmware_01.png similarity index 100% rename from _static/screenshots/download_m5go_thermal_firmware_01.png rename to docs/assets/img/screenshots/download_m5go_thermal_firmware_01.png diff --git a/_static/screenshots/download_m5go_thermal_firmware_02.png b/docs/assets/img/screenshots/download_m5go_thermal_firmware_02.png similarity index 100% rename from _static/screenshots/download_m5go_thermal_firmware_02.png rename to docs/assets/img/screenshots/download_m5go_thermal_firmware_02.png diff --git a/_static/download_m5stack_lib.png b/docs/assets/img/screenshots/download_m5stack_lib.png similarity index 100% rename from _static/download_m5stack_lib.png rename to docs/assets/img/screenshots/download_m5stack_lib.png diff --git a/_static/download_xtensa_tools.png b/docs/assets/img/screenshots/download_xtensa_tools.png similarity index 100% rename from _static/download_xtensa_tools.png rename to docs/assets/img/screenshots/download_xtensa_tools.png diff --git a/_static/ESP32CAM_Browser.png b/docs/assets/img/screenshots/get_started_esp32cam/ESP32CAM_Browser.png similarity index 100% rename from _static/ESP32CAM_Browser.png rename to docs/assets/img/screenshots/get_started_esp32cam/ESP32CAM_Browser.png diff --git a/_static/ESP32CAM_M5CAM.png b/docs/assets/img/screenshots/get_started_esp32cam/ESP32CAM_M5CAM.png similarity index 100% rename from _static/ESP32CAM_M5CAM.png rename to docs/assets/img/screenshots/get_started_esp32cam/ESP32CAM_M5CAM.png diff --git a/_static/ESP32CAM_Terminal.png b/docs/assets/img/screenshots/get_started_esp32cam/ESP32CAM_Terminal.png similarity index 100% rename from _static/ESP32CAM_Terminal.png rename to docs/assets/img/screenshots/get_started_esp32cam/ESP32CAM_Terminal.png diff --git a/_static/mkdir_espressif.png b/docs/assets/img/screenshots/mkdir_espressif.png similarity index 100% rename from _static/mkdir_espressif.png rename to docs/assets/img/screenshots/mkdir_espressif.png diff --git a/_static/my_com.png b/docs/assets/img/screenshots/my_com.png similarity index 100% rename from _static/my_com.png rename to docs/assets/img/screenshots/my_com.png diff --git a/_static/screenshots/select_arduino_lib.png b/docs/assets/img/screenshots/select_arduino_lib.png similarity index 100% rename from _static/screenshots/select_arduino_lib.png rename to docs/assets/img/screenshots/select_arduino_lib.png diff --git a/_static/screenshots/select_board_and_com.png b/docs/assets/img/screenshots/select_board_and_com.png similarity index 100% rename from _static/screenshots/select_board_and_com.png rename to docs/assets/img/screenshots/select_board_and_com.png diff --git a/_static/screenshots/select_demo.png b/docs/assets/img/screenshots/select_demo.png similarity index 100% rename from _static/screenshots/select_demo.png rename to docs/assets/img/screenshots/select_demo.png diff --git a/_static/screenshots/select_get_exe_file.png b/docs/assets/img/screenshots/select_get_exe_file.png similarity index 100% rename from _static/screenshots/select_get_exe_file.png rename to docs/assets/img/screenshots/select_get_exe_file.png diff --git a/_static/transport.gif b/docs/assets/img/transport.gif similarity index 100% rename from _static/transport.gif rename to docs/assets/img/transport.gif diff --git a/docs/assets/js/.eslintrc.js b/docs/assets/js/.eslintrc.js new file mode 100644 index 00000000..36ac1fa7 --- /dev/null +++ b/docs/assets/js/.eslintrc.js @@ -0,0 +1,15 @@ +module.exports = { + "parserOptions": { + "ecmaVersion": 5, + "sourceType": "script" + }, + "env": { + "commonjs": false, + "es6" : false, + "node" : false + }, + "rules": { + "no-var" : "off", + "prefer-const": "off" + } +} \ No newline at end of file diff --git a/docs/assets/js/main.js b/docs/assets/js/main.js new file mode 100644 index 00000000..1029804c --- /dev/null +++ b/docs/assets/js/main.js @@ -0,0 +1,121 @@ +(function() { + // Functions + // ========================================================================= + /** + * Adds event listeners to change active stylesheet and restore previously + * activated stylesheet on reload. + * + * @example + * + * This link: + * Foo + * Will active this existing link: + * + * + * @example + * + * This link: + * Bar + * Will activate this existing link: + * + * Or generate this active link: + * + */ + function initStyleSwitcher() { + var isInitialzed = false; + var sessionStorageKey = 'activeStylesheetHref'; + + function handleSwitch(activeHref, activeTitle) { + var activeElm = document.querySelector('link[href*="' + activeHref +'"],link[title="' + activeTitle +'"]'); + + if (!activeElm && activeHref) { + activeElm = document.createElement('link'); + activeElm.setAttribute('href', activeHref); + activeElm.setAttribute('rel', 'stylesheet'); + activeElm.setAttribute('title', activeTitle); + + document.head.appendChild(activeElm); + + activeElm.addEventListener('load', function linkOnLoad() { + activeElm.removeEventListener('load', linkOnLoad); + setActiveLink(activeElm); + }); + } + else if (activeElm) { + setActiveLink(activeElm); + } + } + + function setActiveLink(activeElm) { + var activeHref = activeElm.getAttribute('href'); + var activeTitle = activeElm.getAttribute('title'); + var inactiveElms = document.querySelectorAll('link[title]:not([href*="' + activeHref +'"]):not([title="' + activeTitle +'"])'); + + // Remove "alternate" keyword + activeElm.setAttribute('rel', (activeElm.rel || '').replace(/\s*alternate/g, '').trim()); + + // Force enable stylesheet (required for some browsers) + activeElm.disabled = true; + activeElm.disabled = false; + + // Store active style sheet + sessionStorage.setItem(sessionStorageKey, activeHref); + + // Disable other elms + for (var i = 0; i < inactiveElms.length; i++) { + var elm = inactiveElms[i]; + + elm.disabled = true; + + // Fix for browsersync and alternate stylesheet updates. Will + // cause FOUC when switching stylesheets during development, but + // required to properly apply style updates when alternate + // stylesheets are enabled. + if (window.browsersyncObserver) { + var linkRel = elm.getAttribute('rel') || ''; + var linkRelAlt = linkRel.indexOf('alternate') > -1 ? linkRel : (linkRel + ' alternate').trim(); + + elm.setAttribute('rel', linkRelAlt); + } + } + + // CSS custom property ponyfil + if ((window.$docsify || {}).themeable) { + window.$docsify.themeable.util.cssVars(); + } + } + + // Event listeners + if (!isInitialzed) { + isInitialzed = true; + + // Restore active stylesheet + document.addEventListener('DOMContentLoaded', function() { + var activeHref = sessionStorage.getItem(sessionStorageKey); + + if (activeHref) { + handleSwitch(activeHref); + } + }); + + // Update active stylesheet + document.addEventListener('click', function(evt) { + var dataHref = evt.target.getAttribute('data-link-href'); + var dataTitle = evt.target.getAttribute('data-link-title') + + if (dataHref || dataTitle) { + dataTitle = dataTitle + || evt.target.textContent + || '_' + Math.random().toString(36).substr(2, 9); // UID + + handleSwitch(dataHref, dataTitle); + evt.preventDefault(); + } + }); + } + } + + // Main + // ========================================================================= + initStyleSwitcher(); +})(); diff --git a/docs/assets/logo.png b/docs/assets/logo.png new file mode 100644 index 00000000..9715805e Binary files /dev/null and b/docs/assets/logo.png differ diff --git a/docs/assets/styles.css b/docs/assets/styles.css new file mode 100644 index 00000000..aef12471 --- /dev/null +++ b/docs/assets/styles.css @@ -0,0 +1,393 @@ +:root { + --theme-color: #1FC5BF; + --theme-color-light: #99EBE2; + --theme-color-dark: #00B3AC; + --theme-color-secondary: #6A5096; + --theme-color-secondary-dark: #3F1C77; + --theme-color-secondary-light: #C4B2E1; + + --text-color-base: #2E2E46; + --text-color-secondary: #646473; + --text-color-tertiary: #81818E; +} + + +::selection { + background: var(--theme-color-light); +} + +body { + font-size: 100%; + line-height: 1.5; + font-family: 'Source Sans Pro','Open Sans','Helvetica Neue',Arial,sans-serif; + color: var(--text-color-base); +} + +* { + text-decoration: none !important; +} + +a { + transition: all 0.3s linear; +} + +div.search { + border-bottom: 2px solid #787881; + border: none; + background-color: var(--theme-color-secondary-light); + padding: 0; +} + +.sidebar .search input { + background: none; + background-color: rgba(255,255,255,0.5); + padding: 1rem; + transition: background-color 0.3s ease; +} + +.sidebar .search input:focus { + background-color: rgba(255,255,255,1); +} + +aside.sidebar { + border: none; + background-color: var(--theme-color-secondary); + color: #fff; + width: 20%; +} + +body.close .sidebar { + transform: translateX(-100%); +} + +.sidebar ul li a { + color: rgba(255,255,255,0.8); + color: var(--theme-color-light); + font-size: 1rem; +} + +.sidebar ul li.active>a { + border-width: 0.1rem; +} + +.sidebar ul li a:hover { + text-decoration: none; + color: rgba(255,255,255,1); +} + +.sidebar .sidebar-nav ul li.active>a { + color: #fff; + border-right: 0.2rem solid var(--theme-color-secondary-light,#29D0CA); +} + +.search .results-panel.show { + background-color: #05827E; + background-color: #fff; + color: #000; +} + +.sidebar .search .matching-post { + padding: 0; + border-bottom: 0.2rem solid #E4E4E6; +} + +.sidebar .search .matching-post:first-child { + border-top: 0.2rem solid #E4E4E6; +} + +.search .search-keyword { + /* color: #fff; */ +} + +.search a { + padding: 1rem; + display: block; + transition: background-color 0.3s ease; +} + +.search a:hover { + color: var(--theme-color-dark); +} + +.search p.empty { + margin: 0; + padding: 1rem; + background-color: #F1F1F2; +} + +.sidebar > h1 { + font-size: 2rem; +} + +.sidebar-logo { + display: block; + width: 4rem; + vertical-align: bottom; + line-height: 1.6; + height: 4rem; + margin: 0 auto; +} + +body .sidebar-toggle { + background: none; + bottom: 1rem; + left: 1rem; + cursor: pointer; + width: 1.5rem; + height: 1.5rem; + padding: 0; +} + +body .sidebar-toggle span { + transition: all 0.3s linear; + background-color: var(--theme-color-light); + height: 0.25rem; + width: 1.5rem; + position: absolute; + left: 0; + margin: 0; + transform-origin: 0; +} + +body.close .sidebar-toggle { + width: 1.5rem; + height: 1.5rem; +} + +body.close .sidebar-toggle span { + transform-origin: center; +} + +body .sidebar-toggle span:nth-child(1) { top:0; } +body .sidebar-toggle span:nth-child(2) { top:0.65rem; } +body .sidebar-toggle span:nth-child(3) { top:1.25rem; } + +.sidebar-toggle .sidebar-toggle-button:hover { opacity: 1; } + +.sidebar-toggle:hover span:nth-child(1) { transform: rotate(45deg); width: 1.75rem; } +.sidebar-toggle:hover span:nth-child(2) { opacity: 0; } +.sidebar-toggle:hover span:nth-child(3) { transform: rotate(-45deg); width: 1.75rem; } + +.close .sidebar-toggle:hover span:nth-child(1) { transform:rotate(0); width:1.5rem; top:0.65rem; } +.close .sidebar-toggle:hover span:nth-child(2) { opacity: 1; transform:rotate(90deg); } +.close .sidebar-toggle:hover span:nth-child(3) { transform:rotate(0); width:1.5rem; top:0.65rem; } + +th { + text-align: left; +} + +.markdown-section blockquote { + margin: 1em 0; +} + +.markdown-section em, +.markdown-section blockquote { + color: var(--text-color-tertiary); +} + +.cover-main img { + max-width: 10rem; + max-height: 10rem; +} + +section.cover p { + line-height: inherit; +} + +section.cover .cover-main a { + font-weight: 600; +} + +section.cover .cover-main a::before { + display: none; +} + +section.cover .cover-main blockquote { + font-style: italic; + color: #868C91; +} + +section.cover .cover-main>p:last-child a:first-child { + border-width: 0.2rem; + color: var(--theme-color-secondary); + border-color: var(--theme-color-secondary); +} + +section.cover .cover-main>p:last-child a:last-child { + background-color: var(--theme-color-secondary); + border-color: var(--theme-color-secondary); +} + +section.cover .cover-main>p:last-child a:hover { + color: var(--theme-color-secondary-dark); + border-color: var(--theme-color-secondary-dark); + opacity: 1; +} + +section.cover .cover-main>p:last-child a:last-child:hover { + background-color: var(--theme-color-secondary-dark); + border-color: var(--theme-color-secondary-dark); + color: #fff; + opacity: 1; +} + +.anchor { + position: relative; +} + +.anchor::before { + content: '\1F449'; + position: absolute; + top: 0; + left: -1.25em; + opacity: 0; + font-size: 0.875em; +} + +.anchor:hover::before { + opacity: 1; +} + +section.cover .cover-main { + margin: 20vh 20vw; +} + +.app-name-link { + white-space: nowrap; +} + +.app-sub-sidebar li:before { + display: none; +} + +.markdown-section pre, +.markdown-section pre > code { + background-color: #2E2E46; + color: rgba(255,255,255,0.75); + font-size: 1em; + line-height: 1.5; +} + +.markdown-section code { + display: inline-block; + font-family: 'Source Code Pro', monospace; +} + +.markdown-section pre { + padding: 2rem; +} + +.markdown-section pre > code { + padding: 0; +} + +.markdown-section hr { + border-bottom: 5px solid transparent; +} + +.token.punctuation { + color: #585967; +} + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata{color:#999999;} +.token.property, +.token.number, +.token.function-name, +.token.constant, +.token.symbol, +.token.deleted{color:#5a9bcf;}.token.boolean{color:#ff8b50;}.token.tag{color:#fc929e;}.token.string{color:#8dc891;}.token.punctuation{color:#5FB3B3;} +.token.selector, +.token.char, +.token.builtin, +.token.inserted{color:#D8DEE9;}.token.function{color:#79b6f2;} +.token.operator, +.token.entity, +.token.url, +.token.variable{color:#d7deea;}.token.attr-value{color:#8dc891;}.token.keyword{color:#c5a5c5;} + +.lang-scss .token.variable { + color: #8dc891; +} + +.markdown-section { + max-width: 75rem; + padding: 1rem 3rem; +} + +.markdown-section ol, .markdown-section p, .markdown-section ul { + line-height: inherit; +} + +.markdown-section code { + color: inherit; + border-radius: 0; + font-size: 0.9em; + padding: 6px 10px; + /* color: #111; */ +} + +.markdown-section table { + display: table; +} + +.markdown-section table tr { + border-width: 0.2rem 0; + border-style: solid; + border-color: #F1F1F2; +} + +.markdown-section table tr:nth-child(2n) { + background-color: transparent; +} + +.markdown-section table td, +.markdown-section table th { + border: none; + padding: 1.5rem 0.5rem; + text-align: left; +} + +.markdown-section table td p { + margin: 0; +} + +.markdown-section a { + text-decoration: none; + border-bottom: 0.1rem solid var(--theme-color-light); + transition: all 0.3s ease; +} + +.markdown-section a:hover { + border-color: var(--theme-color); + color: var(--theme-color-dark); +} + + +/* Badges */ +.markdown-section > p:first-child > a { + border: none; +} + +.docsify-copy-code-button { + background: var(--theme-color); +} + +.sidebar::-webkit-scrollbar { + width:0; +} + +@media (min-width: 1200px) { + body { + font-size: 112.5%; + } +} + +@media (min-width: 1400px) { + body { + font-size: 125%; + } +} diff --git a/docs/coverpage.md b/docs/coverpage.md new file mode 100644 index 00000000..087645ad --- /dev/null +++ b/docs/coverpage.md @@ -0,0 +1,11 @@ + + +> A documentation for [M5Stack](https://www.m5stack.com) + +- A modular stackable development device integrating WIFI/BLE +- For Industry Development/STEM Education +- Programming with UIFlow(Blockly/MicroPython) + +[Official Website](http://www.m5stack.com) +[Introdction](#main) +[Quick Start](quick_start) diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 00000000..209f143a --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,3 @@ +# FAQ + +## (coming soon...) \ No newline at end of file diff --git a/docs/faq_cn.md b/docs/faq_cn.md new file mode 100644 index 00000000..e6dc0d13 --- /dev/null +++ b/docs/faq_cn.md @@ -0,0 +1,3 @@ +# 常见问题解答 + +## (在编辑中...) \ No newline at end of file diff --git a/docs/faq_jp.md b/docs/faq_jp.md new file mode 100644 index 00000000..446cbb90 --- /dev/null +++ b/docs/faq_jp.md @@ -0,0 +1,3 @@ +# よくある質問 + +## (近日公開...) \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..d600afc2 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,76 @@ + + + + + + + + + + docsify-themeable - A delightfully simple theme system for docsify.js + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..59c2b3ca --- /dev/null +++ b/docs/index.md @@ -0,0 +1,54 @@ +# M5Stack + +[![Codacy grade](https://img.shields.io/codacy/grade/860d40719cbd4e0f91e145b87ec7c29a.svg?style=flat-square)](https://www.codacy.com/app/watson8544/M5Stack-Documentation-docsify?utm_source=github.com&utm_medium=referral&utm_content=watson8544/M5Stack-Documentation-docsify&utm_campaign=Badge_Grade) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://github.com/watson8544/M5Stack-Documentation-docsify/blob/master/LICENSE) +[![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2Fjhildenbiddle%2Fdocsify-themeable&hashtags=css,docsify,developers,frontend) +Star + + +**Welcome to M5Stack Documents!** + +?> **Tip** The underline words designate `more info` links leading to advanced sections about the described task. + +
+ Screenshot of coverpage +
+ +## Introduction + +**M5 stack is a modular stackable development device. The M stands for Modular and 5 stands for the the units compact 5 x 5 cm size.** + +**The M5 stack aims to take the pain out of developing your new inventions and ideas. M5 stack comes packed with sensors, wifi, bluetooth, a screen and its own power supply which avoids the inconvenience of messy wires strewn across breadboards and adding new functionality is as simple as stacking it on top of one of the many expansion modules or plugging in a unit via the handy grove connectors.** + +Our a series of core boards are based on **ESP32** chip. + +Our aim is "**Stackable Board is Product**". Here's the [Official Website](www.m5stack.com) + +
+ Screenshot of coverpage +
+ +| | | | +|:---:|:---:|:---:| +|[Product Documents](product_documents) | [Quick Start](quick_start) | [Practice](practice)| + +| | | | +|:---:|:---:|:---:| +|[API Rreference](api_reference) | [M5Stack Awesome](m5stack_awesome) | [FAQ](faq)| + + +## Contact & Support + +- :computer: Visit [Official Website](www.m5stack.com) for newest product +- :busts_in_silhouette: Sign in our [Forum](http://forum.m5stack.com) for more designs with M5Stack +- :mailbox_with_mail: If you have any questions, you can contact us by [Email](tech@m5stack.com) +- :convenience_store: If you want to get our products, access our [store](http://www.aliexpress.com/store/all-wholesale-products/3226069.html?spm=2114.12010108.100004.3.7e3a5379KoyhDo) + +## License + +This project is licensed under the [MIT license](https://github.com/watson8544/M5Stack-Documentation-docsify/blob/master/LICENSE). + +Copyright (c) 2018 M5Stack ([@M5Stack](https://twitter.com/M5Stack)) + + + \ No newline at end of file diff --git a/docs/navbar.md b/docs/navbar.md new file mode 100644 index 00000000..325e0f93 --- /dev/null +++ b/docs/navbar.md @@ -0,0 +1,3 @@ +- [中文](/cn/) +- [En](/) +- [日本語](/jp/) diff --git a/docs/practice.md b/docs/practice.md new file mode 100644 index 00000000..558dd916 --- /dev/null +++ b/docs/practice.md @@ -0,0 +1,5 @@ +# Practice + + | | +---|---|--- +[M5StackCore](establish_serial_connection) | [M5Camera](establish_serial_connection) | [M5BALA](establish_serial_connection) \ No newline at end of file diff --git a/docs/practice/practice_arduino.md b/docs/practice/practice_arduino.md new file mode 100644 index 00000000..d6210c09 --- /dev/null +++ b/docs/practice/practice_arduino.md @@ -0,0 +1,3 @@ +# Practice for Arduino + +## (coming soon...) \ No newline at end of file diff --git a/docs/practice/practice_blockly.md b/docs/practice/practice_blockly.md new file mode 100644 index 00000000..f00c7e32 --- /dev/null +++ b/docs/practice/practice_blockly.md @@ -0,0 +1,3 @@ +# Practice for M5Flow(Blockly) + +## (coming soon...) \ No newline at end of file diff --git a/docs/practice/practice_micropython.md b/docs/practice/practice_micropython.md new file mode 100644 index 00000000..0bbb18ea --- /dev/null +++ b/docs/practice/practice_micropython.md @@ -0,0 +1,3 @@ +# Practice for M5Flow(MicroPython) + +## (coming soon...) \ No newline at end of file diff --git a/docs/product_documents.md b/docs/product_documents.md new file mode 100644 index 00000000..643788a3 --- /dev/null +++ b/docs/product_documents.md @@ -0,0 +1,66 @@ +# Product Documents + + + +| M5Core | MiniCore | +| :----------: |:------------: | +| [BASIC](product_documents/m5stack-core/m5core_basic) | [Stick](minicore_stick) | +| [GRAY](product_documents/m5stack-core/m5core_gray) | / | +| [FIRE](product_documents/m5stack-core/m5core_fire) | / | + + + + + +| Wireless Modules | Accessory Modules | Controlling Modules | +| :------------------: |:------------------:| :--------------------:| +| [GPS](product_documents/modules/module_gps) | [PROTO](product_documents/modules/module_proto) | [STEPMOTOR](product_documents/modules/module_stepmotor) | +| [LORA](product_documents/modules/module_lora) | [BATTERY](product_documents/modules/module_battery) | [PLC](product_documents/modules/module_plc) | +| [LAN](product_documents/modules/module_lan) | [BTC](product_documents/modules/module_btc) | [FACES](product_documents/modules/module_face) | +| [SIM800/GPRS/GSM](product_documents/modules/module_sim800) | / | / | +| / | / | / | +| / | / | / | +| / | / | / | +| / | / | / | +| / | / | / | + + + + +- [LEGO-CABLE](product_documents/cables/accessory_lego_cable) +- [FRAME](product_documents/accessory_frame) + + + + + +| Input/Sensing Class | Output/Controlling Class | Interface Class | +| :-------------------: |:------------------------: | :----------------:| +| [ENV](product_documents/units/unit_env) | [RGB](product_documents/units/unit_rgb) | [HUB](product_documents/units/unit_hub) | +| [IR](product_documents/units/unit_ir) | [RELAY](product_documents/units/unit_relay) | [3.96PORT](product_documents/units/unit_396port) | +| [PIR](product_documents/units/unit_pir) | / | / | +| [ANGLE](product_documents/units/unit_angle) | / | / | +| [EARTH/Moisture](product_documents/units/unit_moisture) | / | / | +| [LIGHT](product_documents/units/unit_light) | / | / | +| [MAKEY](product_documents/units/unit_makey) | / | / | +| [BUTTON](product_documents/units/unit_button) | / | / | +| [Dual-BUTTON](product_documents/units/unit_dual_button) | / | / | +| [JOYSTICK](product_documents/units/unit_joystick) | / | / | +| [THERMAL](product_documents/units/unit_thermal) | / | / | +| [ADC](product_documents/units/unit_ADC) | / | / | +| [DAC](product_documents/units/unit_DAC) | / | / | +| [Color Sensor](product_documents/units/unit_color_sensor) | / | / | +| [ToF](product_documents/units/unit_tof) | / | / | + + + + + + + +- [BALA](product_documents/applications/application_bala) + + + + +- [M5Stack USB Downloader](product_documents/tools/tool_usb_downloader) diff --git a/docs/product_documents/accessorries/cables/accessory_lego_cable.md b/docs/product_documents/accessorries/cables/accessory_lego_cable.md new file mode 100644 index 00000000..25f333b3 --- /dev/null +++ b/docs/product_documents/accessorries/cables/accessory_lego_cable.md @@ -0,0 +1,3 @@ +# LEGO Cable + +## (coming soom...) \ No newline at end of file diff --git a/docs/product_documents/accessorries/frame.md b/docs/product_documents/accessorries/frame.md new file mode 100644 index 00000000..1b12b531 --- /dev/null +++ b/docs/product_documents/accessorries/frame.md @@ -0,0 +1,3 @@ +# Frame + +## (coming soom...) \ No newline at end of file diff --git a/docs/product_documents/accessorries/headers_socket.md b/docs/product_documents/accessorries/headers_socket.md new file mode 100644 index 00000000..cc8c1d69 --- /dev/null +++ b/docs/product_documents/accessorries/headers_socket.md @@ -0,0 +1,3 @@ +# Headers Socket + +## DESCRIPTION diff --git a/docs/product_documents/applications/application_bala.md b/docs/product_documents/applications/application_bala.md new file mode 100644 index 00000000..08b60ef3 --- /dev/null +++ b/docs/product_documents/applications/application_bala.md @@ -0,0 +1,70 @@ +# M5Stack BALA + +## DESCRIPTION + +The M5Stack BALA is a balance bot based on M5Stack FIRE, including a 2 DC driver module based on Mega328p which is a core chip on Arduino UNO +You can even program The M5Stack BALA through Arduino or MicroPython with few code + +The 2 DC driver module communicates with M5Stack FIRE through I2C bus. It's default I2C address is **0x56** + +## FEATURES + +- Programming Support + + Python +- Compatible LEGO +- POGO Pin +- TF Card Support + +## PARAMETER + +Model | M5Stack FIRE +---|--- +ESP32 | 240MHz dual core, 600 DMIPS, 4MB SRAM, Wi-Fi, dual mode Bluetooth +Flash | 16M-Bytes +Input | 5V @ 500mA +Interface | TypeC x 1, GROVE(I2C+I/0+UART), Pogo Pin x 1 +LCD | 2 inch, 320x240 Colorful TFT LCD, ILI9342 +Speaker | 1W-0928 +Microphone | MEMS Analog BSE3729 Microphone +LED | SK6812 3535 RGB LED x 10 +MEMS | MPU6050, MAG3110 +Battery | 550mAh @ 3.7V, inside +Op.Temp. | 32°F to 104°F ( 0°C to 40°C ) +Size | 54 x 54 x 21 mm +C.A.S.E | Plastic ( PC ) +Weight | 56g + +## INCLUDES + +- 1x M5Stack BALA +- 1x Motor Driver +- 2x N20(Encoder included) +- Type-C USB Cable + + +## DOCUMENTS +- GitHub + - [Arduino](https://github.com/m5stack/M5Bala) + - [MicroPython](https://github.com/m5stack/M5Bala) +- [QuickStart](https://github.com/m5stack/M5Bala) +- [Purchase](https://www.aliexpress.com/store/product/M5Satck-New-BALA-Car-ESP32-Development-Mini-Electric-Self-balancing-Car-2DC-Motor-with-Encoder-PSRAM/3226069_32904033658.html?spm=2114.12010615.8148356.40.1fd3724dW3O2Bu.html) + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
\ No newline at end of file diff --git a/docs/product_documents/m5stack-core/m5core_basic.md b/docs/product_documents/m5stack-core/m5core_basic.md new file mode 100644 index 00000000..cb939a87 --- /dev/null +++ b/docs/product_documents/m5stack-core/m5core_basic.md @@ -0,0 +1,58 @@ +# M5Stack BASIC + +## DESCRIPTION + +The M5Stack BASIC is a development kit based on ESP32 chip. You can even +program The M5Stack BASIC through Blockly, Arduino or MicroPython. + +The M5Stack BASIC equips the ESP32 with everything necessary to program, +and a TFT LCD, so you can create a 3D remote gesture controller, a +simple "Leap Motion" via M5Stack BASIC in a day in stead of couple weeks +and so on. + +## FEATURES + +- Programming Support +- Arduino +- ESP-IDF +- MicroPython +- TF Card Support + +## PARAMETER + +| Source | Parameter | +| :----------: |:------------: | +| ESP32 | 240MHz dual core, 600 DMIPS, 520K, Wi-Fi, dual mode Bluetooth | +| Flash) | 4M-Bytes | +| Input | 5V @ 500mA | +| Interface | TypeC x 1, GROVE(I2C+I/0+UART) x 1 | +| LCD | 2 inch, 320x240 Colorful TFT LCD, ILI9342 | +| Speaker | 1W-0928 | +| Battery | 150mAh @ 3.7V, inside vb | +| Op.Temp. | 32°F to 104°F ( 0°C to 40°C ) | +| Size | 54 x 54 x 12.5 mm | +| C.A.S.E | Plastic ( PC ) | +| Weight | 120g with bottom, 100g only core | + +## INCLUDES + +- 1x M5Stack BASIC +- 1x M5Stack BASIC Bottom +- Type-C USB Cable +- User Manual + +## DOCUMENTS + +- [Schematic](https://github.com/m5stack/M5-3D_and_PCB/blob/master/M5_Core_SCH(20171206).pdf) + +- Example + + - [Arduino Example](https://github.com/m5stack/M5Stack/tree/master/examples) + +- Datasheet + + - [ESP32](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_cn.pdf) + +- GitHub + + - [Arduino GitHub](https://github.com/m5stack/M5Stack) diff --git a/docs/product_documents/m5stack-core/m5core_fire.md b/docs/product_documents/m5stack-core/m5core_fire.md new file mode 100644 index 00000000..d1bc1754 --- /dev/null +++ b/docs/product_documents/m5stack-core/m5core_fire.md @@ -0,0 +1,89 @@ +# M5Stack FIRE + +## DESCRIPTION + +The M5Stack FIRE is a development kit based on ESP32 chip. You can even +program The M5Stack FIRE through Blockly, Arduino or MicroPython. + +The M5Stack FIRE equips the ESP32 with everything necessary to program, +run and develop on the wonderchip. It also features a Six-Axis (Gyro + +Accelerometer) MEMS (MPU-6050), a 3-Axis Digital Magnetometer (MAG3110) +and a TFT LCD, so you can create a 3D remote gesture controller, a +simple "Leap Motion" via M5Stack FIRE in a day in stead of couple weeks +and so on. + +## FEATURES + +- Programming Support +- Blockly +- Arduino +- Python +- Compatible LEGO +- TF Card Support + +## PARAMETER + +| Source | Parameter | +| :----------: |:------------: | +| ESP32 | 240MHz dual core, 600 DMIPS, 4MB SRAM, Wi-Fi, dual mode Bluetooth | +| Flash) | 16M-Bytes | +| Input | 5V @ 500mA | +| Interface | TypeC x 1, GROVE(I2C+I/0+UART) x 1 | +| LCD | 2 inch, 320x240 Colorful TFT LCD, ILI9342 | +| Speaker | 1W-0928 | +| Microphone | MEMS Analog BSE3729 Microphone | +| LED | SK6812 3535 RGB LED x 10 | +| MEMS | MPU6050, MAG3110 | +| Battery | 150mAh @ 3.7V, inside vb | +| Op.Temp. | 32°F to 104°F ( 0°C to 40°C ) | +| Size | 54 x 54 x 12.5 mm | +| C.A.S.E | Plastic ( PC ) | +| Weight | 56g | + +## INCLUDES + +- 1x M5Stack FIRE +- 1x M5GO Bottom +- 1x M5GO CHG BASE +- Type-C USB Cable +- User Manual + +## DOCUMENTS + +- Example + + - [Arduino Example](https://github.com/m5stack/M5Stack/tree/master/examples) + + - [MicroPython Example](https://github.com/m5stack/M5GO/tree/master/examples) + +- Datasheet + + - [ESP32](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_cn.pdf) + + - [MPU6050](https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf) + + - [MAG3110](https://www.nxp.com/docs/en/data-sheet/MAG3110.pdf) + +- GitHub + + - [Arduino GitHub](https://github.com/m5stack/M5Stack) + + - [MicroPython GitHub](https://github.com/m5stack/M5GO) + +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-NEW-PSRAM-2-0-FIRE-IoT-Kit-Dual-Core-ESP32-16M-FLash-4M-PSRAM-Development/3226069_32847906756.html?spm=2114.12010615.8148356.10.1c93724d7cJ5rG.html) + +## READ MORE + +### Diagram of Fire + +
+ +
+ +
+ +
+ +
+ +
\ No newline at end of file diff --git a/docs/product_documents/m5stack-core/m5core_gray.md b/docs/product_documents/m5stack-core/m5core_gray.md new file mode 100644 index 00000000..c0d8a02c --- /dev/null +++ b/docs/product_documents/m5stack-core/m5core_gray.md @@ -0,0 +1,68 @@ +# M5Stack GRAY + +## DESCRIPTION + +The M5Stack GRAY is a development kit based on ESP32 chip. You can even +program The M5Stack GRAY through Blockly, Arduino or MicroPython. + +The M5Stack GRAY equips the ESP32 with everything necessary to program, +run and develop on the wonderchip. It also features a Six-Axis (Gyro + +Accelerometer), 3-Axis Digital Magnetometer, MEMS(MPU9250), and a TFT +LCD, so you can create a 3D remote gesture controller, a simple "Leap +Motion" via M5Stack GRAY in a day in stead of couple weeks and so on. + +## FEATURES + +- Programming Support +- Arduino +- ESP-IDF +- MicroPython +- TF Card Support + +## PARAMETER + +| Source | Parameter | +| :----------: |:------------: | +| ESP32 | 240MHz dual core, 600 DMIPS, 520K, Wi-Fi, dual mode Bluetooth | +| Flash) | 4M-Bytes | +| Input | 5V @ 500mA | +| Interface | TypeC x 1, GROVE(I2C+I/0+UART) x 1 | +| LCD | 2 inch, 320x240 Colorful TFT LCD, ILI9342 | +| Speaker | 1W-0928 | +| Battery | 150mAh @ 3.7V, inside vb | +| Op.Temp. | 32°F to 104°F ( 0°C to 40°C ) | +| Size | 54 x 54 x 12.5 mm | +| C.A.S.E | Plastic ( PC ) | +| Weight | 120g with bottom, 100g only core | + +## INCLUDES + +- 1x M5Stack GRAY +- 1x M5Stack Core Bottom +- Type-C USB Cable +- User Manual + +## DOCUMENTS + +- [Schematic](https://github.com/m5stack/M5-3D_and_PCB/blob/master/M5_Core_SCH(20171206).pdf) + +- Example + + - [Arduino Example](https://github.com/m5stack/M5Stack/tree/master/examples) + + - [MicroPython Example](https://github.com/m5stack/M5GO/tree/master/examples) + +- Datasheet + + - [ESP32](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_cn.pdf) + + - [MPU9250](https://www.invensense.com/wp-content/uploads/2015/02/PS-MPU-9250A-01-v1.1.pdf) + + +- GitHub + + - [Arduino GitHub](https://github.com/m5stack/M5Stack) + + - [MicroPython GitHub](https://github.com/m5stack/M5GO) + +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-Official-In-Stock-ESP32-Mpu9250-9Axies-Motion-Sensor-Core-Development-Kit-Extensible-IoT-Development-Board/3226069_32836393710.html?spm=2114.12010615.8148356.12.25e96be7zRik8r.html) diff --git a/docs/product_documents/m5stack-core/minicore_stick.md b/docs/product_documents/m5stack-core/minicore_stick.md new file mode 100644 index 00000000..bbc9593b --- /dev/null +++ b/docs/product_documents/m5stack-core/minicore_stick.md @@ -0,0 +1,3 @@ +# Stick + +## (coming soom...) \ No newline at end of file diff --git a/en/product-documents/modules/esp32cam.md b/docs/product_documents/modules/esp32cam.md similarity index 100% rename from en/product-documents/modules/esp32cam.md rename to docs/product_documents/modules/esp32cam.md diff --git a/en/product-documents/modules/m5stack_battery_module.rst b/docs/product_documents/modules/module_battery.md similarity index 57% rename from en/product-documents/modules/m5stack_battery_module.rst rename to docs/product_documents/modules/module_battery.md index c3b5312e..ad2774bd 100644 --- a/en/product-documents/modules/m5stack_battery_module.rst +++ b/docs/product_documents/modules/module_battery.md @@ -1,27 +1,21 @@ -M5Stack BATTERY Module -====================== +# M5Stack BATTERY Module -DESCRIPTION ------------ +# DESCRIPTION The M5Stack BATTERY Module is module with 850mAh High-Capacity Battery. User can create a portble device with any series of M5Stack Core and M5Stack BATTERY Module easily. -FEATURES --------- +# FEATURES - 850mAh High-Capacity Battery -INCLUDES --------- +# INCLUDES - 1x M5Stack BATTERY Module -DOCUMENTS ---------- +# DOCUMENTS -- `WebSite `__ - -- `Purchase `_ +- [WebSite](https://m5stack.com) +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-Official-In-Stock-Battery-Module-for-Arduino-ESP32-Core-Development-Kit-Capacity-850mAh-Stackable-IoT/3226069_32839688875.html?spm=2114.12010610.8148356.8.7b26c4a1uVFob3.html) diff --git a/en_build/html/_sources/product-documents/modules/m5stack_btc_module.rst.txt b/docs/product_documents/modules/module_btc.md similarity index 71% rename from en_build/html/_sources/product-documents/modules/m5stack_btc_module.rst.txt rename to docs/product_documents/modules/module_btc.md index b95ce8ed..2df50b24 100644 --- a/en_build/html/_sources/product-documents/modules/m5stack_btc_module.rst.txt +++ b/docs/product_documents/modules/module_btc.md @@ -1,8 +1,6 @@ -M5Stack BTC Module -================== +# M5Stack BTC Module -DESCRIPTION ------------ +# DESCRIPTION The M5Stack BTC Module is a base including DHT12 module which can detect temperature and humidity. Your M5Stack Core board can stay as a small @@ -10,20 +8,16 @@ displayer(like a small TV or a small IOT central contronller) after adding this BTC Module. Absolutely, it is more easier to charge M5Stack Core via Type-C Cable after adding this BTC Module. -FEATURES --------- +# FEATURES - DHT12 inside -INCLUDES --------- +# INCLUDES - Type-C USB Cable - M3 x 16 - Tools -DOCUMENTS ---------- - -- `WebSite `__ +# DOCUMENTS +- [WebSite](https://m5stack.com) diff --git a/docs/product_documents/modules/module_face.md b/docs/product_documents/modules/module_face.md new file mode 100644 index 00000000..ce236f1a --- /dev/null +++ b/docs/product_documents/modules/module_face.md @@ -0,0 +1,60 @@ +# M5Stack FACES + +## DESCRIPTION + +The M5Stack FACES is a development kit based on ESP32 chip compatible +with three different KeyBoards( *26 letters KeyBoard, Gameboy KeyBoard +and Calculator KeyBoard*). + +You can even program The M5Stack FACES through Blockly, Arduino or +MicroPython. Absolutely, you can DIY many classify GameBoy games as you +like, such as Super Mario, Tetris and so on.You also make a remotely +controlled calculator, or a Somatosensory game remote controller. + +## FEATURES + +- Programming Support +- Blockly +- Arduino +- Python +- Compatible LEGO +- Support Nintendo emulator +- TF Card Support + +## INCLUDES + +- 1x M5Stack GrayCore +- 1x KeyBoard +- 1x Gameboy +- 1x Calculator +- 1x FaceBottom +- 1x CHG base +- Type-C USB Cable +- User Manual + +## Applications + +- DIY Gameboy Games: +- Nintendo emulator +- Tetris +- DIY Calculator +- DIY PocketComputer + +## DOCUMENTS + +- [Schematic](https://github.com/m5stack/esp32-cam-demo/blob/m5cam/M5CAM-ESP32-A1-POWER.pdf) +- Example + + - [MicroPython Example](https://github.com/m5stack/M5GO/tree/master/examples) + +- Datasheet + + - [ESP32](https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_cn.pdf) + + - [MPU9250](https://www.invensense.com/wp-content/uploads/2015/02/PS-MPU-9250A-01-v1.1.pdf) + +- [M5Stack-nesemu](https://github.com/m5stack/M5Stack-nesemu) + +- [GitHub](https://github.com/m5stack/M5Stack-nesemu) + +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-NEW-Offer-ESP32-Open-Source-Faces-Pocket-Computer-with-Keyboard-Gameboy-Calculator-for-Micropython-Arduino/3226069_32843973578.html?spm=2114.12010615.8148356.8.25e96be7Jd99Pb.html) diff --git a/en_build/html/_sources/product-documents/modules/m5stack_gps_module.rst.txt b/docs/product_documents/modules/module_gps.md similarity index 64% rename from en_build/html/_sources/product-documents/modules/m5stack_gps_module.rst.txt rename to docs/product_documents/modules/module_gps.md index 74039158..cf6af3b7 100644 --- a/en_build/html/_sources/product-documents/modules/m5stack_gps_module.rst.txt +++ b/docs/product_documents/modules/module_gps.md @@ -1,8 +1,6 @@ -M5Stack GPS Module -================== +# M5Stack GPS Module -DESCRIPTION ------------ +## DESCRIPTION The M5Stack GPS Module is a module with small GPS module. The small GPS module named UBLOX NEO-M8N. You can program it through Blockly, Arduino @@ -12,8 +10,7 @@ GPS module is built on the high performing u-blox M8 GNSS engine and exhibit high performance and high sensitivity.And it can supply your global positioning information even you in the wild and get lost. -FEATURES --------- +## FEATURES - GPS NEO-M8N Module - high-performance @@ -21,29 +18,26 @@ FEATURES - Concurrent reception of up to 3 GNSS - Industry leading –167 dBm navigation sensitivity -INCLUDES --------- +## INCLUDES - 1x M5Stack GPS Module - 1x M5Stack Antenna -Applications ------------- +## Applications - Child positioning bracelet - Logistics Tracking Management based on GPS -DOCUMENTS ---------- +## DOCUMENTS + +- [WebSite](https://m5stack.com) -- `WebSite `__ - Example + - [Arduino Example](https://github.com/m5stack/M5Stack/tree/master/examples/Modules/GPS) - + `Arduino Example `__ +- [GPS Info](https://www.u-blox.com/zh/product/neo-m8-series) (GPS) -- `GPS Info `__ (GPS) - GitHub + - [Arduino GitHub](https://github.com/m5stack/M5Stack) - + `Arduino GitHub `__ - -- `Purchase `_ +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-New-Arrival-LAN-Module-with-W5500-Chip-LanProto-Ethernet-convert-Network-Module-Microcontroller-for-Arduino/3226069_32904089417.html) diff --git a/en_build/html/_sources/product-documents/modules/m5stack_lan_module.rst.txt b/docs/product_documents/modules/module_lan.md similarity index 63% rename from en_build/html/_sources/product-documents/modules/m5stack_lan_module.rst.txt rename to docs/product_documents/modules/module_lan.md index ed9ececd..c8ee795e 100644 --- a/en_build/html/_sources/product-documents/modules/m5stack_lan_module.rst.txt +++ b/docs/product_documents/modules/module_lan.md @@ -1,8 +1,6 @@ -M5Stack LAN Module -================== +# M5Stack LAN Module -DESCRIPTION ------------ +## DESCRIPTION The M5Stack LAN Module is a ethernet module which with a I2C Grove port and 6 pins user ports. @@ -10,21 +8,18 @@ When the speed of our wireless network is so slow that M5Stack Core can not norm So we need a ethernet port board which is connected with M5Stack Core. This **LAN module** is that one who solves the awkward problem. -FEATURES --------- +## FEATURES - W5500 - High-performance ethernet chip - Less code and Hand-in-hand program experience -INCLUDES --------- +## INCLUDES - 1x M5Stack LAN Module(including USER-DEFINE 6 PIN and 1 Grove port) - 1x DIN-RAIL - 1x STICKER -Applications ------------- +## Applications - A mini portable Web server + TCP/UDP Server @@ -34,17 +29,16 @@ Applications + HTTP Clinet - SMTP/NTP Server -DOCUMENTS ---------- +## DOCUMENTS + +- [WebSite](https://m5stack.com) -- `WebSite `__ - Example + + [Arduino Example](https://github.com/m5stack/M5Stack/tree/master/examples/Modules/W5500) - + `Arduino Example `__ +- [LAN Info](https://www.u-blox.com/zh/product/neo-m8-series) (LAN) -- `LAN Info `__ (LAN) - GitHub + + [Arduino GitHub](https://github.com/m5stack/M5Stack) - + `Arduino GitHub `__ - -- `Purchase `_ +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-New-Arrival-LAN-Module-with-W5500-Chip-LanProto-Ethernet-convert-Network-Module-Microcontroller-for-Arduino/3226069_32904089417.html) diff --git a/en_build/html/_sources/product-documents/modules/m5stack_lora_module.rst.txt b/docs/product_documents/modules/module_lora.md similarity index 63% rename from en_build/html/_sources/product-documents/modules/m5stack_lora_module.rst.txt rename to docs/product_documents/modules/module_lora.md index f2a8b38f..2b369b03 100644 --- a/en_build/html/_sources/product-documents/modules/m5stack_lora_module.rst.txt +++ b/docs/product_documents/modules/module_lora.md @@ -1,8 +1,6 @@ -M5Stack LORA Module -=================== +# M5Stack LORA Module -DESCRIPTION ------------ +## DESCRIPTION The M5Stack LoRa Module is a module with small LoRa module named Ra-02. You can program it after connected to any series of M5Stack Core through @@ -13,8 +11,7 @@ communication, and compatible FSK remote modulation and demodulation quickly, to solve the traditional wireless design can not take into account the distance, anti-interference and power consumption -FEATURES --------- +## FEATURES - LoRa Module named RA-02 supply by Ai-Thinker - Supports FSK, GFSK, MSK, GMSK, LoRa ™ and OOK modulation modes @@ -22,44 +19,33 @@ FEATURES - Programmable bit rate up to 300Kbps - Build-in Antenna -INCLUDES --------- +## INCLUDES - 1x M5Stack LoRa Module -Applications ------------- +## Applications - Automatic meter reading - Home building automation - Remote irrigation system -DOCUMENTS ---------- +## DOCUMENTS -- `WebSite `__ -- `Example `__ -- `LoRa Info `__ (LoRa) -- `GitHub `__ +- [WebSite](https://m5stack.com) +- [Example](https://github.com/m5stack/M5Stack/tree/master/examples/Modules/Lora) +- [LoRa Info](http://wiki.ai-thinker.com/lora) (LoRa) +- [GitHub](https://github.com/m5stack/M5Stack) -- `Purchase `_ +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-Official-Stock-Offer-LoRa-Module-for-ESP32-DIY-Development-Kit-Wireless-433MHz-Built-in-Antenna/3226069_32839736315.html?spm=2114.12010615.8148356.22.25e96be7xE1y22.html) - -*NOTE* -~~~~~~ - -If your board LCD can't display or has some other problem, we suggest +?> **Note** If your board LCD can't display or has some other problem, we suggest you to add the two statements code followed by ``m5.begin();`` as shown below - -.. code:: cpp - +```cpp m5.begin(); pinMode(5,OUTPUT); digitalWrite(5,HIGH); - -Because GPIO5 who has connected NSS pin of LoRa module need be pull-up +``` +?> **Note** Because GPIO5 who has connected NSS pin of LoRa module need be pull-up at the moment your board(or system) power on to prevent system's LCD can't display. - - diff --git a/en/product-documents/bases/m5stack_plc.rst b/docs/product_documents/modules/module_plc.md similarity index 74% rename from en/product-documents/bases/m5stack_plc.rst rename to docs/product_documents/modules/module_plc.md index ea715464..223f452e 100644 --- a/en/product-documents/bases/m5stack_plc.rst +++ b/docs/product_documents/modules/module_plc.md @@ -1,8 +1,6 @@ -M5Stack PLC Module -================== +# M5Stack PLC Module -DESCRIPTION ------------ +## DESCRIPTION The M5Stack PLC Module is a prototye industrial board, including RS484 adapter and electricity meter module. @@ -10,16 +8,14 @@ adapter and electricity meter module. With DC9~24V power input, PLC-Proto motherboard reserved 6Pin or 4Pin relay output, digital input, communication interface etc. -FEATURES --------- +## FEATURES - Free DIY - Programmable Logic Controller - Individual package weight: 0.1kg (0.22lb.) - Package size: 5cm \* 5cm \* 5cm (1.97in \* 1.97in \* 1.97in) -INCLUDES --------- +## INCLUDES - 1x PLC-Proto Broad - 1x RS485 module @@ -32,20 +28,16 @@ INCLUDES - 7x Electrical Terminal - 1x Sticker -Applications ------------- +## Applications - Programmable Logic Controller - Programmable Motion Controller - Digital Operation Processor - Strong Electric Controller -DOCUMENTS ---------- - -- `WebSite `__ - -- GitHub - - + `Arduino GitHub `__ +## DOCUMENTS +- [WebSiteStart](https://m5stack.com) +- GitHub + - [Arduino](https://github.com/m5stack/M5Stack) + - [MicroPython]() diff --git a/en_build/html/_sources/product-documents/modules/m5stack_proto_module.rst.txt b/docs/product_documents/modules/module_proto.md similarity index 53% rename from en_build/html/_sources/product-documents/modules/m5stack_proto_module.rst.txt rename to docs/product_documents/modules/module_proto.md index 93e712d9..a821937f 100644 --- a/en_build/html/_sources/product-documents/modules/m5stack_proto_module.rst.txt +++ b/docs/product_documents/modules/module_proto.md @@ -1,60 +1,39 @@ -M5Stack PROTO Kit -================= +# M5Stack PROTO Kit -DESCRIPTION ------------ +## DESCRIPTION The M5Stack PROTO Module is a flexible blank circle with 30 pins which could connect with all series of M5Stack Core. You can create any circle that could controlled by any M5Stack Core on M5Stack PROTO Module as you like. -FEATURES --------- +## FEATURES - Flexible extended blank circle - Compatible with all series of M5Stack Core - A environment detector - DHT12 Module -Interface ---------- +## Interface -+-------------------+------------------+ | LINE0 | LINE1 | -+===================+==================+ +|:---:|:---:| | GND | IO35(ADC1) | -+-------------------+------------------+ | GND | IO36(ADC2) | -+-------------------+------------------+ | GND | EN | -+-------------------+------------------+ | IO23(MOSI) | IO25(DAC0) | -+-------------------+------------------+ | IO19(MISO) | IO26(DAC1) | -+-------------------+------------------+ | IO18(EXT\_SCK) | 3V3 | -+-------------------+------------------+ | IO3(U1\_RX) | IO1(U1\_TX) | -+-------------------+------------------+ | IO16(U1\_RX) | IO17(U2\_TX) | -+-------------------+------------------+ | IO21(I2C\_SDA) | IO22(I2C\_SCL) | -+-------------------+------------------+ | IO2 | IO5 | -+-------------------+------------------+ | IO12(I2S\_SCLK) | IO13 | -+-------------------+------------------+ | IO15(I2S\_OUT) | IO0 | -+-------------------+------------------+ | HPOWR | IO34 | -+-------------------+------------------+ | HPOWR | 5V | -+-------------------+------------------+ | HPOWR | BAT | -+-------------------+------------------+ -INCLUDES --------- +## INCLUDES - 1x M5Stack PROTO Module - 1x DHT12 Temperature & Humidity Sensor @@ -63,14 +42,12 @@ INCLUDES - 1x Packing Box - User Manual -DOCUMENTS ---------- +## DOCUMENTS -- `WebSite `__ +- [WebSite](https://m5stack.com) -- `Example `__ +- [Example](https://github.com/m5stack/M5Stack/tree/master/examples/Advanced/Blynk/Post-DHT12) -- `GitHub `__ - -- `Purchase `_ +- [GitHub](https://github.com/m5stack/M5Stack) +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-Official-Stock-Offer-Proto-Module-Proto-Board-with-Extension-Bus-Socket-for-Arduino-ESP32-Development/3226069_32843231933.html?spm=2114.12010610.8148356.4.7b26c4a1MZw8Xy.html) diff --git a/en/product-documents/modules/m5stack_sim800_module.rst b/docs/product_documents/modules/module_sim800.md similarity index 65% rename from en/product-documents/modules/m5stack_sim800_module.rst rename to docs/product_documents/modules/module_sim800.md index 706ccc72..cb64fc54 100644 --- a/en/product-documents/modules/m5stack_sim800_module.rst +++ b/docs/product_documents/modules/module_sim800.md @@ -1,8 +1,6 @@ -M5Stack SIM800L Module -====================== +# M5Stack SIM800L Module -DESCRIPTION ------------ +## DESCRIPTION The M5Stack SIM800L Module is a module with small SIM800L GSM/GPRS module. You can program it after connected to any series of M5Stack Core @@ -13,8 +11,7 @@ be connected with M5Stack Core via a serial port named USART2. Absolutely, you also can change the serial port number with jumper by your own. -FEATURES --------- +## FEATURES - SIM800L Module - Build-in Antenna @@ -26,26 +23,22 @@ FEATURES - transmit Voice, SMS and data information with low power consumption - Featur Bluetooth and Embedded AT -INCLUDES --------- +## INCLUDES - 1x M5Stack SIM800L Module -Applications ------------- +## Applications - Nitrogen dioxide alarm - Automatic Web Spider SMS-notifier - Remote meter reading system -DOCUMENTS ---------- +## DOCUMENTS -- `WebSite `__ -- `Example `__ -- `SIM800L Info `__ +- [WebSite](https://m5stack.com) +- [Example](https://github.com/m5stack/M5Stack/tree/master/examples) +- [SIM800L Info](http://simcomm2m.com/En/module/detail.aspx?id=138) (SIM800L) -- `GitHub `__ - -- `Purchase `_ +- [GitHub](https://github.com/m5stack/M5Stack) +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-Official-In-Stock-GSM-Module-SIM800L-Stackable-IoT-Development-Board-for-Arduino-ESP32-with-MIC/3226069_32843211923.html?spm=2114.12010615.8148356.20.25e96be7xE1y22.html) diff --git a/docs/product_documents/modules/module_stepmotor.md b/docs/product_documents/modules/module_stepmotor.md new file mode 100644 index 00000000..31a0f7ba --- /dev/null +++ b/docs/product_documents/modules/module_stepmotor.md @@ -0,0 +1,3 @@ +# Step Motor Module + +## (coming soom...) \ No newline at end of file diff --git a/en/product-documents/tools/m5stack_usb_downloader.md b/docs/product_documents/tools/tool_usb_downloader.md similarity index 50% rename from en/product-documents/tools/m5stack_usb_downloader.md rename to docs/product_documents/tools/tool_usb_downloader.md index 6b645845..2f9ac5a4 100644 --- a/en/product-documents/tools/m5stack_usb_downloader.md +++ b/docs/product_documents/tools/tool_usb_downloader.md @@ -1,33 +1,34 @@ -# M5Stack USB Downloader - -## DESCRIPTION - -1. USB to URAT Chip. CP2104 supports automatic firmware download of ESP32/ESP8266 -2. TXD light, RXD light, Power light and 6pin @ 2.54mm bus sockets. - -## PARAMETER - -PinNumber | PinName ----|--- -1 | GND -2 | GPIO0 -3 | EN -4 | TXD -5 | RXD -6 | 3.3V - -### NOTE - -There are two reserved pins(RTS, DTR) on M5Stack USB Downloader for other applications. - -## INCLUDES - -- 1x M5Stack USB Downloader - -## DOCUMENTS - -- [Schematic](https://github.com/watson8544/M5Stack-UserGuide/blob/master/TOOLS_DOCS/USBtool.pdf) -- [UserGuide](https://github.com/watson8544/M5Stack-UserGuide/blob/master/TOOLS_DOCS/M5Stack-USB-Downloader-UserGuide.md) - - - +# M5Stack USB Downloader + +## DESCRIPTION + +1. USB to URAT Chip. CP2104 supports automatic firmware download of ESP32/ESP8266 +2. TXD light, RXD light, Power light and 6pin @ 2.54mm bus sockets. + +## PARAMETER + +| PinNumber | PinName | +| :-------------------: |:------------------------: | +| 1 | GND | +| 2 | GPIO0 | +| 3 | EN | +| 4 | TXD | +| 5 | RXD | +| 6 | 3.3V | + +### NOTE + +There are two reserved pins(RTS, DTR) on M5Stack USB Downloader for other applications. + +## INCLUDES + +- 1x M5Stack USB Downloader + +## DOCUMENTS + +- [Schematic](https://github.com/watson8544/M5Stack-UserGuide/blob/master/TOOLS_DOCS/USBtool.pdf) +- [UserGuide](https://github.com/watson8544/M5Stack-UserGuide/blob/master/TOOLS_DOCS/M5Stack-USB-Downloader-UserGuide.md) + + \ No newline at end of file diff --git a/docs/product_documents/units/unit_396port.md b/docs/product_documents/units/unit_396port.md new file mode 100644 index 00000000..933852d2 --- /dev/null +++ b/docs/product_documents/units/unit_396port.md @@ -0,0 +1,18 @@ +# Unit 3.96port + +## DESCRIPTION + +The Unit 3.96port is a unit that aim to transfer GROVE interface to VH3.96-4Pin. + +## FEATURES + +- VH3.96 interface +- Two Lego installation holes + +## DOCUMENTS + + - [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
diff --git a/docs/product_documents/units/unit_adc.md b/docs/product_documents/units/unit_adc.md new file mode 100644 index 00000000..67f883e9 --- /dev/null +++ b/docs/product_documents/units/unit_adc.md @@ -0,0 +1,35 @@ +# Unit ADC + +## DESCRIPTION + +This is a unit having self-calibrating function and 16bit analog-to-digitial coverter. The resolution is double than insided ADC of esp32, that means you can detect smaller amplitude voltage. The unit communicates with M5Core with I2C. It has provided two modes: continuously conversion and single conversion. + +## FEATURES + +- Up to 16 bits of resolution and perform conversions at rates of 8, 16, 32, or 128 samples per second +- Programmable gain amplifier + - Gain = 1, 2, 4, OR 8 +- Detect 0~12V voltage Input +- Two Lego installation holes + +## APPLICATION + +- ECG signal acquisition +- Blood pressure measurement +- Dynamometer + +## DOCUMENTS + +- GitHub + + - [Arduino](https://github.com/m5stack/M5Stack) + +- Datasheet + + - [ADS1100](http://pdf1.alldatasheet.com/datasheet-pdf/view/619024/TI1/ADS1100.html) + +- [Purchase]() + +
+ +
\ No newline at end of file diff --git a/docs/product_documents/units/unit_adc_cn.md b/docs/product_documents/units/unit_adc_cn.md new file mode 100644 index 00000000..f2c3523c --- /dev/null +++ b/docs/product_documents/units/unit_adc_cn.md @@ -0,0 +1,34 @@ +# Unit ADC + +## 描述 DESCRIPTION + +这是带自校准功能的16位模拟数字转换unit,相比ESP32芯片自带的ADC(12位)功能分辨率高了不少,意味着你可以测量更小幅值的电压等模拟量,也就是能测量更细微一倍的模拟量,比如采集心电电压做心电监护项目、做血压监测项目、高精度电压监控项目等等。unit集成的ADC芯片通过I2C接口与M5的主控通讯,可以设置成单周期转换和连续转换方式。 + +## 特性 FEATURES + +- ADC有16位分辨率,可以设置每秒采样8、16、32、128次以进行A/D转换 +- ADC芯片内部可以产生高达8倍的放大,从而可以采集幅值更小的模拟信号 +- 能测量0~12V的电压输入 +- 乐高孔接口 + +## 应用 APPLICATION + +- 心电信号采集 +- 血压测量 +- 测力计 + +## 文档 DOCUMENTS + +- GitHub + + - [Arduino](https://github.com/m5stack/M5Stack) + +- Datasheet + + - [ADS1100](http://pdf1.alldatasheet.com/datasheet-pdf/view/619024/TI1/ADS1100.html) + +- [Purchase]() + +
+ +
diff --git a/docs/product_documents/units/unit_angle.md b/docs/product_documents/units/unit_angle.md new file mode 100644 index 00000000..319ee941 --- /dev/null +++ b/docs/product_documents/units/unit_angle.md @@ -0,0 +1,19 @@ +# Unit ANGLE + +## DESCRIPTION + +The Unit ANGLE is a potentiometer sensor that can detect rotary +angle. + +## FEATURES + +- Two Lego installation holes + +## DOCUMENTS + +- [GitHub](https://github.com/m5stack/M5GO) +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
\ No newline at end of file diff --git a/docs/product_documents/units/unit_button.md b/docs/product_documents/units/unit_button.md new file mode 100644 index 00000000..68990879 --- /dev/null +++ b/docs/product_documents/units/unit_button.md @@ -0,0 +1,19 @@ +# Unit BUTTON + +## DESCRIPTION + +The Unit BUTTON is a sigle-button unit that can be detected whether the button pressed or not + +## FEATURES + +- Two Lego installation holes +- GROVE Interface + +## DOCUMENTS + +- [GitHub](https://www.m5stack.com) +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-Official-Mini-Button-Unit-for-ESP32-Arduino-Micropython-Development-Kit-with-GROVE-GPIO-Port-Blockly/3226069_32921805637.html?spm=a2g1x.12024536.productList_2187621.8) + +
+ +
\ No newline at end of file diff --git a/docs/product_documents/units/unit_dac.md b/docs/product_documents/units/unit_dac.md new file mode 100644 index 00000000..a0ba557f --- /dev/null +++ b/docs/product_documents/units/unit_dac.md @@ -0,0 +1,32 @@ +# Unit ADC + +## DESCRIPTION + +This is a unit can convert digital signal to analog signal like voltage waveform, audio waveform and so on. It integrates a 12-bit high resolution DAC chip named MCP4725 which integrates a on-board non-volatile memory (EEPROM). The unit comunicates with M5Core with I2C. The DAC input and configuration data can be programmed to the EEPROM. + +## FEATURES + +- Up to 12 bits of resolution +- Output 0~3.3V voltage +- Two Lego installation holes + +## APPLICATION + +- MP3 Audio Player +- mini Oscilloscope + +## DOCUMENTS + +- GitHub + + - [Arduino](https://github.com/m5stack/M5Stack) + +- Datasheet + + - [MCP4725](http://pdf1.alldatasheet.com/datasheet-pdf/view/233449/MICROCHIP/MCP4725.html) + +- [Purchase]() + +
+ +
diff --git a/docs/product_documents/units/unit_dac_cn.md b/docs/product_documents/units/unit_dac_cn.md new file mode 100644 index 00000000..498dc999 --- /dev/null +++ b/docs/product_documents/units/unit_dac_cn.md @@ -0,0 +1,31 @@ +# Unit ADC + +## 描述 DESCRIPTION + +这是带EEPROM存储的12位数字模拟转换unit,相比ESP32芯片自带的DAC(8位)功能分辨率高了不少,可以将输入的数字信号转换成模拟信号如电压、声音等输出。unit集成的DAC芯片是单通道采集,通过I2C接口与M5的主控通讯,你还可以将输入端的数字量和配置数据都保存到EEPROM中,这样在上电之后,能够立马将本来保存的数字量转换成模拟信号输出。 + +## 特性 FEATURES + +- DAC有12位分辨率 +- 乐高孔接口 + +## 应用 APPLICATION + +- MP3音频播放器 +- mini示波器 + +## 文档 DOCUMENTS + +- GitHub + + - [Arduino](https://github.com/m5stack/M5Stack) + +- Datasheet + + - [MCP4725](http://pdf1.alldatasheet.com/datasheet-pdf/view/233449/MICROCHIP/MCP4725.html) + +- [Purchase]() + +
+ +
diff --git a/docs/product_documents/units/unit_dual_button.md b/docs/product_documents/units/unit_dual_button.md new file mode 100644 index 00000000..4cc743d3 --- /dev/null +++ b/docs/product_documents/units/unit_dual_button.md @@ -0,0 +1,19 @@ +# Unit Dual BUTTON + +## DESCRIPTION + +This Unit is a dual-button unit that can be detected whether a single button pressed or two buttons pressed + +## FEATURES + +- Two Lego installation holes +- GROVE Interface + +## DOCUMENTS + +- [GitHub](https://www.m5stack.com) +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-Official-New-Mini-Dual-Button-Unit-Mini-with-GROVE-Port-Cable-Connector-Compatible-with-FIRE/3226069_32923126250.html?spm=a2g1x.12024536.productList_2187621.9) + +
+ +
\ No newline at end of file diff --git a/en_build/html/_sources/product-documents/units/m5go_unit_env.rst.txt b/docs/product_documents/units/unit_env.md similarity index 66% rename from en_build/html/_sources/product-documents/units/m5go_unit_env.rst.txt rename to docs/product_documents/units/unit_env.md index a09b340b..3fde9fda 100644 --- a/en_build/html/_sources/product-documents/units/m5go_unit_env.rst.txt +++ b/docs/product_documents/units/unit_env.md @@ -1,15 +1,12 @@ -Unit ENV -=========== +# Unit ENV -DESCRIPTION ------------ +## DESCRIPTION The Unit ENV is a environment sensor for M5GO that can easily detect temperature, humidity and air pressure with M5GO Core, including temperature and humidity sensor and absolute barometric pressure sensor. -FEATURES --------- +## FEATURES - Temperature: - measuring range: 20 ~ 60℃ @@ -22,7 +19,10 @@ FEATURES - resolution: ±1hPa - Two Lego installation holes -DOCUMENTS ---------- +## DOCUMENTS -- `Purchase `_ +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
\ No newline at end of file diff --git a/en/product-documents/units/m5go_unit_hub.rst b/docs/product_documents/units/unit_hub.md similarity index 53% rename from en/product-documents/units/m5go_unit_hub.rst rename to docs/product_documents/units/unit_hub.md index 4dbafde9..1941d6e9 100644 --- a/en/product-documents/units/m5go_unit_hub.rst +++ b/docs/product_documents/units/unit_hub.md @@ -1,20 +1,20 @@ -Unit HUB -======== +# Unit HUB -DESCRIPTION ------------ +## DESCRIPTION The Unit HUB is a module for M5GO to expand GROVE port added three GROVE ports for user. So you can control 3 GROVE devices with only one M5GO Core at a time. -FEATURES --------- +## FEATURES - Instantly Add Three 4-Pins-GROVE ports to Any Compatible Device - Two Lego installation holes -DOCUMENTS ---------- +## DOCUMENTS -- `Purchase `_ +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
\ No newline at end of file diff --git a/en_build/html/_sources/product-documents/units/m5go_unit_ir.rst.txt b/docs/product_documents/units/unit_ir.md similarity index 70% rename from en_build/html/_sources/product-documents/units/m5go_unit_ir.rst.txt rename to docs/product_documents/units/unit_ir.md index b8fd1bc0..730f5a0b 100644 --- a/en_build/html/_sources/product-documents/units/m5go_unit_ir.rst.txt +++ b/docs/product_documents/units/unit_ir.md @@ -1,8 +1,6 @@ -Unit IR -======= +# Unit IR -DESCRIPTION ------------ +## DESCRIPTION The Unit IR is a IR infrared obstacle avoidance sensor. It can be widely used in robot obstacle avoidance, obstacle avoidance car, line @@ -14,15 +12,17 @@ emit a certain frequency, when detecting direction meet with obstacles comparator circuit processing, green indicator will light up, at the same time signal output interface to output digital signal. -FEATURES --------- +## FEATURES - A pair of infrared transmitting and receiving tube - Detects the distance 2 ~ 5cm - Two Lego installation holes -DOCUMENTS ---------- +## DOCUMENTS -- `GitHub `__ -- `Purchase `_ +- [GitHub](https://github.com/m5stack/M5GO) +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
\ No newline at end of file diff --git a/docs/product_documents/units/unit_joystick.md b/docs/product_documents/units/unit_joystick.md new file mode 100644 index 00000000..f09d9618 --- /dev/null +++ b/docs/product_documents/units/unit_joystick.md @@ -0,0 +1,27 @@ +# Unit JOYSTICK + +## DESCRIPTION + +This Unit is a joystick unit the same as game controller button that can be detected the X-Y axis offset and whether the joystick be pressed + +## FEATURES + +- Two Lego installation holes +- GROVE Interface + +## DOCUMENTS + +- [GitHub](https://github.com/m5stack/M5Stack/tree/master/examples/Unit/Joystick) +- [Purchase](https://www.aliexpress.com/store/product/M5Stack-Official-New-Joystick-Unit-MEGA328P-I2C-Grove-Connector-Compatible-X-Y-Axis-Button-for-ESP32/3226069_32921785624.html?spm=a2g1x.12024536.productList_2187621.10) + +
+ +
+ +
+ +
+ +
+ +
\ No newline at end of file diff --git a/en/product-documents/units/m5go_unit_light.rst b/docs/product_documents/units/unit_light.md similarity index 54% rename from en/product-documents/units/m5go_unit_light.rst rename to docs/product_documents/units/unit_light.md index 6bf79fd3..24867f6f 100644 --- a/en/product-documents/units/m5go_unit_light.rst +++ b/docs/product_documents/units/unit_light.md @@ -1,28 +1,26 @@ -Unit light -============= +# Unit light -DESCRIPTION ------------ +## DESCRIPTION The Unit light is a light sensor unit with an adjustable resistor that can detect the environmental light intensity. You can read analog signal(environmental light intensity) staright or get a digital signal(0/1) that means whether the light exists or not. -FEATURES --------- +## FEATURES - Adjustable threshold, including 10K adjustable resistor - Analog & Digital output - Grove interface - Two Lego installation holes -DOCUMENTS ---------- +## DOCUMENTS - GitHub - + `Arduino GitHub `__ + - [Arduino GitHub](https://github.com/m5stack/M5Stack/tree/master/examples/Unit/Light) -- `Purchase `_ +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) -.. image:: ../../../_static/product_pics/units/M5GO_Unit_light.png +
+ +
diff --git a/docs/product_documents/units/unit_makey.md b/docs/product_documents/units/unit_makey.md new file mode 100644 index 00000000..c4db25be --- /dev/null +++ b/docs/product_documents/units/unit_makey.md @@ -0,0 +1,38 @@ +# Unit makey + +## DESCRIPTION + +The Unit makey is a makey unit with 16 touchable pins.The Unit makey is based on Arduino Uno Mega328p chip.It communicates with M5Stack Core via GROVE(I2C).It's I2C address is 0x51. + + + +## FEATURES + +- Arduino Mega328p Controller +- 16 Keys Fruit Piano(PD0-7 & PB0-5), 1 NeoPixel pin(PC2) and 1 Buzzer pin(PC3) +- Buzzer inside +- GROVE interface +- Two Lego installation holes + +## APPLICATION + +- Makey Application +- RGB Application with Adafruit Library + +## DOCUMENTS + +- [GitHub](https://github.com/m5stack/M5Stack/tree/master/examples/Unit/Makey) + +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
+ +
+ +
+ +
+ +
\ No newline at end of file diff --git a/en_build/html/_sources/product-documents/units/m5go_unit_earth.rst.txt b/docs/product_documents/units/unit_moisture.md similarity index 65% rename from en_build/html/_sources/product-documents/units/m5go_unit_earth.rst.txt rename to docs/product_documents/units/unit_moisture.md index cb9782bc..1f0ec320 100644 --- a/en_build/html/_sources/product-documents/units/m5go_unit_earth.rst.txt +++ b/docs/product_documents/units/unit_moisture.md @@ -1,27 +1,25 @@ -Unit moisture -============== +# Unit moisture -DESCRIPTION ------------ +## DESCRIPTION The Unit moisture is a moisture detective unit for measuring the moisture in soil. The soil moisture sensor is pretty straight forward to use. The two large exp osed pads function as probes for the sensor, together acting as a variable resistor. The more water that is in the soil means the better the conductivity between the pads will be and will result in a lower resistance, and a higher SIG out. You can read the moisture in soil staright or get a digital signal(0/1) that means the high(or low) humidity. -FEATURES --------- +## FEATURES - Adjustable threshold, including 10K adjustable resistor - Analog & Digital output - Grove interface - Two Lego installation holes -DOCUMENTS ---------- +## DOCUMENTS - GitHub - + `Arduino GitHub `__ + - [Arduino](https://github.com/m5stack/M5Stack/tree/master/examples/Unit/Earth) -- `Purchase `_ +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) -.. image:: ../../../_static/product_pics/units/M5GO_Unit_moisture.jpg +
+ +
diff --git a/docs/product_documents/units/unit_ncir.md b/docs/product_documents/units/unit_ncir.md new file mode 100644 index 00000000..40feeee9 --- /dev/null +++ b/docs/product_documents/units/unit_ncir.md @@ -0,0 +1,33 @@ +# Unit + +## DESCRIPTION + +This is a unit can detect distance using a newest "Time-to-Flight" sensor using laser light. It is higher precision than most distance sensors. he unit comunicates with M5Core with I2C. + +## FEATURES + +- High precision +- Measure absolute distances up to 2m +- Two Lego installation holes + +## APPLICATION + +- 1D gesture recognition + +## DOCUMENTS + +- GitHub + + - [Arduino](https://github.com/m5stack/M5Stack) + +- Datasheet + + - [VL53L0X](https://pdf1.alldatasheet.com/datasheet-pdf/view/948120/STMICROELECTRONICS/VL53L0X.html) + +- [Schematic](https://github.com/m5stack/M5Stack) + +- [Purchase]() + +
+ +
diff --git a/docs/product_documents/units/unit_pir.md b/docs/product_documents/units/unit_pir.md new file mode 100644 index 00000000..6c595c72 --- /dev/null +++ b/docs/product_documents/units/unit_pir.md @@ -0,0 +1,20 @@ +# Unit PIR + +## DESCRIPTION + +The Unit PIR is a human infrared sensor for M5GO that can easily detect +whether someone appears in front of it with M5GO Core. + +## FEATURES + +- Detects the distance 150cm +- Two Lego installation holes + +## DOCUMENTS + +- [GitHub](https://github.com/m5stack/M5GO) +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
\ No newline at end of file diff --git a/docs/product_documents/units/unit_proto.md b/docs/product_documents/units/unit_proto.md new file mode 100644 index 00000000..ee022a79 --- /dev/null +++ b/docs/product_documents/units/unit_proto.md @@ -0,0 +1,22 @@ +# Unit proto + +## DESCRIPTION + +The M5Stack proto unit is a flexible blank circle with 100mil pitch of holes. You can create any circle +that could controlled by M5GO Core as you like. + +## FEATURES + +- Flexible extended blank circle +- 70 holes(pitch of holes: 100mil) +- GROVE interface +- Two Lego installation holes + +## DOCUMENTS + +- [GitHub](https://github.com/m5stack/M5GO) +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
diff --git a/en_build/html/_sources/product-documents/units/m5go_unit_relay.rst.txt b/docs/product_documents/units/unit_relay.md similarity index 62% rename from en_build/html/_sources/product-documents/units/m5go_unit_relay.rst.txt rename to docs/product_documents/units/unit_relay.md index bc9ee19d..bdafa77e 100644 --- a/en_build/html/_sources/product-documents/units/m5go_unit_relay.rst.txt +++ b/docs/product_documents/units/unit_relay.md @@ -1,33 +1,30 @@ -Unit relay -=========== +# Unit relay -DESCRIPTION ------------ +## DESCRIPTION The Unit relay is a unit that allows you to control large power loads with a light-current, safe, reliable power control system. the large power loads you can safely control is up to 24 VDC or 120 VAC. Only a low electrial level is sent to this unit, the relay will be close and the large power loads you want to control will be working. -FEATURES --------- +## FEATURES - A single input - Up to 3A @ 24 VDC or 120 VAC - GROVE interface - Two Lego installation holes -APPLICATION ------------- +## APPLICATION - Be perfect for large inductive loads(like DC motors electrocircuit, intelligent interpolation...) - Control a standard wall outlet device -DOCUMENTS ---------- +## DOCUMENTS - GitHub - + `Arduino GitHub `__ + - [Arduino](https://github.com/m5stack/M5Stack/tree/master/examples/Unit/Relay) -- `Purchase `_ +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) -.. image:: ../../../_static/product_pics/units/M5GO_Unit_relay.png +
+ +
diff --git a/docs/product_documents/units/unit_rgb.md b/docs/product_documents/units/unit_rgb.md new file mode 100644 index 00000000..c0a892b1 --- /dev/null +++ b/docs/product_documents/units/unit_rgb.md @@ -0,0 +1,19 @@ +# Unit RGB + +## DESCRIPTION + +The Unit RGB is a sensor including three RGB LED lights and two GROVE +ports.You can display specified color using M5GO Core through Blockly, +Arduino or MicroPython. + +## FEATURES + +- Two Lego installation holes + +## DOCUMENTS + +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) + +
+ +
\ No newline at end of file diff --git a/en/product-documents/units/m5go_unit_thermal.rst b/docs/product_documents/units/unit_thermal.md similarity index 55% rename from en/product-documents/units/m5go_unit_thermal.rst rename to docs/product_documents/units/unit_thermal.md index 3f71ff57..d2e9ed6c 100644 --- a/en/product-documents/units/m5go_unit_thermal.rst +++ b/docs/product_documents/units/unit_thermal.md @@ -1,47 +1,40 @@ -Unit thermal -============= +# Unit thermal -DESCRIPTION ------------ +## DESCRIPTION The Unit thermal is a thermal camera module contains thermopile sensors named MLX90640. the MLX90640 contains a 32x64 piexls IR array. It communicates with M5GO Core via GROVE which actually is a I2C interfacel. As the images show you can detect surface temperatures from many feet away with an accuracy of ±1.5°C (best case). After burn the firmware of the module's demostatrion to M5GO Core via `M5Burner`, the module will be running. Then you can program it via Arduino IDE. -FEATURES --------- +## FEATURES - 32x24 piexls - Target temperature -40°C ÷ 300°C - GROVE interface - Two Lego installation holes -APPLICATION ------------- +## APPLICATION - High precision non-contact temperature measurements - Intrusion / Movement detection - Visual IR thermometers - Temperature sensing element for intelligent building air conditioning -DOCUMENTS ---------- +## DOCUMENTS - GitHub - + `Arduino GitHub `__ + - [Arduino](https://github.com/m5stack/M5Stack/tree/master/examples/Modules/MLX90640) - + `MLX90640 Drive GitHub `__ + - [MLX90640 Drive](https://github.com/melexis/mlx90640-library) - Datasheet - + `MLX90640 `__ + - [MLX90640](https://www.melexis.com/-/media/files/documents/datasheets/mlx90640-datasheet-melexis.pdf) -- `QuickStart`_ +- [Purchase](https://www.aliexpress.com/store/3226069?spm=2114.search0104.3.5.66051a4dlpB2ti) -.. _QuickStart: ../../get-started/M5GO/get_started_M5GO_ThermalCam.html - -- `Purchase `_ - -.. image:: ../../../_static/product_pics/units/M5GO_Unit_thermal.png +
+ +
diff --git a/docs/product_documents/units/unit_tof.md b/docs/product_documents/units/unit_tof.md new file mode 100644 index 00000000..8084e156 --- /dev/null +++ b/docs/product_documents/units/unit_tof.md @@ -0,0 +1,33 @@ +# Unit ToF + +## DESCRIPTION + +This is a unit can detect distance using a newest "Time-to-Flight" sensor using laser light. It is higher precision than most distance sensors. he unit comunicates with M5Core with I2C. + +## FEATURES + +- High precision +- Measure absolute distances up to 2m +- Two Lego installation holes + +## APPLICATION + +- 1D gesture recognition + +## DOCUMENTS + +- GitHub + + - [Arduino](https://github.com/m5stack/M5Stack) + +- Datasheet + + - [VL53L0X](https://pdf1.alldatasheet.com/datasheet-pdf/view/948120/STMICROELECTRONICS/VL53L0X.html) + +- [Schematic](https://github.com/m5stack/M5Stack) + +- [Purchase]() + +
+ +
diff --git a/docs/quick_start.md b/docs/quick_start.md new file mode 100644 index 00000000..dc1bedfa --- /dev/null +++ b/docs/quick_start.md @@ -0,0 +1,51 @@ +# Quick Start + +**This document is intended to help you set up the software environment(Arudino, MicroPython) for development of M5Stack. Through a simple example we would like to illustrate how to develop M5Stack boards, firmware(Arduino) or source files(MicroPython) download to M5Stack boards.** + +## Introduction + +**M5 stack is a modular stackable development device. The M stands for Modular and 5 stands for the the units compact 5 x 5 cm size.** + + +## What You Need + +To develop applications for M5Stack Core you need: + +* **PC** loaded with either Windows, Linux or Mac operating system +* a **Type-C** cable + +Before setting development environment, the step below you need to follow: + +1. Establish **serial** connection + + [How to Establish serial connection](related_documents\establish_serial_connection) + +## Your Boards/Modules + +!> **Notice** Make sure you have installed USB driver so that your board can establish serial connection with PC. If not, please view this article [How to Establish serial connection](related_documents\establish_serial_connection) for connection. + +At the first time, you need to burn the specific firmware file(.bin) to your board following this article [How to burn firmware](related_documents\how_to_connect_wifi_using_core) befor developing it. + +If you have one of ESP32 development boards listed below, click the corresponding one to start your development. + + | | +---|---|--- +[M5StackCore](quick_start/m5core/m5stack_core_quick_start) | [M5Camera](quick_start/m5camera/m5camera_quick_start) | [M5BALA](quick_start/bala/bala_quick_start) + + + +## Practice + +**For being familiar with the programming mode you lik, We suggest you following the corresponding option to do more practices.** + + + | | +---|---|--- +[Arduino](practice\practice_arduino) | [M5Flow-Blockly](practice\practice_blockly) | [M5Flow-MicroPython](practice\practice_micropython) + +## Related Documents + + - [establish_serial_connection](related_documents/establish_serial_connection) + - [how_to_burn_firmware_en](related_documents/how_to_burn_firmware_en) + - [how_to_connect_wifi_using_core](related_documents/how_to_connect_wifi_using_core) + - [upgrade_m5stack_lib](related_documents/upgrade_m5stack_lib) \ No newline at end of file diff --git a/docs/quick_start/bala/bala_quick_start.md b/docs/quick_start/bala/bala_quick_start.md new file mode 100644 index 00000000..ba578d81 --- /dev/null +++ b/docs/quick_start/bala/bala_quick_start.md @@ -0,0 +1,3 @@ +# BALA Get Started + +## (coming soon...) \ No newline at end of file diff --git a/docs/quick_start/m5camera/m5camera_quick_start.md b/docs/quick_start/m5camera/m5camera_quick_start.md new file mode 100644 index 00000000..69ed048f --- /dev/null +++ b/docs/quick_start/m5camera/m5camera_quick_start.md @@ -0,0 +1,3 @@ +# M5Camera Get Started + +## (coming soon...) \ No newline at end of file diff --git a/docs/quick_start/m5core/m5stack_core_get_started_Arduino_MacOS.md b/docs/quick_start/m5core/m5stack_core_get_started_Arduino_MacOS.md new file mode 100644 index 00000000..3c692284 --- /dev/null +++ b/docs/quick_start/m5core/m5stack_core_get_started_Arduino_MacOS.md @@ -0,0 +1,133 @@ +# M5Core Quick Start(macOS, Arudino) + +?> **Tip** If your OS is Windows, please click [here](quick_start/m5core/m5stack_core_get_started_Arduino_Windows). + +### CONTENT + +1. [Setting Environment](#setting-environment) + + - [1. Install Arduino IDE](#1-install-arduino-ide) + + - [2. ESP32 Board Support](#2-esp32-board-support) + + - [3. Install M5Stack Lib](#3-install-m5stack-lib) + +2. [Example](#example) + +### Setting Environment + +!> **Note** Before setting the development environment, we suggest you confirm whether the USB driver has installed. If not, please visit this link [establish serial connection](../related_documents/establish_serial_connection). + +#### 1. Install `Arduino IDE` + +First, if Arudino IDE is not installed, install it. It's *download address* is https://www.arduino.cc/en/Main/Software + +
+ +
+ +#### 2. ESP32 Board Support + +Open Terminal and execute the following command (copy->paste and hit enter): + +``` + +mkdir -p ~/Documents/Arduino/hardware/espressif && \ +cd ~/Documents/Arduino/hardware/espressif && \ +git clone https://github.com/espressif/arduino-esp32.git esp32 && \ +cd esp32 && \ +git submodule update --init --recursive && \ +cd tools && \ +python get.py + +``` + +Where ~/Documents/Arduino represents your sketch book location as per "Arduino" > "Preferences" > "Sketchbook location" (in the IDE once started). Adjust the command above accordingly if necessary! + +Where ~/Documents/Arduino represents your default sketch book location. If you encounter any problems it could be that your Arduino sketchbook folder is in a different location. This can be found by running arduino and navigating through the menu to "Arduino" > "Preferences" > "Sketchbook location". Adjust the command above accordingly if necessary! + +?> **Tip** If you get the error below: `xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),` +`missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun`, install the command line dev tools by typing `xcode-select --install` into the terminal and hit enter. once installed try the command above again and restart the Arduino IDE. + +?> **Tip** If you get the error: `IOError: [Errno socket error] [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol` `version (_ssl.c:590) when running python get.py`, try `python3` instead of `python` and restart the Arduino IDE. + + + +#### 3. Install M5Stack Lib + +Start up Arduino IDE, then Select `Sketch`->`Include Library`->`Manage Libraries...` + +Type `M5Stack` into the search box, search it and install. + +
+ +
+ + +
+ +
+ + + +### Example + +The USB cable connects to M5Stack Core, then select your serial port which is connected M5Stack Core. +Select a demo example, compile and upload + +#### 1. Select your board and the serial port + +Start up Arduino IDE, and click `Tools -> Boards -> M5Stack-Core-ESP32` to select your board + +
+ +
+ + +Click `Tools -> Ports ->` to select the serial port which is connected with M5Stack Core + +
+ +
+ + +### 2. Select an example + +Click `File-> Examples`. Here are some test programs in `M5Stack->` + +Try to open a sketch called `HelloWorld` inside Basics. + + +
+ +
+ + + +Compile it and upload, the M5Stack screen will show "Hello World!" + +
+ +
+ + + +### Note + +Although most versions of MacOS have no problem with detecting the COM port, on some newer versions of High Sierra sometimes Slab\_USBtoUART does not appear. If this is the case, after you connect the M5 open `security and privacy` in the system preferences and set it to `permit`. + +
+ +
+ + +
+ +
+ + +
+ +
+ +?> **Tip** **If you want to read more the permission about the CP2104 USB driver, visit the below link please.** https://developer.apple.com/library/archive/technotes/tn2459/\_index.html \ No newline at end of file diff --git a/en/get-started/m5stack_core_get_started_Arduino_Windows.md b/docs/quick_start/m5core/m5stack_core_get_started_Arduino_Windows.md similarity index 50% rename from en/get-started/m5stack_core_get_started_Arduino_Windows.md rename to docs/quick_start/m5core/m5stack_core_get_started_Arduino_Windows.md index cd2b65b4..b8bac06e 100644 --- a/en/get-started/m5stack_core_get_started_Arduino_Windows.md +++ b/docs/quick_start/m5core/m5stack_core_get_started_Arduino_Windows.md @@ -1,4 +1,6 @@ -# M5Stack-Core Get Started(Windows, Arudino) +# M5Core Quick Start(Windows, Arudino) + +?> **Tip** If your OS is Windows, please click [here](quick_start/m5core/m5stack_core_get_started_Arduino_MacOS). ### CONTENT @@ -14,12 +16,11 @@ 4. [Example](#example) -***Note:*** -*If you want to upgrade the M5Stack Lib, please view this article [upgrade M5Stack Lib](www.m5stack.com).* +!> **Note** *If you want to upgrade the M5Stack Lib, please view this article [upgrade M5Stack Lib](www.m5stack.com).* ### Setting Environment -*Before setting the development environment, we suggest you confirm whether the USB driver has installed. If not, please view this article [establish serial connection](https://github.com/m5stack/m5stack-documentation/blob/master/en/get-started/establish_serial_connection.md).* +*Before setting the development environment, we suggest you confirm whether the USB driver has installed. If not, please view this article [establish serial connection](../related_documents/establish_serial_connection).* #### 1. Install `Git` If you has installed `Git`, please following next setp 2 straight.Otherwise, download the client of [Git](https://git-scm.com/download/win) and install it. @@ -29,31 +30,43 @@ If you has installed `Git`, please following next setp 2 straight.Otherwise, dow *download address* https://www.arduino.cc/en/Main/Software -![image](../../_static/getting_started_pics/m5stack_core/arduino_cc_package.png) +
+ +
Double click to install Arduino IDE -![image](../../_static/getting_started_pics/m5stack_core/select_arduino_install_path.png) +
+ +
-![image](../../_static/getting_started_pics/m5stack_core/install_arduino_2.png) +
+ +
#### 3. Download Arduino-ESP32 Support Download the batch file [download_arduino_esp32_support.bat](https://github.com/m5stack/m5stack-documentation/blob/master/en/get-started/download_arduino_esp32_support.bat), and execte it as Administrator. -![image](../../_static/getting_started_pics/m5stack_core/execute_batch_file.png) +
+ +
Then this a new window will appear as shown below. Please waiting for cloning... -![image](../../_static/getting_started_pics/m5stack_core/execute_batch_file_for_downloading_arduino_esp32.png) +
+ +
When completed, it will show below. -![image](../../_static/getting_started_pics/m5stack_core/download_arduino_esp32_completed.png) +
+ +
#### 4. Download the M5Stack Lib @@ -61,35 +74,47 @@ When completed, it will show below. Open Arduino IDE, then Select `Sketch`->`Include Library`->`Manage Libraries...` Search `M5Stack` and install it -![image](../../_static/getting_started_pics/m5stack_core/install_m5stack_lib_01.png) +
+ +
-![image](../../_static/getting_started_pics/m5stack_core/install_m5stack_lib_02.png) +
+ +
-***Note:*** -*As shown below, it means you need update* +!> **Note:** *As shown below, it means you need update* -![image](../../_static/getting_started_pics/m5stack_core/update_m5stack_lib.png) +
+ +
### Example The USB cable connects to M5Stack Core, then select your serial port which is connected M5Stack Core. + Select a demo example, compile and upload #### 1. Execute a example likes `FactoryTest.ino` Select your board name, baudrate, the specified serial port: M5Stack-Core-ESP32, 921600, COM4(Now, my serial port which is connected with PC is `COM4`) -![image](../../_static/getting_started_pics/m5stack_core/select_board_baudrate_serial_port.png) +
+ +
Then select an example likes `FactoryTest.ino` -![image](../../_static/getting_started_pics/m5stack_core/select_an_example.png) +
+ +
Upload it -![image](../../_static/getting_started_pics/m5stack_core/arduino_upload.png) +
+ +
#### 2. New a M5Stack program diff --git a/docs/quick_start/m5core/m5stack_core_get_started_MicroPython.md b/docs/quick_start/m5core/m5stack_core_get_started_MicroPython.md new file mode 100644 index 00000000..914b534b --- /dev/null +++ b/docs/quick_start/m5core/m5stack_core_get_started_MicroPython.md @@ -0,0 +1,113 @@ +# M5Flow Quick Start(Blockly/MicroPython) + +**This article will guide you for getting started with Blockly(or MicroPython) through [UIFlow](flow.m5stack.com). + +?> **Note** If your M5Stack Core was not burnt with a firmware named `M5Flow` in advance, please visit this article `How to burn firmware` for burnning)** + +**First we need to know how to upload code onto the M5. After powering on Core and pressing the red button on the left hand side of the M5,you will be greeted by this screen.** + +
+ +
+ +**After pressing the upload button you will arrive at a screen with a QR code which you scan with your phone or tablet to start programming on your mobile device. If you want to program the M5 from your computer, enter the url shown at the top of the screen `flow.m5stack.com`** + +
+ +
+ +*After a few seconds if nothing is pressed the M5 will automatically run the code that was previously uploaded. If we want to upload new code we have to make sure we press the A button which is the upload button on this menu before the M5 boots the code in it’s memory.* + +?> **Note** But if it's first time to use M5Stack Core or you want to change the networkable AP that means the Core can't access [flow.m5stack.com](flow.m5stack.com), you need visit this article for setting wifi [How to connect wifi using Core](../related_documents/how_to_connect_wifi_using_core). + + +### Program with Core + +Visit the [WebIDE](flow.m5stack.com), it will show as following figure. + +
+ +
+ +Whenever we want to upload code to the M5 from UI flow we need to make sure the device is paired. + +So press the little gear in the top right corner of the screen and enter the `APIKEY` which shows on the screen of M5(Now, my APIKEY is `9C6469`) and click `SAVE`. + +
+ +
+ +
+ +
+ +Then M5Flow will connect with this Core. + +At the moment, you can draw a UI or program it through Blockly(or Python) as shown below. + +**1. Draw a UI** + +Drag 4 kinds of elements into `M5Stack Core` UI and click `Run` buttom on M5UI.Flow + +
+ +
+ +
+ +
+ +**2. Program with Blockly** + +Drag a block named `Set emoji map in0` from `Emoji` class and click `Run` buttom on M5UI.Flow + +
+ +
+ +
+ +
+ +**3. Program with MicroPython** + + + +### Play a song now + +Now, let's make a music player and play a song in a few minutes using M5Stack Core. + +Drag a loop, music and timer block into the coding area from the components section. + +
+ +
+ +
+ +
+ +
+ +
+ +Then set parameters of `music block` and `timer block` as shown belown. + +
+ +
+ +Now, run it and enjoy your musical work! + +?> **Note** Also, here some simple pratices and a workshop for you being familiar with M5. +- Blockly + +https://m5stack.readthedocs.io/en/latest/get-started/practices_blockly.html + +- MicroPython + +https://m5stack.readthedocs.io/en/latest/get-started/practices_micropython.html + +- WorkShop + +Contact us with [Support Email](support@m5stack.com) \ No newline at end of file diff --git a/docs/quick_start/m5core/m5stack_core_quick_start.md b/docs/quick_start/m5core/m5stack_core_quick_start.md new file mode 100644 index 00000000..b77a15bc --- /dev/null +++ b/docs/quick_start/m5core/m5stack_core_quick_start.md @@ -0,0 +1,7 @@ +# M5Stack Core Get Started + +## Pick up your programming mode below for getting started + + | +---|--- +[Arduino](quick_start/m5core/m5stack_core_get_started_Arduino_MacOS) | [Blockly/MicroPython](quick_start/m5core/m5stack_core_get_started_MicroPython) diff --git a/docs/related_documents/establish_serial_connection.md b/docs/related_documents/establish_serial_connection.md new file mode 100644 index 00000000..857fdb01 --- /dev/null +++ b/docs/related_documents/establish_serial_connection.md @@ -0,0 +1,97 @@ +# Establish Serial Connection + +**This section provides guidance how to establish serial connection between your board and PC.** + +## For MacOS + +### 1. Install the USB driver + +**[Download the SiLabs CP2104 Driver](https://www.silabs.com/documents/public/software/Mac_OSX_VCP_Driver.zip)** + +**As the disk image SiLabsUSBDriverDisk.dmg is downloaded, mount it. Proceed according to the instructions OK.** + +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ +### 2. Check port on MacOS + +**To check the device name for the serial port of your your board board (or external converter dongle), open terminal and run this command two times, first with the board / dongle unplugged, then with plugged in. The port which appears the second time is the one you need:** + +**MacOS** + + ls /dev/cu.* + + + +## For Windows + +### 1.Install the USB driver + +**Download the [SiLabs CP2104 Driver](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)** + +**Choice the version of USB driver according to your windows version(Windows7/8/10).** + +
+ +
+ +**Choice the right version installer(x64/x86), and install it.** + +
+ +
+ +
+ +
+ +
+ +
+ +### 2. Check port on Windows + +**Check the list of identified COM ports in the Windows Device Manager. Disconnect your board and connect it back, to verify which port disappears from the list and then shows back again.** + +**Figures below show serial port for M5Stack Core board** + +
+ +
diff --git a/docs/related_documents/how_to_burn_firmware_en.md b/docs/related_documents/how_to_burn_firmware_en.md new file mode 100644 index 00000000..7b9e6a54 --- /dev/null +++ b/docs/related_documents/how_to_burn_firmware_en.md @@ -0,0 +1,71 @@ +# How to Burn Firmware + +**This article will guide you how to burn a right firmware to your board via M5Burner.** + +## For MacOS + +***(Coming soon...)*** + +## For Windows + +### 1. Download M5Burner + +For downloading M5Burner, visit the [offical website](http://www.m5stack.com) please. + +
+ Screenshot of coverpage +
+ +### 2. Burn the firmware + +Unzip the M5Burner tool which you donwloaded for official website just now, then double click `M5Burner.exe`. + +
+ Screenshot of coverpage +
+ + +**Then choice the `serial port` which is connected with your board and the `Baud` which is 921600 following below steps.** + +
+ Screenshot of coverpage +
+ +!> **Notice** If it does not display any ``COMx`` port or only ``COM1`` exists at the option, you need to visit this article [establish_serial_connection](related_documents/establish_serial_connection) and reinstall the USB driver. + +**a. Choice a right firmware** + +a. select `M5Flow-vx.x` option(the lastest version), if you want to program with [M5Flow](http://flow.m5stack.com) + +b. select `M5Cam-vx.x (/M5Cam-psram)` option, if you own a ESP32CAM (/ M5CAMERA) + +**b. Click `Erase`** + +
+ Screenshot of coverpage +
+ +*If M5Burner shows the information `Hard resetting via RTS pin...` below, it means chip has been erased successfully.* + +
+ Screenshot of coverpage +
+ +**c. Click `Burn`** + +
+ Screenshot of coverpage +
+ +*If M5Burner shows the information `Leaving... Staying in bootloader.` below, it means chip has been burnt successfully.* + +
+ Screenshot of coverpage +
+ +### 3. Then reset your board + +?> **Tip** +If M5Burner means be busy after clicking `Burn`, please wait for a few minutes. It'll be normal after the firmware has been burnt successfully. + +?> **Tip** If the burning procedure has been interrupted(like `M5Burner has been closed suddenly...`), it's better to burn your board again. \ No newline at end of file diff --git a/en/get-started/how_to_connect_wifi_using_core.md b/docs/related_documents/how_to_connect_wifi_using_core.md similarity index 50% rename from en/get-started/how_to_connect_wifi_using_core.md rename to docs/related_documents/how_to_connect_wifi_using_core.md index 8b2d2b25..d9759820 100644 --- a/en/get-started/how_to_connect_wifi_using_core.md +++ b/docs/related_documents/how_to_connect_wifi_using_core.md @@ -3,28 +3,38 @@ **if it's first time to use M5Stack Core or you want to change the networkable AP that means the Core can't access `flow.m5stack.com`, please execute the following setps for setting wifi.** -### Connect Wi-Fi +## Connect Wi-Fi Now, after you've pressed the upload buttom, the screen will show this message. -![image](../../_static/M5Stack_MicroPython_UserGuidePictures/m5stack_connet_wifi.png) +
+ +
Then use Mobile Phone or PC for connectting to M5Stack AP(like `M5Stack-a67c`), and then open brower to login 192.168.4.1 for setting your networkable WIFI name and password. (Now, my networkable wifi is named `MasterHax_5G`) -![image](../../_static/getting_started_pics/m5stack_core/get_started_with_uiflow/input_wifi_password.png) +
+ +
+
+ +
After connecting wifi successfully, reset your core according to the prompt on `192.168.4.1` -![image](../../_static/getting_started_pics/m5stack_core/get_started_with_uiflow/connect_wifi_successfully.png) - +
+ +
Once you've reset M5Stack Core, the upload buttom, you will arrive at a screen with a QR code which you scan with your phone or tablet to start programming on your mobile device. If you want to program the M5 from your computer, enter the url shown at the top of the screen `flow.m5stack.com` -![image](../../_static/getting_started_pics/m5stack_core/get_started_with_uiflow/apikey.jpg) +
+ +
+?> **Note** Similarly, if you want another networkable WIFI AP to connect with Core, press the SETUP buttom while core was power-up. -***NOTE:*** -***Similarly, if you want another networkable WIFI AP to connect with Core, press the SETUP buttom while core was power-up.*** - -![image](../../_static/getting_started_pics/m5stack_core/get_started_with_uiflow/change_wifi.jpg) +
+ +
\ No newline at end of file diff --git a/docs/related_documents/upgrade_m5stack_lib.md b/docs/related_documents/upgrade_m5stack_lib.md new file mode 100644 index 00000000..d5b5f328 --- /dev/null +++ b/docs/related_documents/upgrade_m5stack_lib.md @@ -0,0 +1,17 @@ +# Upgrade M5Stack Lib + +### 1. Start up Arduino IDE, then Select `Sketch`->`Include Library`->`Manage Libraries...` + +### 2. Type `M5Stack` into the search box, search it. + +
+ Screenshot of coverpage +
+ +### 3. If it shows as below figure, click `Update`. + +**But if it shows `Install`, it means you has not installed M5Stack Lib. So, you need click `Install` for installing lib.** + +
+ Screenshot of coverpage +
diff --git a/docs/sidebar.md b/docs/sidebar.md new file mode 100644 index 00000000..2f54931a --- /dev/null +++ b/docs/sidebar.md @@ -0,0 +1,10 @@ +- [Introduction](README.md) +- [Product Documents](product_documents) +- [Quick Start](quick_start) +- [API Rreference](api_reference) +- [M5Stack Awesome](m5stack_awesome) +- [FAQ](faq) + +- **Links** +- [![Github](https://icongram.jgog.in/simple/github.svg?color=808080&size=16)Github](https://github.com/watson8544/M5Stack-Documentation-docsify) +- [![Twitter](https://icongram.jgog.in/simple/twitter.svg?colored&size=16)@M5Stack](http://twitter.com/M5Stack) diff --git a/docs/test/index.html b/docs/test/index.html new file mode 100644 index 00000000..cba3566d --- /dev/null +++ b/docs/test/index.html @@ -0,0 +1,76 @@ + + + + + + + + docsify-themeable (Test) + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + diff --git a/docs/test/index.md b/docs/test/index.md new file mode 100644 index 00000000..4fd78f01 --- /dev/null +++ b/docs/test/index.md @@ -0,0 +1,1069 @@ +# Markdown + +## Headings + +# Heading 1 {docsify-ignore} + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse luctus nulla eu ex varius, a varius elit tincidunt. Aenean arcu magna, gravida id purus a, interdum convallis turpis. Aenean id ipsum eu tortor sollicitudin scelerisque in quis elit. + +## Heading 2 {docsify-ignore} + +Vestibulum lobortis laoreet nunc vel vulputate. In et augue non lectus pellentesque molestie et ac justo. Sed sed turpis ut diam gravida sagittis nec at neque. Vivamus id tellus est. Nam ac dignissim mi. Vestibulum nec sem convallis, condimentum augue at, commodo diam. + +### Heading 3 {docsify-ignore} + +Suspendisse sit amet tincidunt nibh, ac interdum velit. Ut orci diam, dignissim at enim sit amet, placerat rutrum magna. Mauris consectetur nibh eget sem feugiat, sit amet congue quam laoreet. Curabitur sed massa metus. + +#### Heading 4 {docsify-ignore} + +Donec odio orci, facilisis ac vehicula in, vestibulum ut urna. Ut bibendum ullamcorper risus, ac euismod leo maximus sed. In pulvinar sagittis rutrum. Morbi quis cursus diam. Cras ac laoreet nulla, rhoncus sodales dui. + +## Text + +Body text + +**Bold text** + +*Italic text* + +~~Strikethrough~~ + +Marked text + +
Preformatted text
+ +Small Text + +This is subscript + +This is superscript + +## Links + +[Inline link](https://google.com) + +[Inline link with title](https://google.com "Google") + +[Reference link by name][link1] + +[Reference link by number][1] + +[Reference link by self] + +[link1]: https://google.com +[1]: https://google.com +[Reference link by self]: https://google.com + +## Lists + +**Unordered Lists** + +- Unordered 1 +- Unordered 2 +- Unordered 3 + - Unordered 3-1 + - Unordered 3-2 + - Unordered 3-3 + +**Ordered Lists** + +1. Ordered 1 +1. Ordered 2 +1. Ordered 3 + 1. Ordered 3-1 + 1. Ordered 3-2 + 1. Ordered 3-3 + +## Blockquotes + +> Cras aliquet nulla quis metus tincidunt, sed placerat enim cursus. Etiam +> turpis nisl, posuere eu condimentum ut, interdum a risus. Sed non luctus mi. +> Quisque malesuada risus sit amet tortor aliquet, a posuere ex iaculis. Vivamus +> ultrices enim dui, eleifend porttitor elit aliquet sed. +> +> *- Quote Source* + +## Notices + +!> Important with `inline code` + +?> Tip with `inline code` + +## Code + +This is `inline code` + +```javascript +const foo = 1; +const bar = 2; +const add = (num1, num2) => num1 + num2; + +console.log(add(foo, bar)); +``` + +```html + +

Hello

+ +``` + +## Tables + +| Left Align | Center Align | Right Align | Non‑Breaking Header | +| ---------- |:------------:| -----------:| ------------------------------ | +| A1 | A2 | A3 | A4 | +| B1 | B2 | B3 | B4 | +| C1 | C2 | C3 | C4 | + +## Images + +Inline-style + +![alt text](//source.unsplash.com/collection/181581 "Provided by unsplash.com") + +Reference-style + +![alt text][logo] + +[logo]: //source.unsplash.com/collection/881815 "Provided by unsplash.com" + +## Emoji + +A complete list is available here: [Emoji Cheat Sheet](https://www.webpagefx.com/tools/emoji-cheat-sheet/) + +**People** + +:bowtie: +:smile: +:laughing: +:blush: +:smiley: +:relaxed: +:smirk: +:heart_eyes: +:kissing_heart: +:kissing_closed_eyes: +:flushed: +:relieved: +:satisfied: +:grin: +:wink: +:stuck_out_tongue_winking_eye: +:stuck_out_tongue_closed_eyes: +:grinning: +:kissing: +:kissing_smiling_eyes: +:stuck_out_tongue: +:sleeping: +:worried: +:frowning: +:anguished: +:open_mouth: +:grimacing: +:confused: +:hushed: +:expressionless: +:unamused: +:sweat_smile: +:sweat: +:disappointed_relieved: +:weary: +:pensive: +:disappointed: +:confounded: +:fearful: +:cold_sweat: +:persevere: +:cry: +:sob: +:joy: +:astonished: +:scream: +:neckbeard: +:tired_face: +:angry: +:rage: +:triumph: +:sleepy: +:yum: +:mask: +:sunglasses: +:dizzy_face: +:imp: +:smiling_imp: +:neutral_face: +:no_mouth: +:innocent: +:alien: +:yellow_heart: +:blue_heart: +:purple_heart: +:heart: +:green_heart: +:broken_heart: +:heartbeat: +:heartpulse: +:two_hearts: +:revolving_hearts: +:cupid: +:sparkling_heart: +:sparkles: +:star: +:star2: +:dizzy: +:boom: +:collision: +:anger: +:exclamation: +:question: +:grey_exclamation: +:grey_question: +:zzz: +:dash: +:sweat_drops: +:notes: +:musical_note: +:fire: +:hankey: +:poop: +:shit: +:thumbsup: +:thumbsdown: +:ok_hand: +:punch: +:facepunch: +:fist: +:v: +:wave: +:hand: +:raised_hand: +:open_hands: +:point_up: +:point_down: +:point_left: +:point_right: +:raised_hands: +:pray: +:point_up_2: +:clap: +:muscle: +:metal: +:fu: +:runner: +:running: +:couple: +:family: +:two_men_holding_hands: +:two_women_holding_hands: +:dancer: +:dancers: +:ok_woman: +:no_good: +:information_desk_person: +:raising_hand: +:bride_with_veil: +:person_with_pouting_face: +:person_frowning: +:bow: +:couplekiss: +:couple_with_heart: +:massage: +:haircut: +:nail_care: +:boy: +:girl: +:woman: +:man: +:baby: +:older_woman: +:older_man: +:person_with_blond_hair: +:man_with_gua_pi_mao: +:man_with_turban: +:construction_worker: +:cop: +:angel: +:princess: +:smiley_cat: +:smile_cat: +:heart_eyes_cat: +:kissing_cat: +:smirk_cat: +:scream_cat: +:crying_cat_face: +:joy_cat: +:pouting_cat: +:japanese_ogre: +:japanese_goblin: +:see_no_evil: +:hear_no_evil: +:speak_no_evil: +:guardsman: +:skull: +:feet: +:lips: +:kiss: +:droplet: +:ear: +:eyes: +:nose: +:tongue: +:love_letter: +:bust_in_silhouette: +:busts_in_silhouette: +:speech_balloon: +:thought_balloon: +:feelsgood: +:finnadie: +:goberserk: +:godmode: +:hurtrealbad: +:rage1: +:rage2: +:rage3: +:rage4: +:suspect: +:trollface: + +**Nature** + +:sunny: +:umbrella: +:cloud: +:snowflake: +:snowman: +:zap: +:cyclone: +:foggy: +:ocean: +:cat: +:dog: +:mouse: +:hamster: +:rabbit: +:wolf: +:frog: +:tiger: +:koala: +:bear: +:pig: +:pig_nose: +:cow: +:boar: +:monkey_face: +:monkey: +:horse: +:racehorse: +:camel: +:sheep: +:elephant: +:panda_face: +:snake: +:bird: +:baby_chick: +:hatched_chick: +:hatching_chick: +:chicken: +:penguin: +:turtle: +:bug: +:honeybee: +:ant: +:beetle: +:snail: +:octopus: +:tropical_fish: +:fish: +:whale: +:whale2: +:dolphin: +:cow2: +:ram: +:rat: +:water_buffalo: +:tiger2: +:rabbit2: +:dragon: +:goat: +:rooster: +:dog2: +:pig2: +:mouse2: +:ox: +:dragon_face: +:blowfish: +:crocodile: +:dromedary_camel: +:leopard: +:cat2: +:poodle: +:paw_prints: +:bouquet: +:cherry_blossom: +:tulip: +:four_leaf_clover: +:rose: +:sunflower: +:hibiscus: +:maple_leaf: +:leaves: +:fallen_leaf: +:herb: +:mushroom: +:cactus: +:palm_tree: +:evergreen_tree: +:deciduous_tree: +:chestnut: +:seedling: +:blossom: +:ear_of_rice: +:shell: +:globe_with_meridians: +:sun_with_face: +:full_moon_with_face: +:new_moon_with_face: +:new_moon: +:waxing_crescent_moon: +:first_quarter_moon: +:waxing_gibbous_moon: +:full_moon: +:waning_gibbous_moon: +:last_quarter_moon: +:waning_crescent_moon: +:last_quarter_moon_with_face: +:first_quarter_moon_with_face: +:crescent_moon: +:earth_africa: +:earth_americas: +:earth_asia: +:volcano: +:milky_way: +:partly_sunny: +:octocat: +:squirrel: + +**Objects** + +:bamboo: +:gift_heart: +:dolls: +:school_satchel: +:mortar_board: +:flags: +:fireworks: +:sparkler: +:wind_chime: +:rice_scene: +:jack_o_lantern: +:ghost: +:santa: +:christmas_tree: +:gift: +:bell: +:no_bell: +:tanabata_tree: +:tada: +:confetti_ball: +:balloon: +:crystal_ball: +:cd: +:dvd: +:floppy_disk: +:camera: +:video_camera: +:movie_camera: +:computer: +:tv: +:iphone: +:phone: +:telephone: +:telephone_receiver: +:pager: +:fax: +:minidisc: +:vhs: +:sound: +:speaker: +:mute: +:loudspeaker: +:mega: +:hourglass: +:hourglass_flowing_sand: +:alarm_clock: +:watch: +:radio: +:satellite: +:loop: +:mag: +:mag_right: +:unlock: +:lock: +:lock_with_ink_pen: +:closed_lock_with_key: +:key: +:bulb: +:flashlight: +:high_brightness: +:low_brightness: +:electric_plug: +:battery: +:calling: +:email: +:mailbox: +:postbox: +:bath: +:bathtub: +:shower: +:toilet: +:wrench: +:nut_and_bolt: +:hammer: +:seat: +:moneybag: +:yen: +:dollar: +:pound: +:euro: +:credit_card: +:money_with_wings: +:inbox_tray: +:outbox_tray: +:envelope: +:incoming_envelope: +:postal_horn: +:mailbox_closed: +:mailbox_with_mail: +:mailbox_with_no_mail: +:package: +:door: +:smoking: +:bomb: +:gun: +:hocho: +:pill: +:syringe: +:page_facing_up: +:page_with_curl: +:bookmark_tabs: +:bar_chart: +:chart_with_upwards_trend: +:chart_with_downwards_trend: +:scroll: +:clipboard: +:calendar: +:date: +:card_index: +:file_folder: +:open_file_folder: +:scissors: +:pushpin: +:paperclip: +:black_nib: +:pencil2: +:straight_ruler: +:triangular_ruler: +:closed_book: +:green_book: +:blue_book: +:orange_book: +:notebook: +:notebook_with_decorative_cover: +:ledger: +:books: +:bookmark: +:name_badge: +:microscope: +:telescope: +:newspaper: +:football: +:basketball: +:soccer: +:baseball: +:tennis: +:8ball: +:rugby_football: +:bowling: +:golf: +:mountain_bicyclist: +:bicyclist: +:horse_racing: +:snowboarder: +:swimmer: +:surfer: +:ski: +:spades: +:hearts: +:clubs: +:diamonds: +:gem: +:ring: +:trophy: +:musical_score: +:musical_keyboard: +:violin: +:space_invader: +:video_game: +:black_joker: +:flower_playing_cards: +:game_die: +:dart: +:mahjong: +:clapper: +:memo: +:pencil: +:book: +:art: +:microphone: +:headphones: +:trumpet: +:saxophone: +:guitar: +:shoe: +:sandal: +:high_heel: +:lipstick: +:boot: +:shirt: +:tshirt: +:necktie: +:womans_clothes: +:dress: +:running_shirt_with_sash: +:jeans: +:kimono: +:bikini: +:ribbon: +:tophat: +:crown: +:womans_hat: +:mans_shoe: +:closed_umbrella: +:briefcase: +:handbag: +:pouch: +:purse: +:eyeglasses: +:fishing_pole_and_fish: +:coffee: +:tea: +:sake: +:baby_bottle: +:beer: +:beers: +:cocktail: +:tropical_drink: +:wine_glass: +:fork_and_knife: +:pizza: +:hamburger: +:fries: +:poultry_leg: +:meat_on_bone: +:spaghetti: +:curry: +:fried_shrimp: +:bento: +:sushi: +:fish_cake: +:rice_ball: +:rice_cracker: +:rice: +:ramen: +:stew: +:oden: +:dango: +:egg: +:bread: +:doughnut: +:custard: +:icecream: +:ice_cream: +:shaved_ice: +:birthday: +:cake: +:cookie: +:chocolate_bar: +:candy: +:lollipop: +:honey_pot: +:apple: +:green_apple: +:tangerine: +:lemon: +:cherries: +:grapes: +:watermelon: +:strawberry: +:peach: +:melon: +:banana: +:pear: +:pineapple: +:sweet_potato: +:eggplant: +:tomato: +:corn: + +**Places** + +:house: +:house_with_garden: +:school: +:office: +:post_office: +:hospital: +:bank: +:convenience_store: +:love_hotel: +:hotel: +:wedding: +:church: +:department_store: +:european_post_office: +:city_sunrise: +:city_sunset: +:japanese_castle: +:european_castle: +:tent: +:factory: +:tokyo_tower: +:japan: +:mount_fuji: +:sunrise_over_mountains: +:sunrise: +:stars: +:statue_of_liberty: +:bridge_at_night: +:carousel_horse: +:rainbow: +:ferris_wheel: +:fountain: +:roller_coaster: +:ship: +:speedboat: +:boat: +:sailboat: +:rowboat: +:anchor: +:rocket: +:airplane: +:helicopter: +:steam_locomotive: +:tram: +:mountain_railway: +:bike: +:aerial_tramway: +:suspension_railway: +:mountain_cableway: +:tractor: +:blue_car: +:oncoming_automobile: +:car: +:red_car: +:taxi: +:oncoming_taxi: +:articulated_lorry: +:bus: +:oncoming_bus: +:rotating_light: +:police_car: +:oncoming_police_car: +:fire_engine: +:ambulance: +:minibus: +:truck: +:train: +:station: +:train2: +:bullettrain_front: +:bullettrain_side: +:light_rail: +:monorail: +:railway_car: +:trolleybus: +:ticket: +:fuelpump: +:vertical_traffic_light: +:traffic_light: +:warning: +:construction: +:beginner: +:atm: +:slot_machine: +:busstop: +:barber: +:hotsprings: +:checkered_flag: +:crossed_flags: +:izakaya_lantern: +:moyai: +:circus_tent: +:performing_arts: +:round_pushpin: +:triangular_flag_on_post: +:jp: +:kr: +:cn: +:us: +:fr: +:es: +:it: +:ru: +:gb: +:uk: +:de: + +**Symbols** + +:one: +:two: +:three: +:four: +:five: +:six: +:seven: +:eight: +:nine: +:keycap_ten: +:1234: +:zero: +:hash: +:symbols: +:arrow_backward: +:arrow_down: +:arrow_forward: +:arrow_left: +:capital_abcd: +:abcd: +:abc: +:arrow_lower_left: +:arrow_lower_right: +:arrow_right: +:arrow_up: +:arrow_upper_left: +:arrow_upper_right: +:arrow_double_down: +:arrow_double_up: +:arrow_down_small: +:arrow_heading_down: +:arrow_heading_up: +:leftwards_arrow_with_hook: +:arrow_right_hook: +:left_right_arrow: +:arrow_up_down: +:arrow_up_small: +:arrows_clockwise: +:arrows_counterclockwise: +:rewind: +:fast_forward: +:information_source: +:ok: +:twisted_rightwards_arrows: +:repeat: +:repeat_one: +:new: +:top: +:up: +:cool: +:free: +:ng: +:cinema: +:koko: +:signal_strength: +:u5272: +:u5408: +:u55b6: +:u6307: +:u6708: +:u6709: +:u6e80: +:u7121: +:u7533: +:u7a7a: +:u7981: +:sa: +:restroom: +:mens: +:womens: +:baby_symbol: +:no_smoking: +:parking: +:wheelchair: +:metro: +:baggage_claim: +:accept: +:wc: +:potable_water: +:put_litter_in_its_place: +:secret: +:congratulations: +:m: +:passport_control: +:left_luggage: +:customs: +:ideograph_advantage: +:cl: +:sos: +:id: +:no_entry_sign: +:underage: +:no_mobile_phones: +:do_not_litter: +:no_bicycles: +:no_pedestrians: +:children_crossing: +:no_entry: +:eight_spoked_asterisk: +:sparkle: +:eight_pointed_black_star: +:heart_decoration: +:vs: +:vibration_mode: +:mobile_phone_off: +:chart: +:currency_exchange: +:aries: +:taurus: +:gemini: +:cancer: +:leo: +:virgo: +:libra: +:scorpius: +:sagittarius: +:capricorn: +:aquarius: +:pisces: +:ophiuchus: +:six_pointed_star: +:negative_squared_cross_mark: +:a: +:b: +:ab: +:o2: +:diamond_shape_with_a_dot_inside: +:recycle: +:end: +:back: +:on: +:soon: +:clock1: +:clock130: +:clock10: +:clock1030: +:clock11: +:clock1130: +:clock12: +:clock1230: +:clock2: +:clock230: +:clock3: +:clock330: +:clock4: +:clock430: +:clock5: +:clock530: +:clock6: +:clock630: +:clock7: +:clock730: +:clock8: +:clock830: +:clock9: +:clock930: +:heavy_dollar_sign: +:copyright: +:registered: +:tm: +:x: +:heavy_exclamation_mark: +:bangbang: +:interrobang: +:o: +:heavy_multiplication_x: +:heavy_plus_sign: +:heavy_minus_sign: +:heavy_division_sign: +:white_flower: +:100: +:heavy_check_mark: +:ballot_box_with_check: +:radio_button: +:link: +:curly_loop: +:wavy_dash: +:part_alternation_mark: +:trident: +:black_small_square: +:white_small_square: +:black_medium_small_square: +:white_medium_small_square: +:black_medium_square: +:white_medium_square: +:black_large_square: +:white_large_square: +:white_check_mark: +:black_square_button: +:white_square_button: +:black_circle: +:white_circle: +:red_circle: +:large_blue_circle: +:large_blue_diamond: +:large_orange_diamond: +:small_blue_diamond: +:small_orange_diamond: +:small_red_triangle: +:small_red_triangle_down: +:shipit: + +## Keyboard + + Arrow Up + + Arrow Down + + Arrow Left + + Arrow Right + + Caps Lock + + Command + + Control + + Delete + + Delete (Forward) + + End + + Enter + + Escape + + Home + + Page Up + + Page Down + + Option, Alt + + Return + + Shift + + Space + + Tab + + Tab + Shift + +## Misc + +**Horizontal Rule** + +--- diff --git a/docs/test/navbar.md b/docs/test/navbar.md new file mode 100644 index 00000000..119c58ad --- /dev/null +++ b/docs/test/navbar.md @@ -0,0 +1,46 @@ +- Text +- [Link](http://google.com) +- [Menu (Link)](http://google.com) + - [![alt text](https://icongram.jgog.in/simple/facebook.svg?colored&size=16)Facebook](http://facebook.com) + - [![alt](https://icongram.jgog.in/simple/github.svg?colored&size=16)Github](http://github.com) + - [![alt](https://icongram.jgog.in/simple/instagram.svg?colored&size=16)Instagram](http://instagram.com) + - [![alt](https://icongram.jgog.in/simple/linkedin.svg?colored&size=16)Linkedin](http://linkedin.com) + - [![alt](https://icongram.jgog.in/simple/pinterest.svg?colored&size=16)Pinterest](http://pinterest.com) + - [![alt](https://icongram.jgog.in/simple/tumblr.svg?colored&size=16)Tumblr](http://tumblr.com) + - [![alt](https://icongram.jgog.in/simple/twitter.svg?colored&size=16)Twitter](http://twitter.com) + - [![alt](https://icongram.jgog.in/simple/youtube.svg?colored&size=16)YouTube](http://youtube.com) +- Menu (Text) + - [Alfa](#) + - [Bravo](#) + - [Charlie](#) + - [Delta](#) + - [Echo](#) + - [Foxtrot](#) + - [Golf](#) + - [Hotel](#) + - [India](#) + - [Juliett](#) + - [Kilo](#) + - [Lima](#) + - [Mike](#) + - [November](#) + - [Oscar](#) + - [Papa](#) + - [Quebec](#) + - [Romeo](#) + - [Sierra](#) + - [Tango](#) + - [Uniform](#) + - [Victor](#) + - [Whiskey](#) + - [X-ray](#) + - [Yankee](#) + - [Zulu](#) +- Themes + - Defaults + - Simple + - Simple Dark + - Vue + - Buble + - Dark + - Pure diff --git a/en/COPYRIGHT.rst b/en/COPYRIGHT.rst deleted file mode 100644 index d7f2f3a1..00000000 --- a/en/COPYRIGHT.rst +++ /dev/null @@ -1,74 +0,0 @@ -Copyrights and Licenses -*********************** - -Software Copyrights -=================== - -All original source code in this repository is Copyright (C) 2017-2018 M5Stack Inc. This source code is licensed under the Apache License 2.0 as described in the file LICENSE. - -Additional third party copyrighted code is included under the following licenses. - -Where source code headers specify Copyright & License information, this information takes precedence over the summaries made here. - -Firmware Components -------------------- - - - -Build Tools ------------ - -This is the list of licenses for tools included in this repository, which are used to build applications. The tools do not become part of the application (firmware), so their license does not affect licensing of the application. - - -Xtensa libhal MIT License -========================= - -Copyright (c) 2003, 2006, 2010 Tensilica Inc. - -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. - -TinyBasic Plus MIT License -========================== - -Copyright (c) 2012-2013 - -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. - -TJpgDec License -=============== - -TJpgDec - Tiny JPEG Decompressor R0.01 (C)ChaN, 2011 -The TJpgDec is a generic JPEG decompressor module for tiny embedded systems. -This is a free software that opened for education, research and commercial -developments under license policy of following terms. - -Copyright (C) 2011, ChaN, all right reserved. - -* The TJpgDec module is a free software and there is NO WARRANTY. -* No restriction on use. You can use, modify and redistribute it for personal, non-profit or commercial products UNDER YOUR RESPONSIBILITY. -* Redistributions of source code must retain the above copyright notice. - - - diff --git a/en/Makefile b/en/Makefile deleted file mode 100644 index c95bc131..00000000 --- a/en/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SPHINXPROJ = M5Stack -SOURCEDIR = en -BUILDDIR = en_build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)/" "../$(BUILDDIR)" $(SPHINXOPTS) $(O) - -clean: - rm -rf ../$(BUILDDIR)/* - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "../$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/en/api-reference/button/button.rst b/en/api-reference/button/button.rst deleted file mode 100644 index e291a6e3..00000000 --- a/en/api-reference/button/button.rst +++ /dev/null @@ -1,70 +0,0 @@ -Button API -*********** - ------------------------------ - -Function ---------- - -isPressed() - -isReleased() - -pressedFor(timeout) - -wasPressed(callback=None) -wasReleased(callback=None) -releasedFor(timeout, callback=None) - - - ---------------------- - -Usage ------- - -.. code:: python - - from m5stack import * - from machine import SPI, Pin - from display import LCD - import utime - - spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18)) - - lcd = LCD(spi = spi) #lcd init - - while True: - if buttonA.wasPressed(): - lcd.print('Button A was Pressed\n') - - if buttonA.wasReleased(): - lcd.print('Button A was Released\n') - - if buttonA.pressedFor(1.5): - lcd.print('Button A pressed for 1.5s\n') - - if buttonA.releasedFor(2): - lcd.print('Button A released for 2s press hold\n') - - utime.sleep(0.1) - - -.. code:: python - - #Button Callback - - from m5stack import * - - def on_wasPressed(): - lcd.print('Button B was Pressed\n') - - def on_wasReleased(): - lcd.print('Button B was Released\n') - - def on_releasedFor(): - lcd.print('Button B released for 1.2s press hold\n') - - buttonB.wasPressed(on_wasPressed) - buttonB.wasReleased(on_wasReleased) - buttonB.releasedFor(1.2, on_releasedFor) diff --git a/en/api-reference/index.rst b/en/api-reference/index.rst deleted file mode 100644 index fa45328e..00000000 --- a/en/api-reference/index.rst +++ /dev/null @@ -1,13 +0,0 @@ -************* -API Reference -************* - -.. toctree:: - :maxdepth: 1 - - LCD - Button
or other required elements. - thead: [ 1, "
", "
" ], - col: [ 2, "", "
" ], - tr: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - _default: [ 0, "", "" ] -}; - -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); -var documentElement = document.documentElement; - - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 only -// See #13393 for more info -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = {}; - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // Triggered event must either 1) have no namespace, or 2) have namespace(s) - // a subset or equal to those in the bound event (both can have no namespace). - if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: jQuery.isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - - // Support: IE <=10 - 11, Edge 12 - 13 - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( ">tbody", elem )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rmargin = ( /^margin/ ); - -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - div.style.cssText = - "box-sizing:border-box;" + - "position:relative;display:block;" + - "margin:auto;border:1px;padding:1px;" + - "top:1%;width:50%"; - div.innerHTML = ""; - documentElement.appendChild( container ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = divStyle.marginLeft === "2px"; - boxSizingReliableVal = divStyle.width === "4px"; - - // Support: Android 4.0 - 4.3 only - // Some styles come back with percentage values, even though they shouldn't - div.style.marginRight = "50%"; - pixelMarginRightVal = divStyle.marginRight === "4px"; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + - "padding:0;margin-top:1px;position:absolute"; - container.appendChild( div ); - - jQuery.extend( support, { - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelMarginRight: function() { - computeStyleTests(); - return pixelMarginRightVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style; - -// Return a css property mapped to a potentially vendor prefixed property -function vendorPropName( name ) { - - // Shortcut for names that are not vendor prefixed - if ( name in emptyStyle ) { - return name; - } - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a property mapped along what jQuery.cssProps suggests or to -// a vendor prefixed property. -function finalPropName( name ) { - var ret = jQuery.cssProps[ name ]; - if ( !ret ) { - ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; - } - return ret; -} - -function setPositiveNumber( elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i, - val = 0; - - // If we already have the right measurement, avoid augmentation - if ( extra === ( isBorderBox ? "border" : "content" ) ) { - i = 4; - - // Otherwise initialize for horizontal or vertical properties - } else { - i = name === "width" ? 1 : 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // At this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - - // At this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // At this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with computed style - var valueIsBorderBox, - styles = getStyles( elem ), - val = curCSS( elem, name, styles ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test( val ) ) { - return val; - } - - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - - // Fall back to offsetWidth/Height when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - if ( val === "auto" ) { - val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; - } - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - - // Use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - "float": "cssFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - if ( type === "number" ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = jQuery.camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - } ) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = extra && getStyles( elem ), - subtract = extra && augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ); - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ name ] = value; - value = jQuery.css( elem, name ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && - ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || - jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 13 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( jQuery.isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - jQuery.proxy( result.stop, result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( jQuery.isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; - - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( jQuery.isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - if ( typeof value === "string" && value ) { - classes = value.match( rnothtmlwhite ) || []; - - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( type === "string" ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = value.match( rnothtmlwhite ) || []; - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, isFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu" ).split( " " ), - function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -} ); - -jQuery.fn.extend( { - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -} ); - - - - -support.focusin = "onfocusin" in window; - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = jQuery.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = jQuery.isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 13 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available, append data to url - if ( s.data ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - - -jQuery._evalUrl = function( url ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - "throws": true - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( jQuery.isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Button API

-
-
-

Function

-

isPressed()

-

isReleased()

-

pressedFor(timeout)

-

wasPressed(callback=None) -wasReleased(callback=None) -releasedFor(timeout, callback=None)

-
-
-
-

Usage

-
from m5stack import *
-from machine import SPI, Pin
-from display import LCD
-import utime
-
-spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18))
-
-lcd = LCD(spi = spi) #lcd init
-
-while True:
-  if buttonA.wasPressed():
-    lcd.print('Button A was Pressed\n')
-
-  if buttonA.wasReleased():
-    lcd.print('Button A was Released\n')
-
-  if buttonA.pressedFor(1.5):
-    lcd.print('Button A pressed for 1.5s\n')
-
-  if buttonA.releasedFor(2):
-    lcd.print('Button A released for 2s press hold\n')
-
-  utime.sleep(0.1)
-
-
-
#Button Callback
-
-from m5stack import *
-
-def on_wasPressed():
-  lcd.print('Button B was Pressed\n')
-
-def on_wasReleased():
-  lcd.print('Button B was Released\n')
-
-def on_releasedFor():
-  lcd.print('Button B released for 1.2s press hold\n')
-
-buttonB.wasPressed(on_wasPressed)
-buttonB.wasReleased(on_wasReleased)
-buttonB.releasedFor(1.2, on_releasedFor)
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/index.html b/en_build/html/api-reference/index.html deleted file mode 100644 index 33704435..00000000 --- a/en_build/html/api-reference/index.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - - - - API Reference — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

API Reference

- -
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/lcd/Backup/lcd_api_arduino.html b/en_build/html/api-reference/lcd/Backup/lcd_api_arduino.html deleted file mode 100644 index 88bd557d..00000000 --- a/en_build/html/api-reference/lcd/Backup/lcd_api_arduino.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - - LCD API for Arduino — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

LCD API for Arduino

-
-

Overview

-
-
-

API Reference

-
-

1.LCD(spi=spi)

-

*Description:* initialize the lcd (fgcolor: white, bgcolor: black) -*Parament:* *Example:*

-
from machine import SPI, Pin
-from display import LCD
-spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18))
-lcd = LCD(spi = spi)
-
-
-
-
-

2.lcd.drawPixel(x, y [,color])

-

*Description:* Draw the pixel at position (x,y). If color is not -given, current foreground color is used. *Parament:* *Example:*

-
#The M5Stack Core LCD has been initialized
-lcd.drawPixel(11, 22, LCD.ORANGE)
-
-
-
-
-

3.lcd.fillScreen(lcd.color565(r, g, b))

-

*Description:* draw the pixel at position (x,y) Note: if color is -not given, current foreground color is used *Parament:* -*Example:*

-
#The M5Stack Core LCD has been initialized
-lcd.fillScreen(lcd.color565(0x00, 0x00, 0x00))
-
-
-
-
-

4.lcd.circle(x, y, r [,color, fillcolor])

-

*Description:* draw the pixel at position (x,y) Note: if color is -not given, current foreground color is used. if fillcolor is given, -filled circle will be drawn *Parament:* *r:* the radius of -circle *Example:*

-
#The M5Stack Core LCD has been initialized
-lcd.circle(100,100,10,lcd.BLUE)
-
-
-
-
-
-

Usage

-
from machine import SPI, Pin
-from display import LCD
-
-spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18))
-
-lcd = LCD(spi = spi)
-lcd.fillScreen(lcd.color565(0x00, 0x00, 0x00))
-lcd.line(0,0,44,44,lcd.ORANGE)
-lcd.triangle(22,22,69,98,51,22,lcd.RED)
-lcd.circle(100,100,10,lcd.BLUE)
-lcd.print('LLLLLLLL',80,80)
-
-
-
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/lcd/Backup/lcd_api_micropython.html b/en_build/html/api-reference/lcd/Backup/lcd_api_micropython.html deleted file mode 100644 index 7406ca00..00000000 --- a/en_build/html/api-reference/lcd/Backup/lcd_api_micropython.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - - LCD API for Micropython — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

LCD API for Micropython

-
-

Overview

-
-
-

API Reference

-
-

1.LCD(spi=spi)

-

*Description:* initialize the lcd (fgcolor: white, bgcolor: black) -*Parament:* *Example:*

-
from machine import SPI, Pin
-from display import LCD
-spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18))
-lcd = LCD(spi = spi)
-
-
-
-
-

2.lcd.drawPixel(x, y [,color])

-

*Description:* Draw the pixel at position (x,y). If color is not -given, current foreground color is used. *Parament:* *Example:*

-
#The M5Stack Core LCD has been initialized
-lcd.drawPixel(11, 22, LCD.ORANGE)
-
-
-
-
-

3.lcd.fillScreen(lcd.color565(r, g, b))

-

*Description:* draw the pixel at position (x,y) Note: if color is -not given, current foreground color is used *Parament:* -*Example:*

-
#The M5Stack Core LCD has been initialized
-lcd.fillScreen(lcd.color565(0x00, 0x00, 0x00))
-
-
-
-
-

4.lcd.circle(x, y, r [,color, fillcolor])

-

*Description:* draw the pixel at position (x,y) Note: if color is -not given, current foreground color is used. if fillcolor is given, -filled circle will be drawn *Parament:* *r:* the radius of -circle *Example:*

-
#The M5Stack Core LCD has been initialized
-lcd.circle(100,100,10,lcd.BLUE)
-
-
-
-
-
-

Usage

-
from machine import SPI, Pin
-from display import LCD
-
-spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18))
-
-lcd = LCD(spi = spi)
-lcd.fillScreen(lcd.color565(0x00, 0x00, 0x00))
-lcd.line(0,0,44,44,lcd.ORANGE)
-lcd.triangle(22,22,69,98,51,22,lcd.RED)
-lcd.circle(100,100,10,lcd.BLUE)
-lcd.print('LLLLLLLL',80,80)
-
-
-
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/lcd/lcd.html b/en_build/html/api-reference/lcd/lcd.html deleted file mode 100644 index aa2e810c..00000000 --- a/en_build/html/api-reference/lcd/lcd.html +++ /dev/null @@ -1,687 +0,0 @@ - - - - - - - - - - - LCD API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

LCD API

-
-
-

Function

-
-

lcd.setbrightness(uint8_t brightness)

-
-
-

lcd.setRotation(degree)

-
-
Description:
-
-
set the angle of rotation of the entire screen
-
-
-
-
Parament:
-
-
degree: the angle of rotation
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.setRotation(90)
-
-
-
-
-

lcd.setColor(color [, background_color])

-
-
Description:
-
-
Set the default foreground/background color
-
-
-
-
Parament:
-
-
color: the color of text
-
background_color: the fill color of text
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.setColor(lcd.RED)
-lcd.setColor(lcd.ORANGE, LCD.DARKCYAN)
-
-
-
-
-

lcd.setTextColor(color [,background_color])

-
-
Description:
-
-
This function is as same as setColor(color [, background_color])
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.setTextColor(lcd.PINK)
-lcd.setTextColor(lcd.ORANGE, LCD.DARKCYAN)
-
-
-
-
-

lcd.fillScreen(color)

-
-
Description:
-
-
Fill the entire screen with the given color
-
-
-
-
Parament:
-
-
color: color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.fillScreen(lcd.RED)
-
-
-
-
-

lcd.drawPixel(x, y [,color])

-
-
Description:
-
-
Draw the pixel at position (x,y)
-
-
Note:
-
-
If color is not given, current foreground color is used
-
-
-
-
Parament:
-
-
color: color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.drawPixel(22,22,lcd.RED)
-
-
-
-
-

lcd.drawLine(x, y, x1, y1 [,color])

-
-
Description:
-
-
Draw the line from point (x,y) to point (x1,y1)
-
-
Note:
-
-
If color is not given, current foreground color is used
-
-
-
-
Parament:
-
-
color: color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.drawLine(0,0,12,12,lcd.WHITE)
-
-
-
-
-

lcd.drawTriangle(x, y, x1, y1, x2, y2 [,color])

-
-
Description:
-
-
Draw the triangel between points (x,y), (x1,y1) and (x2,y2)
-
-
Note:
-
-
If color is not given, current foreground color is used
-
-
-
-
Parament:
-
-
color: color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.drawTriangle(22,22,69,98,51,22,lcd.RED)
-
-
-
-
-

lcd.fillTriangle(x, y, x1, y1, x2, y2 [,color])

-
-
Description:
-
-
Fill the triangel between points (x,y), (x1,y1) and (x2,y2)
-
-
Note:
-
-
If color is not given, triangle will be filled in current foreground color
-
-
-
-
Parament:
-
-
color: color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.fillTriangle(122, 122, 169, 198, 151, 182, lcd.RED)
-
-
-
-
-

lcd.drawCircle(x, y, r [,color])

-
-
Description:*
-
-
Draw the circle with center at (x,y) and radius r
-
-
Note:
-
-
If color is not given, current foreground color is used
-
-
-
-
Parament:
-
-
r: the radius of circle
-
color: color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.drawCircle(180, 180, 10, lcd.BLUE)
-
-
-
-
-

lcd.fillCircle(x, y, r [,color])

-
-
Description:
-
-
Fill the circle with center at (x,y) and radius r
-
-
Note:
-
-
If color is not given, current foregroundcolor will be used
-
-
-
-
Parament:
-
-
r: the radius of circle
-
color: color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.fillcircle(100, 100, 10, lcd.BLUE)
-
-
-
-
-

lcd.drawRect(x, y, w, h, [,color])

-
-
Description:
-
-
Draw the rectangle from the upper left point at (x,y) and width and height
-
-
Note:
-
-
If color is not given, rectangle will be drawn in current foreground color
-
-
-
-
Parament:
-
-
w: display phisical width in pixels (display’s smaller dimension)
-
h: display phisical height in pixels (display’s larger dimension)
-
color: optional, color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.drawRect(180, 12, 122, 10, lcd.BLUE)
-
-
-
-
-

lcd.fillRect(x, y, w, h, [,color])

-
-
Description:
-
-
Fill the rectangle from the upper left point at (x,y) and width and height
-
-
Note:
-
-
If fillcolor is not given, rectangle will be filled in current foreground color
-
-
-
-
Parament:
-
-
w: display phisical width in pixels (display’s smaller dimension)
-
h: display phisical height in pixels (display’s larger dimension)
-
color: optional, color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.fillRect(180,30,122,10,lcd.BLUE)
-
-
-
-
-

lcd.drawRoundRect(x, y, w, h, r [,color])

-
-
Description:
-
-
Draw the rectangle with rounded corners from the upper left point at (x,y) and width and height. Corner radius is given by r argument
-
-
Note:
-
-
If *color is not given, current foreground color will be used*
-
-
-
-
Parament:
-
-
w: display phisical width in pixels (display’s smaller dimension)
-
h: display phisical height in pixels (display’s larger dimension)
-
r: the radius of circle
-
color: optional, color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.drawRoundRect(180,50,122,10,4,lcd.BLUE)
-
-
-
-
-

lcd.fillRoundRect(x, y, w, h, r [,color])

-
-
Description:
-
-
Fill the rectangle with rounded corners from the upper left point at (x,y) and width and height. Corner radius is given by r argument
-
-
Note:
-
-
If color is not given, current foreground color will be used
-
-
-
-
Parament:
-
-
w: display phisical width in pixel (display’s smaller dimension)
-
h: display phisical height in pixels (display’s larger dimension)
-
r: the radius of circle
-
color: optional, color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.fillRoundRect(180,70,122,10,4,lcd.BLUE)
-
-
-
-
-

lcd.print(‘text’, [x, y])

-
-
Description:
-
-
Print the text at position (x,y)
-
-
-
-
Parament:
-
-
text: the string need to print
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.print('this is a print text function', 80, 80)
-
-
-
-
-

lcd.clear([color])

-
-
Description:
-
-
Clear the screen with default background color orspecific color if given
-
-
-
-
Parament:
-
-
color: optional, color values
-
-
-
-
Example:
-
-
#The M5Stack Core LCD has been initialized
-lcd.clear()
-
-
-
-
-
-
-

Usage

-
from machine import SPI, Pin
-from display import LCD
-
-spi = SPI(1, baudrate=32000000, mosi=Pin(23), miso=Pin(19), sck=Pin(18))
-
-lcd = LCD(spi = spi) #lcd init
-lcd.fillScreen(lcd.BLACK) #set the default background color
-
-lcd.drawLine(0, 0, lcd.WHITE)
-lcd.drawTriangle(22, 22, 69, 98, 51, 22, lcd.RED)
-lcd.fillTriangle(122, 122, 169, 198, 151, 182, lcd.RED)
-lcd.drawCircle(180, 180, 10, lcd.BLUE)
-lcd.fillcircle(100, 100, 10, lcd.BLUE)
-lcd.drawRect(180, 12, 122, 10, lcd.BLUE)
-lcd.fillRect(180, 30, 122, 10, lcd.BLUE)
-lcd.drawRoundRect(180, 50, 122, 10, 4, lcd.BLUE)
-lcd.fillRoundRect(180, 70, 122, 10, 4, lcd.BLUE)
-lcd.print('this is a print text function', 80, 80)
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/mic/mic.html b/en_build/html/api-reference/mic/mic.html deleted file mode 100644 index 91898503..00000000 --- a/en_build/html/api-reference/mic/mic.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - - - - - - Mic API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Mic API

-
-
-

Function

-
-
-
-

Usage

-
from m5stack import *
-import machine, _thread
-
-mic_adc = 0
-buffer = []
-def microphone_enter():
-        print('microphone_enter')
-global mic_adc, buffer
-        try:
-                mic_adc = machine.ADC(34)
-                mic_adc.atten(mic_adc.ATTN_11DB)
-        dac = machine.DAC(machine.Pin(25))
-        dac.write(0)
-        except:
-                pass
-        buffer = []
-        for i in range(0, 55):
-                buffer.append(0)
-
-
-def microphone_loop():
-        global mic_adc, buffer
-        val = 0
-        for i in range(0, 32):
-                raw = (mic_adc.readraw() - 1845) // 10
-        if raw > 20:
-                raw = 20
-        elif raw < -20:
-                raw = -20
-        val += raw
-val = val // 32
-        buffer.pop()
-        buffer.insert(0, val)
-        for i in range(1, 50):
-        lcd.line(i*2+44, 120+buffer[i+1], i*2+44+2, 120+buffer[i+2], lcd.WHITE)
-        lcd.line(i*2+44, 120+buffer[i],   i*2+44+2, 120+buffer[i+1], lcd.BLACK)
-
-microphone_enter()
-
-while 1:
-        microphone_loop()
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/adc.html b/en_build/html/api-reference/peripherals/adc.html deleted file mode 100644 index 8aa67ae9..00000000 --- a/en_build/html/api-reference/peripherals/adc.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - - - - - - ADC API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

ADC API

-
-
-

Description

-

ESP32 integrates two 12-bit SAR (Successive Approximation Register) ADCs (Analog to Digital Converters) and supports measurements on 18 channels (analog enabled pins)

-

ESP32 DAC output voltage range is 0-Vdd (3.3 V), the resolution is 8-bits

-
-
-
-

Function

-
-

machine.ADC(pin [,unit=1])

-
-
Description:
-
-
Create the adc instance object
-
-
-
-
Parament:
-
-
pin: pin argument defines the gpio which will will be used as adc input
-
unit: Optional unit argument select ESP32 ADC unit for this instance. Values 1 (ADC1, default) or 2 (ADC2) can be selected
-
-
-
-
Example:
-
-
import machine
-
-adc = machine.ADC(35)
-
-
-
-
-

read()

-
-
Description:
-
-
Read the ADC value as voltage (in mV)
-

-
-
-
-
Parament:
-
-
None Parament
-
-
-
-
Example:
-
-
import machine
-
-adc = machine.ADC(35)
-adc.read()
-
-
-
-
-
-
-

Usage

-
import machine
-
-adc = machine.ADC(35)
-adc.read()
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/dac.html b/en_build/html/api-reference/peripherals/dac.html deleted file mode 100644 index d04cba54..00000000 --- a/en_build/html/api-reference/peripherals/dac.html +++ /dev/null @@ -1,323 +0,0 @@ - - - - - - - - - - - DAC API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

DAC API

-
-
-

Description

-

ESP32 has two 8-bit DAC (digital to analog converter) channels, connected to GPIO25 (Channel 1) and GPIO26 (Channel 2). -The DAC driver allows these channels to be set to arbitrary voltages.<br The DAC channels can also be driven with DMA-style written sample data, via the I2S driver when using the “built-in DAC mode”.

-

ESP32 DAC output voltage range is 0-Vdd (3.3 V), the resolution is 8-bits

-
-
-
-

Function

-
-

machine.DAC(pin)

-
-
Description:
-
-
Pin argument defines the gpio which will will be used as dac output
-
Note: Only GPIOs 25 and 26 can be used as DAC outputs
-

-
-
-
-
Parament:
-
-
pin: The pin argument can be given as pin number (integer) or the machine.Pin object
-
-
-
-
Example:
-
-
import machine
-
-dac = machine.DAC(machine.Pin(26))
-dac.write(128)
-
-
-
-
-

write(value)

-
-
Description:
-
-
Set the DAC value
-
*Note: The value of 255 sets the voltage on dac pin to 3.3 V
-

-
-
-
-
Parament:
-
-
value: DAC vaule.Valid range is: 0 - 255
-
-
-
-
Example:
-
-
import machine
-
-dac = machine.DAC(machine.Pin(26))
-dac.write(128)
-
-
-
-
-
-
-

Usage

-
import machine
-
-dac = machine.DAC(machine.Pin(26))
-dac.write(128)
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/gpio.html b/en_build/html/api-reference/peripherals/gpio.html deleted file mode 100644 index e207ae5f..00000000 --- a/en_build/html/api-reference/peripherals/gpio.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - - - - - - GPIO API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

GPIO API

-
-
-

Function

-

value()

-
-
-
-

Usage

-
import machine
-
-pinout = machine.Pin(0, machine.Pin.OUT)
-pinout.value(1)
-
-pinin = machine.Pin(2, machine.Pin.IN)
-val = pinin.value()
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/i2c.html b/en_build/html/api-reference/peripherals/i2c.html deleted file mode 100644 index 3a2447e3..00000000 --- a/en_build/html/api-reference/peripherals/i2c.html +++ /dev/null @@ -1,397 +0,0 @@ - - - - - - - - - - - I2C API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

I2C API

-
-
-

Description

-

Both master and slave modes are supported -Master and slave modes can be used at the same time, on different I2C interfaces

-
-
-
-

Function

-
-

machine.I2C(id, mode, speed, sda, scl, slave_addr, slave_bufflen, slave_rolen, slave_busy)

-
-
Description:
-
-
Create the I2C instance object
-
-
-
-
Parament:
-
-
id: The hardware I2C peripheral ID; 0 or 1 can be used. Default: 0
-
mode: I2C interface mode; master or slave. Use the constants machine.I2C.MASTER or machine.I2C.SLAVE Default: master
-
speed: I2C clock frequency in Hz. Default: 100000
-
sda: I2C sda pin; can be given as integer gpio number or Pin object
-
scl: I2C scl pin; can be given as integer gpio number or Pin object
-
slave_addr: I2C slave address to be assigned to this i2c interface. Only used if SLAVE mode is selected
-
slave_bufflen: Size of slave buffer used for master<->slave comunication in bytes
-
slave_rolen: Size of read-only area at the end of the slave buffer in bytes
-
slave_busy: Only used if SLAVE mode is selected
-
Note: Only sda and scl are required, all the others are optional and will be set to the default values if not given
-
-
-
-
-

init(args)

-
-
Description:
-
-
Reinitialize an existing I2C object
-
-
-
-
Parament:
-
-
The arguments are the same as for creating a new i2c instance object
-
-
-
-
-

scan()

-
-
Description:
-
-
Scan for i2c devices on I2C bus. Does not scan reserved 7-bit addresses: 0x00-0x07 & 0x78-0x7F
-
Note: can only be used in master mode
-
-
-
-
Parament:
-
-
None
-
-
-
-
Return:
-
-
Returns the list of detected addresses
-
-
-
-
-

readfrom(addr, nbytes)

-
-
Description:
-
-
Read nbytes bytes from i2c device with address addr
-
Note: can only be used in master mode
-
-
-
-
Parament:
-
-
None:
-
-
-
-
Return:
-
-
Return bytearray of read bytes
-
-
-
-
-

writeto(addr, buf [,stop=True])

-
-
Description:
-
-
Write the content of the buffer object buf to the i2c device with address adr
-
Note: can only be used in master mode
-
-
-
-
Parament:
-
-
Note: If optional stop argument is set to False, the stop signal is not issued
-
-
-
-
-

readfrom_into(addr, buf)

-
-
Description:
-
-
Read from i2c device with address addr into buffer object buf
-
Note: can only be used in master mode
-
-
-
-
Parament:
-
-
Note: Size of buf bytes are read
-
-
-
-
-
-
-

Usage

-
from machine import I2C
-
-i2c = I2C(freq=400000, sda=21, scl=22)
-                                # create I2C peripheral at frequency of 400kHz
-                                # depending on the port, extra parameters may be required
-                                # to select the peripheral and/or pins to use
-
-i2c.scan()                      # scan for slaves, returning a list of 7-bit addresses
-
-i2c.writeto(42, b'123')         # write 3 bytes to slave with 7-bit address 42
-i2c.readfrom(42, 4)             # read 4 bytes from slave with 7-bit address 42
-
-i2c.readfrom_mem(42, 8, 3)      # read 3 bytes from memory of slave 42,
-                                #   starting at memory-address 8 in the slave
-i2c.writeto_mem(42, 2, b'\x10') # write 1 byte to memory of slave 42
-                                #   starting at address 2 in the slave
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/index.html b/en_build/html/api-reference/peripherals/index.html deleted file mode 100644 index e5f8ef93..00000000 --- a/en_build/html/api-reference/peripherals/index.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - - - - Peripherals API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Peripherals API

-
- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/neopixel.html b/en_build/html/api-reference/peripherals/neopixel.html deleted file mode 100644 index 99d7ed4c..00000000 --- a/en_build/html/api-reference/peripherals/neopixel.html +++ /dev/null @@ -1,378 +0,0 @@ - - - - - - - - - - - Neopixel API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Neopixel API

-
-
-

Description

-

This class includes full support for various types of Neopixel, individually-addressable RGB(W) LEDs. -ESP32 RMT peripheral is used for very precise timing ( +/- 50 ns ). -Up to 8 Neopixel strips can be used, 1~1024 pixels each.

-
-
-
-

Function

-
-

machine.Neopixel(pin, pixels, type)

-
-
Description:
-
-
Create the Neopixel instance object
-
-
-
-
Parament:
-
-
pin: the data gpio which connects to rgb
-
pixels: The number of rgb
-
type: Neopixel type: 0 (machine.Neopixel.RGB) for RGB LEDs, or 1 (machine.Neopixel.RGBQ) for RGBW LEDs
-
-
-
-
Example:
-
-
import machine
-np = machine.Neopixel(22, 115, 0)
-npw = machine.Neopixel(machine.Pin(25), 24, machine.Neopixel.RGBW)
-
-
-
-
-

setHSB(pos, hue, saturation, brightness [, white, num, update] ))

-
-
Description:
-
-
Write bytes from buffer object buf to the Neopixel device
-
-
-
-
Parament:
-
-
pos: required, pixel position; 1 ~ pix_num
-
hue: float: any number, the floor of this number is subtracted from it
-
-
to create a fraction between 0 and 1.
-
This fractional number is then multiplied by 360 to produce the hue angle in the HSB color model
-
-
saturation: float; 0 ~ 1.0
-
brightness: float; 0 ~ 1.0
-
num: optional; default: 1; number of pixels to set to the same color, starting from pos
-
update: optional, default: True; update the Neopixel strip.
-
-
Note: If False np.show() has to be used to update the strip
-
-
-
-
-
Return:
-
-
None
-
-
-
-
Example:
-
-
import machine, time
-
-np = machine.Neopixel(machine.Pin(22), 24)
-
-def rainbow(loops=120, delay=1, sat=1.0, bri=0.2):
-    for pos in range(0, loops):
-        for i in range(0, 24):
-            dHue = 360.0/24*(pos+i);
-            hue = dHue % 360;
-            np.setHSB(i, hue, sat, bri, 1, False)
-        np.show()
-        if delay > 0:
-            time.sleep_ms(delay)
-
-def blinkRainbow(loops=10, delay=250):
-    for pos in range(0, loops):
-        for i in range(0, 24):
-            dHue = 360.0/24*(pos+i);
-            hue = dHue % 360;
-            np.setHSB(i, hue, 1.0, 0.1, 1, False)
-        np.show()
-        time.sleep_ms(delay)
-        np.clear()
-        time.sleep_ms(delay)
-
-
-
-
-
-
-

Usage

-
import machine, time
-
-np = machine.Neopixel(machine.Pin(22), 24)
-
-def rainbow(loops=120, delay=1, sat=1.0, bri=0.2):
-    for pos in range(0, loops):
-        for i in range(0, 24):
-            dHue = 360.0/24*(pos+i);
-            hue = dHue % 360;
-            np.setHSB(i, hue, sat, bri, 1, False)
-        np.show()
-        if delay > 0:
-            time.sleep_ms(delay)
-
-def blinkRainbow(loops=10, delay=250):
-    for pos in range(0, loops):
-        for i in range(0, 24):
-            dHue = 360.0/24*(pos+i);
-            hue = dHue % 360;
-            np.setHSB(i, hue, 1.0, 0.1, 1, False)
-        np.show()
-        time.sleep_ms(delay)
-        np.clear()
-        time.sleep_ms(delay)
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/rtc.html b/en_build/html/api-reference/peripherals/rtc.html deleted file mode 100644 index a1f88bd3..00000000 --- a/en_build/html/api-reference/peripherals/rtc.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - - - - - RTC API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

RTC API

-
-
-

Description

-

The content of the RTC memory is preserved during the deep sleep.

-

Up to 64 32-bit integers can be saved in RTC memory.

-

One string of up to 2048 characters can be saved in RTC memory. -The string can be, for example, json string containing the parameters which has to be restored after deep sleep wake-up.

-

Integers and string saved in RTC memory are protected by 16-bit CRC

-
-
-
-

Function

-
-

machine.RTC()

-
-
Description:
-
-
Create the RTC instance object
-
-
-
-
-

init(date)

-
-
Description:
-
-
Set the system time and date
-
-
-
-
Parament:
-
-
date: it’s a tuple containing the time and date information
-
-
Note: the tuple is equal to (year, month, day [,hour [,minute [, second ]]])
-
-
-
-
-
-

now()

-
-
Description:
-
-
get the current time
-
-
-
-
Parament:
-
-
None
-
-
-
-
Return:
-
-
Return the current time as tuple: (year, month, day, hour, minute, second)
-
-
-
-
-

ntp_sync(server [,update_period] [,tz])

-
-
Description:
-
-
Write bytes from buffer object buf to the RTC device
-
-
-
-
Parament:
-
-
server : the NTP server domain name or IP, for example “pool.ntp.org”
-
update_period: optional, time update interval in seconds; default: 3600
-
tz: optional, time zone string; default: the one set in menuconfig
-
-
-
-
Return:
-
-
Returns True on success, False ion error
-
-
-
-
Example:
-
-
import machine
-import utime
-
-rtc = machine.RTC()
-rtc.ntp_sync(server="hr.pool.ntp.org", tz="CET-1CEST")
-
-
-
-
-

synced()

-
-
Description:
-
-
Sync the system time from NTP server
-
-
-
-
Parament:
-
-
None:
-
-
-
-
Return:
-
-
Return True if the system time was synced from NTP server, False if not
-
-
-
-
-
-
-

Usage

-
import machine
-import utime
-
-rtc = machine.RTC()
-rtc.ntp_sync(server="hr.pool.ntp.org", tz="CET-1CEST")
-rtc.synced()
-True
-utime.gmtime()
-(2018, 1, 29, 16, 3, 18, 2, 29)
-utime.localtime()
-(2018, 1, 29, 17, 3, 30, 2, 29)
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/spi.html b/en_build/html/api-reference/peripherals/spi.html deleted file mode 100644 index d9af0d24..00000000 --- a/en_build/html/api-reference/peripherals/spi.html +++ /dev/null @@ -1,385 +0,0 @@ - - - - - - - - - - - SPI API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

SPI API

-
-
-

Description

-

This class includes full support for using ESP32 SPI peripheral in master mode

-

Only SPI master mode is supported for now.

-

Python exception wil be raised if the requested spihost is used by SD Card driver (sdcard in spi mode). -If the requested spihost is VSPI and the psRAM is used at 80 MHz, the exception will be raised. -The exception will be raised if SPI cannot be configured for given configurations.

-
-
-
-

Function

-
-

machine.spi(spihost, baudrate, polarity, phase, firstbit, sck, mosi, miso, cs, duplex, bits)

-
-
Description:
-
-
Create the spi instance object
-
-
-
-
Parament:
-
-
spihost: The hardware SPI host. machine-SPI.HSPI (1) or machine.SPI.VSPI (2) can be used. Default: 1
-
baudrate: SPI clock speed in Hz; Default: 1000000
-
-
-
-
Example:
-
-
from machine import SPI, Pin
-
-spi = SPI(
-    spihost=SPI.HSPI,
-    baudrate=2600000
-    sck=Pin(18),
-    mosi=Pin(23),
-    miso=Pin(19),
-    cs=Pin(4)
-)
-
-
-
-
-

write(buf)

-
-
Description:
-
-
Write bytes from buffer object buf to the SPI device
-
-
-
-
Parament:
-
-
buf: data buffer to be write
-
-
-
-
Return:
-
-
Returns True on success, False ion error
-
-
-
-
Example:
-
-
from machine import SPI, Pin
-
-spi = SPI(
-    spihost=SPI.HSPI,
-    baudrate=2600000
-    sck=Pin(18),
-    mosi=Pin(23),
-    miso=Pin(19),
-    cs=Pin(4)
-)
-
-spi.write(buf) #NOHEAP
-
-
-
-
-

write_readinto(wr_buf, rd_buf)

-
-
Description:
-
-
Write bytes from buffer object wr_buf to the SPI device and reads from SPI device into buffer object rd_buf
-
-
-
-
Parament:
-
-
wr_buf: data buffer to be write
-
rd_buf: data buffer to be read
-
*Note: * In fullduplex mode write and read are simultaneous. In halfduplex mode the data are first written to the device, then read from it
-
-
-
-
Return:
-
-
Returns True on success, False ion error
-
-
-
-
Example:
-
-
import machine
-
-adc = machine.ADC(35)
-adc.read()
-
-
-
-
-
-
-

Usage

-
from machine import SPI, Pin
-
-spi = SPI(
-    spihost=SPI.HSPI,
-    baudrate=2600000
-    sck=Pin(18),
-    mosi=Pin(23),
-    miso=Pin(19),
-    cs=Pin(4)
-)
-
-spi.write(buf) #NOHEAP
-spi.read(nbytes, *, write=0x00) #write is the byte to ?output on MOSI for each byte read in
-spi.readinto(buf, *, write=0x00) #NOHEAP
-spi.write_readinto(write_buf, read_buf) #NOHEAP; write_buf and read_buf can be the same
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/timer.html b/en_build/html/api-reference/peripherals/timer.html deleted file mode 100644 index 74baa040..00000000 --- a/en_build/html/api-reference/peripherals/timer.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - - - - - - Timer API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Timer API

-
-
-

Description

-

The ESP32 chip contains two hardware timer groups. Each group has two general-purpose hardware timers. They are all 64-bit generic timers based on 16-bit prescalers and 64-bit auto-reload-capable up / down counters.

-

Note: Due to MicroPython callback latency, some callbacks may not be executed if the timer period is less than 15 ms. -The number of events and executed callbacks can be checked using tm.events() method.

-
-
-
-

Function

-
-

machine.Timer(timer_no)

-
-
Description:
-
-
Create the Timer instance object
-
-
-
-
Parament:
-
-
timer_no: the timer number to be used for the timer
-
-
-
-
Example:
-
-
import machine
-
-p1 = machine.Pin(27)
-
-
-
-
-

init(period, mode, callback, dbgpin)

-
-
Description:
-
-
initialize paraments of the timer
-
-
-
-
Parament:
-
-
period: Timer period(Default: 10 ms)
-
-
Note: Timer period in ms, only used for PERIODIC and ONE_SHOT timers
-
-
mode: Timer mode of operation(Default: PERIODIC)
-
callback: The Python callback function to be executed on timer event(Default: None)
-
dbgpin: GPIO pin to be used as debug output(Default: -1 (not used))
-
-
Note: If used, the gpio level will toggle on each timer event
-
-
-
-
-
Return:
-
-
None
-
-
-
-
Example:
-
-
from machine import SPI, Pin
-
-spi = SPI(
-    spihost=SPI.HSPI,
-    baudrate=2600000
-    sck=Pin(18),
-    mosi=Pin(23),
-    miso=Pin(19),
-    cs=Pin(4)
-)
-
-spi.write(buf) #NOHEAP
-
-
-
-
-

value()

-
-
Description:
-
-
-
Return:
-
-
Returns the current timer counter value in µs if timer mode is CHRONO or in ms for other modes
-
-
-
-
Example:
-
-
import machine
-
-p1 = machine.Pin(27)
-p1.init(p1.OUT)
-p1.value(1)
-
-
-
-
-
-
-

Usage

-
import machine
-
-tcounter = 0
-
-p1 = machine.Pin(27)
-p1.init(p1.OUT)
-p1.value(1)
-
-def tcb(timer):
-    global tcounter
-    if tcounter & 1:
-        p1.value(0)
-    else:
-        p1.value(1)
-    tcounter += 1
-    if (tcounter % 10000) == 0:
-        print("[tcb] timer: {} counter: {}".format(timer.timernum(), tcounter))
-
-t1 = machine.Timer(2)
-t1.init(period=20, mode=t1.PERIODIC, callback=tcb)
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/peripherals/uart.html b/en_build/html/api-reference/peripherals/uart.html deleted file mode 100644 index a18b32d7..00000000 --- a/en_build/html/api-reference/peripherals/uart.html +++ /dev/null @@ -1,373 +0,0 @@ - - - - - - - - - - - UART API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

UART API

-
-
-

Description

-

An Universal Asynchronous Receiver/Transmitter (UART) is a component known to handle the timing requirements for a variety of widely-adapted protocols (RS232, RS485, RS422, …). -An UART provides a widely adopted and cheap method to realize full-duplex data exchange among different devices. -There are three UART controllers available on the ESP32 chip. They are compatible with UART-enabled devices from various manufacturers. All UART controllers integrated in the ESP32 feature an identical set of registers for ease of programming and flexibility. In this documentation, these controllers are referred to as UART0, UART1, and UART2.

-
-
-
-

Function

-
-

machine.UART(uart_num, tx=pin, rx=pin [,args])

-
-
Description:
-
-
Create the uart instance object
-
-
-
-
Parament:
-
-
uart_num: The hardware SPI host. machine-SPI.HSPI (1) or machine.SPI.VSPI (2) can be used. Default: 1
-
tx: the gpio used for tx
-
rx: the gpio used for rx
-
-
-
-
Example:
-
-
from machine import UART
-
-uart2 = UART(2, tx=17, rx=16)
-uart2.init(115200, bits=8, parity=None, stop=1)
-
-
-
-
-

write(buf [, len [, off]])

-
-
Description:
-
-
Write bytes from buffer object ḃuf to UART
-
-
-
-
Parament:
-
-
buf: data buffer to be write
-
len: writes ŀen bytes
-
off: starts writting from off position in buf
-
-
-
-
Example:
-
-
from machine import UART
-
-uart2 = UART(2, tx=17, rx=16)
-uart2.init(115200, bits=8, parity=None, stop=1)
-uart2.write('abc')   # write the 3 characters
-
-
-
-
-

read()

-
-
Description:
-
-
read all available characters
-
-
-
-
Example:
-
-
from machine import UART
-
-uart2 = UART(2, tx=17, rx=16)
-uart2.init(115200, bits=8, parity=None, stop=1)
-uart2.read()         # read all available characters
-
-
-
-
-

readline([max_len])

-
-
Description:
-
-
Reads all bytes from the receive buffer up to the line end character n
-
-
-
-
Parament:
-
-
max_len: maximum length to be read
-
-
-
-
Example:
-
-
from machine import UART
-
-uart2 = UART(2, tx=17, rx=16)
-uart2.init(115200, bits=8, parity=None, stop=1)
-uart2.readline()     # read a line
-
-
-
-
-
-
-

Usage

-
from machine import UART
-
-uart2 = UART(2, tx=17, rx=16)
-uart2.init(115200, bits=8, parity=None, stop=1)
-uart2.read(10)       # read 10 characters, returns a bytes object
-uart2.read()         # read all available characters
-uart2.readline()     # read a line
-uart2.readinto(buf)  # read and store into the given buffer
-uart2.write('abc')   # write the 3 characters
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/sd_card/sd_card.html b/en_build/html/api-reference/sd_card/sd_card.html deleted file mode 100644 index e35b079f..00000000 --- a/en_build/html/api-reference/sd_card/sd_card.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - - - - - - SD Card API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

SD Card API

-
-
-

Usage

-
import uos
-
-uos.mountsd()
-uos.listdir('/sd')
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/api-reference/speaker/speaker.html b/en_build/html/api-reference/speaker/speaker.html deleted file mode 100644 index 0eb26e25..00000000 --- a/en_build/html/api-reference/speaker/speaker.html +++ /dev/null @@ -1,311 +0,0 @@ - - - - - - - - - - - Speaker API — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Speaker API

-
-
-

Function

-
-

volume(volume)

-
-
Description:
-
-
Set the volume of sound
-
-
-
-
Parament:
-
-
volume: sound volume
-
-
-
-
Example:
-
-
from m5stack import *
-
-speaker.volume(2)
-speaker.tone(freq=1800)
-
-
-
-
-

tone(freq [, duration])

-
-
Description:
-
-
Speak a sound with frequency and duration
-
-
-
-
Parament:
-
-
frequency: the frequency of sound
-
duration: the duration of sound continued
-
-
-
-
Return:
-
-
None
-
-
-
-
Example:
-
-
from m5stack import *
-
-speaker.volume(2)
-speaker.tone(freq=1800)
-speaker.tone(freq=1800, duration=200) # Non-blocking
-
-
-
-
-
-
-

Usage

-
from m5stack import *
-
-speaker.volume(2)
-speaker.tone(freq=1800)
-speaker.tone(freq=1800, duration=200) # Non-blocking
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/basic-cases/esp32cam/index.html b/en_build/html/basic-cases/esp32cam/index.html deleted file mode 100644 index dc65303d..00000000 --- a/en_build/html/basic-cases/esp32cam/index.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - - ESP32CAM Cases — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

ESP32CAM Cases

-

Coming soon! Please wait!

-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/basic-cases/index.html b/en_build/html/basic-cases/index.html deleted file mode 100644 index 97c3f51c..00000000 --- a/en_build/html/basic-cases/index.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - - Basic Cases — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Basic Cases

- -

Coming soon! Please wait!

-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/basic-cases/m5go/index.html b/en_build/html/basic-cases/m5go/index.html deleted file mode 100644 index fa618560..00000000 --- a/en_build/html/basic-cases/m5go/index.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - - M5GO Cases — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5GO Cases

-

Coming soon! Please wait!

-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/basic-cases/m5stack-core/index.html b/en_build/html/basic-cases/m5stack-core/index.html deleted file mode 100644 index f9710959..00000000 --- a/en_build/html/basic-cases/m5stack-core/index.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - - M5Stack Core Cases — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack Core Cases

-

Coming soon! Please wait!

-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/genindex.html b/en_build/html/genindex.html deleted file mode 100644 index f6bb04f2..00000000 --- a/en_build/html/genindex.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - - Index — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- -
    - -
  • Docs »
  • - -
  • Index
  • - - -
  • - - - -
  • - -
- - -
-
-
-
- - -

Index

- -
- C - | E - -
-

C

- - -
- -

E

- - -
- - - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/M5GO/get_started_M5GO_ThermalCam.html b/en_build/html/get-started/M5GO/get_started_M5GO_ThermalCam.html deleted file mode 100644 index 34f46ef4..00000000 --- a/en_build/html/get-started/M5GO/get_started_M5GO_ThermalCam.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - - - - <no title> — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/M5Stack_Core_Get_Started.html b/en_build/html/get-started/M5Stack_Core_Get_Started.html deleted file mode 100644 index e35e4999..00000000 --- a/en_build/html/get-started/M5Stack_Core_Get_Started.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - - M5Stack Core Get Started — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack Core Get Started

-
-

Pick up your programming mode below for getting started

- ---- - - - - - - - - -
ArduinoBlockly/MicroPython
ArduinoBlockly/MicroPython
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/add-idf_path-to-profile.html b/en_build/html/get-started/add-idf_path-to-profile.html deleted file mode 100644 index 5688338d..00000000 --- a/en_build/html/get-started/add-idf_path-to-profile.html +++ /dev/null @@ -1,264 +0,0 @@ - - - - - - - - - - - Add IDF_PATH to User Profile — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Add IDF_PATH to User Profile

-

zh_CN:[中文]

-

To preserve setting of IDF_PATH environment variable between system restarts, add it to the user profile, following instructions below.

-
-

Windows

-

The user profile scripts are contained in C:/msys32/etc/profile.d/ directory. They are executed every time you open an MSYS2 window.

-
    -
  1. Create a new script file in C:/msys32/etc/profile.d/ directory. Name it export_idf_path.sh.

    -
  2. -
  3. Identify the path to ESP-IDF directory. It is specific to your system configuration and may look something like C:\msys32\home\user-name\esp\esp-idf

    -
  4. -
  5. Add the export command to the script file, e.g.:

    -
    export IDF_PATH="C:/msys32/home/user-name/esp/esp-idf"
    -
    -
    -

    Remember to replace back-slashes with forward-slashes in the original Windows path.

    -
  6. -
  7. Save the script file.

    -
  8. -
  9. Close MSYS2 window and open it again. Check if IDF_PATH is set, by typing:

    -
    printenv IDF_PATH
    -
    -
    -

    The path previusly entered in the script file should be printed out.

    -
  10. -
-

If you do not like to have IDF_PATH set up permanently in user profile, you should enter it manually on opening of an MSYS2 window:

-
export IDF_PATH="C:/msys32/home/user-name/esp/esp-idf"
-
-
-

If you got here from section get-started-setup-path, while installing s/w for ESP32 development, then go back to section get-started-start-project.

-
-
-

Linux and MacOS

-

Set up IDF_PATH by adding the following line to ~/.profile file:

-
export IDF_PATH=~/esp/esp-idf
-
-
-

Log off and log in back to make this change effective.

-
-

Note

-

If you have /bin/bash set as login shell, and both .bash_profile and .profile exist, then update .bash_profile instead.

-
-

Run the following command to check if IDF_PATH is set:

-
printenv IDF_PATH
-
-
-

The path previously entered in ~/.profile file (or set manually) should be printed out.

-

If you do not like to have IDF_PATH set up permanently, you should enter it manually in terminal window on each restart or logout:

-
export IDF_PATH=~/esp/esp-idf
-
-
-

If you got here from section get-started-setup-path, while installing s/w for ESP32 development, then go back to section get-started-start-project.

-
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/establish_serial_connection.html b/en_build/html/get-started/establish_serial_connection.html deleted file mode 100644 index d17c2d46..00000000 --- a/en_build/html/get-started/establish_serial_connection.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - - - - - Establish Serial Connection — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Establish Serial Connection

-

This section provides guidance how to establish serial connection -between your board and PC.

-
-

For MacOS

-
-

1. Install the USB driver

-

Download the SiLabs CP2104 -Driver

-

As the disk image SiLabsUSBDriverDisk.dmg is downloaded, mount it. -Proceed according to the instructions OK.

-../_images/macOS_CP2104_dmg.png -../_images/macOS_CP2104_pkg.png -../_images/2.png -../_images/3.png -../_images/4.png -../_images/5.png -../_images/6.png -../_images/7.png -../_images/8.png -../_images/9.png -
-
-

2. Check port on MacOS

-

To check the device name for the serial port of your your board board -(or external converter dongle), open terminal and run this command two -times, first with the board / dongle unplugged, then with plugged in. -The port which appears the second time is the one you need:

-

MacOS

-
ls /dev/cu.*
-
-
-
-
-
-

For Windows

-
-

1.Install the USB driver

-

Download the SiLabs CP2104 -Driver and choice the version of USB driver according to your windows -version(Windows7/8/10).

-../_images/windows_download_CP2104_USB_driver.png -

Choice the right version installer(x64/x86), and install it.

-../_images/windows_install_usb_driver01.png -../_images/windows_install_usb_driver02.png -../_images/windows_install_usb_driver03.png -
-
-

2. Check port on Windows

-

Check the list of identified COM ports in the Windows Device Manager. -Disconnect your board and connect it back, to verify which port -disappears from the list and then shows back again.

-

Figures below show serial port for M5Stack Core board

-../_images/windows_m5stack_in_device_manager.png -
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/get-started-ESP32CAM.html b/en_build/html/get-started/get-started-ESP32CAM.html deleted file mode 100644 index 9b9ee5dc..00000000 --- a/en_build/html/get-started/get-started-ESP32CAM.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - - - - - - ESP32CAM User Guide — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

ESP32CAM User Guide

-
-

1. Out-of-the-box Demo

-

It is really really out of the box. Your ESP32CAM will immediately run -without any code after you power it.

-
    -
  1. plug usb cable into ESP32CAM and open the serial terminal on your -computer.
  2. -
-../_images/ESP32CAM_Terminal.png -
    -
  1. Then waitting a few seconds, you connect to a AP named “M5CAM” -with your computer(or mobile phone).
  2. -
-../_images/ESP32CAM_M5CAM.png -
    -
  1. And you open the browser on the computer(or mobile phone), enter a -URL http://192.168.4.1. At the moment, your can see the real-time -transmission of video by ESP32CAM on the browser.
  2. -
-../_images/ESP32CAM_Browser.png -

Now, A WebCam you achieved successfully !

-
-

Note

-

ESP32CAM AP only can connect with one device at a time.

-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/get-started-M5Bala.html b/en_build/html/get-started/get-started-M5Bala.html deleted file mode 100644 index 9de0980b..00000000 --- a/en_build/html/get-started/get-started-M5Bala.html +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - - - - - M5Bala — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Bala

-

M5Stack balance car

-
-

Quick Start

-
git clone https://github.com/m5stack/M5Bala.git
-cd M5Bala
-pio run
-
-
-
-
-

Installing and compiling the software

-

This project used Arduino framework develop, you must install the -necessary tools and prepare the IDE environment. - Download (and unzip) -this repository - Download and Install Visual Studio Code -https://code.visualstudio.com/ - Install the PlatformIO -Extension - -Install M5Stack USB -Driver -- Install ESP32 Platform on PlatformIO - Open the M5Bala Project folder -on PlatformIO - Build your project with ctrl+alt+b hotkey or using -Build button on the PlatformIO Toolbar image

-
- -
-

MicroPython

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/get-started-StepMotor.html b/en_build/html/get-started/get-started-StepMotor.html deleted file mode 100644 index 4d285b9a..00000000 --- a/en_build/html/get-started/get-started-StepMotor.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - - - - M5Stack StepMotor Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack StepMotor Module

-

Now, we consident that you can program M5Stack Core with M5Cloud. If -not, please read the article Getting Started with -MicroPython

-
-

Quick Start

-
-

1. M5Stack Core connect with StepMotor Module

-

Click Upload Local File for adding two necessary files motor.py, i2c_bus.py as shown below

-../_images/upload_module_files.png -../_images/show_motors_files_added.png -
-
-

2. Copy the below code to main.py, upload all file and run

-
from m5stack import lcd
-import motor
-import utime
-
-lcd.clear()
-lcd.setCursor(0, 0)
-lcd.setColor(lcd.WHITE)
-lcd.print("StepMotor Test: ")
-
-stepmotor_0 = motor.StepMotor(0x70)
-
-stepmotor_0.StepMotor_XYZ(0, 0, 0, 500)
-utime.sleep(3)
-stepmotor_0.StepMotor_XYZ(10.5, 10.5, 10.5, 500)
-utime.sleep(3)
-stepmotor_0.StepMotor_XYZ(0, 0, 0, 500)
-
-
-
-

Note

-

When step motor is running, supply it with 12V power.*

-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/how_to_burn_firmware_en.html b/en_build/html/get-started/how_to_burn_firmware_en.html deleted file mode 100644 index b44cefad..00000000 --- a/en_build/html/get-started/how_to_burn_firmware_en.html +++ /dev/null @@ -1,301 +0,0 @@ - - - - - - - - - - - How to Burn Firmware — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

How to Burn Firmware

-

This article will guide you how to burn a right firmware to your board via M5Burner.

-
-

For MacOS

-

(Coming soon…)

-
-
-

For Windows

-
-

1. Download M5Burner

-

For downloading M5Burner, visit the offical -website please.

-../_images/download_M5Burner.png -
-
-

2. Burn the firmware

-

Unzip the M5Burner tool which you donwloaded for official website just now, then double click M5Burner.exe.

-../_images/burn_firmware_01.png -

Then choice the serial port which is connected with your board and -the Baud which is 921600 following below steps.

-../_images/burn_firmware_02.png -
-

Note

-

If it does not display any COMx port or only COM1 exists at the option, you need to visit this article establish_serial_connection and reinstall the USB driver.

-
-
-

a. Choice a right firmware

-
    -
  1. select M5Flow-vx.x option(the lastest version), if you want to program with -M5Flow
  2. -
  3. select M5GO-vx.x option(the lastest version), if you own a M5GO Kit
  4. -
  5. select M5Cam-vx.x (/M5Cam-psram) option, if you own a ESP32CAM (/ -M5CAMERA)
  6. -
-
-
-

b. Click Erase

-../_images/burn_firmware_06.png -

If M5Burner shows the information Hard resetting via RTS pin... -below, it means chip has been erased successfully.

-../_images/burn_firmware_04.png -
-
-

c. Click Burn

-../_images/burn_firmware_03.png -

If M5Burner shows the information Leaving... Staying in bootloader. -below, it means chip has been burnt successfully..

-../_images/burn_firmware_05.png -
-
-
-

3. Reset your board

-
-

Note

-
    -
  • If M5Burner means be busy after clicking Burn, please wait for a few minutes. It’ll be normal after the firmware has been burnt successfully.
  • -
  • If the burning procedure has been interrupted(like M5Burner has been closed suddenly…), it’s better to burn your board again.
  • -
-
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/how_to_connect_wifi_using_core.html b/en_build/html/get-started/how_to_connect_wifi_using_core.html deleted file mode 100644 index d050dbc1..00000000 --- a/en_build/html/get-started/how_to_connect_wifi_using_core.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - - - - - How to Connect WIFI Using Core — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

How to Connect WIFI Using Core

-

if it’s first time to use M5Stack Core or you want to change the networkable AP that means the Core can’t access http://flow.m5stack.com, please execute the following setps for setting wifi.

-
-

Connect Wi-Fi

-

Now, after you’ve pressed the upload buttom, the screen will show this message.

-../_images/m5stack_connet_wifi.png -

Then use Mobile Phone or PC for connectting to M5Stack AP(like M5Stack-a67c), and then open brower to login 192.168.4.1 for setting your networkable WIFI name and password. (Now, my networkable wifi is named MasterHax_5G)

-../_images/input_wifi_password.png -

After connecting wifi successfully, reset your core according to the prompt on 192.168.4.1

-../_images/connect_wifi_successfully.png -

Once you’ve reset M5Stack Core, the upload buttom, you will arrive at a screen with a QR code which you scan with your phone or tablet to start programming on your mobile device. If you want to program the M5 from your computer, enter the url shown at the top of the screen flow.m5stack.com

-../_images/apikey.jpg -
-

Note

-

Similarly, if you want another networkable WIFI AP to connect with Core, press the SETUP buttom while core was power-up.

-
-../_images/change_wifi.jpg -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/idf-monitor.html b/en_build/html/get-started/idf-monitor.html deleted file mode 100644 index 59b3e2b4..00000000 --- a/en_build/html/get-started/idf-monitor.html +++ /dev/null @@ -1,398 +0,0 @@ - - - - - - - - - - - IDF Monitor — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

IDF Monitor

-

zh_CN:[中文]

-

The IDF Monitor tool is a Python program which runs when the make monitor target is invoked in IDF.

-

It is mainly a serial terminal program which relays serial data to and from the target device’s serial port, but it has some other IDF-specific features.

-
-

Interacting With IDF Monitor

-
    -
  • Ctrl-] will exit the monitor.
  • -
  • Ctrl-T Ctrl-H will display a help menu with all other keyboard shortcuts.
  • -
  • Any other key apart from Ctrl-] and Ctrl-T is sent through the serial port.
  • -
-
-
-

Automatically Decoding Addresses

-

Any time esp-idf prints a hexadecimal code address of the form 0x4_______, IDF Monitor will use addr2line to look up the source code location and function name.

-

When an esp-idf app crashes and panics a register dump and backtrace such as this is produced:

-
Guru Meditation Error of type StoreProhibited occurred on core  0. Exception was unhandled.
-Register dump:
-PC      : 0x400f360d  PS      : 0x00060330  A0      : 0x800dbf56  A1      : 0x3ffb7e00
-A2      : 0x3ffb136c  A3      : 0x00000005  A4      : 0x00000000  A5      : 0x00000000
-A6      : 0x00000000  A7      : 0x00000080  A8      : 0x00000000  A9      : 0x3ffb7dd0
-A10     : 0x00000003  A11     : 0x00060f23  A12     : 0x00060f20  A13     : 0x3ffba6d0
-A14     : 0x00000047  A15     : 0x0000000f  SAR     : 0x00000019  EXCCAUSE: 0x0000001d
-EXCVADDR: 0x00000000  LBEG    : 0x4000c46c  LEND    : 0x4000c477  LCOUNT  : 0x00000000
-
-Backtrace: 0x400f360d:0x3ffb7e00 0x400dbf56:0x3ffb7e20 0x400dbf5e:0x3ffb7e40 0x400dbf82:0x3ffb7e60 0x400d071d:0x3ffb7e90
-
-
-

IDF Monitor will augment the dump:

-
Guru Meditation Error of type StoreProhibited occurred on core  0. Exception was unhandled.
-Register dump:
-PC      : 0x400f360d  PS      : 0x00060330  A0      : 0x800dbf56  A1      : 0x3ffb7e00
-0x400f360d: do_something_to_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:57
-(inlined by) inner_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:52
-A2      : 0x3ffb136c  A3      : 0x00000005  A4      : 0x00000000  A5      : 0x00000000
-A6      : 0x00000000  A7      : 0x00000080  A8      : 0x00000000  A9      : 0x3ffb7dd0
-A10     : 0x00000003  A11     : 0x00060f23  A12     : 0x00060f20  A13     : 0x3ffba6d0
-A14     : 0x00000047  A15     : 0x0000000f  SAR     : 0x00000019  EXCCAUSE: 0x0000001d
-EXCVADDR: 0x00000000  LBEG    : 0x4000c46c  LEND    : 0x4000c477  LCOUNT  : 0x00000000
-
-Backtrace: 0x400f360d:0x3ffb7e00 0x400dbf56:0x3ffb7e20 0x400dbf5e:0x3ffb7e40 0x400dbf82:0x3ffb7e60 0x400d071d:0x3ffb7e90
-0x400f360d: do_something_to_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:57
-(inlined by) inner_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:52
-0x400dbf56: still_dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:47
-0x400dbf5e: dont_crash at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:42
-0x400dbf82: app_main at /home/gus/esp/32/idf/examples/get-started/hello_world/main/./hello_world_main.c:33
-0x400d071d: main_task at /home/gus/esp/32/idf/components/esp32/./cpu_start.c:254
-
-
-

Behind the scenes, the command IDF Monitor runs to decode each address is:

-
xtensa-esp32-elf-addr2line -pfiaC -e build/PROJECT.elf ADDRESS
-
-
-
-
-

Launch GDB for GDBStub

-

By default, if an esp-idf app crashes then the panic handler prints registers and a stack dump as shown above, and then resets.

-

Optionally, the panic handler can be configured to run a serial “gdb stub” which can communicate with a gdb debugger program and allow memory to be read, variables and stack frames examined, etc. This is not as versatile as JTAG debugging, but no special hardware is required.

-

To enable the gdbstub, run make menuconfig and set CONFIG_ESP32_PANIC option to Invoke GDBStub.

-

If this option is enabled and IDF Monitor sees the gdb stub has loaded, it will automatically pause serial monitoring and run GDB with the correct arguments. After GDB exits, the board will be reset via the RTS serial line (if this is connected.)

-

Behind the scenes, the command IDF Monitor runs is:

-
xtensa-esp32-elf-gdb -ex "set serial baud BAUD" -ex "target remote PORT" -ex interrupt build/PROJECT.elf
-
-
-
-
-

Quick Compile and Flash

-

The keyboard shortcut Ctrl-T Ctrl-F will pause IDF Monitor, run the make flash target, then resume IDF Monitor. Any changed source files will be recompiled before re-flashing.

-

The keyboard shortcut Ctrl-T Ctrl-A will pause IDF Monitor, run the make app-flash target, then resume IDF Monitor. This is similar to make flash, but only the main app is compiled and reflashed.

-
-
-

Quick Reset

-

The keyboard shortcut Ctrl-T Ctrl-R will reset the target board via the RTS line (if it is connected.)

-
-
-

Pause the Application

-

The keyboard shortcut Ctrl-T Ctrl-P will reset the target into bootloader, so that the board will run nothing. This is -useful when you want to wait for another device to startup. Then shortcut Ctrl-T Ctrl-R can be used to restart the -application.

-
-
-

Toggle Output Display

-

Sometimes you may want to stop new output printed to screen, to see the log before. The keyboard shortcut Ctrl-T Ctrl-Y will -toggle the display (discard all serial data when the display is off) so that you can stop to see the log, and revert -again quickly without quitting the monitor.

-
-
-

Filtering the Output

-

The IDF monitor can be invoked as make monitor PRINT_FILTER="" with -specifying a custom PRINT_FILTER option for filtering outputs. The default -value is an empty string which means that everything will be printed. -Restrictions on what to print can be specified as a series of -<tag>:<log_level> items where <tag> is the tag string and -<log_level> is a character from set {N, E, W, I, D, V, *} referring to -a level for logging. For example, -PRINT_FILTER="tag1:W" will match and print (only) the outputs written with -ESP_LOGW("tag1", ...) or at lower verbosity level, i.e. ESP_LOGE("tag1", -...). Not specifying a -<log_level> or using * defaults to Verbose level.

-
-

Note

-

The primary logging is set up at compilation time through the -logging library. -Output filtering by the IDF monitor is only a secondary solution because -one cannot filter something which has been disabled at compilation time. -The advantage of the secondary filtering is that one can use various -filtering options without recompiling the application.

-
-

A restriction applies to tags when one wants to use them together with output -filtering: they cannot contain spaces, asterisks * and semicolons :.

-

If the last line of the output is written without an end of line then the -output filtering might get confused, i.e. the monitor starts to print the line and only -later finds out that the line should have not been written. This is a known -issue and can be avoided by always adding an end of line after printing -something (especially when no output follows immediately afterwards).

-
-

Examples Of Filtering Rules:

-
    -
  • Asterisk can be used to match any tags. However, specifying -PRINT_FILTER="*:I tag1:E" will print for tag1 only errors because -the rule for tag1 has a precedence over the rule for *.
  • -
  • The default (empty) rule is equivalent to *:V because matching every tag -at level Verbose or lower means matching everything.
  • -
  • Rule "tag1:W tag1:E" is equivalent to "tag1:E" because any -consequent occurrence of the same tag name overwrites the previous one.
  • -
  • Rule "tag1:I tag2:W" will print only tag1 at verbosity level Info or -lower and tag2 at verbosity level Warning or lower.
  • -
  • Rule "tag1:I tag2:W tag3:N" is essentially equivalent to the previous -one because tag3:N specifies that tag3 should not be printed.
  • -
  • tag3:N in rule "tag1:I tag2:W tag3:N *:V" is more meaningful because -in this context the result will be that tag3 will not be printed, -tag1 and tag2 will be at the specified (or lower) verbosity level -and everything else will be printed by default.
  • -
  • "*:N" will suppress all outputs even prints made by something else than -the logging functions, e.g. printf. For printing those outputs one need -to use *:E or higher verbosity level.
  • -
  • Rules "tag1:V", "tag1:v", "tag1:", "tag1:*" and "tag1" -are all equivalent ones.
  • -
-
-
-

A More Complex Filtering Example

-

The following log snippet was acquired using make monitor:

-
load:0x40078000,len:13564
-entry 0x40078d4c
-E (31) esp_image: image at 0x30000 has invalid magic byte
-W (31) esp_image: image at 0x30000 has invalid SPI mode 255
-E (39) boot: Factory app partition is not bootable
-I (568) cpu_start: Pro cpu up.
-I (569) heap_init: Initializing. RAM available for dynamic allocation:
-I (603) cpu_start: Pro cpu start user code
-D (309) light_driver: [light_init, 74]:status: 1, mode: 2
-D (318) vfs: esp_vfs_register_fd_range is successful for range <54; 64) and VFS ID 1
-I (328) wifi: wifi driver task: 3ffdbf84, prio:23, stack:4096, core=0
-
-
-

The captured output for make monitor PRINT_FILTER="wifi esp_image:E light_driver:I" is the following:

-
E (31) esp_image: image at 0x30000 has invalid magic byte
-I (328) wifi: wifi driver task: 3ffdbf84, prio:23, stack:4096, core=0
-
-
-

make monitor PRINT_FILTER="light_driver:D esp_image:N boot:N cpu_start:N vfs:N wifi:N *:V" gives the following output:

-
load:0x40078000,len:13564
-entry 0x40078d4c
-I (569) heap_init: Initializing. RAM available for dynamic allocation:
-D (309) light_driver: [light_init, 74]:status: 1, mode: 2
-
-
-
-
-
-

Simple Monitor

-

Earlier versions of ESP-IDF used the pySerial command line program miniterm as a serial console program.

-

This program can still be run, via make simple_monitor.

-

IDF Monitor is based on miniterm and shares the same basic keyboard shortcuts.

-
-
-

Known Issues with IDF Monitor

-
-

Issues Observed on Windows

-
    -
  • If you are using the supported Windows environment and receive the error “winpty: command not found” then run pacman -S winpty to fix.
  • -
  • Arrow keys and some other special keys in gdb don’t work, due to Windows Console limitations.
  • -
  • Occasionally when “make” exits, it may stall for up to 30 seconds before idf_monitor resumes.
  • -
  • Occasionally when “gdb” is run, it may stall for a short time before it begins communicating with the gdbstub.
  • -
-
-
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/index.html b/en_build/html/get-started/index.html deleted file mode 100644 index 3065043e..00000000 --- a/en_build/html/get-started/index.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - - - - - - Get Started — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Get Started

-

This document is intended to help users set up the software environment for development of applications. Through a simple example we would like to illustrate how to develop M5Stack boards, firmware(Arduino IDE), Blockly or source files(Micropython) download to M5Stack boards.

-
-

Introduction

-
-
-

What You Need

-

To develop applications for M5Stack Core you need:

-
    -
  • PC loaded with either Windows, Linux or Mac operating system
  • -
  • a M5Stack Core with Type-C cable
  • -
-
-
-

Your boards

-
-

Note

-

Make sure you have installed USB driver so that your board can establish serial connection with PC. If not, please view this article establish_serial_connection for connection.

-
-

At the first time, you need to burn the specific firmware file(.bin) to your board following this article How to burn firmware befor developing it.

-

If you have one of ESP32 development boards listed below, click the corresponding one to start your development.

- ----- - - - - - - - - - - - - - - - - - - -
M5Stack CoreM5GOM5CAMERA
M5Stack CoreM5GOM5CAMERA
M5BalaM5Stack STEPMOTORM5CAMERA
M5BalaM5Stack STEPMOTORM5CAMERA
-
-
-
-
-

Which programming mode you like

-

For being familiar with the programming mode you lik, We suggest you following the corresponding option to do more practices.

- ----- - - - - - - - - - - -
ArduinoBlocklyMicroPython
ArduinoBlocklyMicroPython
-
- -
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/m5stack_core_get_started.html b/en_build/html/get-started/m5stack_core_get_started.html deleted file mode 100644 index e35e4999..00000000 --- a/en_build/html/get-started/m5stack_core_get_started.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - - M5Stack Core Get Started — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack Core Get Started

-
-

Pick up your programming mode below for getting started

- ---- - - - - - - - - -
ArduinoBlockly/MicroPython
ArduinoBlockly/MicroPython
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/m5stack_core_get_started_Arduino_MacOS.html b/en_build/html/get-started/m5stack_core_get_started_Arduino_MacOS.html deleted file mode 100644 index 5639e938..00000000 --- a/en_build/html/get-started/m5stack_core_get_started_Arduino_MacOS.html +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - - - - - - M5Stack Core Get Started(MacOS, Arduino) — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack Core Get Started(MacOS, Arduino)

-
-

Note

-

If your OS is Windows, please click here.

-
- -
-

Setting Environment

-
-

Note

-

Before setting the development environment, we suggest you confirm whether the USB driver was installed. If not, please visit this link establish_serial_connection.

-
-
-

1. Install Arduino IDE

-

If you don’t already have the Arduino IDE installed, make sure to -install it. You can download it here -https://www.arduino.cc/en/Main/Software

-../_images/macOS_download_arduino_ide.png -
-
-

2. ESP32 Board Support

-

Open Terminal (if you’ve never used the terminal before, it can be found -in Applications > Utilities > Terminal) and execute the following -command (copy->paste and hit enter):

-
mkdir -p ~/Documents/Arduino/hardware/espressif && \
-cd ~/Documents/Arduino/hardware/espressif && \
-git clone https://github.com/espressif/arduino-esp32.git esp32 && \
-cd esp32 && \
-git submodule update --init --recursive && \
-cd tools && \
-python get.py
-
-
-

Where ~/Documents/Arduino represents your default sketch book location. -If you encounter any problems it could be that your Arduino sketchbook -folder is in a different location. This can be found by running arduino -and navigating through the menu to “Arduino” > “Preferences” > -“Sketchbook location”. Adjust the command above accordingly if -necessary!

-
-

Note

-
    -
  • If you get the error below: xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),
  • -
-
-
missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun, install the command line dev tools by typing xcode-select --install into the terminal and hit enter. once installed try the command above again and restart the Arduino IDE.
-
    -
  • If you get the error: IOError: [Errno socket error] [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol
  • -
-
-
version (_ssl.c:590) when running python get.py, try python3 instead of python and restart the Arduino IDE.
-
-
-
-

3. Install M5Stack Library

-

Start up the Arduino IDE, then Select -Sketch->``Include Library``->``Manage Libraries…`` Type -M5Stack into the search box, choose the library marked “Library for -M5Stack Core development kit” and install it.

-../_images/macOS_install_m5stack_lib.png -../_images/macOS_search_m5stack.png -
-
-
-

Upload an Example Sketch

-
-

1. Select your board and the serial port

-

After connecting the M5 to your computer via the USB cable. Start up the -Arduino IDE, and click Tools -> Boards -> M5Stack-Core-ESP32 to -select your board

-../_images/macOS_select_board.png -

Click Tools -> Ports -> to select the serial port which your M5Stack -Core is connected to. It should be called something like -/dev/cu.SLAB_USBtoUART

-../_images/macOS_select_serial_port.png -
-
-

2. Select an example

-

Click File-> Examples. there are some test programs in M5Stack->

-

Try to open a sketch called HelloWorld inside Basics.

-../_images/macOS_select_example.png -

Compile and upload it, the M5Stack screen will show “Hello World!”

-../_images/display_hello_world.png -
-
-
-

Note

-

Although most versions of MacOS have no problem with detecting the COM -port, on some newer versions of High Sierra sometimes Slab_USBtoUART -does not appear. If this is the case, after you connect the M5 open -security and privacy in the system preferences and set it to -permit.

-../_images/macOS_security_and_privacy.png -../_images/macOS_security_and_privacy_01.png -../_images/macOS_security_and_privacy_02.png -
-

Note

-
-
If you want to read more the permission about the CP2104 USB driver, visit the below link please.
-
https://developer.apple.com/library/archive/technotes/tn2459/_index.html
-
-
-
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/m5stack_core_get_started_Arduino_Windows.html b/en_build/html/get-started/m5stack_core_get_started_Arduino_Windows.html deleted file mode 100644 index 983796b7..00000000 --- a/en_build/html/get-started/m5stack_core_get_started_Arduino_Windows.html +++ /dev/null @@ -1,310 +0,0 @@ - - - - - - - - - - - M5Stack-Core Get Started(Windows, Arudino) — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack-Core Get Started(Windows, Arudino)

-
-

Note

-

If your OS is MacOS, please click here.

-
-
-

CONTENT

-
    -
  1. Setting Environment -
  2. -
  3. Example
  4. -
-
-

Note

-

If you want to upgrade the M5Stack Lib, please view this article upgrade M5Stack Lib

-
-
-
-

Setting Environment

-
-

Note

-

Before setting the development environment, we suggest you confirm whether the USB driver has installed. If not, please view this article establish_serial_connection.

-
-
-

1. Install Git

-

If you has installed Git, please following setp 2 straight. Otherwise, download the client of Git and install it.

-
-
-

2. Install Arduino IDE

-

download address

-

https://www.arduino.cc/en/Main/Software

-../_images/arduino_cc_package.png -

Double click to install Arduino IDE

-../_images/select_arduino_install_path.png -../_images/install_arduino_2.png -
-
-

3. Download Arduino-ESP32 Support

-

Download the batch file download_arduino_esp32_support.bat, and execte it as Administrator.

-../_images/execute_batch_file.png -

Then a new window will appear as shown below. Please waiting for cloning…

-../_images/execute_batch_file_for_downloading_arduino_esp32.png -

As shown below, it means Arduino-ESP32 Support has completed.

-../_images/download_arduino_esp32_completed.png -
-
-

4. Download the M5Stack Lib

-

Open Arduino IDE, then Select Sketch -> Include Library -> Manage Libraries... Search M5Stack and install it

-../_images/install_m5stack_lib_01.png -../_images/install_m5stack_lib_02.png -
-

Note

-

As shown below, it means you need update

-../_images/update_m5stack_lib.png -
-
-
-
-

Example

-

The USB cable connects to M5Stack Core, then select your serial port which is connected M5Stack Core. Select a demo example, compile and upload.

-
-

1. Execute a example likes FactoryTest.ino

-

Select your board name, baudrate, the specified serial port: M5Stack-Core-ESP32, 921600, COM4(Now, my serial port which is connected with PC is COM4)

-../_images/select_board_baudrate_serial_port.png -

Then select an example likes FactoryTest.ino

-../_images/select_an_example.png -

Upload it

-../_images/arduino_upload.png -
-
-

2. New a M5Stack program

-

Open Arduino IDE, then new a .ino file, rename it as my_test.ino

-

Copy the below code to my_test.ino

-
#include <M5Stack.h>
-
-// the setup routine runs once when M5Stack starts up
-void setup(){tack
-
-  // Initialize the M5Stack object
-  M5.begin();
-
-  // LCD display
-  M5.Lcd.print("Hello World!");
-  M5.Lcd.print("M5Stack is running successfully!");
-}
-
-// the loop routine runs over and over again forever
-void loop() {
-
-}
-
-
-

compile it and upload, the M5Stack screen will show “Hello World!” “M5Stack is running successfully!”

-
-
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/m5stack_core_get_started_MicroPython.html b/en_build/html/get-started/m5stack_core_get_started_MicroPython.html deleted file mode 100644 index 7f20d2ef..00000000 --- a/en_build/html/get-started/m5stack_core_get_started_MicroPython.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - - - - - - M5Stack Core Get Started(Blockly/MicroPython) — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack Core Get Started(Blockly/MicroPython)

-

This article will guide you for getting started with Blockly(or MicroPython) through UIFlow.

-
-

Note

-

If your M5Stack Core was not burnt with a firmware in advance, please visit this article How to burn firmware for burnning.

-
-

First we need to know how to upload code onto the M5. After powering on Core and pressing the red button on the left hand side of the M5,you will be greeted by this screen.

-../_images/core_home_page.png -

After pressing the upload button you will arrive at a screen with a QR code which you scan with your phone or tablet to start programming on your mobile device. If you want to program the M5 from your computer, enter the url shown at the top of the screen flow.m5stack.com

-../_images/apikey.jpg -

After a few seconds if nothing is pressed the M5 will automatically run the code that was previously uploaded. If we want to upload new code we have to make sure we press the A button which is the upload button on this menu before the M5 boots the code in it’s memory.

-
-

Note

-

But if it’s first time to use M5Stack Core or you want to change the networkable AP that means the Core can’t access flow.m5stack.com, you need visit this article for setting wifi How to connect wifi using Core.

-
-
-

Program with Core

-

Visit the WebIDE, it will show as following figure.

-../_images/webide.png -

Whenever we want to upload code to the M5 from UI flow we need to make sure the device is paired.

-

So press the little gear in the top right corner of the screen and enter the APIKEY which shows on the screen of M5(Now, my APIKEY is 9C6469) and click SAVE.

-../_images/click_for_apikey.png -../_images/input_apikey.png -

Then M5Flow will connect with this Core.

-

At the moment, you can draw a UI or program it through Blockly(or Python) as shown below.

-
-

Note

-

Once you’ve run another program

-
-

1. Draw a UI

-

Drag 4 kinds of elements into M5Stack Core UI and click Run buttom on M5UI.Flow

-../_images/draw_ui.png -../_images/run_and_upload.png -

2. Program with Blockly

-

Drag some blocks named Set emoji map in0 from Emoji class and click Run buttom on M5UI.Flow

-../_images/draw_heart.png -../_images/run_and_upload.png -

3. Program with MicroPython

-
-
-

Play a song now

-

Now, let’s make a music player and play a song in a few minutes using M5Stack Core.

-

Drag a loop, music and timer block into the coding area from the components section.

-../_images/drag_loop_block.png -../_images/drag_music_block.png -../_images/drag_timer_block.png -

Then set parameters of music block and timer block as shown belown

-../_images/whole_program.png -

Now, run it and enjoy your musical work!

-
-

Note

-

Also, here some simple pratices and workshop for you being familiar with M5.

- -
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/practices_arduino.html b/en_build/html/get-started/practices_arduino.html deleted file mode 100644 index de70929f..00000000 --- a/en_build/html/get-started/practices_arduino.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - Practices with Arduino IDE — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Practices with Arduino IDE

-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/practices_blockly.html b/en_build/html/get-started/practices_blockly.html deleted file mode 100644 index 2cb0794a..00000000 --- a/en_build/html/get-started/practices_blockly.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - Practices with M5Flow(Blockly) — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Practices with M5Flow(Blockly)

-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/practices_micropython.html b/en_build/html/get-started/practices_micropython.html deleted file mode 100644 index 88d112e0..00000000 --- a/en_build/html/get-started/practices_micropython.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - Practices with M5Flow(MicroPython) — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Practices with M5Flow(MicroPython)

-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/get-started/upgrade_m5stack_lib.html b/en_build/html/get-started/upgrade_m5stack_lib.html deleted file mode 100644 index 74736f03..00000000 --- a/en_build/html/get-started/upgrade_m5stack_lib.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - - - - - Upgrade M5Stack Lib — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Upgrade M5Stack Lib

-
-

1. Start up Arduino IDE, then Select Sketch -> Include Library -> Manage Libraries...

-
-
-

2. Type M5Stack into the search box, search it.

-
-image -

image

-
-
-
-

3. If it shows as below figure, click Update.

-

But if it shows Install, it means you has not installed M5Stack Lib.

-
-image -

image

-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/index.html b/en_build/html/index.html deleted file mode 100644 index 90d1078d..00000000 --- a/en_build/html/index.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - - - - - M5Stack — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack

-

Welcome to M5Stack Documents!

-_images/m5stack.png -
-

Note

-

The green arrows designate “more info” links leading to advanced sections about the described task.

-
-

M5Stack is a series of stackable boards. We devote ourselves to develop this boards for lower development threshold and creating things more quickly.

-

Our a series of core boards are based on ESP32 chip.

-

Our aim is “Stackable Boards is Product”. Here’s the Official Website

-_images/transport.gif -

If you have any questions, you can contact us by Email or Forum. -If you want to get our products, access our store please.

- ----- - - - - - - - - - - - - - - - - - - -
Product DocumentsGet StartedAPI Reference
Product DocumentsGet StartedAPI Reference
M5Stack CasesM5Stack AwesomeFAQ
M5Stack CasesM5Stack AwesomeFAQ
-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/languages.html b/en_build/html/languages.html deleted file mode 100644 index 16e97550..00000000 --- a/en_build/html/languages.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - - - Switch Between Languages/切换语言 — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Switch Between Languages/切换语言

-

The documentation now has two language versions, however, please refer to the English version if there is any discrepancy.

-

本文档现在有两种语言的版本,如有出入请以英文版本为准。

-
    -
  • English/英文
  • -
  • Chinese/中文
  • -
-

You can easily changed from one language to another by the panel on the sidebar like below. Just click on the Read -the Docs title button on the left-bottom conner if it is folded.

-

如下图所示,你可使用边栏的面板进行语言的切换。如果该面板被折叠,点击左下角 Read the Docs 标题按钮来显示它。

-_images/choose_version.png -
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/m5stack-awesome/M5Stack-SD-Updater/index.html b/en_build/html/m5stack-awesome/M5Stack-SD-Updater/index.html deleted file mode 100644 index 07f0ef4c..00000000 --- a/en_build/html/m5stack-awesome/M5Stack-SD-Updater/index.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - M5Stack-SD-Updater — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack-SD-Updater

-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/m5stack-awesome/M5Widgets/index.html b/en_build/html/m5stack-awesome/M5Widgets/index.html deleted file mode 100644 index 80f547e7..00000000 --- a/en_build/html/m5stack-awesome/M5Widgets/index.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - M5Widgets — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Widgets

-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/m5stack-awesome/TFT_eSPI/index.html b/en_build/html/m5stack-awesome/TFT_eSPI/index.html deleted file mode 100644 index e7d0733c..00000000 --- a/en_build/html/m5stack-awesome/TFT_eSPI/index.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - TFT_eSPI — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

TFT_eSPI

-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/m5stack-awesome/awesome.html b/en_build/html/m5stack-awesome/awesome.html deleted file mode 100644 index b782ac77..00000000 --- a/en_build/html/m5stack-awesome/awesome.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - - - - Awesome — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Awesome

- -
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/m5stack-awesome/index.html b/en_build/html/m5stack-awesome/index.html deleted file mode 100644 index cb942fcb..00000000 --- a/en_build/html/m5stack-awesome/index.html +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - - - - - - M5Stack-awesome — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack-awesome

-
-
- -
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/m5stack-faq/M5Stack-Core/index.html b/en_build/html/m5stack-faq/M5Stack-Core/index.html deleted file mode 100644 index 274060e8..00000000 --- a/en_build/html/m5stack-faq/M5Stack-Core/index.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - M5Stack-Core FAQ — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack-Core FAQ

-

Note: -Thank you for being interested in our products and services, Please contact us by tech support email or forum if you need any assistance.

-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/m5stack-faq/index.html b/en_build/html/m5stack-faq/index.html deleted file mode 100644 index 4c6ac772..00000000 --- a/en_build/html/m5stack-faq/index.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - - - - - - - - M5Stack-FAQ — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack-FAQ

- -

Note: -Thank you for being interested in our products and services, Please contact us by tech support email or forum if you need any assistance.

-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/m5stack-faq/m5stack-module/index.html b/en_build/html/m5stack-faq/m5stack-module/index.html deleted file mode 100644 index 5e902f48..00000000 --- a/en_build/html/m5stack-faq/m5stack-module/index.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - - - - M5Stack-Module FAQ — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack-Module FAQ

-

Note: -Thank you for being interested in our products and services, Please contact us by tech support email or forum if you need any assistance.

-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/objects.inv b/en_build/html/objects.inv deleted file mode 100644 index 20c5a668..00000000 Binary files a/en_build/html/objects.inv and /dev/null differ diff --git a/en_build/html/product-documents/accessorries/cables/cable.html b/en_build/html/product-documents/accessorries/cables/cable.html deleted file mode 100644 index d5536698..00000000 --- a/en_build/html/product-documents/accessorries/cables/cable.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - - - <no title> — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/accessorries/headers_socket.html b/en_build/html/product-documents/accessorries/headers_socket.html deleted file mode 100644 index 06423dfa..00000000 --- a/en_build/html/product-documents/accessorries/headers_socket.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - - - Headers Socket — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Headers Socket

-
-

DESCRIPTION

-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/applications/BALA.html b/en_build/html/product-documents/applications/BALA.html deleted file mode 100644 index c59ec3d7..00000000 --- a/en_build/html/product-documents/applications/BALA.html +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - - - - - M5Stack BALA — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack BALA

-
-

DESCRIPTION

-

The M5Stack BALA is a balance bot based on M5Stack FIRE, including a 2 DC driver module based on Mega328p which is a core chip on Arduino UNO -You can even program The M5Stack BALA through Arduino or MicroPython with few code

-

The 2 DC driver module communicates with M5Stack FIRE through I2C bus. It’s default I2C address is 0x56

-
-
-

FEATURES

-
    -
  • Programming Support
  • -
  • Python
  • -
  • Compatible LEGO
  • -
  • POGO Pin
  • -
  • TF Card Support
  • -
-
-
-

PARAMETER

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModelM5Stack FIRE
ESP32240MHz dual core, 600 DMIPS, 4MB SRAM, Wi-Fi, dual mode Bluetooth
Flash16M-Bytes
Input5V @ 500mA
InterfaceTypeC x 1, GROVE(I2C+I/0+UART), Pogo Pin x 1
LCD2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker1W-0928
MicrophoneMEMS Analog BSE3729 Microphone
LEDSK6812 3535 RGB LED x 10
MEMSMPU6050, MAG3110
Battery550mAh @ 3.7V, inside
Op.Temp.32°F to 104°F ( 0°C to 40°C )
Size54 x 54 x 21 mm
C.A.S.EPlastic ( PC )
Weight56g
-
-
-

INCLUDES

-
    -
  • 1x M5Stack BALA
  • -
  • 1x Motor Driver
  • -
  • 2x N20(Encoder included)
  • -
  • Type-C USB Cable
  • -
-
-
-

DOCUMENTS

- - -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/bases/m5stack_plc.html b/en_build/html/product-documents/bases/m5stack_plc.html deleted file mode 100644 index b3857d16..00000000 --- a/en_build/html/product-documents/bases/m5stack_plc.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - - - - - M5Stack PLC Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack PLC Module

-
-

DESCRIPTION

-

The M5Stack PLC Module is a prototye industrial board, including RS484 -adapter and electricity meter module.

-

With DC9~24V power input, PLC-Proto motherboard reserved 6Pin or 4Pin -relay output, digital input, communication interface etc.

-
-
-

FEATURES

-
    -
  • Free DIY
  • -
  • Programmable Logic Controller
  • -
  • Individual package weight: 0.1kg (0.22lb.)
  • -
  • Package size: 5cm * 5cm * 5cm (1.97in * 1.97in * 1.97in)
  • -
-
-
-

INCLUDES

-
    -
  • 1x PLC-Proto Broad
  • -
  • 1x RS485 module
  • -
  • 1x PLC Plastic Enclosure
  • -
  • 1x Slide Guide
  • -
  • 1x Magnet
  • -
  • 1x 6 Pin 3.96 Pitch Terminal
  • -
  • 1x 4 Pin 3.96 Pitch Terminal
  • -
  • 3x Hex Key
  • -
  • 7x Electrical Terminal
  • -
  • 1x Sticker
  • -
-
-
-

Applications

-
    -
  • Programmable Logic Controller
  • -
  • Programmable Motion Controller
  • -
  • Digital Operation Processor
  • -
  • Strong Electric Controller
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/index.html b/en_build/html/product-documents/index.html deleted file mode 100644 index 1c4eca47..00000000 --- a/en_build/html/product-documents/index.html +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - - - - - - Product Documents — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Product Documents

-
-

M5Stack Core

-
-
- ---- - - - - - - - - -
BASICGRAY
FIREPANDA
-
-
-
- -
-

BASE

-
- -
-
-
-

ACCESSORY

- -
-
-

UNIT

-
-
- ----- - - - - - - - - - - - - - - - - - - - - - - -
ENVHUBIR
PIRPOTRGB
3.96PORTEARTHLIGHT
MAKEYPROTORELAY
THERMAL  
-
-
-
-
-

APPLICATION

-
- -
-
-
-

Tools

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/m5stack-core/index.html b/en_build/html/product-documents/m5stack-core/index.html deleted file mode 100644 index 895ed368..00000000 --- a/en_build/html/product-documents/m5stack-core/index.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - - - - - M5Stack Core Description — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
- -
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/m5stack-core/m5go.html b/en_build/html/product-documents/m5stack-core/m5go.html deleted file mode 100644 index b8d62f76..00000000 --- a/en_build/html/product-documents/m5stack-core/m5go.html +++ /dev/null @@ -1,318 +0,0 @@ - - - - - - - - - - - M5Stack M5GO — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack M5GO

-
-

DESCRIPTION

-

The M5Stack M5GO is a development kit based on ESP32 chip. You can even -program The M5Stack M5GO through Blockly, Arduino or MicroPython.

-

The M5Stack M5GO equips the ESP32 with everything necessary to program, -run and develop on the wonderchip. It also features a Six-Axis (Gyro + -Accelerometer), 3-Axis Digital Magnetometer, MEMS(MPU9250) and a TFT -LCD, so you can create a 3D remote gesture controller, a simple “Leap -Motion” via M5Stack M5GO in a day in stead of couple weeks and so on.

-
-
-

FEATURES

-
    -
  • Programming Support
  • -
  • Blockly
  • -
  • Arduino
  • -
  • Python
  • -
  • Compatible LEGO
  • -
  • TF Card Support
  • -
-
-
-

PARAMETER

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModelM5Stack M5GO
ESP32240MHz dual core, 600 DMIPS, 520KB SRAM, Wi-Fi, dual mode Bluetooth
Flash16M-Bytes
Input5V @ 500mA
InterfaceTypeC x 1, GROVE(I2C+I/0+UART), Pogo Pin x 1
LCD2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker1W-0928
MicrophoneMEMS Analog BSE3729 Microphone
LEDSK6812 3535 RGB LED x 10
MEMSMPU6050, MAG3110
Battery550mAh @ 3.7V, inside
Op.Temp.32°F to 104°F ( 0°C to 40°C )
Size54 x 54 x 21 mm
C.A.S.EPlastic ( PC )
Weight56g
-
-
-

INCLUDES

-
    -
  • 1x M5Stack M5GO
  • -
  • 1x M5GO Bottom
  • -
  • 1x ENV Unit
  • -
  • 1x IR Unit
  • -
  • 1x RGB Unit
  • -
  • 1x PIR Unit
  • -
  • 1x POT Unit
  • -
  • 1x HUB Unit
  • -
  • Type-C USB Cable
  • -
  • User Manual
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/m5stack-core/m5stack_basic.html b/en_build/html/product-documents/m5stack-core/m5stack_basic.html deleted file mode 100644 index d0fb540e..00000000 --- a/en_build/html/product-documents/m5stack-core/m5stack_basic.html +++ /dev/null @@ -1,306 +0,0 @@ - - - - - - - - - - - M5Stack BASIC — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack BASIC

-
-

DESCRIPTION

-

The M5Stack BASIC is a development kit based on ESP32 chip. You can even -program The M5Stack BASIC through Blockly, Arduino or MicroPython.

-

The M5Stack BASIC equips the ESP32 with everything necessary to program, -and a TFT LCD, so you can create a 3D remote gesture controller, a -simple “Leap Motion” via M5Stack BASIC in a day in stead of couple weeks -and so on.

-
-
-

FEATURES

-
    -
  • Programming Support
  • -
  • Arduino
  • -
  • ESP-IDF
  • -
  • MicroPython
  • -
  • TF Card Support
  • -
-
-
-

PARAMETER

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModelM5Stack BASIC
ESP32240MHz dual core, 600 DMIPS, 520K, Wi-Fi, dual mode Bluetooth
Flash4M-Bytes
Input5V @ 500mA
InterfaceTypeC x 1, GROVE(I2C+I/0+UART) x 1
LCD2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker1W-0928
Battery150mAh @ 3.7V, inside
Op.Temp.32°F to 104°F ( 0°C to 40°C )
Size54 x 54 x 12.5 mm
C.A.S.EPlastic ( PC )
Weight120g with bottom, 100g only core
-
-
-

INCLUDES

-
    -
  • 1x M5Stack BASIC
  • -
  • 1x M5Stack BASIC Bottom
  • -
  • Type-C USB Cable
  • -
  • User Manual
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/m5stack-core/m5stack_faces.html b/en_build/html/product-documents/m5stack-core/m5stack_faces.html deleted file mode 100644 index 3883d9ae..00000000 --- a/en_build/html/product-documents/m5stack-core/m5stack_faces.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - - - - - - M5Stack FACES — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack FACES

-
-

DESCRIPTION

-

The M5Stack FACES is a development kit based on ESP32 chip compatible -with three different KeyBoards( 26 letters KeyBoard, Gameboy KeyBoard -and Calculator KeyBoard).

-

You can even program The M5Stack FACES through Blockly, Arduino or -MicroPython. Absolutely, you can DIY many classify GameBoy games as you -like, such as Super Mario, Tetris and so on.You also make a remotely -controlled calculator, or a Somatosensory game remote controller.

-
-
-

FEATURES

-
    -
  • Programming Support
  • -
  • Blockly
  • -
  • Arduino
  • -
  • Python
  • -
  • Compatible LEGO
  • -
  • Support Nintendo emulator
  • -
  • TF Card Support
  • -
-
-
-

PARAMETER

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModelM5Stack GrayCore
ESP32240MHz dual core, 600 DMIPS, 4MB SRAM, Wi-Fi, dual mode Bluetooth
Flash16M-Bytes
Input5V @ 500mA
InterfaceTypeC x 1, GROVE(I2C+I/0+UART), Pogo Pin x 1
Extend PinBus/GPIO Extend
LCD2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker1W-0928
MEMSMPU9250
Battery650mAh @ 3.7V, inside
Op.Temp.32F to 104F ( 0C to 40C )
Size54 x 54 x 21 mm
C.A.S.EPlastic ( PC )
Weight56g?
-
-
-

INCLUDES

-
    -
  • 1x M5Stack GrayCore
  • -
  • 1x KeyBoard
  • -
  • 1x Gameboy
  • -
  • 1x Calculator
  • -
  • 1x FaceBottom
  • -
  • 1x CHG base
  • -
  • Type-C USB Cable
  • -
  • User Manual
  • -
-
-
-

Applications

-
    -
  • DIY Gameboy Games:
  • -
  • Nintendo emulator
  • -
  • Tetris
  • -
  • DIY Calculator
  • -
  • DIY PocketComputer
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/m5stack-core/m5stack_fire.html b/en_build/html/product-documents/m5stack-core/m5stack_fire.html deleted file mode 100644 index 24911a9c..00000000 --- a/en_build/html/product-documents/m5stack-core/m5stack_fire.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - - - - M5Stack FIRE — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack FIRE

-
-

DESCRIPTION

-

The M5Stack FIRE is a development kit based on ESP32 chip. You can even -program The M5Stack FIRE through Blockly, Arduino or MicroPython.

-

The M5Stack FIRE equips the ESP32 with everything necessary to program, -run and develop on the wonderchip. It also features a Six-Axis (Gyro + -Accelerometer) MEMS (MPU-6050), a 3-Axis Digital Magnetometer (MAG3110) -and a TFT LCD, so you can create a 3D remote gesture controller, a -simple “Leap Motion” via M5Stack FIRE in a day in stead of couple weeks -and so on.

-
-
-

FEATURES

-
    -
  • Programming Support
  • -
  • Blockly
  • -
  • Arduino
  • -
  • Python
  • -
  • Compatible LEGO
  • -
  • TF Card Support
  • -
-
-
-

PARAMETER

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModelM5Stack FIRE
ESP32240MHz dual core, 600 DMIPS, 4MB SRAM, Wi-Fi, dual mode Bluetooth
Flash16M-Bytes
Input5V @ 500mA
InterfaceTypeC x 1, GROVE(I2C+I/0+UART), Pogo Pin x 1
LCD2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker1W-0928
MicrophoneMEMS Analog BSE3729 Microphone
LEDSK6812 3535 RGB LED x 10
MEMSMPU6050, MAG3110
Battery550mAh @ 3.7V, inside
Op.Temp.32°F to 104°F ( 0°C to 40°C )
Size54 x 54 x 21 mm
C.A.S.EPlastic ( PC )
Weight56g
-
-
-

INCLUDES

-
    -
  • 1x M5Stack FIRE
  • -
  • 1x M5GO Bottom
  • -
  • 1x M5GO CHG BASE
  • -
  • Type-C USB Cable
  • -
  • User Manual
  • -
-
-
-

DOCUMENTS

- -
-
-

READ MORE

-
-

Diagram of Fire

-../../_images/simple_sch_just_for_fire.jpg -../../_images/interface_fire.jpg -
-
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/m5stack-core/m5stack_gray.html b/en_build/html/product-documents/m5stack-core/m5stack_gray.html deleted file mode 100644 index 495f9f38..00000000 --- a/en_build/html/product-documents/m5stack-core/m5stack_gray.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - - - - - - M5Stack GRAY — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack GRAY

-
-

DESCRIPTION

-

The M5Stack GRAY is a development kit based on ESP32 chip. You can even -program The M5Stack GRAY through Blockly, Arduino or MicroPython.

-

The M5Stack GRAY equips the ESP32 with everything necessary to program, -run and develop on the wonderchip. It also features a Six-Axis (Gyro + -Accelerometer), 3-Axis Digital Magnetometer, MEMS(MPU9250), and a TFT -LCD, so you can create a 3D remote gesture controller, a simple “Leap -Motion” via M5Stack GRAY in a day in stead of couple weeks and so on.

-
-
-

FEATURES

-
    -
  • Programming Support
  • -
  • Arduino
  • -
  • ESP-IDF
  • -
  • MicroPython
  • -
  • TF Card Support
  • -
-
-
-

PARAMETER

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModelM5Stack GRAY
ESP32240MHz dual core, 600 DMIPS, 520K, Wi-Fi, dual mode Bluetooth
Flash4M-Bytes
Input5V @ 500mA
InterfaceTypeC x 1, GROVE(I2C+I/0+UART) x 1
LCD2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker1W-0928
MEMSMPU9250
Battery150mAh @ 3.7V, inside
Op.Temp.32°F to 104°F ( 0°C to 40°C )
Size54 x 54 x 12.5 mm
C.A.S.EPlastic ( PC )
Weight120g with bottom, 100g only core
-
-
-

INCLUDES

-
    -
  • 1x M5Stack GRAY
  • -
  • 1x M5Stack Core Bottom
  • -
  • Type-C USB Cable
  • -
  • User Manual
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/m5stack-core/m5stack_panda.html b/en_build/html/product-documents/m5stack-core/m5stack_panda.html deleted file mode 100644 index dcea2f3e..00000000 --- a/en_build/html/product-documents/m5stack-core/m5stack_panda.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - - - - - M5Stack PANDA — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack PANDA

-
-

DESCRIPTION

-

The M5Stack PANDA is a development kit based on ESP32 chip. You can even -program The M5Stack PANDA through Blockly, Arduino or MicroPython.

-

The M5Stack PANDA equips the ESP32 with everything necessary to program, -and a TFT LCD, so you can create a 3D remote gesture controller, a -simple “Leap Motion” via M5Stack PANDA in a day in stead of couple weeks -and so on.

-
-
-

FEATURES

-
    -
  • Programming Support
  • -
  • Arduino
  • -
  • ESP-IDF
  • -
  • MicroPython
  • -
  • TF Card Support
  • -
-
-
-

PARAMETER

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModelM5Stack PANDA
ESP32240MHz dual core, 600 DMIPS, 520K, Wi-Fi, dual mode Bluetooth
Flash4M-Bytes
Input5V @ 500mA
InterfaceTypeC x 1, GROVE(I2C+I/0+UART) x 1
LCD2 inch, 320x240 Colorful TFT LCD, ILI9342
Speaker1W-0928
Battery150mAh @ 3.7V, inside
Op.Temp.32°F to 104°F ( 0°C to 40°C )
Size54 x 54 x 12.5 mm
C.A.S.EPlastic ( PC )
Weight120g with bottom, 100g only core
-
-
-

INCLUDES

-
    -
  • 1x M5Stack PANDA
  • -
  • 1x M5Stack BASIC Bottom
  • -
  • Type-C USB Cable
  • -
  • User Manual
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/esp32cam.html b/en_build/html/product-documents/modules/esp32cam.html deleted file mode 100644 index 462cccda..00000000 --- a/en_build/html/product-documents/modules/esp32cam.html +++ /dev/null @@ -1,291 +0,0 @@ - - - - - - - - - - - ESP32CAM — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

ESP32CAM

-
-

DESCRIPTION

-

The ESP32CAM is a tiny module based on ESP32 chip and OV2640. You can -even program the ESP32CAM through the ESP-IDF by installing the ESP32 -Core.

-

The ESP32CAM equips the ESP32 with everything necessary to program, run -and develop on the wonderful chip. It also features a LiPo charger -(IP5306) , so your ESP32CAM project can be battery-powered and truly -wireless. Additionally, the board reserved the MPU6050,BME280 and an -analog MIC.

-
-
-

INCLUDES

-
    -
  • 1x M5 Camera
  • -
  • 1x Type-C USB v
  • -
-
-
-

FEATURES

-
    -
  • ESP32 specifications
      -
    • Dual-core Tensilica LX6 microprocessor
    • -
    • Up to 240MHz clock frequency
    • -
    • 520kB internal SRAM
    • -
    • 4MB Flash memory
    • -
    • Integrated 802.11 BGN WiFi transceiver
    • -
    • Integrated dual-mode Bluetooth (classic and BLE)
    • -
    • Hardware accelerated encryption (AES, SHA2, ECC, RSA-4096)
    • -
    -
  • -
  • CP2104 USB TTL
  • -
  • OV2640 sensor
      -
    • Output Formats(8-bit):
        -
      • YUV(422/420)/YCbCr422
      • -
      • RGB565/555
      • -
      • 8-bit compressed data
      • -
      • 8-/10-bit Raw RGB data
      • -
      -
    • -
    • Maximum Image Transfer Rate
        -
      • UXGA/SXGA: 15fps
      • -
      • SVGA: 30fps
      • -
      • CIF: 60fps
      • -
      -
    • -
    • Scan Mode: Progressive
    • -
    -
  • -
  • Camera specifications
      -
    • CCD size : 1/4inch
    • -
    • Field of View : 78 degree
    • -
    • Maxmium Pixel: 200W
    • -
    -
  • -
  • Sensor best resolution: 1600 * 1200
  • -
  • Dimension: 25mm x 24mm
  • -
  • Weight: 5g
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/index.html b/en_build/html/product-documents/modules/index.html deleted file mode 100644 index 6d42afd9..00000000 --- a/en_build/html/product-documents/modules/index.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - - - - - M5Stack Module Description — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- - - - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/m5stack_battery_module.html b/en_build/html/product-documents/modules/m5stack_battery_module.html deleted file mode 100644 index 1cff6164..00000000 --- a/en_build/html/product-documents/modules/m5stack_battery_module.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - - - - - - M5Stack BATTERY Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack BATTERY Module

-
-

DESCRIPTION

-

The M5Stack BATTERY Module is module with 850mAh High-Capacity Battery. -User can create a portble device with any series of M5Stack Core and -M5Stack BATTERY Module easily.

-
-
-

FEATURES

-
    -
  • 850mAh High-Capacity Battery
  • -
-
-
-

INCLUDES

-
    -
  • 1x M5Stack BATTERY Module
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/m5stack_btc_module.html b/en_build/html/product-documents/modules/m5stack_btc_module.html deleted file mode 100644 index c638592a..00000000 --- a/en_build/html/product-documents/modules/m5stack_btc_module.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - - - - M5Stack BTC Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack BTC Module

-
-

DESCRIPTION

-

The M5Stack BTC Module is a base including DHT12 module which can detect -temperature and humidity. Your M5Stack Core board can stay as a small -displayer(like a small TV or a small IOT central contronller) after -adding this BTC Module. Absolutely, it is more easier to charge M5Stack -Core via Type-C Cable after adding this BTC Module.

-
-
-

FEATURES

-
    -
  • DHT12 inside
  • -
-
-
-

INCLUDES

-
    -
  • Type-C USB Cable
  • -
  • M3 x 16
  • -
  • Tools
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/m5stack_gps_module.html b/en_build/html/product-documents/modules/m5stack_gps_module.html deleted file mode 100644 index 579dc730..00000000 --- a/en_build/html/product-documents/modules/m5stack_gps_module.html +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - - - - - M5Stack GPS Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack GPS Module

-
-

DESCRIPTION

-

The M5Stack GPS Module is a module with small GPS module. The small GPS -module named UBLOX NEO-M8N. You can program it through Blockly, Arduino -or MicroPython after connected to any series of M5Stack Core.

-

GPS module is built on the high performing u-blox M8 GNSS engine and -exhibit high performance and high sensitivity.And it can supply your -global positioning information even you in the wild and get lost.

-
-
-

FEATURES

-
    -
  • GPS NEO-M8N Module
  • -
  • high-performance
  • -
  • high-sensitivity
  • -
  • Concurrent reception of up to 3 GNSS
  • -
  • Industry leading –167 dBm navigation sensitivity
  • -
-
-
-

INCLUDES

-
    -
  • 1x M5Stack GPS Module
  • -
  • 1x M5Stack Antenna
  • -
-
-
-

Applications

-
    -
  • Child positioning bracelet
  • -
  • Logistics Tracking Management based on GPS
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/m5stack_lan_module.html b/en_build/html/product-documents/modules/m5stack_lan_module.html deleted file mode 100644 index 3339592c..00000000 --- a/en_build/html/product-documents/modules/m5stack_lan_module.html +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - - - - - M5Stack LAN Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack LAN Module

-
-

DESCRIPTION

-

The M5Stack LAN Module is a ethernet module which with a I2C Grove port and 6 pins user ports.

-

When the speed of our wireless network is so slow that M5Stack Core can not normally connect to the wireless network. -So we need a ethernet port board which is connected with M5Stack Core. This LAN module is that one who solves the awkward problem.

-
-
-

FEATURES

-
    -
  • W5500 - High-performance ethernet chip
  • -
  • Less code and Hand-in-hand program experience
  • -
-
-
-

INCLUDES

-
    -
  • 1x M5Stack LAN Module(including USER-DEFINE 6 PIN and 1 Grove port)
  • -
  • 1x DIN-RAIL
  • -
  • 1x STICKER
  • -
-
-
-

Applications

-
    -
  • A mini portable Web server -+ TCP/UDP Server -+ HTTP Server
  • -
  • A mini portable Web Clinet -+ TCP/UDP Clinet -+ HTTP Clinet
  • -
  • SMTP/NTP Server
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/m5stack_lora_module.html b/en_build/html/product-documents/modules/m5stack_lora_module.html deleted file mode 100644 index 56350382..00000000 --- a/en_build/html/product-documents/modules/m5stack_lora_module.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - - - - - - - M5Stack LORA Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack LORA Module

-
-

DESCRIPTION

-

The M5Stack LoRa Module is a module with small LoRa module named Ra-02. -You can program it after connected to any series of M5Stack Core through -Blockly, Arduino or MicroPython.

-

M5Stack LoRa Module can be used for ultra-long distance spread spectrum -communication, and compatible FSK remote modulation and demodulation -quickly, to solve the traditional wireless design can not take into -account the distance, anti-interference and power consumption

-
-
-

FEATURES

-
    -
  • LoRa Module named RA-02 supply by Ai-Thinker
  • -
  • Supports FSK, GFSK, MSK, GMSK, LoRa ™ and OOK modulation modes
  • -
  • Receive sensitivity as low as -141 dBm
  • -
  • Programmable bit rate up to 300Kbps
  • -
  • Build-in Antenna
  • -
-
-
-

INCLUDES

-
    -
  • 1x M5Stack LoRa Module
  • -
-
-
-

Applications

-
    -
  • Automatic meter reading
  • -
  • Home building automation
  • -
  • Remote irrigation system
  • -
-
-
-

DOCUMENTS

- -
-

NOTE

-

If your board LCD can’t display or has some other problem, we suggest -you to add the two statements code followed by m5.begin(); as shown -below

-
m5.begin();
-pinMode(5,OUTPUT);
-digitalWrite(5,HIGH);
-
-
-

Because GPIO5 who has connected NSS pin of LoRa module need be pull-up -at the moment your board(or system) power on to prevent system’s LCD -can’t display.

-
-
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/m5stack_proto_kit.html b/en_build/html/product-documents/modules/m5stack_proto_kit.html deleted file mode 100644 index 96e3fbd4..00000000 --- a/en_build/html/product-documents/modules/m5stack_proto_kit.html +++ /dev/null @@ -1,339 +0,0 @@ - - - - - - - - - - - M5Stack PROTO Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack PROTO Module

-
-

DESCRIPTION

-

The M5Stack PROTO Module is a flexible blank circle with 30 pins which -could connect with all series of M5Stack Core. You can create any circle -that could controlled by any M5Stack Core on M5Stack PROTO Module as you -like.

-
-
-

FEATURES

-
    -
  • Flexible extended blank circle
  • -
  • Compatible with all series of M5Stack Core
  • -
-
-
-

Interface

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LINE0LINE1
GNDIO35(ADC1)
GNDIO36(ADC2)
GNDEN
IO23(MOSI)IO25(DAC0)
IO19(MISO)IO26(DAC1)
IO18(EXT_SCK)3V3
IO3(U1_RX)IO1(U1_TX)
IO16(U2_RX)IO17(U2_TX)
IO21(I2C_SDA)IO22(I2C_SCL)
IO2IO5
IO12(I2S_SCLK)IO13
IO15(I2S_OUT)IO0
HPOWRIO34
HPOWR5V
HPOWRBAT
-
-
-

INCLUDES

-
    -
  • 1x M5Stack PROTO Module
  • -
  • User Manual
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/m5stack_proto_module.html b/en_build/html/product-documents/modules/m5stack_proto_module.html deleted file mode 100644 index e003d641..00000000 --- a/en_build/html/product-documents/modules/m5stack_proto_module.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - - - - - - M5Stack PROTO Kit — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack PROTO Kit

-
-

DESCRIPTION

-

The M5Stack PROTO Module is a flexible blank circle with 30 pins which -could connect with all series of M5Stack Core. You can create any circle -that could controlled by any M5Stack Core on M5Stack PROTO Module as you -like.

-
-
-

FEATURES

-
    -
  • Flexible extended blank circle
  • -
  • Compatible with all series of M5Stack Core
  • -
  • A environment detector - DHT12 Module
  • -
-
-
-

Interface

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LINE0LINE1
GNDIO35(ADC1)
GNDIO36(ADC2)
GNDEN
IO23(MOSI)IO25(DAC0)
IO19(MISO)IO26(DAC1)
IO18(EXT_SCK)3V3
IO3(U1_RX)IO1(U1_TX)
IO16(U1_RX)IO17(U2_TX)
IO21(I2C_SDA)IO22(I2C_SCL)
IO2IO5
IO12(I2S_SCLK)IO13
IO15(I2S_OUT)IO0
HPOWRIO34
HPOWR5V
HPOWRBAT
-
-
-

INCLUDES

-
    -
  • 1x M5Stack PROTO Module
  • -
  • 1x DHT12 Temperature & Humidity Sensor
  • -
  • 1x Bus Socket
  • -
  • 1x GROVE Cable
  • -
  • 1x Packing Box
  • -
  • User Manual
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/modules/m5stack_sim800_module.html b/en_build/html/product-documents/modules/m5stack_sim800_module.html deleted file mode 100644 index a15dabf9..00000000 --- a/en_build/html/product-documents/modules/m5stack_sim800_module.html +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - - - - - M5Stack SIM800L Module — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack SIM800L Module

-
-

DESCRIPTION

-

The M5Stack SIM800L Module is a module with small SIM800L GSM/GPRS -module. You can program it after connected to any series of M5Stack Core -through Blockly, Arduino or MicroPython.

-

SIM800L is a complete Quad-band GSM/GPRS solution. SIM800L moudle could -be connected with M5Stack Core via a serial port named USART2. -Absolutely, you also can change the serial port number with jumper by -your own.

-
-
-

FEATURES

-
    -
  • SIM800L Module
  • -
  • Build-in Antenna
  • -
  • 3.5 mm phone audio jack
  • -
  • Microphone
  • -
  • Parameter:
  • -
  • GSM/GPRS
  • -
  • support Quad-band 850/900/1800/1900MHz
  • -
  • transmit Voice, SMS and data information with low power consumption
  • -
  • Featur Bluetooth and Embedded AT
  • -
-
-
-

INCLUDES

-
    -
  • 1x M5Stack SIM800L Module
  • -
-
-
-

Applications

-
    -
  • Nitrogen dioxide alarm
  • -
  • Automatic Web Spider SMS-notifier
  • -
  • Remote meter reading system
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/tools/index.html b/en_build/html/product-documents/tools/index.html deleted file mode 100644 index 42e83349..00000000 --- a/en_build/html/product-documents/tools/index.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - - - - M5Stack Tools Description — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack Tools Description

- -
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/tools/m5stack_usb_downloader.html b/en_build/html/product-documents/tools/m5stack_usb_downloader.html deleted file mode 100644 index cfd3ab0b..00000000 --- a/en_build/html/product-documents/tools/m5stack_usb_downloader.html +++ /dev/null @@ -1,302 +0,0 @@ - - - - - - - - - - - M5Stack USB Downloader — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

M5Stack USB Downloader

-
-

DESCRIPTION

-
    -
  1. USB to URAT Chip. CP2104 supports automatic firmware download of -ESP32/ESP8266
  2. -
  3. TXD light, RXD light, Power light and 6pin @ 2.54mm bus sockets.
  4. -
-
-
-

PARAMETER

- ---- - - - - - - - - - - - - - - - - - - - - - - - - - -
PinNumberPinName
1GND
2GPIO0
3EN
4TXD
5RXD
63.3V
-
-

NOTE

-

There are two reserved pins(RTS, DTR) on M5Stack USB Downloader for -other applications.

-
-
-
-

INCLUDES

-
    -
  • 1x M5Stack USB Downloader
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
- - -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_3.96port.html b/en_build/html/product-documents/units/m5go_unit_3.96port.html deleted file mode 100644 index 1bd3ef06..00000000 --- a/en_build/html/product-documents/units/m5go_unit_3.96port.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - Unit 3.96port — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit 3.96port

-
-

DESCRIPTION

-

The Unit 3.96port is a unit that aim to transfer GROVE interface to VH3.96-4Pin.

-
-
-

FEATURES

-
    -
  • VH3.96 interface
  • -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -../../_images/M5GO_Unit_3.96.jpg -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_earth.html b/en_build/html/product-documents/units/m5go_unit_earth.html deleted file mode 100644 index 1fb30708..00000000 --- a/en_build/html/product-documents/units/m5go_unit_earth.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - Unit moisture — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit moisture

-
-

DESCRIPTION

-

The Unit moisture is a moisture detective unit for measuring the moisture in soil. The soil moisture sensor is pretty straight forward to use. The two large exp osed pads function as probes for the sensor, together acting as a variable resistor. The more water that is in the soil means the better the conductivity between the pads will be and will result in a lower resistance, and a higher SIG out. -You can read the moisture in soil staright or get a digital signal(0/1) that means the high(or low) humidity.

-
-
-

FEATURES

-
    -
  • Adjustable threshold, including 10K adjustable resistor
  • -
  • Analog & Digital output
  • -
  • Grove interface
  • -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -../../_images/M5GO_Unit_moisture.jpg -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_env.html b/en_build/html/product-documents/units/m5go_unit_env.html deleted file mode 100644 index 49f67ab8..00000000 --- a/en_build/html/product-documents/units/m5go_unit_env.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - - - Unit ENV — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit ENV

-
-

DESCRIPTION

-

The Unit ENV is a environment sensor for M5GO that can easily detect -temperature, humidity and air pressure with M5GO Core, including -temperature and humidity sensor and absolute barometric pressure sensor.

-
-
-

FEATURES

-
    -
  • Temperature:
  • -
  • measuring range: 20 ~ 60℃
  • -
  • resolution: ±0.2℃
  • -
  • Humidity:
  • -
  • measuring range: 20 ~ 95℃
  • -
  • resolution: 0.1%
  • -
  • Air pressure
  • -
  • measuring range: 300 ~ 1100hPa
  • -
  • resolution: ±1hPa
  • -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_hub.html b/en_build/html/product-documents/units/m5go_unit_hub.html deleted file mode 100644 index c604bf73..00000000 --- a/en_build/html/product-documents/units/m5go_unit_hub.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - - Unit HUB — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit HUB

-
-

DESCRIPTION

-

The Unit HUB is a module for M5GO to expand GROVE port added three GROVE -ports for user. So you can control 3 GROVE devices with only one M5GO -Core at a time.

-
-
-

FEATURES

-
    -
  • Instantly Add Three 4-Pins-GROVE ports to Any Compatible Device
  • -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_ir.html b/en_build/html/product-documents/units/m5go_unit_ir.html deleted file mode 100644 index 07672596..00000000 --- a/en_build/html/product-documents/units/m5go_unit_ir.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - - - - - Unit IR — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit IR

-
-

DESCRIPTION

-

The Unit IR is a IR infrared obstacle avoidance sensor. It can -be widely used in robot obstacle avoidance, obstacle avoidance car, line -count, and black and white line tracking and so on.

-

It has a pair of infrared transmitting and receiving tube, tube infrared -emit a certain frequency, when detecting direction meet with obstacles -(reflecting surface), reflected infrared receiving tube, after the -comparator circuit processing, green indicator will light up, at the -same time signal output interface to output digital signal.

-
-
-

FEATURES

-
    -
  • A pair of infrared transmitting and receiving tube
  • -
  • Detects the distance 2 ~ 5cm
  • -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_light.html b/en_build/html/product-documents/units/m5go_unit_light.html deleted file mode 100644 index 81866fea..00000000 --- a/en_build/html/product-documents/units/m5go_unit_light.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - - - - - - Unit light — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit light

-
-

DESCRIPTION

-

The Unit light is a light sensor unit with an adjustable resistor that can detect the environmental light intensity. -You can read analog signal(environmental light intensity) staright or get a digital signal(0/1) that means whether the light exists or not.

-
-
-

FEATURES

-
    -
  • Adjustable threshold, including 10K adjustable resistor
  • -
  • Analog & Digital output
  • -
  • Grove interface
  • -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -../../_images/M5GO_Unit_light.png -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_makey.html b/en_build/html/product-documents/units/m5go_unit_makey.html deleted file mode 100644 index 9973cd59..00000000 --- a/en_build/html/product-documents/units/m5go_unit_makey.html +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - - - - Unit makey — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit makey

-
-

DESCRIPTION

-

The Unit makey is a makey unit with 16 touchable pins.The Unit makey is based on Arduino Uno Mega328p chip.It communicates with M5Stack Core via GROVE(I2C).It’s I2C address is 0x51.

-
-
-

FEATURES

-
    -
  • Arduino Mega328p Controller
  • -
  • 16 Keys Fruit Piano(PD0-7 & PB0-5), 1 NeoPixel pin(PC2) and 1 Buzzer pin(PC3)
  • -
  • Buzzer inside
  • -
  • GROVE interface
  • -
  • Two Lego installation holes
  • -
-
-
-

APPLICATION

-
    -
  • Makey Application
  • -
  • RGB Application with Adafruit Library
  • -
-
-
-

DOCUMENTS

- -../../_images/M5GO_Unit_makey.png -../../_images/M5GO_Unit_makey_interface.png -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_pir.html b/en_build/html/product-documents/units/m5go_unit_pir.html deleted file mode 100644 index 8fc2c175..00000000 --- a/en_build/html/product-documents/units/m5go_unit_pir.html +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - - Unit PIR — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit PIR

-
-

DESCRIPTION

-

The Unit PIR is a human infrared sensor for M5GO that can easily detect -whether someone appears in front of it with M5GO Core.

-
-
-

FEATURES

-
    -
  • Detects the distance 150cm
  • -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_pot.html b/en_build/html/product-documents/units/m5go_unit_pot.html deleted file mode 100644 index 0456d4ad..00000000 --- a/en_build/html/product-documents/units/m5go_unit_pot.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - Unit POT — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit POT

-
-

DESCRIPTION

-

The Unit POT is a potentiometer sensor for M5GO that can detect rotary -angle.

-
-
-

FEATURES

-
    -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_proto.html b/en_build/html/product-documents/units/m5go_unit_proto.html deleted file mode 100644 index 166389f6..00000000 --- a/en_build/html/product-documents/units/m5go_unit_proto.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - - - - - Unit proto — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit proto

-
-

DESCRIPTION

-

The M5Stack proto unit is a flexible blank circle with 100mil pitch of holes. You can create any circle -that could controlled by M5GO Core as you like.

-
-
-

FEATURES

-
    -
  • Flexible extended blank circle
  • -
  • 70 holes(pitch of holes: 100mil)
  • -
  • GROVE interface
  • -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -../../_images/M5GO_Unit_proto.png -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_relay.html b/en_build/html/product-documents/units/m5go_unit_relay.html deleted file mode 100644 index 0a7cbf50..00000000 --- a/en_build/html/product-documents/units/m5go_unit_relay.html +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - - - - - Unit relay — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit relay

-
-

DESCRIPTION

-

The Unit relay is a unit that allows you to control large power loads with a light-current, safe, reliable power control system. the large power loads you can safely control is up to 24 VDC or 120 VAC. -Only a low electrial level is sent to this unit, the relay will be close and the large power loads you want to control will be working.

-
-
-

FEATURES

-
    -
  • A single input
  • -
  • Up to 3A @ 24 VDC or 120 VAC
  • -
  • GROVE interface
  • -
  • Two Lego installation holes
  • -
-
-
-

APPLICATION

-
    -
  • Be perfect for large inductive loads(like DC motors electrocircuit, intelligent interpolation…)
  • -
  • Control a standard wall outlet device
  • -
-
-
-

DOCUMENTS

- -../../_images/M5GO_Unit_relay.png -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_rgb.html b/en_build/html/product-documents/units/m5go_unit_rgb.html deleted file mode 100644 index 276d4b18..00000000 --- a/en_build/html/product-documents/units/m5go_unit_rgb.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - Unit RGB — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit RGB

-
-

DESCRIPTION

-

The Unit RGB is a sensor including three RGB LED lights and two GROVE -ports.You can display specified color using M5GO Core through Blockly, -Arduino or MicroPython.

-
-
-

FEATURES

-
    -
  • Two Lego installation holes
  • -
-
-
-

DOCUMENTS

- -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/product-documents/units/m5go_unit_thermal.html b/en_build/html/product-documents/units/m5go_unit_thermal.html deleted file mode 100644 index 2b387d35..00000000 --- a/en_build/html/product-documents/units/m5go_unit_thermal.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - - - - Unit thermal — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Unit thermal

-
-

DESCRIPTION

-

The Unit thermal is a thermal camera module contains thermopile sensors named MLX90640. the MLX90640 contains a 32x64 piexls IR array. It communicates with M5GO Core via GROVE which actually is a I2C interfacel. -As the images show you can detect surface temperatures from many feet away with an accuracy of ±1.5°C (best case). -After burn the firmware of the module’s demostatrion to M5GO Core via M5Burner, the module will be running. Then you can program it via Arduino IDE.

-
-
-

FEATURES

-
    -
  • 32x24 piexls
  • -
  • Target temperature -40°C ÷ 300°C
  • -
  • GROVE interface
  • -
  • Two Lego installation holes
  • -
-
-
-

APPLICATION

-
    -
  • High precision non-contact temperature measurements
  • -
  • Intrusion / Movement detection
  • -
  • Visual IR thermometers
  • -
  • Temperature sensing element for intelligent building air conditioning
  • -
-
-
-

DOCUMENTS

- - -../../_images/M5GO_Unit_thermal.png -
-
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/resources.html b/en_build/html/resources.html deleted file mode 100644 index 655c61a4..00000000 --- a/en_build/html/resources.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - - - Resources — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- - - - -
-
-
-
- -
-

Resources

- -
- - -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/search.html b/en_build/html/search.html deleted file mode 100644 index 187680b3..00000000 --- a/en_build/html/search.html +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - - - - Search — M5Stack 1.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
- -
- - - - - - - - - - - - - - - - - -
- -
    - -
  • Docs »
  • - -
  • Search
  • - - -
  • - - - -
  • - -
- - -
-
-
-
- - - - -
- -
- -
- -
-
- - -
- -
-

- © Copyright 2017 - 2018, M5Stack Inc. - -

-
- Built with Sphinx using a theme provided by Read the Docs. - -
- -
-
- -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/en_build/html/searchindex.js b/en_build/html/searchindex.js deleted file mode 100644 index 1d348f94..00000000 --- a/en_build/html/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({docnames:["COPYRIGHT","api-reference/button/button","api-reference/index","api-reference/lcd/Backup/lcd_api_arduino","api-reference/lcd/Backup/lcd_api_micropython","api-reference/lcd/lcd","api-reference/mic/mic","api-reference/peripherals/adc","api-reference/peripherals/dac","api-reference/peripherals/gpio","api-reference/peripherals/i2c","api-reference/peripherals/index","api-reference/peripherals/neopixel","api-reference/peripherals/rtc","api-reference/peripherals/spi","api-reference/peripherals/timer","api-reference/peripherals/uart","api-reference/sd_card/sd_card","api-reference/speaker/speaker","basic-cases/esp32cam/index","basic-cases/index","basic-cases/m5go/index","basic-cases/m5stack-core/index","get-started/M5GO/get_started_M5GO_ThermalCam","get-started/add-idf_path-to-profile","get-started/establish_serial_connection","get-started/get-started-ESP32CAM","get-started/get-started-M5Bala","get-started/get-started-StepMotor","get-started/how_to_burn_firmware_en","get-started/how_to_connect_wifi_using_core","get-started/idf-monitor","get-started/index","get-started/m5stack_core_get_started","get-started/m5stack_core_get_started_Arduino_MacOS","get-started/m5stack_core_get_started_Arduino_Windows","get-started/m5stack_core_get_started_MicroPython","get-started/practices_arduino","get-started/practices_blockly","get-started/practices_micropython","get-started/upgrade_m5stack_lib","index","languages","m5stack-awesome/M5Stack-SD-Updater/index","m5stack-awesome/M5Widgets/index","m5stack-awesome/TFT_eSPI/index","m5stack-awesome/awesome","m5stack-awesome/index","m5stack-faq/M5Stack-Core/index","m5stack-faq/index","m5stack-faq/m5stack-module/index","product-documents/accessorries/cables/cable","product-documents/accessorries/headers_socket","product-documents/applications/BALA","product-documents/bases/m5stack_plc","product-documents/index","product-documents/m5stack-core/index","product-documents/m5stack-core/m5go","product-documents/m5stack-core/m5stack_basic","product-documents/m5stack-core/m5stack_faces","product-documents/m5stack-core/m5stack_fire","product-documents/m5stack-core/m5stack_gray","product-documents/m5stack-core/m5stack_panda","product-documents/modules/esp32cam","product-documents/modules/index","product-documents/modules/m5stack_battery_module","product-documents/modules/m5stack_btc_module","product-documents/modules/m5stack_gps_module","product-documents/modules/m5stack_lan_module","product-documents/modules/m5stack_lora_module","product-documents/modules/m5stack_proto_kit","product-documents/modules/m5stack_proto_module","product-documents/modules/m5stack_sim800_module","product-documents/tools/index","product-documents/tools/m5stack_usb_downloader","product-documents/units/m5go_unit_3.96port","product-documents/units/m5go_unit_earth","product-documents/units/m5go_unit_env","product-documents/units/m5go_unit_hub","product-documents/units/m5go_unit_ir","product-documents/units/m5go_unit_light","product-documents/units/m5go_unit_makey","product-documents/units/m5go_unit_pir","product-documents/units/m5go_unit_pot","product-documents/units/m5go_unit_proto","product-documents/units/m5go_unit_relay","product-documents/units/m5go_unit_rgb","product-documents/units/m5go_unit_thermal","resources"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":1,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,sphinx:54},filenames:["COPYRIGHT.rst","api-reference\\button\\button.rst","api-reference\\index.rst","api-reference\\lcd\\Backup\\lcd_api_arduino.rst","api-reference\\lcd\\Backup\\lcd_api_micropython.rst","api-reference\\lcd\\lcd.rst","api-reference\\mic\\mic.rst","api-reference\\peripherals\\adc.rst","api-reference\\peripherals\\dac.rst","api-reference\\peripherals\\gpio.rst","api-reference\\peripherals\\i2c.rst","api-reference\\peripherals\\index.rst","api-reference\\peripherals\\neopixel.rst","api-reference\\peripherals\\rtc.rst","api-reference\\peripherals\\spi.rst","api-reference\\peripherals\\timer.rst","api-reference\\peripherals\\uart.rst","api-reference\\sd_card\\sd_card.rst","api-reference\\speaker\\speaker.rst","basic-cases\\esp32cam\\index.rst","basic-cases\\index.rst","basic-cases\\m5go\\index.rst","basic-cases\\m5stack-core\\index.rst","get-started\\M5GO\\get_started_M5GO_ThermalCam.rst","get-started\\add-idf_path-to-profile.rst","get-started\\establish_serial_connection.rst","get-started\\get-started-ESP32CAM.rst","get-started\\get-started-M5Bala.rst","get-started\\get-started-StepMotor.rst","get-started\\how_to_burn_firmware_en.rst","get-started\\how_to_connect_wifi_using_core.rst","get-started\\idf-monitor.rst","get-started\\index.rst","get-started\\m5stack_core_get_started.rst","get-started\\m5stack_core_get_started_Arduino_MacOS.rst","get-started\\m5stack_core_get_started_Arduino_Windows.rst","get-started\\m5stack_core_get_started_MicroPython.rst","get-started\\practices_arduino.rst","get-started\\practices_blockly.rst","get-started\\practices_micropython.rst","get-started\\upgrade_m5stack_lib.rst","index.rst","languages.rst","m5stack-awesome\\M5Stack-SD-Updater\\index.rst","m5stack-awesome\\M5Widgets\\index.rst","m5stack-awesome\\TFT_eSPI\\index.rst","m5stack-awesome\\awesome.rst","m5stack-awesome\\index.rst","m5stack-faq\\M5Stack-Core\\index.rst","m5stack-faq\\index.rst","m5stack-faq\\m5stack-module\\index.rst","product-documents\\accessorries\\cables\\cable.rst","product-documents\\accessorries\\headers_socket.rst","product-documents\\applications\\BALA.rst","product-documents\\bases\\m5stack_plc.rst","product-documents\\index.rst","product-documents\\m5stack-core\\index.rst","product-documents\\m5stack-core\\m5go.rst","product-documents\\m5stack-core\\m5stack_basic.rst","product-documents\\m5stack-core\\m5stack_faces.rst","product-documents\\m5stack-core\\m5stack_fire.rst","product-documents\\m5stack-core\\m5stack_gray.rst","product-documents\\m5stack-core\\m5stack_panda.rst","product-documents\\modules\\esp32cam.rst","product-documents\\modules\\index.rst","product-documents\\modules\\m5stack_battery_module.rst","product-documents\\modules\\m5stack_btc_module.rst","product-documents\\modules\\m5stack_gps_module.rst","product-documents\\modules\\m5stack_lan_module.rst","product-documents\\modules\\m5stack_lora_module.rst","product-documents\\modules\\m5stack_proto_kit.rst","product-documents\\modules\\m5stack_proto_module.rst","product-documents\\modules\\m5stack_sim800_module.rst","product-documents\\tools\\index.rst","product-documents\\tools\\m5stack_usb_downloader.rst","product-documents\\units\\m5go_unit_3.96port.rst","product-documents\\units\\m5go_unit_earth.rst","product-documents\\units\\m5go_unit_env.rst","product-documents\\units\\m5go_unit_hub.rst","product-documents\\units\\m5go_unit_ir.rst","product-documents\\units\\m5go_unit_light.rst","product-documents\\units\\m5go_unit_makey.rst","product-documents\\units\\m5go_unit_pir.rst","product-documents\\units\\m5go_unit_pot.rst","product-documents\\units\\m5go_unit_proto.rst","product-documents\\units\\m5go_unit_relay.rst","product-documents\\units\\m5go_unit_rgb.rst","product-documents\\units\\m5go_unit_thermal.rst","resources.rst"],objects:{},objnames:{},objtypes:{},terms:{"0x00":[3,4,10,14],"0x00000000":31,"0x00000003":31,"0x00000005":31,"0x0000000f":31,"0x00000019":31,"0x0000001d":31,"0x00000047":31,"0x00000080":31,"0x00060330":31,"0x00060f20":31,"0x00060f23":31,"0x07":10,"0x30000":31,"0x3ffb136c":31,"0x3ffb7dd0":31,"0x3ffb7e00":31,"0x3ffb7e20":31,"0x3ffb7e40":31,"0x3ffb7e60":31,"0x3ffb7e90":31,"0x3ffba6d0":31,"0x4000c46c":31,"0x4000c477":31,"0x40078000":31,"0x40078d4c":31,"0x400d071d":31,"0x400dbf56":31,"0x400dbf5e":31,"0x400dbf82":31,"0x400f360d":31,"0x4_______":31,"0x51":81,"0x56":53,"0x70":28,"0x78":10,"0x7f":10,"0x800dbf56":31,"100g":[58,61,62],"100mil":84,"104f":59,"10k":[76,80],"1100hpa":77,"120g":[58,61,62],"12v":28,"150cm":82,"150mah":[58,61,62],"15fp":63,"16m":[53,57,59,60],"1900mhz":72,"1cest":13,"1hpa":77,"1kg":54,"200w":63,"22lb":54,"240mhz":[53,57,58,59,60,61,62,63],"24mm":63,"24v":54,"25mm":63,"300kbp":69,"30fp":63,"320x240":[53,57,58,59,60,61,62],"32f":59,"32x24":87,"32x64":87,"3dprintfil":[46,47],"3ffdbf84":31,"3v3":[70,71],"400khz":10,"40c":59,"4inch":63,"4mb":[53,59,60,63],"4pin":[54,75],"500ma":[53,57,58,59,60,61,62],"520k":[58,61,62],"520kb":[57,63],"54mm":74,"550mah":[53,57,60],"56g":[53,57,59,60],"5cm":[54,79],"60fp":63,"650mah":59,"6pin":[54,74],"850mah":65,"96port":55,"97in":54,"9c6469":36,"\u0140en":16,"\u1e03uf":16,"\u4e2d\u6587":[24,31,42],"\u4f60\u53ef\u4f7f\u7528\u8fb9\u680f\u7684\u9762\u677f\u8fdb\u884c\u8bed\u8a00\u7684\u5207\u6362":42,"\u5982\u4e0b\u56fe\u6240\u793a":42,"\u5982\u6709\u51fa\u5165\u8bf7\u4ee5\u82f1\u6587\u7248\u672c\u4e3a\u51c6":42,"\u5982\u679c\u8be5\u9762\u677f\u88ab\u6298\u53e0":42,"\u672c\u6587\u6863\u73b0\u5728\u6709\u4e24\u79cd\u8bed\u8a00\u7684\u7248\u672c":42,"\u6807\u9898\u6309\u94ae\u6765\u663e\u793a\u5b83":42,"\u70b9\u51fb\u5de6\u4e0b\u89d2":42,"\u82f1\u6587":42,"byte":[10,12,13,14,16,31,53,57,58,59,60,61,62],"case":[34,41,46,47,87],"class":[12,14,36],"default":[5,7,10,12,13,14,15,16,31,34,53],"export":24,"float":12,"function":[31,46,47,76],"import":[1,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18,28],"long":69,"new":[10,24,31,36,88],"return":[10,12,13,14,15,16,18],"short":31,"super":59,"true":[1,12,13,14],"try":[6,34],"void":35,"while":[1,6,24,30],AES:63,AND:0,And:[26,67],BUT:0,Bus:[59,71],But:[36,40],FOR:0,For:[31,32],GPS:[55,64],I2S:8,IDE:[27,32,87],NOT:0,Not:31,One:13,RTS:[29,31,74],SMS:72,THE:0,The:[0,3,4,5,8,10,12,13,14,15,16,24,25,31,35,41,42,46,47,53,54,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,75,76,77,78,79,80,81,82,83,84,85,86,87,88],Then:[26,29,30,31,35,36,87],There:[16,74],USE:0,Use:10,Using:32,VFS:31,WITH:0,With:54,_index:34,_ssl:34,_thread:6,a10:31,a11:31,a12:31,a13:31,a14:31,a15:31,a67c:30,abc:16,about:[34,41],abov:[0,31,34],absolut:[59,66,72,77],acceler:63,acceleromet:[57,60,61],access:[30,36,41],accord:[25,30],accordingli:34,account:69,accuraci:87,achiev:26,acquir:31,act:76,action:0,activ:34,actual:87,adafruit:81,adapt:[16,54],adc1:[7,70,71],adc2:[7,70,71],adc:[6,11,14],add:[69,78],added:78,adding:[24,28,31,66],addit:0,addition:63,addr2lin:31,address:[10,12,35,53,81],adjust:[34,76,80],administr:35,adopt:16,adr:10,advanc:[36,41,46,47],advantag:31,affect:0,after:[13,26,29,30,31,34,36,66,67,69,72,79,87],afterward:31,again:[24,25,29,31,34,35],aim:[41,75],air:[77,87],alarm:72,alert:34,all:[0,10,15,16,31,70,71],alloc:31,allow:[8,31,85],alreadi:34,also:[8,36,57,59,60,61,63,72],alt:[27,46,47],although:34,alwai:31,amg8833:[46,47],among:16,analog:[7,8,53,57,60,63,76,80],angl:[5,12,83],ani:[0,12,26,29,31,34,41,42,48,49,50,65,67,69,70,71,72,78,84],anoth:[30,31,36,42],antenna:[67,69,72],anti:69,apach:0,apart:31,api:[41,46,47,64],apikei:36,app:[31,46,47],app_main:31,appear:[25,34,35,82],append:6,appl:34,appli:31,applic:[0,32,34,46,47,56,64,74],approxim:7,arbitrari:8,archiv:34,arduino:[27,32,33,46,47,53,54,57,58,59,60,61,62,63,67,68,69,72,76,80,81,85,86,87,88],arduinowifiphotobackup:[46,47],area:[10,36],argument:[5,7,8,10,31],aris:0,arrai:87,arriv:[30,36],arrow:[31,41],articl:[28,29,32,35,36],ask:88,assign:10,assist:[48,49,50],associ:0,asterisk:31,asynchron:16,atten:6,attn_11db:6,audio:72,augment:31,author:0,auto:15,autom:69,automat:[36,69,72,74],avail:[16,31],avatar:[46,47],avoid:[31,79],awai:87,awesom:41,awkward:68,axi:[57,60,61],back:[24,25],background:5,backtrac:31,backup:[46,47],bala:55,balanc:[27,53],band:72,barometr:77,base:[15,31,41,46,47,53,57,58,59,60,61,62,63,66,67,81],bash:24,bash_profil:24,basic:[31,34,55,56,62],bat:[35,70,71],batch:35,batteri:[53,55,57,58,59,60,61,62,63,64],baud:[29,31],baudrat:[1,3,4,5,15,35],becaus:[31,69],becom:0,been:[3,4,5,29,31],befor:[31,32,34,35,36,88],begin:[31,35,69],behind:31,being:[32,36,48,49,50],below:[24,25,29,32,34,35,36,42,69],belown:36,best:[63,87],better:[29,76],between:[5,12,24,25,76],bgcolor:[3,4],bgn:63,bin:[24,32,34],bit:[7,8,10,13,15,16,63,69],bitcoin:[46,47],black:[3,4,5,6,79],blank:[70,71,84],ble:63,blinkrainbow:12,block:[18,36],blockli:[32,33,57,58,59,60,61,62,67,69,72,86],blox:67,blue:[3,4,5],bluetooth:[53,57,58,59,60,61,62,63,72],bme280:63,board:[25,31,35,41,54,63,66,68,69],book:34,boot:[31,36],bootabl:31,bootload:[29,31],bot:53,both:[10,24],bottom:[42,57,58,60,61,62],box:[34,71],bracelet:67,bri:12,broad:54,brower:30,browser:26,bse3729:[53,57,60],btc:55,buf:[12,13,15],buffer:[6,10,12,13,14,16],bug:88,build:[27,31,69,72,87],built:[8,67],burn:[32,36,87],burnt:[29,36],bus:[10,53,74],busi:29,buttom:[30,36],button:[2,27,36,42],buttona:1,buttonb:1,buzzer:81,bytearrai:10,cabl:[26,32,34,35,53,57,58,59,60,61,62,66,71],calcul:59,call:34,callback:1,camera:[46,47,63,87],can:[0,7,8,10,12,13,14,15,16,26,28,30,31,32,34,36,41,42,46,47,53,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,76,77,78,79,80,82,83,84,85,86,87],cannot:[14,31],capabl:15,capac:65,captur:31,car:[27,79],card:[2,14,46,47,53,57,58,59,60,61,62],ccd:63,center:5,central:66,certain:79,cet:13,cfgui:[46,47],chan:0,chang:[24,30,31,36,42,72],channel:[7,8],charact:[13,16,31],charg:[0,66],charger:63,cheap:16,check:[15,24,88],chg:[59,60],child:67,chines:42,chip:[15,16,29,41,46,47,53,57,58,59,60,61,62,63,68,74,81],choic:25,choos:34,chrono:15,cif:63,circl:[5,70,71,84],circuit:79,claim:0,classic:63,classifi:59,clear:[12,28],click:[28,32,34,35,36,42],client:35,clinet:68,clock:[10,14,63],clone:[27,34,35],close:[24,29,85],code:[0,26,27,30,31,35,36,53,64,68,69],coindesk:[46,47],color:[12,53,57,58,59,60,61,62,86],com1:29,com4:35,com:[25,27,30,34,36,46,47,88],come:[19,20,21,22,29],command:[24,25,31,34],commandlinetool:34,commerci:0,commun:[31,53,54,69,81,87,88],compar:79,compat:[16,53,57,59,60,69,70,71,78],compil:[34,35],complet:[35,72],compon:[16,31,36],compress:63,comput:[26,30,34,36],comun:10,comx:29,concurr:67,condit:[0,87],conduct:76,config_esp32_pan:31,configur:[14,24,31],confirm:[34,35],confus:31,connect:[0,8,12,26,29,31,32,34,35,36,67,68,69,70,71,72],conner:42,consequ:31,consid:28,consol:31,constant:10,consumpt:[69,72],contact:[36,41,48,49,50,87],contain:[13,15,24,31,87],content:[10,13],context:31,continu:18,contract:0,control:[16,54,57,58,59,60,61,62,70,71,78,81,84,85],contronl:66,convert:[7,8,25],copi:[0,34,35],core:[3,4,5,20,25,31,32,41,53,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,77,78,81,82,84,86,87],corner:[5,36],correct:31,correspond:32,could:[34,70,71,72,84],count:79,counter:15,coupl:[57,58,60,61,62],cp2104:[25,34,63,74],cpu:31,cpu_start:31,crack:[46,47],crash:31,crc:13,creat:[7,10,12,13,14,15,16,24,41,57,58,60,61,62,65,70,71,84],ctrl:[27,31,46,47],current:[3,4,5,13,15,85],custom:[31,46,47],customiz:[46,47],dac0:[70,71],dac1:[70,71],dac:[6,7,11],dai:[13,57,58,60,61,62],damag:0,darkcyan:5,data:[8,12,14,16,31,63,72],datasheet:[57,58,59,60,61,62,63,87],dbm:[67,69],dc9:54,deal:0,debug:[15,31],debugg:31,decompressor:0,deep:13,def:[1,6,12,15],defin:[7,8,68],degre:63,del:[46,47],delai:12,demo:35,demodul:69,demostatrion:87,depend:[10,46,47],describ:[0,41],descript:[3,4,5,18],design:[41,69],detect:[10,34,66,76,77,79,80,82,83,87],detector:71,dev:[25,34],develop:[0,24,27,32,34,35,41,57,58,59,60,61,62,63],devic:[10,12,13,14,16,25,26,30,31,36,46,47,65,78,85],devot:41,dht12:[66,71],dhue:12,diagram:56,differ:[10,16,34,46,47,59],digit:[7,8,54,57,60,61,76,79,80],digitalwrit:69,dii:[54,59],dimens:[5,63],din:68,dioxid:72,direct:79,directori:[24,64],disabl:31,disappear:25,discard:31,disconnect:25,discrep:42,disk:25,displai:[1,3,4,5,29,35,46,47,69,86],display:66,distanc:[69,79,82],distribut:0,dma:8,dmg:25,dmip:[53,57,58,59,60,61,62],do_something_to_crash:31,doc:42,document:[0,16,34,41,42,56,64],doe:[0,10,29,34],domain:13,don:[31,34],dongl:25,dont_crash:31,donwload:29,doubl:[29,35],down:15,download:[25,27,32,34,55,73],download_arduino_esp32_support:35,drag:36,draw:[3,4,5,36],drawn:[3,4,5],drive:87,driven:8,driver:[8,14,27,29,31,32,34,35,46,47,53],dtr:74,dual:[53,57,58,59,60,61,62,63],due:[15,31],dump:31,duplex:16,dure:13,dynam:31,each:[12,14,15,24,31],earlier:31,earth:55,eas:16,easi:[46,47],easier:66,easili:[42,65,77,82],ecc:63,educ:0,effect:24,either:32,electr:54,electri:85,electrocircuit:85,element:[36,87],elf:31,elif:6,els:[15,31],email:[36,41,48,49,50],embed:[0,46,47,72],emit:79,emoji:36,empti:31,emul:59,enabl:[7,16,31],enclosur:54,encod:53,encount:34,encrypt:63,end:[10,16,31],engin:67,english:42,enjoi:36,enter:[24,26,30,34,36],entir:5,entri:31,env:[55,57],environ:[24,27,31,32,71,77],environment:80,equal:[13,46,47],equip:[57,58,60,61,62,63],equival:31,errno:34,error:[13,14,31,34],esp32:[7,8,12,14,15,16,24,27,31,32,41,46,47,53,57,58,59,60,61,62,63,74],esp32cam:[20,29,64],esp8266:[46,47,74],esp:[24,31,58,61,62,63,64],esp_imag:31,esp_log:31,esp_logw:31,esp_vfs_register_fd_rang:31,especi:31,espressif:34,essenti:31,establish:32,establish_serial_connect:[29,32,34,35],etc:[24,31,54],eth:[46,47],ethernet:68,even:[31,53,57,58,59,60,61,62,63,67],event:[0,15],everi:[24,31],everyth:[31,57,58,60,61,62,63],examin:31,exampl:[3,4,5,7,8,12,13,14,15,16,18,27,32,46,47,53,57,58,59,60,61,62,63,64,67,68,69,71,72],exccaus:31,except:[6,14,31],exchang:16,excvaddr:31,exe:29,exect:35,execut:[15,24,30,34],exhibit:67,exist:[10,24,29,80,88],exit:31,exp:76,expand:78,experi:68,export_idf_path:24,express:0,ext_sck:[70,71],extend:[59,70,71,84],extens:27,extern:25,extra:10,face:[46,47,56],facebottom:59,factori:31,fake:[46,47],fals:[10,12,13,14],familiar:[32,36],faq:41,featur:[16,31,56,64,88],feet:87,few:[26,29,36,53],fft:[46,47],fgcolor:[3,4],field:63,figur:[25,36],file:[0,24,31,32,34,35,46,47],fill:[3,4,5],fillcolor:5,find:[31,88],fire:[53,55,56],firmwar:[32,36,46,47,74,87],first:[14,25,30,32,36],fit:0,fix:31,flappybird:[46,47],flash:[53,57,58,59,60,61,62,63],flexibl:[16,70,71,84],floor:12,flow:[30,36],fold:42,folder:[27,34],follow:[0,24,29,30,31,32,34,35,36,69],foreground:[3,4,5],foregroundcolor:5,forev:35,form:31,format:[15,63],forum:[41,48,49,50,88],forward:[24,76],found:[31,34],fraction:12,frame:31,framework:[27,46,47],free:[0,54],freq:10,frequenc:[10,18,63,79],from:[0,1,3,4,5,6,10,12,13,14,15,16,18,24,25,28,30,31,36,42,46,47,87],front:82,fruit:81,fsk:69,full:[12,14,16],fullduplex:14,fulli:[46,47],furnish:0,game:59,gameboi:59,gear:36,gener:[0,15],gestur:[57,58,60,61,62],get:[13,24,28,31,41,46,47,67,76,80],gfsk:69,git:[27,34],github:[27,34,53,54,57,58,59,60,61,62,63,67,68,69,70,71,72,76,79,80,82,83,84,85,87,88],give:31,given:[3,4,5,8,10,14,16],global:[6,15,67],gmsk:69,gmtime:13,gnd:[70,71,74],gnss:67,got:24,gpio0:74,gpio25:8,gpio26:8,gpio5:69,gpio:[7,8,10,11,12,15,16,59],gpr:72,grai:[55,56],grant:0,graphic:[46,47],graycor:59,green:[41,79],greet:36,group:15,grove:[53,57,58,59,60,61,62,68,71,75,76,78,80,81,84,85,86,87],gsm:72,gui:[46,47],guid:[29,36,54],guidanc:25,guislic:[46,47],guru:31,gus:31,gyro:[57,60,61],halfduplex:14,hand:[36,68],handl:16,handler:31,hard:29,hardwar:[10,14,15,16,31,34,63],has:[3,4,5,8,12,13,15,29,31,35,40,42,69,79],have:[24,31,32,34,36,41,88],header:[0,55],heap_init:31,height:5,hello:[34,35],hello_world:31,hello_world_main:31,helloworld:34,help:[31,32],here:[0,24,34,35,36,41],herebi:0,hex:54,hexadecim:31,high:[34,65,67,68,69,76,87],higher:[31,76],hit:34,hold:1,holder:0,hole:[75,76,77,78,79,80,81,82,83,84,85,86,87],home:[24,31,69],host:[14,16],hotkei:27,hour:13,how:[25,32,36],howev:[31,42],hpowr:[70,71],hsb:12,hspi:[14,15,16],html:[34,36],http:[26,27,30,34,35,36,46,47,68],hub:[55,57],human:82,humid:[66,71,76,77],i2c:[11,53,57,58,59,60,61,62,68,81,87],i2c_bu:28,i2c_scl:[70,71],i2c_sda:[70,71],i2s_out:[70,71],i2s_sclk:[70,71],icon:[46,47],ident:16,identifi:[24,25],idf:[24,58,61,62,63,64],idf_monitor:31,ili9342:[53,57,58,59,60,61,62],illustr:32,imag:[25,31,40,63,87],immedi:[26,31],impli:0,in0:36,inc:0,inch:[53,57,58,59,60,61,62],includ:[0,12,14,34,35,56,64,76,77,80,86],indic:79,individu:[12,54],induct:85,industri:[54,67],info:[31,41,67,68,69,72],inform:[0,13,29,67,72],infrar:[79,82],init:[1,5,16,34],initi:[3,4,5,15,31,35],inlin:31,inner_dont_crash:31,input:[7,53,54,57,58,59,60,61,62,85],insert:6,insid:[34,53,57,58,59,60,61,62,66,81],instal:[24,32,40,63,75,76,77,78,79,80,81,82,83,84,85,86,87],instanc:[7,10,12,13,14,15,16],instantli:78,instead:[24,34],instruct:[24,25],integ:[8,10,13],integr:[7,16,63],intellig:[85,87],intend:32,intens:80,interest:[48,49,50],interfac:[10,53,54,57,58,59,60,61,62,75,76,79,80,81,84,85,87],interfacel:87,interfer:69,intern:63,internet:[46,47],interpol:85,interrupt:[29,31],interv:13,intrus:87,invad:[46,47],invalid:[31,34],invok:31,io0:[70,71],io12:[70,71],io13:[70,71],io15:[70,71],io16:[70,71],io17:[70,71],io18:[70,71],io19:[70,71],io1:[70,71],io21:[70,71],io22:[70,71],io23:[70,71],io25:[70,71],io26:[70,71],io2:[70,71],io34:[70,71],io35:[70,71],io36:[70,71],io3:[70,71],io5:[70,71],ioerror:34,ion:[13,14],iot:66,ip5306:63,irrig:69,ispress:1,isreleas:1,issu:[10,88],item:31,jack:72,joypad:[46,47],joypsp:[46,47],jpeg:0,json:13,jtag:31,jumper:72,just:[29,42],kei:[31,54,81],keyboard:[31,59],kind:[0,36],kit:[29,34,55,57,58,59,60,61,62],knock:[46,47],know:36,known:16,lan:55,larg:[76,85],larger:5,last:31,lastest:29,latenc:15,later:31,latest:36,lbeg:31,lcd:[1,2,6,28,35,53,57,58,59,60,61,62,69],lcount:31,lead:[41,67],leap:[57,58,60,61,62],leav:29,led:[12,53,57,60,86],left:[5,36,42],lego:[53,57,59,60,75,76,77,78,79,80,81,82,83,84,85,86,87],len:31,lend:31,length:16,less:[15,68],let:36,letter:59,level:[15,31,85],liabil:0,liabl:0,lib:32,librari:[31,35,46,47,81],light:[55,74,79,85,86],light_driv:31,light_init:31,lightweight:[46,47],lik:32,like:[24,29,30,34,42,59,66,70,71,84,85],limit:[0,31],line0:[70,71],line1:[70,71],line:[3,4,5,6,16,24,31,34,79],link:[34,41,46,47],linux:32,lipo:63,list:[0,10,25,32],listdir:17,littl:36,llllllll:[3,4],load:[31,32,46,47,85],local:28,localtim:13,locat:[31,34],log:[24,31],log_level:31,logic:54,login:[24,30],logist:67,logout:24,look:[24,31],loop:[12,35,36],lora:[55,64],lost:67,low:[69,72,76,85],lower:[31,41,76],lx6:63,m5_shuttle_run:[46,47],m5bala:32,m5burner:87,m5cam:[26,29],m5camera:[29,32],m5cloud:28,m5ez:[46,47],m5flow:[29,36],m5go:[20,29,32,60,77,78,82,83,84,86,87],m5stack:[0,1,3,4,5,6,18,20,25,27,30,32,46,81,84,88],m5stack_btctick:[46,47],m5stack_crackscreen:[46,47],m5stack_esp32_radio:[46,47],m5stack_ethpric:[46,47],m5stack_flappybird_gam:[46,47],m5stackhidctrlaltdel:[46,47],m5stacksam:[46,47],m5ui:36,m5widget:[46,47],m8n:67,mac:32,machin:[1,3,4,5,6,9],maco:35,macsbug:[46,47],made:[0,31,46,47],mag3110:[53,57,60],magic:31,magnet:54,magnetomet:[57,60,61],mai:[10,15,24,31],maicoin:[46,47],main:[31,34,35],main_task:31,mainli:31,make:[24,31,32,34,36,59],makei:55,makuna:27,manag:[25,34,35,67],mani:[59,87],manual:[24,57,58,59,60,61,62,70,71],manufactur:16,map:36,mario:59,mark:34,markdown:[46,47],master:[10,14],masterhax_5g:30,match:31,maximum:[16,63],maxmium:63,mean:[29,30,31,35,36,40,76,80],meaning:31,measur:[7,76,77,87],medit:31,meet:79,mega328p:[53,81],mem:[53,57,59,60,61],memori:[10,13,31,36,63],menu:[31,34,36,46,47],menuconfig:[13,31],merchant:0,merg:0,messag:30,meter:[54,69,72],method:[15,16],mhz:14,mic:[2,63],mic_adc:6,micro:[46,47],microphon:[53,57,60,72],microphone_ent:6,microphone_loop:6,microprocessor:63,micropython:[15,28,32,33,53,57,58,59,60,61,62,67,69,72,86],might:31,mini:68,miniterm:31,minut:[13,29,36],miso:[1,3,4,5,15,70,71],miss:34,mkdir:34,mlx90640:87,mobil:[26,30,36],mode:[8,14,31,53,57,58,59,60,61,62,63,69],model:[12,53,57,58,59,60,61,62],modifi:0,modul:[0,49,53,63,71,78,87],moment:[26,36,69],monitor:[46,47],month:13,more:[32,34,41,56,66,76],mosi:[1,3,4,5,15,70,71],most:34,motherboard:54,motion:[54,57,58,60,61,62],motor:[28,53,85],moudl:72,mount:25,mountsd:17,movement:87,mp3:[46,47],mpu6050:[53,57,60,63],mpu6050_tockn:27,mpu9250:[57,59,61,62],mpu:60,msk:69,msys2:24,msys32:24,multiapp:[46,47],multipli:12,music:36,must:[0,27],my_test:35,n20:53,name:[13,24,25,26,30,31,35,36,67,69,72,87],navig:[34,67],nbyte:14,necessari:[27,28,34,57,58,60,61,62,63],need:[5,25,29,31,35,36,48,49,50,68,69],neo:67,neopixel:[11,81],neopixelbu:27,nesemu:59,network:[30,36,68],never:34,newer:34,nintendo:59,nitrogen:72,nixi:[46,47],nixietubem5:[46,47],noheap:[14,15],non:[0,18,87],none:[1,7,10,12,13,15,16,18],noninfring:0,normal:[29,68],note:[3,4,5,8,10,12,13,14,15,48,49,50,64],noth:[31,36],notic:0,notifi:72,now:[14,26,28,29,30,35,42],npw:12,nss:69,ntp:[13,68],number:[8,10,12,15,72],object:[7,8,10,12,13,14,15,16,35],obstacl:79,obtain:0,occasion:31,occur:31,occurr:31,off:[24,31,46,47],offic:29,offici:[29,41],on_releasedfor:1,on_waspress:1,on_wasreleas:1,onc:[30,34,35,36],one:[13,25,26,31,32,42,68,78,88],one_shot:15,ones:31,onli:[8,10,14,15,26,29,31,58,61,62,78,85],onto:36,ook:69,open:[0,24,25,26,27,30,34,35,88],oper:[15,32,54],option:[5,7,10,12,13,29,31,32],orang:[3,4,5],org:13,origin:[0,24],orspecif:5,oscilloscop:[46,47],osed:76,other:[0,10,15,31,69,74],otherwis:[0,35],our:[36,41,48,49,50,68],ourselv:41,out:[0,9,15,24,31,46,47,76],outlet:85,output:[7,8,14,15,54,63,69,76,79,80],ov2640:63,over:[0,31,35],overwrit:31,own:[29,72],pack:71,packag:54,packet:[46,47],packetmonitor:[46,47],pacman:[31,46,47],pad:76,page:[46,47],pair:[36,79],panda:[55,56],panel:42,panic:31,parament:[3,4,5,7,8,10,12,13,14,15,16,18],paramet:[10,13,36,56,72],pariti:16,part:[0,46,47],parti:0,particip:36,particular:0,partit:31,pass:6,password:30,past:34,path:[24,34],pb0:81,pc2:81,pc3:81,pd0:81,perfect:85,perform:[67,68],peripher:[2,10,12,14],perman:24,permiss:[0,34],permit:[0,34],person:0,pfiac:31,phisic:5,phone:[26,30,36,72],photo:[46,47],piano:81,piexl:87,pin:[1,3,4,5,6,9,10,14,15,29,53,54,57,59,60,68,69,70,71,74,78,81],pinin:9,pink:5,pinmod:69,pinnam:74,pinnumb:74,pinout:9,pio:27,pir:[55,57],pitch:[54,84],pix_num:12,pixel:[3,4,5,63],place:88,plai:[46,47],plastic:[53,54,57,58,59,60,61,62],platform:[27,46,47],platformio:[27,46,47],playabl:[46,47],player:[36,46,47],plc:55,pleas:[19,20,21,22,28,29,30,32,34,35,36,41,42,48,49,50,88],plug:[25,26],pocketcomput:59,pogo:[53,57,59,60],point:5,polici:0,pool:13,pop:6,port:[10,29,31,35,46,47,68,72,78,86],portabl:68,portbl:65,portion:0,posit:[3,4,5,12,16,67],pot:[55,57],potentiomet:83,power:[26,28,30,36,54,63,69,72,74,85],practic:32,practices_blockli:36,practices_micropython:36,pratic:36,preced:[0,31],precis:[12,87],prefer:34,prepar:27,prescal:15,preserv:[13,24],press:[1,30,36],pressedfor:1,pressur:77,pretti:76,prevent:69,previou:31,previous:[24,36],previusli:24,price:[46,47],primari:31,print:[1,3,4,6,15,24,28,31,35,46,47],print_filt:31,printenv:24,printf:31,prio:31,privaci:34,pro:31,probe:76,problem:[34,68,69],proce:25,procedur:29,process:79,processor:54,produc:[12,31],product:[0,41,48,49,50],profit:0,program:[16,28,29,30,31,34,46,47,53,57,58,59,60,61,62,63,67,68,69,72,87],programm:[54,69],progress:63,project:[24,27,31,63],prompt:30,protect:13,proto:[54,55],protocol:[16,34],prototy:54,prototyp:[46,47],provid:[0,16,25,64],psp:[46,47],psram:[14,29],publish:0,pull:69,purchas:[53,57,59,60,61,63,65,67,68,69,71,72,75,76,77,78,79,80,81,82,83,84,85,86,87],purpos:[0,15],pyseri:31,python3:34,python:[14,15,31,34,36,53,57,59,60],quad:72,question:[41,88],quickli:[31,41,69],quickstart:[53,87],quit:31,radiu:[3,4,5],rail:68,rainbow:12,rais:14,ram:31,rang:[6,7,8,12,31,77],rate:[63,69],raw:[6,63],read:[10,14,28,31,34,42,56,69,72,76,80],read_buf:14,readfrom_mem:10,readinto:[14,16],readraw:6,readthedoc:36,real:26,realiz:16,realli:26,receiv:[16,31,69,79],recept:67,recompil:31,rectangl:5,recurs:34,red:[3,4,5,36],redistribut:0,refer:[16,31,41,42],reflash:31,reflect:79,regist:[7,16,31],reiniti:10,reinstal:29,relai:[31,54,55],releas:1,releasedfor:1,reliabl:85,reload:15,rememb:24,remot:[31,57,58,59,60,61,62,69,72],renam:35,render:[46,47],replac:24,repositori:[0,27],repres:34,request:[14,88],requir:[10,12,16,31],research:0,reserv:[0,10,54,63,74],reset:30,resist:76,resistor:[76,80],resolut:[7,8,63,77],respons:0,restart:[24,31,34],restor:13,restrict:[0,31],result:[31,76],resum:31,retain:0,revert:31,rgb565:63,rgb:[12,53,55,57,60,63,81],rgbq:12,rgbw:12,right:[0,25,36],rmt:12,robot:79,rotari:83,rotat:5,round:5,routin:35,rs232:16,rs422:16,rs484:54,rs485:[16,54],rsa:63,rtc:11,run:[24,25,26,27,31,34,35,36,46,47,57,60,61,63,87],rxd:74,safe:85,same:[5,10,12,14,31,79],sampl:8,sar:[7,31],sat:12,save:[13,24,36],scan:[30,36,63],scene:31,schemat:[57,58,59,61,62,63,74],sck:[1,3,4,5,15],screen:[5,30,31,34,35,36],script:24,sdcard:14,search:[34,35],second:[13,25,26,31,36],secondari:31,section:[24,25,36,41,64,88],secur:34,see:[26,31],select:[7,10,29,35],sell:0,semicolon:31,send:[46,47],sens:87,sensit:[67,69],sensor:[46,47,63,71,76,77,79,80,82,83,86,87],sent:[31,85],seri:[31,41,65,67,69,70,71,72],serial:[26,29,31,32,35,72],server:[46,47,68],servic:[48,49,50],set:[5,8,10,12,13,16,18,24,30,31,32,36,46,47],setcolor:28,setcursor:28,setp:[30,35],setup:[24,30,35],sha2:63,shall:0,share:31,shell:24,shortcut:31,should:[24,31,34],show:[12,25,29,30,34,35,36,87],shown:[28,30,31,35,36,69],side:36,sidebar:42,sierra:34,sig:76,signal:[10,76,79,80],silab:25,silabsusbdriverdisk:25,sim800:[55,64],similar:31,similarli:30,simpl:[32,36,46,47,57,58,60,61,62],simple_monitor:31,simultan:14,singl:85,six:[57,60,61],size:[10,53,54,57,58,59,60,61,62,63],sk6812:[53,57,60],sketch:35,sketchbook:34,slab_usbtouart:34,slash:24,slave:10,sleep:[1,13,28],sleep_m:12,slide:54,slow:68,small:[46,47,66,67,69,72],smaller:5,smtp:68,snippet:31,socket:[34,55,71,74],softwar:[32,34,35],soil:76,solut:[31,72],solv:[68,69],somatosensori:59,some:[15,31,34,36,69],someon:82,someth:[24,31,34],sometim:[31,34],soon:[19,20,21,22,29],sound:[18,46,47],sourc:[0,31,32],space:[31,46,47],spaceshoot:[46,47],speak:18,speaker:[2,53,57,58,59,60,61,62],special:31,specif:[24,31,32,63],specifi:[0,31,35,86],spectrum:69,speed:[14,68],spi:[1,5,11,15,16,31],spider:72,spihost:15,spread:69,sram:[53,57,59,60,63],ssl:34,stack:31,stackabl:41,stai:[29,66],stall:31,standard:85,staright:[76,80],start:[10,12,16,24,30,31,41],startup:31,statement:69,statu:31,stead:[57,58,60,61,62],step:[28,29],stepmotor:32,stepmotor_0:28,stepmotor_xyz:28,sticker:[54,68],still:31,still_dont_crash:31,stop:[16,31],store:[16,41],storeprohibit:31,straight:[35,76],stream:[46,47],string:[5,13,31],strip:12,strong:54,stub:31,studio:27,style:8,subject:0,sublicens:0,submodul:34,substanti:0,subtract:12,success:[7,13,14,31],successfulli:[26,29,30,35],suddenli:29,suggest:[32,34,35,69],suitabl:[46,47],summari:0,suppli:[28,67,69],support:[7,10,12,14,31,36,46,47,48,49,50,53,57,58,59,60,61,62,69,72,74],suppress:31,sure:[32,34,36],surfac:[79,87],svga:63,sxga:63,system:[0,13,24,32,34,46,47,69,72,85],tablet:[30,36],tack:35,tag1:31,tag2:31,tag3:31,tag:31,take:[0,69],target:[31,87],task:[31,41],tcb:15,tcounter:15,tcp:68,tech:[48,49,50],technot:34,temp:[53,57,58,59,60,61,62],temperatur:[66,71,77,87],tensilica:[0,63],term:0,termin:[24,25,26,31,34,54],test:[28,34],tetri:[46,47,59],tft:[46,47,53,57,58,59,60,61,62],tft_espi:[46,47],than:[15,31],thank:[48,49,50],thei:[15,16,24,31],them:31,thermal:[46,47,55],thermomet:87,thermopil:87,thi:[0,5,7,10,12,14,16,24,25,27,29,30,31,32,34,35,36,41,64,66,68,85],thing:41,thinker:69,third:0,those:31,three:[16,59,78,86],threshold:[41,76,80],through:[31,32,34,36,53,57,58,59,60,61,62,63,67,69,72,86],ticker:[46,47],time:[10,12,13,16,24,25,26,30,31,32,36,78,79],timeout:1,timer:[11,36],timernum:15,tini:[0,63],titl:42,tlsv1:34,tlsv1_alert_protocol_vers:34,tn2459:34,tockn:27,togeth:[31,76],toggl:15,tool:[27,29,31,34,66],toolbar:27,top:[30,36],tort:0,touchabl:81,track:[67,79],tradit:69,transceiv:63,transfer:[63,75],transmiss:26,transmit:[72,79],transmitt:16,triangel:5,triangl:[3,4,5],truli:63,ttl:63,tube:[46,47,79],tupl:13,two:[7,8,15,25,28,42,69,74,75,76,77,78,79,80,81,82,83,84,85,86,87],txd:74,type:[24,31,32,34,53,57,58,59,60,61,62,63,66],typec:[53,57,58,59,60,61,62],u1_rx:[70,71],u1_tx:[70,71],u2_rx:70,u2_tx:[70,71],uart0:16,uart1:16,uart2:16,uart:[11,53,57,58,59,60,61,62],ublox:67,udp:68,uiflow:36,ultra:69,under:0,unhandl:31,unit:57,univers:16,uno:[53,81],unplug:25,unzip:[27,29],uos:17,updat:[13,24,34,35,46,47],upgrad:[32,35],upload:[30,35,36],upper:5,urat:74,url:[26,30,36],usart2:72,usb:[26,27,29,32,34,35,53,55,57,58,59,60,61,62,63,66,73],use:[0,10,30,31,36,76],used:[0,3,4,5,7,8,10,12,14,15,16,27,31,34,69,79],useful:31,user:[31,32,57,58,59,60,61,62,65,68,70,71,78],userguid:74,using:[8,14,15,27,31,36,46,47,86],usr:34,util:34,utim:[1,13,28],uxga:63,vac:85,val:[6,9],valid:8,valu:[5,7,9,10,31],variabl:[24,31,76],varieti:16,variou:[12,16,31],vaul:8,vdc:85,vdd:[7,8],verbos:31,veri:12,verifi:25,versatil:31,version:[25,29,31,34,42],vfs:31,vh3:75,via:[8,29,31,34,57,58,60,61,62,66,72,81,87],video:26,view:[32,35,63],visit:[29,34,36],visual:[27,87],visualstudio:27,voic:72,voltag:[7,8],vspi:[14,16],w5500:68,wai:[46,47],wait:[19,20,21,22,26,29,31,35],wake:13,wall:85,want:[29,30,31,34,35,36,41,85],warn:31,warranti:0,waspress:1,wasreleas:1,water:76,web:[46,47,68,72],webcam:26,webid:36,websit:[29,41,54,65,66,67,68,69,70,71,72],week:[57,58,60,61,62],weight:[53,54,57,58,59,60,61,62,63],welcom:41,what:31,when:[8,28,31,34,35,68,79],whenev:36,where:[0,31,34],whether:[0,34,35,80,82],which:[0,7,8,12,13,25,29,30,31,34,35,36,53,66,68,70,71,87],white:[3,4,5,6,28,79],who:[68,69],whom:0,wide:[16,79],widget:[46,47],width:5,wifi:[31,32,36,46,47,63],wil:14,wild:67,window:[32,34],windows7:25,winpti:31,wireless:[63,68,69],without:[0,26,31],wonder:63,wonderchip:[57,60,61],wordpress:[46,47],work:[31,36,85],workshop:36,world:[34,35],would:32,writ:16,write:[6,10,12,13,15],write_buf:14,writeto_mem:10,written:[8,14,31],www:[34,35],x10:10,x64:25,x86:25,xcode:34,xcrun:34,xtensa:31,ycbcr422:63,year:13,you:[0,24,25,26,27,28,29,30,31,34,35,36,40,41,42,46,47,48,49,50,53,57,58,59,60,61,62,63,67,69,70,71,72,76,78,80,84,85,86,87,88],your:[0,24,25,26,27,30,35,36,46,47,63,66,67,69,72],yuv:63,zh_cn:[24,31],zone:13},titles:["Copyrights and Licenses","Button API","API Reference","LCD API for Arduino","LCD API for Micropython","LCD API","Mic API","ADC API","DAC API","GPIO API","I2C API","Peripherals API","Neopixel API","RTC API","SPI API","Timer API","UART API","SD Card API","Speaker API","ESP32CAM Cases","Basic Cases","M5GO Cases","M5Stack Core Cases","<no title>","Add IDF_PATH to User Profile","Establish Serial Connection","ESP32CAM User Guide","M5Bala","M5Stack StepMotor Module","How to Burn Firmware","How to Connect WIFI Using Core","IDF Monitor","Get Started","M5Stack Core Get Started","M5Stack Core Get Started(MacOS, Arduino)","M5Stack-Core Get Started(Windows, Arudino)","M5Stack Core Get Started(Blockly/MicroPython)","Practices with Arduino IDE","Practices with M5Flow(Blockly)","Practices with M5Flow(MicroPython)","Upgrade M5Stack Lib","M5Stack","Switch Between Languages/\u5207\u6362\u8bed\u8a00","M5Stack-SD-Updater","M5Widgets","TFT_eSPI","Awesome","M5Stack-awesome","M5Stack-Core FAQ","M5Stack-FAQ","M5Stack-Module FAQ","<no title>","Headers Socket","M5Stack BALA","M5Stack PLC Module","Product Documents","M5Stack Core Description","M5Stack M5GO","M5Stack BASIC","M5Stack FACES","M5Stack FIRE","M5Stack GRAY","M5Stack PANDA","ESP32CAM","M5Stack Module Description","M5Stack BATTERY Module","M5Stack BTC Module","M5Stack GPS Module","M5Stack LAN Module","M5Stack LORA Module","M5Stack PROTO Module","M5Stack PROTO Kit","M5Stack SIM800L Module","M5Stack Tools Description","M5Stack USB Downloader","Unit 3.96port","Unit moisture","Unit ENV","Unit HUB","Unit IR","Unit light","Unit makey","Unit PIR","Unit POT","Unit proto","Unit relay","Unit RGB","Unit thermal","Resources"],titleterms:{"96port":75,"\u5207\u6362\u8bed\u8a00":42,"case":[19,20,21,22],"function":[1,5,6,7,8,9,10,12,13,14,15,16,18],"new":35,"switch":42,"true":10,For:[25,29],GPS:67,IDE:[34,35,37,40],Using:30,With:31,accessori:55,adc:7,add:24,addr:10,address:31,all:28,api:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],applic:[31,54,55,59,67,68,69,72,81,85,87],arduino:[3,34,35,37,40],arg:[10,16],arudino:35,automat:31,awesom:[46,47],background_color:5,bala:53,base:55,basic:[20,58],batteri:65,baudrat:14,below:[28,33,40],between:42,bit:14,blockli:[36,38],board:[29,32,34],box:[26,40],bright:[5,12],btc:66,buf:[10,14,16],build:0,burn:29,button:1,callback:15,card:17,check:25,choic:29,circl:[3,4],clear:5,click:[29,40],code:28,color565:[3,4],color:[3,4,5],compil:[27,31],complex:31,compon:0,connect:[25,28,30],content:[34,35],copi:28,copyright:0,core:[22,28,30,33,34,35,36,48,55,56],dac:8,date:13,dbgpin:15,decod:31,degre:5,demo:26,depend:27,descript:[7,8,10,12,13,14,15,16,52,53,54,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87],diagram:60,displai:31,document:[32,53,54,55,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87],download:[29,35,74],drawcircl:5,drawlin:5,drawpixel:[3,4,5],drawrect:5,drawroundrect:5,drawtriangl:5,driver:25,duplex:14,durat:18,env:77,environ:[34,35],eras:29,esp32:[34,35],esp32cam:[19,26,63],establish:25,exampl:[31,34,35],execut:35,face:59,factorytest:35,faq:[48,49,50],featur:[53,54,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,75,76,77,78,79,80,81,82,83,84,85,86,87],figur:40,file:28,fillcircl:5,fillcolor:[3,4],fillrect:5,fillroundrect:5,fillscreen:[3,4,5],filltriangl:5,filter:31,fire:60,firmwar:[0,29],firstbit:14,flash:31,freq:18,gdb:31,gdbstub:31,get:[32,33,34,35,36],git:35,gpio:9,grai:61,guid:26,header:52,how:[29,30],hub:78,hue:12,i2c:10,idf:31,idf_path:24,includ:[40,53,54,57,58,59,60,61,62,63,65,66,67,68,69,70,71,72,74],init:[10,13,15],ino:35,instal:[25,27,34,35],interact:31,interfac:[70,71],introduct:32,issu:31,kit:71,known:31,lan:68,languag:42,launch:31,lcd:[3,4,5],len:16,lib:[35,40],libhal:0,librari:[27,34,40],licens:0,light:80,like:[32,35],linux:24,lora:69,m5bala:27,m5burner:29,m5flow:[38,39],m5go:[21,57],m5stack:[22,28,33,34,35,36,40,41,43,47,48,49,50,53,54,55,56,57,58,59,60,61,62,64,65,66,67,68,69,70,71,72,73,74],m5widget:44,machin:[7,8,10,12,13,14,15,16],maco:[24,25,29,34],main:28,makei:81,manag:40,max_len:16,mic:6,micropython:[4,27,36,39],miso:14,mit:0,mode:[10,15,32,33],modul:[28,50,54,55,64,65,66,67,68,69,70,72],moistur:76,monitor:31,more:[31,60],mosi:14,nbyte:10,need:32,neopixel:12,note:[34,69,74],now:[13,36],ntp_sync:13,num:12,observ:31,off:16,out:26,output:31,overview:[3,4],panda:62,paramet:[53,57,58,59,60,61,62,74],paus:31,period:15,peripher:11,phase:14,pick:33,pin:[7,8,12,16],pir:82,pixel:12,plai:36,plc:54,plu:0,polar:14,port:[25,34],pos:12,pot:83,practic:[37,38,39],print:5,product:55,profil:24,program:[32,33,35,36],proto:[70,71,84],quick:[27,28,31],rd_buf:14,read:[7,16,60],readfrom:10,readfrom_into:10,readlin:16,refer:[2,3,4],relai:85,relat:32,reset:[29,31],resourc:88,rgb:86,right:29,rtc:13,rule:31,run:28,satur:12,scan:10,sck:14,scl:10,sda:10,search:40,select:[34,40],serial:[25,34],server:13,set:[34,35],setbright:5,setcolor:5,sethsb:12,setrot:5,settextcolor:5,show:40,sim800l:72,simpl:31,sketch:[34,40],slave_addr:10,slave_bufflen:10,slave_busi:10,slave_rolen:10,socket:52,softwar:[0,27],song:36,speaker:18,speed:10,spi:[3,4,14],spihost:14,start:[27,28,32,33,34,35,36,40],stepmotor:28,stop:10,support:[34,35],sync:13,text:5,tft_espi:45,thermal:87,timer:15,timer_no:15,tinybas:0,tjpgdec:0,toggl:31,tone:18,tool:[0,55,73],type:[12,40],uart:16,uart_num:16,uint8_t:5,unit:[7,55,75,76,77,78,79,80,81,82,83,84,85,86,87],updat:[12,40,43],update_period:13,upgrad:40,upload:[28,34],usag:[1,3,4,5,6,7,8,9,10,12,13,14,15,16,17,18],usb:[25,74],user:[24,26],valu:[8,15],volum:18,what:32,which:32,white:12,wifi:30,window:[24,25,29,31,35],wr_buf:14,write:[8,14,16],write_readinto:14,writeto:10,xtensa:0,you:32,your:[29,32,33,34]}}) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..5ddf312c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8162 @@ +{ + "name": "docsify-themeable", + "version": "0.4.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz", + "integrity": "sha1-vXHZsZKvl435FYKdOdQJRFZDmgw=", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.51" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.51", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.51.tgz", + "integrity": "sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0=", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz", + "integrity": "sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A==", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "10.11.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.11.4.tgz", + "integrity": "sha512-ojnbBiKkZFYRfQpmtnnWTMw+rzGp/JiystjluW9jgN3VzRwilXddJ6aGQ9V/7iuDG06SBgn7ozW9k3zcAnYjYQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, + "acorn-jsx": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz", + "integrity": "sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw==", + "dev": true, + "requires": { + "acorn": "^5.0.3" + } + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "ajv": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz", + "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha1-dhfBkXQB/Yykooqtzj266Yr+tDI=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, + "autoprefixer": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.1.5.tgz", + "integrity": "sha512-kk4Zb6RUc58ld7gdosERHMF3DzIYJc2fp5sX46qEsGXQQy5bXsu8qyLjoxuY1NuQ/cJuCYnx99BfjwnRggrYIw==", + "dev": true, + "requires": { + "browserslist": "^4.1.0", + "caniuse-lite": "^1.0.30000884", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.2", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "browserslist": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.2.tgz", + "integrity": "sha512-docXmVcYth9AiW5183dEe2IxnbmpXF4jiM6efGBVRAli/iDSS894Svvjenrv5NPqAJ4dEJULmT4MSvmLG9qoYg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000888", + "electron-to-chromium": "^1.3.73", + "node-releases": "^1.0.0-alpha.12" + } + }, + "caniuse-lite": { + "version": "1.0.30000889", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000889.tgz", + "integrity": "sha512-MFxcQ6x/LEEoaIhO7Zdb7Eg8YyNONN+WBnS5ERJ0li2yRw51+i4xXUNxnLaveTb/4ZoJqsWKEmlomhG2pYzlQA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.73.tgz", + "integrity": "sha512-6PIg7v9zRoVGh6EheRF8h6Plti+3Yo/qtHobS4/Htyt53DNHmKKGFqSae1AIk0k1S4gCQvt7I2WgpbuZNcDY+g==", + "dev": true + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "axios": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.17.1.tgz", + "integrity": "sha1-LY4+XQvb1zJ/kbyBT1xXZg+Bgk0=", + "dev": true, + "requires": { + "follow-redirects": "^1.2.5", + "is-buffer": "^1.1.5" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-external-helpers": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz", + "integrity": "sha1-IoX0iwK9Xe3oUXXK+MYuhq3M76E=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "browser-sync": { + "version": "2.24.7", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.24.7.tgz", + "integrity": "sha512-NqXek0cPNEayQm77VGnD+qrwcVBTKMIQ9bdP6IWDRUTU1Bk7tZeq5QR3OG5Rr36Rao1t+Vx1QnfolHvvr5qsTA==", + "dev": true, + "requires": { + "browser-sync-ui": "v1.0.1", + "bs-recipes": "1.3.4", + "chokidar": "1.7.0", + "connect": "3.6.6", + "connect-history-api-fallback": "^1.5.0", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "3.0.2", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "1.15.2", + "immutable": "3.8.2", + "localtunnel": "1.9.0", + "micromatch": "2.3.11", + "opn": "5.3.0", + "portscanner": "2.1.1", + "qs": "6.2.3", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "2.1.1", + "ua-parser-js": "0.7.17", + "yargs": "6.4.0" + } + }, + "browser-sync-ui": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-1.0.1.tgz", + "integrity": "sha512-RIxmwVVcUFhRd1zxp7m2FfLnXHf59x4Gtj8HFwTA//3VgYI3AKkaQAuDL8KDJnE59XqCshxZa13JYuIWtZlKQg==", + "dev": true, + "requires": { + "async-each-series": "0.1.1", + "connect-history-api-fallback": "^1.1.0", + "immutable": "^3.7.6", + "server-destroy": "1.0.1", + "socket.io-client": "2.0.4", + "stream-throttle": "^0.1.3" + } + }, + "browserslist": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.7.tgz", + "integrity": "sha512-oYVLxFVqpX9uMhOIQBLtZL+CX4uY8ZpWcjNTaxyWl5rO8yA9SSNikFnAfvk8J3P/7z3BZwNmEqFKaJoYltj3MQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000835", + "electron-to-chromium": "^1.3.45" + } + }, + "bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha1-DS1NSKcYyMBEdp/cT4lZLci2lYU=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30000842", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000842.tgz", + "integrity": "sha512-juspQHLwQRgptEM03HN66SpM/ggZUB+m49NAgJIaIS11aXVNeRB57sEY1X6tEzeK2THGvYWKZZu1wIbh+W7YTA==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" + }, + "dependencies": { + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + } + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", + "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz", + "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", + "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", + "dev": true, + "requires": { + "mime-db": ">= 1.34.0 < 2" + } + }, + "compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.14", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "css-vars-ponyfill": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/css-vars-ponyfill/-/css-vars-ponyfill-1.11.1.tgz", + "integrity": "sha512-H6j7dMlOjI/+L9GYW6BfBhQf0mz5qKe4t4JG/mN2v2Z+qgV36SOkq1K9iU+KzT7lFhI/AD/l5snn7qKHyOjinA==", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "^2.0.5", + "object-keys": "^1.0.8" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.1.tgz", + "integrity": "sha512-2s2uojwu7aq0K94DwrnJwo/mTkGiPqy2cU7z5BVXmhb564WgITZR3ruZMUIJ8Ymb5ruew244odZCR23/lZoxXg==", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha1-p2o+0YVb56ASu4rBbLgPPADcKPA=", + "dev": true + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "eazy-logger": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-3.0.2.tgz", + "integrity": "sha1-oyWqXlPROiIliJsqxBE7K5Y29Pw=", + "dev": true, + "requires": { + "tfunk": "^3.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.47", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz", + "integrity": "sha1-dk6IfKkQTQGgrI6r7n38DizhQQQ=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "engine.io": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.0.tgz", + "integrity": "sha512-mRbgmAtQ4GAlKwuPnnAvXXwdPhEx+jkc0OBCLrXuD/CRvwNK3AxRSnqK4FSqmAMRRHryVJP8TopOvmEaA64fKw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-client": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", + "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "~1.0.2" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.1.tgz", + "integrity": "sha512-hgrDtGWz368b7Wqf+v1Z69O3ZebNR0+GA7PtDdbmuz4rInFVUV9uw7whjZEiWyLzCjVb5Rs5WRN1TAS6eo7AYA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "imurmurhash": "^0.1.4", + "inquirer": "^6.1.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.12.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^4.0.3", + "text-table": "^0.2.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "debug": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.0.1.tgz", + "integrity": "sha512-K23FHJ/Mt404FSlp6gSZCevIbTMLX0j3fmHhUEhQ3Wq0FMODW3+cUSoLdy1Gx4polAf4t/lphhmHH35BB8cLYw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "globals": { + "version": "11.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.8.0.tgz", + "integrity": "sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-plugin-html": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.6.tgz", + "integrity": "sha512-nj6A9oK+7BKnMm0E7dMRH3r75BfpkXtcVIb3pFC4AcDdBTNyg2NGxHXyFNT1emW4VsR7P2SZvRXXQtUR+kY08w==", + "dev": true, + "requires": { + "htmlparser2": "^3.8.2" + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.0.0.tgz", + "integrity": "sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg==", + "dev": true, + "requires": { + "acorn": "^5.6.0", + "acorn-jsx": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "estree-walker": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.2.1.tgz", + "integrity": "sha1-va/oCVOD2EFNXcLs9MkXO225QS4=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", + "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.0.1", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.1", + "micromatch": "^3.1.10" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + } + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" + } + }, + "follow-redirects": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.8.tgz", + "integrity": "sha512-sy1mXPmv7kLAMKW/8XofG7o9T+6gAjzdZK4AJF6ryqQYUa/hnzgiypoeUecZ53x7XiqKNEpNqLtS97MshW2nxg==", + "dev": true, + "requires": { + "debug": "=3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + }, + "dependencies": { + "combined-stream": { + "version": "1.0.6", + "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + } + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "dev": true + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + } + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "^1.0.2" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "2.0.1" + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.15.2.tgz", + "integrity": "sha1-ZC/cr/5S00SNK9o7AHnpQJBk2jE=", + "dev": true, + "requires": { + "eventemitter3": "1.x.x", + "requires-port": "1.x.x" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "include-media": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/include-media/-/include-media-1.4.9.tgz", + "integrity": "sha1-0AILe+PrLVSGiiCUNZXOOA4LxDs=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "inquirer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", + "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-base64": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "limiter": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.3.tgz", + "integrity": "sha512-zrycnIMsLw/3ZxTbW7HCez56rcFGecWTx5OZNplzcXUUmJLmoYArC6qdJzmAN5BWiNXGcpjhF9RQ1HSv5zebEw==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "localtunnel": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-1.9.0.tgz", + "integrity": "sha512-wCIiIHJ8kKIcWkTQE3m1VRABvsH2ZuOkiOpZUofUCf6Q42v3VIZ+Q0YfX1Z4sYDRj0muiKL1bLvz1FeoxsPO0w==", + "dev": true, + "requires": { + "axios": "0.17.1", + "debug": "2.6.8", + "openurl": "1.1.1", + "yargs": "6.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "^3.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "magic-string": { + "version": "0.22.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", + "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", + "dev": true, + "requires": { + "vlq": "^0.2.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "merge2": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", + "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz", + "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.19", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz", + "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", + "dev": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", + "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.0-alpha.12.tgz", + "integrity": "sha512-VPB4rTPqpVyWKBHbSa4YPFme3+8WHsOSpvbp0Mfj0bWsC8TEjt4HQrLl1hsBDELlp1nB4lflSgSuGTYiuyaP7Q==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "node-sass": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", + "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "dev": true, + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "2.87.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm-run-all": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.3.tgz", + "integrity": "sha512-aOG0N3Eo/WW+q6sUIdzcV2COS8VnTZCmdji0VQIAZF3b+a3YWb0AD0vFIyjKec18A7beLGbaQ5jFTNI2bPt9Cg==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.4", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "ps-tree": "^1.1.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha1-OHW0sO96UsFW8NtB1GCduw+Us4c=", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "http://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "~2.3" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "portscanner": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.1.1.tgz", + "integrity": "sha1-6rtAnk3iSVD1oqUW01rnaTQ/u5Y=", + "dev": true, + "requires": { + "async": "1.5.2", + "is-number-like": "^1.0.3" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.5.tgz", + "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.5.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-cli": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-6.0.0.tgz", + "integrity": "sha512-7DuxMn1Wj6dJKbjKpZXOdAc5nl5NfPXiJbg0m/+tdObPvgk1xv4+lZgNKD3jL/kCrDRPf1jgFlmq1cHh8lBR2w==", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "chokidar": "^2.0.0", + "dependency-graph": "^0.7.0", + "fs-extra": "^7.0.0", + "get-stdin": "^6.0.0", + "globby": "^8.0.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "postcss-reporter": "^5.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "yargs": "^12.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.0.tgz", + "integrity": "sha512-EglNDLRpmaTWiD/qraZn6HREAEAHJcJOmxNEYwq6xeMKnVMAy3GUcFB+wXt2C6k4CNvB/mP1y/U3dzvKKj5OtQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.1.tgz", + "integrity": "sha512-B0vRAp1hRX4jgIOWFtjfNjd9OA9RWYZ6tqGA9/I/IrTMsxmKvtWy+ersM+jzpQqbC3YfLzeABPdeTgcJ9eu1qQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-flexbugs-fixes": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.1.0.tgz", + "integrity": "sha512-jr1LHxQvStNNAHlgco6PzY308zvLklh7SJVYuWUwyUQncofaAlD2l+P/gxKHOdqWKe7xJSkVLFF/2Tp+JqMSZA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "dev": true, + "requires": { + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-remove-null": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-remove-null/-/postcss-remove-null-1.2.1.tgz", + "integrity": "sha1-LRLAe9QoRn6ngdjg0i2g/MK65eg=", + "dev": true, + "requires": { + "lodash": "^3.10.1", + "postcss": "^5.0.2", + "require-directory": "^2.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reporter": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz", + "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==", + "dev": true, + "requires": { + "chalk": "^2.0.1", + "lodash": "^4.17.4", + "log-symbols": "^2.0.0", + "postcss": "^6.0.8" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + } + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, + "requires": { + "event-stream": "~3.3.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz", + "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha1-sSTeXE+6/LpUH0j/pzlw9KpFa08=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "^7.0.5" + } + }, + "rollup": { + "version": "0.66.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.66.4.tgz", + "integrity": "sha512-oV6dzR2zDYVOMUmrM1XMTW0NlZqKeZANAWH+A7BwCfE+mAfJ6xRkYbrM3qAossgyMxPN9aFBu8kRXf5HYB5gvw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "*" + } + }, + "rollup-plugin-babel": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-3.0.7.tgz", + "integrity": "sha512-bVe2y0z/V5Ax1qU8NX/0idmzIwJPdUGu8Xx3vXH73h0yGjxfv2gkFI82MBVg49SlsFlLTBadBHb67zy4TWM3hA==", + "dev": true, + "requires": { + "rollup-pluginutils": "^1.5.0" + } + }, + "rollup-plugin-commonjs": { + "version": "9.1.8", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.8.tgz", + "integrity": "sha512-c3nAfVVyEwbq9OohIeQudfQQdGV9Cl1RE8MUc90fH9UdtCiWAYpI+au3HxGwNf1DdV51HfBjCDbT4fwjsZEUUg==", + "dev": true, + "requires": { + "estree-walker": "^0.5.1", + "magic-string": "^0.22.4", + "resolve": "^1.5.0", + "rollup-pluginutils": "^2.0.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + } + } + } + }, + "rollup-plugin-eslint": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-eslint/-/rollup-plugin-eslint-5.0.0.tgz", + "integrity": "sha512-9WZKT2Ie3F4A/nWfkBQiq2J4g43jyurmYPAUAxdIRHDgIOPU7KgSER4icFne6ALY8vROPNKEDNAt8Z1eYV9oZw==", + "dev": true, + "requires": { + "eslint": "^5.1.0", + "rollup-pluginutils": "^2.3.0" + }, + "dependencies": { + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "rollup-pluginutils": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.1.tgz", + "integrity": "sha512-JZS8aJMHEHhqmY2QVPMXwKP6lsD1ShkrcGYjhAIvqKKdXQyPHw/9NF0tl3On/xOJ4ACkxfeG7AF+chfCN1NpBg==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + } + } + } + }, + "rollup-plugin-json": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz", + "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.3.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.2.tgz", + "integrity": "sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig==", + "dev": true + }, + "rollup-pluginutils": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.3.3.tgz", + "integrity": "sha512-2XZwja7b6P5q4RZ5FhyX1+f46xi1Z3qBKigLRZ6VTZjwbN0K1IFGMlwm06Uu0Emcre2Z63l77nq/pzn+KxIEoA==", + "dev": true, + "requires": { + "estree-walker": "^0.5.2", + "micromatch": "^2.3.11" + } + } + } + }, + "rollup-plugin-node-resolve": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz", + "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==", + "dev": true, + "requires": { + "builtin-modules": "^2.0.0", + "is-module": "^1.0.0", + "resolve": "^1.1.6" + }, + "dependencies": { + "builtin-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", + "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", + "dev": true + } + } + }, + "rollup-plugin-uglify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-uglify/-/rollup-plugin-uglify-4.0.0.tgz", + "integrity": "sha512-f6W31EQLzxSEYfN3x6/lyljHqXSoCjXKcTsnwz3evQvHgU1+qTzU2SE0SIG7tbAvaCewp2UaZ5x3k6nYsxOP9A==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0-beta.47", + "uglify-js": "^3.3.25" + } + }, + "rollup-pluginutils": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz", + "integrity": "sha1-HhVud4+UtyVb+hs9AXi+j1xVJAg=", + "dev": true, + "requires": { + "estree-walker": "^0.2.1", + "minimatch": "^3.0.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", + "dev": true + }, + "rxjs": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", + "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + }, + "dependencies": { + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "sass-utilities": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/sass-utilities/-/sass-utilities-0.0.4.tgz", + "integrity": "sha512-I6KvqplpqddtbQWYQNaNdl3f3SWT6C9T0uLfbHQcW+sS768NvNbQLt4c8Tns9DVF1UH1iFlhjVIboL6mn3daCg==", + "dev": true + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha1-8Tv5KOQrnD55OD5hzDmYtdFObN0=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + } + } + } + }, + "socket.io-adapter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true + }, + "socket.io-client": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~2.6.4", + "engine.io-client": "~3.1.0", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.1.1", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "has-binary2": "~1.0.2", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "^1.0.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "~0.1.1" + } + }, + "stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha1-rdV8jXzHOoFjDTHNVdOWHPr7qcM=", + "dev": true, + "requires": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + } + } + }, + "table": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", + "dev": true, + "requires": { + "ajv": "^6.0.1", + "ajv-keywords": "^3.0.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "tfunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tfunk/-/tfunk-3.1.0.tgz", + "integrity": "sha1-OORBT8ZJd9h6/apy+sttKfgve1s=", + "dev": true, + "requires": { + "chalk": "^1.1.1", + "object-path": "^0.9.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + } + } + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "requires": { + "glob": "^7.1.2" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "ua-parser-js": { + "version": "0.7.17", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz", + "integrity": "sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g==", + "dev": true + }, + "uglify-js": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.0.tgz", + "integrity": "sha512-Jcf5naPkX3rVPSQpRn9Vm6Rr572I1gTtR9LnqKgXjmOgfYQ/QS0V2WRStFR53Bdj520M66aCZqt9uzYXgtGrJQ==", + "dev": true, + "requires": { + "commander": "~2.15.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + } + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "~1.0.0", + "spdx-expression-parse": "~1.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.4.0.tgz", + "integrity": "sha1-gW4ahm1VmMzzTlWW3c4i2S2kkNQ=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.1.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..6d307e83 --- /dev/null +++ b/package.json @@ -0,0 +1,79 @@ +{ + "name": "docsify-themeable", + "version": "0.4.0", + "description": "A delightfully simple theme system for docsify.js. Features multiple themes with rich customization options, an improved desktop and mobile experience, and legacy browser support (IE10+).", + "author": "John Hildenbiddle", + "license": "MIT", + "homepage": "https://jhildenbiddle.github.io/docsify-themeable/", + "repository": { + "type": "git", + "url": "git+https://jhildenbiddle@github.com/jhildenbiddle/docsify-themeable.git" + }, + "bugs": { + "url": "https://github.com/jhildenbiddle/docsify-themeable/issues" + }, + "keywords": [ + "css", + "custom", + "docs", + "docsify", + "documentation", + "properties", + "theme", + "themes", + "themeable", + "variables" + ], + "browserslist": [ + "ie >= 10" + ], + "files": [ + "dist", + "src/scss/themes/defaults" + ], + "main": "dist/js/docsify-themeable.js", + "unpkg": "dist/js/docsify-themeable.min.js", + "scripts": { + "prepare": "run-s clean build", + "build": "npm-run-all build:scss --parallel build:js build:pcss", + "build:js": "rollup -c", + "build:pcss": "postcss build/css/**/*.css --dir dist/css --use postcss-remove-null postcss-discard-empty postcss-flexbugs-fixes autoprefixer --map", + "build:scss": "node-sass --output-style compressed src/scss/themes -o build/css --source-map true --source-map-contents true --include-path node_modules", + "clean": "rimraf build/* dist/* docs/css docs/js", + "serve": "node server.js", + "start": "run-p watch serve", + "watch": "run-p 'build:* -- -w'", + "prewatch": "npm run build:scss", + "version": "npm run build" + }, + "devDependencies": { + "autoprefixer": "^9.1.5", + "babel-core": "^6.26.3", + "babel-plugin-external-helpers": "^6.22.0", + "babel-preset-env": "^1.7.0", + "browser-sync": "^2.24.7", + "compression": "^1.7.3", + "css-vars-ponyfill": "^1.11.1", + "eslint": "^5.6.1", + "eslint-plugin-html": "^4.0.6", + "include-media": "^1.4.9", + "lodash.merge": "^4.6.1", + "node-sass": "^4.9.3", + "npm-run-all": "^4.1.3", + "postcss": "^7.0.5", + "postcss-cli": "^6.0.0", + "postcss-discard-empty": "^4.0.1", + "postcss-flexbugs-fixes": "^4.1.0", + "postcss-remove-null": "^1.2.1", + "rimraf": "^2.6.2", + "rollup": "^0.66.4", + "rollup-plugin-babel": "^3.0.7", + "rollup-plugin-commonjs": "^9.1.8", + "rollup-plugin-eslint": "^5.0.0", + "rollup-plugin-json": "^3.1.0", + "rollup-plugin-node-resolve": "^3.4.0", + "rollup-plugin-uglify": "^4.0.0", + "sass-utilities": "0.0.4" + }, + "dependencies": {} +} diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..d8965c3e --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,122 @@ +// Dependencies +// ============================================================================= +const path = require('path'); + +import babel from 'rollup-plugin-babel'; +import commonjs from 'rollup-plugin-commonjs'; +import json from 'rollup-plugin-json'; +import merge from 'lodash.merge'; +import pkg from './package.json'; +import resolve from 'rollup-plugin-node-resolve'; +import { eslint } from 'rollup-plugin-eslint'; +import { uglify } from 'rollup-plugin-uglify'; + + +// Settings +// ============================================================================= +// Output +const entryFile = path.resolve(__dirname, 'src', 'js', 'index.js'); +const outputFile = path.resolve(__dirname, 'dist', 'js', `${pkg.name}.js`); + +// Banner +const bannerData = [ + `${pkg.name}`, + `v${pkg.version}`, + `${pkg.homepage}`, + `(c) ${(new Date()).getFullYear()} ${pkg.author}`, + `${pkg.license} license` +]; + +// Plugins +const pluginSettings = { + eslint: { + exclude : ['node_modules/**', './package.json'], + throwOnWarning: false, + throwOnError : true + }, + babel: { + exclude: ['node_modules/**'], + presets: [ + ['env', { + modules: false, + targets: { + browsers: ['ie >= 9'] + } + }] + ], + plugins: [ + 'external-helpers' + ] + }, + uglify: { + beautify: { + compress: false, + mangle : false, + output: { + beautify: true, + comments: /(?:^!|@(?:license|preserve))/ + } + }, + minify: { + compress: true, + mangle : true, + output : { + comments: new RegExp(pkg.name) + } + } + } +}; + + +// Config +// ============================================================================= +// Base +const config = { + input : entryFile, + output: { + file : outputFile, + banner : `/*!\n * ${ bannerData.join('\n * ') }\n */`, + sourcemap: true + }, + plugins: [ + resolve(), + commonjs(), + json(), + eslint(pluginSettings.eslint), + babel(pluginSettings.babel) + ], + watch: { + clearScreen: false + } +}; + +// Formats +// ----------------------------------------------------------------------------- +// IIFE +const iife = merge({}, config, { + output: { + format: 'iife' + }, + plugins: [ + uglify(pluginSettings.uglify.beautify) + ] +}); + +// IIFE (Minified) +const iifeMinified = merge({}, config, { + output: { + file : iife.output.file.replace(/\.js$/, '.min.js'), + format: iife.output.format + }, + plugins: [ + uglify(pluginSettings.uglify.minify) + ] +}); + + +// Exports +// ============================================================================= +export default [ + iife, + iifeMinified +]; diff --git a/server.js b/server.js new file mode 100644 index 00000000..f89a2775 --- /dev/null +++ b/server.js @@ -0,0 +1,80 @@ +// Dependencies +// ============================================================================= +const browserSync = require('browser-sync').create(); +const compression = require('compression'); + +browserSync.init({ + files: [ + './dist/**/*.*', + './docs/**/*.*' + ], + ghostMode: { + clicks: false, + forms : false, + scroll: false + }, + open: false, + notify: false, + cors: true, + reloadDebounce: 1000, + reloadOnRestart: true, + server: { + baseDir: [ + './docs/' + ], + middleware: [ + compression() + ] + }, + serveStatic: [ + './dist/' + ], + snippetOptions: { + rule: { + match: /<\/body>/i, + fn: function (snippet, match) { + // Fix CSS injection for alternate stylesheets + const styleSwitchFix = ` + + `; + + return snippet + styleSwitchFix + match; + } + } + }, + rewriteRules: [ + { + // Replace CDN default with local js path + match : /"https:\/\/unpkg\.com\/docsify-themeable"/g, + replace: '"/js/docsify-themeable.min.js"' + }, + { + // Replace CDN URLs with local paths + match : /https:\/\/unpkg\.com\/docsify-themeable\/dist\//g, + replace: '/' + } + ] +}); diff --git a/src/js/index.js b/src/js/index.js new file mode 100644 index 00000000..6c78d105 --- /dev/null +++ b/src/js/index.js @@ -0,0 +1,65 @@ +// Dependencies +// ============================================================================= +import cssVars from 'css-vars-ponyfill'; +import pluginFixCoverHeader from './plugin-fix-cover-header'; +import pluginFixNavbarMenus from './plugin-fix-navbar-menus'; +import pluginFixPrismThemes from './plugin-fix-prism-themes'; +import pluginFixReadyState from './plugin-fix-ready-state'; +import pluginFixSearchClearButton from './plugin-fix-search-clear-button'; +import pluginFixSearchResults from './plugin-fix-search-results'; +import pluginFixZoomImage from './plugin-fix-zoomimage'; +import pluginReadyTransition from './plugin-ready-transition'; +import pluginResponsiveTables from './plugin-responsive-tables'; +import { version as pkgVersion } from '../../package.json'; + + +// Main +// ============================================================================= +// Docsify plugins +if (window) { + const cssVarsOptions = { + // Force ponyfill on Edge 15/16 due to numerous custom property bugs + // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/?page=1&q=%22custom%20property%22%20%22custom%20properties%22%20%22css%20variable%22%20%22css%20variables%22 + onlyLegacy: !(/Edge\/15|Edge\/16./i.test(navigator.userAgent)), + silent : true + }; + + // CSS custom properties ponyfill + cssVars(cssVarsOptions); + + window.$docsify = window.$docsify || {}; + + // Add plugins + window.$docsify.plugins = [].concat( + // Prepend + [ + pluginReadyTransition, + pluginFixCoverHeader, + pluginFixNavbarMenus, + pluginFixPrismThemes, + pluginFixReadyState, + pluginResponsiveTables + ], + // Existing + (window.$docsify.plugins || []), + // Append + [ + pluginFixSearchClearButton, + pluginFixSearchResults, + pluginFixZoomImage + ] + ); + + // Add themeable object + window.$docsify.themeable = window.$docsify.themeable || {}; + + // Add themeable properties + window.$docsify.themeable.version = pkgVersion; + + // Add themeable utilities + window.$docsify.themeable.util = { + cssVars: function(options = cssVarsOptions) { + cssVars(options); + } + }; +} diff --git a/src/js/plugin-fix-cover-header.js b/src/js/plugin-fix-cover-header.js new file mode 100644 index 00000000..d986e237 --- /dev/null +++ b/src/js/plugin-fix-cover-header.js @@ -0,0 +1,12 @@ +// Plugin +// ============================================================================= +// Removes unnecessary wrapper around

content in coverpage +export default function(hook, vm) { + hook.doneEach(function() { + const coverHeaderLink = document.querySelector('.cover h1 > a'); + + if (coverHeaderLink) { + coverHeaderLink.parentNode.innerHTML = coverHeaderLink.innerHTML; + } + }); +} diff --git a/src/js/plugin-fix-navbar-menus.js b/src/js/plugin-fix-navbar-menus.js new file mode 100644 index 00000000..05a65561 --- /dev/null +++ b/src/js/plugin-fix-navbar-menus.js @@ -0,0 +1,70 @@ +// Functions +// ============================================================================= +/** + * Wraps direct descendant text nodes in the HTML tag specified with a tab + * index attribute. + * + * @param {object} elm The element containing text nodes + * @param {string} wrapTag The tag to wrap text nodes with + * @param {number|string} [tabIndex=null] The wrapTag tabIndex value + */ +function wrapTextNodes(elm, wrapTag, tabIndex = null) { + const hasTextNodes = elm.childNodes[0].nodeType === 3; + const menuElm = elm.querySelector('ul'); + + if (hasTextNodes && menuElm) { + const hasChildWithTabIndex = Array.apply(null, elm.children).some(child => child.tabIndex > -1).length; + + // Wrap non-link labels + if (!hasChildWithTabIndex) { + const wrapElm = document.createElement('span'); + + if (tabIndex !== null) { + wrapElm.setAttribute('tabindex', tabIndex); + } + + elm.insertBefore(wrapElm, menuElm); + + while(elm.childNodes[0] !== wrapElm) { + wrapElm.appendChild(elm.childNodes[0]); + } + } + } +} + +// Plugin +// ============================================================================= +// 1. Wraps top-level navbar
  • non-link labels in a with a tabindex +// attribute to allow touch-based devices to display drop menus on :hover. +// 2. Toggles 'focus-within' class to simulate native :focus-within behavior +export default function(hook, vm) { + hook.doneEach(function() { + const navbarItems = Array.apply(null, document.querySelectorAll('body > nav.app-nav > ul > li')); + const sidebarItems = Array.apply(null, document.querySelectorAll('.sidebar > nav > ul > li')); + + // Standard navigation bar + navbarItems.forEach(item => { + const focusClassName = 'focus-within'; + + wrapTextNodes(item, 'span', 0); + + // Simulate :focus-within + item.addEventListener('focusin', evt => { + if (item.contains(document.activeElement)) { + item.classList.add(focusClassName); + } + }); + + item.addEventListener('focusout', evt => { + if (!item.contains(document.activeElement)) { + item.classList.remove(focusClassName); + } + }); + }); + + // Merged nav bar in sidebar via 'mergeNavbar' option + sidebarItems.forEach(item => { + wrapTextNodes(item, 'span'); + }); + }); +} diff --git a/src/js/plugin-fix-prism-themes.js b/src/js/plugin-fix-prism-themes.js new file mode 100644 index 00000000..7190e80c --- /dev/null +++ b/src/js/plugin-fix-prism-themes.js @@ -0,0 +1,16 @@ +// Plugin +// ============================================================================= +// Updates and
     class names for Prism.js theme compatibility
    +export default function(hook, vm) {
    +    hook.doneEach(function() {
    +        const preElms = Array.apply(null, document.querySelectorAll('pre[data-lang]'));
    +
    +        preElms.forEach(preElm => {
    +            const codeElm    = preElm.querySelector('code');
    +            const prismClass = `language-${preElm.getAttribute('data-lang')}`;
    +
    +            preElm.classList.add(prismClass);
    +            codeElm.classList.add(prismClass);
    +        });
    +    });
    +}
    diff --git a/src/js/plugin-fix-ready-state.js b/src/js/plugin-fix-ready-state.js
    new file mode 100644
    index 00000000..7db330b8
    --- /dev/null
    +++ b/src/js/plugin-fix-ready-state.js
    @@ -0,0 +1,20 @@
    +// Plugin
    +// =============================================================================
    +// Fixes docsify's incorrect addition of the "ready" state class to the 
    +// element before the ready event has actually fired
    +export default function(hook, vm) {
    +    // 404 Fix
    +    hook.mounted(function() {
    +        const contentElm = document.querySelector('.content');
    +        const readyCheck = setInterval(function() {
    +            if (contentElm.textContent.length) {
    +                document.body.classList.add('ready-fix');
    +                clearInterval(readyCheck);
    +            }
    +        }, 250);
    +    });
    +
    +    hook.ready(function() {
    +        document.body.classList.add('ready-fix');
    +    });
    +}
    diff --git a/src/js/plugin-fix-search-clear-button.js b/src/js/plugin-fix-search-clear-button.js
    new file mode 100644
    index 00000000..20a3f1a5
    --- /dev/null
    +++ b/src/js/plugin-fix-search-clear-button.js
    @@ -0,0 +1,27 @@
    +// Plugin
    +// =============================================================================
    +// Replaces docsify's "clear search" button:
    +// - Use a