diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3983f048f..658cd4ae3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -64,7 +64,6 @@ The `ionic-team/capacitor` repo is a monorepo containing all of the standard Cap * `example`: Example project for development * `plugin-template`: The default plugin template when creating a new plugin * `scripts`: publish and task scripts -* `site`: Website and documentation ## Publishing Capacitor diff --git a/site/.firebaserc b/site/.firebaserc deleted file mode 100644 index 0c2e209e9..000000000 --- a/site/.firebaserc +++ /dev/null @@ -1,30 +0,0 @@ -{ - "projects": { - "capacitor-site": "capacitor-site" - }, - "hosting": { - "public": "dist", - "headers": [ - { - "source": "/**", - "headers": [ - { - "key": "Cache-Control", - "value": "no-cache, no-store, must-revalidate" - } - ] - }, - { - "source": - "**/*.@(jpg|jpeg|gif|png|svg|webp|js|css|eot|otf|ttf|ttc|woff|woff2|font.css)", - "headers": [ - { - "key": "Cache-Control", - "value": "max-age=604800" - } - ] - } - ], - "ignore": ["firebase.json", "**/.*", "**/node_modules/**"] - } -} \ No newline at end of file diff --git a/site/.gitignore b/site/.gitignore deleted file mode 100644 index 2752eb92e..000000000 --- a/site/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -.DS_Store diff --git a/site/.vscode/settings.json b/site/.vscode/settings.json deleted file mode 100644 index ed94f44b1..000000000 --- a/site/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "git.ignoreLimitWarning": true -} \ No newline at end of file diff --git a/site/CONTRIBUTING.md b/site/CONTRIBUTING.md deleted file mode 100644 index 8b5c5b727..000000000 --- a/site/CONTRIBUTING.md +++ /dev/null @@ -1,27 +0,0 @@ -# Contributing - -Thanks for your interest in contributing to the Capacitor Docs! :tada: - -The Capacitor website (`site/`) and documentation (`site/docs-md`) live alongside the code. Looking to assist? See Capacitor issues labeled "docs" [here](https://github.com/ionic-team/capacitor/issues?q=is%3Aopen+is%3Aissue+label%3Adocs). - -## Setup - -1. Fork this repo. -2. Clone your fork. -3. Make a branch for your change. -4. Run `npm install` in the `core` folder. -5. Run `npm install` in the `site` folder. -6. Run `npm run start` to build and deploy the website/docs to localhost. - -> Note: Content updated while the dev server is running won't be reflected locally. Stop the process, then re-run `npm run start`. - -## Adding a new docs page to the sidebar -Open `site/docs-md/README.md` to add the new entry to the side bar. - -## Modifying documentation - -For smaller edits, navigate to the desired page in the [Capacitor docs](https://capacitor.ionicframework.com/docs/) then click the "Submit an edit" button. - -1. Locate the doc you want to modify in `site/docs-md/`. -2. Modify the documentation, making sure to keep the format the same as the rest of the doc. -3. Run `npm run start` to make sure your changes look correct. diff --git a/site/LICENSE b/site/LICENSE deleted file mode 100644 index cdedba3e0..000000000 --- a/site/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Ionic - -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/site/docs-md/README.md b/site/docs-md/README.md deleted file mode 100644 index ab0980f9a..000000000 --- a/site/docs-md/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# Table of Contents - -* Getting Started - * [Introduction](index.md) - * [Required Dependencies](getting-started/dependencies.md) - * [Installation](getting-started/index.md) - * [Using with Ionic](getting-started/with-ionic.md) -* Basics - * [Development Workflow](basics/workflow.md) - * [Opening Native IDE](basics/opening-native-projects.md) - * [Building your App](basics/building-your-app.md) - * [Running your App](basics/running-your-app.md) - * [Using Plugins](basics/using-plugins.md) - * [Native Project Configuration](basics/configuring-your-app.md) - * [Progressive Web Apps](basics/progressive-web-app.md) -* Cordova/PhoneGap - * [Introduction](cordova/index.md) - * [Migration Strategy](cordova/migration-strategy.md) - * [Cordova to Capacitor Migration](cordova/migrating-from-cordova-to-capacitor.md) - * [Cordova/Ionic Native Plugins](cordova/using-cordova-plugins.md) - * [Known Incompatible Plugins](cordova/known-incompatible-plugins.md) -* Guides - * [Splash Screens and Icons](guides/splash-screens-icons.md) - * [Ionic Framework Camera App](guides/ionic-framework-app.md) - * [Push Notifications - Firebase](guides/push-notifications-firebase.md) - * [Deep Links](guides/deep-links.md) - * [Community Guides](guides/community.md) -* iOS - * [Getting Started](ios/index.md) - * [Configuration](ios/configuration.md) - * [Updating](ios/updating.md) - * [Custom Native Code](ios/custom-code.md) - * [Deploying to App Store](https://www.joshmorony.com/deploying-capacitor-applications-to-ios-development-distribution/) - * [Troubleshooting](ios/troubleshooting.md) -* Android - * [Getting Started](android/index.md) - * [Configuration](android/configuration.md) - * [Updating](android/updating.md) - * [Custom Native Code](android/custom-code.md) - * [Deploying to Google Play](https://www.joshmorony.com/deploying-capacitor-applications-to-android-development-distribution/) - * [Troubleshooting](android/troubleshooting.md) -* Web/PWA - * [Getting Started](web/index.md) - * [PWA Elements](web/pwa-elements.md) -* Electron - * [Getting Started](electron/index.md) - * [Updating](electron/updating.md) -* Creating Plugins - * [Introduction](plugins/index.md) - * [iOS Guide](plugins/ios.md) - * [Android Guide](plugins/android.md) - * [Web/PWA Guide](plugins/web.md) - * [JavaScript Guide](plugins/js.md) -* APIs - * [Introduction](apis/index.md) - * [Community Plugins](community/plugins.md) - * [Accessibility](apis/accessibility/index.md) - * [App](apis/app/index.md) - * [Background Task](apis/background-task/index.md) - * [Browser](apis/browser/index.md) - * [Camera](apis/camera/index.md) - * [Clipboard](apis/clipboard/index.md) - * [Console](apis/console/index.md) - * [Device](apis/device/index.md) - * [Filesystem](apis/filesystem/index.md) - * [Geolocation](apis/geolocation/index.md) - * [Haptics](apis/haptics/index.md) - * [Keyboard](apis/keyboard/index.md) - * [Local Notifications](apis/local-notifications/index.md) - * [Modals](apis/modals/index.md) - * [Motion](apis/motion/index.md) - * [Network](apis/network/index.md) - * [Permissions](apis/permissions/index.md) - * [Push Notifications](apis/push-notifications/index.md) - * [Share](apis/share/index.md) - * [Splash Screen](apis/splash-screen/index.md) - * [Status Bar](apis/status-bar/index.md) - * [Storage](apis/storage/index.md) - * [Toast](apis/toast/index.md) - - diff --git a/site/docs-md/android/configuration.md b/site/docs-md/android/configuration.md deleted file mode 100644 index 6583265f1..000000000 --- a/site/docs-md/android/configuration.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: Configuring Android -description: Configuring Android -url: /docs/android/configuration -contributors: - - mlynch - - jcesarmobile ---- - -# Configuring Android - -

Android apps manage permissions, device features, and other settings by modifying AndroidManifest.xml.

- -

This file references values from other files in res/values/, to make it easy to update them separately, including styles.xml and strings.xml.

- -

This article covers the basic modifications you'll need to make to your app. Read the Android Manifest docs to learn a whole lot more.

- -## Changing App ID - -To modify the bundle/app id for your app, edit the top `` line in `AndroidManifest.xml`: - -```xml - -``` - -## Changing App Name - -To change the name of your app, change the value for `app_name` in `strings.xml`: - -```xml -MyApp -``` - -You probably also want to set the Activity name to match the App, for apps that plan to only have one activity (the main web activity running your app): - -```xml -MyApp -``` - -## Deeplinks (aka Android App Links) - -To enable deeplinking through Android App Links, follow the official Android guide on [Adding Android App Links](https://developer.android.com/studio/write/app-link-indexing). Android Studio comes with a handy wizard for configuring App Links. - -Once configured, the [getLaunchUrl in the App API](/docs/apis/app#method-getLaunchUrl-0) will provide any URL the app was launched with, and the [appUrlOpen event](/docs/apis/app#method-addListener-1) will fire any time the app receives a new App Link deeplink. - -## Changing Custom URL - -Your app can respond to custom URLs on launch, making it possible to handle deeplinks and app interactions. - -To change the URL, search for and modify this line in `strings.xml`. It's recommended to set this to the bundle/app id. - -```xml -com.getcapacitor.myapp -``` - -In this example, the app will respond to URLs with the `com.getcapacitor.myapp://` scheme. - -To get any custom URL the app may have launched with, see the Deeplinks section above this one. - -## Setting Permissions - -In Android, permissions your app will need are defined in `AndroidManifest.xml` inside of the `` tag, generally at the bottom -of the file. - -For example, here's what adding Network permissions looks like: - -```xml - - - - - - - - - - - - -``` - -Generally, the plugin you choose to use will ask you to set a permission. Add it in this file. - -## Default Permissions - -By default, the entire initial permissions requested for the latest version of Capacitor with the standard plugins can be found in the android-template's [AndroidManifest.xml](https://github.com/ionic-team/capacitor/blob/master/android-template/app/src/main/AndroidManifest.xml) \ No newline at end of file diff --git a/site/docs-md/android/custom-code.md b/site/docs-md/android/custom-code.md deleted file mode 100644 index 945298f0b..000000000 --- a/site/docs-md/android/custom-code.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Custom Native Android Code -description: Custom Native Android Code -url: /docs/android/custom-code -contributors: - - mlynch - - jcesarmobile - - RoderickQiu ---- - -# Custom Native Android Code - -

Many apps will want to add custom Java code to implement native features, without the overhead of building and publishing a proper Capacitor plugin. - -

There are two ways to do this depending on whether or not you need to access that code from the WebView: - -## WebView Accessible Native Code - -The easiest way to build custom native code that needs to be accessible in the WebView is to build -a local Capacitor plugin for it. In this case, building the plugin is as simple as building a class -that inherits from `com.getcapacitor.Plugin` and uses the `@NativePlugin()` and `@PluginMethod()` annotations. - -Here is a simple example: - -`com/example/myapp/CustomNativePlugin.java` in `android/app/src/main/java`: - -```java -package com.example.myapp; - -import com.getcapacitor.NativePlugin; -import com.getcapacitor.Plugin; -import com.getcapacitor.PluginCall; -import com.getcapacitor.PluginMethod; - -@NativePlugin() -public class CustomNativePlugin extends Plugin { - - @PluginMethod() - public void customCall(PluginCall call) { - String message = call.getString("message"); - // More code here... - call.success(); - } - - @PluginMethod() - public void customFunction(PluginCall call) { - // More code here... - call.resolve(); - } -} -``` - -Finally, register the plugin in your Activity: - -```java -// Other imports... -import com.example.myapp.CustomNativePlugin; - -public class MainActivity extends BridgeActivity { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Initializes the Bridge - this.init(savedInstanceState, new ArrayList>() {{ - // Additional plugins you've installed go here - // Ex: add(TotallyAwesomePlugin.class); - add(CustomNativePlugin.class); - }}); - } -} -``` - -Then you can use your functions in your webView code: - -```javascript -// Other codes... -import { Plugins } from "@capacitor/core"; -const { CustomNativePlugin } = Plugins; -// Other codes... -CustomNativePlugin.customCall({ message: "CUSTOM MESSAGE" }); -CustomNativePlugin.customFunction(); -// Other codes... -``` - -For more usages of plugin APIs, have a look at [Capacitor Android Plugin Guide](https://capacitor.ionicframework.com/docs/plugins/android/). - -## Private Native Code - -If your code doesn't need to be accessible from the WebView, then simply add your code anywhere it needs to go. With Capacitor, you have full -control over your native project. Need to add a new event handler in your Activity? Just update `MainActivity` and add it. The world is truly your oyster. diff --git a/site/docs-md/android/index.md b/site/docs-md/android/index.md deleted file mode 100644 index 221139f4f..000000000 --- a/site/docs-md/android/index.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Capacitor Android Documentation -description: Capacitor Android Documentation -url: /docs/android -contributors: - - mlynch - - jcesarmobile ---- - -# Capacitor Android Documentation - -

Capacitor features a native Android runtime that enables developers to communicate between JavaScript and Native Java for Android code.

- -

Capacitor Android apps are configured and managed through Android Studio (generally).

- -

Follow these guides for more information on each topic:

- -## Getting Started - -Developing Android apps requires some Android SDK dependencies to be installed. Make sure to install the Android SDK Tools (26.0.1 or greater required), and a version of -the Android SDK Platforms for API 21 or greater. - -You can install these easily by opening Android Studio, and going to Tools -> Android -> SDK Manager from the top menu bar: - -![SDK Platforms](/assets/img/docs/android/sdk-platforms.png) -![SDK Tools](/assets/img/docs/android/sdk-tools.png) - -### Creating Android Project - -By default, an Android project is created for every Capacitor project. If you are adding Capacitor to an existing -project, you can manually add the Android project using - -```bash -npx cap add android -npx cap sync -``` - -The `sync` command updates dependencies, and copies any web assets to your project. You can also run - -```bash -npx cap copy -``` - -To copy web assets only, which is faster if you know you don't need to update native dependencies. - -### Opening Android Project - -To open the project in Android Studio, run - -```bash -npx cap open android -``` - -### Running Your App -> __Note:__ Currently to use an Android Emulator you must use a system image of at least Android version 7.0 on API 24. This is due to the System WebView version not being able to be updated on emulators. Physical devices should work as low as Android 5.0 (API 21) as long as their System WebView is updated. - -Once Android Studio is open, you should be able to run your app on a device or emulator. Go to Run or Debug in the Run menu: - -![Running App](/assets/img/docs/android/running.png) - -### Troubleshooting - -If you encountered any issue above, please let us know by filing an issue on the repo, and then consult the [Troubleshooting Android](troubleshooting/) page for solutions to common Android problems. - -### Next Steps - -If your app ran you are now ready to continue developing and building your app. Use the various APIs available, Capacitor or Cordova plugins, or custom native code to build out the rest of your app. - -## Further Reading - -Follow these Android-specific guides for more information on setting permissions for your app, updating dependencies, building -plugins, and more: - -[Configuring and setting permissions for Android ›](/docs/android/configuration) - -[Building Native Plugins for Android ›](/docs/plugins) diff --git a/site/docs-md/android/lifecycle.md b/site/docs-md/android/lifecycle.md deleted file mode 100644 index 325ba3228..000000000 --- a/site/docs-md/android/lifecycle.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Android Lifecycle -description: Android Lifecycle -url: /docs/android/lifecycle -contributors: - - mlynch - - jcesarmobile ---- - -# Android Lifecycle - -Understanding the Android Activity Lifecycle is crucial for building apps that act the way Android users expect. - -This document attempts to explain the lifecycle as it pertains to Capacitor. For more information, the [Activity Lifecycle](https://developer.android.com/guide/components/activities/activity-lifecycle.html) reference on the official Android docs is the best resource out there. - -## Handling App Restarts - -Android apps often utilize other apps (or Activities) for features that are too complicated to include in their own app, such as camera or browser features. - -In some cases, when a device is low on memory, launching a new Activity may cause your app to be killed in order to free up memory. - -In this case, when the new Activity returns data back to your app, your app will want to show the user a state of the app that resumes what the user was just doing. diff --git a/site/docs-md/android/managing-dependencies.md b/site/docs-md/android/managing-dependencies.md deleted file mode 100644 index b8981be42..000000000 --- a/site/docs-md/android/managing-dependencies.md +++ /dev/null @@ -1,3 +0,0 @@ -# Managing Android Dependencies in Capacitor - -Coming soon. \ No newline at end of file diff --git a/site/docs-md/android/troubleshooting.md b/site/docs-md/android/troubleshooting.md deleted file mode 100644 index b72e48930..000000000 --- a/site/docs-md/android/troubleshooting.md +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Troubleshooting Android Issues -description: Troubleshooting Android Issues -url: /docs/android/troubleshooting -contributors: - - mlynch - - jcesarmobile ---- - -# Troubleshooting Android Issues - -

Creating a 100% perfect native management tool is nearly impossible, and sooner or later you'll run into various issues with some part of the Android workflow. - -

This guide attempts to document common Android issues with possible solutions. - -## Android Toolbox - -Every Android developer learns a few common techniques for debugging Android issues, and you should incorporate these into your workflow: - -### Google, Google, Google - -Any time you encounter an issue with Android, or Gradle, or Emulators, your first step should be to copy and paste the error into a Google search. - -Capacitor uses the standard Android toolkit, so chances are if you run into something, many Android developers have as well, and there's a solution out there. - -It could be as simple as updating a dependency, running Gradle sync, or invalidating caches. - -### Clean/Rebuild - -Cleaning and rebuilding can fix a number of build issues: - -![Android Clean and Build](/assets/img/docs/android/clean-rebuild.png) - -### Invalidate Caches/Restart - -If you're confident you fixed an issue, but Android Studio or Gradle doesn't agree, often the solution is to have Android Studio invalidate its caches and restart the program. - -That can be done easily from the File menu: - -![Android Invalidate Caches](/assets/img/docs/android/invalidate-caches.png) - -## Error: "package android.support.* does not exist" - -This error occurs when some Cordova or Capacitor plugin has old android support dependencies instead of using the new AndroidX equivalent. -You should report the issue in the plugin repository so the maintainers can update the plugin to use AndroidX dependencies. - -As workaround you can also patch the plugin using jetifier - -```bash -npm install jetifier -npx jetify -npx cap sync android -``` - -## Error: "Unable to load native-bridge.js. Capacitor will not function!" - -This error occurs when Capacitor's `native-bridge.js` file was not copied to the native project. - -The fix is simple: run `npx cap copy android` to copy this file. - -## Error: "Please select Android SDK" - -This error is often due to Gradle needing to be synced, something you'll need to do -periodically after updating dependencies and changing project settings. - -To manually sync Gradle, open File -> Sync Project with Gradle Files from the main menu bar: - -![Sync Gradle](/assets/img/docs/android/sync-gradle.png) - -## Error: "APK Can't be installed" - -An APK not installing to an Emulator or Device is often due to having an existing app with the same package name. You may see an error like this when trying to run your app: - -![Android APK Failed](/assets/img/docs/android/apk-failed.png) - -The solution is to remove any old apps and make sure your package name is up to date in `AndroidManifest.xml` and not conflicting with other apps you are developing. - -Finally, do a clean and rebuild just in case. - -## Recreating your project - -Capacitor lets you manage your own Android project. Like any IDE-backed project, sometimes things get so out of sync that the only solution is to rebuild the project. - -To do this, follow these steps: - -1. Copy any source code you created (such as Java files in `app/android/src`, manifest files, or resource files) into a safe location outside of `app/android`. -2. Next, make sure you are running an updated version of the Capacitor CLI: `npm install @capacitor/cli@latest` -3. Remove the android directory: `rm -rf android/` -4. Re-create the Android app from Capacitor: `npx cap add android` -5. Copy your saved source files back into the project diff --git a/site/docs-md/android/updating.md b/site/docs-md/android/updating.md deleted file mode 100644 index 251c3921f..000000000 --- a/site/docs-md/android/updating.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Updating Your Capacitor Android Project -description: Updating Your Capacitor Android Project -url: /docs/android/updating -contributors: - - mlynch - - jcesarmobile ---- - -# Updating Your Capacitor Android Project - -

Occasionally, you'll need to make Capacitor updates to your Android app, including updating the version of Capacitor used in your app, or using new ways of interfacing with Capacitor inside of your Android codebase. - -## Updating Capacitor Android Library - -To update the version of @capacitor/android used in your app, just npm install latest version: - -```bash -npm install @capacitor/android@latest -``` - -Then from Android Studio click the "Sync Project with Gradle Files" button. - -## Updating Android Project - -To update the base structure of your Android project, view the [android-template](https://github.com/ionic-team/capacitor/tree/master/android-template) project in the Capacitor repo, under the tag corresponding to the latest stable release of Capacitor. The core project is kept simple on purpose: it shouldn't take much time to see what is different from the core project and your project. - -### From 1.0.0 to 1.1.0 - -Recommended change: - -* Update `.gitignore` file inside `android` folder with [this changes](https://github.com/ionic-team/capacitor/commit/e27586780baed231c09f2737bb94a9338aab5a03#diff-15c65f143d85c95277307da1bdd0528e) - -### From <= 1.3.0 to 1.4.0 - -Recommended change: - -* Update `strings.xml` file inside `android/app/src/main/res/values/` folder with [this change](https://github.com/ionic-team/capacitor/commit/ed6647b35a8da08d26a7ff13cc9f4fd918b923a0#diff-15c65f143d85c95277307da1bdd0528e) - -### From <= 1.5.1 to 2.0.0 - -Mandatory change: - -* Use Android X - - Capacitor 2.0 uses Android X for Android support library dependencies as recommended by Google, so the native project needs to be updated to use Android X too. - - From Android Studio do `Refactor -> Migrate to AndroidX`. Then click on `Migrate` button and finally click on `Do Refactor`. - - If using Cordova or Capacitor plugins that don't use Android X yet, you can use [jetifier](https://www.npmjs.com/package/jetifier) tool to patch them. - -```bash -npm install jetifier -npx jetifier -``` - - To run it automatically after every package install, add `"postinstall": "jetifier"` in the `package.json`. - -Recommended changes: - -* Create common variables - - Create a `android/variables.gradle` file with this content - - ``` - ext { - minSdkVersion = 21 - compileSdkVersion = 29 - targetSdkVersion = 29 - androidxAppCompatVersion = '1.1.0' - androidxCoreVersion = '1.2.0' - androidxMaterialVersion = '1.1.0-rc02' - androidxBrowserVersion = '1.2.0' - androidxLocalbroadcastmanagerVersion = '1.0.0' - firebaseMessagingVersion = '20.1.2' - playServicesLocationVersion = '17.0.0' - junitVersion = '4.12' - androidxJunitVersion = '1.1.1' - androidxEspressoCoreVersion = '3.2.0' - cordovaAndroidVersion = '7.0.0' - } - ``` - - In `android/build.gradle` file, add `apply from: "variables.gradle"` as shown [here](https://github.com/ionic-team/capacitor/blob/master/android-template/build.gradle#L18). - -* Use common variables - - If you created the `variables.gradle` file, update your project to use them. In the `android/app/build.gradle` file, change: - - `compileSdkVersion 28` to `compileSdkVersion rootProject.ext.compileSdkVersion` - - `minSdkVersion 21` to `minSdkVersion rootProject.ext.minSdkVersion` - - `targetSdkVersion 28` to `targetSdkVersion rootProject.ext.targetSdkVersion` - - `implementation 'androidx.appcompat:appcompat:1.0.0'` to `implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"` - - `testImplementation 'junit:junit:4.12'` to `testImplementation "junit:junit:$junitVersion"` - - `androidTestImplementation 'androidx.test.ext:junit:1.1.1'` to `androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"` - - `androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'` to `androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"` - - Note that they use double quote instead of single quote now, that's required for variables to work. - -* Android Studio Plugin Update Recommended - - When you open the Android project in Android Studio, a `Plugin Update Recommended` message will appear. Click on `update`. It will tell you to update Gradle plugin and Gradle. Click `Update` button. - - You can also manually update the Gradle plugin and Gradle. - - To manually update Gradle plugin, edit `android/build.gradle` file. Change `classpath 'com.android.tools.build:gradle:3.3.2'` to `classpath 'com.android.tools.build:gradle:3.6.1'`. - - To manually update Gradle, edit `android/gradle/wrapper/gradle-wrapper.properties`. Change `gradle-4.10.1-all.zip` to `gradle-5.6.4-all.zip`. - -* Update Google Services plugin - - In `android/build.gradle` file, change `classpath 'com.google.gms:google-services:4.2.0'` to `classpath 'com.google.gms:google-services:4.3.3'`. - -* Change configChanges to avoid app restarts - - In `android/app/src/main/AndroidManifest.xml` file, add `|smallestScreenSize|screenLayout|uiMode` in the activity `android:configChanges` attribute. - -* Add caches folder to FileProvider file paths to avoid permission error on editing gallery images. - - In `android/app/src/main/res/xml/file_paths.xml` add ``. - -For API changes check the [Release Notes](https://github.com/ionic-team/capacitor/releases/tag/2.0.0) diff --git a/site/docs-md/apis/accessibility/index.md b/site/docs-md/apis/accessibility/index.md deleted file mode 100644 index 8fca9cb60..000000000 --- a/site/docs-md/apis/accessibility/index.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Accessibility -description: Accessibility API -url: /docs/apis/accessibility -contributors: - - mlynch - - jcesarmobile ---- - - - -# Accessibility - -The Accessibility API makes it easy to know when a user has a screen reader enabled, as well as programmatically speaking -labels through the connected screen reader. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; - -const { Accessibility, Modals } = Plugins; - -Accessibility.addListener('accessibilityScreenReaderStateChange', (state) => { - console.log(state.value); -}); - -async isVoiceOverEnabled() { - var vo = await Accessibility.isScreenReaderEnabled(); - alert('Voice over enabled? ' + vo.value); -} - -async speak() { - var value = await Modals.prompt({ - title: "Value to speak", - message: "Enter the value to speak" - }); - - Accessibility.speak({value: value.value}); -} -``` - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/app/index.md b/site/docs-md/apis/app/index.md deleted file mode 100644 index 82c11649b..000000000 --- a/site/docs-md/apis/app/index.md +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: App -description: App API -url: /docs/apis/app -contributors: - - mlynch - - jcesarmobile ---- - - - -# App - -The App API handles high level App state and events. - -For example, this API emits events when the app enters and leaves the foreground, handles -deeplinks, opens other apps, and manages persisted plugin state. - - - -## Note about `canOpenUrl` - -To use `canOpenUrl`, you need to set the URL schemes your app will query for in `LSApplicationQueriesSchemes` in `Info.plist`. - -Read more about [LSApplicationQueriesSchemes](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/TP40009250-SW14) and [configuring Info.plist](/docs/ios/configuration). - -## Example - -```typescript -import { Plugins, AppState } from '@capacitor/core'; - -const { App } = Plugins; - -App.addListener('appStateChange', (state: AppState) => { - // state.isActive contains the active state - console.log('App state changed. Is active?', state.isActive); -}); - -// Listen for serious plugin errors -App.addListener('pluginError', (info: any) => { - console.error('There was a serious error with a plugin', err, info); -}); - -var ret = await App.canOpenUrl({ url: 'com.getcapacitor.myapp' }); -console.log('Can open url: ', ret.value); - -ret = await App.openUrl({ url: 'com.getcapacitor.myapp://page?id=ionicframework' }); -console.log('Open url response: ', ret); - -ret = await App.getLaunchUrl(); -if(ret && ret.url) { - console.log('App opened with URL: ' + ret.url); -} -console.log('Launch url: ', ret); - -App.addListener('appUrlOpen', (data: any) => { - console.log('App opened with URL: ' + data.url); -}); - -App.addListener('appRestoredResult', (data: any) => { - console.log('Restored state:', data); -}); -``` - -## Android: Use appRestoredResult - -On Android, due to memory constraints on low-end devices, it's possible that, if your app launches a new activity, your app will be terminated by the operating system -in order to reduce memory consumption. - -For example, that means the `Camera` API, which launches a new Activity to take a photo, may not be able to return data back to your app. - -To avoid this, Capacitor stores all restored activity results on launch. You should add a listener for `appRestoredResult` in order to handle any -plugin call results that were delivered when your app was not running. - -Once you have that result (if any), you can update the UI to restore a logical experience for the user, such as navigating or selecting the proper tab. - -We recommend every Android app using plugins that rely on external Activities (for example, Camera) to have this event and process handled. - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/background-task/index.md b/site/docs-md/apis/background-task/index.md deleted file mode 100644 index 6ada888f9..000000000 --- a/site/docs-md/apis/background-task/index.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Background Tasks -description: Background Task API -url: /docs/apis/background-task -contributors: - - mlynch - - jcesarmobile ---- - - - -# Background Tasks - -The Background Task API makes it easy to run background tasks. Currently, this plugin -supports running a task when the app is backgrounded, and soon will support periodic background -fetch operations. - - - -## Background Task Guidelines - -Mobile operating systems have strict, constantly changing guidelines for background tasks. Running -indefinitely in the background is limited to apps that need to play audio, maintain VoIP connections, -track geolocation for navigation purposes, and a limited set of other tasks. All other apps should -expect to perform periodic, short background tasks, such as finishing an upload when the app goes to the -background, and periodically syncing data. - -Plugins that claim to offer infinite background operation outside of those core use cases _will cause App Store rejections_! This limitation is the same for developers using any mobile app technology, not just Capacitor. - -Generally, Android is less strict about background tasks, but your app should code to the lowest common denominator -in order to be a good actor on all platforms. - -NOTE: On iOS `setTimeout` and `setInterval` won't work once your app is in background, so don't use them inside `beforeExit`. - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; - -const { App, BackgroundTask } = Plugins; - -App.addListener('appStateChange', (state) => { - - if (!state.isActive) { - // The app has become inactive. We should check if we have some work left to do, and, if so, - // execute a background task that will allow us to finish that work before the OS - // suspends or terminates our app: - - let taskId = BackgroundTask.beforeExit(async () => { - // In this function We might finish an upload, let a network request - // finish, persist some data, or perform some other task - - // Example of long task - var start = new Date().getTime(); - for (var i = 0; i < 1e18; i++) { - if ((new Date().getTime() - start) > 20000){ - break; - } - } - // Must call in order to end our task otherwise - // we risk our app being terminated, and possibly - // being labeled as impacting battery life - BackgroundTask.finish({ - taskId - }); - }); - } -}) -``` - -## API - - diff --git a/site/docs-md/apis/browser/index.md b/site/docs-md/apis/browser/index.md deleted file mode 100644 index f15d2bcab..000000000 --- a/site/docs-md/apis/browser/index.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -title: Browser -description: Browser API -url: /docs/apis/browser -contributors: - - mlynch - - jcesarmobile ---- - - - -# Browser - - - -The Browser API makes it easy to open an in-app browser session to show external web content, -handle authentication flows, and more. - -On iOS this uses `SFSafariViewController` and is compliant with leading oAuth service in-app-browser requirements. - -```typescript -import { Plugins } from '@capacitor/core'; - -const { Browser } = Plugins; - -await Browser.open({ url: 'http://capacitor.ionicframework.com/' }); -``` - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/camera/index.md b/site/docs-md/apis/camera/index.md deleted file mode 100644 index 2700ecd2b..000000000 --- a/site/docs-md/apis/camera/index.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Camera -description: Camera API -url: /docs/apis/camera -contributors: - - mlynch - - jcesarmobile ---- - - - -# Camera - -The Camera API allows a user to pick a photo from their photo album or take a picture. On iOS, this uses `UIImagePickerController`, and on Android this -API sends an intent which will be handled by the core Camera app by default. - - - -## iOS Notes - -iOS requires the following usage description be added and filled out for your app in `Info.plist`: - -Name: `Privacy - Camera Usage Description` -Key: `NSCameraUsageDescription` - -Name: `Privacy - Photo Library Additions Usage Description` -Key: `NSPhotoLibraryAddUsageDescription` - -Name: `Privacy - Photo Library Usage Description` -Key: `NSPhotoLibraryUsageDescription` - -Read about [Setting iOS Permissions](/docs/ios/configuration/) in the [iOS Guide](/docs/ios/) for more information on setting iOS permissions in Xcode - -## Android Notes - -This API requires the following permissions be added to your `AndroidManifest.xml`: - -```xml - - -``` - -The storage permissions are for reading/saving photo files. - -Read about [Setting Android Permissions](/docs/android/configuration/) in the [Android Guide](/docs/android/) for more information on setting Android permissions. - -Additionally, because the Camera API launches a separate Activity to handle taking the photo, you should listen for `appRestoredResult` in the `App` plugin -to handle any camera data that was sent in the case your app was terminated by the operating system while the Activity was running. - -## PWA/Electron Notes - -[PWA Elements](/docs/pwa-elements) are required for Camera plugin to work. - -## Example - -```typescript -import { Plugins, CameraResultType } from '@capacitor/core'; - -const { Camera } = Plugins; - -async takePicture() { - const image = await Camera.getPhoto({ - quality: 90, - allowEditing: true, - resultType: CameraResultType.Uri - }); - // image.webPath will contain a path that can be set as an image src. - // You can access the original file using image.path, which can be - // passed to the Filesystem API to read the raw data of the image, - // if desired (or pass resultType: CameraResultType.Base64 to getPhoto) - var imageUrl = image.webPath; - // Can be set to the src of an image now - imageElement.src = imageUrl; -} -``` - -## Example Guides - -[Building an Ionic Framework Camera App](/docs/guides/ionic-framework-app) - -## API - - diff --git a/site/docs-md/apis/clipboard/index.md b/site/docs-md/apis/clipboard/index.md deleted file mode 100644 index a6649d635..000000000 --- a/site/docs-md/apis/clipboard/index.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Clipboard -description: Clipboard API -url: /docs/apis/clipboard -contributors: - - mlynch - - jcesarmobile ---- - - - - -# Clipboard - -The Clipboard API enables copy and pasting to/from the clipboard. On iOS this API also allows -copying images and URLs. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; - -const { Clipboard } = Plugins; - -Clipboard.write({ - string: "Hello, Moto" -}); - -let result = await Clipboard.read(); -console.log('Got', result.type, 'from clipboard:', result.value); -``` - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/console/index.md b/site/docs-md/apis/console/index.md deleted file mode 100644 index b3d779bf0..000000000 --- a/site/docs-md/apis/console/index.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: Console -description: Console API -url: /docs/apis/console -contributors: - - mlynch - - jcesarmobile ---- - - - -# Console - -The Console API automatically sends `console.debug`, `console.error`, `console.info`, `console.log`, `console.trace` and `console.warn` calls to the native log system on each respective platform. This enables, for example, -`console.log` calls to be rendered in the Xcode and Android Studio log windows. - -It can be disabled by using `hideLogs` entry in `capacitor.config.json`, check [common configuration](/docs/basics/configuring-your-app#common-configuration) for more information. - -## Example - -```typescript -console.log('I really enjoy Avocado Toast, and I\'m not ashamed to admit it'); -``` - -The string will show up in your Xcode or Android Studio log stream. \ No newline at end of file diff --git a/site/docs-md/apis/device/index.md b/site/docs-md/apis/device/index.md deleted file mode 100644 index 54e3b2b3d..000000000 --- a/site/docs-md/apis/device/index.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Device -description: Device API -url: /docs/apis/device -contributors: - - mlynch - - jcesarmobile ---- - - - -# Device - -The Device API exposes internal information about the device, such as the model and operating system version, along with user information -such as unique ids. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; - -const { Device } = Plugins; - -const info = await Device.getInfo(); -console.log(info); - -// Example output: -{ - "diskFree": 12228108288, - "appVersion": "1.0.2", - "appBuild": "123", - "operatingSystem": "ios", - "osVersion": "11.2", - "platform": "ios", - "memUsed": 93851648, - "diskTotal": 499054952448, - "model": "iPhone", - "manufacturer": "Apple", - "uuid": "84AE7AA1-7000-4696-8A74-4FD588A4A5C7", - "isVirtual":true -} - -const info = await Device.getBatteryInfo(); -console.log(info); - -// Example output: -{ - "batteryLevel": -1, - "isCharging": true -} -``` - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/filesystem/index.md b/site/docs-md/apis/filesystem/index.md deleted file mode 100644 index 25d485d1d..000000000 --- a/site/docs-md/apis/filesystem/index.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Filesystem -description: Filesystem API -url: /docs/apis/filesystem -contributors: - - mlynch - - jcesarmobile ---- - - - -# Filesystem - -The Filesystem API provides a NodeJS-like API for working with files on the device. - - - -## Understanding Directories and Files - -iOS and Android have additional layers of separation between files, such as special directories that are backed up to the Cloud, or ones for storing Documents. The Filesystem API offers a simple way to scope each operation to a specific special directory on the device. - -Additionally, the Filesystem API supports using full `file://` paths, or reading `content://` files on Android. Simply -leave out the `directory` param to use a full file path. - -## Example - -```typescript -import { Plugins, FilesystemDirectory, FilesystemEncoding } from '@capacitor/core'; - -const { Filesystem } = Plugins; - -async fileWrite() { - try { - const result = await Filesystem.writeFile({ - path: 'secrets/text.txt', - data: "This is a test", - directory: FilesystemDirectory.Documents, - encoding: FilesystemEncoding.UTF8 - }) - console.log('Wrote file', result); - } catch(e) { - console.error('Unable to write file', e); - } -} - -async fileRead() { - let contents = await Filesystem.readFile({ - path: 'secrets/text.txt', - directory: FilesystemDirectory.Documents, - encoding: FilesystemEncoding.UTF8 - }); - console.log(contents); -} - -async fileAppend() { - await Filesystem.appendFile({ - path: 'secrets/text.txt', - data: "MORE TESTS", - directory: FilesystemDirectory.Documents, - encoding: FilesystemEncoding.UTF8 - }); -} - -async fileDelete() { - await Filesystem.deleteFile({ - path: 'secrets/text.txt', - directory: FilesystemDirectory.Documents - }); -} - -async mkdir() { - try { - let ret = await Filesystem.mkdir({ - path: 'secrets', - directory: FilesystemDirectory.Documents, - recursive: false // like mkdir -p - }); - } catch(e) { - console.error('Unable to make directory', e); - } -} - -async rmdir() { - try { - let ret = await Filesystem.rmdir({ - path: 'secrets', - directory: FilesystemDirectory.Documents, - recursive: false, - }); - } catch(e) { - console.error('Unable to remove directory', e); - } -} - -async readdir() { - try { - let ret = await Filesystem.readdir({ - path: 'secrets', - directory: FilesystemDirectory.Documents - }); - } catch(e) { - console.error('Unable to read dir', e); - } -} - -async stat() { - try { - let ret = await Filesystem.stat({ - path: 'secrets/text.txt', - directory: FilesystemDirectory.Documents - }); - } catch(e) { - console.error('Unable to stat file', e); - } -} - -async readFilePath() { - // Here's an example of reading a file with a full file path. Use this to - // read binary data (base64 encoded) from plugins that return File URIs, such as - // the Camera. - try { - let data = await Filesystem.readFile({ - path: 'file:///var/mobile/Containers/Data/Application/22A433FD-D82D-4989-8BE6-9FC49DEA20BB/Documents/text.txt' - }) - } -} - -async rename() { - try { - // This example moves the file within the same 'directory' - let ret = await Filesystem.rename({ - from: 'text.txt', - to: 'text2.txt', - directory: FilesystemDirectory.Documents - }); - } catch(e) { - console.error('Unable to rename file', e); - } -} - -async copy() { - try { - // This example copies a file within the documents directory - let ret = await Filesystem.copy({ - from: 'text.txt', - to: 'text2.txt', - directory: FilesystemDirectory.Documents - }); - } catch(e) { - console.error('Unable to copy file', e); - } -} -``` - -## API - - diff --git a/site/docs-md/apis/geolocation/index.md b/site/docs-md/apis/geolocation/index.md deleted file mode 100644 index 0f4d88320..000000000 --- a/site/docs-md/apis/geolocation/index.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Geolocation -description: Geolocation API -url: /docs/apis/geolocation -contributors: - - mlynch - - jcesarmobile ---- - - - -# Geolocation - -The Geolocation API provides simple methods for getting and tracking the current position of the device using GPS, along -with altitude, heading, and speed information if available. - - - -## iOS Notes - -Apple requires privacy descriptions to be specified in `Info.plist` for location information: - -Name: `Privacy - Location Always Usage Description` -Key: `NSLocationAlwaysUsageDescription` - -Name: `Privacy - Location When In Use Usage Description` -Key: `NSLocationWhenInUseUsageDescription` - -Read about [Setting iOS Permissions](/docs/ios/configuration/) in the [iOS Guide](/docs/ios/) for more information on setting iOS permissions in Xcode - -## Android Notes - -This API requires the following permissions be added to your `AndroidManifest.xml`: - -```xml - - - - -``` - -The first two permissions ask for location data, both fine and coarse, and the last line is optional but necessary if your app _requires_ GPS to function. You may leave it out, though keep in mind that this may mean your app is installed on devices lacking GPS hardware. - -Read about [Setting Android Permissions](/docs/android/configuration/) in the [Android Guide](/docs/android/) for more information on setting Android permissions. - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; - -const { Geolocation } = Plugins; - -class GeolocationExample { - async getCurrentPosition() { - const coordinates = await Geolocation.getCurrentPosition(); - console.log('Current', coordinates); - } - - watchPosition() { - const wait = Geolocation.watchPosition({}, (position, err) => { - }) - } -} -``` - -## API - - diff --git a/site/docs-md/apis/haptics/index.md b/site/docs-md/apis/haptics/index.md deleted file mode 100644 index 0a7f3f2c0..000000000 --- a/site/docs-md/apis/haptics/index.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Haptics -description: Haptics API -url: /docs/apis/haptics -contributors: - - mlynch - - jcesarmobile ---- - - - -# Haptics - -The Haptics API provides physical feedback to the user through touch or vibration. - - - -## Android Notes - -To use vibration, you must add this permission to your `AndroidManifest.xml` file: - -```xml - -``` - -## Example - -```typescript -import { - Plugins, - HapticsImpactStyle -} from '@capacitor/core'; - -const { Haptics } = Plugins; - -export class HapticsExample { - hapticsImpact(style = HapticsImpactStyle.Heavy) { - Haptics.impact({ - style: style - }); - } - - hapticsImpactMedium(style) { - this.hapticsImpact(HapticsImpactStyle.Medium); - } - - hapticsImpactLight(style) { - this.hapticsImpact(HapticsImpactStyle.Light); - } - - hapticsVibrate() { - Haptics.vibrate(); - } - - hapticsSelectionStart() { - Haptics.selectionStart(); - } - - hapticsSelectionChanged() { - Haptics.selectionChanged(); - } - - hapticsSelectionEnd() { - Haptics.selectionEnd(); - } -} -``` - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/index.md b/site/docs-md/apis/index.md deleted file mode 100644 index 1f31f2262..000000000 --- a/site/docs-md/apis/index.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Capacitor APIs -description: Capacitor APIs -url: /docs/apis -contributors: - - mlynch - - jcesarmobile ---- - -# Capacitor APIs - -Capacitor includes a number of Native APIs that are available to all Capacitor apps. These can be thought of as Capacitor "core plugins," and they make it easy to access commonly needed functionality on each platform. - -For those coming from Cordova, the core Capacitor APIs cover much of the core Cordova plugins, and also include some new ones. - -See the APIs list on the left menu for the full list of available APIs. - -## API Usage - -To use a Capacitor API, follow these steps: - -1) Import the `Plugins` object. It represents the registry of all Capacitor plugins. -```typescript -import { Plugins } from '@capacitor/core'; -``` - -2) Get a plugin from the Plugin Registry (`Plugins` object). -```typescript -const { Browser } = Plugins; -``` - -3) Use the plugin API: -```typescript -async openBrowser() { - // On iOS, for example, open the URL in SFSafariViewController (the in-app browser) - await Browser.open({ url: "https://ionicframework.com" }); -} -``` - -A common mistake is to import a plugin directly, then use the plugin API immediately, resulting in the web implementation being used: -```typescript -import { Browser } from '@capacitor/core'; - -async openBrowser() { - // On iOS, for example, this will open the URL in Safari instead of - // the SFSafariViewController (in-app browser) - await Browser.open({ url: "https://ionicframework.com" }); -} -``` - -By using the plugins from the plugin registry (`Plugins` object), the native implementation of the plugin is used (if available), with fallback to the web version. diff --git a/site/docs-md/apis/keyboard/index.md b/site/docs-md/apis/keyboard/index.md deleted file mode 100644 index 746f7d63e..000000000 --- a/site/docs-md/apis/keyboard/index.md +++ /dev/null @@ -1,105 +0,0 @@ ---- -title: Keyboard -description: Keyboard API -url: /docs/apis/keyboard -contributors: - - mlynch - - jcesarmobile ---- - - - -# Keyboard - -The Keyboard API provides keyboard display and visibility control, along with event tracking when the keyboard shows and hides. - - - - -## Window Events for cordova-plugin-ionic-keyboard compatibility - -* keyboardWillShow -* keyboardDidShow -* keyboardWillHide -* keyboardDidHide - -## Example - -```typescript -import { Plugins, KeyboardInfo } from '@capacitor/core'; - -const { Keyboard } = Plugins; - -// Keyboard Plugin Events - -Keyboard.addListener('keyboardWillShow', (info: KeyboardInfo) => { - console.log('keyboard will show with height', info.keyboardHeight); -}); - -Keyboard.addListener('keyboardDidShow', (info: KeyboardInfo) => { - console.log('keyboard did show with height', info.keyboardHeight); -}); - -Keyboard.addListener('keyboardWillHide', () => { - console.log('keyboard will hide'); -}); - -Keyboard.addListener('keyboardDidHide', () => { - console.log('keyboard did hide'); -}); - -// window events - -window.addEventListener('keyboardWillShow', (e) => { - console.log('keyboard will show with height', (e).keyboardHeight); -}); - -window.addEventListener('keyboardDidShow', (e) => { - console.log("keyboard did show with height", (e).keyboardHeight); -}); - -window.addEventListener('keyboardWillHide', () => { - console.log('keyboard will hide'); -}); - -window.addEventListener('keyboardDidHide', () => { - console.log('keyboard did hide'); -}); - -// API - -Keyboard.setAccessoryBarVisible({isVisible: false}); - -Keyboard.show(); - -Keyboard.hide(); - -``` - -## Keyboard configuration (iOS only) - -The keyboard plugin allows the following configuration values to be added in `capacitor.config.json` for the iOS platform: - -- `resize`: It configures the way the app is resized when the Keyboard appears. -Allowed values are - - `none`: Not the app, nor the webview are resized - - `native`: (default) The whole native webview will be resized when the keyboard shows/hides, it will affect the `vh` relative unit. - - `body`: Only the html `` element will be resized. Relative units are not affected, because the viewport does not change. - - `ionic`: Only the html ion-app element will be resized. Use it only for ionic apps. - -- `style`: If set to `dark` it will use Dark style keyboard instead of the regular one. - -```json -{ - "plugins": { - "Keyboard": { - "resize": "body", - "style": "dark" - } - } -} -``` - -## API - - diff --git a/site/docs-md/apis/local-notifications/index.md b/site/docs-md/apis/local-notifications/index.md deleted file mode 100644 index 98fcfc170..000000000 --- a/site/docs-md/apis/local-notifications/index.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Local Notifications -description: Local Notifications API -url: /docs/apis/local-notifications -contributors: - - mlynch - - jcesarmobile ---- - - - -# Local Notifications - -The Local Notification API provides a way to schedule "local" notifications - notifications that are scheduled and delivered on the device as opposed to "push" notifications sent from a server. - -Local Notifications are great for reminding the user about a change in the app since they last visited, providing reminder features, and delivering offline information with the app being in the foreground. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; -const { LocalNotifications } = Plugins; - -const notifs = await LocalNotifications.schedule({ - notifications: [ - { - title: "Title", - body: "Body", - id: 1, - schedule: { at: new Date(Date.now() + 1000 * 5) }, - sound: null, - attachments: null, - actionTypeId: "", - extra: null - } - ] -}); -console.log('scheduled notifications', notifs); -``` - -## Local Notifications configuration (Android only) - -The local notification plugin allows the following configuration values to be added in `capacitor.config.json` for the Android platform: - -- `smallIcon`: It allows you to set the default icon for the local notification. -- `iconColor`: It allows you to set the default color for the local notification icon. -- `sound`: It allows you to set the default notification sound. On Android 26+ it sets the default channel sound and can't be changed unless the app is uninstalled. - -```json - "plugins": { - "LocalNotifications": { - "smallIcon": "ic_stat_icon_config_sample", - "iconColor": "#488AFF", - "sound": "beep.wav" - } - } -``` - -## API - - diff --git a/site/docs-md/apis/modals/index.md b/site/docs-md/apis/modals/index.md deleted file mode 100644 index bec65ceea..000000000 --- a/site/docs-md/apis/modals/index.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Modals -description: Modals API -url: /docs/apis/modals -contributors: - - mlynch - - jcesarmobile ---- - - - -# Modals - -The Modals API provides methods for triggering native modal windows for alerts, confirmations, and input prompts, as -well as Action Sheets. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; - -const { Modals } = Plugins; - -async showAlert() { - let alertRet = await Modals.alert({ - title: 'Stop', - message: 'this is an error' - }); -} - -async showConfirm() { - let confirmRet = await Modals.confirm({ - title: 'Confirm', - message: 'Are you sure you\'d like to press the red button?' - }); - console.log('Confirm ret', confirmRet); -} - -async showPrompt() { - let promptRet = await Modals.prompt({ - title: 'Hello', - message: 'What\'s your name?' - }); - console.log('Prompt ret', promptRet); -} - -async showActions() { - let promptRet = await Modals.showActions({ - title: 'Photo Options', - message: 'Select an option to perform', - options: [ - { - title: 'Upload' - }, - { - title: 'Share' - }, - { - title: 'Remove', - style: ActionSheetOptionStyle.Destructive - } - ] - }) - console.log('You selected', promptRet); -} -``` - -## API - - diff --git a/site/docs-md/apis/motion/index.md b/site/docs-md/apis/motion/index.md deleted file mode 100644 index 3ca121a8f..000000000 --- a/site/docs-md/apis/motion/index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Motion -description: Motion API -url: /docs/apis/motion -contributors: - - mlynch - - jcesarmobile ---- - - - -# Motion - -The Motion API tracks accelerometer and device orientation (compass heading, etc.) - - - -### Example - -### API - - \ No newline at end of file diff --git a/site/docs-md/apis/network/index.md b/site/docs-md/apis/network/index.md deleted file mode 100644 index 3db53b39d..000000000 --- a/site/docs-md/apis/network/index.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Network -description: Network API -url: /docs/apis/network -contributors: - - mlynch - - jcesarmobile ---- - - - -# Network - -The Network API provides events for monitoring network status changes, along with querying the current state of the network. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; - -const { Network } = Plugins; - -let handler = Network.addListener('networkStatusChange', (status) => { - console.log("Network status changed", status); -}); -// To stop listening: -// handler.remove(); - -// Get the current network status -let status = await Network.getStatus(); - -// Example output: -{ - "connected": true, - "connectionType": "wifi" -} -``` - -## Android Note - -The Network API requires the following permission be added to your `AndroidManifest.xml`: - -```xml - -``` - -This permission allows the app to access information about the current network, such as whether it is connected to wifi or cellular. - -## API - - diff --git a/site/docs-md/apis/permissions/index.md b/site/docs-md/apis/permissions/index.md deleted file mode 100644 index 6633f5f3f..000000000 --- a/site/docs-md/apis/permissions/index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Permissions -description: Permissions API -url: /docs/apis/permissions -contributors: - - mlynch ---- - - - -# Permissions - -The Permissions API provides methods to check if certain permissions have been granted before requesting them. - -This can be useful, for example, to avoid a user denying a permission request due to lack of context behind why the app is requesting the permission. Instead, checking the permission -first and optionally displaying a custom UI to prepare the user for the permission check could increase permission allow rates and improve user experience. - -## API - - diff --git a/site/docs-md/apis/photos/index.md b/site/docs-md/apis/photos/index.md deleted file mode 100644 index 82677fa21..000000000 --- a/site/docs-md/apis/photos/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Photos -description: Photos API -url: /docs/apis/photos -contributors: - - mlynch - - jcesarmobile ---- - - - -# Photos - -The Photos API provides methods to load photos and albums from the user's photo library, along with saving photos. - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/push-notifications/index.md b/site/docs-md/apis/push-notifications/index.md deleted file mode 100644 index 91a3bd50d..000000000 --- a/site/docs-md/apis/push-notifications/index.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Push Notifications -description: Push Notifications API -url: /docs/apis/push-notifications -contributors: - - mlynch - - jcesarmobile ---- - - - -# Push Notifications - -The Push Notifications API provides methods for registering a device to receive notifications from a server, along with processing received notifications and responding to them. In contrast, the [Local Notifications](/docs/apis/local-notifications) API provides means for offline, local notification scheduling and processing. - -## Enabling Push Notifications Capabilites - -On iOS you must enable Push Notifications Capabilities in your project to enable the Push Notifications plugin to work. To do so, go to the `Capabilities` section of the app project and switch the `Push Notifications` button from `OFF` to the `ON` position. - -This change adds the push capabilites to the app and creates an entitlements file in the project. - -![Enabling Push Notifications Capabilities](/assets/img/docs/ios/enable-push-capabilities.png) - -On Android just download the app project's `google-services.json` file from the Firebase console, and place it in the `projectName/android/app` folder. - -## Push Notifications icon - -On Android, the Push Notifications icon with the appropriate name should be added to the `AndroidManifest.xml` file: - -```xml - -``` - -If no icon is specified Android will use the application icon, but push icon should be white pixels on a transparent backdrop. As the application icon is not usually like that, it will show a white square or circle. So it's recommended to provide the separate icon for Push Notifications. - -Android Studio has an icon generator you can use to create your Push Notifications icon. - -## Disabling Push Notifications plugin - -If you are not using Push Notifications in your project, when you submit the app to iTunes Connect, Apple will send you an email saying it has issues because of `Missing Push Notification Entitlement`. That happens because Capacitor includes the code for registering for push notifications and getting the token. - -Apple sends that mail just to make sure you didn't make a mistake and forgot to enable Push Notifications Capabilities in your app, but can safely ignore it if you are not using the Push Notifications plugin. - -In case you don't want to receive the mail, you can disable the Push Notifications plugin by removing `USE_PUSH` from `Active Compilation Conditions` in your project's Build Settings section. - -![Disable Push Notifications](/assets/img/docs/ios/disable-push-plugin.png) - -## Push notifications appearance in foreground - -On iOS you can configure the way the push notifications are displayed when the app is in foreground by providing the `presentationOptions` in your `capacitor.config.json` as an Array of Strings you can combine. - -Possible values are: -* `badge`: badge count on the app icon is updated (default value) -* `sound`: the device will ring/vibrate when the push notification is received -* `alert`: the push notification is displayed in a native dialog - -An empty Array can be provided if none of the previous options are desired. `pushNotificationReceived` event will still be fired with the push notification information. - -```json -"plugins": { - "PushNotifications": { - "presentationOptions": ["badge", "sound", "alert"] - } -} -``` - - - - -## Example Guides - -[Using Push Notifications with Firebase in an Ionic Angular App](/docs/guides/push-notifications-firebase) - -## API - - diff --git a/site/docs-md/apis/share/index.md b/site/docs-md/apis/share/index.md deleted file mode 100644 index db7fdf963..000000000 --- a/site/docs-md/apis/share/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Share -description: Share API -url: /docs/apis/share -contributors: - - mlynch - - jcesarmobile ---- - - - -# Share - -The Share API provides methods for sharing content in any sharing-enabled apps the user may have installed. - -The Share API works on iOS, Android, and the Web (using the new [Web Share API](https://developers.google.com/web/updates/2016/09/navigator-share)), though web support is currently spotty. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; -const { Share } = Plugins; - -let shareRet = await Share.share({ - title: 'See cool stuff', - text: 'Really awesome thing you need to see right meow', - url: 'http://ionicframework.com/', - dialogTitle: 'Share with buddies' -}); -``` - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/splash-screen/index.md b/site/docs-md/apis/splash-screen/index.md deleted file mode 100644 index 172c035f1..000000000 --- a/site/docs-md/apis/splash-screen/index.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Splash Screen -description: Splash Screen API -url: /docs/apis/splash-screen -contributors: - - mlynch - - jcesarmobile - - trancee ---- - - - -# Splash Screen - -The Splash Screen API provides methods for showing or hiding a Splash image. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; -const { SplashScreen } = Plugins; - -// Hide the splash (you should do this on app launch) -SplashScreen.hide(); - -// Show the splash for an indefinite amount of time: -SplashScreen.show({ - autoHide: false -}); - -// Show the splash for two seconds and then auto hide: -SplashScreen.show({ - showDuration: 2000, - autoHide: true -}); -``` - -## Hiding the Splash Screen - -By default, the Splash Screen is set to automatically hide after a certain amount of time (3 seconds). However, your -app should boot much faster than this! - -To make sure you provide the fastest app loading experience to your users, you must hide the splash screen automatically when your app is ready to be used. Simply add the `SplashScreen.hide()` call near the top of your app's JS, such as in `app.component.ts` if using Angular. - -If your app needs longer than 3 seconds to load, configure the default duration by setting `launchShowDuration` in your `capacitor.config.json`: - -```json -{ - "plugins": { - "SplashScreen": { - "launchShowDuration": 5000 - } - } -} -``` - -If you want to be sure the splash never hides before the app is fully loaded, set `launchAutoHide` to `false` in your `capacitor.config.json`: - -```json -{ - "plugins": { - "SplashScreen": { - "launchAutoHide": false - } - } -} -``` - -Then run `npx cap copy` to apply these changes. - -## Background Color - -In certain conditions, especially if the splash screen does not fully cover the device screen, it might happen that the app screen is visible around the corners (due to transparency). Instead of showing a transparent color, you can set a `backgroundColor` to cover those areas. - -Possible values for `backgroundColor` in your `capacitor.config.json` are either `#RGB` or `#ARGB`. - -## Spinner - -If you want to show a spinner on top of the splash screen, set `showSpinner` to `true` in your `capacitor.config.json`: - -```json -{ - "plugins": { - "SplashScreen": { - "showSpinner": true - } - } -} -``` - -You can customize the appearance of the spinner with the following configuration. - -For Android, `androidSpinnerStyle` has the following options: -- horizontal -- small -- large (default) -- inverse -- smallInverse -- largeInverse - -For iOS, `iosSpinnerStyle` has the following options: -- large (default) -- small - -To set the color of the spinner use `spinnerColor`, values are either `#RGB` or `#ARGB`. - -Then run `npx cap copy` to apply these changes. - -## Full Screen & Immersive (Android only) - -You can enable `splashFullScreen` to hide status bar, or `splashImmersive` to hide both status bar and software navigation buttons. If both options are enabled `splashImmersive` takes priority, as it also fulfils `splashFullScreen` functionality. - -## Configuration - -These config parameters are available in `capacitor.config.json`: - -```json -{ - "plugins": { - "SplashScreen": { - "launchShowDuration": 3000, - "launchAutoHide": true, - "backgroundColor": "#ffffffff", - "androidSplashResourceName": "splash", - "androidScaleType": "CENTER_CROP", - "androidSpinnerStyle": "large", - "iosSpinnerStyle": "small", - "spinnerColor": "#999999", - "showSpinner": true, - "splashFullScreen": true, - "splashImmersive": true - } - } -} -``` - -### Android - -To use splash screen images named something other than `splash.png`, set `androidSplashResourceName` to the new resource name in `capacitor.config.json`. Additionally, in `android/app/src/main/res/values/styles.xml`, change the resource name in the following block: - -```xml - -``` - -## Example Guides - -[Adding Your Own Icons and Splash Screen Images ›](https://www.joshmorony.com/adding-icons-splash-screens-launch-images-to-capacitor-projects/) - -[Creating a Dynamic/Adaptable Splash Screen for Capacitor (Android) ›](https://www.joshmorony.com/creating-a-dynamic-universal-splash-screen-for-capacitor-android/) - -## API - - diff --git a/site/docs-md/apis/status-bar/index.md b/site/docs-md/apis/status-bar/index.md deleted file mode 100644 index b8fe119ed..000000000 --- a/site/docs-md/apis/status-bar/index.md +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Status Bar -description: Status Bar API -url: /docs/apis/status-bar -contributors: - - mlynch - - jcesarmobile ---- - - - -# Status Bar - -The StatusBar API Provides methods for configuring the style of the Status Bar, along with showing or hiding it. - - - -## iOS Note - -This plugin requires "View controller-based status bar appearance" (`UIViewControllerBasedStatusBarAppearance`) set to `YES` in `Info.plist`. Read about [Configuring iOS](/docs/ios/configuration) for help. - -The status bar visibility defaults to visible and the style defaults to `StatusBarStyle.Light`. You can change these defaults by adding `UIStatusBarHidden` and or `UIStatusBarStyle` in the `Info.plist`. - -## Events - -* statusTap - -## Example - -```typescript -// Events (iOS only) -window.addEventListener('statusTap', function () { - console.log("statusbar tapped"); -}); - -//API -import { - Plugins, - StatusBarStyle, -} from '@capacitor/core'; - -const { StatusBar } = Plugins; - -export class StatusBarExample { - isStatusBarLight = true - - changeStatusBar() { - StatusBar.setStyle({ - style: this.isStatusBarLight ? StatusBarStyle.Dark : StatusBarStyle.Light - }); - this.isStatusBarLight = !this.isStatusBarLight; - - // Display content under transparent status bar (Android only) - StatusBar.setOverlaysWebView({ - overlay: true - }); - } - - hideStatusBar() { - StatusBar.hide(); - } - - showStatusBar() { - StatusBar.show(); - } -} -``` - -## API - - diff --git a/site/docs-md/apis/storage/index.md b/site/docs-md/apis/storage/index.md deleted file mode 100644 index 914f27c2c..000000000 --- a/site/docs-md/apis/storage/index.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: Storage -description: Storage API -url: /docs/apis/storage -contributors: - - mlynch - - jcesarmobile ---- - - - -# Storage - -The Storage API provides a key-value store for simple data. - -Mobile OS's may periodically clear data set in `window.localStorage`, so this API should be used instead of `window.localStorage`. This API will fall back to using `localStorage` when running as a Progressive Web App. - -On iOS this plugin will use [UserDefaults](https://developer.apple.com/documentation/foundation/userdefaults) and on Android [SharedPreferences](https://developer.android.com/reference/android/content/SharedPreferences). Stored data is cleared if the app is uninstalled. - -Note: this API is not meant for high-performance data storage applications. Take a look at using SQLite or a separate data engine if your application will store a lot of items, have high read/write load, or require complex querying. - - - -## Working with JSON - -`Storage` works on Strings only. However, storing JSON blobs is easy: just `JSON.stringify` the object before calling `set`, then `JSON.parse` the value returned from `get`. See the -example below for more details. - -This method can also be used to store non-string values, such as numbers and booleans. - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; - -const { Storage } = Plugins; - - -// JSON "set" example -async setObject() { - await Storage.set({ - key: 'user', - value: JSON.stringify({ - id: 1, - name: 'Max' - }) - }); -} - -// JSON "get" example -async getObject() { - const ret = await Storage.get({ key: 'user' }); - const user = JSON.parse(ret.value); -} - -async setItem() { - await Storage.set({ - key: 'name', - value: 'Max' - }); -} - -async getItem() { - const { value } = await Storage.get({ key: 'name' }); - console.log('Got item: ', value); -} - -async removeItem() { - await Storage.remove({ key: 'name' }); -} - -async keys() { - const { keys } = await Storage.keys(); - console.log('Got keys: ', keys); -} - -async clear() { - await Storage.clear(); -} -``` - -## API - - diff --git a/site/docs-md/apis/toast/index.md b/site/docs-md/apis/toast/index.md deleted file mode 100644 index ca2e69677..000000000 --- a/site/docs-md/apis/toast/index.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Toast -description: Toast API -url: /docs/apis/toast -contributors: - - mlynch - - jcesarmobile ---- - - - -# Toast - -The Toast API provides a notification pop up for displaying important information to a user. Just like real toast! - - - -## PWA/Electron Notes - -[PWA Elements](/docs/pwa-elements) are required for Toast plugin to work. - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; -const { Toast } = Plugins; - -async show() { - await Toast.show({ - text: 'Hello!' - }); -} -``` - -## API - - \ No newline at end of file diff --git a/site/docs-md/apis/web-view/index.md b/site/docs-md/apis/web-view/index.md deleted file mode 100644 index 385a2099b..000000000 --- a/site/docs-md/apis/web-view/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: WebView -description: WebView API -url: /docs/apis/webview -contributors: - - mlynch - - jcesarmobile ---- - - - -# WebView - -The WebView API provides some configuration options for the embedded WebView on iOS and Android. - - - -## Example - -```typescript -import { Plugins } from '@capacitor/core'; -const { WebView } = Plugins; - -WebView.setServerBasePath('../../path/to/new/basepath'); -``` - -## API - - \ No newline at end of file diff --git a/site/docs-md/basics/adding-platforms.md b/site/docs-md/basics/adding-platforms.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs-md/basics/building-your-app.md b/site/docs-md/basics/building-your-app.md deleted file mode 100644 index 8dfcb078b..000000000 --- a/site/docs-md/basics/building-your-app.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: Building your App -description: Building your App -url: /docs/basics/building-your-app -contributors: - - dotnetkow - - mlynch ---- - -# Building your App - -

Capacitor works on a three-step build process: First, your web code is built (if necessary). Next, the built web code is copied to each platform. Finally, the app is compiled using the platform-specific tooling.

- -## 1. Building web code - -Capacitor does not have any built-in feature to build web code. Instead, you will use your framework's build process of choice. - -Regardless of your build process, we recommend adding a `build` script to your `package.json` to enable the standard frontend -build command: - -```json -{ - "scripts": { - "build": "command-to-build (ex: webpack, tsc, babel, etc.)" - } -} -``` - - -```bash -npm run build -``` - -This builds your Progressive Web App if you've configured Progressive Web App support already. - -## 2. Copying Web Code - -Once your web code is built, it needs to be copied to each native project: - -```bash -npx cap copy -``` - -This should be run each time you perform a build. Feel free to add this command to the end of your build script in `package.json` - -## 3. Building Native Project - -### iOS - -iOS relies on Xcode to do the final app compile - -```bash -npx cap copy ios -npx cap open ios -``` - -Once Xcode launches, you can build your finally app binary through the standard Xcode workflow. - -### Android - -Currently, Android relies on Android Studio (or, optionally, the Android CLI tools) to build the app: - -```bash -npx cap copy android -npx cap open android -``` - -Once Android Studio launches, you can build your app through the standard Android Studio workflow. diff --git a/site/docs-md/basics/configuring-your-app.md b/site/docs-md/basics/configuring-your-app.md deleted file mode 100644 index e32412840..000000000 --- a/site/docs-md/basics/configuring-your-app.md +++ /dev/null @@ -1,157 +0,0 @@ ---- -title: Configuring Your App -description: Native Project Configuration -url: /docs/basics/configuring-your-app -contributors: - - jcesarmobile - - dotnetkow ---- - -# Configuring Your App - -

Capacitor embraces the idea of "Code once, configure everywhere": configuration is -managed per-platform instead of in an abstracted system like a config.xml in Cordova, for example.

- -## Per-platform Management - -Capacitor requires you to be more involved in the native project configuration than with Cordova, for example. However, -we think this is the right approach, because it makes it easy to follow existing Native iOS/Android guides, get help on Stack Overflow, and have full control over your project. - -Additionally, because configuring a Capacitor project is no different from configuring an iOS or Android project, existing native development teams can easily work alongside -web developers, with each side using the tools and SDKs they are familiar with. Of course, we believe web developers can handle all the required Native configuration on their own, and -the Capacitor documentation exists to help web developers do just that. - -## Common Configuration - -Capacitor has some high level configuration options that are set in `capacitor.config.json`. These generally don't modify native functionality, but control Capacitor's tooling. - -The current ones you might configure are: - -```json5 -{ - // The package name for Android and the bundle identifier for iOS. - "appId": "com.company.appname", - - // Your app's name. - "appName": "Capacitor Kitchen Sink", - - // Sets the directory of your built web assets. This is the directory that will be - // used to run your app in a native environment. - "webDir": "www", - - // The JavaScript package manager to use, either npm or yarn. - "npmClient": "npm", - - // Whether to use capacitor.js as a bundle that is copied to your web code, - // or require it to be bundled/imported through a typical - // typescript/babel/webpack/rollup workflow. - // - // The starter project sets this to true, but if you're using Ionic or another framework, - // you'll probably want this to be false (default is false) - "bundledWebRuntime": false, - - // On Windows, we aren't able to automatically open Android Studio - // without knowing the full path. The default is set to the default - // Android Studio install path, but you may change it manually. - "windowsAndroidStudioPath": "C:\Program Files\Android\Android Studio\bin\studio64.exe", - - // A Boolean value that determines whether to hide native logs for iOS and Android. The preference is ignored if it's also declared inside ios or android - // Default is false - "hideLogs": true - - // Server object contains port and url configurations - "server": { - // You can make the app to load an external url (i.e. to live reload) - "url": "http://192.168.1.33:8100", - // You can configure the local hostname, but it's recommended to keep localhost - // as it allows to run web APIs that require a secure context such as - // navigator.geolocation and MediaDevices.getUserMedia. - "hostname": "app", - // It is possible to configure the local scheme that is used. This can be useful - // when migrating from cordova-plugin-ionic-webview, where the default scheme on iOS is ionic. - "iosScheme": "ionic", - "androidScheme": "http", - // Normally all external URLs are opened in the browser. By setting this option, you tell - // Capacitor to open URLs belonging to these hosts inside its WebView. - "allowNavigation": [ - "example.org", - "*.example.org", - "192.0.2.1" - ] - }, - // User agent of Capacitor WebView for iOS, Android and Electron, unless also declared inside ios, android or electron objects - "overrideUserAgent": "my custom user agent", - // String to append to the original user agent of Capacitor WebView for iOS, Android and Electron, - // unless also declared inside ios, android or electron objects. Only if overrideUserAgent is not set. - "appendUserAgent": "string to append", - // Background color of Capacitor WebView for both iOS and Android unless also declared inside ios or android objects - "backgroundColor": "#ffffffff", - "android": { - // User agent of Capacitor WebView for Android - "overrideUserAgent": "my custom user agent for Android", - // String to append to the original user agent of Capacitor WebView for Android. - "appendUserAgent": "string to append for Android", - // Background color of Capacitor WebView for Android only - "backgroundColor": "#ffffffff", - // On Android, if you are loading the app from a remote/testing server from https - // protocol, you need to enable mixed content mode to allow the WebView to load - // files from different schemes such as capacitor-content:// or capacitor-file:// - "allowMixedContent": true, - // Android's default keyboard doesn't allow proper JS key capture - // You can use a simpler keyboard enabling this preference - // Be aware that this keyboard has some problems and limitations - "captureInput": true, - // Enables debugging of web contents (HTML / CSS / JavaScript) loaded into - // any WebViews of this application. - // This flag can be enabled in order to facilitate debugging of web layouts - // and JavaScript code running inside WebViews. - "webContentsDebuggingEnabled": true, - - // A Boolean value that determines whether to hide native Android logs or not - // Default is false - "hideLogs": true - }, - "ios": { - // User agent of Capacitor WebView for iOS - "overrideUserAgent": "my custom user agent for iOS", - // String to append to the original user agent of Capacitor WebView for iOS. - "appendUserAgent": "string to append for iOS", - // Background color of Capacitor WebView for iOS only - "backgroundColor": "#ffffffff", - // Configure the WebView's UIScrollView's content inset behavior - // Default is never - // Possible values are "automatic", "scrollableAxes", "never" and "always" - // https://developer.apple.com/documentation/uikit/uiscrollview/contentinsetadjustmentbehavior - "contentInset": "always", - // Configure the Swift version to be used for Cordova plugins. - // Default is 5.0 - "cordovaSwiftVersion": "4.2", - // Minimum iOS version supported by the project. - // Default is 11.0 - "minVersion": "11.3", - // Some Cordova plugins require to configure the linker flags - "cordovaLinkerFlags": ["-ObjC"], - // A Boolean value that determines whether pressing on a link displays a preview of - // the destination for the link. - "allowsLinkPreview": false, - - // A Boolean value that determines whether to hide native iOS logs or not - // Default is false - "hideLogs": true - }, - "electron": { - // User agent of Capacitor WebView for Electron - "overrideUserAgent": "my custom user agent for Electron", - // String to append to the original user agent of Capacitor WebView for Electron. - "appendUserAgent": "string to append for Electron", - } -} -``` - -## Native Configuration - -iOS and Android each have configuration guides walking through making common changes to their behavior: - -[Configuring iOS ›](/docs/ios/configuration) - -[Configuring Android ›](/docs/android/configuration) diff --git a/site/docs-md/basics/index.md b/site/docs-md/basics/index.md deleted file mode 100644 index 5a94b130c..000000000 --- a/site/docs-md/basics/index.md +++ /dev/null @@ -1,3 +0,0 @@ -# Capacitor Basics - -Follow the links on the left to learn the basics of using and developing with Capacitor. \ No newline at end of file diff --git a/site/docs-md/basics/managing-platforms.md b/site/docs-md/basics/managing-platforms.md deleted file mode 100644 index f61c695ad..000000000 --- a/site/docs-md/basics/managing-platforms.md +++ /dev/null @@ -1,3 +0,0 @@ -# Managing Deployment Platforms - -Capacitor supports iOS, Android, and PWA. diff --git a/site/docs-md/basics/opening-native-projects.md b/site/docs-md/basics/opening-native-projects.md deleted file mode 100644 index bfc8f300a..000000000 --- a/site/docs-md/basics/opening-native-projects.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Opening Native Projects -description: Opening Native Projects via Native IDEs -url: /docs/basics/opening-native-projects -contributors: - - dotnetkow - - mlynch ---- - -# Opening Native Projects - -

Capacitor uses the native IDE for each platform in order to provide required configuration, and to build, test, and deploy apps.

- -

For iOS development, that means you must have Xcode 11 or above installed. For Android, Android Studio 3 or above.

- -

Both IDEs can be opened manually or using the npx cap open command:

- -## Opening Xcode - -```bash -npx cap open ios -``` - -Alternatively, you can open Xcode manually: - -```bash -open ios/App/App.xcworkspace -``` - -## Opening Android Studio - -```bash -npx cap open android -``` - -Alternatively, you can open Android Studio and import the `android/` directory as an Android Studio project. diff --git a/site/docs-md/basics/progressive-web-app.md b/site/docs-md/basics/progressive-web-app.md deleted file mode 100644 index 0937117e8..000000000 --- a/site/docs-md/basics/progressive-web-app.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Building Progressive Web Apps -description: How to build Progressive Web Apps with Capacitor -url: /docs/basics/progressive-web-app -contributors: - - jcesarmobile - - dotnetkow ---- - -# Building Progressive Web Apps - -

Capacitor has first-class support for Progressive Web Apps, making it easy to build an app that runs natively on iOS and Android, but also on the web as a mobile web app or "Progressive Web App."

- -## What is a Progressive Web App? - -Put simply, a Progressive Web App (PWA) is a web app that uses modern web capabilities to deliver an app-like experience to users. These apps are deployed to traditional web servers, are accessible through URLs, and can be indexed by search engines. - -A Progressive Web App is, for all practical purposes, just another term for a website that has been optimized for mobile performance and that utilizes newly available Web APIs to deliver features that are similar to a traditional native app, such as push notifications and offline storage. - -## Capacitor and Progressive Web Apps - -Capacitor has first-class support for Progressive Web Apps *and* native apps. That means that Capacitor's plugin bridge supports running in either a native context or in the web, with many core plugins available *in both contexts* with the exact same API and calling conventions. - -This means you'll use `@capacitor/core` as a dependency for both your native app *and* your Progressive Web App, and Capacitor will seamlessly call web code when required and native code when available. - -Additionally, Capacitor offers a number of utilities for querying the current platform to provide customized experiences when running natively or on the web. - -## Adding Progressive Web App Support to your app - -Adding PWA support to any existing frontend project is easy. Just add an App Manifest file and configure a service worker: - -### App Manifest - -First, you'll need an [App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) file ([manifest.json](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json)) -that sits alongside your `index.html` file and provides metadata about your app, such as its name, theme colors, and icons. This information will be used -when your app is installed on the home screen, for example. - -### Service Worker - -Next, in order to send push notifications and store data offline, a [Service Worker](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API) will -enable your web app to proxy network requests and perform background tasks needed to process and sync data. - -Service Workers are powerful, but complicated. Generally, writing them from scratch is not recommended. Instead, take a look at tools like [Workbox](https://developers.google.com/web/tools/workbox/) that -provide common Service Worker recipes that you can easily incorporate into your app. - -Read more about using Service Workers, including how to register them, on the [Using Service Workers](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers) page on MDN. - -## Progressive Web App Performance - -Progressive Web Apps are judged by several performance standards, including [Time to Interactive](https://developers.google.com/web/tools/lighthouse/audits/time-to-interactive) and [First Meaningful Paint](https://developers.google.com/web/tools/lighthouse/audits/first-meaningful-paint). - -Follow the [Progressive Web App Checklist](https://developers.google.com/web/progressive-web-apps/checklist) before going live, and use [Lighthouse](https://developers.google.com/web/tools/lighthouse/) to audit and test your app. - -If you're struggling to meet Progressive Web App performance standards with your existing frontend stack, take a look at [Ionic Framework](http://ionicframework.com/) version 4 or greater as an option for getting fast PWA support with nearly zero configuration. Ionic 4.x or above is a web component library that works in several popular frontend frameworks, not just Angular. - -## Running Natively and on the Web - -One of the key features of Capacitor is the ability to build one app that runs both natively (in the app stores), _and_ on the web. Capacitor does this by providing a layer between the underlying platform and the APIs/Plugins you'd like to use. - -If your app makes native plugin calls that don't have a web substitute, such as `SplashScreen.show()`, the app will allow those calls without crashing. Calls that return a promise will return a rejected promise, which you should be handling in your app anyways. - -Additionally, Capacitor's JavaScript API has a number of utilities that make it possible to programmatically check whether certain APIs are available. - -For example, if your app would normally rely on the Camera app being used to take a photo, you could check if the Camera is available, and if not, ask the user to upload a file instead: - -```typescript -import { Capacitor } from '@capacitor/core'; - -const isAvailable = Capacitor.isPluginAvailable('Camera'); - -if (!isAvailable) { - // Have the user upload a file instead -} else { - // Otherwise, make the call: - Camera.getPhoto() -} -``` \ No newline at end of file diff --git a/site/docs-md/basics/running-your-app.md b/site/docs-md/basics/running-your-app.md deleted file mode 100644 index 3e5b9a718..000000000 --- a/site/docs-md/basics/running-your-app.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: Running your App -description: Running your App -url: /docs/basics/running-your-app -contributors: - - dotnetkow - - mlynch ---- - -# Running your App - -

Capacitor relies on each platform's IDE of choice to run and test your app.

- -## iOS - -Currently, iOS requires using Xcode to run your app. - -```bash -npx cap open ios -``` - -Once Xcode launches, you can build/simulate/run your app through the standard Xcode workflow. - -## Android - -```bash -npx cap open android -``` - -Once Android Studio launches, you can build/emulate/run your app through the standard Android Studio workflow. - -## Progressive Web App - -Capacitor has a tiny development web server for simple testing, but generally you'll run your web app -using your framework of choice's server tools. - -```bash -npx cap serve -``` - -This will open your web app in a local web server instance in the browser. diff --git a/site/docs-md/basics/using-plugins.md b/site/docs-md/basics/using-plugins.md deleted file mode 100644 index dd873e36c..000000000 --- a/site/docs-md/basics/using-plugins.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Using Capacitor Plugins -description: How to use Capacitor plugins, known as Capacitor APIs -url: /docs/basics/using-plugins -contributors: - - jcesarmobile - - dotnetkow ---- - -# Using Capacitor Plugins - -

Capacitor ships with a number of built-in plugins, known as Capacitor APIs, such as Camera and Filesystem.

- -

However, chances are your app will need to access more native functionality than provided out of the box in Capacitor.

- -

If you are willing and able to write a small amount of native code, you can quickly add your own native functionality and expose it as a Capacitor plugin by following the Plugin Guide.

- -## Finding Plugins - -The community has built a number of plugins for various native functionality and you can easily add them to your app. - -See our [Community Plugins](/docs/community/plugins/) list for some options. - -## Using Cordova and Ionic Native Plugins - -Capacitor also supports a wide range of [Cordova plugins](/docs/cordova/using-cordova-plugins), so there are a lot to choose from. \ No newline at end of file diff --git a/site/docs-md/basics/workflow.md b/site/docs-md/basics/workflow.md deleted file mode 100644 index e4eabd2f6..000000000 --- a/site/docs-md/basics/workflow.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Development Workflow -description: Capacitor Workflow -url: /docs/basics/workflow -contributors: - - dotnetkow - - mlynch ---- - -# Capacitor Workflow - -

The Capacitor workflow involves a few consistent tasks:

- -## 1. Develop and build your Web App - -Capacitor turns your web app into a native binary for each platform. Thus, much of your work will consist of developing and then building a mobile-focused web app. - -You will interact with the native platform underneath using Capacitor's APIs (such as [Camera](/docs/apis/camera)), or by using existing Cordova plugins with Capacitor's [Cordova Compatibility](/docs/cordova). - -As a final step you will build your application using a command similar to - -```bash -npm run build -``` - -If you are using a framework, follow your framework's build process. - -If for example you are using [Ionic](https://ionicframework.com/), this would be - -```bash -ionic build -``` - -## 2. Copy your Web Assets - -When you are ready to run your app natively on a device or in a simulator, copy your built web assets using - -```bash -npx cap copy -``` - -## 3. Open your Native IDE - -Capacitor uses the Native IDEs to build, simulate, and run your app. To open it run - -```bash -npx cap open -``` - -## 4. Update the native project - -In some cases, the Capacitor app needs to be updated, such as when installing new plugins. - -To install new plugins (including Cordova ones), run - -```bash -npm install really-cool-plugin -npx cap update -``` - -## 5. Updating Capacitor - -To check if there are any new updates to Capacitor itself, run `npx cap doctor` to print out the current installed dependencies as well view the latest available. - -To update Capacitor Core and CLI: - -```bash -npm install @capacitor/cli@latest -npm install @capacitor/core@latest -``` - -To update any or all of the platforms you are using: - -```bash -npm install @capacitor/ios@latest -npm install @capacitor/android@latest -``` - -Note: If you don't want to risk to introduce breaking changes, use `npm update @capacitor/package-name` instead of `@latest` as `update` respects semver. \ No newline at end of file diff --git a/site/docs-md/community/index.md b/site/docs-md/community/index.md deleted file mode 100644 index ef7e8317b..000000000 --- a/site/docs-md/community/index.md +++ /dev/null @@ -1 +0,0 @@ -# Capacitor Community \ No newline at end of file diff --git a/site/docs-md/community/plugins.md b/site/docs-md/community/plugins.md deleted file mode 100644 index 414b10e21..000000000 --- a/site/docs-md/community/plugins.md +++ /dev/null @@ -1,186 +0,0 @@ ---- -title: Capacitor Community Plugins -description: Capacitor Community Plugins -url: /docs/community/plugins -contributors: - - AntoninBeaufort ---- - -# Capacitor Community Plugins - -The community has built a number of Capacitor plugins to add functionality to your app. - -To install plugins, find the NPM package name, and then follow the [plugin usage guide](/docs/basics/using-plugins) for information -on how to install and configure plugins for each platform. - -Building your own Capacitor plugins is easy! Check out the [Plugin Introduction](/docs/plugins/) to learn how to extend Capacitor -and, optionally, share functionality with other Capacitor developers. - -The Ionic team also offers native plugin support for Enterprises. [Learn more](https://ionicframework.com/enterprise-engine) - -Are we missing your awesome plugin? [Add it to this page](https://github.com/ionic-team/capacitor/edit/master/site/docs-md/community/plugins.md). - -## Authentication - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Single SignOn | `@teamhive/capacitor-single-signon` | | | -| Facebook Login | `@rdlabo/capacitor-facebook-login` | | | -| oAuth2 | `@byteowls/capacitor-oauth2` | | | -| Fingerprint Auth | `capacitor-fingerprint-auth` | | | -| Firebase Auth | `capacitor-firebase-auth` | | | -| Twitter Kit | `capacitor-twitter` | | | -| Google Sign-in | `@codetrix-studio/capacitor-google-auth` | | Works with Firebase. Lightweight | -| Face ID | `capacitor-face-id` | | | -| Biometric AUth | `capacitor-biometric-auth` | | Allow to use Face ID and Touch ID in the same plugin | - -## Deep Links - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Branch Deep Links |`capacitor-branch-deep-links` | | | - -## Display - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Keep Screen On |`capacitor-keep-screen-on` | | | - -## Storage - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Secure Storage Plugin | `capacitor-secure-storage-plugin` | | | -| Data Storage SQLite Plugin | `capacitor-data-storage-sqlite` | | | -| SQLite Database Plugin | `capacitor-sqlite` | | | - -## Video - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| YouTube | `capacitor-youtube-player` | | | -| Twilio iOS | `twilio-ios-capacitor` | | Video calls with Twilio | -| Video Recorder | `@teamhive/capacitor-video-recorder` | | | -| Media Operations | `capacitor-media` | | | -| Camera preview | `capacitor-camera-preview` | | | -| VideoPlayer | `capacitor-video-player` | | | - -## Analytics - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Firebase Analytics | `capacitor-firebase-analytics` | | | -| Firebase Crashlytics | `@rdlabo/capacitor-firebase-crashlytics` | | | - -## Messaging/SMS/Email - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| SMS | `@byteowls/capacitor-sms` | | | -| Email | `@teamhive/capacitor-email` | | | -| SMS | `capacitor-sms` | | | -| Intercom | `capacitor-intercom` | | | - - -## Payments/NFC - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| NFC | `capacitor-nfc` | | Android only | -| Heartland Form | `capacitor-heartland-form` | | | -| Stripe Terminal | `capacitor-stripe-terminal` | | iOS only | - - -## Location - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Fused Location | `@jonoj/capacitor-fused-location` | | | -| Geofence Tracker | `capacitor-geofence-tracker` | | | -| Fancy Geo | `capacitor-fancy-geo` | | | -| [Radar](https://radar.io) | `capacitor-radar` | | | - -## Health - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Google Fit | `capacitor-google-fit` | | Android only (currently) | -| HealthKit | `capacitor-healthkit` | | iOS only | - -## Audio - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Voice Recorder | `capacitor-voice-recorder` | | | - -## Ads - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| AdMob | `capacitor-admob` | | iOS, Android | -| AdMob | `@rdlabo/capacitor-admob` | | | -| AdMob | `capacitor-admob-advanced` | | iOS, Android | - -## Notifications - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Fancy Notifications | `fancy-notifications` | | | -| FCM | `capacitor-fcm` | | | - -## Files/Networking - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Filesharer | `@byteowls/capacitor-filesharer` | | | -| Downloader | `capacitor-downloader` | | | -| Zip | `capacitor-zip` | | | -| UDP | `@unitree-czk/capacitor-udp` | | | -| BlobWriter | `capacitor-blob-writer` | | | - -## Bluetooth - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Bluetooth Low Energy Client | `cap-bluetooth-low-energy-client` | | Web, Android| - -## Sensors - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| SensingKit | `cap-sensing-kit` | | Web, Android| - - -## Date/Calendar - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| DatePicker | `capacitor-datepicker` | | | - -## Images - - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Image Cache | `capacitor-image-cache` | | | -| Image Crop | `capacitor-image-crop` | | | -| Media Operations | `capacitor-media` | | | -| Code Scanner | `@rdlabo/capacitor-codescanner` | | iOS only (currently) | - - -## Printers - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Zebra | `zebra-capacitor` | | | - - -## Misc - -| Name | NPM package | GitHub | Notes | -| ----------------------- | ----------- | ------ | ------ | -| Install Referrer | `capacitor-install-referrer` | | | -| Request app review | `capacitor-rate-app` | | Request app review from users | -| Change Android Navigationbar Color | `capacitor-navigationbar` | | Programmatically change the navigation bar color on android devices | -| Dark Mode | `capacitor-dark-mode` | | | Listen for dark mode change events -| Contacts | `@byrds/capacitor-contacts` | | | diff --git a/site/docs-md/cordova/index.md b/site/docs-md/cordova/index.md deleted file mode 100644 index dd0a7efe8..000000000 --- a/site/docs-md/cordova/index.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Cordova and PhoneGap -description: Cordova and PhoneGap -url: /docs/cordova -contributors: - - dotnetkow ---- - -# Cordova and PhoneGap - -

Apache Cordova (and Adobe PhoneGap), created in 2008, is an open source project that enables web developers to use their HTML, CSS, and JavaScript content to create a native application for a variety of mobile and desktop platforms.

- -

For more details on the history of Cordova and more details on how it works, please see here.

- -## Why Create a New Project? - -The open source space is filled with new projects that build on top of older projects, making tangible improvements that can't be done without radically changing the original product. This is what Capacitor would have required. The Ionic team felt like this wasn't possible with Cordova for technical and political reasons. Whether that is right or wrong, that is the conclusion the team came to. That said, Ionic still uses Cordova heavily and will continue to invest in the platform for a long time to come. - -On the plus side, Ionic now controls almost all of its stack. When you build an Ionic app and use Capacitor, we control the native runtime layer, the UI controls, and the “framework” used to build the controls ([Stencil](https://stenciljs.com/)). The only part we don’t control is the frontend framework you use on top (Angular, React, Vue, or nothing). This is significant: If there’s an issue in any part of the stack that we control, we can fix it right away. Capacitor has already proven to be a worthwhile investment - it’s enabling us to build a stronger Ionic and focus on what we do uniquely well. - -## Differences between Capacitor and Cordova - -In spirit, Capacitor and Cordova are very similar. Both manage a Web View and provide a structured way of exposing native functionality to your web code. However, Capacitor has a few key differences that require web developers, previously used to Cordova's approach, to change app development workflows. - -### Native Project Management - -Capacitor considers each platform project a _source asset_ instead of a _build time asset_. That means you'll check your Xcode and Android Studio projects into source control, as well as use those IDEs when necessary for platform-specific configuration and running/testing. - -This change in approach has a few implications. First, Capacitor does not use `config.xml` or a similar custom configuration for platform settings. Instead, configuration changes are made by editing the appropriate platform-specific configuration files directly, such as `AndroidManifest.xml` for Android and `Info.plist` for Xcode. Capacitor does have some [high level configuration options](/docs/basics/configuring-your-app) that are set in `capacitor.config.json`. These generally don't modify native functionality, but control Capacitor's tooling. - -Additionally, Capacitor does not "run on device" or emulate through the command line. Instead, such operations occur through the platform-specific IDE, which provides a faster, more typical experience that follows the standards of app development for that platform. For example, running iOS apps from the command line is not officially supported by Apple anyway, so Xcode is preferred. - -While these changes may be concerning to long-time Cordova users, there are worthwhile benefits: - - 1. Updating and modifying native projects through abstracted-away tools such as `config.xml` is error prone and a constant moving target. Becoming more comfortable with platform-specific tooling makes troubleshooting issues that much easier. - 2. It's easier to add custom native code that your app needs without having to build a new plugin for it. Additionally, native teams can work alongside web teams on the same project. - 3. Creating more compelling app experiences is now easier since you "own" the native project, such as adding a native UI shell around your web app. - 4. More visibility into native project changes and better app maintainability as new mobile operating system versions are released. When breaking changes to Capacitor are introduced or changes are applied to the native project templates, the team will publish step-by-step upgrade instructions to ensure that the update process is as smooth as possible. - -### Plugin Management - -Capacitor manages plugins in a different way than Cordova. First, Capacitor does not copy plugin source code to your app before building. Instead, all plugins are built as Frameworks (on iOS) and Libraries (on Android) and installed using the leading dependency management tool for each platform (CocoaPods and Gradle/Maven, respectively). Additionally, Capacitor does not modify native source code, so any necessary native project settings must be added manually (for example, permissions in `AndroidManifest.xml`). We think this approach is less error-prone and makes it easier for developers to find help in the community for each specific platform. - -One major difference is the way plugins handle the JavaScript code they need in order to be executed from the WebView. Cordova requires plugins to ship their own JavaScript and manually call `exec()`. Capacitor, in contrast, registers and exports all JavaScript for each plugin based on the methods it detects at runtime, so all plugin methods are available as soon as the WebView loads. One important implication of this: there is no more need for the `deviceready` event. As soon as your app code loads, you can start calling plugin methods. - -While Capacitor doesn't require plugins to provide JavaScript, many plugins will want to have logic in JavaScript. In this case, providing a plugin with extra JavaScript is as easy as shipping a traditional JavaScript library (bundle, module, etc), but instead of calling `exec()` in Cordova, the plugin will reference the Capacitor plugin through `Capacitor.Plugins.MyPlugin`. - -Finally, Capacitor has implications for plugin authors. On iOS, Swift 4 is officially supported and even _preferred_ for building plugins (Objective-C is also supported). Plugins no longer export a `Plugin.xml` file; Capacitor provides a few simple macros on iOS and Annotations on Android for adding metadata to your plugin source code that Capacitor reads at runtime. - -### CLI/Version Management - -Capacitor, unlike Cordova, does not use a global CLI. Instead, the Capacitor "CLI" is installed locally into each project as an npm script. This makes it easier to manage versions of Capacitor across many different apps. - -Thus, instead of running `capacitor` directly from the command line, Capacitor is invoked by calling `npx cap` in the directory of your app. - -## Start the Migration - -Learn more about the [migration process](/docs/cordova/migration-strategy) or [get started migrating](/docs/cordova/migrating-from-cordova-to-capacitor) right away. diff --git a/site/docs-md/cordova/known-incompatible-plugins.md b/site/docs-md/cordova/known-incompatible-plugins.md deleted file mode 100644 index 4ac9dd869..000000000 --- a/site/docs-md/cordova/known-incompatible-plugins.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Known Incompatible Cordova Plugins -description: Known Incompatible Cordova Plugins -url: /docs/cordova/known-incompatible-plugins -contributors: - - dotnetkow ---- - -# Known Incompatible Cordova Plugins - -

While we've tested a number of popular Cordova plugins, it's possible Capacitor doesn't support every Cordova plugin. Some don't work with Capacitor or Capacitor provides a conflicting alternative. If it's known that the plugin is conflicting or causes build issues, it will be skipped when running npx cap update.

- -

If you find an issue with an existing Cordova plugin, please let us know by providing the issue's details and plugin information.

- -## Known incompatible plugins (Subject to change) - -- cordova-plugin-add-swift-support (not needed, Capacitor has built in Swift support) -- cordova-plugin-admobpro ([see details](https://github.com/ionic-team/capacitor/issues/1101)) -- cordova-plugin-braintree ([see details](https://github.com/ionic-team/capacitor/issues/1415)) -- cordova-plugin-compat (not needed) -- cordova-plugin-console (not needed, Capacitor has its own) -- cordova-plugin-crosswalk-webview (Capacitor doesn't allow to change the webview) -- cordova-plugin-fcm ([see details](https://github.com/ionic-team/capacitor/issues/584)) -- cordova-plugin-firebase ([see details](https://github.com/ionic-team/capacitor/issues/815)) -- cordova-plugin-ionic-keyboard (not needed, Capacitor has it's own) -- cordova-plugin-ionic-webview (not needed, Capacitor uses WKWebView) -- cordova-plugin-music-controls (causes build failures, skipped) -- cordova-plugin-qrscanner ([see details](https://github.com/ionic-team/capacitor/issues/1213)) -- cordova-plugin-splashscreen (not needed, Capacitor has its own) -- cordova-plugin-statusbar (not needed, Capacitor has its own) -- cordova-plugin-wkwebview-engine (not needed, Capacitor uses WKWebView) -- cordova-plugin-googlemaps (causes build failures on iOS, skipped for iOS only) \ No newline at end of file diff --git a/site/docs-md/cordova/migrating-from-cordova-to-capacitor.md b/site/docs-md/cordova/migrating-from-cordova-to-capacitor.md deleted file mode 100644 index 360b44c40..000000000 --- a/site/docs-md/cordova/migrating-from-cordova-to-capacitor.md +++ /dev/null @@ -1,176 +0,0 @@ ---- -title: Migrating from Cordova to Capacitor -description: Migrating from Cordova to Capacitor -url: /docs/cordova/migrating-from-cordova-to-capacitor -contributors: - - dotnetkow ---- - -# Migrating a Web App Using Cordova to Capacitor - -

There are several steps required to fully migrate a web app using Cordova over to Capacitor.

- -
-Note that it's recommended to work in a separate code branch when applying these changes. -
- -## Add Capacitor - -Begin by opening your project in a Terminal, then add Capacitor to [a web app](/docs/getting-started) or [an Ionic app](/docs/getting-started/with-ionic). - -Next, open `config.xml` and find the `id` field in the widget element. In this example, it's `io.ionic.myapp`. - -```xml - -``` - -Also find the `Name` of your app: - -```xml -MyApp -``` - -Now, initialize Capacitor with this app information: - -```bash -npx cap init [appName] [appId] -``` - -In this example, it would be `npx cap init MyApp io.ionic.myapp`. These values can be found in the newly created `capacitor.config.json` file. - -### Build your Web App -You must build your web project at least once before adding any native platforms. - -This ensures that the `www` folder that Capacitor has been [automatically configured](/docs/basics/configuring-your-app/) to use as the `webDir` in `capacitor.config.json` actually exists. - -### Add Platforms - -Capacitor native platforms exist in their own top-level folders. Cordova's are located under `platforms/ios` or `platforms/android`. - -```bash -npx cap add ios -npx cap add android -``` - -Both android and ios folders at the root of the project are created. These are entirely separate native project artifacts that should be considered part of your app (i.e., check them into source control, edit them in their own IDEs, etc.). Additionally, any Cordova plugins that were previously added to the project via `npm install` (located under `dependencies` in `package.json`) are automatically installed by Capacitor into each new native project (minus any [incompatible ones](/docs/cordova/known-incompatible-plugins)): - -```json -"dependencies": { - "@ionic-native/camera": "^5.3.0", - "@ionic-native/core": "^5.3.0", - "@ionic-native/file": "^5.3.0", - "cordova-android": "8.0.0", - "cordova-ios": "5.0.0", - "cordova-plugin-camera": "4.0.3", - "cordova-plugin-file": "6.0.1", -} -``` - -## Splash Screens and Icons - -If you've previously created icon and splash screen images, they can be found in the top-level `resources` folder of your project. With those images in place, you can use the `cordova-res` tool to generate icons and splash screens for Capacitor-based iOS and Android projects. - -First, install `cordova-res`: - -```bash -$ npm install -g cordova-res -``` - -Next, run the following to regenerate the images and copy them into the native projects: - -```bash -$ cordova-res ios --skip-config --copy -$ cordova-res android --skip-config --copy -``` - -[Complete details here](https://github.com/ionic-team/cordova-res#capacitor). - -## Migrate Plugins - -Begin by auditing your existing Cordova plugins - it's possible that you may be able to remove ones that are no longer needed. - -Next, review all of Capacitor's [core plugins](/docs/apis) as well as [community plugins](/docs/community/plugins). You may be able to switch to the Capacitor-equivalent Cordova plugin. - -Some plugins may not match functionality entirely, but based on the features you need that may not matter. - -Note that any plugins that are [incompatible or cause build issues](/docs/cordova/known-incompatible-plugins) are automatically skipped. - -### Remove Cordova Plugin - -After replacing a Cordova plugin with a Capacitor one (or simply removing it entirely), uninstall the plugin then run the `sync` command to remove the plugin code from a native project: - -```bash -npm uninstall cordova-plugin-name -npx cap sync [android | ios] -``` - -## Set Permissions - -By default, the entire initial permissions requested for the latest version of Capacitor are set for you in the default native projects for both iOS and Android. However, you may need to apply additional permissions manually by mapping between `plugin.xml` and required settings on iOS and Android. Consult the [iOS](/docs/ios/configuration) and [Android](/docs/android/configuration) configuration guides for info on how to configure each platform. - -## Cordova Plugin preferences - -When `npx cap init` is run, Capacitor reads all the preferences in `config.xml` and port them to `capacitor.config.json` file. You can manually add more preferences to the `cordova.preferences` object too. - -```json -{ - "cordova": { - "preferences": { - "DisableDeploy": "true", - "CameraUsesGeolocation": "true" - } - } -} -``` - - -## Additional Config.xml Fields - -You may be curious about how other elements from `config.xml` work in Capacitor apps. - -The Author element can be configured in `package.json`, but is not used by Capacitor or within your app: - -```xml -Ionic Framework Team -``` - -Most of the `allow-intent` values are either not used or there are [configurable alternatives](/docs/basics/configuring-your-app/) in `capacitor.config.json`. - -```xml - - - - - - -``` - -iOS `edit-config` elements need to be [configured in Info.plist](/docs/ios/configuration). - -```xml - - Used to take photos - -``` - -It's impossible to cover every `config.xml` element available. However, most questions relating to "How do I configure X in Capacitor?" should be thought of as "How do I configure X in [platform] (iOS/Android)?" when searching online for answers. - -## Setting Scheme - -When using Ionic with Cordova, your app uses `cordova-plugin-ionic-webview` by default, which on iOS uses `ionic://` scheme for serving the content. Capacitor apps use `capacitor://` as default scheme on iOS. This means that using a origin-binded Web API like LocalStorage, will result in a loss of data as the origin is different. This can be fixed by changing the scheme that is used for serving the content: - -```json -{ - "server": { - "iosScheme": "ionic" - } -} -``` - -## Removing Cordova - -Once you've tested that all migration changes have been applied and the app is working well, Cordova can be removed from the project. Delete `config.xml` as well as the `platforms` and `plugins` folders. Note that you don't technically have to remove Cordova, since Capacitor works alongside it. In fact, if you plan to continue using Cordova plugins or think you may in the future, you can leave the Cordova assets where they are. - -## Next Steps - -This is just the beginning of your Capacitor journey. Learn more about [using Cordova plugins](/docs/cordova/using-cordova-plugins) in a Capacitor project or more details on the Capacitor [development workflow](/docs/basics/workflow). diff --git a/site/docs-md/cordova/migration-strategy.md b/site/docs-md/cordova/migration-strategy.md deleted file mode 100644 index 6d2f6a1bd..000000000 --- a/site/docs-md/cordova/migration-strategy.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Migrating Strategy -description: Migration Strategy -url: /docs/cordova/migration-strategy -contributors: - - dotnetkow ---- - -# Migration Strategy - -

Migrating from Cordova to Capacitor can occur over time or can be fully replaced in many cases. The effort involved will largely depend on the complexity of the app.

- -## Why Migrate? - -Long-term stability and peace of mind. - -Capacitor is [backed by Ionic](https://ionicframework.com/), a long-term contributor to Cordova and the larger open source ecosystem. Ionic still uses Cordova heavily and will continue to invest in the platform for a long time to come. - -It’s backward-compatible with Cordova, so you can comfortably switch your existing web apps to it whenever you’re ready. Capacitor was designed from the start to support the rich Cordova plugin ecosystem out of the box. Thus, using Cordova plugins in Capacitor is easy. - -## Why Use Ionic with Capacitor? - -Using Ionic and Capacitor together is the way to build the best app experience possible, since Ionic Framework provides UI and UX enhancements that Capacitor does not have. Additionally, it works with your favorite web app framework, including Angular, React, and Vue. - -With the release of Capacitor, Ionic now controls almost all of its stack. When you build an Ionic app today, we now control the native runtime layer (Capacitor), the UI controls ([Ionic Framework](https://ionicframework.com)), and the “framework” used to build the controls (web components powered by [Stencil](https://stenciljs.com/)). This is significant: If there’s an issue in any part of the stack that we control, we can fix it right away. The only part we don’t control is the frontend framework you use on top (Angular, React, Vue, or plain JavaScript). - -Are you using any newer flavors of Ionic, such as `Ionic React` or `Ionic Vue`? Capacitor is the officially supported native runtime. - -### Using Ionic Already? Consider Updating to Ionic 4 - -Capacitor works with any Ionic project (1.0 to 4.x+), but in order to enjoy the best app development experience, Ionic 4 and above is recommended. If you have an existing Ionic 1 to 3 app, begin by following the [Ionic 4 migration guide](https://ionicframework.com/docs/building/migration). If you need further assistance, [Ionic can help.](https://ionicframework.com/enterprise-edition) Advisory Services are available, which includes Ionic 4 training, architecture reviews, and migration assistance. - -## Migration Process Overview - -### Audit Then Migrate Existing Cordova Plugins - -Begin by auditing your existing Cordova plugins - it's possible that you may be able to remove ones that are no longer needed. - -Next, review all of Capacitor's [core plugins](/docs/apis) as well as [community plugins](/docs/community/plugins). You may be able to switch to the Capacitor-equivalent Cordova plugin. - -Some plugins may not match functionality entirely, but based on the features you need that may not matter. - -### Continue to Use Cordova or Ionic Native if Needed - -To leverage Cordova and/or Ionic Native plugins in your Capacitor app, [see here.](/docs/cordova/using-cordova-plugins) If a replacement plugin doesn't exist, continue to use the Cordova plugin as-is. If there's a plugin you'd like to see supported, [please let us know.](https://github.com/ionic-team/capacitor/issues/new) - -Ready to [migrate to Capacitor?](/docs/cordova/migrating-from-cordova-to-capacitor) \ No newline at end of file diff --git a/site/docs-md/cordova/using-cordova-plugins.md b/site/docs-md/cordova/using-cordova-plugins.md deleted file mode 100644 index 879b81bcf..000000000 --- a/site/docs-md/cordova/using-cordova-plugins.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Using Cordova Plugins and Ionic Native -description: Using Cordova Plugins and Ionic Native -url: /docs/cordova/using-cordova-plugins -contributors: - - dotnetkow ---- - -# Using Cordova Plugins and Ionic Native - -

When developing an app that uses Capacitor, it's possible to use both Cordova and Ionic Native plugins.

- -## Installing Cordova Plugins - -Simply install your plugin of choice, sync your project, finish any required native project configuration, and you're ready to go: - -```bash -npm install cordova-plugin-name -npx cap sync -``` - -## Updating Cordova Plugins - -Similar to the installation steps. Simply update the cordova plugin to the latest version then Capacitor will pick up the changes: - -```bash -npm install cordova-plugin-name@latest -npx cap update -``` - -If you don't want to risk to introduce breaking changes, use `npm update cordova-plugin-name` instead of `@latest` as `update` respects semver. - -## Installing Ionic Native Plugins -[Ionic Native](https://ionicframework.com/docs/native) provides TypeScript wrappers and a consistent API and naming convention for easier development with Cordova plugins. It's supported in Capacitor, so whenever you find an Ionic Native wrapper you'd like to use, install the JavaScript code, install the corresponding Cordova plugin, then sync your project: - -```bash -npm install @ionic-native/javascript-package-name -npm install cordova-plugin-name -npx cap sync -``` - -## Updating Ionic Native Plugins - -Similiar to the installation steps. Update the Ionic Native JavaScript library, remove then re-add the Cordova plugin, then update your project: - -```bash -npm install @ionic-native/javascript-package-name@latest -npm install cordova-plugin-name@latest -npx cap update -``` - -If you don't want to risk to introduce breaking changes, use `npm update cordova-plugin-name` instead of `@latest`. - -## Determining Installed Plugin Version - -See the list of Capacitor and Cordova plugins (and their exact version numbers) installed in your project with: - -```bash -npx cap ls -``` - -## Important: Configuration - -Capacitor does not support Cordova install variables, auto configuration, or hooks, due to our philosophy of letting you control your native project source code (meaning things like hooks are unnecessary). If your plugin requires variables or settings to be set, you'll need to apply those configuration settings manually by mapping between the plugin's `plugin.xml` and required settings on iOS and Android. - -Consult the [iOS](/docs/ios/configuration) and [Android](/docs/android/configuration) configuration guides for info on how to configure each platform. - -## Compatibility Issues - -Some Cordova plugins don't work with Capacitor or Capacitor provides a conflicting alternative. [See here](/docs/cordova/known-incompatible-plugins) for details and a known incompatibility list. \ No newline at end of file diff --git a/site/docs-md/electron/index.md b/site/docs-md/electron/index.md deleted file mode 100644 index 5de67f1c1..000000000 --- a/site/docs-md/electron/index.md +++ /dev/null @@ -1,57 +0,0 @@ ---- -title: Building Electron Apps with Capacitor -description: Building Electron Apps with Capacitor -url: /docs/electron -contributors: - - mlynch ---- - -# Building Electron Apps with Capacitor - -

Capacitor has preliminary support for Electron, the popular tool used for building desktop apps with HTML, JavaScript, and CSS.

- -

With Electron, Capacitor apps can run natively on Windows, Mac, and Linux.

- -
Electron support for Capacitor is currently in preview, and lags behind iOS, Android, and Web support.
- -## Getting Started - -After creating a new Capacitor app, add the `electron` platform: - -```bash -npx cap add electron -``` - -This will generate a new Electron project in the `electron/` folder in the root of your app. - -## Preparing your app - -Just like the other Capacitor platforms, the `copy` command must be run periodically to sync web content with Electron: - -```bash -npx cap copy -``` - -Run this after making any modifications to your web app. - -## Running your App - -To run your app, use - -```bash -npx cap open electron -``` - -This will launch an Electron instance running your app. - -## Plugin Support - -Electron supports any plugin with a Web implementation, as well as a few plugins with custom Electron support (such as `Filesystem`). - -We will have more info on building Electron plugins soon. - -## Where to go next - -That's pretty much all you need to know to build an Electron app with Capacitor! - -Follow the [Development Workflow](/docs/basics/workflow) guide to continue building and testing your app. \ No newline at end of file diff --git a/site/docs-md/electron/updating.md b/site/docs-md/electron/updating.md deleted file mode 100644 index 0e85d1243..000000000 --- a/site/docs-md/electron/updating.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Updating Your Capacitor Electron Project -description: Updating Your Capacitor Electron Project -url: /docs/electron/updating -contributors: - - devinshoemaker ---- - -# Updating Your Capacitor Electron Project - -

Occasionally, you'll need to make Capacitor updates to your Electron app, including new ways of interfacing with Capacitor inside of your Electron codebase. - - -## Updating Capacitor Electron Library - -To update the version of @capacitor/electron used in your app, just npm install latest version from inside electron folder: - -```bash -cd electron -npm install @capacitor/electron@latest -``` - -## Updating Electron Project - -To update the base structure of your Electron project, view the [electron-template](https://github.com/ionic-team/capacitor/tree/master/electron-template) project in the Capacitor repo, under the tag corresponding to the latest stable release of Capacitor. The core project is kept simple on purpose: it shouldn't take much time to see what is different from the core project and your project. - -### From 1.0.0 to 1.1.0 - -Recommended changes: - -* Update `index.js` to not use `injectCapacitor` function as it's now deprecated and will be removed on 2.0.0. It also fixes problems when using electron 5. [See example](https://github.com/ionic-team/capacitor/commit/5d244a196e429d19f33bae5fc1fad6f1e9205168#diff-bae4e5cfce4de49634ffd504a19c8311) -* Create a `.gitignore` file inside `electron` folder with [this content](https://github.com/ionic-team/capacitor/blob/7c1cf397ba7e113429ef89da0f198ffc206b69f0/electron-template/gitignore) -* Update `electron-is-dev` dependency to `^1.1.0` as on the [template](https://github.com/ionic-team/capacitor/blob/cf09bb42fe4bf39b3064b7bc38de04e681d6fab3/electron-template/package.json#L10) - -### From <= 1.3.0 to 1.4.0 - -Recommended changes: - -* Update electron to ^7.0.0 -* Update `index.js` file inside `electron` folder to call `configCapacitor(mainWindow);` [like this](https://github.com/ionic-team/capacitor/commit/8952ed1157f1b480ecdd8cca5babcd6604ff3771#diff-0c827191c5f6b198e9b675fc7e4a324fR43) to be able to configure the userAgent from [this feature](https://github.com/ionic-team/capacitor/pull/2140) - -### From <= 1.5.2 to 2.0.0 - -Mandatory change: - -* `injectCapacitor` was deprecated on 1.1.0 and has been removed on 2.0.0, if still using it you have to update `index.js` to remove the usage. [See example](https://github.com/ionic-team/capacitor/commit/5d244a196e429d19f33bae5fc1fad6f1e9205168#diff-bae4e5cfce4de49634ffd504a19c8311) - -Recommended changes: - -* Update electron to ^8.0.0 -* Update `splashScreen.init(false);` in `index.js` to `splashScreen.init();`. \ No newline at end of file diff --git a/site/docs-md/getting-started/dependencies.md b/site/docs-md/getting-started/dependencies.md deleted file mode 100644 index d3c25539a..000000000 --- a/site/docs-md/getting-started/dependencies.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Capacitor Required Dependencies -description: Required Dependencies for different platforms -url: /docs/getting-started/dependencies -contributors: - - mlynch - - dotnetkow ---- - -# Capacitor Required Dependencies - -

Capacitor has a number of dependencies depending on which platforms you're targeting and which operating systems you are developing on.

- -## Requirements - -The base requirements are **[Node v8.6.0](https://nodejs.org) or later**, and **NPM version 5.6.0 or later** (which is usually automatically installed with the required version of Node). - -Capacitor supports [yarn](https://yarnpkg.com) as well. - -For specific platforms, follow each guide below to ensure you have the correct dependencies installed. - -## iOS Development - -For building iOS apps, Capacitor requires a **Mac with Xcode 11 or above**. Or you can use [Ionic Appflow](http://ionicframework.com/appflow) to build for iOS even if you're on Windows. - -Additionally, you'll need to install **[CocoaPods](https://cocoapods.org/)** (`sudo gem install cocoapods`), and install the **Xcode Command Line tools** (either from Xcode, or running `xcode-select --install`). - -As a rule, the latest version of Capacitor always supports at least the last two iOS versions. - -Capacitor 2.0 supports iOS 11+. - -Capacitor uses the WKWebView. - -## Android Development - -Android development requires the **Android SDK** installed with **[Android Studio](https://developer.android.com/studio/index.html)**. Technically, Android Studio isn't required as you can build and run apps using only the Android CLI tools, but it will make building and running your app much easier so we strongly recommend using it. - -Android version support for Capacitor is more complex than iOS. Currently, we are targeting API level 21 or greater, meaning Android 5.0 (Lollipop) or above. [As of May 2019](https://developer.android.com/about/dashboards), this represents over 89% of the Android market. - -Also, Capacitor requires an Android WebView with Chrome version 50 or later. On Android 5 and 6, the Capacitor uses the System WebView. On Android 7+, Google Chrome is used. \ No newline at end of file diff --git a/site/docs-md/getting-started/index.md b/site/docs-md/getting-started/index.md deleted file mode 100644 index 9f93dd4f3..000000000 --- a/site/docs-md/getting-started/index.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Installing Capacitor -description: Installing Capacitor -url: /docs/getting-started -contributors: - - dotnetkow - - jcesarmobile ---- - -# Installing Capacitor - -

There are two ways to start using Capacitor: adding Capacitor to an existing frontend project (recommended), or starting a fresh project. Capacitor was designed primarily to drop-in to existing frontend projects, but comes with a simple starting project structure if you'd like to start fresh.

- -

Capacitor provides a native mobile runtime and API layer for web apps. It does not come with any specific -set of UI controls which you will most likely need unless you're building a game or something similar.

- -

We strongly recommend starting a Capacitor project with your mobile frontend framework of choice (such as Ionic).

- -## Before you start - -Make sure you have all the required [Dependencies](/docs/getting-started/dependencies) installed for the platforms you will be building for. Most importantly, -make sure you update CocoaPods using `pod repo update` before starting a new project, if you plan on building for iOS using a Mac. - -## Adding Capacitor to an existing Ionic App - -[See here.](/docs/getting-started/with-ionic) - -## Adding Capacitor to an existing web app - -Capacitor was designed to drop-in to any existing modern JS web app. A valid `package.json` file and a folder containing all web assets are required to get started. - -To add Capacitor to your web app, run the following commands: - -```bash -cd my-app -npm install --save @capacitor/core @capacitor/cli -``` - -Then, initialize Capacitor with your app information. - -*Note: `npx` is a new utility available in npm 5 or above that executes local binaries/scripts to avoid global installs.* - -```bash -npx cap init -``` - -This command will prompt you to enter the name of your app and the app id (the package name for Android and the bundle identifier for iOS). Use the `--web-dir` flag to set the web assets folder (the default is `www`). - -Next, install any of the desired native platforms: - -```bash -npx cap add android -npx cap add ios -``` - -🎉 Capacitor is now installed in your project. 🎉 - -## Optional: Starting a fresh project - -Capacitor comes with a stock project structure if you'd rather start fresh and plan to add a UI/frontend framework separately. - -To create it, run: - -```bash -npx @capacitor/cli create -``` - -This command will prompt you to enter the name of your app and the app id (the package name for Android and the bundle identifier for iOS). - -This will create a very simple starting app with no UI library. - -## Where to go next - -Make sure you have the [Required Dependencies](/docs/getting-started/dependencies) installed, including [PWA Elements](/docs/pwa-elements), then proceed to the -[Developer Workflow Guide](/docs/basics/workflow) to learn how Capacitor apps are built. diff --git a/site/docs-md/getting-started/with-ionic.md b/site/docs-md/getting-started/with-ionic.md deleted file mode 100644 index 35fac402d..000000000 --- a/site/docs-md/getting-started/with-ionic.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Using Capacitor with Ionic -description: Using Capacitor with Ionic -url: /docs/getting-started/with-ionic -contributors: - - dotnetkow ---- - -# Using Capacitor with Ionic - -## Install Capacitor into an Ionic project -Capacitor is easily installed directly into any Ionic project (1.0-4.x+). - -### New Ionic Project - -```bash -ionic start myApp tabs --capacitor -cd myApp -``` - -### Existing Ionic Project - -```bash -cd myApp -ionic integrations enable capacitor -``` - -### Initialize Capacitor with your app information - -*Note: `npx` is a new utility available in npm 5 or above that executes local binaries/scripts to avoid global installs.* - -```bash -npx cap init [appName] [appId] -``` - -where `appName` is the name of your app, and `appId` is the domain identifier of your app (ex: `com.example.app`). - -*Note: Use the native IDEs to change these properties after initial configuration.* - -### Build your Ionic App - -You must build your Ionic project at least once before adding any native platforms. - -```bash -ionic build -``` - -This creates the `www` folder that Capacitor has been [automatically configured](/docs/basics/configuring-your-app) to use as the `webDir` in `capacitor.config.json`. - -### Add Platforms - -```bash -npx cap add ios -npx cap add android -``` - -Both `android` and `ios` folders at the root of the project are created. These are entirely separate native project artifacts that should be considered part of your Ionic app (i.e., check them into source control, edit them in their own IDEs, etc.). - -### Open IDE to build, run, and deploy - -```bash -npx cap open ios -npx cap open android -``` - -The native iOS and Android projects are opened in their standard IDEs (Xcode and Android Studio, respectively). Use the IDEs to run and deploy your app. - -## Syncing your app with Capacitor - -Every time you perform a build (e.g. `ionic build`) that changes your web directory (default: `www`), you'll need to copy those changes down to your native projects: - -```bash -npx cap copy -``` - -## Using Cordova and Ionic Native Plugins - -Cordova and [Ionic Native](https://ionicframework.com/docs/native/) plugins are supported in Capacitor. See the [Using Cordova Plugins](/docs/cordova/using-cordova-plugins) guide for more information. - -Want to start using Capacitor in an Ionic app immediately? [Check out this guide](/docs/guides/ionic-framework-app). \ No newline at end of file diff --git a/site/docs-md/guides/community.md b/site/docs-md/guides/community.md deleted file mode 100644 index eef4d475f..000000000 --- a/site/docs-md/guides/community.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Community Guides -description: Community Guides -url: /docs/guides/community -contributors: - - dotnetkow ---- - -# Community Guides - -## General - -[How to Build an Ionic Chat App with React and Stream ›](https://levelup.gitconnected.com/how-to-build-an-ionic-chat-app-with-react-and-stream-739b67611280) - -[Capacitor: Five Apps in Five Minutes ›](https://angularfirebase.com/lessons/capacitor-five-apps-in-five-minutes/) - -[Create an Ionic 4 PWA with Capacitor ›](https://blog.jscrambler.com/create-an-ionic-4-pwa-with-capacitor/) - -[Capacitor Workflow for iOS and Android Apps ›](https://www.youtube.com/watch?v=oXbRcpsytGQ) - -[Using the Capacitor in Vue.js app ›](https://akhromieiev.com/tutorials/using-capacitor-in-vue-js-app/) - -## APIs - -[Camera: Building an Ionic Framework Camera App](/docs/guides/ionic-framework-app) - -[Push Notifications: Using Push Notifications with Firebase in an Ionic Angular App](/docs/guides/push-notifications-firebase) - -[Splash Screen: Creating a Dynamic/Adaptable Splash Screen for Capacitor (Android) ›](https://www.joshmorony.com/creating-a-dynamic-universal-splash-screen-for-capacitor-android/) - -[Using the Capacitor Share API in IOS app ›](https://akhromieiev.com/tutorials/using-the-capacitor-share-api-in-ios-app/) - -[Using the Capacitor Browser API to open urls ›](https://akhromieiev.com/tutorials/using-the-capacitor-browser-api-to-open-links/) - -[Network Detection with Capacitor in Ionic project ›](https://akhromieiev.com/tutorials/network-detection-capacitor/) - -## Integrations - -[Using Google Maps and Geolocation in Ionic with Capacitor ›](https://www.joshmorony.com/using-google-maps-and-geolocation-in-ionic-with-capacitor) - -[Create Native HTML5 Games with Phaser and Capacitor ›](https://www.joshmorony.com/create-native-html5-games-with-phaser-and-capacitor) - -[Integrating the Scanbot SDK in a Capacitor App with Ionic ›](https://scanbot.io/blog/capacitor-app/) - -[Music Playback in Capacitor App with Ionic ›](https://enappd.com/blog/play-music-in-ionic-capacitor-apps/112) - -[Facebook Login in Capacitor App with Ionic React ›](https://enappd.com/blog/facebook-login-in-ionic-react-capacitor-apps/118) - -[Google Login in Capacitor Apps with Ionic React ›](https://enappd.com/blog/google-login-in-ionic-react-capacitor-apps/122) - -[Twitter Login in Capacitor Apps with Ionic React ›](https://enappd.com/blog/twitter-login-in-ionic-react-capacitor-app/121) diff --git a/site/docs-md/guides/deep-links.md b/site/docs-md/guides/deep-links.md deleted file mode 100644 index b3bcd605e..000000000 --- a/site/docs-md/guides/deep-links.md +++ /dev/null @@ -1,310 +0,0 @@ ---- -title: Deep Links -description: Implement deep linking functionality in an iOS and Android app -url: /docs/guides/deep-links -contributors: - - dotnetkow - - jaydrogers ---- - -# Deep Linking with Universal and App Links - -**Platforms**: iOS, Android - -Universal links (iOS) and App Links (Android) offer the ability to take users directly to specific content within a native app (commonly known as deep linking). - -When users tap or click on a deep link, the user is sent directly into your app without routing through the device's web browser or website first. If the app isn't installed, then the user is directed to the website. If the user navigates directly to the website, they remain on the website. This makes deep links an excellent feature for cross-platform apps built for the web, iOS, and Android: a seamless mobile experience, with graceful fallback to the website. - -Benefits: -- Secure: Universal/App Links use HTTPS URLs that link to a website domain that you own, ensuring that no other app can use your links. -- Seamless experience: One URL works for both your website and app, ensuring that users can successfully access the content they're looking for without errors. -- Increase Engagement: Links can be opened from email clients, search engine results, and more. - -## Demo Video - -Here's what it looks like in practice. In this example, the user has the native app installed. They tap on app links from an email and are brought directly into the app itself. First, the root link is tapped (https://beerswift.app), which directs the user to the main app page. Next, a deep link is tapped (https://beerswift.app/tabs/tab3) bringing the user to the Tab3 page. - - - -## Prerequisites - -* A pre-configured [Capacitor app](/docs/getting-started). -* For iOS, enrollment in the Apple Developer Program. - -For illustrative purposes, https://beerswift.app will be used as the web app link. - -## Deep Link Routing using the Capacitor App API - -When the native app is opened after a deep link is clicked, the mobile OS doesn't automatically know where to route the user. This must be implemented within the app itself using the Capacitor [App API](/docs/apis/app) on app startup. - -If your website and app paths don't match, you will need to implement more advanced url pattern matching (see [this guide](https://devdactic.com/universal-links-ionic/) for examples). If your mobile app and web app use the same codebase though, this is very straightforward - just redirect to the same URL. The following examples assume this. - -### Angular - -Routing should be implemented in `app.component.ts`. Start by importing `NgZone` and `Router` from Angular, then `App` from Capacitor: - -```typescript -import { Component, NgZone } from '@angular/core'; -import { Router } from '@angular/router'; -import { Plugins } from '@capacitor/core'; -const { App } = Plugins; -``` - -Next, add `Router` and `NgZone` to the constructor: - -```typescript -constructor(private router: Router, private zone: NgZone) { - this.initializeApp(); -} -``` - -Last, listen for the `appUrlOpen` event, and redirect when a deep link is found: - -```typescript -initializeApp() { - App.addListener('appUrlOpen', (data: any) => { - this.zone.run(() => { - // Example url: https://beerswift.app/tabs/tab2 - // slug = /tabs/tab2 - const slug = data.url.split(".app").pop(); - if (slug) { - this.router.navigateByUrl(slug); - } - // If no match, do nothing - let regular routing - // logic take over - }); - }); -} -``` - -### React - -There's a variety of options for React. One approach is to wrap the App API listener functionality in a new component, then add it inside of `App.tsx`. Start by creating `AppUrlListener.tsx` then import the React Router `useHistory` hook as well as the Capacitor App API: - -```typescript -import React, { useEffect } from 'react'; -import { useHistory } from "react-router-dom"; -import { Plugins } from '@capacitor/core'; -const { App: CapApp } = Plugins; -``` - -Next, define the AppUrlListener component, listening for the `appUrlOpen` event then redirecting when a deep link is found: - -```typescript -const AppUrlListener: React.FC = () => { - let history = useHistory(); - useEffect(() => { - CapApp.addListener('appUrlOpen', (data: any) => { - // Example url: https://beerswift.app/tabs/tab2 - // slug = /tabs/tab2 - const slug = data.url.split(".app").pop(); - if (slug) { - history.push(slug); - } - // If no match, do nothing - let regular routing - // logic take over - }); - }, []); - - return null; -}; - -export default AppUrlListener; -``` - -Over in `App.tsx`, import the new component: - -```typescript -import AppUrlListener from './pages/AppUrlListener'; -``` - -Then add it inside of `IonReactRouter` (or wherever your app is bootstrapped, just ensure that the History hook is available): - -```tsx -const App: React.FC = () => { - return ( - - - - - - } /> - - - - ); -}; -``` - -## Creating Site Association Files - -In order for Apple and Google to permit deep links to open your app, a two-way association between your website and app must be created. One file for each must be created and placed within a `.well-known` folder on your website, like so: https://beerswift.app/.well-known/. - -Continue on for iOS and Android configuration details. - -## iOS Configuration - -iOS configuration involves creating a site association file and configuring the native app to recognize the app domain. - -> You must be enrolled in the Apple Developer Program. - -### Create Site Association File - -First, log into the [Apple Developer site](https://developer.apple.com). Navigate to the "Certificates, Identifiers, & Profiles" section and select your app's identifier. Note the Team ID and Bundle ID, and under Capabilities, toggle "Associated Domains" then save: - -![iOS Identifier Config](/assets/img/docs/guides/deep-links/ios-config.png) - -Next, create the site association file (`apple-app-site-association`). - -> Note: Despite being a JSON file, do not save it with a file extension. - -An example of the `apple-app-site-association` file is below. Be sure to replace `TEAMID.BUNDLEID` with your own IDs (example: `8L65AZE66A.com.netkosoft.beerswift`). - -```json -{ - "applinks": { - "apps": [], - "details": [ - { - "appID": "TEAMID.BUNDLEID", - "paths": ["*"] - } - ] - } -} -``` - -Next, upload the file to your web site (hosted on HTTPS), then validate that it's configured correctly using Apple's tool [here](https://search.developer.apple.com/appsearch-validation-tool/). The URL should follow this format: https://beerswift.app/.well-known/apple-app-site-association - -### Add Associated Domain - -The final step is to configure the iOS app to recognize incoming links. Open Xcode, then navigate to Signing & Capabilities. Click "+ Capability", then choose Associated Domains. In the Domains entry that appears, edit it using the format `applinks:yourdomain.com`: - -![Xcode Associated Domain](/assets/img/docs/guides/deep-links/xcode-associated-domain.png) - -## Android Configuration - -Android configuration involves creating a site association file and configuring the native app to recognize app links using an intent filter. - -### Create Site Association File - -The Site Association file requires the SHA256 fingerprint of your Android certificate. - -If you don’t have one, create a certificate: - -```shell -keytool -genkey -v -keystore KEY-NAME.keystore -alias ALIAS -keyalg RSA -keysize 2048 -validity 10000 -``` - -Using your existing (or newly created) Keystore certificate, use the keytool command to list the keystore's details: - -```shell -keytool -list -v -keystore my-release-key.keystore -``` - -The printed output will include the SHA256 fingerprint: - -![Keytool output](/assets/img/docs/guides/deep-links/keystore-sha256.png) - -Next, use Google's [Asset Links tool](https://developers.google.com/digital-asset-links/tools/generator) to create the Site Association file. Fill in the website domain, app package name, and SHA256 fingerprint, then click "Generate statement": - -![Android Identifier Config](/assets/img/docs/guides/deep-links/android-config.png) - -Copy the JSON output into a new local file under `.well-known/assetlinks.json`. - -```json -// assetlinks.json -[ - { - "relation": ["delegate_permission/common.handle_all_urls"], - "target": { - "namespace": "android_app", - "package_name": "com.netkosoft.beerswift", - "sha256_cert_fingerprints": [ - "43:12:D4:27:D7:C4:14..." - ] - } - } -] -``` - -Deploy the file to your website (hosted on HTTPS), then verify it by clicking the "Test statement" button in the Asset Link tool. If it's configured correctly, a Success message will appear: - -> Success! Host [website] grants app deep linking to [app package]. - -### Add Intent Filter - -The final step is to configure the Android app to recognize incoming links. To do so, [add a new Intent Filter](https://developer.android.com/training/app-links/deep-linking#adding-filters) to `AndroidManifest.xml` within the `` element: - -```xml - - - - - - -``` - -The complete Activity should look similar to this: - -```xml - - - - - - - - - - - - - - -``` - -## Details: Website Configuration - -Website configuration will vary based on the tools and backend used. A few suggestions are below. - -### Angular - -Place the association files under `src/.well-known`. Next, configure the build process to deploy these files exactly as-is (ensuring that Apple/Google can read them correctly). Open `angular.json` and under `architect => assets`, add a new entry to the array: - -```json -{ - "glob": "**/*", - "input": "src/.well-known", - "output": ".well-known/" -} -``` - -Build then deploy the site. - -### React - -Place the association files under `public/.well-known`. No additional steps are necessary; simply build then deploy the site. - -### Wordpress - -See [here](https://devdactic.com/universal-links-ionic/) for Wordpress instructions. - - -## Verification - -To verify that the websites and the native apps are configured correctly, the website needs to host the Site Association files but the apps do not need to be in the app stores. - -Connect a device to your computer, build and deploy the native apps, then test by tapping on website links. If the native app opens, all steps have been implemented correctly. - -## Resources - -* Branch.io: [What is Deep Linking?](https://branch.io/what-is-deep-linking/) -* Android: [App Links](https://developer.android.com/training/app-links) -* iOS: [Universal Links](https://developer.apple.com/documentation/uikit/inter-process_communication/allowing_apps_and_websites_to_link_to_your_content) -* iOS: [Enabling Universal Links](https://developer.apple.com/documentation/uikit/inter-process_communication/allowing_apps_and_websites_to_link_to_your_content/enabling_universal_links) diff --git a/site/docs-md/guides/ionic-framework-app.md b/site/docs-md/guides/ionic-framework-app.md deleted file mode 100644 index 097527564..000000000 --- a/site/docs-md/guides/ionic-framework-app.md +++ /dev/null @@ -1,277 +0,0 @@ ---- -title: Building an Ionic Framework Camera App -description: Learn how to add Camera functionality to an Ionic Angular app that works on the web, iOS, and Android -url: /docs/guides/ionic-framework-app -contributors: - - dotnetkow ---- - -# Building an Ionic Framework Camera App - -**Web Framework**: Ionic 4 + Angular -**Platforms**: Web, iOS, Android - -Capacitor makes it easy to build web apps that run natively on iOS, Android, desktop, and the web. In this guide, we'll add Camera functionality to an Ionic Angular app that works on the web, iOS, and Android. Ready to capture photos using just one JavaScript method call? Let's get started. - -## Required Dependencies -Building and deploying iOS and Android apps require additional dependencies, including an iOS and Android device. Please [follow the instructions here](/docs/getting-started/dependencies) before continuing. - -## Prepare an Ionic App -If you have an existing Ionic app, skip this section. If not, let's create an Ionic app first. In a Terminal, install Ionic (this also updates to the latest version of Ionic): - -```bash -npm install -g ionic -``` - -Next, create a new Ionic app based on the "tabs" starter project and install Capacitor too: - -```bash -ionic start capApp tabs --capacitor -``` - -Next, initialize Capacitor with your app information. - -```bash -npx cap init -``` - -**App name:** CapApp -**App Package ID:** com.example.capapp - -## Adding Capacitor: Existing Ionic Project -Capacitor was designed to drop into any existing modern JavaScript web app - Ionic included! If you didn't add the `--capacitor` flag when creating the Ionic project above, or have an existing Ionic project, no problem. Run the following: - -```bash -cd capApp -ionic integrations enable capacitor -``` - -Next, initialize Capacitor with your app information. - -```bash -npx cap init -``` - -**App name:** CapApp -**App Package ID:** com.example.capapp - -## Build the App Once -Before adding any native platforms to this project, the app must be built at least once. A web build creates the web assets directory that Capacitor needs (`www` folder in Ionic projects): - -```bash -ionic build -``` - -Next, add any platforms (besides the web, of course) that you'd like to build for: - -```bash -npx cap add ios -npx cap add android -``` - -Upon running these commands, both `android` and `ios` folders at the root of the project are created. These are entirely separate native project artifacts that should be considered part of your Ionic app (i.e., check them into source control). - -## Adding Camera Functionality -Next up, we'll add the ability to take photos with the device's camera using the Capacitor [Camera API](/docs/apis/camera). - -To begin, open the Tab2 HTML page under the `src/app/tab2` folder. Add an image tag that will display the current photo taken with the camera and add an Ionic fab button that will open the camera when clicked: - -```html - - - - - - - - - -``` - -Next, we need to add the logic that will power the camera functionality. Open `src/app/tab2/tab2.page.ts` and import the Capacitor Plugins and Camera classes: - -```typescript -import { Plugins, CameraResultType, CameraSource } from '@capacitor/core'; -``` - -Next, implement the `takePicture()` method: - -```typescript -export class Tab2Page { - async takePicture() { - const image = await Plugins.Camera.getPhoto({ - quality: 100, - allowEditing: false, - resultType: CameraResultType.DataUrl, - source: CameraSource.Camera - }); - - this.photo = this.sanitizer.bypassSecurityTrustResourceUrl(image && (image.dataUrl)); - } -} -``` - -Notice the magic here: there's no mention of iOS or Android! There's just one method call - `Camera.getPhoto()` - that will open up the device's camera and allow us to take photos. - -Next, we need to tell Angular to trust the dynamic image data. To do this, inject `DomSanitizer` via the Constructor and use `sanitizer.bypassSecurityTrustResourceUrl()` to allow the image data to be displayed in our app: - -```typescript -import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; - -export class Tab2Page { - photo: SafeResourceUrl; - - constructor(private sanitizer: DomSanitizer) { } -} -``` - -Here's the complete Camera implementation: - -```typescript -import { Component } from '@angular/core'; -import { Plugins, CameraResultType, CameraSource } from '@capacitor/core'; -import { DomSanitizer, SafeResourceUrl } from '@angular/platform-browser'; - -@Component({ - selector: 'app-tab2', - templateUrl: 'tab2.page.html', - styleUrls: ['tab2.page.scss'] -}) -export class Tab2Page { - photo: SafeResourceUrl; - - constructor(private sanitizer: DomSanitizer) { } - - async takePicture() { - const image = await Plugins.Camera.getPhoto({ - quality: 100, - allowEditing: false, - resultType: CameraResultType.DataUrl, - source: CameraSource.Camera - }); - - this.photo = this.sanitizer.bypassSecurityTrustResourceUrl(image && (image.dataUrl)); - } -} -``` - -Let's give this a try in the browser: - -```shell -ionic serve -``` - -Open the Developer Tools and select the `Console` tab. Then, navigate over to Tab Two, then click the newly created Camera fab button. An error appears in the Console: - -`ERROR Error: Uncaught (in promise): TypeError: cameraModal.present is not a function` - -Some Capacitor plugins, including the Camera, provide the web-based functionality and UI via the Ionic [PWA Elements library](https://github.com/ionic-team/ionic-pwa-elements). It's a separate dependency, so install it using the Terminal (cancel the `ionic serve` command currently running first): - -```shell -npm install @ionic/pwa-elements -``` - -Import `@ionic/pwa-elements` by editing `src/main.ts`: - -```typescript -import { defineCustomElements } from '@ionic/pwa-elements/loader'; - -// Call the element loader after the platform has been bootstrapped -defineCustomElements(window); -``` - -With that appropriately configured now, re-run `ionic serve` and click the Camera fab button. If your computer has a webcam of any sort, a modal window displays and you can take a photo! - -![Camera API on the web](/assets/img/docs/guides/ionic-framework/camera-web.png) -"I'm pretty handsome." - The Author - -Next up, let's run this app on iOS and Android. - -## iOS -Capacitor iOS apps are configured and managed through Xcode, with dependencies managed by CocoaPods. Before running this app on an iOS device, there's a couple of steps to complete. - -From the Terminal, run the Capacitor `copy` command, which copies all web assets (the Ionic Angular app in this case) into the native iOS project: - -```shell -npx cap copy -``` - -**Note:** After making updates to the native portion of the code (such as adding a new plugin), use the `sync` command: - -```shell -npx cap sync -``` - -Next, run the Capacitor `open` command, which opens the native iOS project in Xcode: - -```shell -npx cap open ios -``` - -Within Xcode, click on `App` in the Project Navigator on the left-hand side, then within the `Signing` section, select your Development Team. - -![Xcode - Selecting Development Team](/assets/img/docs/guides/ionic-framework/xcode-signing.png) - -Next, for the Camera plugin to work, we must configure the "Privacy - Camera Usage" permission. iOS displays a modal dialog automatically after the first time that `Camera.getPhoto()` is called, prompting the user to allow the app to use the Camera. To set this, the `Info.plist` file must be modified ([more details here](/docs/ios/configuration/)). To access it, click "Info," then expand "Custom iOS Target Properties." - -![Xcode Custom iOS Target Properties](/assets/img/docs/guides/ionic-framework/xcode-info-plist.png) - -Each setting in `Info.plist` has a low-level parameter name and a high-level name. By default, the property list editor shows the high-level names, but it's often useful to switch to showing the raw, low-level names. To do this, right-click anywhere in the property list editor and toggle "Show Raw Keys/Values." - -Locate the `NSCameraUsageDescription` Key (or add it) and set the Value to something that describes why the app needs to use the camera, such as "To Take Photos." The Value will be displayed to the app user when the permission prompt opens. - -With permissions in place, we are ready to try out the app on a real device! Connect an iOS device to your Mac computer, then within Xcode click the "Build" button to build, install, and launch the app on your device: - -![Xcode build button](/assets/img/docs/guides/ionic-framework/xcode-build-button.png) - -Upon tapping the Camera button on Tab Two, the permission prompt will display. Tap OK, then take a picture with the Camera. Afterward, the photo shows in the app: - -![iOS Camera permissions](/assets/img/docs/guides/ionic-framework/ios-permissions-photo.png) - -## Android -Capacitor Android apps are configured and managed through Android Studio. Before running this app on an Android device, there's a couple of steps to complete. - -From the Terminal, run the Capacitor `copy` command, which copies all web assets (the Ionic Angular app in this case) into the native Android project: - -```shell -npx cap copy -``` - -**Note:** After making updates to the native portion of the code (such as adding a new plugin), use the `sync` command: - -```shell -npx cap sync -``` - -Next, run the Capacitor `open` command, which opens the native Android project in Android Studio: - -```shell -npx cap open android -``` - -Similar to iOS, we must enable the correct permissions to use the Camera. Configure these in the `AndroidManifest.xml` file. Android Studio will likely open this file automatically, but in case it doesn't, locate it under `android/app/src/main/`. - -![Android Manifest location](/assets/img/docs/guides/ionic-framework/android-manifest.png) - -Scroll to the `Permissions` section and ensure these entries are included: - -```xml - - -``` - -Save the file. With permissions in place, we are ready to try out the app on a real device! Connect an Android device to your computer. Within Android Studio, click the "Run" button, select the attached Android device, then click OK to build, install, and launch the app on your device. - -![Launching app on Android](/assets/img/docs/guides/ionic-framework/android-device.png) - -Once again, upon tapping the Camera button on Tab Two, the permission prompt should be displayed. Tap OK, then take a picture with the Camera. Afterward, the photo should appear in the app. - -![Android Camera permissions](/assets/img/docs/guides/ionic-framework/android-permissions-photo.png) - -## What's Next? - -We created a cross-platform Ionic Angular app that runs on the web, Android, and iOS. Using the Capacitor Camera API, we added the ability to use the device's camera with just a few lines of code. - -What's next? Try adding another API, such as [Toasts](/docs/apis/toast) or [Push Notifications](/docs/apis/push-notifications). Looking to create custom native functionality? Create a [Capacitor plugin](/docs/plugins/). This is just the beginning of your Capacitor journey. - -Happy app building! \ No newline at end of file diff --git a/site/docs-md/guides/push-notifications-firebase.md b/site/docs-md/guides/push-notifications-firebase.md deleted file mode 100644 index 29b444dae..000000000 --- a/site/docs-md/guides/push-notifications-firebase.md +++ /dev/null @@ -1,451 +0,0 @@ ---- -title: Push Notifications with Firebase in an Ionic/Angular App -description: Learn how to get Firebase Cloud Messaging working on iOS and Android in an Ionic app -url: /docs/guides/push-notifications-firebase -contributors: - - bryplano - - javebratt ---- - -# Using Push Notifications with Firebase in an Ionic + Angular App - -**Web Framework**: Angular -**Platforms**: iOS, Android - -One of the most common features provided by application developers to their users is push notifications. In this tutorial, we'll walk through all the steps needed to get [Firebase Cloud Messaging](https://firebase.google.com/docs/cloud-messaging) working on iOS and Android. - -For the purposes of registering and monitoring for push notifications from Firebase, we'll make use of the [Push Notification API for Capacitor](https://capacitor.ionicframework.com/docs/apis/push-notifications/) in an Ionic + Angular application. - -## Required Dependencies - -Building and deploying iOS and Android applications using Capacitor requires a bit of setup. Please [follow the instructions to install the necessary Capacitor dependencies here](/docs/getting-started/dependencies) before continuing. - -To test push notifications on iOS, Apple requires that you have [a paid Apple Developer account](https://developer.apple.com/) and a *physical* iOS device. - -If you are running into issues or your console throws warnings about outdated or deprecated packages, make sure that you're on the latest stable versions of Node, Android Studio, and Xcode. - -Also, we're using Firebase for push notifications, so if you're using other Cordova plugins that use the Firebase SDK make sure they're using the latest versions. - -## Prepare an Ionic Capacitor App - -If you have an existing Ionic app, skip this section. If not, let's create an Ionic app first. - -In your preferred terminal, install the latest version of the Ionic CLI: - -```bash -npm install -g @ionic/cli -``` - -Next, let's use the CLI to create a new Ionic Angular app based on the **blank** starter project and call it **capApp**: - -```bash -ionic start capApp blank --type=angular -``` - -On the prompt asking to integrate your new app with Capacitor, type `y` and press enter. That will add Capacitor and the Capacitor CLI to our new application. - -Once the application has been created successfully, switch to the newly created project directory: - -```bash -cd capApp/ -``` - -Finish up by running `npx cap init`, which will allow us to fill out our app information. - -```bash -npx cap init -? App name: CapApp -? App Package ID: com.mydomain.myappname -``` - -## Building the App & Adding Platforms -Before adding any native platforms to this project, the app must be built at least once. A web build creates the web assets directory that Capacitor needs (`www` folder in Ionic Angular projects). - -```bash -ionic build -``` - -Next, let's add the iOS and Android platforms to our app. - -```bash -npx cap add ios -npx cap add android -``` - -Upon running these commands, both `android` and `ios` folders at the root of the project are created. These are entirely separate native project artifacts that should be considered part of your Ionic app (i.e., check them into source control). - -## Using the Capacitor Push Notification API - -Before we get to Firebase, we'll need to ensure that our application can register for push notifications by making use of the Capacitor Push Notification API. We'll also add an `alert` (you could use `console.log` statements instead) to show us the payload for a notification when it arrives and the app is open on our device. - -In your app, head to the `home.page.ts` file and add an `import` statement and a `const` to make use of the Capacitor Push API: - -```typescript -import { - Plugins, - PushNotification, - PushNotificationToken, - PushNotificationActionPerformed } from '@capacitor/core'; - -const { PushNotifications } = Plugins; -``` - -Then, add the `ngOnInit()` method with some API methods to register and monitor for push notifications. We will also add an `alert()` a few of the events to monitor what is happening: - -```typescript -export class HomePage implements OnInit { - -ngOnInit() { - console.log('Initializing HomePage'); - - // Request permission to use push notifications - // iOS will prompt user and return if they granted permission or not - // Android will just grant without prompting - PushNotifications.requestPermission().then( result => { - if (result.granted) { - // Register with Apple / Google to receive push via APNS/FCM - PushNotifications.register(); - } else { - // Show some error - } - }); - - // On success, we should be able to receive notifications - PushNotifications.addListener('registration', - (token: PushNotificationToken) => { - alert('Push registration success, token: ' + token.value); - } - ); - - // Some issue with our setup and push will not work - PushNotifications.addListener('registrationError', - (error: any) => { - alert('Error on registration: ' + JSON.stringify(error)); - } - ); - - // Show us the notification payload if the app is open on our device - PushNotifications.addListener('pushNotificationReceived', - (notification: PushNotification) => { - alert('Push received: ' + JSON.stringify(notification)); - } - ); - - // Method called when tapping on a notification - PushNotifications.addListener('pushNotificationActionPerformed', - (notification: PushNotificationActionPerformed) => { - alert('Push action performed: ' + JSON.stringify(notification)); - } - ); -} -``` - -Here is the full implementation of `home.page.ts`: - -```typescript -import { Component, OnInit } from '@angular/core'; - -import { - Plugins, - PushNotification, - PushNotificationToken, - PushNotificationActionPerformed } from '@capacitor/core'; - -const { PushNotifications } = Plugins; - -@Component({ - selector: 'app-home', - templateUrl: 'home.page.html', - styleUrls: ['home.page.scss'], -}) - -export class HomePage implements OnInit { - - ngOnInit() { - console.log('Initializing HomePage'); - - // Request permission to use push notifications - // iOS will prompt user and return if they granted permission or not - // Android will just grant without prompting - PushNotifications.requestPermission().then( result => { - if (result.granted) { - // Register with Apple / Google to receive push via APNS/FCM - PushNotifications.register(); - } else { - // Show some error - } - }); - - PushNotifications.addListener('registration', - (token: PushNotificationToken) => { - alert('Push registration success, token: ' + token.value); - } - ); - - PushNotifications.addListener('registrationError', - (error: any) => { - alert('Error on registration: ' + JSON.stringify(error)); - } - ); - - PushNotifications.addListener('pushNotificationReceived', - (notification: PushNotification) => { - alert('Push received: ' + JSON.stringify(notification)); - } - ); - - PushNotifications.addListener('pushNotificationActionPerformed', - (notification: PushNotificationActionPerformed) => { - alert('Push action performed: ' + JSON.stringify(notification)); - } - ); - } -} -``` - -After this, you'll want to generate a new build and let Capacitor know about the changes. You can do that with: - -```bash -ionic build -npx cap copy -``` - -## Creating a Project for your App on Firebase - -Before we can connect Firebase Cloud Messaging to your application and send push notifications, you'll need to start a project in Firebase. - -Go to the [Firebase Console](https://console.firebase.google.com/) and click the **Add project** button. - -Name the project, accept the Firebase ToS and click **Create project** to continue. A Project ID should be automatically generated for you. - -## Android - -### Integrating Firebase with the Android app - -This section more-or-less mirrors the [setting up Firebase using the Firebase console documentation](https://firebase.google.com/docs/android/setup?authuser=0). See below for specific Capacitor-related notes. - -Go to the Project Overview page for your Firebase project and at the top, click on the **Android** icon to add a new android application. - -![Add new Android Application in Firebase Console](/assets/img/docs/guides/firebase-push-notifications/add-android-app.png) - -The next screen will ask you for some information about your application. - -- Your **Android package name** should match the **appId** from your `capacitor.config.json` file -- We used `com.mydomain.myappname` for this Capacitor app ID, so that is what we'll use for this entry. -- Nickname and Debug Signing Certificate are optional - -Then click the **Register app** button. - -### Download and Use the `google-services.json` file - -The next prompt will ask you to download a `google-services.json` file. This file contains the information your Capacitor app needs to connect to Firebase from Android. - -Download the `google-services.json` file to your local machine. Then move the file into your Capacitor Android project directory, specifically under `android/app/`. - -![Google Services JSON Location for Android](/assets/img/docs/guides/firebase-push-notifications/google-services-location-android.png) - -We don't need to *add* any dependencies to our project because Capacitor projects automatically include a version of `firebase-messaging` in it's `build.gradle` file. - -## iOS - -### Prerequisites - -iOS push notifications are significantly more complicated to set up than Android. You must have a [paid Apple Developer account](https://developer.apple.com/) *and* take care of the following items prior to being able to test push notifications with your iOS application: - -1. [Setup the proper Development or Production certificates & provisioning profiles](https://help.apple.com/xcode/mac/current/#/dev60b6fbbc7) for your iOS application in the Apple Developer Portal -2. [Create an APNS certificate or key](https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_certificate-based_connection_to_apns) for either Development or Production in the Apple Developer Portal -3. [Ensure Push Notification capabilities have been enabled](https://help.apple.com/xcode/mac/current/#/dev88ff319e7) in your application in Xcode -4. Have a physical iOS device as per the guidelines in the [Dependencies](/docs/getting-started/dependencies) documentation - -### Integrating Firebase with our native iOS app - -This part is very similar to the Android section above, with a few key differences. - -First, go to the **Project Overview** page for your Firebase project. If you've been following this guide, you'll already have an Android application listed at the top of the page. - -To add iOS to your Firebase project, click the **Add App** button and select the **iOS** platform. - -The next screen will ask you for some information about your application. - -- Your **iOS bundle ID** should match the **appId** from your `capacitor.config.json` file -- We used `com.mydomain.myappname` for this Capacitor app ID, so that is what we'll use for this entry. -- App Nickname and App Store ID are optional - -Then click the **Register app** button. - -### Add the `GoogleService-Info.plist` file to your iOS app - -*Note: This is **not** the same file used for your Android app.* - -Download the `GoogleService-Info.plist` provided to your local machine. - -You'll then want to open Xcode... - -```bash -npx cap open ios -``` - -... and move the `.plist` file into your Xcode project as instructed by Firebase, ensuring to add it to all targets. - -![Google Service Info Plist Location for iOS](/assets/img/docs/guides/firebase-push-notifications/google-plist-location-ios.png) - -### Add the Firebase SDK via CocoaPods - -The Push Notification API on iOS makes use of CocoaPods - an iOS dependency management system - and we need to tell CocoaPods to make use of Firebase. - -To do this, we need to modify the `Podfile`, which can be found in Xcode under `Pods`: - -![Podfile Location iOS](/assets/img/docs/guides/firebase-push-notifications/podfile-location-ios.png) - -We need to add Firebase to the CocoaPods provided for our App target. To do that, add `pod Firebase/Messaging` to your `target 'App'` section, like so: - -```ruby -target 'App' do -capacitor_pods -# Add your Pods here -pod 'Firebase/Messaging' # Add this line -end -``` - -Your `Podfile` should look something like this: - -```ruby -platform :ios, '11.0' -use_frameworks! - -# workaround to avoid Xcode caching of Pods that requires -# Product -> Clean Build Folder after new Cordova plugins installed -# Requires CocoaPods 1.6 or newer -install! 'cocoapods', :disable_input_output_paths => true - -def capacitor_pods - # Automatic Capacitor Pod dependencies, do not delete - pod 'Capacitor', :path => '../../node_modules/@capacitor/ios' - pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios' - - # Do not delete -end - -target 'App' do - capacitor_pods - # Add your Pods here - pod 'Firebase/Messaging' -end -``` - -### Update the Project - -Now we'll need to ensure that our iOS project is updated with the proper Firebase CocoaPod installed. - -*Note: This part can take a while as CocoaPods needs to download all the appropriate files/dependencies.* - -```bash -npx cap update ios -``` - -### Add Initialization Code - -To connect to Firebase when your iOS app starts up, you need to add the following to your `AppDelegate.swift` file. - -First, add an `import` at the top of the file: - -```swift -import Firebase -``` - -... and then add the configuration method for Firebase to initialization code to your `AppDelegate.swift` file, in the `application(didFinishLaunchingWithOptions)` method. - -```swift -FirebaseApp.configure() -``` - -Your completed `AppDelegate.swift` file should look something like this: - -```swift -import UIKit -import Capacitor -import Firebase - -@UIApplicationMain -class AppDelegate: UIResponder, UIApplicationDelegate { - - var window: UIWindow? - - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - // Override point for customization after application launch. - FirebaseApp.configure() - return true - } -``` - -If you would like to receive the firebase FCM token from iOS instead of the raw APNS token, you will need to also change your `AppDelegate.didRegisterForRemoteNotificationsWithDeviceToken` code to look like this: - -```swift - func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { - Messaging.messaging().apnsToken = deviceToken - InstanceID.instanceID().instanceID { (result, error) in - if let error = error { - NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidFailToRegisterForRemoteNotificationsWithError.name()), object: error) - } else if let result = result { - NotificationCenter.default.post(name: Notification.Name(CAPNotifications.DidRegisterForRemoteNotificationsWithDeviceToken.name()), object: result.token) - } - } - } -``` - -### Upload the APNS Certificate or Key to Firebase - -If you followed the instructions from the beginning, you'll have created an Apple APNS Certificate or an APNS Auth Key in the Apple Developer portal. You need to upload one of these to Firebase before Firebase can talk to APNS and send push notifications to your application. - -To upload your certificate or auth key, from the **Project Overview** page: - -1. Click on your iOS application and then the **Settings** gear icon. -2. On the Settings page, click on the **Cloud Messaging** tab. -3. Under the **iOS app configuration** header, upload your Auth Key or Certificate(s) using the provided **Upload** button. - -## Sending a Test Notification - -Now for the fun part - let's verify that push notifications from Firebase are working on Android and iOS! - -We need to fire up our application on Android or iOS so that our `home.page.ts` page can register and receive notifications. - -To open your Android project in Android Studio: - -```bash -npx cap open android -``` - -To open your iOS project in Xcode: - -```bash -npx cap open ios -``` - -Once the project is open, side-load the application on your device using the Run feature of either Android Studio or Xcode. The app should start up on the home page. - -*Note: On iOS, you will see a popup asking you to allow notifications for your app - make sure you choose to **Allow notifications**!* - -If your app successfully registers and you followed the code above, you should see an alert with a success message! - -Now we'll test to see if the notifications are received by our device. To send a notification, in Firebase, go to the **Cloud Messaging** section under the Grow header in the project pane. - -Next, select the **New Notification** button. - -When creating the notification, you only need to specify the following information: - -1. The text of the notification -2. The title (Android only, optional for iOS) -3. The Target (either a user segment or topic; I recommend just targeting the iOS or Android app itself, see below) - -![Change Push Target Firebase](/assets/img/docs/guides/firebase-push-notifications/change-push-target-firebase.png) - -4. The Scheduling (leave this to "Now") - -At that point, you can **Review** the notification you've put together and select **Publish** to send the notification out. - -If you've setup your application correctly, you'll see an alert pop up on your home screen with the push notification you composed in Firebase. You can then tap on the notification and you should get an `alert` for the `pushActionPerformed` event, per our code above. - -![Push Test Android](/assets/img/docs/guides/firebase-push-notifications/push-test-android.png) - -![Push Test iOS](/assets/img/docs/guides/firebase-push-notifications/push-test-ios.png) diff --git a/site/docs-md/guides/splash-screens-icons.md b/site/docs-md/guides/splash-screens-icons.md deleted file mode 100644 index 7817e4b5d..000000000 --- a/site/docs-md/guides/splash-screens-icons.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Creating Splash Screens and Icons -description: Use cordova-res to generate resource images for native projects -url: /docs/guides/splash-screens-and-icons -contributors: - - dotnetkow ---- - -# Creating Splash Screens and Icons - -Initial support for splash screen and icon generation is now available. For complete details, see the [cordova-res docs](https://github.com/ionic-team/cordova-res). - -First, install `cordova-res`: - -```bash -$ npm install -g cordova-res -``` - -`cordova-res` expects a Cordova-like structure: place one icon and one splash screen file in a top-level `resources` folder within your project, like so: - -``` -resources/ -├── icon.png -└── splash.png -``` - -Next, run the following to generate all images then copy them into the native projects: - -```bash -$ cordova-res ios --skip-config --copy -$ cordova-res android --skip-config --copy -``` diff --git a/site/docs-md/index.md b/site/docs-md/index.md deleted file mode 100644 index 0e21dc150..000000000 --- a/site/docs-md/index.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Capacitor - A Cross-platform App Runtime -description: A cross-platform app runtime for building Native Progressive Web Apps for iOS, Android, and beyond -url: /docs/ -contributors: - - mlynch - - bensperry - - jcesarmobile - - dotnetkow ---- - -# Capacitor: A Cross-platform App Runtime - -

Capacitor is a cross-platform app runtime that makes it easy to build web apps that run natively on iOS, Android, and the web. We call these apps "Native Progressive Web Apps" and they represent the next evolution beyond Hybrid apps.

- - - -## Introduction - -Capacitor provides a consistent, web-focused set of APIs that enable an app to stay as close to web-standards as possible, while accessing rich native device features on platforms that support them. Adding native functionality is easy with a simple Plugin API for Swift on iOS, Java on Android, and JavaScript for the web. - -Capacitor is a spiritual successor to [Apache Cordova](https://cordova.apache.org/) and [Adobe PhoneGap](https://phonegap.com/), with inspiration from other popular cross-platform tools like [React Native](http://facebook.github.io/react-native/) and [Turbolinks](https://github.com/turbolinks/turbolinks), but focused entirely on enabling modern web apps to run on all major platforms with ease. Capacitor has backwards-compatible support for many existing [Cordova plugins](https://cordova.apache.org/plugins/). - -## Get Started - -Getting started with Capacitor is easy! Capacitor can be used as a drop in to any existing modern JavaScript project, or used to create a fresh Capacitor project from scratch. - -Follow the Installation guide to get started building your app. diff --git a/site/docs-md/ios/configuration.md b/site/docs-md/ios/configuration.md deleted file mode 100644 index 83e349c1d..000000000 --- a/site/docs-md/ios/configuration.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Configuring iOS -description: Configuring iOS -url: /docs/ios/configuration -contributors: - - dotnetkow - - mlynch ---- - -# Configuring iOS - -## Configuring `Info.plist` - -iOS developers should get used to working with the `Info.plist` file, the main configuration file for their app. This file will be updated frequently with new settings that a Capacitor Plugin might require, additional configuration for your app, and for permissions your app will ask for. - -In general, the easiest way to modify this file is to open your project in Xcode (`npx cap open ios`), and edit the file in Xcode's property list editor. Each settings in `Info.plist` has a low-level parameter name, and a high level name. By default, the property list editor shows the high level names, but it's often useful to switch to showing the raw, low level names. To do this, right click anywhere in the property list editor and toggle "Show Raw Keys/Values." - -Underneath the hood, `Info.plist` is actually a plain XML file and can be edited directly if you desire. In this case, make sure to use the low-level parameter name for the XML `` values in `Info.plist`. - -Some plugins and SDKs will show settings using the low-level key, and others will use the high level key. Get used to mapping between them. - -This list of [Cocoa Keys](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html) shows many possible configuration options that can be set in `Info.plist`. - -## Managing Permissions - -Unlike Android, permissions for iOS do not have to be specified in advance. Instead, they are prompted for when using a certain Plugin or SDK. - -However, many iOS permissions require what are known as "Usage Descriptions" defined in `Info.plist`. These settings are human-readable descriptions of each permission the app will ask for. - -Consult the [Cocoa Keys](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html) list for keys containing `UsageDescription` to see the various usage description settings that may be required for your app. - -For more information, Apple has provided a guide to [Resolving the Privacy-Sensitive Data App Rejection](https://developer.apple.com/library/content/qa/qa1937/_index.html) which contains more information on APIs that require usage descriptions. - -## Setting Entitlements - -Entitlements are used to enable key features that your app may need. - -Unlike certain configuration options or usage descriptions, entitlements are configured in a special area inside of Xcode, rather than in `Info.plist`. - -If a plugin requires certain entitlements, open your app in Xcode, click on the name of your project in the left project menu, and select `Capabilities` in the tab bar. - -## Renaming the application's default `App` name - -You can't rename the App folder, but you can set the name of your app by renaming the "target" called "App". - -In XCode you will see something like this: -``` -PROJECT - App -------- -TARGET - App -``` -Here you can click on the name "App" under TARGET to rename your app. - -You then also have to modify the Podfile to rename the current target accordingly: - -The default Podfile has an `'App'` target, which needs to be replaced by your new name here: -https://github.com/ionic-team/capacitor/blob/master/ios-template/App/Podfile#L16 diff --git a/site/docs-md/ios/custom-code.md b/site/docs-md/ios/custom-code.md deleted file mode 100644 index 15ae401e6..000000000 --- a/site/docs-md/ios/custom-code.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Custom Native iOS Code -description: Custom Native iOS Code -url: /docs/ios/custom-code -contributors: - - dotnetkow - - mlynch ---- - -# Custom Native iOS Code - -

Many apps will want to add custom Swift (or Objective-C) code to implement native features, without the overhead of building and publishing a proper Capacitor plugin.

- -

We strongly recommend using Swift to build plugins, as the iOS ecosystem has embraced Swift and you'll be able to find help and developers more easily, but Objective-C works just as well.

- -

There are two ways to add custom code depending on whether or not you need to access that code from the WebView:

- - -## WebView Accessible Native Code - -The easiest way to build custom native code that needs to be accessible in the WebView is to build -a local Capacitor plugin for it. In this case, building the plugin is as simple as building a new class -and registering it with Capacitor. - -`MyPlugin.swift` - -```swift -import Capacitor - -@objc(MyPlugin) -public class MyPlugin: CAPPlugin { - @objc func echo(_ call: CAPPluginCall) { - let value = call.getString("value") ?? "" - call.success([ - "value": value - ]) - } -} -``` - -The `@objc` decorators are required to make sure Capacitor's runtime (which must use Obj-C for dynamic plugin support) can see it. - -Next, you'll need to create a new Objective-C file (with a `.m` extension, _not_ `.h`!) corresponding to your plugin (such as `MyPlugin.m`). Important: you _must_ use the New File dialog in Xcode to do this. You'll then be prompted by Xcode to create a Bridging Header, which you should do. - -Finally, register the plugin by adding the required Capacitor plugin macros into your new `.m` file: - -```objectivec -#import - -CAP_PLUGIN(MyPlugin, "MyPlugin", - CAP_PLUGIN_METHOD(echo, CAPPluginReturnPromise); -) -``` - -This makes `MyPlugin`, and the `echo` method available to the Capacitor web runtime like this: - -```javascript -import { Plugins } from "@capacitor/core" -const { MyPlugin } = Plugins - -const result = await MyPlugin.echo({ value: "Hello World!" }) -console.log(result.value) -``` - -## Private Native Code - -If your code doesn't need to be accessible from the WebView, then simply add your code anywhere it needs to go. With Capacitor, you have full -control over your native project. - -Need to add a new event handler in `AppDelegate`? Just add it! Capacitor won't touch your code. diff --git a/site/docs-md/ios/index.md b/site/docs-md/ios/index.md deleted file mode 100644 index 280a8ee88..000000000 --- a/site/docs-md/ios/index.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Capacitor iOS Documentation -description: Communicate between JavaScript and Native Swift or Objective-C code -url: /docs/ios -contributors: - - dotnetkow - - mlynch ---- - -# Capacitor iOS Documentation - -

Capacitor features a native iOS bridge that enables developers to communicate between JavaScript and Native Swift or Objective-C code.

- -

Capacitor iOS apps are configured and managed through Xcode, with dependencies managed by CocoaPods.

- -## Getting Started - -Building iOS apps requires some iOS development dependencies to be installed, including Xcode 11 and the Xcode command line tools. - -Note: It's possible to develop and build iOS apps without a mac, such as by using Ionic Appflow's Package service. Consult your service of choice for more information. - -### Creating iOS App - -By default, an iOS project is created for every Capacitor project. If you are adding Capacitor to an existing -project, you can manually add the iOS project using - -```bash -npx cap add ios -npx cap sync -``` - -The `sync` command updates dependencies, and copies any web assets to your project. You can also run - -```bash -npx cap copy -``` - -To copy web assets only, which is faster if you know you don't need to update native dependencies. - -### Opening iOS Project - -To open the project in Xcode, run - -```bash -npx cap open ios -``` - -### Running Your App - -Once Xcode is open, just click the Play button to run your app on a Simulator or Device. - -![Running your app](/assets/img/docs/ios/running.png) - -## Next steps - -If your app ran you are now ready to continue developing and building your app. Use the various APIs available, Capacitor or Cordova plugins, or custom native code to build out the rest of your app. - -## Further Reading - -Follow these guides for more information on each topic: - -[Configuring and setting permissions for iOS ›](/docs/ios/configuration) - -[Building Native Plugins for iOS ›](/docs/plugins) diff --git a/site/docs-md/ios/managing-dependencies.md b/site/docs-md/ios/managing-dependencies.md deleted file mode 100644 index cfe9d0917..000000000 --- a/site/docs-md/ios/managing-dependencies.md +++ /dev/null @@ -1,3 +0,0 @@ -# Managing iOS Dependencies in Capacitor - -Coming soon. \ No newline at end of file diff --git a/site/docs-md/ios/troubleshooting.md b/site/docs-md/ios/troubleshooting.md deleted file mode 100644 index 01b3fc065..000000000 --- a/site/docs-md/ios/troubleshooting.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: iOS Troubleshooting Guide -description: iOS Troubleshooting Guide -url: /docs/ios/troubleshooting -contributors: - - dotnetkow - - mlynch ---- - -# iOS Troubleshooting Guide - -

Creating a 100% perfect native management tool is nearly impossible, and sooner or later you'll run into various issues with some part of the iOS workflow.

- -

This guide attempts to document common iOS/Xcode issues with possible solutions.

- -## iOS Toolbox - -Every iOS developer learns a few common techniques for debugging iOS issues, and you should incorporate these into your workflow: - -### Google, Google, Google - -Any time you encounter an issue with iOS, or Xcode, your first step should be to copy and paste the error into a Google search. - -Capacitor uses the standard iOS toolchain, so chances are if you run into something, many iOS developers have as well, and there's a solution out there. - -It could be as simple as updating a dependency, running clean, or removing Derived Data - -### Clean/Rebuild - -Cleaning and rebuilding can fix a number of build issues. Navigate to Product -> Clean in the Xcode menu to clean your current build. - -### Removing Derived Data - -Sometimes, Xcode clings to old, outdated build artifacts. To start fresh, you'll need to delete any Derived Data on disk. - -To do this, open Xcode Preferences, choose the Locations tab, and click the small arrow next to your Derived Data path: - -![Locations](/assets/img/docs/ios/location-prefs.png) - -This opens a Finder window to the location of Xcode's temporary Derived Data. - -Next, select all items in that directory and delete: - -![Deleting Derived Data](/assets/img/docs/ios/deleting-derived-data.png) - -Finally, do a rebuild in Xcode. - -## Error: Unable to export required Bridge JavaScript - -![Can't export](/assets/img/docs/ios/export-bridge.png) - -This error occurs when Capacitor's `native-bridge.js` file was not copied to the native project. - -The fix is simple: run `npx cap copy ios` to copy this file. - -## Error: Sandbox not in sync with the Podfile.lock - -This error can happen if CocoaPods hasn't been able to run to install your dependencies. - -Run - -```bash -npx cap update ios -``` - -To update your pods. Perform a new build after running this command. - -## Indexing FOREVER - -Xcode sometimes gets stuck indexing forever. This unfortunate situation looks like this: - -![Xcode indexing](/assets/img/docs/ios/indexing.png) - -The only solution is to Force Close Xcode (using Activity Monitor) and start it up again. - -## CocoaPods: Failed to connect to GitHub - -This error can happen on Mac's with an old version of openssl and ruby installed, since GitHub -restricted the allowed cryptographic protocols when accessing repos. - -The solution is to update openssl and update Ruby: - -```bash -brew install openssl -brew upgrade openssl -brew install ruby -brew link --overwrite ruby -``` - -Finally, make sure your `PATH` environment variable does not put `/usr/local/bin` after `$PATH`, but rather _before_ it. - -See [this StackOverflow issue](https://stackoverflow.com/questions/38993527/cocoapods-failed-to-connect-to-github-to-update-the-cocoapods-specs-specs-repo/48996424#48996424) for other possible solutions to this problem. diff --git a/site/docs-md/ios/updating.md b/site/docs-md/ios/updating.md deleted file mode 100644 index 117159562..000000000 --- a/site/docs-md/ios/updating.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Updating Your Capacitor iOS Project -description: Updating Your Capacitor iOS Project -url: /docs/ios/updating -contributors: - - mlynch ---- - -# Updating Your Capacitor iOS Project - -

Occasionally, you'll need to make Capacitor updates to your iOS app, including updating the version of Capacitor used in your app, or using new ways of interfacing with Capacitor inside of your iOS codebase (for example, with new iOS API changes).

- -## Updating Capacitor iOS Library - -To update the version of @capacitor/ios used in your app, just npm install latest version: - -```bash -npm install @capacitor/ios@latest -``` - -Then sync the native project - -```bash -npx cap sync ios -``` - -## Updating iOS Project - -To update the base structure of your Xcode project, view the [ios-template](https://github.com/ionic-team/capacitor/tree/master/ios-template) project in the Capacitor repo, under the tag corresponding to the latest stable release of Capacitor. The core project is kept simple on purpose: it shouldn't take much time to see what is different from the core project and your project. - -In particular, [AppDelegate.swift](https://github.com/ionic-team/capacitor/blob/master/ios-template/App/App/AppDelegate.swift) should be checked regularly for possible changes to iOS events. - -### From 1.0.0 to 1.1.0 - -Recommended change: - -* Update `.gitignore` file inside `ios` folder with [this changes](https://github.com/ionic-team/capacitor/commit/91941975ea5fe5389e0b09bb8331d5cb16ea6a78#diff-ea346566a7f09b5e88ed28d3d6362ec3) - -### From <= 1.5.1 to 2.0.0 - -Recommended change: - -* Update native project to Swift 5 - - Capacitor 2.0 uses Swift 5, it's recommended to update your native project to also use Swift 5. - To do so, from Xcode click `Edit -> Convert -> To Current Swift Syntax`. - - App.app will appear selected, click `Next` button. - - Then a message will say `No source changes necessary`. - - Finally, click the `Update` button. - -For API changes check the [Release Notes](https://github.com/ionic-team/capacitor/releases/tag/2.0.0) \ No newline at end of file diff --git a/site/docs-md/plugins/android.md b/site/docs-md/plugins/android.md deleted file mode 100644 index 2278cb359..000000000 --- a/site/docs-md/plugins/android.md +++ /dev/null @@ -1,320 +0,0 @@ ---- -title: Capacitor Android Plugin Guide -description: Capacitor Android Plugin Guide -url: /docs/plugins/android -contributors: - - mlynch - - jcesarmobile ---- - -# Capacitor Android Plugin Guide - -

Building Capacitor plugins for Android involves writing Java to interface with Android SDKs.

- -

Capacitor embraces standard Android development tools for building Android plugins. We believe that using Java directly will make it easier to use existing solutions on Stack Overflow, share work with existing native developers, and use platform features as soon as they are made available.

- -## Getting Started - -To get started, first generate a plugin as shown in the [Getting Started](/docs/plugins/#getting-started) section of the Plugin guide. - -Next, open `your-plugin/android/` in Android Studio. You then want to navigate to the `.java` file for your plugin, which changes depending on the Plugin ID and Plugin Class Name you used when creating the plugin. - -For example, for a plugin with the ID `com.domain.myplugin` and the Plugin Class Name `MyPlugin`, you would find the `.java` file at `android/src/main/java/com/domain/myplugin/MyPlugin.java`. - -## Building your Plugin - -A Capacitor plugin for Android is a simple Java class that extends `com.getcapacitor.Plugin` and have a `@NativePlugin` annotation. -It has some methods with `@PluginMethod()` annotation that will be callable from JavaScript. - -Once your plugin is generated, you can start editing it by opening the file with the Plugin class name you choose on the generator. - -### Simple Example - -In the generated example, there is a simple echo plugin with an `echo` function that simply returns a value that it was given. - -This example demonstrates a couple core components of Capacitor plugins: receiving data from a Plugin Call, and returning data back to the caller. - -`EchoPlugin.java` - -```java -package android.plugin.test; - -import com.getcapacitor.JSObject; -import com.getcapacitor.NativePlugin; -import com.getcapacitor.Plugin; -import com.getcapacitor.PluginCall; -import com.getcapacitor.PluginMethod; - -@NativePlugin() -public class EchoPlugin extends Plugin { - - @PluginMethod() - public void echo(PluginCall call) { - String value = call.getString("value"); - - JSObject ret = new JSObject(); - ret.put("value", value); - call.success(ret); - } -} -``` - -> In order to make Capacitor aware of your plugin, you have to [export it to capacitor](#export-to-capacitor) in your apps `MainActivity`. - -### Accessing Called Data - -Each plugin method receives an instance of `com.getcapacitor.PluginCall` containing all the information of the plugin method invocation from the client. - -A client can send any data that can be JSON serialized, such as numbers, text, booleans, objects, and arrays. This data -is accessible on the `getData` field of the call instance, or by using convenience methods such as `getString` or `getObject`. - -For example, here is how you'd get data passed to your method: - -```java -@PluginMethod() -public void storeContact(PluginCall call) { - String name = call.getString("yourName", "default name"); - JSObject address = call.getObject("address", new JSObject()); - boolean isAwesome = call.getBoolean("isAwesome", false); - - if (!call.getData().has("id")) { - call.reject("Must provide an id"); - return; - } - // ... - - call.resolve(); -} -``` - -Notice the various ways data can be accessed on the `PluginCall` instance, including how to check for a key using `getData`'s `has` method. - -### Returning Data Back - -A plugin call can succeed or fail. For calls using promises (most common), succeeding corresponds to calling `resolve` on the Promise, and failure calling `reject`. For those using callbacks, a succeeding will call the success callback or the error callback if failing. - -The `resolve` method of `PluginCall` takes a `JSObject` and supports JSON-serializable data types. Here's an example of returning data back to the client: - -```java -JSObject ret = new JSObject(); -ret.put("added", true); -JSObject info = new JSObject(); -info.put("id", "unique-id-1234"); -ret.put("info", info); -call.resolve(ret); -``` - -To fail, or reject a call, use `call.reject`, passing an error string and (optionally) an `Exception` instance - -```java -call.reject(exception.getLocalizedMessage(), exception); -``` - -### Presenting Native Screens - -To present a Native Screen over the Capacitor screen we will use [Android's Intents](https://developer.android.com/guide/components/intents-filters). Intents allow you to start an activity from your app, or from another app. [See Common Intents](https://developer.android.com/guide/components/intents-common) - -#### Intents without Result(s) - -Most times you just want to present the native Activity, -in this case you can just trigger the [relevant action](https://developer.android.com/guide/components/intents-common). - -```java -Intent intent = new Intent(Intent.ACTION_VIEW); -getActivity().startActivity(intent); -``` - -#### Intents with Result(s) - -Sometimes when you launch an Intent, you expect some result back. In that case you want to use `startActivityForResult`. - -Also make sure you call `saveCall(call);` as you will need it later when handling the intents result. - -You also have to register your intents [unique request](https://developer.android.com/training/basics/intents/result#StartActivity) code with `@NativePlugin` in order for -`handleOnActivityResult` to be triggered. - -```java -@NativePlugin( - requestCodes={MyPlugin.REQUEST_IMAGE_PICK} // register request code(s) for intent results -) -class ImagePicker extends Plugin { - protected static final int REQUEST_IMAGE_PICK = 12345; // Unique request code - - @PluginMethod() - public void pickImage(PluginCall call) { - saveCall(call); - - Intent intent = new Intent(Intent.ACTION_PICK); - intent.setType("image/*"); - - startActivityForResult(call, intent, REQUEST_IMAGE_PICK); - } - - // in order to handle the intents result, you have to @Override handleOnActivityResult - @Override - protected void handleOnActivityResult(int requestCode, int resultCode, Intent data) { - super.handleOnActivityResult(requestCode, resultCode, data); - - // Get the previously saved call - PluginCall savedCall = getSavedCall(); - - if (savedCall == null) { - return; - } - if (requestCode == REQUEST_IMAGE_PICK) { - // Do something with the data - } - } -} -``` - -### Events - -Capacitor Plugins can emit App events and Plugin events - -#### App Events - -App Events are regular javascript events, like `window` or `document` events. - -Capacitor provides all this functions to fire events: - -```java -//If you want to provide the target -bridge.triggerJSEvent("myCustomEvent", "window"); - -bridge.triggerJSEvent("myCustomEvent", "document", "{ 'dataKey': 'dataValue' }"); - -// Window Events -bridge.triggerWindowJSEvent("myCustomEvent"); - -bridge.triggerWindowJSEvent("myCustomEvent", "{ 'dataKey': 'dataValue' }"); - -// Document events -bridge.triggerDocumentJSEvent("myCustomEvent"); - -bridge.triggerDocumentJSEvent("myCustomEvent", "{ 'dataKey': 'dataValue' }"); -``` - -And to listen for it, just use regular javascript: - -```javascript -window.addEventListener("myCustomEvent", function() { - console.log("myCustomEvent was fired") -}); -``` - -#### Plugin Events - -Plugins can emit their own events that you can listen by attaching a listener to the plugin Object like this: - -```typescript -Plugins.MyPlugin.addListener("myPluginEvent", (info: any) => { - console.log("myPluginEvent was fired"); -}); -``` - -To emit the event from the Java plugin class you can do it like this: - -```java -JSObject ret = new JSObject(); -ret.put("value", "some value"); -notifyListeners("myPluginEvent", ret); -``` - -To remove a listener from the plugin object: - -```javascript -const myPluginEventListener = Plugins.MyPlugin.addListener("myPluginEvent", (info: any) => { - console.log("myPluginEvent was fired"); -}); - -myPluginEventListener.remove(); -``` - -### Permissions - -Some Plugins will require you to request permissions. -Capacitor provides some helpers to do that. - -First declare your plugin permissions in the `@NativePlugin` annotation - -```java -@NativePlugin( - permissions={ - Manifest.permission.ACCESS_NETWORK_STATE - } -) -``` - -You can check if all the required permissions has been granted with `hasRequiredPermissions()`. -You can request all permissions with `pluginRequestAllPermissions();`. -You can request for a single permission with `pluginRequestPermission(Manifest.permission.CAMERA, 12345);` -Or you can request a group of permissions with: - -```java -static final int REQUEST_IMAGE_CAPTURE = 12345; -pluginRequestPermissions(new String[] { - Manifest.permission.CAMERA, - Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE -}, REQUEST_IMAGE_CAPTURE); -``` - -To handle the permission request you have to Override `handleRequestPermissionsResult` - -```java -@Override -protected void handleRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { - super.handleRequestPermissionsResult(requestCode, permissions, grantResults); - - log("handling request perms result"); - PluginCall savedCall = getSavedCall(); - if (savedCall == null) { - log("No stored plugin call for permissions request result"); - return; - } - - for(int result : grantResults) { - if (result == PackageManager.PERMISSION_DENIED) { - savedCall.error("User denied permission"); - return; - } - } - - if (requestCode == REQUEST_IMAGE_CAPTURE) { - // We got the permission - } -} -``` - -### Override navigation - -Capacitor plugins can override the webview navigation. For that the plugin can override `public Boolean shouldOverrideLoad(Uri url)` method. -Returning `true` causes the WebView to abort loading the URL. -Returning `false` causes the WebView to continue loading the URL. -Returning `null` will defer to the default Capacitor policy. - -### Export to Capacitor - -By using the `@NativePlugin` and `@PluginMethod()` annotations in your plugins, you make them available to Capacitor, but you still need an extra step in your application to make Capacitor aware of the plugins. - -This is done in your apps `MainActivity`, where you `add` it in e.g. `src/main/java/com/example/myapp/MainActivity.java` like so: - -```java -// Other imports... -import com.example.myapp.EchoPlugin; - -public class MainActivity extends BridgeActivity { - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // Initializes the Bridge - this.init(savedInstanceState, new ArrayList>() {{ - // Additional plugins you've installed go here - // Ex: add(TotallyAwesomePlugin.class); - add(EchoPlugin.class); - }}); - } -} -``` diff --git a/site/docs-md/plugins/creating-plugins.md b/site/docs-md/plugins/creating-plugins.md deleted file mode 100644 index b8d50a114..000000000 --- a/site/docs-md/plugins/creating-plugins.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -title: Creating Capacitor Plugins -description: Creating Capacitor Plugins -url: /docs/plugins/creating-plugins -contributors: - - mlynch - - jcesarmobile ---- - -# Creating Capacitor Plugins - -An Capacitor plugin relies on a JavaScript layer that proxies calls to Capacitor's cross-platform runtime which runs -the corresponding native or pure-web code to handle the operation. - -Thus, an Capacitor plugin consists of some JavaScript and then a native implementation for each platform that requires it. - -Let's implement a simple Todo plugin that stores a list of Todo's in native device storage or web storage depending on the platform available. - -## Generate Plugin Scaffolding - -To generate a new plugin for development, run - -```bash -capacitor plugin:generate com.example.plugin.todo Todo -``` - -The plugin's structure will look similar to this: - - -## JavaScript Implementation - -## iOS Plugin - -```swift -import Capacitor - -@objc(Todo) -class Todo : Plugin { - @objc func create(_ call: PluginCall) { - // Grab the call arguments, guarding to ensure they exist - guard let title = call.get("title", String.self) else { - call.error("Must provide title") - } - - guard let text = call.get("text", String.self) else { - call.error("Must provide text") - } - - // Create the Todo - let todo = Todo(title, text) - - // Save it somewhere - // ... - - // Construct a new PluginResult object with the - // data we'll send back to the client - let result = [ - "todoId": todo.id - ] - - // Send the result back to the client - call.success(result) - } - - @objc public func update(_ call: PluginCall) { - // ... exercise for the reader - } - - @objc public func delete(_ call: PluginCall) { - // ... exercise for the reader - } -} -``` - -## Android Plugin - -```java -package com.example.plugin; - -import com.getcapacitor.NativePlugin; -import com.getcapacitor.Plugin; -import com.getcapacitor.PluginCall; -import com.getcapacitor.PluginMethod; -import com.getcapacitor.JSObject; - -@NativePlugin() -public class Todo extends Plugin { - - @PluginMethod() - public void create(PluginCall call) { - String title = call.getString("title"); - String text = call.getString("text"); - - Todo t = new Todo(title, text); - // save it somewhere - - JSObject ret = new JSONObject(); - try { - ret.put("todoId", t.id); - call.success(ret); - } catch(JSONException ex) { - call.error("Unable to send todo", ex); - } - } - -} -``` - -## Web Plugin diff --git a/site/docs-md/plugins/index.md b/site/docs-md/plugins/index.md deleted file mode 100644 index 88c59dfd9..000000000 --- a/site/docs-md/plugins/index.md +++ /dev/null @@ -1,92 +0,0 @@ ---- -title: Capacitor Plugins -description: Capacitor Plugins -url: /docs/plugins -contributors: - - mlynch - - jcesarmobile ---- - -# Capacitor Plugins - -

Plugins in Capacitor enable JavaScript to interface directly with Native APIs.

- -## How Capacitor Plugins Work - -With Plugins, a web app can access the full power of the Native APIs, doing everything a traditional native app can. Plugins are especially great for wrapping common native operations that might use very different APIs across platforms, while exposing a consistent, cross-platform API to JavaScript. - -Additionally, the Plugin capability in Capacitor makes it possible for teams with a mix of traditional native developers and web developers to work together on different parts of the app. - -Capacitor auto generates JavaScript hooks on the client, so most plugins only need to build -a native Swift/Obj-C plugin for iOS, and/or a Java one for Android. Of course, adding custom JavaScript -for a plugin is possible, and is just like providing a JavaScript npm package. - -## Getting Started - -Capacitor comes with a Plugin generator to start new plugins quickly. To use it, run - -```bash -npx @capacitor/cli plugin:generate -``` - -This starts a wizard prompting you for information about your new plugin. For example: - -```bash -npx @capacitor/cli plugin:generate -✏️ Creating new Capacitor plugin -? Plugin NPM name (kebab-case): my-plugin -? Plugin id (domain-style syntax. ex: com.example.plugin) com.ionicframework.myplugin -? Plugin class name (ex: AwesomePlugin) MyPlugin -? description: -? git repository: -? author: -? license: MIT -? package.json will be created, do you want to continue? (Y/n) -``` - - - `Plugin NPM name`: a kebab-case name of a package that will be available on npm (not a strict requirement if your package will be on a private npm repo). - - `Plugin ID`: a domain-style identifier. It is primarily used for the package name in Java. - - `Plugin Class Name`: the initial name of the class used in Java and Swift. See the additional note about class names in the [iOS Plugin](ios/) section of this guide. - - `description`: a brief introduction about the plugin. - - `git repository`: the URL to a git repository where the source code of the plugin will be hosted. - - `author` (optional): the name of the plugin creator in `package.json`. - - `license` (optional): the license under which the plugin is bound. MIT license is the default. - - `package.json will be created`: enter "Y" and/or hit Enter/Return to finish plugin setup. - -## TypeScript Interface - -Each plugin comes with some typescript files that simply export TypeScript interfaces. These interfaces -can provide typing to TypeScript consumers of your plugin. - -Starting with the TypeScript interface can be a good way to build out the API for your plugin. For example, -here's the default interface for our Plugin: - -```typescript -declare module "@capacitor/core" { - interface PluginRegistry { - Echo: EchoPlugin; - } -} - -export interface EchoPlugin { - echo(options: { value: string }): Promise<{value: string}>; -} -``` - -## Publishing - -Whenever you are ready to publish your plugin, just use: - -```bash -npm publish -``` - -This will build the JS portion of your plugin and publish the rest of your plugin files to NPM. - -Your package can now be installed using `npm install your-plugin` in any Capacitor app. - -## Next steps - -Now it's up to you to make your plugin do something truly awesome! - -Follow the [iOS](/docs/plugins/ios) guide for information on using Swift (or Obj-C) to build an iOS plugin, the [Android](/docs/plugins/android) guide for building Android plugins with Java, the [Web](/docs/plugins/web) guide for implementing web and PWA functionality for your plugin, and the [Custom JavaScript](/docs/plugins/js) guide for information on how to build a custom JavaScript plugin (i.e. in addition to Capacitor's auto-JS plugin binding). diff --git a/site/docs-md/plugins/ios.md b/site/docs-md/plugins/ios.md deleted file mode 100644 index b2650996c..000000000 --- a/site/docs-md/plugins/ios.md +++ /dev/null @@ -1,212 +0,0 @@ ---- -title: Capacitor iOS Plugin Guide -description: Capacitor iOS Plugin Guide -url: /docs/plugins/ios -contributors: - - mlynch - - jcesarmobile ---- - -# Capacitor iOS Plugin Guide - -

Building Capacitor plugins for iOS involves writing Swift (or Objective-C) to interface with Apple's iOS SDKs.

- -

Capacitor embraces standard iOS development tools for building iOS plugins. We believe that using Swift (or, Objective-C) directly will make it easier to use existing solutions on Stack Overflow, share work with existing native developers, and use platform features as soon as they are made available.

- -## Getting Started - -To get started, first generate a plugin as shown in the [Getting Started](/docs/plugins/#getting-started) section of the Plugin guide. - -Next, open `your-plugin/ios/Plugin.xcworkspace` in Xcode. - -## Building your Plugin in Swift - -A Capacitor plugin for iOS is a simple Swift class that extends `CAPPlugin` and -has some exported methods that will be callable from JavaScript. - -Once your plugin is generated, you can start editing it by opening `Plugin.swift`. - -### Simple Example - - In the generated example, there is a simple echo plugin with an `echo` function that simply returns a value that it was given. - - This example demonstrates a few core components of Capacitor plugins: receiving data from a Plugin Call, and returning - data back to the caller: - -`Plugin.swift` - -```swift -import Capacitor - -@objc(MyPlugin) -public class MyPlugin: CAPPlugin { - @objc func echo(_ call: CAPPluginCall) { - let value = call.getString("value") ?? "" - call.resolve([ - "value": value - ]) - } -} -``` - -### Accessing Called Data - -Each plugin method receives an instance of `CAPPluginCall` containing all the information of the plugin method invocation from the client. - -A client can send any data that can be JSON serialized, such as numbers, text, booleans, objects, and arrays. This data -is accessible on the `options` field of the call instance, or by using convenience methods such as `getString` or `getObject`. - -For example, here is how you'd get data passed to your method: - -```swift -@objc func storeContact(_ call: CAPPluginCall) { - let name = call.getString("yourName") ?? "default name" - let address = call.getObject("address") ?? [:] - let isAwesome = call.getBool("isAwesome") ?? false - - guard let id = call.options["id"] as? String else { - call.reject("Must provide an id") - return - } - - // ... - - call.resolve() -} -``` - -Notice the various ways data can be accessed on the `CAPPluginCall` instance, including how to require -options using `guard`. - -### Returning Data Back - -A plugin call can succeed or fail. For calls using promises (most common), succeeding corresponds to calling `resolve` on the Promise, and failure calling `reject`. For those using callbacks, a succeeding will call the success callback or the error callback if failing. - -The `resolve` method of `CAPPluginCall` takes a dictionary and supports JSON-serializable data types. Here's an example of returning data back to the client: - -```swift -call.resolve([ - "added": true, - "info": [ - "id": id - ] -]) -``` - -To fail, or reject a call, call `call.reject`, passing an error string and (optionally) an `Error` instance and extra data back: - -```swift -call.reject(error.localizedDescription, error, [ - "item1": true -]) -``` - -### Presenting Native Screens - -To present a Native Screen over the Capacitor screen we need to acces the Capacitor's View Controller. -To access the Capacitor's View Controller, we have to use the `CAPBridge` object available on `CAPPlugin` class. - -We can use the `UIViewController` to present Native View Controllers over it like this: - -```swift -DispatchQueue.main.async { - self.bridge.viewController.present(ourCustomViewController, animated: true, completion: nil) -} -``` - -Using `DispatchQueue.main.async` makes your view render from the main thread instead of a background thread. Removing this can cause unexpected results. - -On iPad devices you can also present `UIPopovers`, to do so, we provide a helper function to show it centered. - -```swift -self.setCenteredPopover(ourCustomViewController) -self.bridge.viewController.present(ourCustomViewController, animated: true, completion: nil) -``` - -### Events - -Capacitor Plugins can emit App events and Plugin events - -#### App Events - -App Events are regular javascript events, like `window` or `document` events. - -Capacitor provides all this functions to fire events: - -```swift - -//If you want to provide the target -self.bridge.triggerJSEvent(eventName: "myCustomEvent", target: "window") - -self.bridge.triggerJSEvent(eventName: "myCustomEvent", target: "document", data: "my custom data") - -// Window Events -self.bridge.triggerWindowJSEvent(eventName: "myCustomEvent") - -self.bridge.triggerWindowJSEvent(eventName: "myCustomEvent", data: "my custom data") - -// Document events -self.bridge.triggerDocumentJSEvent(eventName: "myCustomEvent") - -self.bridge.triggerDocumentJSEvent(eventName: "myCustomEvent", data: "my custom data") -``` - -And to listen for it, just use regular javascript: - -```javascript -window.addEventListener("myCustomEvent", function() { - console.log("myCustomEvent was fired") -}); -``` - -#### Plugin Events - -Plugins can emit their own events that you can listen by attaching a listener to the plugin Object like this: - -```typescript -Plugins.MyPlugin.addListener('myPluginEvent', (info: any) => { - console.log('myPluginEvent was fired'); -}); -``` - -To emit the event from the Swift plugin class you can do it like this: - -`self.notifyListeners("myPluginEvent", data: [:])` - -To remove a listener from the plugin object: - -```javascript -const myPluginEventListener = Plugins.MyPlugin.addListener("myPluginEvent", (info: any) => { - console.log("myPluginEvent was fired"); -}); - -myPluginEventListener.remove(); -``` - -### Override navigation - -Capacitor plugins can override the webview navigation. For that the plugin can override `- (NSNumber *)shouldOverrideLoad:(WKNavigationAction *)navigationAction` method. -Returning `true` causes the WebView to abort loading the URL. -Returning `false` causes the WebView to continue loading the URL. -Returning `nil` will defer to the default Capacitor policy. - -### Export to Capacitor - -To make sure Capacitor can see your plugin, you must do two things: export your Swift class to Objective-C, and register it -using the provided Capacitor Objective-C Macros. - -To export your Swift class to Objective-C, make sure to add `@objc(YourPluginClass)` above your Swift class, and add `@objc` before any plugin method, as shown above. - -To register your plugin with Capacitor, you'll need to create a new Objective-C file (with a `.m` extension, _not_ `.h`!) corresponding to your plugin (such as `MyPlugin.m`) and use the Capacitor macros to register the plugin, and each method that you will use. Important: you _must_ use the New File dialog in Xcode to do this. You'll then be prompted by Xcode to create a Bridging Header, which you _must_ do. - -Finally, register the plugin by adding the required Capacitor plugin macros into your new `.m` file: - -```objectivec -#import - -CAP_PLUGIN(MyPlugin, "MyPlugin", - CAP_PLUGIN_METHOD(echo, CAPPluginReturnPromise); -) -``` - -This makes `MyPlugin`, and the `echo` method available to the Capacitor web runtime, indicating to Capacitor that the echo method will return a Promise. diff --git a/site/docs-md/plugins/js.md b/site/docs-md/plugins/js.md deleted file mode 100644 index 1db3c7ce6..000000000 --- a/site/docs-md/plugins/js.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Capacitor JavaScript Plugin Guide -description: Capacitor JavaScript Plugin Guide -url: /docs/plugins/js -contributors: - - mlynch - - jcesarmobile ---- - -# Capacitor JavaScript Plugin Guide - -

In Capacitor, Native Plugins have all of their methods automatically made available to JavaScript at runtime, so the majority of plugins won't need any JavaScript for their plugin at all.

- -

However, if your plugin requires some special JavaScript, or you'd like to provide a custom API for your plugin, you can easily add a JavaScript frontend to your Capacitor plugin.

- -## Getting Started - -To build a custom JavaScript frontend for Capacitor, first follow the [Getting Started](/docs/plugins) section of the plugin guide. - -Next, build out your plugin any way you see fit! The generated plugin template comes with TypeScript and a simple build process ready to go. You can adopt that (recommended) or remove those files and start fresh. - -To call your plugin, you'll be able to access it directly after importing from `@capacitor/core`: - -```typescript -import { Plugins } from '@capacitor/core'; - -const { SuperGreatPlugin } = Plugins; - -export class CustomSuperPlugin { - constructor() { - } - customAwesomeness() { - SuperGreatPlugin.awesome(); - } -} -``` - -## Publishing - -To publish your plugin, just `npm publish` it! - -## Consuming your Plugin - -One of the differences with custom JS plugins is how developers "consume" it. Instead of accessing `Plugins.SuperGreatPlugin` directly, developers will instead import from your npm package directly: - -```typescript -import { CustomSuperPlugin } from 'super-great-plugin'; - -const plugin = new CustomSuperPlugin(); -plugin.customAwesomeness(); -``` diff --git a/site/docs-md/plugins/plugin-api-javascript.md b/site/docs-md/plugins/plugin-api-javascript.md deleted file mode 100644 index e69de29bb..000000000 diff --git a/site/docs-md/plugins/web.md b/site/docs-md/plugins/web.md deleted file mode 100644 index 250318ef6..000000000 --- a/site/docs-md/plugins/web.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Capacitor Web/PWA Plugin Guide -description: Capacitor Web/PWA Plugin Guide -url: /docs/plugins/web -contributors: - - mlynch - - jcesarmobile ---- - -# Capacitor Web/PWA Plugin Guide - -

Capacitor utilizes a web/native compatibility layer, making it easy to build plugins that have functionality when running natively, as well as when running in a PWA on the Web.

- -## Getting Started - -To get started, first generate a plugin as shown in the [Getting Started](/docs/plugins/#getting-started) section of the Plugin guide. - -Next, open `your-plugin/src/web.ts` in your editor of choice. - -## Example - -The basic structure of a Web plugin looks like this, follow the comments inline for -more explanation: - -```typescript -import { WebPlugin } from '@capacitor/core'; - -export class MyPluginWeb extends WebPlugin { - constructor() { - // Call super with the name of our plugin (this should match the native name), - // along with the platforms this plugin will activate on. For example, it's possible - // to use a web plugin for Android and iOS by adding them to the platforms list (lowercased) - super({ - name: 'MyPlugin', - platforms: ['web'] - }); - } - - async echo(options: { value: string }) { - console.log('ECHO', options); - return options; - } -} - -// Instantiate the plugin -const MyPlugin = new MyPluginWeb(); - -// Export the plugin -export { MyPlugin }; -``` - -Finally, make sure your `src/index.ts` has this line: - -```typescript -export * from './web'; -``` diff --git a/site/docs-md/web/index.md b/site/docs-md/web/index.md deleted file mode 100644 index ffc4bbe10..000000000 --- a/site/docs-md/web/index.md +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: Capacitor Web Documentation -description: Web Getting Started -url: /docs/web -contributors: - - mlynch ---- - -# Using Capacitor in a Web Project - -

Capacitor fully supports traditional web and Progressive Web Apps. In fact, using Capacitor makes it easy to ship a PWA version of your iOS and Android app store apps with minimal work.

- -### Installation - -Chances are, you already have Capacitor installed in your app if you're using Capacitor to build an iOS, or Android app. In capacitor, the `web` platform is just the web project that powers your app! - -If you don't have Capacitor installed yet, consult the [Installation](/docs/getting-started/) guide before continuing. - -#### Using Capacitor as a Module - -Generally, apps will be using a framework with a build system that supports importing JavaScript modules. In that case, -simply import Capacitor at the top of your app and you're set: - -```typescript -import { Capacitor } from '@capacitor/core'; -``` - -To use a plugin, import `Plugins` and call it, noting that only plugins -with web support will actually provide useful functionality: - -```typescript -import { Plugins } from '@capacitor/core'; - -const position = await Plugins.Geolocation.getCurrentPosition(); -``` - -### Using Capacitor as a Script Include - -To use Capacitor core in a web app that is not using a build system or bundler/module loader, -you must set `bundledWebRuntime` to `true` in your `capacitor.config.json`, tell capacitor to -copy the specified version of Capacitor Core into your project, -and then import `capacitor.js` into your `index.html`: - -```json -{ - "bundledWebRuntime": true -} -``` - -Copy to your project: - -```bash -npx cap copy web -``` - -In `index.html`, import `capacitor.js` before your app's JS: - -```html - - -``` - -## Developing your App - -Chances are, you're using a framework like [Ionic](http://ionicframework.com/) for UI components and building. To develop -your Capacitor web app, just use your framework! - -If you're not using a framework, Capacitor comes with a small development service with HTML5 routing support. To use it, -run: - -```bash -npx cap serve -``` - -## Going Live - -When you're ready to publish your Progressive Web App and share it with the world, -just upload the contents of your web directory (for example, the `www/` or `build/` folder). - -That will contain everything you need to run your app! diff --git a/site/docs-md/web/pwa-elements.md b/site/docs-md/web/pwa-elements.md deleted file mode 100644 index c4445c6cd..000000000 --- a/site/docs-md/web/pwa-elements.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: PWA Elements -description: Using PWA Elements -url: /docs/pwa-elements -contributors: - - dotnetkow - - mlynch ---- - -# PWA Elements - -

Some Capacitor plugins, such as Camera or Toast, have web-based UI available when not running natively. For example, calling Camera.getPhoto() will -load a responsive photo-taking experience when running on the web:

- - - -This UI is implemented using web components. Due to the magic of Shadow DOM, these components should not conflict -with your own UI. - -## Installation - -To enable these controls, you must add `@ionic/pwa-elements` to your app. - -A typical installation involves importing the package and registering the elements, or adding a script tag to the `` of the `index.html` for your app: - -#### Importing PWA Elements - -```bash -npm install @ionic/pwa-elements -``` - -Then, depending on your framework of choice, import the element loader and call it at the correct time: - -_React_ - -`index.tsx` or `index.js`: - -```tsx -import { defineCustomElements } from '@ionic/pwa-elements/loader'; - -ReactDOM.render(, document.getElementById('root')); - -// Call the element loader after the app has been rendered the first time -defineCustomElements(window); -``` - -_Angular_ - -`main.ts`: - -```typescript -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; -import { environment } from './environments/environment'; - -import { defineCustomElements } from '@ionic/pwa-elements/loader'; - -if (environment.production) { - enableProdMode(); -} - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.log(err)); - -// Call the element loader after the platform has been bootstrapped -defineCustomElements(window); -``` - -#### Including through script tag - -PWA Elements can be included through a script tag in your `index.html`. However, keep in mind this will not work for offline scenarios: - -```html - - -``` diff --git a/site/firebase.json b/site/firebase.json deleted file mode 100644 index 92635a076..000000000 --- a/site/firebase.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "hosting": { - "public": "www", - "rewrites": [ - { - "source": "**", - "destination": "/index.html" - } - ], - "headers": [ - { - "source": "/build/app/**", - "headers": [ - { - "key": "Cache-Control", - "value": "public, max-age=31536000" - } - ] - }, - { - "source": "sw.js", - "headers": [ - { - "key": "Cache-Control", - "value": "no-cache" - } - ] - } - ], - "ignore": [ - "firebase.json", - "**/.*", - "**/node_modules/**" - ], - "redirects": [ - { - "source": "/docs/basics/cordova{,/**}", - "destination": "/docs/cordova/using-cordova-plugins", - "type": 301 - }, - { - "source": "/docs/getting-started/pwa-elements{,/**}", - "destination": "/docs/pwa-elements/", - "type": 301 - } - ] - } -} diff --git a/site/package-lock.json b/site/package-lock.json deleted file mode 100644 index 2e0f83955..000000000 --- a/site/package-lock.json +++ /dev/null @@ -1,5674 +0,0 @@ -{ - "name": "capacitor-site", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@stencil/core": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-1.13.0.tgz", - "integrity": "sha512-++kIXaEgmwm/vq+9QAVHPuLLddCKVdJyI8OfHxknkpu5udxZMYA/vaN/K9i+2NIiTLbGpvHNk9E+RyYzKxS0XQ==", - "dev": true, - "requires": { - "typescript": "3.8.3" - } - }, - "@stencil/router": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stencil/router/-/router-1.0.1.tgz", - "integrity": "sha512-ZMholl1BE+glNAc/8pcEb9RYkeH0XETxsJbx6D7f3azTmaTXqKYty1IACP/3BtVjuimpfLdxQJ+J95wKmnYBtA==", - "dev": true, - "requires": { - "@stencil/state-tunnel": "^1.0.1" - } - }, - "@stencil/sass": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@stencil/sass/-/sass-1.3.1.tgz", - "integrity": "sha512-5qsEyhLGTywpG4zlWv6eBhhj/z2Z37nbUGa87Ak0KqfsEiclJCYRA/AMM9FiN1jHfBvr968G4zE8rNlYmiPLsQ==", - "dev": true - }, - "@stencil/state-tunnel": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@stencil/state-tunnel/-/state-tunnel-1.0.1.tgz", - "integrity": "sha512-DYG8uROgL9hkjVTCtCfRBb0d3FwpiFB0muRrNZQ2X1Qo5hxMuNNji76/ILddqeq0AfgkKCW82xrMPDpy+rNIhQ==", - "dev": true - }, - "@stencil/utils": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@stencil/utils/-/utils-0.0.5.tgz", - "integrity": "sha512-YOmrMgSTzGZtC2hSrD7vXWIerhEcxzUu+pdKQ2wev4QO8O++WR1lZydFTfFgsA+NSCn6RYzPmhbGOrs9+PBw6Q==", - "dev": true - }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", - "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/marked": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.6.5.tgz", - "integrity": "sha512-6kBKf64aVfx93UJrcyEZ+OBM5nGv4RLsI6sR1Ar34bpgvGVRoyTgpxn4ZmtxOM5aDTAaaznYuYUH8bUX3Nk3YA==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true - }, - "@types/node": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz", - "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==", - "dev": true - }, - "@types/prismjs": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.9.0.tgz", - "integrity": "sha512-zeh+xd2pcCvWm1XtWLR4v5pzZMybKeq6X8Q4cIZMMx8GmyKDUfJaOtw+JaONHUQt5ncKFXezl8QGIDQsSF5YfA==", - "dev": true - }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", - "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" - } - }, - "ansi-align": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", - "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", - "dev": true, - "requires": { - "string-width": "^2.0.0" - } - }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "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.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" - } - }, - "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" - } - }, - "archiver": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.1.1.tgz", - "integrity": "sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "zip-stream": "^1.2.0" - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", - "dev": true, - "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - } - }, - "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": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "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-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "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 - }, - "as-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/as-array/-/as-array-2.0.0.tgz", - "integrity": "sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc=", - "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": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "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.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "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 - }, - "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" - } - }, - "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" - } - } - } - }, - "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true - }, - "basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "basic-auth-connect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz", - "integrity": "sha1-/bC0OWLKe0BFanwrtI/hc9otISI=", - "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, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "boxen": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", - "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", - "dev": true, - "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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" - } - } - } - }, - "buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "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" - } - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", - "dev": true - }, - "capture-stack-trace": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", - "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", - "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.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "char-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/char-spinner/-/char-spinner-1.0.1.tgz", - "integrity": "sha1-5upnvSR+EHESmDt6sEee02KAAIE=", - "dev": true - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", - "dev": true - }, - "cjson": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.3.tgz", - "integrity": "sha1-qS2ceG5b+bkwgGMp7gXV0yYbSvo=", - "dev": true, - "requires": { - "json-parse-helpfulerror": "^1.0.3" - } - }, - "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" - } - } - } - }, - "cli-boxes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", - "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", - "dev": true - }, - "cli-color": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.4.0.tgz", - "integrity": "sha512-xu6RvQqqrWEo6MPR1eixqGPywhYBHRs653F9jfXB2Hx4jdM/3WxiNE1vppRmxtMIfl16SFYTpYlrnqH/HsK/2w==", - "dev": true, - "requires": { - "ansi-regex": "^2.1.1", - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "memoizee": "^0.4.14", - "timers-ext": "^0.1.5" - } - }, - "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-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=", - "dev": true - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "dev": true, - "requires": { - "colors": "1.0.3" - } - }, - "cli-width": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", - "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", - "dev": true - }, - "clipboard": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", - "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", - "dev": true, - "optional": true, - "requires": { - "good-listener": "^1.2.2", - "select": "^1.1.2", - "tiny-emitter": "^2.0.0" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==", - "dev": true - }, - "compare-semver": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/compare-semver/-/compare-semver-1.1.0.tgz", - "integrity": "sha1-fAp5onu4C2xplERfgpWCWdPQIVM=", - "dev": true, - "requires": { - "semver": "^5.0.1" - } - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - }, - "dependencies": { - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", - "dev": true - } - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "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 - }, - "configstore": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", - "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "object-assign": "^4.0.1", - "os-tmpdir": "^1.0.0", - "osenv": "^0.1.0", - "uuid": "^2.0.1", - "write-file-atomic": "^1.1.2", - "xdg-basedir": "^2.0.0" - }, - "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } - } - }, - "connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - } - }, - "connect-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/connect-query/-/connect-query-1.0.0.tgz", - "integrity": "sha1-3kT1dyCdokBNH8BGktGkEY5YIRk=", - "dev": true, - "requires": { - "qs": "~6.4.0" - }, - "dependencies": { - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - } - } - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "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 - }, - "copy-text-to-clipboard": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-1.0.4.tgz", - "integrity": "sha512-4hDE+0bgqm4G/nXnt91CP3rc0vOptaePPU5WfVZuhv2AYNJogdLHR4pF1XPgXDAGY4QCzj9pD7zKATa+50sQPg==", - "dev": true - }, - "core-js": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", - "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", - "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 - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - } - }, - "create-error-class": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", - "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", - "dev": true, - "requires": { - "capture-stack-trace": "^1.0.0" - } - }, - "cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.5" - }, - "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" - } - } - } - }, - "cross-fetch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-2.2.3.tgz", - "integrity": "sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw==", - "requires": { - "node-fetch": "2.1.2", - "whatwg-fetch": "2.0.4" - }, - "dependencies": { - "node-fetch": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.2.tgz", - "integrity": "sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=" - } - } - }, - "cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "crypto-random-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", - "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", - "dev": true - }, - "csv-streamify": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/csv-streamify/-/csv-streamify-3.0.4.tgz", - "integrity": "sha1-TLYUxX4/KZzKF7Y/3LStFnd39Ho=", - "dev": true, - "requires": { - "through2": "2.0.1" - } - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", - "dev": true - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^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" - } - }, - "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-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "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" - } - } - } - }, - "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 - }, - "delegate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", - "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", - "dev": true, - "optional": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "didyoumean": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", - "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", - "dev": true - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "dotenv": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", - "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" - }, - "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - } - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "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 - }, - "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 - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "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" - } - } - } - }, - "exit-code": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/exit-code/-/exit-code-1.0.2.tgz", - "integrity": "sha1-zhZYEcnxF69qX4gpQLlq5/muzDQ=", - "dev": true - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, - "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" - } - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", - "dev": true - } - } - }, - "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.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "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" - } - }, - "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" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", - "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-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-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "dev": true, - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "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" - } - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", - "dev": true - }, - "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" - } - } - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - } - }, - "firebase": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-2.4.2.tgz", - "integrity": "sha1-ThEZ7AOWylYdinrL/xYw/qxsCjE=", - "dev": true, - "requires": { - "faye-websocket": ">=0.6.0" - }, - "dependencies": { - "faye-websocket": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.3.tgz", - "integrity": "sha1-SCpQWw3wrmJrlphm0710DNuWLoM=", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - }, - "dependencies": { - "websocket-driver": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.5.2.tgz", - "integrity": "sha1-jHyF2gcTtAYFVrTXHAF3XuEmnrk=", - "dev": true, - "requires": { - "websocket-extensions": ">=0.1.1" - }, - "dependencies": { - "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", - "dev": true - } - } - } - } - } - } - }, - "firebase-tools": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/firebase-tools/-/firebase-tools-6.12.0.tgz", - "integrity": "sha512-FNfDhkno92tR/hysHbcNGByPGvIpmb4o3kUyHyX5HHL1Nz58Emv2lLf1hLgm+T18pj8uWr4t6JkUYqdoBM9dew==", - "dev": true, - "requires": { - "JSONStream": "^1.2.1", - "archiver": "^2.1.1", - "body-parser": "^1.19.0", - "chokidar": "^2.1.5", - "cjson": "^0.3.1", - "cli-color": "^1.2.0", - "cli-table": "^0.3.1", - "commander": "^2.8.1", - "configstore": "^1.2.0", - "cross-env": "^5.1.3", - "cross-spawn": "^4.0.0", - "csv-streamify": "^3.0.4", - "didyoumean": "^1.2.1", - "es6-set": "^0.1.4", - "exit-code": "^1.0.2", - "express": "^4.16.4", - "filesize": "^3.1.3", - "firebase": "2.x.x", - "fs-extra": "^0.23.1", - "glob": "^7.1.2", - "google-auto-auth": "^0.7.2", - "inquirer": "^6.3.1", - "is": "^3.2.1", - "jsonschema": "^1.0.2", - "jsonwebtoken": "^8.2.1", - "lodash": "^4.17.10", - "minimatch": "^3.0.4", - "opn": "^5.5.0", - "ora": "0.2.3", - "portfinder": "^1.0.13", - "progress": "^2.0.0", - "request": "^2.87.0", - "semver": "^5.0.3", - "superstatic": "^6.0.1", - "tar": "^4.3.0", - "tmp": "0.0.33", - "universal-analytics": "^0.4.16", - "update-notifier": "^2.5.0", - "uuid": "^3.0.0", - "winston": "^1.0.1" - }, - "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - } - } - }, - "flat-arguments": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flat-arguments/-/flat-arguments-1.0.2.tgz", - "integrity": "sha1-m6p4Ct8FAfKC1ybJxqA426ROp28=", - "dev": true, - "requires": { - "array-flatten": "^1.0.0", - "as-array": "^1.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isobject": "^3.0.0" - }, - "dependencies": { - "as-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/as-array/-/as-array-1.0.0.tgz", - "integrity": "sha1-KKbu6qVynx9OyiBH316d4avaDtE=", - "dev": true, - "requires": { - "lodash.isarguments": "2.4.x", - "lodash.isobject": "^2.4.1", - "lodash.values": "^2.4.1" - }, - "dependencies": { - "lodash.isarguments": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-2.4.1.tgz", - "integrity": "sha1-STGpwIJTrfCRrnyhkiWKlzh27Mo=", - "dev": true - }, - "lodash.isobject": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", - "dev": true, - "requires": { - "lodash._objecttypes": "~2.4.1" - } - } - } - }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0=", - "dev": true - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "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.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "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 - }, - "front-matter": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-3.2.1.tgz", - "integrity": "sha512-YUhgEhbL6tG+Ok3vTGIoSDKqcr47aSDvyhEqIv8B+YuBJFsPnOiArNXTPp2yO07NL+a0L4+2jXlKlKqyVcsRRA==", - "dev": true, - "requires": { - "js-yaml": "^3.13.1" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-extra": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.23.1.tgz", - "integrity": "sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, - "requires": { - "minipass": "^2.6.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.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "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, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "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.3", - "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.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "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, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": 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, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.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.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "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, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": 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.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "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.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": 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.7.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, - "optional": 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, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "gcp-metadata": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-0.3.1.tgz", - "integrity": "sha512-5kJPX/RXuqoLmHiOOgkSDk/LI0QaXpEvZ3pvQP4ifjGGDKZKVSOjL/GcDjXA5kLxppFCOjmmsu0Uoop9d1upaQ==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "retry-request": "^3.0.0" - } - }, - "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.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "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-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" - } - } - } - }, - "glob-slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/glob-slash/-/glob-slash-1.0.0.tgz", - "integrity": "sha1-/lLvpDMjP3Si/mTHq7m8hIICq5U=", - "dev": true - }, - "glob-slasher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glob-slasher/-/glob-slasher-1.0.1.tgz", - "integrity": "sha1-dHoOW7IiZC7hDT4FRD4QlJPLD44=", - "dev": true, - "requires": { - "glob-slash": "^1.0.0", - "lodash.isobject": "^2.4.1", - "toxic": "^1.0.0" - } - }, - "global-dirs": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", - "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", - "dev": true, - "requires": { - "ini": "^1.3.4" - } - }, - "good-listener": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", - "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", - "dev": true, - "optional": true, - "requires": { - "delegate": "^3.1.2" - } - }, - "google-auth-library": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-0.10.0.tgz", - "integrity": "sha1-bhW6vuhf0d0U2NEoopW2g41SE24=", - "dev": true, - "requires": { - "gtoken": "^1.2.1", - "jws": "^3.1.4", - "lodash.noop": "^3.0.1", - "request": "^2.74.0" - } - }, - "google-auto-auth": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/google-auto-auth/-/google-auto-auth-0.7.2.tgz", - "integrity": "sha512-ux2n2AE2g3+vcLXwL4dP/M12SFMRX5dzCzBfhAEkTeAB7dpyGdOIEj7nmUx0BHKaCcUQrRWg9kT63X/Mmtk1+A==", - "dev": true, - "requires": { - "async": "^2.3.0", - "gcp-metadata": "^0.3.0", - "google-auth-library": "^0.10.0", - "request": "^2.79.0" - } - }, - "google-p12-pem": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-0.1.2.tgz", - "integrity": "sha1-M8RqsCGqc0+gMys5YKmj/8svMXc=", - "dev": true, - "requires": { - "node-forge": "^0.7.1" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true - }, - "gtoken": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-1.2.3.tgz", - "integrity": "sha512-wQAJflfoqSgMWrSBk9Fg86q+sd6s7y6uJhIvvIPz++RElGlMtEqsdAR2oWwZ/WTEtp7P9xFbJRrT976oRgzJ/w==", - "dev": true, - "requires": { - "google-p12-pem": "^0.1.0", - "jws": "^3.0.0", - "mime": "^1.4.1", - "request": "^2.72.0" - } - }, - "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.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "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-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "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" - } - }, - "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": { - "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" - } - } - } - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==", - "dev": true - }, - "home-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/home-dir/-/home-dir-1.0.0.tgz", - "integrity": "sha1-KRfrRL3JByztqUJXlUOEfjAX/k4=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "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.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" - } - }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "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 - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "inquirer": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", - "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.12", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.1.0", - "through": "^2.3.6" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - }, - "is": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/is/-/is-3.3.0.tgz", - "integrity": "sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==", - "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" - }, - "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-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-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "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" - }, - "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-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": "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.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", - "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", - "dev": true, - "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" - } - }, - "is-npm": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", - "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", - "dev": true - }, - "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" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "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" - } - }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true - }, - "is-redirect": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", - "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", - "dev": true - }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "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-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "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": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "dev": true, - "requires": { - "punycode": "2.x.x" - } - }, - "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": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "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 - }, - "jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha1-o6vicYryQaKykE+EpiWXDzia4yo=", - "dev": true - }, - "joi": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-11.4.0.tgz", - "integrity": "sha512-O7Uw+w/zEWgbL6OcHbyACKSj0PkQeUgmehdoXVSxt92QFCq4+1390Rwh5moI2K/OgC7D8RHRZqHZxT2husMJHA==", - "dev": true, - "requires": { - "hoek": "4.x.x", - "isemail": "3.x.x", - "topo": "2.x.x" - } - }, - "join-path": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/join-path/-/join-path-1.1.1.tgz", - "integrity": "sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU=", - "dev": true, - "requires": { - "as-array": "^2.0.0", - "url-join": "0.0.1", - "valid-url": "^1" - } - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "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 - }, - "json-parse-helpfulerror": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", - "integrity": "sha1-E/FM4C7tTpgSl7ZOueO5MuLdE9w=", - "dev": true, - "requires": { - "jju": "^1.1.0" - } - }, - "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-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 - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsonschema": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.6.tgz", - "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==", - "dev": true - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dev": true, - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "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" - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "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 - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "latest-version": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", - "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", - "dev": true, - "requires": { - "package-json": "^4.0.0" - } - }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "lodash._isnative": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz", - "integrity": "sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=", - "dev": true - }, - "lodash._objecttypes": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz", - "integrity": "sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=", - "dev": true - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "lodash._shimkeys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz", - "integrity": "sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=", - "dev": true, - "requires": { - "lodash._objecttypes": "~2.4.1" - } - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", - "dev": true - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", - "dev": true - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", - "dev": true - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", - "dev": true - }, - "lodash.isobject": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", - "integrity": "sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=", - "dev": true, - "requires": { - "lodash._objecttypes": "~2.4.1" - } - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true - }, - "lodash.keys": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz", - "integrity": "sha1-SN6kbfj/djKxDXBrissmWR4rNyc=", - "dev": true, - "requires": { - "lodash._isnative": "~2.4.1", - "lodash._shimkeys": "~2.4.1", - "lodash.isobject": "~2.4.1" - } - }, - "lodash.noop": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash.noop/-/lodash.noop-3.0.1.tgz", - "integrity": "sha1-OBiPTWUKOkdCWEObluxFsyYXEzw=", - "dev": true - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", - "dev": true - }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "lodash.values": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz", - "integrity": "sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=", - "dev": true, - "requires": { - "lodash.keys": "~2.4.1" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", - "dev": true, - "requires": { - "es5-ext": "~0.10.2" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "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-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" - } - }, - "marked": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.5.2.tgz", - "integrity": "sha512-fdZvBa7/vSQIZCi4uuwo2N3q+7jJURpMVCcbaX0S1Mg65WZ5ilXvC67MviJAsdjqqgD+CEq4RKo5AYGgINkVAA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "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" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.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": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "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.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dev": true, - "requires": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - } - } - }, - "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.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": 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" - } - }, - "nash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/nash/-/nash-3.0.0.tgz", - "integrity": "sha512-M5SahEycXUmko3zOvsBkF6p94CWLhnyy9hfpQ9Qzp+rQkQ8D1OaTlfTl1OBWktq9Fak3oDXKU+ev7tiMaMu+1w==", - "dev": true, - "requires": { - "async": "^1.3.0", - "flat-arguments": "^1.0.0", - "lodash": "^4.17.5", - "minimist": "^1.1.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - } - } - }, - "natives": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", - "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - }, - "node-forge": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", - "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "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-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" - } - }, - "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" - } - } - } - }, - "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" - } - }, - "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" - } - }, - "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.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "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" - } - }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", - "dev": true, - "requires": { - "is-wsl": "^1.1.0" - } - }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "dev": true, - "requires": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.1.2", - "object-assign": "^4.0.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" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.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" - } - }, - "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 - } - } - }, - "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-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 - }, - "package-json": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", - "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", - "dev": true, - "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "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-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-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "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": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pkginfo": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz", - "integrity": "sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=", - "dev": true - }, - "portfinder": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", - "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "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 - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", - "dev": true - }, - "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", - "dev": true - }, - "prismic-dom": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/prismic-dom/-/prismic-dom-2.2.3.tgz", - "integrity": "sha512-7jwRBbqkll9BPkS4QAQttRaENmAWR9s4PWGGmi7ifobs1J0kYDCrn8PxJ99cywQJQea0jWgAVzOfJhkMmIF8wQ==", - "requires": { - "escape-html": "1.0.3", - "prismic-helpers": "^1.0.3", - "prismic-richtext": "^1.0.3" - } - }, - "prismic-helpers": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/prismic-helpers/-/prismic-helpers-1.0.3.tgz", - "integrity": "sha512-eGCSflFwsWeXe7BdqWWGjjoaq1SPr61Y55xIUkgYumKFmfJsK9TVcSkRp0rdwW0hGnnDSRvjJwIo2kkDwG7KxA==" - }, - "prismic-javascript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prismic-javascript/-/prismic-javascript-2.7.1.tgz", - "integrity": "sha512-4Mm2jBtQzjwN57est94wKFR6twvs3AhKx0BOR2IztUFyUEJhIp6iFHXNMQqTMP/q4cZ56hL0BtK5ecBkylNcyA==", - "requires": { - "cross-fetch": "^2.2.3", - "promise-polyfill": "8.0.0" - } - }, - "prismic-richtext": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/prismic-richtext/-/prismic-richtext-1.0.3.tgz", - "integrity": "sha512-ZM45dVPL713+oDpt8ysWRY2pw3esBxRrqBlUO+q/T0WK0SNVSq29tQYhVdIALd8hRfF7X1lfpW0Q0YymEdh0AA==", - "requires": { - "ramda": "^0.26.1", - "uuid": "^3.3.2" - } - }, - "prismjs": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.16.0.tgz", - "integrity": "sha512-OA4MKxjFZHSvZcisLGe14THYsug/nF6O1f0pAJc0KN0wTyAcLqmsbE+lTGKSpyh+9pEW57+k6pg2AfYR+coyHA==", - "dev": true, - "requires": { - "clipboard": "^2.0.0" - } - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, - "promise-polyfill": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-8.0.0.tgz", - "integrity": "sha512-QGmPnw2hDEaRS6freHynJ7nfS1nDg0/P0c/CGglA43utoJjYQMiY9ojEpK0HaJ4wbUztdmwqQRlEfGWdsEQ5uQ==" - }, - "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", - "dev": true, - "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - } - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==", - "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.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true - }, - "ramda": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", - "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==" - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": 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" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true - }, - "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" - } - }, - "registry-auth-token": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", - "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", - "dev": true, - "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" - } - }, - "registry-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", - "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", - "dev": true, - "requires": { - "rc": "^1.0.1" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "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 - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "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 - }, - "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 - }, - "retry-request": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-3.3.2.tgz", - "integrity": "sha512-WIiGp37XXDC6e7ku3LFoi7LCL/Gs9luGeeqvbPRb+Zl6OQMw4RCRfSaW+aLfE6lhz1R941UavE6Svl3Dm5xGIQ==", - "dev": true, - "requires": { - "request": "^2.81.0", - "through2": "^2.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "router": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/router/-/router-1.3.5.tgz", - "integrity": "sha512-kozCJZUhuSJ5VcLhSb3F8fsmGXy+8HaDbKCAerR1G6tq3mnMZFMuSohbFvGv1c5oMFipijDjRZuuN/Sq5nMf3g==", - "dev": true, - "requires": { - "array-flatten": "3.0.0", - "debug": "2.6.9", - "methods": "~1.1.2", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "setprototypeof": "1.2.0", - "utils-merge": "1.0.1" - }, - "dependencies": { - "array-flatten": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", - "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - } - } - }, - "rsvp": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", - "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==", - "dev": true - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "rxjs": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", - "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "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 - }, - "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 - }, - "select": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", - "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-diff": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", - "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", - "dev": true, - "requires": { - "semver": "^5.0.3" - } - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "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.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "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 - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "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 - }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "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" - } - } - } - }, - "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" - } - } - } - }, - "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" - }, - "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" - } - } - } - }, - "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-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-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 - }, - "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.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "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" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "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.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "string-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", - "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0" - }, - "dependencies": { - "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" - } - } - } - }, - "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" - }, - "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 - }, - "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" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - } - } - }, - "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-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 - }, - "superstatic": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-6.0.4.tgz", - "integrity": "sha512-Nfli9mSPa9fJloKuDeUOdqC1lcw4c4SnxiWPB8s7Yn1iYo7Ja3pj7qc8AXMqHVqn/Kf7QsxBjAeOJTpuJ0mcrQ==", - "dev": true, - "requires": { - "as-array": "^2.0.0", - "async": "^1.5.2", - "basic-auth-connect": "^1.0.0", - "chalk": "^1.1.3", - "char-spinner": "^1.0.1", - "compare-semver": "^1.0.0", - "compression": "^1.7.0", - "connect": "^3.6.2", - "connect-query": "^1.0.0", - "destroy": "^1.0.4", - "fast-url-parser": "^1.1.3", - "fs-extra": "^0.30.0", - "glob": "^7.1.2", - "glob-slasher": "^1.0.1", - "home-dir": "^1.0.0", - "is-url": "^1.2.2", - "join-path": "^1.1.1", - "lodash": "^4.17.4", - "mime-types": "^2.1.16", - "minimatch": "^3.0.4", - "morgan": "^1.8.2", - "nash": "^3.0.0", - "on-finished": "^2.2.0", - "on-headers": "^1.0.0", - "path-to-regexp": "^1.7.0", - "router": "^1.3.1", - "rsvp": "^3.6.2", - "string-length": "^1.0.0", - "try-require": "^1.0.0", - "update-notifier": "^2.5.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 - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "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" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "requires": { - "isarray": "0.0.1" - } - }, - "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" - } - }, - "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 - } - } - }, - "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" - } - }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "term-size": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", - "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", - "dev": true, - "requires": { - "execa": "^0.7.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", - "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", - "dev": true, - "requires": { - "readable-stream": "~2.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "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 - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true - }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", - "dev": true, - "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" - } - }, - "tiny-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", - "dev": true, - "optional": 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-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "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" - }, - "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" - } - } - } - }, - "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" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "topo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/topo/-/topo-2.0.2.tgz", - "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", - "dev": true, - "requires": { - "hoek": "4.x.x" - } - }, - "toxic": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toxic/-/toxic-1.0.1.tgz", - "integrity": "sha512-WI3rIGdcaKULYg7KVoB0zcjikqvcYYvcuT6D89bFPz2rVR0Rl0PK6x8/X62rtdLtBKIE985NzVf/auTtGegIIg==", - "dev": true, - "requires": { - "lodash": "^4.17.10" - } - }, - "try-require": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/try-require/-/try-require-1.2.1.tgz", - "integrity": "sha1-NEiaLKwMCcHMEO2RugEVlNQzO+I=", - "dev": true - }, - "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "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 - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", - "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" - } - } - } - }, - "unique-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", - "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", - "dev": true, - "requires": { - "crypto-random-string": "^1.0.0" - } - }, - "universal-analytics": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.20.tgz", - "integrity": "sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw==", - "dev": true, - "requires": { - "debug": "^3.0.0", - "request": "^2.88.0", - "uuid": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "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 - } - } - }, - "unzip-response": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", - "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", - "dev": true - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "update-notifier": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", - "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", - "dev": true, - "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" - }, - "dependencies": { - "configstore": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", - "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", - "dev": true, - "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" - } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "xdg-basedir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", - "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", - "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 - }, - "url-join": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", - "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=", - "dev": true - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "dev": true, - "requires": { - "prepend-http": "^1.0.1" - } - }, - "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==" - }, - "valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=", - "dev": true - }, - "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" - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", - "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", - "dev": true, - "requires": { - "string-width": "^2.1.1" - } - }, - "winston": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-1.1.2.tgz", - "integrity": "sha1-aO3Xaf951PlSjPDl2AAhqt5nSAw=", - "dev": true, - "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "pkginfo": "0.3.x", - "stack-trace": "0.0.x" - }, - "dependencies": { - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", - "dev": true - } - } - }, - "workbox-background-sync": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-3.6.3.tgz", - "integrity": "sha512-ypLo0B6dces4gSpaslmDg5wuoUWrHHVJfFWwl1udvSylLdXvnrfhFfriCS42SNEe5lsZtcNZF27W/SMzBlva7Q==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-broadcast-cache-update": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.6.3.tgz", - "integrity": "sha512-pJl4lbClQcvp0SyTiEw0zLSsVYE1RDlCPtpKnpMjxFtu8lCFTAEuVyzxp9w7GF4/b3P4h5nyQ+q7V9mIR7YzGg==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-build": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-3.4.1.tgz", - "integrity": "sha512-Qi04XdHjkXbRN0CV5XO1oqDWbJSIm7VYhxmxjtnVcKK8PrMT6rOUFUi9ziDI+8UQgcXbLK4ZChWf2ptZS1/MbA==", - "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "common-tags": "^1.4.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.2", - "joi": "^11.1.1", - "lodash.template": "^4.4.0", - "pretty-bytes": "^4.0.2", - "workbox-background-sync": "^3.4.1", - "workbox-broadcast-cache-update": "^3.4.1", - "workbox-cache-expiration": "^3.4.1", - "workbox-cacheable-response": "^3.4.1", - "workbox-core": "^3.4.1", - "workbox-google-analytics": "^3.4.1", - "workbox-navigation-preload": "^3.4.1", - "workbox-precaching": "^3.4.1", - "workbox-range-requests": "^3.4.1", - "workbox-routing": "^3.4.1", - "workbox-strategies": "^3.4.1", - "workbox-streams": "^3.4.1", - "workbox-sw": "^3.4.1" - }, - "dependencies": { - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "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" - } - } - } - }, - "workbox-cache-expiration": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-cache-expiration/-/workbox-cache-expiration-3.6.3.tgz", - "integrity": "sha512-+ECNph/6doYx89oopO/UolYdDmQtGUgo8KCgluwBF/RieyA1ZOFKfrSiNjztxOrGJoyBB7raTIOlEEwZ1LaHoA==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-cacheable-response": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-3.6.3.tgz", - "integrity": "sha512-QpmbGA9SLcA7fklBLm06C4zFg577Dt8u3QgLM0eMnnbaVv3rhm4vbmDpBkyTqvgK/Ly8MBDQzlXDtUCswQwqqg==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-core": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-3.6.3.tgz", - "integrity": "sha512-cx9cx0nscPkIWs8Pt98HGrS9/aORuUcSkWjG25GqNWdvD/pSe7/5Oh3BKs0fC+rUshCiyLbxW54q0hA+GqZeSQ==", - "dev": true - }, - "workbox-google-analytics": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-3.6.3.tgz", - "integrity": "sha512-RQBUo/6SXtIaQTRFj4RQZ9e1gAl7D8oS5S+Hi173Kk70/BgJjzPwXpC5A249Jv5YfkCOLMQCeF9A27BiD0b0ig==", - "dev": true, - "requires": { - "workbox-background-sync": "^3.6.3", - "workbox-core": "^3.6.3", - "workbox-routing": "^3.6.3", - "workbox-strategies": "^3.6.3" - } - }, - "workbox-navigation-preload": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-3.6.3.tgz", - "integrity": "sha512-dd26xTX16DUu0i+MhqZK/jQXgfIitu0yATM4jhRXEmpMqQ4MxEeNvl2CgjDMOHBnCVMax+CFZQWwxMx/X/PqCw==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-precaching": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-3.6.3.tgz", - "integrity": "sha512-aBqT66BuMFviPTW6IpccZZHzpA8xzvZU2OM1AdhmSlYDXOJyb1+Z6blVD7z2Q8VNtV1UVwQIdImIX+hH3C3PIw==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-range-requests": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-3.6.3.tgz", - "integrity": "sha512-R+yLWQy7D9aRF9yJ3QzwYnGFnGDhMUij4jVBUVtkl67oaVoP1ymZ81AfCmfZro2kpPRI+vmNMfxxW531cqdx8A==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-routing": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-3.6.3.tgz", - "integrity": "sha512-bX20i95OKXXQovXhFOViOK63HYmXvsIwZXKWbSpVeKToxMrp0G/6LZXnhg82ijj/S5yhKNRf9LeGDzaqxzAwMQ==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-strategies": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-3.6.3.tgz", - "integrity": "sha512-Pg5eulqeKet2y8j73Yw6xTgLdElktcWExGkzDVCGqfV9JCvnGuEpz5eVsCIK70+k4oJcBCin9qEg3g3CwEIH3g==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-streams": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-3.6.3.tgz", - "integrity": "sha512-rqDuS4duj+3aZUYI1LsrD2t9hHOjwPqnUIfrXSOxSVjVn83W2MisDF2Bj+dFUZv4GalL9xqErcFW++9gH+Z27w==", - "dev": true, - "requires": { - "workbox-core": "^3.6.3" - } - }, - "workbox-sw": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-3.6.3.tgz", - "integrity": "sha512-IQOUi+RLhvYCiv80RP23KBW/NTtIvzvjex28B8NW1jOm+iV4VIu3VXKXTA6er5/wjjuhmtB28qEAUqADLAyOSg==", - "dev": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, - "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" - } - } - } -} diff --git a/site/package.json b/site/package.json deleted file mode 100644 index 5fc11248f..000000000 --- a/site/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "capacitor-site", - "private": true, - "version": "0.0.1", - "description": "Capacitor Site", - "scripts": { - "docs": "tsc --p ./scripts && node ./scripts/markdown-to-html && cd ../core && npm run docs", - "site-structure": "tsc --p ./scripts && node ./scripts/site-structure", - "build-firebase-config": "node scripts/host-to-firebase.js", - "build": "npm run site-structure && npm run docs && stencil build --prerender && npm run build-firebase-config", - "deploy": "npm run build && firebase deploy", - "start": "npm run site-structure && npm run docs && stencil build --dev --watch --serve", - "serve": "stencil build --dev --watch" - }, - "devDependencies": { - "@stencil/core": "^1.13.0", - "@stencil/router": "^1.0.1", - "@stencil/sass": "^1.3.1", - "@stencil/state-tunnel": "1.0.1", - "@stencil/utils": "0.0.5", - "@types/glob": "^7.1.1", - "@types/marked": "^0.6.5", - "@types/prismjs": "^1.9.0", - "copy-text-to-clipboard": "^1.0.4", - "firebase-tools": "^6.12.0", - "front-matter": "^3.2.1", - "glob": "^7.1.6", - "marked": "^0.5.2", - "natives": "^1.1.6", - "node-fetch": "^2.6.0", - "prismjs": "1.16.0", - "workbox-build": "3.4.1" - }, - "author": "Ionic Team", - "license": "MIT", - "repository": { - "type": "git", - "url": "git+https://github.com/ionic-team/capacitor.git" - }, - "bugs": { - "url": "https://github.com/ionic-team/capacitor" - }, - "resolutions": { - "natives": "1.1.3" - }, - "homepage": "https://github.com/ionic-team/capacitor", - "dependencies": { - "dotenv": "^8.0.0", - "prismic-dom": "^2.2.3", - "prismic-javascript": "^2.7.1" - } -} diff --git a/site/readme.md b/site/readme.md deleted file mode 100644 index 579c258f7..000000000 --- a/site/readme.md +++ /dev/null @@ -1,11 +0,0 @@ -![Built With Stencil](https://img.shields.io/badge/-Built%20With%20Stencil-16161d.svg?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjIuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIgNTEyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI%2BCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI%2BCgkuc3Qwe2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU%2BCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik00MjQuNywzNzMuOWMwLDM3LjYtNTUuMSw2OC42LTkyLjcsNjguNkgxODAuNGMtMzcuOSwwLTkyLjctMzAuNy05Mi43LTY4LjZ2LTMuNmgzMzYuOVYzNzMuOXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTQyNC43LDI5Mi4xSDE4MC40Yy0zNy42LDAtOTIuNy0zMS05Mi43LTY4LjZ2LTMuNkgzMzJjMzcuNiwwLDkyLjcsMzEsOTIuNyw2OC42VjI5Mi4xeiIvPgo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDI0LjcsMTQxLjdIODcuN3YtMy42YzAtMzcuNiw1NC44LTY4LjYsOTIuNy02OC42SDMzMmMzNy45LDAsOTIuNywzMC43LDkyLjcsNjguNlYxNDEuN3oiLz4KPC9zdmc%2BCg%3D%3D&colorA=16161d&style=flat-square) - -# Stencil Site - -The [Stencil site](https://stenciljs.com/) is the place for documentation on how to use Stencil. - -## Contributing - -Ensure you're using recent versions of `npm 5` and `node 8`. - -Then run `npm install`, and then `npm run dev` to launch the site in development mode. diff --git a/site/scripts/host-to-firebase.js b/site/scripts/host-to-firebase.js deleted file mode 100644 index 9f595f2fd..000000000 --- a/site/scripts/host-to-firebase.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const util_1 = require("util"); -const fs_1 = __importDefault(require("fs")); -const readFile = util_1.promisify(fs_1.default.readFile); -const writeFile = util_1.promisify(fs_1.default.writeFile); -const HOSTCONFIG_SRC = './www/host.config.json'; -const FIREBASE_SRC = './firebase-base.json'; -const FIREBASE_DEST = './firebase.json'; -(async function () { - const hostDataSrc = await readFile(HOSTCONFIG_SRC, 'utf-8'); - const hostData = JSON.parse(hostDataSrc); - const firebaseDataSrc = await readFile(FIREBASE_SRC, 'utf-8'); - const firebaseData = JSON.parse(firebaseDataSrc); - const headerData = hostData.hosting.rules; - const fireBaseHeaders = headerData.map(entry => { - const headers = entry.headers.map(header => ({ - "key": header.name, - "value": header.value - })); - return { - source: entry.include, - headers - }; - }); - const finalData = { - hosting: Object.assign(Object.assign({}, firebaseData.hosting), { headers: fireBaseHeaders }) - }; - await writeFile(FIREBASE_DEST, JSON.stringify(finalData, null, 2), { encoding: 'utf8' }); -})(); diff --git a/site/scripts/host-to-firebase.ts b/site/scripts/host-to-firebase.ts deleted file mode 100644 index 028fb9670..000000000 --- a/site/scripts/host-to-firebase.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { promisify } from 'util'; -import fs from 'fs'; - -const readFile = promisify(fs.readFile); -const writeFile = promisify(fs.writeFile); - -interface Hosting { - hosting: { - rules: { - include: string; - headers: { - name: string; - value: string; - }[]; - }[]; - } -} - -interface FirebaseConfig { - hosting: { - public: string, - rewrites?: { - source: string, - destination: string - }[]; - redirects?: { - source: string, - destination: string - }[]; - headers?: { - source: string; - headers: { - key: string; - value: string; - }[]; - }[]; - } -} - -const HOSTCONFIG_SRC = './www/host.config.json'; -const FIREBASE_SRC = './firebase-base.json'; -const FIREBASE_DEST = './firebase.json'; - -(async function() { - const hostDataSrc = await readFile(HOSTCONFIG_SRC, 'utf-8'); - const hostData: Hosting = JSON.parse(hostDataSrc); - const firebaseDataSrc = await readFile(FIREBASE_SRC, 'utf-8'); - const firebaseData: FirebaseConfig = JSON.parse(firebaseDataSrc); - - const headerData = hostData.hosting.rules; - - const fireBaseHeaders = headerData.map(entry => { - const headers = entry.headers.map(header => ({ - "key": header.name, - "value": header.value - })); - - return { - source: entry.include, - headers - }; - }); - - const finalData: FirebaseConfig = { - hosting: { - ...firebaseData.hosting, - headers: fireBaseHeaders - } - }; - await writeFile(FIREBASE_DEST, JSON.stringify(finalData, null, 2), { encoding: 'utf8' }); -})(); - - diff --git a/site/scripts/markdown-renderer.js b/site/scripts/markdown-renderer.js deleted file mode 100644 index 5d36c0b2d..000000000 --- a/site/scripts/markdown-renderer.js +++ /dev/null @@ -1,166 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const prismjs_1 = __importDefault(require("prismjs")); -const path_1 = __importDefault(require("path")); -const components_1 = __importDefault(require("prismjs/components/")); -const languages = [ - 'bash', - 'diff', - 'css', - 'html', - 'java', - 'json', - 'json5', - 'markup', - 'objectivec', - 'shell', - 'swift', - 'tsx', - 'typescript', - 'xml' -]; -components_1.default(languages); -function findItem(siteStructureList, filePath) { - for (const item of siteStructureList) { - if (item.filePath === filePath) { - return item; - } - else if (item.children && item.children.length > 0) { - const foundItem = findItem(item.children, filePath); - if (foundItem != null) { - return foundItem; - } - } - } -} -exports.findItem = findItem; -function listFactory(renderer, metadataList) { - let lastItem = null; - let activeList = []; - const prevList = renderer.list; - const prevListitem = renderer.listitem; - const prevLink = renderer.link; - renderer.list = function (body, ordered) { - lastItem = { - type: 'list' - }; - return prevList.call(this, body, ordered); - }; - renderer.listitem = function (text) { - if (lastItem.type === 'list') { - const [itemText] = text.split('${text}`; - } - } - return prevLink.call(this, href, title, text); - }; -} -exports.localizeMarkdownLink = localizeMarkdownLink; -function collectHeadingMetadata(renderer, metadata) { - renderer.heading = function (text, level, raw) { - const id = raw.toLowerCase().replace(/[^\w]+/g, '-'); - metadata.headings.push({ - id, - level, - text - }); - return ` - - ${(level !== 1) ? `` : ''} - ${text} - ${(level !== 1) ? `` : ''} - -`; - }; -} -exports.collectHeadingMetadata = collectHeadingMetadata; -function changeCodeCreation(renderer) { - function highlight(code, lang) { - if (lang != null && languages.indexOf(lang) !== -1) { - return prismjs_1.default.highlight(code, prismjs_1.default.languages[lang]); - } - return code; - } - renderer.code = function (code, lang, escaped) { - const hcl = []; - code = code - .split('\n') - .map((line, index) => { - if (line.charAt(0) === '|') { - hcl.push(index + 1); - return line.substring(1); - } - return line; - }) - .join('\n'); - const out = highlight(code, lang); - if (out != null) { - escaped = true; - code = out; - } - if (!lang) { - return `
${(escaped ? code : escape(code))}
`; - } - return ` - 0 ? `lines="${hcl.join()}"` : ``}> -
${(escaped ? code : escape(code))}
-
- `; - }; -} -exports.changeCodeCreation = changeCodeCreation; diff --git a/site/scripts/markdown-renderer.ts b/site/scripts/markdown-renderer.ts deleted file mode 100644 index 1a362275f..000000000 --- a/site/scripts/markdown-renderer.ts +++ /dev/null @@ -1,170 +0,0 @@ -import marked from 'marked'; -import Prism from 'prismjs'; -import path from 'path'; -import loadLanguages from 'prismjs/components/'; -import { SiteStructureItem, MarkdownContent } from '../src/global/definitions'; - -const languages = [ - 'bash', - 'diff', - 'css', - 'html', - 'java', - 'json', - 'json5', - 'markup', - 'objectivec', - 'shell', - 'swift', - 'tsx', - 'typescript', - 'xml' -]; -loadLanguages(languages); - -export function findItem(siteStructureList: SiteStructureItem[], filePath: string): SiteStructureItem { - for (const item of siteStructureList) { - if (item.filePath === filePath) { - return item; - } else if (item.children && item.children.length > 0) { - const foundItem = findItem(item.children, filePath); - if (foundItem != null) { - return foundItem; - } - } - } -} - -export function listFactory(renderer: marked.Renderer, metadataList: SiteStructureItem[]) { - let lastItem: any = null; - let activeList = []; - const prevList = renderer.list; - const prevListitem = renderer.listitem; - const prevLink = renderer.link; - - renderer.list = function(body, ordered) { - lastItem = { - type: 'list' - }; - return prevList.call(this, body, ordered); - }; - renderer.listitem = function(text) { - if (lastItem.type === 'list') { - const [ itemText ] = text.split('${text}`; - } - } - return prevLink.call(this, href, title, text); - } -} - -export function collectHeadingMetadata(renderer: marked.Renderer, metadata: MarkdownContent) { - renderer.heading = function(text, level, raw) { - const id = raw.toLowerCase().replace(/[^\w]+/g, '-'); - metadata.headings.push({ - id, - level, - text - }); - - return ` - - ${(level !== 1) ? `` : ''} - ${text} - ${(level !== 1) ? `` : ''} - -`; - }; -} - -export function changeCodeCreation(renderer: marked.Renderer) { - function highlight(code: string, lang?: string) { - if (lang != null && languages.indexOf(lang) !== -1) { - return Prism.highlight(code, Prism.languages[lang]); - } - return code; - } - - renderer.code = function (code, lang, escaped) { - const hcl = []; - code = code - .split('\n') - .map((line, index) => { - if (line.charAt(0) === '|') { - hcl.push(index + 1); - return line.substring(1); - } - return line; - }) - .join('\n'); - - const out = highlight(code, lang); - - if (out != null) { - escaped = true; - code = out; - } - - if (!lang) { - return `
${(escaped ? code : escape(code))}
`; - } - - return ` - 0 ? `lines="${hcl.join()}"`: ``}> -
${(escaped ? code : escape(code))}
-
- `; - }; -} diff --git a/site/scripts/markdown-to-html.js b/site/scripts/markdown-to-html.js deleted file mode 100644 index 4954a0577..000000000 --- a/site/scripts/markdown-to-html.js +++ /dev/null @@ -1,96 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const marked_1 = __importDefault(require("marked")); -const glob_1 = __importDefault(require("glob")); -const util_1 = require("util"); -const path_1 = __importDefault(require("path")); -const fs_1 = __importDefault(require("fs")); -const url_1 = __importDefault(require("url")); -const utils_1 = require("@stencil/utils"); -const markdown_renderer_1 = require("./markdown-renderer"); -const front_matter_1 = __importDefault(require("front-matter")); -const node_fetch_1 = __importDefault(require("node-fetch")); -require('dotenv').config(); -const readFile = util_1.promisify(fs_1.default.readFile); -const writeFile = util_1.promisify(fs_1.default.writeFile); -const globAsync = util_1.promisify(glob_1.default); -const DESTINATION_DIR = './src/assets/docs-content'; -const SOURCE_DIR = './docs-md'; -const SITE_STRUCTURE_FILE = './src/assets/docs-structure.json'; -(async function () { - const siteStructure = await readFile(SITE_STRUCTURE_FILE, { encoding: 'utf8' }); - const siteStructureJson = JSON.parse(siteStructure); - console.log(`running glob: ${SOURCE_DIR}/**/*.md`); - const files = await globAsync(`${SOURCE_DIR}/**/*.md`, {}); - await utils_1.rimraf(DESTINATION_DIR); - const filePromises = files.map(async (filePath) => { - if (filePath === './docs-md/README.md') { - return Promise.resolve(); - } - let markdownMetadata = {}; - const jsonFileName = path_1.default.relative(SOURCE_DIR, filePath); - const destinationFileName = path_1.default.join(DESTINATION_DIR, path_1.default.dirname(jsonFileName), path_1.default.basename(jsonFileName, '.md') + '.json'); - markdownMetadata.headings = []; - const markdownContents = await readFile(filePath, { encoding: 'utf8' }); - try { - let parsedMarkdown = front_matter_1.default(markdownContents); - parsedMarkdown = await getGithubData(filePath, parsedMarkdown); - const renderer = new marked_1.default.Renderer(); - markdown_renderer_1.collectHeadingMetadata(renderer, markdownMetadata); - markdown_renderer_1.changeCodeCreation(renderer); - markdown_renderer_1.localizeMarkdownLink(renderer, destinationFileName.replace('src', ''), siteStructureJson); - let htmlContents = marked_1.default(parsedMarkdown.body, { - renderer, - headerIds: true - }); - await utils_1.mkdirp(path_1.default.join(DESTINATION_DIR, path_1.default.dirname(jsonFileName))); - await writeFile(destinationFileName, JSON.stringify(Object.assign(Object.assign(Object.assign({}, parsedMarkdown.attributes), markdownMetadata), { srcPath: filePath, content: htmlContents })), { - encoding: 'utf8' - }); - } - catch (e) { - console.error(filePath); - throw e; - } - }); - await Promise.all(filePromises); - console.log(`successfully converted ${filePromises.length} files`); -})(); -async function getGithubData(filePath, parsedMarkdown) { - const since = new Date('2018-06-01').toISOString(); - try { - const request = await node_fetch_1.default(url_1.default.format({ - protocol: 'https', - hostname: 'api.github.com', - pathname: 'repos/ionic-team/stencil-site/commits', - query: { - access_token: process.env.GITHUB_TOKEN, - since: since, - path: filePath - } - })); - if (request.status === 403) { - console.warn(`Ignoring commit history for ${filePath} due to GH API limit. To resolve, add the GITHUB_TOKEN envar.`); - return parsedMarkdown; - } - const commits = await request.json(); - const contributors = Array.from(new Set(commits.map(commit => commit.author.login))); - const lastUpdated = commits.length ? commits[0].commit.author.date : since; - const attributes = parsedMarkdown.attributes = parsedMarkdown.attributes || {}; - attributes.lastUpdated = lastUpdated; - attributes.contributors = attributes.contributors || []; - contributors.forEach(contributor => { - if (!attributes.contributors.includes(contributor)) { - attributes.contributors.push(contributor); - } - }); - console.log('filePath:', filePath, 'contributors:', attributes.contributors.length, 'lastUpdated:', lastUpdated); - } - catch (e) { - console.log(e); - } - return parsedMarkdown; -} diff --git a/site/scripts/markdown-to-html.ts b/site/scripts/markdown-to-html.ts deleted file mode 100644 index bb8d7e9e3..000000000 --- a/site/scripts/markdown-to-html.ts +++ /dev/null @@ -1,129 +0,0 @@ -import marked from 'marked'; -import glob from 'glob'; -import { promisify } from 'util'; -import path from 'path'; -import fs from 'fs'; -import url from 'url'; -import { rimraf, mkdirp } from '@stencil/utils'; -import { collectHeadingMetadata, changeCodeCreation, localizeMarkdownLink } from './markdown-renderer'; -import frontMatter from 'front-matter'; -import fetch from 'node-fetch'; -import { SiteStructureItem, MarkdownContent } from '../src/global/definitions'; - -require('dotenv').config(); - -const readFile = promisify(fs.readFile); -const writeFile = promisify(fs.writeFile); -const globAsync = promisify(glob); - -const DESTINATION_DIR = './src/assets/docs-content'; -const SOURCE_DIR = './docs-md'; -const SITE_STRUCTURE_FILE= './src/assets/docs-structure.json'; - - -(async function() { - const siteStructure = await readFile(SITE_STRUCTURE_FILE, { encoding: 'utf8' }); - const siteStructureJson: SiteStructureItem[] = JSON.parse(siteStructure); - console.log(`running glob: ${SOURCE_DIR}/**/*.md`); - const files = await globAsync(`${SOURCE_DIR}/**/*.md`, {}); - - await rimraf(DESTINATION_DIR); - - const filePromises = files.map(async (filePath) => { - if (filePath === './docs-md/README.md') { - return Promise.resolve(); - } - let markdownMetadata: MarkdownContent = {}; - const jsonFileName = path.relative(SOURCE_DIR, filePath); - const destinationFileName = path.join( - DESTINATION_DIR, - path.dirname(jsonFileName), - path.basename(jsonFileName, '.md') + '.json' - ); - markdownMetadata.headings = []; - - const markdownContents = await readFile(filePath, { encoding: 'utf8' }); - - try { - let parsedMarkdown = frontMatter(markdownContents); - parsedMarkdown = await getGithubData(filePath, parsedMarkdown); - - const renderer = new marked.Renderer(); - - collectHeadingMetadata(renderer, markdownMetadata); - changeCodeCreation(renderer); - localizeMarkdownLink(renderer, destinationFileName.replace('src',''), siteStructureJson); - let htmlContents = marked(parsedMarkdown.body, { - renderer, - headerIds: true - }); - - await mkdirp(path.join( - DESTINATION_DIR, - path.dirname(jsonFileName) - )); - - await writeFile(destinationFileName, JSON.stringify({ - ...parsedMarkdown.attributes as {}, - ...markdownMetadata, - srcPath: filePath, - content: htmlContents - }), { - encoding: 'utf8' - }); - - } catch (e) { - console.error(filePath); - throw e; - } - }); - - await Promise.all(filePromises); - - console.log(`successfully converted ${filePromises.length} files`); -})(); - - -async function getGithubData(filePath: string, parsedMarkdown: any) { - const since = new Date('2018-06-01').toISOString(); - - try { - const request = await fetch(url.format({ - protocol: 'https', - hostname: 'api.github.com', - pathname: 'repos/ionic-team/stencil-site/commits', - query: { - access_token: process.env.GITHUB_TOKEN, - since: since, - path: filePath - } - })); - - if (request.status === 403) { - console.warn(`Ignoring commit history for ${filePath} due to GH API limit. To resolve, add the GITHUB_TOKEN envar.`); - return parsedMarkdown; - } - - const commits = await request.json(); - const contributors = Array.from(new Set(commits.map(commit => commit.author.login))); - const lastUpdated = commits.length ? commits[0].commit.author.date : since; - - const attributes = parsedMarkdown.attributes = parsedMarkdown.attributes || {}; - attributes.lastUpdated = lastUpdated; - - attributes.contributors = attributes.contributors || []; - - contributors.forEach(contributor => { - if (!attributes.contributors.includes(contributor)) { - attributes.contributors.push(contributor); - } - }); - - console.log('filePath:', filePath, 'contributors:', attributes.contributors.length, 'lastUpdated:', lastUpdated); - - } catch (e) { - console.log(e); - } - - return parsedMarkdown; -} diff --git a/site/scripts/site-structure.js b/site/scripts/site-structure.js deleted file mode 100644 index d13e09da9..000000000 --- a/site/scripts/site-structure.js +++ /dev/null @@ -1,69 +0,0 @@ -"use strict"; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -var __importStar = (this && this.__importStar) || function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result["default"] = mod; - return result; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const marked_1 = __importDefault(require("marked")); -const util_1 = require("util"); -const fs_1 = __importDefault(require("fs")); -const path_1 = __importStar(require("path")); -const front_matter_1 = __importDefault(require("front-matter")); -const markdown_renderer_1 = require("./markdown-renderer"); -const readFile = util_1.promisify(fs_1.default.readFile); -const writeFile = util_1.promisify(fs_1.default.writeFile); -const DESTINATION_FILE = './src/assets/docs-structure.json'; -const SOURCE_FILE = './docs-md/README.md'; -const ASSETS_DIR = '/assets/docs-content'; -const renderer = new marked_1.default.Renderer(); -(async function () { - const metadataList = []; - const markdownContents = await readFile(SOURCE_FILE, { encoding: 'utf8' }); - try { - markdown_renderer_1.listFactory(renderer, metadataList); - marked_1.default(markdownContents, { - renderer, - }); - } - catch (e) { - throw e; - } - await walkUpdateChildren(metadataList, SOURCE_FILE); - await writeFile(DESTINATION_FILE, JSON.stringify(metadataList, null, 2), { - encoding: 'utf8' - }); -})(); -async function walkUpdateChildren(itemList, sourcePath) { - for (const item of itemList) { - if (item.filePath && item.filePath.indexOf('//') === -1) { - const fullPath = path_1.default.join(path_1.default.dirname(sourcePath), item.filePath); - const url = await getMarkdownFileSitePath(fullPath); - const jsonPath = path_1.default.join(ASSETS_DIR, path_1.dirname(item.filePath), path_1.basename(item.filePath, '.md') + '.json'); - item.url = url; - item.filePath = jsonPath; - } - if (item.children) { - await walkUpdateChildren(item.children, sourcePath); - } - } -} -async function getMarkdownFileSitePath(filePath) { - let markdownContents; - try { - markdownContents = await readFile(filePath, { encoding: 'utf8' }); - } - catch (e) { - return null; - } - if (!markdownContents) { - return null; - } - const metadata = front_matter_1.default(markdownContents); - return (metadata && metadata.attributes ? metadata.attributes.url : null); -} diff --git a/site/scripts/site-structure.ts b/site/scripts/site-structure.ts deleted file mode 100644 index 7727f7dc7..000000000 --- a/site/scripts/site-structure.ts +++ /dev/null @@ -1,71 +0,0 @@ -import marked from 'marked'; -import { promisify } from 'util'; -import fs from 'fs'; -import path, { dirname, basename } from 'path'; -import frontMatter from 'front-matter'; -import { listFactory } from './markdown-renderer'; -import { SiteStructureItem } from '../src/global/definitions'; - -const readFile = promisify(fs.readFile); -const writeFile = promisify(fs.writeFile); - -const DESTINATION_FILE = './src/assets/docs-structure.json'; -const SOURCE_FILE = './docs-md/README.md'; -const ASSETS_DIR = '/assets/docs-content'; - -const renderer = new marked.Renderer(); - -(async function() { - const metadataList: SiteStructureItem[] = []; - const markdownContents = await readFile(SOURCE_FILE, { encoding: 'utf8' }); - - try { - listFactory(renderer, metadataList) - marked(markdownContents, { - renderer, - }); - } catch (e) { - throw e; - } - - await walkUpdateChildren(metadataList, SOURCE_FILE); - await writeFile(DESTINATION_FILE, JSON.stringify(metadataList, null, 2), { - encoding: 'utf8' - }); -})(); - -async function walkUpdateChildren(itemList, sourcePath) { - for (const item of itemList) { - if (item.filePath && item.filePath.indexOf('//') === -1) { - const fullPath = path.join(path.dirname(sourcePath), item.filePath); - const url = await getMarkdownFileSitePath(fullPath); - const jsonPath = path.join( - ASSETS_DIR, - dirname(item.filePath), - basename(item.filePath, '.md') + '.json' - ) - - item.url = url; - item.filePath = jsonPath; - } - if (item.children) { - await walkUpdateChildren(item.children, sourcePath); - } - } -} - -async function getMarkdownFileSitePath(filePath) { - let markdownContents: any; - try { - markdownContents = await readFile(filePath, { encoding: 'utf8' }); - } catch (e) { - return null; - } - - if (!markdownContents) { - return null; - } - const metadata: any = frontMatter(markdownContents); - - return (metadata && metadata.attributes ? metadata.attributes.url : null); -} \ No newline at end of file diff --git a/site/scripts/tsconfig.json b/site/scripts/tsconfig.json deleted file mode 100644 index a8cff0d79..000000000 --- a/site/scripts/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "allowUnreachableCode": false, - "declaration": false, - "experimentalDecorators": true, - "lib": [ - "dom", - "es2017" - ], - "moduleResolution": "node", - "module": "commonjs", - "target": "es2017", - "noUnusedLocals": true, - "noUnusedParameters": true - }, - "include": [ - ".", - ], - "exclude": [ - "node_modules" - ] -} diff --git a/site/src/assets/docs-content/apis/accessibility/api-index.html b/site/src/assets/docs-content/apis/accessibility/api-index.html deleted file mode 100644 index 236495417..000000000 --- a/site/src/assets/docs-content/apis/accessibility/api-index.html +++ /dev/null @@ -1,6 +0,0 @@ -

Table of Contents

    -
  • isScreenReaderEnabled()
  • -
  • removeAllListeners()
  • -
  • speak()
  • -
  • addListener('accessibilityScreenReaderStateChange')
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/accessibility/api.html b/site/src/assets/docs-content/apis/accessibility/api.html deleted file mode 100644 index 8a9e39c56..000000000 --- a/site/src/assets/docs-content/apis/accessibility/api.html +++ /dev/null @@ -1,124 +0,0 @@ -
-
AccessibilityPlugin
- -
-

isScreenReaderEnabled

-
- isScreenReaderEnabled(): Promise<ScreenReaderEnabledResult> -
-
Check if a screen reader is enabled on the device
-
- -
- Returns: Promise<ScreenReaderEnabledResult> -
- -
-
-

removeAllListeners

-
- removeAllListeners(): void -
-
Remove all native listeners for this plugin
-
- -
- Returns: void -
- -
-
-

speak

-
- speak(options: AccessibilitySpeakOptions): Promise<void> -
-
Speak a string with a connected screen reader.
-
-
- options - -AccessibilitySpeakOptions -
- -
- Returns: Promise<void> -
- -
-
-

addListener

-
- addListener(eventName: "accessibilityScreenReaderStateChange", listenerFunc: ScreenReaderStateChangeCallback): PluginListenerHandle -
-
Listen for screen reader state change (on/off)
-
-
- eventName - -"accessibilityScreenReaderStateChange" -
-
- listenerFunc - -ScreenReaderStateChangeCallback -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

ScreenReaderEnabledResult

-
- interface ScreenReaderEnabledResult - { -
- - -
-
-
value - : - boolean; -
-
-} - -
-

AccessibilitySpeakOptions

-
- interface AccessibilitySpeakOptions - { -
- - -
-
// The language to speak the string in, as its [ISO 639-1 Code](https://www.loc.gov/standards/iso639-2/php/code_list.php) (ex: "en"). -Currently only supported on Android.
-
language - ?: - string; -
-
- -
-
// The string to speak
-
value - : - string; -
-
-} - -
-

ScreenReaderStateChangeCallback

-
- type alias ScreenReaderStateChangeCallback - { -
- -} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/app/api-index.html b/site/src/assets/docs-content/apis/app/api-index.html deleted file mode 100644 index 6d8e0e21b..000000000 --- a/site/src/assets/docs-content/apis/app/api-index.html +++ /dev/null @@ -1,12 +0,0 @@ -

Table of Contents

    -
  • canOpenUrl()
  • -
  • exitApp()
  • -
  • getLaunchUrl()
  • -
  • getState()
  • -
  • openUrl()
  • -
  • removeAllListeners()
  • -
  • addListener('appStateChange')
  • -
  • addListener('appUrlOpen')
  • -
  • addListener('appRestoredResult')
  • -
  • addListener('backButton')
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/app/api.html b/site/src/assets/docs-content/apis/app/api.html deleted file mode 100644 index ff61b3a57..000000000 --- a/site/src/assets/docs-content/apis/app/api.html +++ /dev/null @@ -1,225 +0,0 @@ -
-
AppPlugin
- -
-

canOpenUrl

-
- canOpenUrl(options: { url: string }): Promise<{ value: boolean }> -
-
Check if an app can be opened with the given URL
-
-
- options - -{ url: string } -
- -
- Returns: Promise<{ value: boolean }> -
- -
-
-

exitApp

-
- exitApp(): never -
-
Force exit the app. This should only be used in conjunction with the `backButton` handler for Android to -exit the app when navigation is complete.
-
- -
- Returns: never -
- -
-
-

getLaunchUrl

-
- getLaunchUrl(): Promise<AppLaunchUrl> -
-
Get the URL the app was launched with, if any
-
- -
- Returns: Promise<AppLaunchUrl> -
- -
-
-

getState

-
- getState(): Promise<AppState> -
-
Gets the current app state
-
- -
- Returns: Promise<AppState> -
- -
-
-

openUrl

-
- openUrl(options: { url: string }): Promise<{ completed: boolean }> -
-
Open an app with the given URL
-
-
- options - -{ url: string } -
- -
- Returns: Promise<{ completed: boolean }> -
- -
-
-

removeAllListeners

-
- removeAllListeners(): void -
-
Remove all native listeners for this plugin
-
- -
- Returns: void -
- -
-
-

addListener

-
- addListener(eventName: "appStateChange", listenerFunc: (state: AppState) => void): PluginListenerHandle -
-
Listen for changes in the App's active state (whether the app is in the foreground or background)
-
-
- eventName - -"appStateChange" -
-
- listenerFunc - -(state: AppState) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "appUrlOpen", listenerFunc: (data: AppUrlOpen) => void): PluginListenerHandle -
-
Listen for url open events for the app. This handles both custom URL scheme links as well -as URLs your app handles (Universal Links on iOS and App Links on Android)
-
-
- eventName - -"appUrlOpen" -
-
- listenerFunc - -(data: AppUrlOpen) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "appRestoredResult", listenerFunc: (data: AppRestoredResult) => void): PluginListenerHandle -
-
If the app was launched with previously persisted plugin call data, such as on Android -when an activity returns to an app that was closed, this call will return any data -the app was launched with, converted into the form of a result from a plugin call.
-
-
- eventName - -"appRestoredResult" -
-
- listenerFunc - -(data: AppRestoredResult) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "backButton", listenerFunc: (data: AppUrlOpen) => void): PluginListenerHandle -
-
Listen for the hardware back button event (Android only). Listening for this event will disable the -default back button behaviour, so you might want to call `window.history.back()` manually. -If you want to close the app, call `App.exitApp()`.
-
-
- eventName - -"backButton" -
-
- listenerFunc - -(data: AppUrlOpen) => void -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

AppLaunchUrl

-
- interface AppLaunchUrl - { -
- - -
-
-
url - : - string; -
-
-} - -
-

AppState

-
- interface AppState - { -
- - -
-
-
isActive - : - boolean; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/background-task/api-index.html b/site/src/assets/docs-content/apis/background-task/api-index.html deleted file mode 100644 index 9c521d507..000000000 --- a/site/src/assets/docs-content/apis/background-task/api-index.html +++ /dev/null @@ -1,5 +0,0 @@ -

Table of Contents

    -
  • beforeExit()
  • -
  • finish()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/background-task/api.html b/site/src/assets/docs-content/apis/background-task/api.html deleted file mode 100644 index c48dbaa39..000000000 --- a/site/src/assets/docs-content/apis/background-task/api.html +++ /dev/null @@ -1,80 +0,0 @@ -
-
BackgroundTaskPlugin
- -
-

beforeExit

-
- beforeExit(cb: Function): CallbackID -
-
When the app is backgrounded, this method allows you to run a short-lived -background task that will ensure that you -can finish any work your app needs to do (such as finishing an upload -or network request). This is especially important on iOS as any operations -would normally be suspended without initiating a background task.
-
-
- cb - -Function -
the task to run when the app is backgrounded but before it is terminated -
-
- -
- Returns: CallbackID -
- -
-
-

finish

-
- finish(options: { taskId: CallbackID }): void -
-
Notify the OS that the given task is finished and the OS can continue -backgrounding the app.
-
-
- options - -{ taskId: CallbackID } -
- -
- Returns: void -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

CallbackID

-
- type alias CallbackID - { -
- -} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/browser/api-index.html b/site/src/assets/docs-content/apis/browser/api-index.html deleted file mode 100644 index c475ffe30..000000000 --- a/site/src/assets/docs-content/apis/browser/api-index.html +++ /dev/null @@ -1,8 +0,0 @@ -

Table of Contents

    -
  • close()
  • -
  • open()
  • -
  • prefetch()
  • -
  • removeAllListeners()
  • -
  • addListener('browserFinished')
  • -
  • addListener('browserPageLoaded')
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/browser/api.html b/site/src/assets/docs-content/apis/browser/api.html deleted file mode 100644 index f65205d7c..000000000 --- a/site/src/assets/docs-content/apis/browser/api.html +++ /dev/null @@ -1,174 +0,0 @@ -
-
BrowserPlugin
- -
-

close

-
- close(): Promise<void> -
-
Close an open browser. Only works on iOS and Web environment, otherwise is a no-op
-
- -
- Returns: Promise<void> -
- -
-
-

open

-
- open(options: BrowserOpenOptions): Promise<void> -
-
Open a page with the given URL
-
-
- options - -BrowserOpenOptions -
- -
- Returns: Promise<void> -
- -
-
-

prefetch

-
- prefetch(options: BrowserPrefetchOptions): Promise<void> -
-
Hint to the browser that the given URLs will be accessed -to improve initial loading times.
-
-
- options - -BrowserPrefetchOptions -
- -
- Returns: Promise<void> -
- -
-
-

removeAllListeners

-
- removeAllListeners(): void -
-
Remove all native listeners for this plugin
-
- -
- Returns: void -
- -
-
-

addListener

-
- addListener(eventName: "browserFinished", listenerFunc: (info: any) => void): PluginListenerHandle -
- -
-
- eventName - -"browserFinished" -
-
- listenerFunc - -(info: any) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "browserPageLoaded", listenerFunc: (info: any) => void): PluginListenerHandle -
- -
-
- eventName - -"browserPageLoaded" -
-
- listenerFunc - -(info: any) => void -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

BrowserOpenOptions

-
- interface BrowserOpenOptions - { -
- - -
-
// iOS only: The presentation style of the browser. Defaults to fullscreen.
-
presentationStyle - ?: - any; -
-
- -
-
// A hex color to set the toolbar color to.
-
toolbarColor - ?: - string; -
-
- -
-
// The URL to open the browser to
-
url - : - string; -
-
- -
-
// Web only: Optional target for browser open. Follows -the `target` property for window.open. Defaults -to _blank
-
windowName - ?: - string; -
-
-} - -
-

BrowserPrefetchOptions

-
- interface BrowserPrefetchOptions - { -
- - -
-
-
urls - : - string[]; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/camera/api-index.html b/site/src/assets/docs-content/apis/camera/api-index.html deleted file mode 100644 index e0c4dc9f8..000000000 --- a/site/src/assets/docs-content/apis/camera/api-index.html +++ /dev/null @@ -1,4 +0,0 @@ -

Table of Contents

    -
  • getPhoto()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/camera/api.html b/site/src/assets/docs-content/apis/camera/api.html deleted file mode 100644 index 818326bbb..000000000 --- a/site/src/assets/docs-content/apis/camera/api.html +++ /dev/null @@ -1,319 +0,0 @@ -
-
CameraPlugin
- -
-

getPhoto

-
- getPhoto(options: CameraOptions): Promise<CameraPhoto> -
-
Prompt the user to pick a photo from an album, or take a new photo -with the camera.
-
-
- options - -CameraOptions -
- -
- Returns: Promise<CameraPhoto> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

CameraOptions

-
- interface CameraOptions - { -
- - -
-
// Whether to allow the user to crop or make small edits (platform specific)
-
allowEditing - ?: - boolean; -
-
- -
-
// Whether to automatically rotate the image "up" to correct for orientation -in portrait mode -Default: true
-
correctOrientation - ?: - boolean; -
-
- -
-
// iOS only: The default camera direction. By default the rear camera. -Default: CameraDirection.Rear
-
direction - ?: - CameraDirection; -
-
- -
-
// The height of the saved image
-
height - ?: - number; -
-
- -
-
// iOS only: The presentation style of the Camera. Defaults to fullscreen.
-
presentationStyle - ?: - any; -
-
- -
-
-
promptLabelCancel - ?: - string; -
-
- -
-
// If use CameraSource.Prompt only, can change Prompt label. -default: - promptLabelHeader : 'Photo' // iOS only - promptLabelCancel : 'Cancel' // iOS only - promptLabelPhoto : 'From Photos' - promptLabelPicture : 'Take Picture'
-
promptLabelHeader - ?: - string; -
-
- -
-
-
promptLabelPhoto - ?: - string; -
-
- -
-
-
promptLabelPicture - ?: - string; -
-
- -
-
// The quality of image to return as JPEG, from 0-100
-
quality - ?: - number; -
-
- -
-
// How the data should be returned. Currently, only 'Base64', 'DataUrl' or 'Uri' is supported
-
resultType - : - CameraResultType; -
-
- -
-
// Whether to save the photo to the gallery. -If the photo was picked from the gallery, it will only be saved if edited. -Default: false
-
saveToGallery - ?: - boolean; -
-
- -
-
// The source to get the photo from. By default this prompts the user to select -either the photo album or take a photo. -Default: CameraSource.Prompt
-
source - ?: - CameraSource; -
-
- -
-
// The width of the saved image
-
width - ?: - number; -
-
-} - -
-

CameraPhoto

-
- interface CameraPhoto - { -
- - -
-
// The base64 encoded string representation of the image, if using CameraResultType.Base64.
-
base64String - ?: - string; -
-
- -
-
// The url starting with 'data:image/jpeg;base64,' and the base64 encoded string representation of the image, if using CameraResultType.DataUrl.
-
dataUrl - ?: - string; -
-
- -
-
// Exif data, if any, retrieved from the image
-
exif - ?: - any; -
-
- -
-
// The format of the image. Currently, only "jpeg" is supported.
-
format - : - string; -
-
- -
-
// If using CameraResultType.Uri, the path will contain a full, -platform-specific file URL that can be read later using the Filsystem API.
-
path - ?: - string; -
-
- -
-
// webPath returns a path that can be used to set the src attribute of an image for efficient -loading and rendering.
-
webPath - ?: - string; -
-
-} - -
-

CameraDirection

-
- enum CameraDirection - { -
- -
-
-
Front: - "FRONT" -
-
- -
-
-
Rear: - "REAR" -
-
-} - -
-

CameraResultType

-
- enum CameraResultType - { -
- -
-
-
Base64: - "base64" -
-
- -
-
-
DataUrl: - "dataUrl" -
-
- -
-
-
Uri: - "uri" -
-
-} - -
-

CameraSource

-
- enum CameraSource - { -
- -
-
-
Camera: - "CAMERA" -
-
- -
-
-
Photos: - "PHOTOS" -
-
- -
-
-
Prompt: - "PROMPT" -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/clipboard/api-index.html b/site/src/assets/docs-content/apis/clipboard/api-index.html deleted file mode 100644 index 45d7f4a35..000000000 --- a/site/src/assets/docs-content/apis/clipboard/api-index.html +++ /dev/null @@ -1,5 +0,0 @@ -

Table of Contents

    -
  • read()
  • -
  • write()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/clipboard/api.html b/site/src/assets/docs-content/apis/clipboard/api.html deleted file mode 100644 index dfb2b0148..000000000 --- a/site/src/assets/docs-content/apis/clipboard/api.html +++ /dev/null @@ -1,125 +0,0 @@ -
-
ClipboardPlugin
- -
-

read

-
- read(): Promise<ClipboardReadResult> -
-
Read a value from the clipboard (the "paste" action)
-
- -
- Returns: Promise<ClipboardReadResult> -
- -
-
-

write

-
- write(options: ClipboardWrite): Promise<void> -
-
Write a value to the clipboard (the "copy" action)
-
-
- options - -ClipboardWrite -
- -
- Returns: Promise<void> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

ClipboardReadResult

-
- interface ClipboardReadResult - { -
- - -
-
-
type - : - string; -
-
- -
-
-
value - : - string; -
-
-} - -
-

ClipboardWrite

-
- interface ClipboardWrite - { -
- - -
-
-
image - ?: - string; -
-
- -
-
-
label - ?: - string; -
-
- -
-
-
string - ?: - string; -
-
- -
-
-
url - ?: - string; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/device/api-index.html b/site/src/assets/docs-content/apis/device/api-index.html deleted file mode 100644 index 8c890a954..000000000 --- a/site/src/assets/docs-content/apis/device/api-index.html +++ /dev/null @@ -1,6 +0,0 @@ -

Table of Contents

    -
  • getBatteryInfo()
  • -
  • getInfo()
  • -
  • getLanguageCode()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/device/api.html b/site/src/assets/docs-content/apis/device/api.html deleted file mode 100644 index 0b5b8e69f..000000000 --- a/site/src/assets/docs-content/apis/device/api.html +++ /dev/null @@ -1,234 +0,0 @@ -
-
DevicePlugin
- -
-

getBatteryInfo

-
- getBatteryInfo(): Promise<DeviceBatteryInfo> -
-
Return information about the battery
-
- -
- Returns: Promise<DeviceBatteryInfo> -
- -
-
-

getInfo

-
- getInfo(): Promise<DeviceInfo> -
-
Return information about the underlying device/os/platform
-
- -
- Returns: Promise<DeviceInfo> -
- -
-
-

getLanguageCode

-
- getLanguageCode(): Promise<DeviceLanguageCodeResult> -
-
Get the device's current language locale code
-
- -
- Returns: Promise<DeviceLanguageCodeResult> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

DeviceBatteryInfo

-
- interface DeviceBatteryInfo - { -
- - -
-
// A percentage (0 to 1) indicating how much the battery is charged
-
batteryLevel - ?: - number; -
-
- -
-
// Whether the device is charging
-
isCharging - ?: - boolean; -
-
-} - -
-

DeviceInfo

-
- interface DeviceInfo - { -
- - -
-
// The current bundle build of the app
-
appBuild - : - string; -
-
- -
-
// The current bundle verison of the app
-
appVersion - : - string; -
-
- -
-
// How much free disk space is available on the the normal data storage -path for the os, in bytes
-
diskFree - ?: - number; -
-
- -
-
// The total size of the normal data storage path for the OS, in bytes
-
diskTotal - ?: - number; -
-
- -
-
// Whether the app is running in a simulator/emulator
-
isVirtual - : - boolean; -
-
- -
-
// The manufacturer of the device
-
manufacturer - : - string; -
-
- -
-
// Approximate memory used by the current app, in bytes. Divide by -1048576 to get the number of MBs used.
-
memUsed - ?: - number; -
-
- -
-
// The device model. For example, "iPhone"
-
model - : - string; -
-
- -
-
// Note: this property is iOS only. -The name of the device. For example, "John's iPhone"
-
name - ?: - string; -
-
- -
-
// The operating system of the device
-
operatingSystem - : - OperatingSystem; -
-
- -
-
// The version of the device OS
-
osVersion - : - string; -
-
- -
-
// The device platform (lowercase).
-
platform - : - any; -
-
- -
-
// The UUID of the device as available to the app. This identifier may change -on modern mobile platforms that only allow per-app install UUIDs.
-
uuid - : - string; -
-
-} - -
-

DeviceLanguageCodeResult

-
- interface DeviceLanguageCodeResult - { -
- - -
-
-
value - : - string; -
-
-} - -
-

OperatingSystem

-
- type alias OperatingSystem - { -
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/filesystem/api-index.html b/site/src/assets/docs-content/apis/filesystem/api-index.html deleted file mode 100644 index e6300f3cc..000000000 --- a/site/src/assets/docs-content/apis/filesystem/api-index.html +++ /dev/null @@ -1,14 +0,0 @@ -

Table of Contents

    -
  • appendFile()
  • -
  • copy()
  • -
  • deleteFile()
  • -
  • getUri()
  • -
  • mkdir()
  • -
  • readFile()
  • -
  • readdir()
  • -
  • rename()
  • -
  • rmdir()
  • -
  • stat()
  • -
  • writeFile()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/filesystem/api.html b/site/src/assets/docs-content/apis/filesystem/api.html deleted file mode 100644 index d5957a8a4..000000000 --- a/site/src/assets/docs-content/apis/filesystem/api.html +++ /dev/null @@ -1,892 +0,0 @@ -
-
FilesystemPlugin
- -
-

appendFile

-
- appendFile(options: FileAppendOptions): Promise<FileAppendResult> -
-
Append to a file on disk in the specified location on device
-
-
- options - -FileAppendOptions -
options for the file append
-
- -
- Returns: Promise<FileAppendResult> - a promise that resolves with the file write result - -
- -
-
-

copy

-
- copy(options: CopyOptions): Promise<CopyResult> -
-
Copy a file or directory
-
-
- options - -CopyOptions -
the options for the copy operation
-
- -
- Returns: Promise<CopyResult> - a promise that resolves with the copy result - -
- -
-
-

deleteFile

-
- deleteFile(options: FileDeleteOptions): Promise<FileDeleteResult> -
-
Delete a file from disk
-
-
- options - -FileDeleteOptions -
options for the file delete
-
- -
- Returns: Promise<FileDeleteResult> - a promise that resolves with the deleted file data result - -
- -
-
-

getUri

-
- getUri(options: GetUriOptions): Promise<GetUriResult> -
-
Return full File URI for a path and directory
-
-
- options - -GetUriOptions -
the options for the stat operation
-
- -
- Returns: Promise<GetUriResult> - a promise that resolves with the file stat result - -
- -
-
-

mkdir

-
- mkdir(options: MkdirOptions): Promise<MkdirResult> -
-
Create a directory.
-
-
- options - -MkdirOptions -
options for the mkdir
-
- -
- Returns: Promise<MkdirResult> - a promise that resolves with the mkdir result - -
- -
-
-

readFile

-
- readFile(options: FileReadOptions): Promise<FileReadResult> -
-
Read a file from disk
-
-
- options - -FileReadOptions -
options for the file read
-
- -
- Returns: Promise<FileReadResult> - a promise that resolves with the read file data result - -
- -
-
-

readdir

-
- readdir(options: ReaddirOptions): Promise<ReaddirResult> -
-
Return a list of files from the directory (not recursive)
-
-
- options - -ReaddirOptions -
the options for the readdir operation
-
- -
- Returns: Promise<ReaddirResult> - a promise that resolves with the readdir directory listing result - -
- -
-
-

rename

-
- rename(options: RenameOptions): Promise<RenameResult> -
-
Rename a file or directory
-
-
- options - -RenameOptions -
the options for the rename operation
-
- -
- Returns: Promise<RenameResult> - a promise that resolves with the rename result - -
- -
-
-

rmdir

-
- rmdir(options: RmdirOptions): Promise<RmdirResult> -
-
Remove a directory
-
-
- options - -RmdirOptions -
the options for the directory remove -
-
- -
- Returns: Promise<RmdirResult> -
- -
-
-

stat

-
- stat(options: StatOptions): Promise<StatResult> -
-
Return data about a file
-
-
- options - -StatOptions -
the options for the stat operation
-
- -
- Returns: Promise<StatResult> - a promise that resolves with the file stat result - -
- -
-
-

writeFile

-
- writeFile(options: FileWriteOptions): Promise<FileWriteResult> -
-
Write a file to disk in the specified location on device
-
-
- options - -FileWriteOptions -
options for the file write
-
- -
- Returns: Promise<FileWriteResult> - a promise that resolves with the file write result - -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

FileAppendOptions

-
- interface FileAppendOptions - { -
- - -
-
// The data to write
-
data - : - string; -
-
- -
-
// The FilesystemDirectory to store the file in
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The encoding to write the file in. If not provided, data -is written as base64 encoded data.
-
encoding - ?: - FilesystemEncoding; -
-
- -
-
// The filename to write
-
path - : - string; -
-
-} - -
-

FileAppendResult

-
- interface FileAppendResult - { -
- -} - -
-

CopyOptions

-
- interface CopyOptions - { -
- - -
-
// The FilesystemDirectory containing the existing file or directory
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The existing file or directory
-
from - : - string; -
-
- -
-
// The destination file or directory
-
to - : - string; -
-
- -
-
// The FilesystemDirectory containing the destination file or directory. If not supplied will use the 'directory' -parameter as the destination
-
toDirectory - ?: - FilesystemDirectory; -
-
-} - -
-

CopyResult

-
- interface CopyResult - { -
- -} - -
-

FileDeleteOptions

-
- interface FileDeleteOptions - { -
- - -
-
// The FilesystemDirectory to delete the file from
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The filename to delete
-
path - : - string; -
-
-} - -
-

FileDeleteResult

-
- interface FileDeleteResult - { -
- -} - -
-

GetUriOptions

-
- interface GetUriOptions - { -
- - -
-
// The FilesystemDirectory to get the file under
-
directory - : - FilesystemDirectory; -
-
- -
-
// The path of the file to get the URI for
-
path - : - string; -
-
-} - -
-

GetUriResult

-
- interface GetUriResult - { -
- - -
-
-
uri - : - string; -
-
-} - -
-

MkdirOptions

-
- interface MkdirOptions - { -
- - -
-
// The FilesystemDirectory to make the new directory in
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The path of the new directory
-
path - : - string; -
-
- -
-
// Whether to create any missing parent directories as well. -Defaults to false
-
recursive - ?: - boolean; -
-
-} - -
-

MkdirResult

-
- interface MkdirResult - { -
- -} - -
-

FileReadOptions

-
- interface FileReadOptions - { -
- - -
-
// The FilesystemDirectory to read the file from
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The encoding to read the file in, if not provided, data -is read as binary and returned as base64 encoded data.
-
encoding - ?: - FilesystemEncoding; -
-
- -
-
// The filename to read
-
path - : - string; -
-
-} - -
-

FileReadResult

-
- interface FileReadResult - { -
- - -
-
-
data - : - string; -
-
-} - -
-

ReaddirOptions

-
- interface ReaddirOptions - { -
- - -
-
// The FilesystemDirectory to list files from
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The path of the directory to read
-
path - : - string; -
-
-} - -
-

ReaddirResult

-
- interface ReaddirResult - { -
- - -
-
-
files - : - string[]; -
-
-} - -
-

RenameOptions

-
- interface RenameOptions - { -
- - -
-
// The FilesystemDirectory containing the existing file or directory
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The existing file or directory
-
from - : - string; -
-
- -
-
// The destination file or directory
-
to - : - string; -
-
- -
-
// The FilesystemDirectory containing the destination file or directory. If not supplied will use the 'directory' -parameter as the destination
-
toDirectory - ?: - FilesystemDirectory; -
-
-} - -
-

RenameResult

-
- interface RenameResult - { -
- -} - -
-

RmdirOptions

-
- interface RmdirOptions - { -
- - -
-
// The FilesystemDirectory to remove the directory from
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The path of the directory to remove
-
path - : - string; -
-
- -
-
// Whether to recursively remove the contents of the directory -Defaults to false
-
recursive - ?: - boolean; -
-
-} - -
-

RmdirResult

-
- interface RmdirResult - { -
- -} - -
-

StatOptions

-
- interface StatOptions - { -
- - -
-
// The FilesystemDirectory to get the file under
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The path of the file to get data about
-
path - : - string; -
-
-} - -
-

StatResult

-
- interface StatResult - { -
- - -
-
-
ctime - : - number; -
-
- -
-
-
mtime - : - number; -
-
- -
-
-
size - : - number; -
-
- -
-
-
type - : - string; -
-
- -
-
-
uri - : - string; -
-
-} - -
-

FileWriteOptions

-
- interface FileWriteOptions - { -
- - -
-
// The data to write
-
data - : - string; -
-
- -
-
// The FilesystemDirectory to store the file in
-
directory - ?: - FilesystemDirectory; -
-
- -
-
// The encoding to write the file in. If not provided, data -is written as base64 encoded data.
-
encoding - ?: - FilesystemEncoding; -
-
- -
-
// The filename to write
-
path - : - string; -
-
- -
-
// Whether to create any missing parent directories. -Defaults to false
-
recursive - ?: - boolean; -
-
-} - -
-

FileWriteResult

-
- interface FileWriteResult - { -
- - -
-
-
uri - : - string; -
-
-} - -
-

FilesystemDirectory

-
- enum FilesystemDirectory - { -
- -
-
// The Cache directory -Can be deleted in cases of low memory, so use this directory to write app-specific files -that your app can re-create easily.
-
Cache: - "CACHE" -
-
- -
-
// The Data directory -On iOS it will use the Documents directory -On Android it's the directory holding application files. -Files will be deleted when the application is uninstalled.
-
Data: - "DATA" -
-
- -
-
// The Documents directory -On iOS it's the app's documents directory. -Use this directory to store user-generated content. -On Android it's the Public Documents folder, so it's accessible from other apps. -It's not accesible on Android 10 unless the app enables legacy External Storage -by adding `android:requestLegacyExternalStorage="true"` in the `application` tag -in the `AndroidManifest.xml`
-
Documents: - "DOCUMENTS" -
-
- -
-
// The external directory -On iOS it will use the Documents directory -On Android it's the directory on the primary shared/external -storage device where the application can place persistent files it owns. -These files are internal to the applications, and not typically visible -to the user as media. -Files will be deleted when the application is uninstalled.
-
External: - "EXTERNAL" -
-
- -
-
// The external storage directory -On iOS it will use the Documents directory -On Android it's the primary shared/external storage directory. -It's not accesible on Android 10 unless the app enables legacy External Storage -by adding `android:requestLegacyExternalStorage="true"` in the `application` tag -in the `AndroidManifest.xml`
-
ExternalStorage: - "EXTERNAL_STORAGE" -
-
-} - -
-

FilesystemEncoding

-
- enum FilesystemEncoding - { -
- -
-
-
ASCII: - "ascii" -
-
- -
-
-
UTF16: - "utf16" -
-
- -
-
-
UTF8: - "utf8" -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/geolocation/api-index.html b/site/src/assets/docs-content/apis/geolocation/api-index.html deleted file mode 100644 index 6cfd78148..000000000 --- a/site/src/assets/docs-content/apis/geolocation/api-index.html +++ /dev/null @@ -1,6 +0,0 @@ -

Table of Contents

    -
  • clearWatch()
  • -
  • getCurrentPosition()
  • -
  • watchPosition()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/geolocation/api.html b/site/src/assets/docs-content/apis/geolocation/api.html deleted file mode 100644 index 9713b6f68..000000000 --- a/site/src/assets/docs-content/apis/geolocation/api.html +++ /dev/null @@ -1,164 +0,0 @@ -
-
GeolocationPlugin
- -
-

clearWatch

-
- clearWatch(options: { id: string }): Promise<void> -
-
Clear a given watch
-
-
- options - -{ id: string } -
- -
- Returns: Promise<void> -
- -
-
-

getCurrentPosition

-
- getCurrentPosition(options?: GeolocationOptions): Promise<GeolocationPosition> -
-
Get the current GPS location of the device
-
-
- options - -GeolocationOptions -
- -
- Returns: Promise<GeolocationPosition> -
- -
-
-

watchPosition

-
- watchPosition(options: GeolocationOptions, callback: GeolocationWatchCallback): CallbackID -
-
Set up a watch for location changes. Note that watching for location changes -can consume a large amount of energy. Be smart about listening only when you need to.
-
-
- options - -GeolocationOptions -
-
- callback - -GeolocationWatchCallback -
- -
- Returns: CallbackID -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

GeolocationOptions

-
- interface GeolocationOptions - { -
- - -
-
-
enableHighAccuracy - ?: - boolean; -
-
- -
-
-
maximumAge - ?: - number; -
-
- -
-
-
timeout - ?: - number; -
-
-} - -
-

GeolocationPosition

-
- interface GeolocationPosition - { -
- - -
-
// The GPS coordinates along with the accuracy of the data
-
coords - : - any; -
-
- -
-
// Creation timestamp for coords
-
timestamp - : - number; -
-
-} - -
-

GeolocationWatchCallback

-
- type alias GeolocationWatchCallback - { -
- -} - -
-

CallbackID

-
- type alias CallbackID - { -
- -} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/haptics/api-index.html b/site/src/assets/docs-content/apis/haptics/api-index.html deleted file mode 100644 index c2e557859..000000000 --- a/site/src/assets/docs-content/apis/haptics/api-index.html +++ /dev/null @@ -1,9 +0,0 @@ -

Table of Contents

    -
  • impact()
  • -
  • notification()
  • -
  • selectionChanged()
  • -
  • selectionEnd()
  • -
  • selectionStart()
  • -
  • vibrate()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/haptics/api.html b/site/src/assets/docs-content/apis/haptics/api.html deleted file mode 100644 index 4e8cfc5c1..000000000 --- a/site/src/assets/docs-content/apis/haptics/api.html +++ /dev/null @@ -1,211 +0,0 @@ -
-
HapticsPlugin
- -
-

impact

-
- impact(options: HapticsImpactOptions): void -
-
Trigger a haptics "impact" feedback
-
-
- options - -HapticsImpactOptions -
- -
- Returns: void -
- -
-
-

notification

-
- notification(options: HapticsNotificationOptions): void -
-
Trigger a haptics "notification" feedback
-
-
- options - -HapticsNotificationOptions -
- -
- Returns: void -
- -
-
-

selectionChanged

-
- selectionChanged(): void -
-
Trigger a selection changed haptic hint. If a selection was -started already, this will cause the device to provide haptic -feedback
-
- -
- Returns: void -
- -
-
-

selectionEnd

-
- selectionEnd(): void -
-
If selectionStart() was called, selectionEnd() ends the selection. -For example, call this when a user has lifted their finger from a control
-
- -
- Returns: void -
- -
-
-

selectionStart

-
- selectionStart(): void -
-
Trigger a selection started haptic hint
-
- -
- Returns: void -
- -
-
-

vibrate

-
- vibrate(): void -
-
Vibrate the device
-
- -
- Returns: void -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

HapticsImpactOptions

-
- interface HapticsImpactOptions - { -
- - -
-
-
style - : - HapticsImpactStyle; -
-
-} - -
-

HapticsNotificationOptions

-
- interface HapticsNotificationOptions - { -
- - -
-
-
type - : - HapticsNotificationType; -
-
-} - -
-

HapticsImpactStyle

-
- enum HapticsImpactStyle - { -
- -
-
-
Heavy: - "HEAVY" -
-
- -
-
-
Light: - "LIGHT" -
-
- -
-
-
Medium: - "MEDIUM" -
-
-} - -
-

HapticsNotificationType

-
- enum HapticsNotificationType - { -
- -
-
-
ERROR: - "ERROR" -
-
- -
-
-
SUCCESS: - "SUCCESS" -
-
- -
-
-
WARNING: - "WARNING" -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/keyboard/api-index.html b/site/src/assets/docs-content/apis/keyboard/api-index.html deleted file mode 100644 index 3c1f0740e..000000000 --- a/site/src/assets/docs-content/apis/keyboard/api-index.html +++ /dev/null @@ -1,13 +0,0 @@ -

Table of Contents

    -
  • hide()
  • -
  • removeAllListeners()
  • -
  • setAccessoryBarVisible()
  • -
  • setResizeMode()
  • -
  • setScroll()
  • -
  • setStyle()
  • -
  • show()
  • -
  • addListener('keyboardWillShow')
  • -
  • addListener('keyboardDidShow')
  • -
  • addListener('keyboardWillHide')
  • -
  • addListener('keyboardDidHide')
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/keyboard/api.html b/site/src/assets/docs-content/apis/keyboard/api.html deleted file mode 100644 index a2b6d744d..000000000 --- a/site/src/assets/docs-content/apis/keyboard/api.html +++ /dev/null @@ -1,301 +0,0 @@ -
-
KeyboardPlugin
- -
-

hide

-
- hide(): Promise<void> -
-
Hide the keyboard.
-
- -
- Returns: Promise<void> -
- -
-
-

removeAllListeners

-
- removeAllListeners(): void -
-
Remove all native listeners for this plugin
-
- -
- Returns: void -
- -
-
-

setAccessoryBarVisible

-
- setAccessoryBarVisible(options: { isVisible: boolean }): Promise<void> -
-
Set whether the accessory bar should be visible on the keyboard. We recommend disabling -the accessory bar for short forms (login, signup, etc.) to provide a cleaner UI
-
-
- options - -{ isVisible: boolean } -
- -
- Returns: Promise<void> -
- -
-
-

setResizeMode

-
- setResizeMode(options: KeyboardResizeOptions): Promise<void> -
-
Programmatically set the resize mode
-
-
- options - -KeyboardResizeOptions -
- -
- Returns: Promise<void> -
- -
-
-

setScroll

-
- setScroll(options: { isDisabled: boolean }): Promise<void> -
-
Programmatically enable or disable the WebView scroll
-
-
- options - -{ isDisabled: boolean } -
- -
- Returns: Promise<void> -
- -
-
-

setStyle

-
- setStyle(options: KeyboardStyleOptions): Promise<void> -
-
Programmatically set the keyboard style
-
-
- options - -KeyboardStyleOptions -
- -
- Returns: Promise<void> -
- -
-
-

show

-
- show(): Promise<void> -
-
Show the keyboard. This method is alpha and may have issues
-
- -
- Returns: Promise<void> -
- -
-
-

addListener

-
- addListener(eventName: "keyboardWillShow", listenerFunc: (info: KeyboardInfo) => void): PluginListenerHandle -
- -
-
- eventName - -"keyboardWillShow" -
-
- listenerFunc - -(info: KeyboardInfo) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "keyboardDidShow", listenerFunc: (info: KeyboardInfo) => void): PluginListenerHandle -
- -
-
- eventName - -"keyboardDidShow" -
-
- listenerFunc - -(info: KeyboardInfo) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "keyboardWillHide", listenerFunc: () => void): PluginListenerHandle -
- -
-
- eventName - -"keyboardWillHide" -
-
- listenerFunc - -() => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "keyboardDidHide", listenerFunc: () => void): PluginListenerHandle -
- -
-
- eventName - -"keyboardDidHide" -
-
- listenerFunc - -() => void -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

KeyboardResizeOptions

-
- interface KeyboardResizeOptions - { -
- - -
-
-
mode - : - KeyboardResize; -
-
-} - -
-

KeyboardStyleOptions

-
- interface KeyboardStyleOptions - { -
- - -
-
-
style - : - KeyboardStyle; -
-
-} - -
-

KeyboardResize

-
- enum KeyboardResize - { -
- -
-
-
Body: - "body" -
-
- -
-
-
Ionic: - "ionic" -
-
- -
-
-
Native: - "native" -
-
- -
-
-
None: - "none" -
-
-} - -
-

KeyboardStyle

-
- enum KeyboardStyle - { -
- -
-
-
Dark: - "DARK" -
-
- -
-
-
Light: - "LIGHT" -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/local-notifications/api-index.html b/site/src/assets/docs-content/apis/local-notifications/api-index.html deleted file mode 100644 index fcf755c82..000000000 --- a/site/src/assets/docs-content/apis/local-notifications/api-index.html +++ /dev/null @@ -1,14 +0,0 @@ -

Table of Contents

    -
  • areEnabled()
  • -
  • cancel()
  • -
  • createChannel()
  • -
  • deleteChannel()
  • -
  • getPending()
  • -
  • listChannels()
  • -
  • registerActionTypes()
  • -
  • removeAllListeners()
  • -
  • requestPermission()
  • -
  • schedule()
  • -
  • addListener('localNotificationReceived')
  • -
  • addListener('localNotificationActionPerformed')
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/local-notifications/api.html b/site/src/assets/docs-content/apis/local-notifications/api.html deleted file mode 100644 index 8add239d5..000000000 --- a/site/src/assets/docs-content/apis/local-notifications/api.html +++ /dev/null @@ -1,372 +0,0 @@ -
-
LocalNotificationsPlugin
- -
-

areEnabled

-
- areEnabled(): Promise<LocalNotificationEnabledResult> -
- -
- -
- Returns: Promise<LocalNotificationEnabledResult> -
- -
-
-

cancel

-
- cancel(pending: LocalNotificationPendingList): Promise<void> -
- -
-
- pending - -LocalNotificationPendingList -
- -
- Returns: Promise<void> -
- -
-
-

createChannel

-
- createChannel(channel: NotificationChannel): Promise<void> -
- -
-
- channel - -NotificationChannel -
- -
- Returns: Promise<void> -
- -
-
-

deleteChannel

-
- deleteChannel(channel: NotificationChannel): Promise<void> -
- -
-
- channel - -NotificationChannel -
- -
- Returns: Promise<void> -
- -
-
-

getPending

-
- getPending(): Promise<LocalNotificationPendingList> -
- -
- -
- Returns: Promise<LocalNotificationPendingList> -
- -
-
-

listChannels

-
- listChannels(): Promise<NotificationChannelList> -
- -
- -
- Returns: Promise<NotificationChannelList> -
- -
-
-

registerActionTypes

-
- registerActionTypes(options: { types: any }): Promise<void> -
- -
-
- options - -{ types: any } -
- -
- Returns: Promise<void> -
- -
-
-

removeAllListeners

-
- removeAllListeners(): void -
-
Remove all native listeners for this plugin
-
- -
- Returns: void -
- -
-
-

requestPermission

-
- requestPermission(): Promise<NotificationPermissionResponse> -
- -
- -
- Returns: Promise<NotificationPermissionResponse> -
- -
-
-

schedule

-
- schedule(options: { notifications: any }): Promise<LocalNotificationScheduleResult> -
- -
-
- options - -{ notifications: any } -
- -
- Returns: Promise<LocalNotificationScheduleResult> -
- -
-
-

addListener

-
- addListener(eventName: "localNotificationReceived", listenerFunc: (notification: LocalNotification) => void): PluginListenerHandle -
- -
-
- eventName - -"localNotificationReceived" -
-
- listenerFunc - -(notification: LocalNotification) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "localNotificationActionPerformed", listenerFunc: (notificationAction: LocalNotificationActionPerformed) => void): PluginListenerHandle -
- -
-
- eventName - -"localNotificationActionPerformed" -
-
- listenerFunc - -(notificationAction: LocalNotificationActionPerformed) => void -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

LocalNotificationEnabledResult

-
- interface LocalNotificationEnabledResult - { -
- - -
-
// Whether the device has Local Notifications enabled or not
-
value - : - boolean; -
-
-} - -
-

LocalNotificationPendingList

-
- interface LocalNotificationPendingList - { -
- - -
-
-
notifications - : - LocalNotificationRequest[]; -
-
-} - -
-

NotificationChannel

-
- interface NotificationChannel - { -
- - -
-
-
description - ?: - string; -
-
- -
-
-
id - : - string; -
-
- -
-
-
importance - : - any; -
-
- -
-
-
lightColor - ?: - string; -
-
- -
-
-
lights - ?: - boolean; -
-
- -
-
-
name - : - string; -
-
- -
-
-
sound - ?: - string; -
-
- -
-
-
vibration - ?: - boolean; -
-
- -
-
-
visibility - ?: - any; -
-
-} - -
-

NotificationChannelList

-
- interface NotificationChannelList - { -
- - -
-
-
channels - : - NotificationChannel[]; -
-
-} - -
-

NotificationPermissionResponse

-
- interface NotificationPermissionResponse - { -
- - -
-
-
granted - : - boolean; -
-
-} - -
-

LocalNotificationScheduleResult

-
- interface LocalNotificationScheduleResult - { -
- - -
-
-
notifications - : - LocalNotificationRequest[]; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/modals/api-index.html b/site/src/assets/docs-content/apis/modals/api-index.html deleted file mode 100644 index 55b3210c6..000000000 --- a/site/src/assets/docs-content/apis/modals/api-index.html +++ /dev/null @@ -1,7 +0,0 @@ -

Table of Contents

    -
  • alert()
  • -
  • confirm()
  • -
  • prompt()
  • -
  • showActions()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/modals/api.html b/site/src/assets/docs-content/apis/modals/api.html deleted file mode 100644 index 34f353082..000000000 --- a/site/src/assets/docs-content/apis/modals/api.html +++ /dev/null @@ -1,324 +0,0 @@ -
-
ModalsPlugin
- -
-

alert

-
- alert(options: AlertOptions): Promise<void> -
-
Show an alert modal
-
-
- options - -AlertOptions -
- -
- Returns: Promise<void> -
- -
-
-

confirm

-
- confirm(options: ConfirmOptions): Promise<ConfirmResult> -
-
Show a confirmation modal
-
-
- options - -ConfirmOptions -
- -
- Returns: Promise<ConfirmResult> -
- -
-
-

prompt

-
- prompt(options: PromptOptions): Promise<PromptResult> -
-
Show a prompt modal
-
-
- options - -PromptOptions -
- -
- Returns: Promise<PromptResult> -
- -
-
-

showActions

-
- showActions(options: ActionSheetOptions): Promise<ActionSheetResult> -
-
Show an Action Sheet style modal with various options for the user -to select.
-
-
- options - -ActionSheetOptions -
- -
- Returns: Promise<ActionSheetResult> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

AlertOptions

-
- interface AlertOptions - { -
- - -
-
-
buttonTitle - ?: - string; -
-
- -
-
-
message - : - string; -
-
- -
-
-
title - : - string; -
-
-} - -
-

ConfirmOptions

-
- interface ConfirmOptions - { -
- - -
-
-
cancelButtonTitle - ?: - string; -
-
- -
-
-
message - : - string; -
-
- -
-
-
okButtonTitle - ?: - string; -
-
- -
-
-
title - : - string; -
-
-} - -
-

ConfirmResult

-
- interface ConfirmResult - { -
- - -
-
-
value - : - boolean; -
-
-} - -
-

PromptOptions

-
- interface PromptOptions - { -
- - -
-
-
cancelButtonTitle - ?: - string; -
-
- -
-
-
inputPlaceholder - ?: - string; -
-
- -
-
-
inputText - ?: - string; -
-
- -
-
-
message - : - string; -
-
- -
-
-
okButtonTitle - ?: - string; -
-
- -
-
-
title - : - string; -
-
-} - -
-

PromptResult

-
- interface PromptResult - { -
- - -
-
-
cancelled - : - boolean; -
-
- -
-
-
value - : - string; -
-
-} - -
-

ActionSheetOptions

-
- interface ActionSheetOptions - { -
- - -
-
// iOS only
-
message - ?: - string; -
-
- -
-
-
options - : - ActionSheetOption[]; -
-
- -
-
-
title - : - string; -
-
-} - -
-

ActionSheetResult

-
- interface ActionSheetResult - { -
- - -
-
-
index - : - number; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/motion/api-index.html b/site/src/assets/docs-content/apis/motion/api-index.html deleted file mode 100644 index c02d1d032..000000000 --- a/site/src/assets/docs-content/apis/motion/api-index.html +++ /dev/null @@ -1,5 +0,0 @@ -

Table of Contents

    -
  • removeAllListeners()
  • -
  • addListener('accel')
  • -
  • addListener('orientation')
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/motion/api.html b/site/src/assets/docs-content/apis/motion/api.html deleted file mode 100644 index ac6b24217..000000000 --- a/site/src/assets/docs-content/apis/motion/api.html +++ /dev/null @@ -1,64 +0,0 @@ -
-
MotionPlugin
- -
-

removeAllListeners

-
- removeAllListeners(): void -
-
Remove all native listeners for this plugin
-
- -
- Returns: void -
- -
-
-

addListener

-
- addListener(eventName: "accel", listenerFunc: (event: MotionEventResult) => void): PluginListenerHandle -
-
Listen for accelerometer data
-
-
- eventName - -"accel" -
-
- listenerFunc - -(event: MotionEventResult) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "orientation", listenerFunc: (event: MotionOrientationEventResult) => void): PluginListenerHandle -
-
Listen for device orientation change (compass heading, etc.)
-
-
- eventName - -"orientation" -
-
- listenerFunc - -(event: MotionOrientationEventResult) => void -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

-
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/network/api-index.html b/site/src/assets/docs-content/apis/network/api-index.html deleted file mode 100644 index b67597aec..000000000 --- a/site/src/assets/docs-content/apis/network/api-index.html +++ /dev/null @@ -1,5 +0,0 @@ -

Table of Contents

    -
  • getStatus()
  • -
  • removeAllListeners()
  • -
  • addListener('networkStatusChange')
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/network/api.html b/site/src/assets/docs-content/apis/network/api.html deleted file mode 100644 index a00b09079..000000000 --- a/site/src/assets/docs-content/apis/network/api.html +++ /dev/null @@ -1,79 +0,0 @@ -
-
NetworkPlugin
- -
-

getStatus

-
- getStatus(): Promise<NetworkStatus> -
-
Query the current network status
-
- -
- Returns: Promise<NetworkStatus> -
- -
-
-

removeAllListeners

-
- removeAllListeners(): void -
-
Remove all native listeners for this plugin
-
- -
- Returns: void -
- -
-
-

addListener

-
- addListener(eventName: "networkStatusChange", listenerFunc: (status: NetworkStatus) => void): PluginListenerHandle -
-
Listen for network status change events
-
-
- eventName - -"networkStatusChange" -
-
- listenerFunc - -(status: NetworkStatus) => void -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

NetworkStatus

-
- interface NetworkStatus - { -
- - -
-
-
connected - : - boolean; -
-
- -
-
-
connectionType - : - any; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/permissions/api-index.html b/site/src/assets/docs-content/apis/permissions/api-index.html deleted file mode 100644 index 129f53349..000000000 --- a/site/src/assets/docs-content/apis/permissions/api-index.html +++ /dev/null @@ -1,4 +0,0 @@ -

Table of Contents

    -
  • query()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/permissions/api.html b/site/src/assets/docs-content/apis/permissions/api.html deleted file mode 100644 index bb1287b99..000000000 --- a/site/src/assets/docs-content/apis/permissions/api.html +++ /dev/null @@ -1,130 +0,0 @@ -
-
PermissionsPlugin
- -
-

query

-
- query(options: PermissionsOptions): Promise<PermissionResult> -
- -
-
- options - -PermissionsOptions -
- -
- Returns: Promise<PermissionResult> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

PermissionsOptions

-
- interface PermissionsOptions - { -
- - -
-
-
name - : - PermissionType; -
-
-} - -
-

PermissionResult

-
- interface PermissionResult - { -
- - -
-
-
state - : - any; -
-
-} - -
-

PermissionType

-
- enum PermissionType - { -
- -
-
-
Camera: - "camera" -
-
- -
-
-
ClipboardRead: - "clipboard-read" -
-
- -
-
-
ClipboardWrite: - "clipboard-write" -
-
- -
-
-
Geolocation: - "geolocation" -
-
- -
-
-
Notifications: - "notifications" -
-
- -
-
-
Photos: - "photos" -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/photos/api-index.html b/site/src/assets/docs-content/apis/photos/api-index.html deleted file mode 100644 index 039f09258..000000000 --- a/site/src/assets/docs-content/apis/photos/api-index.html +++ /dev/null @@ -1,7 +0,0 @@ -

Table of Contents

    -
  • createAlbum()
  • -
  • getAlbums()
  • -
  • getPhotos()
  • -
  • savePhoto()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/photos/api.html b/site/src/assets/docs-content/apis/photos/api.html deleted file mode 100644 index 036c945cc..000000000 --- a/site/src/assets/docs-content/apis/photos/api.html +++ /dev/null @@ -1,267 +0,0 @@ -
-
PhotosPlugin
- -
-

createAlbum

-
- createAlbum(options: PhotosCreateAlbumOptions): Promise<void> -
-
Create an album in the user's photo library
-
-
- options - -PhotosCreateAlbumOptions -
- -
- Returns: Promise<void> -
- -
-
-

getAlbums

-
- getAlbums(options?: PhotosAlbumsFetchOptions): Promise<PhotosAlbumsResult> -
-
Get albums from the user's photo library
-
-
- options - -PhotosAlbumsFetchOptions -
- -
- Returns: Promise<PhotosAlbumsResult> -
- -
-
-

getPhotos

-
- getPhotos(options?: PhotosFetchOptions): Promise<PhotosResult> -
-
Get photos from the user's photo library
-
-
- options - -PhotosFetchOptions -
- -
- Returns: Promise<PhotosResult> -
- -
-
-

savePhoto

-
- savePhoto(options?: PhotosSaveOptions): Promise<PhotosSaveResult> -
-
Save a photo the the user's photo library
-
-
- options - -PhotosSaveOptions -
- -
- Returns: Promise<PhotosSaveResult> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

PhotosCreateAlbumOptions

-
- interface PhotosCreateAlbumOptions - { -
- - -
-
-
name - : - string; -
-
-} - -
-

PhotosAlbumsFetchOptions

-
- interface PhotosAlbumsFetchOptions - { -
- - -
-
// Whether to load cloud shared albums
-
loadShared - : - boolean; -
-
-} - -
-

PhotosAlbumsResult

-
- interface PhotosAlbumsResult - { -
- - -
-
// The list of albums returned from the query
-
albums - : - PhotosAlbum[]; -
-
-} - -
-

PhotosFetchOptions

-
- interface PhotosFetchOptions - { -
- - -
-
// Which album identifier to query in (get identifier with getAlbums())
-
albumIdentifier - ?: - string; -
-
- -
-
// The number of photos to fetch, sorted by last created date descending
-
quantity - ?: - number; -
-
- -
-
// The height of thumbnail to return
-
thumbnailHeight - ?: - number; -
-
- -
-
// The quality of thumbnail to return as JPEG (0-100)
-
thumbnailQuality - ?: - number; -
-
- -
-
// The width of thumbnail to return
-
thumbnailWidth - ?: - number; -
-
- -
-
// Which types of assets to return (currently only supports "photos")
-
types - ?: - string; -
-
-} - -
-

PhotosResult

-
- interface PhotosResult - { -
- - -
-
// The list of photos returned from the library
-
photos - : - PhotoAsset[]; -
-
-} - -
-

PhotosSaveOptions

-
- interface PhotosSaveOptions - { -
- - -
-
// The optional album identifier to save this photo in
-
albumIdentifier - ?: - string; -
-
- -
-
// The base64-encoded JPEG data for a photo (note: do not add HTML data-uri type prefix)
-
data - : - string; -
-
-} - -
-

PhotosSaveResult

-
- interface PhotosSaveResult - { -
- - -
-
// Whether the photo was created
-
success - : - boolean; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/push-notifications/api-index.html b/site/src/assets/docs-content/apis/push-notifications/api-index.html deleted file mode 100644 index 4b176214b..000000000 --- a/site/src/assets/docs-content/apis/push-notifications/api-index.html +++ /dev/null @@ -1,15 +0,0 @@ -

Table of Contents

    -
  • createChannel()
  • -
  • deleteChannel()
  • -
  • getDeliveredNotifications()
  • -
  • listChannels()
  • -
  • register()
  • -
  • removeAllDeliveredNotifications()
  • -
  • removeAllListeners()
  • -
  • removeDeliveredNotifications()
  • -
  • requestPermission()
  • -
  • addListener('registration')
  • -
  • addListener('registrationError')
  • -
  • addListener('pushNotificationReceived')
  • -
  • addListener('pushNotificationActionPerformed')
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/push-notifications/api.html b/site/src/assets/docs-content/apis/push-notifications/api.html deleted file mode 100644 index 2ddb807b8..000000000 --- a/site/src/assets/docs-content/apis/push-notifications/api.html +++ /dev/null @@ -1,361 +0,0 @@ -
-
PushNotificationsPlugin
- -
-

createChannel

-
- createChannel(channel: NotificationChannel): Promise<void> -
- -
-
- channel - -NotificationChannel -
- -
- Returns: Promise<void> -
- -
-
-

deleteChannel

-
- deleteChannel(channel: NotificationChannel): Promise<void> -
- -
-
- channel - -NotificationChannel -
- -
- Returns: Promise<void> -
- -
-
-

getDeliveredNotifications

-
- getDeliveredNotifications(): Promise<PushNotificationDeliveredList> -
- -
- -
- Returns: Promise<PushNotificationDeliveredList> -
- -
-
-

listChannels

-
- listChannels(): Promise<NotificationChannelList> -
- -
- -
- Returns: Promise<NotificationChannelList> -
- -
-
-

register

-
- register(): Promise<void> -
- -
- -
- Returns: Promise<void> -
- -
-
-

removeAllDeliveredNotifications

-
- removeAllDeliveredNotifications(): Promise<void> -
- -
- -
- Returns: Promise<void> -
- -
-
-

removeAllListeners

-
- removeAllListeners(): void -
-
Remove all native listeners for this plugin
-
- -
- Returns: void -
- -
-
-

removeDeliveredNotifications

-
- removeDeliveredNotifications(delivered: PushNotificationDeliveredList): Promise<void> -
- -
-
- delivered - -PushNotificationDeliveredList -
- -
- Returns: Promise<void> -
- -
-
-

requestPermission

-
- requestPermission(): Promise<NotificationPermissionResponse> -
- -
- -
- Returns: Promise<NotificationPermissionResponse> -
- -
-
-

addListener

-
- addListener(eventName: "registration", listenerFunc: (token: PushNotificationToken) => void): PluginListenerHandle -
- -
-
- eventName - -"registration" -
-
- listenerFunc - -(token: PushNotificationToken) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "registrationError", listenerFunc: (error: any) => void): PluginListenerHandle -
- -
-
- eventName - -"registrationError" -
-
- listenerFunc - -(error: any) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "pushNotificationReceived", listenerFunc: (notification: PushNotification) => void): PluginListenerHandle -
- -
-
- eventName - -"pushNotificationReceived" -
-
- listenerFunc - -(notification: PushNotification) => void -
- -
- Returns: PluginListenerHandle -
- -
-
-

addListener

-
- addListener(eventName: "pushNotificationActionPerformed", listenerFunc: (notification: PushNotificationActionPerformed) => void): PluginListenerHandle -
- -
-
- eventName - -"pushNotificationActionPerformed" -
-
- listenerFunc - -(notification: PushNotificationActionPerformed) => void -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

NotificationChannel

-
- interface NotificationChannel - { -
- - -
-
-
description - ?: - string; -
-
- -
-
-
id - : - string; -
-
- -
-
-
importance - : - any; -
-
- -
-
-
lightColor - ?: - string; -
-
- -
-
-
lights - ?: - boolean; -
-
- -
-
-
name - : - string; -
-
- -
-
-
sound - ?: - string; -
-
- -
-
-
vibration - ?: - boolean; -
-
- -
-
-
visibility - ?: - any; -
-
-} - -
-

PushNotificationDeliveredList

-
- interface PushNotificationDeliveredList - { -
- - -
-
-
notifications - : - PushNotification[]; -
-
-} - -
-

NotificationChannelList

-
- interface NotificationChannelList - { -
- - -
-
-
channels - : - NotificationChannel[]; -
-
-} - -
-

NotificationPermissionResponse

-
- interface NotificationPermissionResponse - { -
- - -
-
-
granted - : - boolean; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/share/api-index.html b/site/src/assets/docs-content/apis/share/api-index.html deleted file mode 100644 index 82bbedef9..000000000 --- a/site/src/assets/docs-content/apis/share/api-index.html +++ /dev/null @@ -1,4 +0,0 @@ -

Table of Contents

    -
  • share()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/share/api.html b/site/src/assets/docs-content/apis/share/api.html deleted file mode 100644 index 727838d58..000000000 --- a/site/src/assets/docs-content/apis/share/api.html +++ /dev/null @@ -1,88 +0,0 @@ -
-
SharePlugin
- -
-

share

-
- share(options: ShareOptions): Promise<any> -
-
Show a Share modal for sharing content in your app with other apps
-
-
- options - -ShareOptions -
- -
- Returns: Promise<any> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

ShareOptions

-
- interface ShareOptions - { -
- - -
-
// Set a title for the share modal. Android only
-
dialogTitle - ?: - string; -
-
- -
-
// Set some text to share
-
text - ?: - string; -
-
- -
-
// Set a title for any message. This will be the subject -if sharing to email
-
title - ?: - string; -
-
- -
-
// Set a URL to share
-
url - ?: - string; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/splash-screen/api-index.html b/site/src/assets/docs-content/apis/splash-screen/api-index.html deleted file mode 100644 index 121348a1a..000000000 --- a/site/src/assets/docs-content/apis/splash-screen/api-index.html +++ /dev/null @@ -1,5 +0,0 @@ -

Table of Contents

    -
  • hide()
  • -
  • show()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/splash-screen/api.html b/site/src/assets/docs-content/apis/splash-screen/api.html deleted file mode 100644 index 155b3d690..000000000 --- a/site/src/assets/docs-content/apis/splash-screen/api.html +++ /dev/null @@ -1,133 +0,0 @@ -
-
SplashScreenPlugin
- -
-

hide

-
- hide(options?: SplashScreenHideOptions, callback?: Function): Promise<void> -
-
Hide the splash screen
-
-
- options - -SplashScreenHideOptions -
-
- callback - -Function -
- -
- Returns: Promise<void> -
- -
-
-

show

-
- show(options?: SplashScreenShowOptions, callback?: Function): Promise<void> -
-
Show the splash screen
-
-
- options - -SplashScreenShowOptions -
-
- callback - -Function -
- -
- Returns: Promise<void> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

SplashScreenHideOptions

-
- interface SplashScreenHideOptions - { -
- - -
-
// How long (in ms) to fade out. Default is 200ms
-
fadeOutDuration - ?: - number; -
-
-} - -
-

SplashScreenShowOptions

-
- interface SplashScreenShowOptions - { -
- - -
-
// Whether to auto hide the splash after showDuration
-
autoHide - ?: - boolean; -
-
- -
-
// How long (in ms) to fade in. Default is 200ms
-
fadeInDuration - ?: - number; -
-
- -
-
// How long (in ms) to fade out. Default is 200ms
-
fadeOutDuration - ?: - number; -
-
- -
-
// How long to show the splash screen when autoHide is enabled (in ms) -Default is 3000ms
-
showDuration - ?: - number; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/status-bar/api-index.html b/site/src/assets/docs-content/apis/status-bar/api-index.html deleted file mode 100644 index b9dd31fdb..000000000 --- a/site/src/assets/docs-content/apis/status-bar/api-index.html +++ /dev/null @@ -1,9 +0,0 @@ -

Table of Contents

    -
  • getInfo()
  • -
  • hide()
  • -
  • setBackgroundColor()
  • -
  • setOverlaysWebView()
  • -
  • setStyle()
  • -
  • show()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/status-bar/api.html b/site/src/assets/docs-content/apis/status-bar/api.html deleted file mode 100644 index 326930881..000000000 --- a/site/src/assets/docs-content/apis/status-bar/api.html +++ /dev/null @@ -1,292 +0,0 @@ -
-
StatusBarPlugin
- -
-

getInfo

-
- getInfo(): Promise<StatusBarInfoResult> -
-
Get info about the current state of the status bar
-
- -
- Returns: Promise<StatusBarInfoResult> -
- -
-
-

hide

-
- hide(options?: StatusBarAnimationOptions): Promise<void> -
-
Hide the status bar
-
-
- options - -StatusBarAnimationOptions -
- -
- Returns: Promise<void> -
- -
-
-

setBackgroundColor

-
- setBackgroundColor(options: StatusBarBackgroundColorOptions): Promise<void> -
-
Set the background color of the status bar
-
-
- options - -StatusBarBackgroundColorOptions -
- -
- Returns: Promise<void> -
- -
-
-

setOverlaysWebView

-
- setOverlaysWebView(options: StatusBarOverlaysWebviewOptions): Promise<void> -
-
Set whether or not the status bar should overlay the webview to allow usage of the space - around a device "notch"
-
-
- options - -StatusBarOverlaysWebviewOptions -
- -
- Returns: Promise<void> -
- -
-
-

setStyle

-
- setStyle(options: StatusBarStyleOptions): Promise<void> -
-
Set the current style of the status bar
-
-
- options - -StatusBarStyleOptions -
- -
- Returns: Promise<void> -
- -
-
-

show

-
- show(options?: StatusBarAnimationOptions): Promise<void> -
-
Show the status bar
-
-
- options - -StatusBarAnimationOptions -
- -
- Returns: Promise<void> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

StatusBarInfoResult

-
- interface StatusBarInfoResult - { -
- - -
-
-
color - ?: - string; -
-
- -
-
-
overlays - ?: - boolean; -
-
- -
-
-
style - : - StatusBarStyle; -
-
- -
-
-
visible - : - boolean; -
-
-} - -
-

StatusBarAnimationOptions

-
- interface StatusBarAnimationOptions - { -
- - -
-
// iOS only. The type of status bar animation used when showing or hiding.
-
animation - : - StatusBarAnimation; -
-
-} - -
-

StatusBarBackgroundColorOptions

-
- interface StatusBarBackgroundColorOptions - { -
- - -
-
-
color - : - string; -
-
-} - -
-

StatusBarOverlaysWebviewOptions

-
- interface StatusBarOverlaysWebviewOptions - { -
- - -
-
-
overlay - : - boolean; -
-
-} - -
-

StatusBarStyleOptions

-
- interface StatusBarStyleOptions - { -
- - -
-
-
style - : - StatusBarStyle; -
-
-} - -
-

StatusBarStyle

-
- enum StatusBarStyle - { -
- -
-
// Light text for dark backgrounds.
-
Dark: - "DARK" -
-
- -
-
// Dark text for light backgrounds.
-
Light: - "LIGHT" -
-
-} - -
-

StatusBarAnimation

-
- enum StatusBarAnimation - { -
- -
-
// Fade animation during show/hide.
-
Fade: - "FADE" -
-
- -
-
// No animation during show/hide.
-
None: - "NONE" -
-
- -
-
// Slide animation during show/hide.
-
Slide: - "SLIDE" -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/storage/api-index.html b/site/src/assets/docs-content/apis/storage/api-index.html deleted file mode 100644 index 3def10887..000000000 --- a/site/src/assets/docs-content/apis/storage/api-index.html +++ /dev/null @@ -1,8 +0,0 @@ -

Table of Contents

    -
  • clear()
  • -
  • get()
  • -
  • keys()
  • -
  • remove()
  • -
  • set()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/storage/api.html b/site/src/assets/docs-content/apis/storage/api.html deleted file mode 100644 index 28ece8630..000000000 --- a/site/src/assets/docs-content/apis/storage/api.html +++ /dev/null @@ -1,108 +0,0 @@ -
-
StoragePlugin
- -
-

clear

-
- clear(): Promise<void> -
-
Clear stored keys and values.
-
- -
- Returns: Promise<void> -
- -
-
-

get

-
- get(options: { key: string }): Promise<{ value: any }> -
-
Get the value with the given key.
-
-
- options - -{ key: string } -
- -
- Returns: Promise<{ value: any }> -
- -
-
-

keys

-
- keys(): Promise<{ keys: any }> -
-
Return the list of known keys
-
- -
- Returns: Promise<{ keys: any }> -
- -
-
-

remove

-
- remove(options: { key: string }): Promise<void> -
-
Remove the value for this key (if any)
-
-
- options - -{ key: string } -
- -
- Returns: Promise<void> -
- -
-
-

set

-
- set(options: { key: string, value: string }): Promise<void> -
-
Set the value for the given key
-
-
- options - -{ key: string, value: string } -
- -
- Returns: Promise<void> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

-
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/toast/api-index.html b/site/src/assets/docs-content/apis/toast/api-index.html deleted file mode 100644 index c7a9fe7ce..000000000 --- a/site/src/assets/docs-content/apis/toast/api-index.html +++ /dev/null @@ -1,4 +0,0 @@ -

Table of Contents

    -
  • show()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/toast/api.html b/site/src/assets/docs-content/apis/toast/api.html deleted file mode 100644 index a92b4c994..000000000 --- a/site/src/assets/docs-content/apis/toast/api.html +++ /dev/null @@ -1,79 +0,0 @@ -
-
ToastPlugin
- -
-

show

-
- show(options: ToastShowOptions): Promise<void> -
- -
-
- options - -ToastShowOptions -
- -
- Returns: Promise<void> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

ToastShowOptions

-
- interface ToastShowOptions - { -
- - -
-
// Duration of the toast, either 'short' (2000ms, default) or 'long' (3500ms)
-
duration - ?: - any; -
-
- -
-
-
position - ?: - any; -
-
- -
-
-
text - : - string; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/web-view/api-index.html b/site/src/assets/docs-content/apis/web-view/api-index.html deleted file mode 100644 index 3ddbe1f77..000000000 --- a/site/src/assets/docs-content/apis/web-view/api-index.html +++ /dev/null @@ -1,6 +0,0 @@ -

Table of Contents

    -
  • getServerBasePath()
  • -
  • persistServerBasePath()
  • -
  • setServerBasePath()
  • -
  • addListener()
  • -
\ No newline at end of file diff --git a/site/src/assets/docs-content/apis/web-view/api.html b/site/src/assets/docs-content/apis/web-view/api.html deleted file mode 100644 index 732b4bc22..000000000 --- a/site/src/assets/docs-content/apis/web-view/api.html +++ /dev/null @@ -1,89 +0,0 @@ -
-
WebViewPlugin
- -
-

getServerBasePath

-
- getServerBasePath(): Promise<WebViewPath> -
- -
- -
- Returns: Promise<WebViewPath> -
- -
-
-

persistServerBasePath

-
- persistServerBasePath(): Promise<void> -
- -
- -
- Returns: Promise<void> -
- -
-
-

setServerBasePath

-
- setServerBasePath(options: WebViewPath): Promise<void> -
- -
-
- options - -WebViewPath -
- -
- Returns: Promise<void> -
- -
-
-

addListener

-
- addListener(eventName: string, listenerFunc: Function): PluginListenerHandle -
- -
-
- eventName - -string -
-
- listenerFunc - -Function -
- -
- Returns: PluginListenerHandle -
- -
-

Interfaces Used

- -
-

WebViewPath

-
- interface WebViewPath - { -
- - -
-
-
path - : - string; -
-
-} -
\ No newline at end of file diff --git a/site/src/assets/fonts/Graphik-Bold-Web.eot b/site/src/assets/fonts/Graphik-Bold-Web.eot deleted file mode 100644 index 8a2c1356a..000000000 Binary files a/site/src/assets/fonts/Graphik-Bold-Web.eot and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Bold-Web.woff b/site/src/assets/fonts/Graphik-Bold-Web.woff deleted file mode 100644 index 31a4060f4..000000000 Binary files a/site/src/assets/fonts/Graphik-Bold-Web.woff and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Bold-Web.woff2 b/site/src/assets/fonts/Graphik-Bold-Web.woff2 deleted file mode 100644 index b0a514bf6..000000000 Binary files a/site/src/assets/fonts/Graphik-Bold-Web.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Medium-Web.eot b/site/src/assets/fonts/Graphik-Medium-Web.eot deleted file mode 100644 index 99d89f96b..000000000 Binary files a/site/src/assets/fonts/Graphik-Medium-Web.eot and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Medium-Web.woff b/site/src/assets/fonts/Graphik-Medium-Web.woff deleted file mode 100644 index 5c40f2bbe..000000000 Binary files a/site/src/assets/fonts/Graphik-Medium-Web.woff and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Medium-Web.woff2 b/site/src/assets/fonts/Graphik-Medium-Web.woff2 deleted file mode 100644 index 4f6dfac44..000000000 Binary files a/site/src/assets/fonts/Graphik-Medium-Web.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Regular-Web.eot b/site/src/assets/fonts/Graphik-Regular-Web.eot deleted file mode 100644 index 2cc66cec1..000000000 Binary files a/site/src/assets/fonts/Graphik-Regular-Web.eot and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Regular-Web.woff b/site/src/assets/fonts/Graphik-Regular-Web.woff deleted file mode 100644 index 4ca30e1fa..000000000 Binary files a/site/src/assets/fonts/Graphik-Regular-Web.woff and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Regular-Web.woff2 b/site/src/assets/fonts/Graphik-Regular-Web.woff2 deleted file mode 100644 index 005394a0d..000000000 Binary files a/site/src/assets/fonts/Graphik-Regular-Web.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Semibold-Web.eot b/site/src/assets/fonts/Graphik-Semibold-Web.eot deleted file mode 100644 index 7edb2f008..000000000 Binary files a/site/src/assets/fonts/Graphik-Semibold-Web.eot and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Semibold-Web.woff b/site/src/assets/fonts/Graphik-Semibold-Web.woff deleted file mode 100644 index feb94c5f9..000000000 Binary files a/site/src/assets/fonts/Graphik-Semibold-Web.woff and /dev/null differ diff --git a/site/src/assets/fonts/Graphik-Semibold-Web.woff2 b/site/src/assets/fonts/Graphik-Semibold-Web.woff2 deleted file mode 100644 index aa1337e80..000000000 Binary files a/site/src/assets/fonts/Graphik-Semibold-Web.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Black.woff b/site/src/assets/fonts/inter/Inter-Black.woff deleted file mode 100755 index b2c4e27c5..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Black.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Black.woff2 b/site/src/assets/fonts/inter/Inter-Black.woff2 deleted file mode 100755 index 5e7bd9f14..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Black.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-BlackItalic.woff b/site/src/assets/fonts/inter/Inter-BlackItalic.woff deleted file mode 100755 index ff10955ec..000000000 Binary files a/site/src/assets/fonts/inter/Inter-BlackItalic.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-BlackItalic.woff2 b/site/src/assets/fonts/inter/Inter-BlackItalic.woff2 deleted file mode 100755 index 97f3c0b3c..000000000 Binary files a/site/src/assets/fonts/inter/Inter-BlackItalic.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Bold.woff b/site/src/assets/fonts/inter/Inter-Bold.woff deleted file mode 100755 index 43dfb67fe..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Bold.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Bold.woff2 b/site/src/assets/fonts/inter/Inter-Bold.woff2 deleted file mode 100755 index b26180b16..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Bold.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-BoldItalic.woff b/site/src/assets/fonts/inter/Inter-BoldItalic.woff deleted file mode 100755 index 0aa33d061..000000000 Binary files a/site/src/assets/fonts/inter/Inter-BoldItalic.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-BoldItalic.woff2 b/site/src/assets/fonts/inter/Inter-BoldItalic.woff2 deleted file mode 100755 index 07ad99d9d..000000000 Binary files a/site/src/assets/fonts/inter/Inter-BoldItalic.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ExtraBold.woff b/site/src/assets/fonts/inter/Inter-ExtraBold.woff deleted file mode 100755 index a814de5c1..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ExtraBold.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ExtraBold.woff2 b/site/src/assets/fonts/inter/Inter-ExtraBold.woff2 deleted file mode 100755 index fc1e3e2ab..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ExtraBold.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff b/site/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff deleted file mode 100755 index 6eaf0b237..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 b/site/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 deleted file mode 100755 index 79a245281..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ExtraBoldItalic.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ExtraLight-BETA.woff b/site/src/assets/fonts/inter/Inter-ExtraLight-BETA.woff deleted file mode 100755 index 131a66fc7..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ExtraLight-BETA.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ExtraLight-BETA.woff2 b/site/src/assets/fonts/inter/Inter-ExtraLight-BETA.woff2 deleted file mode 100755 index e080a70ea..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ExtraLight-BETA.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ExtraLightItalic-BETA.woff b/site/src/assets/fonts/inter/Inter-ExtraLightItalic-BETA.woff deleted file mode 100755 index 257b53a11..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ExtraLightItalic-BETA.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ExtraLightItalic-BETA.woff2 b/site/src/assets/fonts/inter/Inter-ExtraLightItalic-BETA.woff2 deleted file mode 100755 index 0ccb9b64b..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ExtraLightItalic-BETA.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Italic.woff b/site/src/assets/fonts/inter/Inter-Italic.woff deleted file mode 100755 index 7e07d71ef..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Italic.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Italic.woff2 b/site/src/assets/fonts/inter/Inter-Italic.woff2 deleted file mode 100755 index 435fe822f..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Italic.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Light-BETA.woff b/site/src/assets/fonts/inter/Inter-Light-BETA.woff deleted file mode 100755 index 0b46abc09..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Light-BETA.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Light-BETA.woff2 b/site/src/assets/fonts/inter/Inter-Light-BETA.woff2 deleted file mode 100755 index c5fcddd38..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Light-BETA.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-LightItalic-BETA.woff b/site/src/assets/fonts/inter/Inter-LightItalic-BETA.woff deleted file mode 100755 index d1101cfe9..000000000 Binary files a/site/src/assets/fonts/inter/Inter-LightItalic-BETA.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-LightItalic-BETA.woff2 b/site/src/assets/fonts/inter/Inter-LightItalic-BETA.woff2 deleted file mode 100755 index fafad9a52..000000000 Binary files a/site/src/assets/fonts/inter/Inter-LightItalic-BETA.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Medium.woff b/site/src/assets/fonts/inter/Inter-Medium.woff deleted file mode 100755 index 15079dcff..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Medium.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Medium.woff2 b/site/src/assets/fonts/inter/Inter-Medium.woff2 deleted file mode 100755 index 7d0fbe9ed..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Medium.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-MediumItalic.woff b/site/src/assets/fonts/inter/Inter-MediumItalic.woff deleted file mode 100755 index 7d8c12227..000000000 Binary files a/site/src/assets/fonts/inter/Inter-MediumItalic.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-MediumItalic.woff2 b/site/src/assets/fonts/inter/Inter-MediumItalic.woff2 deleted file mode 100755 index fa86742cb..000000000 Binary files a/site/src/assets/fonts/inter/Inter-MediumItalic.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Regular.woff b/site/src/assets/fonts/inter/Inter-Regular.woff deleted file mode 100755 index e8587fd87..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Regular.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Regular.woff2 b/site/src/assets/fonts/inter/Inter-Regular.woff2 deleted file mode 100755 index 46568fdcd..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Regular.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-SemiBold.woff b/site/src/assets/fonts/inter/Inter-SemiBold.woff deleted file mode 100755 index de40b73e8..000000000 Binary files a/site/src/assets/fonts/inter/Inter-SemiBold.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-SemiBold.woff2 b/site/src/assets/fonts/inter/Inter-SemiBold.woff2 deleted file mode 100755 index 6bb8bee18..000000000 Binary files a/site/src/assets/fonts/inter/Inter-SemiBold.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-SemiBoldItalic.woff b/site/src/assets/fonts/inter/Inter-SemiBoldItalic.woff deleted file mode 100755 index 47b0df3a9..000000000 Binary files a/site/src/assets/fonts/inter/Inter-SemiBoldItalic.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2 b/site/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2 deleted file mode 100755 index 9bfbdb842..000000000 Binary files a/site/src/assets/fonts/inter/Inter-SemiBoldItalic.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Thin-BETA.woff b/site/src/assets/fonts/inter/Inter-Thin-BETA.woff deleted file mode 100755 index 46d147273..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Thin-BETA.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-Thin-BETA.woff2 b/site/src/assets/fonts/inter/Inter-Thin-BETA.woff2 deleted file mode 100755 index 382a46456..000000000 Binary files a/site/src/assets/fonts/inter/Inter-Thin-BETA.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ThinItalic-BETA.woff b/site/src/assets/fonts/inter/Inter-ThinItalic-BETA.woff deleted file mode 100755 index 6c284f348..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ThinItalic-BETA.woff and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-ThinItalic-BETA.woff2 b/site/src/assets/fonts/inter/Inter-ThinItalic-BETA.woff2 deleted file mode 100755 index f9471a08c..000000000 Binary files a/site/src/assets/fonts/inter/Inter-ThinItalic-BETA.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-italic.var.woff2 b/site/src/assets/fonts/inter/Inter-italic.var.woff2 deleted file mode 100755 index 83fb63143..000000000 Binary files a/site/src/assets/fonts/inter/Inter-italic.var.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter-upright.var.woff2 b/site/src/assets/fonts/inter/Inter-upright.var.woff2 deleted file mode 100755 index db2b70ccb..000000000 Binary files a/site/src/assets/fonts/inter/Inter-upright.var.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/Inter.var.woff2 b/site/src/assets/fonts/inter/Inter.var.woff2 deleted file mode 100755 index e8d430914..000000000 Binary files a/site/src/assets/fonts/inter/Inter.var.woff2 and /dev/null differ diff --git a/site/src/assets/fonts/inter/inter.css b/site/src/assets/fonts/inter/inter.css deleted file mode 100755 index 235dfeaf9..000000000 --- a/site/src/assets/fonts/inter/inter.css +++ /dev/null @@ -1,184 +0,0 @@ -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 100; - src: url("Inter-Thin.woff2") format("woff2"), - url("Inter-Thin.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 100; - src: url("Inter-ThinItalic.woff2") format("woff2"), - url("Inter-ThinItalic.woff") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 200; - src: url("Inter-ExtraLight.woff2") format("woff2"), - url("Inter-ExtraLight.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 200; - src: url("Inter-ExtraLightItalic.woff2") format("woff2"), - url("Inter-ExtraLightItalic.woff") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 300; - src: url("Inter-Light.woff2") format("woff2"), - url("Inter-Light.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 300; - src: url("Inter-LightItalic.woff2") format("woff2"), - url("Inter-LightItalic.woff") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 400; - src: url("Inter-Regular.woff2") format("woff2"), - url("Inter-Regular.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 400; - src: url("Inter-Italic.woff2") format("woff2"), - url("Inter-Italic.woff") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 500; - src: url("Inter-Medium.woff2") format("woff2"), - url("Inter-Medium.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 500; - src: url("Inter-MediumItalic.woff2") format("woff2"), - url("Inter-MediumItalic.woff") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 600; - src: url("Inter-SemiBold.woff2") format("woff2"), - url("Inter-SemiBold.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 600; - src: url("Inter-SemiBoldItalic.woff2") format("woff2"), - url("Inter-SemiBoldItalic.woff") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 700; - src: url("Inter-Bold.woff2") format("woff2"), - url("Inter-Bold.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 700; - src: url("Inter-BoldItalic.woff2") format("woff2"), - url("Inter-BoldItalic.woff") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 800; - src: url("Inter-ExtraBold.woff2") format("woff2"), - url("Inter-ExtraBold.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 800; - src: url("Inter-ExtraBoldItalic.woff2") format("woff2"), - url("Inter-ExtraBoldItalic.woff") format("woff"); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 900; - src: url("Inter-Black.woff2") format("woff2"), - url("Inter-Black.woff") format("woff"); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 900; - src: url("Inter-BlackItalic.woff2") format("woff2"), - url("Inter-BlackItalic.woff") format("woff"); -} - -/* ------------------------------------------------------- -Variable font. -Usage: - - html { font-family: 'Inter', sans-serif; } - @supports (font-variation-settings: normal) { - html { font-family: 'Inter var', sans-serif; } - } -*/ -@font-face { - font-family: 'Inter var'; - font-weight: 100 900; - font-style: normal; - font-named-instance: 'Regular'; - src: url("Inter-upright.var.woff2") format("woff2 supports variations(gvar)"), - url("Inter-upright.var.woff2") format("woff2-variations"), - url("Inter-upright.var.woff2") format("woff2"); -} -@font-face { - font-family: 'Inter var'; - font-weight: 100 900; - font-style: italic; - font-named-instance: 'Italic'; - src: url("Inter-italic.var.woff2") format("woff2 supports variations(gvar)"), - url("Inter-italic.var.woff2") format("woff2-variations"), - url("Inter-italic.var.woff2") format("woff2"); -} - - -/* -------------------------------------------------------------------------- -[EXPERIMENTAL] Multi-axis, single variable font. - -Slant axis is not yet widely supported (as of February 2019) and thus this -multi-axis single variable font is opt-in rather than the default. - -When using this, you will probably need to set font-variation-settings -explicitly, e.g. - - * { font-variation-settings: "slnt" 0deg } - .italic { font-variation-settings: "slnt" 10deg } - -*/ -@font-face { - font-family: 'Inter var experimental'; - font-weight: 100 900; - font-style: oblique 0deg 10deg; - src: url("Inter.var.woff2") format("woff2-variations"), - url("Inter.var.woff2") format("woff2"); -} diff --git a/site/src/assets/img/capacitor-hero.jpg b/site/src/assets/img/capacitor-hero.jpg deleted file mode 100755 index 5fa241196..000000000 Binary files a/site/src/assets/img/capacitor-hero.jpg and /dev/null differ diff --git a/site/src/assets/img/checkbox.png b/site/src/assets/img/checkbox.png deleted file mode 100644 index 72fbbe6d4..000000000 Binary files a/site/src/assets/img/checkbox.png and /dev/null differ diff --git a/site/src/assets/img/docs/android/apk-failed.png b/site/src/assets/img/docs/android/apk-failed.png deleted file mode 100644 index 3214db5cf..000000000 Binary files a/site/src/assets/img/docs/android/apk-failed.png and /dev/null differ diff --git a/site/src/assets/img/docs/android/clean-rebuild.png b/site/src/assets/img/docs/android/clean-rebuild.png deleted file mode 100644 index 1355ae8bd..000000000 Binary files a/site/src/assets/img/docs/android/clean-rebuild.png and /dev/null differ diff --git a/site/src/assets/img/docs/android/gradle-import.png b/site/src/assets/img/docs/android/gradle-import.png deleted file mode 100644 index b814e8ded..000000000 Binary files a/site/src/assets/img/docs/android/gradle-import.png and /dev/null differ diff --git a/site/src/assets/img/docs/android/invalidate-caches.png b/site/src/assets/img/docs/android/invalidate-caches.png deleted file mode 100644 index 2f9b31a58..000000000 Binary files a/site/src/assets/img/docs/android/invalidate-caches.png and /dev/null differ diff --git a/site/src/assets/img/docs/android/running.png b/site/src/assets/img/docs/android/running.png deleted file mode 100644 index fbdfb463d..000000000 Binary files a/site/src/assets/img/docs/android/running.png and /dev/null differ diff --git a/site/src/assets/img/docs/android/sdk-platforms.png b/site/src/assets/img/docs/android/sdk-platforms.png deleted file mode 100644 index e7149934d..000000000 Binary files a/site/src/assets/img/docs/android/sdk-platforms.png and /dev/null differ diff --git a/site/src/assets/img/docs/android/sdk-tools.png b/site/src/assets/img/docs/android/sdk-tools.png deleted file mode 100644 index 54d3490d6..000000000 Binary files a/site/src/assets/img/docs/android/sdk-tools.png and /dev/null differ diff --git a/site/src/assets/img/docs/android/sync-gradle.png b/site/src/assets/img/docs/android/sync-gradle.png deleted file mode 100644 index f5c15b283..000000000 Binary files a/site/src/assets/img/docs/android/sync-gradle.png and /dev/null differ diff --git a/site/src/assets/img/docs/capacitor-index.png b/site/src/assets/img/docs/capacitor-index.png deleted file mode 100644 index a3de1be54..000000000 Binary files a/site/src/assets/img/docs/capacitor-index.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/deep-links/android-config.png b/site/src/assets/img/docs/guides/deep-links/android-config.png deleted file mode 100644 index 5a1e595c9..000000000 Binary files a/site/src/assets/img/docs/guides/deep-links/android-config.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/deep-links/ios-config.png b/site/src/assets/img/docs/guides/deep-links/ios-config.png deleted file mode 100644 index 4ded610e4..000000000 Binary files a/site/src/assets/img/docs/guides/deep-links/ios-config.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/deep-links/keystore-sha256.png b/site/src/assets/img/docs/guides/deep-links/keystore-sha256.png deleted file mode 100644 index ae25e0049..000000000 Binary files a/site/src/assets/img/docs/guides/deep-links/keystore-sha256.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/deep-links/xcode-associated-domain.png b/site/src/assets/img/docs/guides/deep-links/xcode-associated-domain.png deleted file mode 100644 index b655d63ce..000000000 Binary files a/site/src/assets/img/docs/guides/deep-links/xcode-associated-domain.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/firebase-push-notifications/add-android-app.png b/site/src/assets/img/docs/guides/firebase-push-notifications/add-android-app.png deleted file mode 100644 index d1f4b53d6..000000000 Binary files a/site/src/assets/img/docs/guides/firebase-push-notifications/add-android-app.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/firebase-push-notifications/change-push-target-firebase.png b/site/src/assets/img/docs/guides/firebase-push-notifications/change-push-target-firebase.png deleted file mode 100644 index 45ce04229..000000000 Binary files a/site/src/assets/img/docs/guides/firebase-push-notifications/change-push-target-firebase.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/firebase-push-notifications/google-plist-location-ios.png b/site/src/assets/img/docs/guides/firebase-push-notifications/google-plist-location-ios.png deleted file mode 100644 index 2abe9c63e..000000000 Binary files a/site/src/assets/img/docs/guides/firebase-push-notifications/google-plist-location-ios.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/firebase-push-notifications/google-services-location-android.png b/site/src/assets/img/docs/guides/firebase-push-notifications/google-services-location-android.png deleted file mode 100644 index 792b8954d..000000000 Binary files a/site/src/assets/img/docs/guides/firebase-push-notifications/google-services-location-android.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/firebase-push-notifications/podfile-location-ios.png b/site/src/assets/img/docs/guides/firebase-push-notifications/podfile-location-ios.png deleted file mode 100644 index 000db2142..000000000 Binary files a/site/src/assets/img/docs/guides/firebase-push-notifications/podfile-location-ios.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/firebase-push-notifications/push-test-android.png b/site/src/assets/img/docs/guides/firebase-push-notifications/push-test-android.png deleted file mode 100644 index f2b118d92..000000000 Binary files a/site/src/assets/img/docs/guides/firebase-push-notifications/push-test-android.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/firebase-push-notifications/push-test-ios.png b/site/src/assets/img/docs/guides/firebase-push-notifications/push-test-ios.png deleted file mode 100644 index 64618ea4e..000000000 Binary files a/site/src/assets/img/docs/guides/firebase-push-notifications/push-test-ios.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/ionic-framework/android-device.png b/site/src/assets/img/docs/guides/ionic-framework/android-device.png deleted file mode 100644 index cfd451064..000000000 Binary files a/site/src/assets/img/docs/guides/ionic-framework/android-device.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/ionic-framework/android-manifest.png b/site/src/assets/img/docs/guides/ionic-framework/android-manifest.png deleted file mode 100644 index 1305f3afa..000000000 Binary files a/site/src/assets/img/docs/guides/ionic-framework/android-manifest.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/ionic-framework/android-permissions-photo.png b/site/src/assets/img/docs/guides/ionic-framework/android-permissions-photo.png deleted file mode 100644 index 7ceb94eb7..000000000 Binary files a/site/src/assets/img/docs/guides/ionic-framework/android-permissions-photo.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/ionic-framework/camera-web.png b/site/src/assets/img/docs/guides/ionic-framework/camera-web.png deleted file mode 100644 index 69f61146e..000000000 Binary files a/site/src/assets/img/docs/guides/ionic-framework/camera-web.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/ionic-framework/ios-permissions-photo.png b/site/src/assets/img/docs/guides/ionic-framework/ios-permissions-photo.png deleted file mode 100644 index 4d64b5879..000000000 Binary files a/site/src/assets/img/docs/guides/ionic-framework/ios-permissions-photo.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/ionic-framework/xcode-build-button.png b/site/src/assets/img/docs/guides/ionic-framework/xcode-build-button.png deleted file mode 100644 index bef97223e..000000000 Binary files a/site/src/assets/img/docs/guides/ionic-framework/xcode-build-button.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/ionic-framework/xcode-info-plist.png b/site/src/assets/img/docs/guides/ionic-framework/xcode-info-plist.png deleted file mode 100644 index e0bc192a2..000000000 Binary files a/site/src/assets/img/docs/guides/ionic-framework/xcode-info-plist.png and /dev/null differ diff --git a/site/src/assets/img/docs/guides/ionic-framework/xcode-signing.png b/site/src/assets/img/docs/guides/ionic-framework/xcode-signing.png deleted file mode 100644 index 92b436c6a..000000000 Binary files a/site/src/assets/img/docs/guides/ionic-framework/xcode-signing.png and /dev/null differ diff --git a/site/src/assets/img/docs/ios/deleting-derived-data.png b/site/src/assets/img/docs/ios/deleting-derived-data.png deleted file mode 100644 index a9fcf26de..000000000 Binary files a/site/src/assets/img/docs/ios/deleting-derived-data.png and /dev/null differ diff --git a/site/src/assets/img/docs/ios/disable-push-plugin.png b/site/src/assets/img/docs/ios/disable-push-plugin.png deleted file mode 100644 index 92ed4f6a3..000000000 Binary files a/site/src/assets/img/docs/ios/disable-push-plugin.png and /dev/null differ diff --git a/site/src/assets/img/docs/ios/enable-push-capabilities.png b/site/src/assets/img/docs/ios/enable-push-capabilities.png deleted file mode 100644 index 7fd47853f..000000000 Binary files a/site/src/assets/img/docs/ios/enable-push-capabilities.png and /dev/null differ diff --git a/site/src/assets/img/docs/ios/export-bridge.png b/site/src/assets/img/docs/ios/export-bridge.png deleted file mode 100644 index f7745d86d..000000000 Binary files a/site/src/assets/img/docs/ios/export-bridge.png and /dev/null differ diff --git a/site/src/assets/img/docs/ios/indexing.png b/site/src/assets/img/docs/ios/indexing.png deleted file mode 100644 index af911b16f..000000000 Binary files a/site/src/assets/img/docs/ios/indexing.png and /dev/null differ diff --git a/site/src/assets/img/docs/ios/location-prefs.png b/site/src/assets/img/docs/ios/location-prefs.png deleted file mode 100644 index 0caf0c690..000000000 Binary files a/site/src/assets/img/docs/ios/location-prefs.png and /dev/null differ diff --git a/site/src/assets/img/docs/ios/running.png b/site/src/assets/img/docs/ios/running.png deleted file mode 100644 index 1f6217c4d..000000000 Binary files a/site/src/assets/img/docs/ios/running.png and /dev/null differ diff --git a/site/src/assets/img/docs/project-structure.png b/site/src/assets/img/docs/project-structure.png deleted file mode 100644 index dcc0bfef7..000000000 Binary files a/site/src/assets/img/docs/project-structure.png and /dev/null differ diff --git a/site/src/assets/img/docs/pwa-elements.png b/site/src/assets/img/docs/pwa-elements.png deleted file mode 100644 index 79fbee82f..000000000 Binary files a/site/src/assets/img/docs/pwa-elements.png and /dev/null differ diff --git a/site/src/assets/img/favicon.ico b/site/src/assets/img/favicon.ico deleted file mode 100644 index 6f0e0fa7d..000000000 Binary files a/site/src/assets/img/favicon.ico and /dev/null differ diff --git a/site/src/assets/img/favicon.png b/site/src/assets/img/favicon.png deleted file mode 100644 index 6f0e0fa7d..000000000 Binary files a/site/src/assets/img/favicon.png and /dev/null differ diff --git a/site/src/assets/img/feature-icon-sprite.png b/site/src/assets/img/feature-icon-sprite.png deleted file mode 100644 index 66c19d2bc..000000000 Binary files a/site/src/assets/img/feature-icon-sprite.png and /dev/null differ diff --git a/site/src/assets/img/ionic-os-dark-logo.png b/site/src/assets/img/ionic-os-dark-logo.png deleted file mode 100644 index b58be10e4..000000000 Binary files a/site/src/assets/img/ionic-os-dark-logo.png and /dev/null differ diff --git a/site/src/assets/img/ionic-os-logo.png b/site/src/assets/img/ionic-os-logo.png deleted file mode 100644 index e821633b4..000000000 Binary files a/site/src/assets/img/ionic-os-logo.png and /dev/null differ diff --git a/site/src/assets/img/logo-dark.png b/site/src/assets/img/logo-dark.png deleted file mode 100644 index f428f3d7f..000000000 Binary files a/site/src/assets/img/logo-dark.png and /dev/null differ diff --git a/site/src/assets/img/logo-light.png b/site/src/assets/img/logo-light.png deleted file mode 100644 index eb872da45..000000000 Binary files a/site/src/assets/img/logo-light.png and /dev/null differ diff --git a/site/src/assets/img/right-img.png b/site/src/assets/img/right-img.png deleted file mode 100644 index 7d28a269e..000000000 Binary files a/site/src/assets/img/right-img.png and /dev/null differ diff --git a/site/src/assets/img/supported-env.png b/site/src/assets/img/supported-env.png deleted file mode 100644 index fba2c40a1..000000000 Binary files a/site/src/assets/img/supported-env.png and /dev/null differ diff --git a/site/src/assets/img/video-icon.png b/site/src/assets/img/video-icon.png deleted file mode 100644 index f71765c43..000000000 Binary files a/site/src/assets/img/video-icon.png and /dev/null differ diff --git a/site/src/components.d.ts b/site/src/components.d.ts deleted file mode 100644 index 2378e239a..000000000 --- a/site/src/components.d.ts +++ /dev/null @@ -1,329 +0,0 @@ -/* eslint-disable */ -/* tslint:disable */ -/** - * This is an autogenerated file created by the Stencil compiler. - * It contains typing information for all components that exist in this project. - */ -import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; -import { MarkdownContent, MarkdownHeading, SiteStructureItem, } from "./global/definitions"; -import { JSX, } from "@stencil/core"; -export namespace Components { - interface AnchorLink { - "to": string; - } - interface AppBurger { - } - interface AppIcon { - "name": string; - } - interface AppMarked { - "fetchPath"?: string; - "renderer"?: (doc: MarkdownContent) => JSX.Element; - } - interface AvcCodeType { - "typeId": string; - } - interface CapacitorEnterprise { - } - interface CapacitorSite { - "isLandingPage": boolean; - } - interface ContributorList { - "contributors": string[]; - "link": (contributor: string) => string; - } - interface DemosPage { - } - interface DocSnippet { - } - interface DocumentComponent { - "page": string; - "pages": string[]; - } - interface InPageNavigation { - "currentPageUrl": string; - "pageLinks": MarkdownHeading[]; - "srcUrl": string; - } - interface InternalAd { - } - interface LandingPage { - } - interface LowerContentNav { - "next"?: SiteStructureItem; - "prev"?: SiteStructureItem; - } - interface NewsletterSignup { - } - interface PluginApi { - "index": boolean; - "name": string; - } - interface PluginPlatforms { - "platforms": string; - } - interface SiteHeader { - } - interface SiteMenu { - "selectedParent": SiteStructureItem; - "siteStructureList": SiteStructureItem[]; - } -} -declare global { - interface HTMLAnchorLinkElement extends Components.AnchorLink, HTMLStencilElement { - } - var HTMLAnchorLinkElement: { - prototype: HTMLAnchorLinkElement; - new (): HTMLAnchorLinkElement; - }; - interface HTMLAppBurgerElement extends Components.AppBurger, HTMLStencilElement { - } - var HTMLAppBurgerElement: { - prototype: HTMLAppBurgerElement; - new (): HTMLAppBurgerElement; - }; - interface HTMLAppIconElement extends Components.AppIcon, HTMLStencilElement { - } - var HTMLAppIconElement: { - prototype: HTMLAppIconElement; - new (): HTMLAppIconElement; - }; - interface HTMLAppMarkedElement extends Components.AppMarked, HTMLStencilElement { - } - var HTMLAppMarkedElement: { - prototype: HTMLAppMarkedElement; - new (): HTMLAppMarkedElement; - }; - interface HTMLAvcCodeTypeElement extends Components.AvcCodeType, HTMLStencilElement { - } - var HTMLAvcCodeTypeElement: { - prototype: HTMLAvcCodeTypeElement; - new (): HTMLAvcCodeTypeElement; - }; - interface HTMLCapacitorEnterpriseElement extends Components.CapacitorEnterprise, HTMLStencilElement { - } - var HTMLCapacitorEnterpriseElement: { - prototype: HTMLCapacitorEnterpriseElement; - new (): HTMLCapacitorEnterpriseElement; - }; - interface HTMLCapacitorSiteElement extends Components.CapacitorSite, HTMLStencilElement { - } - var HTMLCapacitorSiteElement: { - prototype: HTMLCapacitorSiteElement; - new (): HTMLCapacitorSiteElement; - }; - interface HTMLContributorListElement extends Components.ContributorList, HTMLStencilElement { - } - var HTMLContributorListElement: { - prototype: HTMLContributorListElement; - new (): HTMLContributorListElement; - }; - interface HTMLDemosPageElement extends Components.DemosPage, HTMLStencilElement { - } - var HTMLDemosPageElement: { - prototype: HTMLDemosPageElement; - new (): HTMLDemosPageElement; - }; - interface HTMLDocSnippetElement extends Components.DocSnippet, HTMLStencilElement { - } - var HTMLDocSnippetElement: { - prototype: HTMLDocSnippetElement; - new (): HTMLDocSnippetElement; - }; - interface HTMLDocumentComponentElement extends Components.DocumentComponent, HTMLStencilElement { - } - var HTMLDocumentComponentElement: { - prototype: HTMLDocumentComponentElement; - new (): HTMLDocumentComponentElement; - }; - interface HTMLInPageNavigationElement extends Components.InPageNavigation, HTMLStencilElement { - } - var HTMLInPageNavigationElement: { - prototype: HTMLInPageNavigationElement; - new (): HTMLInPageNavigationElement; - }; - interface HTMLInternalAdElement extends Components.InternalAd, HTMLStencilElement { - } - var HTMLInternalAdElement: { - prototype: HTMLInternalAdElement; - new (): HTMLInternalAdElement; - }; - interface HTMLLandingPageElement extends Components.LandingPage, HTMLStencilElement { - } - var HTMLLandingPageElement: { - prototype: HTMLLandingPageElement; - new (): HTMLLandingPageElement; - }; - interface HTMLLowerContentNavElement extends Components.LowerContentNav, HTMLStencilElement { - } - var HTMLLowerContentNavElement: { - prototype: HTMLLowerContentNavElement; - new (): HTMLLowerContentNavElement; - }; - interface HTMLNewsletterSignupElement extends Components.NewsletterSignup, HTMLStencilElement { - } - var HTMLNewsletterSignupElement: { - prototype: HTMLNewsletterSignupElement; - new (): HTMLNewsletterSignupElement; - }; - interface HTMLPluginApiElement extends Components.PluginApi, HTMLStencilElement { - } - var HTMLPluginApiElement: { - prototype: HTMLPluginApiElement; - new (): HTMLPluginApiElement; - }; - interface HTMLPluginPlatformsElement extends Components.PluginPlatforms, HTMLStencilElement { - } - var HTMLPluginPlatformsElement: { - prototype: HTMLPluginPlatformsElement; - new (): HTMLPluginPlatformsElement; - }; - interface HTMLSiteHeaderElement extends Components.SiteHeader, HTMLStencilElement { - } - var HTMLSiteHeaderElement: { - prototype: HTMLSiteHeaderElement; - new (): HTMLSiteHeaderElement; - }; - interface HTMLSiteMenuElement extends Components.SiteMenu, HTMLStencilElement { - } - var HTMLSiteMenuElement: { - prototype: HTMLSiteMenuElement; - new (): HTMLSiteMenuElement; - }; - interface HTMLElementTagNameMap { - "anchor-link": HTMLAnchorLinkElement; - "app-burger": HTMLAppBurgerElement; - "app-icon": HTMLAppIconElement; - "app-marked": HTMLAppMarkedElement; - "avc-code-type": HTMLAvcCodeTypeElement; - "capacitor-enterprise": HTMLCapacitorEnterpriseElement; - "capacitor-site": HTMLCapacitorSiteElement; - "contributor-list": HTMLContributorListElement; - "demos-page": HTMLDemosPageElement; - "doc-snippet": HTMLDocSnippetElement; - "document-component": HTMLDocumentComponentElement; - "in-page-navigation": HTMLInPageNavigationElement; - "internal-ad": HTMLInternalAdElement; - "landing-page": HTMLLandingPageElement; - "lower-content-nav": HTMLLowerContentNavElement; - "newsletter-signup": HTMLNewsletterSignupElement; - "plugin-api": HTMLPluginApiElement; - "plugin-platforms": HTMLPluginPlatformsElement; - "site-header": HTMLSiteHeaderElement; - "site-menu": HTMLSiteMenuElement; - } -} -declare namespace LocalJSX { - interface AnchorLink { - "to"?: string; - } - interface AppBurger { - "onBurgerClick"?: (event: CustomEvent) => void; - } - interface AppIcon { - "name"?: string; - } - interface AppMarked { - "fetchPath"?: string; - "renderer"?: (doc: MarkdownContent) => JSX.Element; - } - interface AvcCodeType { - "typeId"?: string; - } - interface CapacitorEnterprise { - } - interface CapacitorSite { - "isLandingPage"?: boolean; - } - interface ContributorList { - "contributors"?: string[]; - "link"?: (contributor: string) => string; - } - interface DemosPage { - } - interface DocSnippet { - } - interface DocumentComponent { - "page"?: string; - "pages"?: string[]; - } - interface InPageNavigation { - "currentPageUrl"?: string; - "pageLinks"?: MarkdownHeading[]; - "srcUrl"?: string; - } - interface InternalAd { - "onInternalAdLoaded"?: (event: CustomEvent) => void; - } - interface LandingPage { - } - interface LowerContentNav { - "next"?: SiteStructureItem; - "prev"?: SiteStructureItem; - } - interface NewsletterSignup { - } - interface PluginApi { - "index"?: boolean; - "name"?: string; - } - interface PluginPlatforms { - "platforms"?: string; - } - interface SiteHeader { - } - interface SiteMenu { - "onLeftSidebarClick"?: (event: CustomEvent) => void; - "selectedParent"?: SiteStructureItem; - "siteStructureList"?: SiteStructureItem[]; - } - interface IntrinsicElements { - "anchor-link": AnchorLink; - "app-burger": AppBurger; - "app-icon": AppIcon; - "app-marked": AppMarked; - "avc-code-type": AvcCodeType; - "capacitor-enterprise": CapacitorEnterprise; - "capacitor-site": CapacitorSite; - "contributor-list": ContributorList; - "demos-page": DemosPage; - "doc-snippet": DocSnippet; - "document-component": DocumentComponent; - "in-page-navigation": InPageNavigation; - "internal-ad": InternalAd; - "landing-page": LandingPage; - "lower-content-nav": LowerContentNav; - "newsletter-signup": NewsletterSignup; - "plugin-api": PluginApi; - "plugin-platforms": PluginPlatforms; - "site-header": SiteHeader; - "site-menu": SiteMenu; - } -} -export { LocalJSX as JSX }; -declare module "@stencil/core" { - export namespace JSX { - interface IntrinsicElements { - "anchor-link": LocalJSX.AnchorLink & JSXBase.HTMLAttributes; - "app-burger": LocalJSX.AppBurger & JSXBase.HTMLAttributes; - "app-icon": LocalJSX.AppIcon & JSXBase.HTMLAttributes; - "app-marked": LocalJSX.AppMarked & JSXBase.HTMLAttributes; - "avc-code-type": LocalJSX.AvcCodeType & JSXBase.HTMLAttributes; - "capacitor-enterprise": LocalJSX.CapacitorEnterprise & JSXBase.HTMLAttributes; - "capacitor-site": LocalJSX.CapacitorSite & JSXBase.HTMLAttributes; - "contributor-list": LocalJSX.ContributorList & JSXBase.HTMLAttributes; - "demos-page": LocalJSX.DemosPage & JSXBase.HTMLAttributes; - "doc-snippet": LocalJSX.DocSnippet & JSXBase.HTMLAttributes; - "document-component": LocalJSX.DocumentComponent & JSXBase.HTMLAttributes; - "in-page-navigation": LocalJSX.InPageNavigation & JSXBase.HTMLAttributes; - "internal-ad": LocalJSX.InternalAd & JSXBase.HTMLAttributes; - "landing-page": LocalJSX.LandingPage & JSXBase.HTMLAttributes; - "lower-content-nav": LocalJSX.LowerContentNav & JSXBase.HTMLAttributes; - "newsletter-signup": LocalJSX.NewsletterSignup & JSXBase.HTMLAttributes; - "plugin-api": LocalJSX.PluginApi & JSXBase.HTMLAttributes; - "plugin-platforms": LocalJSX.PluginPlatforms & JSXBase.HTMLAttributes; - "site-header": LocalJSX.SiteHeader & JSXBase.HTMLAttributes; - "site-menu": LocalJSX.SiteMenu & JSXBase.HTMLAttributes; - } - } -} diff --git a/site/src/components/anchor-link/anchor-link.scss b/site/src/components/anchor-link/anchor-link.scss deleted file mode 100644 index 41418a74d..000000000 --- a/site/src/components/anchor-link/anchor-link.scss +++ /dev/null @@ -1,25 +0,0 @@ -@import '../../global/variables'; - -anchor-link { - cursor: pointer; - user-select: none; - &.hover-anchor { - position: absolute; - margin-left: -25px; - color: #d6d1d1; - } -} -.anchor-link-relative { - position: relative; -} - -.anchor-link-relative { - position: relative; -} - - -@media screen and (max-width: $breakpoint-md) { - anchor-link.hover-anchor { - margin-left: -18px; - } -} diff --git a/site/src/components/anchor-link/anchor-link.tsx b/site/src/components/anchor-link/anchor-link.tsx deleted file mode 100644 index 4b8375fdf..000000000 --- a/site/src/components/anchor-link/anchor-link.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { Component, h, Prop } from '@stencil/core'; - -/** - * Used in the generated doc markup as well as the site, so don't remve this - * even if it looks like no one is using it - */ -@Component({ - tag: 'anchor-link', - styleUrl: 'anchor-link.scss' -}) -export class AnchorLink { - @Prop() to: string; - - handleClick(_e: MouseEvent) { - if (document.location.hash !== '#' + this.to) { - document.location.hash = this.to; - let scrollTop = document.querySelector('html').scrollTop; - // Update scroll top to clear the header bar - window.scrollTo(0, scrollTop - 80); - } else { - document.location.hash = ''; - document.location.hash = this.to; - } - } - - render() { - return ( -
- -
- ) - } -} diff --git a/site/src/components/app-burger/app-burger.scss b/site/src/components/app-burger/app-burger.scss deleted file mode 100644 index 1824661e5..000000000 --- a/site/src/components/app-burger/app-burger.scss +++ /dev/null @@ -1,56 +0,0 @@ -@import '../../global/variables'; - -app-burger { - display: none; - position: fixed; - top: 0px; - left: 0px; - z-index: 999; - - & > div { - padding: 18px; - display: flex; - align-items: flex-start; - justify-content: center; - - &:hover app-icon{ - opacity: 1; - } - } - - .icon-menu { - display: block; - } - - .icon-close { - display: none; - } - - app-icon { - transition: opacity 0.3s; - opacity: 0.7; - cursor: pointer; - } - - &.left-sidebar-in { - & > div { - height: 100vh; - padding-right: 50px; - } - - .icon-menu { - display: none; - } - - .icon-close { - display: block; - } - } - -} - -@media screen and (max-width: $breakpoint-md) { - app-burger { - display: block; - } -} diff --git a/site/src/components/app-burger/app-burger.tsx b/site/src/components/app-burger/app-burger.tsx deleted file mode 100644 index 3204fdef5..000000000 --- a/site/src/components/app-burger/app-burger.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Component, Event, EventEmitter, h } from '@stencil/core'; - -@Component({ - tag: 'app-burger', - styleUrl: 'app-burger.scss' -}) -export class AppBurger { - - @Event() burgerClick: EventEmitter; - - handleBurgerClicked() { - this.burgerClick.emit(); - } - - render() { - return ( -
this.handleBurgerClicked() }> - - -
- ) - } -} diff --git a/site/src/components/app-icon/app-icon.scss b/site/src/components/app-icon/app-icon.scss deleted file mode 100644 index 2b3664798..000000000 --- a/site/src/components/app-icon/app-icon.scss +++ /dev/null @@ -1,47 +0,0 @@ -app-icon { - .icon-checkmark { - fill: #4CAFFF; - width: 15px; - height: 11px; - } - - .icon-targetblank { - fill: #86869c; - width: 9px; - height: 9px; - } - - .icon-slack, - .icon-twitter { - fill: #16161d; - width: 20px; - height: 20px; - } - - .icon-menu { - fill: #4CAFFF; - width: 17px; - height: 15px; - } - - .icon-close { - fill: #4CAFFF; - width: 14px; - height: 14px; - } - - .icon-more { - fill: #4CAFFF; - width: 4px; - height: 18px; - } -} - -.landing-page app-icon { - .icon-slack, - .icon-twitter { - fill: #4CAFFF; - width: 20px; - height: 20px; - } -} diff --git a/site/src/components/app-icon/app-icon.tsx b/site/src/components/app-icon/app-icon.tsx deleted file mode 100644 index ad1c179ef..000000000 --- a/site/src/components/app-icon/app-icon.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import { Component, Prop, h } from '@stencil/core'; - -@Component({ - tag: 'app-icon', - styleUrl: 'app-icon.scss' -}) -export class AppIcon { - - @Prop() name: string; - - render() { - return ( - - - - ); - } -} diff --git a/site/src/components/app-marked/app-marked.scss b/site/src/components/app-marked/app-marked.scss deleted file mode 100644 index 76b667cd7..000000000 --- a/site/src/components/app-marked/app-marked.scss +++ /dev/null @@ -1,183 +0,0 @@ - - -app-marked { - display: flex; - justify-content: space-between; - flex: 1; - min-width: 0; - width: 100%; - padding-top: 86px; - padding-bottom: 32px; -} - - -/** -* xonokai theme for JavaScript, CSS and HTML -* based on: https://github.com/MoOx/sass-prism-theme-base by Maxime Thirouin ~ MoOx --> http://moox.fr/ , which is Loosely based on Monokai textmate theme by http://www.monokai.nl/ -* license: MIT; http://moox.mit-license.org/ -*/ -code[class*="language-"], -pre[class*="language-"] { - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; - white-space: normal; - word-wrap: normal; - font-size: 14px; - line-height: 20px; - color: #e4e4e4; - text-shadow: none; -} - -pre[class*="language-"], -:not(pre) > code[class*="language-"] { - background: #212431; -} - -pre[class*="language-"] { - - border-radius: 4px; - border: none; - overflow: auto; - position: relative; -} - -pre[class*="language-"] code { - white-space: pre; - display: block; - margin: 22px 24px !important; - display: block; -} - -:not(pre) > code[class*="language-"] { - padding: 0.15em 0.2em 0.05em; - border-radius: .3em; - border: 0.13em solid #7a6652; - box-shadow: 1px 1px 0.3em -0.1em #000 inset; -} - -/* Line highlight plugin */ -pre[class*="language-"] { - position: relative; -} - -pre .line-highlight { - position: absolute; - left: 0; - right: 0; - padding: 0 0 0 22px; - background: rgba(86, 90, 101, 0.4); -} - -.token.comment { - color: #5c6370; - font-style: italic; -} - -.token.function { - color: #61aeee; -} - -.token.class-name, -.token.builtin { - color: #e6c07b; -} - -.token.namespace { - opacity: .7; -} - -.token.prolog, -.token.doctype, -.token.cdata { - color: #6f705e; -} - -.token.boolean, -.token.number { - color: #a77afe; -} - -.token.string { - color: #98c379; -} - -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string { - color: #e6d06c; -} - -.token.selector, -.token.inserted { - color: #a6e22d; -} - -.token.atrule, -.token.keyword, -.token.important, -.token.deleted { - color: #c678dd; -} - -.token.regex, -.token.statement { - color: #76d9e6; -} - -.token.placeholder, -.token.variable { - color: #fff; -} - -.token.important, -.token.statement, -.token.bold { - font-weight: bold; -} - -.token.operator, -.token.punctuation { - color: #bebec5; -} - -.token.entity { - cursor: help; -} - -.token.italic { - font-style: italic; -} - -code.language-markup { - color: #f9f9f9; -} - -code.language-markup .token.tag, -.token.tag { - color: #da5686; -} - -code.language-markup .token.attr-name, -.token.attr-name { - color: #98c379; -} - -code.language-markup .token.attr-value, -.token.attr-value { - color: #e6d06c; -} - -code.language-markup .token.style, -code.language-markup .token.script { - color: #76d9e6; -} - -code.language-markup .token.script .token.keyword { - color: #76d9e6; -} diff --git a/site/src/components/app-marked/app-marked.tsx b/site/src/components/app-marked/app-marked.tsx deleted file mode 100644 index 3f77e18eb..000000000 --- a/site/src/components/app-marked/app-marked.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Component, Prop, State, Watch, JSX} from '@stencil/core'; -import { MarkdownContent, } from '../../global/definitions'; - -@Component({ - tag: 'app-marked', - styleUrl: 'app-marked.scss' -}) -export class AppMarked{ - - @Prop() fetchPath?: string; - @Prop() renderer?: (doc: MarkdownContent) => JSX.Element; - - @State() docsContent: MarkdownContent = {}; - - componentWillLoad() { - return this.fetchNewContent(this.fetchPath); - } - - @Watch('fetchPath') - fetchNewContent(docPath: string, oldDocPath?: string) { - if (docPath == null || docPath === oldDocPath) { - return; - } - return fetchContent(this.fetchPath).then(data => { - if (data != null) { - this.docsContent = data; - } - }); - } - - render() { - return this.renderer ? this.renderer(this.docsContent) : null; - } -} - -const localCache = new Map>(); - -function fetchContent(path: string) { - let promise = localCache.get(path); - if (!promise) { - promise = fetch(path, {cache: 'force-cache'}).then(response => response.json()); - localCache.set(path, promise); - } - return promise; -} diff --git a/site/src/components/avc-code-type/avc-code-type.tsx b/site/src/components/avc-code-type/avc-code-type.tsx deleted file mode 100644 index 92a3f81db..000000000 --- a/site/src/components/avc-code-type/avc-code-type.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Component, Prop, h } from '@stencil/core'; - -@Component({ - tag: 'avc-code-type', - styles: ` - :host { - color: #5EB6FC; - display: inline-block; - color: $link-color; - font-weight: 500; - } - `, - shadow: true -}) -export class AvcCodeType { - - @Prop() typeId: string; - - render() { - if(this.typeId) { - return (); - } - return ( - - ) - } -} diff --git a/site/src/components/capacitor-site/capacitor-site.scss b/site/src/components/capacitor-site/capacitor-site.scss deleted file mode 100644 index 91c79f8e3..000000000 --- a/site/src/components/capacitor-site/capacitor-site.scss +++ /dev/null @@ -1,646 +0,0 @@ -@import '../../global/variables'; -@import '../../global/webfont'; - -@import '../../global/shared/utils'; -@import '../../global/shared/buttons'; - - -* { - box-sizing: border-box; -} - -capacitor-site { - min-height: 100%; - display: flex; - flex-flow: column; - // overflow: hidden; -} - -.no-scroll { - overflow: hidden; -} - -.left-sidebar-in { - animation-name: slideIn; - animation-duration: 0.7s; - animation-timing-function: $easeOutExpo; - animation-fill-mode: forwards; -} -@keyframes slideIn { - from { - left: 0; - } - - to { - left: calc(100vw - 56px); - } -} - -.left-sidebar-out { - animation-name: slideOut; - animation-duration: 0.7s; - animation-timing-function: $easeOutExpo; - animation-fill-mode: forwards; -} -@keyframes slideOut { - from { - left: calc(100vw - 56px); - } - - to { - left: 0; - } -} - -.root { - position: relative; -} - -.row { - display: flex; -} -.col { - flex: 1; -} - -.container { - max-width: 1280px; - width: 100%; - margin: auto; - padding: 0 24px; -} - -.container-flex { - display: flex; -} - -document-component { - > div { - display: flex; - } -} -doc-content -.input-with-button { - display: flex; - height: 50px; - max-width: 460px; - flex: 1; - - input { - flex: 1; - height: 100%; - } - - button { - flex-grow: 0; - flex-shrink: 1; - margin: 0; - border: 0; - border-radius: 0px 3px 3px 0; - height: 100%; - - &:hover { - transform: none; - } - } -} - -.measure-lg { - max-width: 670px; -} - -.app { - height: 100%; - //max-width: 1080px; - //margin: auto; -} - -#main-div { - flex-grow: 1; - flex-shrink: 0; -} - -::selection { - background: #98d2ff; -} - -::-moz-selection { - background: #98d2ff; -} - -html, body { - font-family: 'Inter', - -apple-system, - BlinkMacSystemFont, - "Segoe UI", - Helvetica, - Arial, - sans-serif, - "Apple Color Emoji", - "Segoe UI Emoji", - "Segoe UI Symbol"; - width: 100%; - height: 100%; - padding: 0; - margin: 0; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - scroll-padding-top: 80px; -} -body { - background-color: #fff; -} - - -h1, h2, h3, h4 { - color: #16161d; - letter-spacing: 0px; - font-weight: 700; -} - -h1 { - font-size: 32px; - letter-spacing: -0.02em; - font-weight: 700; -} - -h2 { - font-size: 22px; - letter-spacing: -0.02em; - font-weight: 600; -} - -h2, h3 { - margin-top: 64px; - margin-bottom: 8px; -} - -h2 code { - font-weight: 600; - font-family: 'Roboto Mono', 'Source Code Pro', monospace; - font-size: 20px; - color: #16161D; - background: #ecf4fb; - margin-left: 6px; - padding: 4px 8px; - border-radius: 4px; -} - -ul { - li { - font-size: 14px; - margin-top:16px; - } -} - -ol { - li { - color: #4a5568; - font-size: 15px; - line-height: 1.8em; - margin: 16px 0; - } -} - -p, ul { - color: #4a5568; - font-size: 15px; - line-height: 1.8em; - margin: 16px 0px; -} - -strong, b { - font-weight: 500; -} - -a { - transition: border 0.3s; - color: $link-color; - border-bottom: 1px solid transparent; - - &:hover { - border-bottom-color: rgba($link-color, 0.3); - } -} - -p a { - font-weight: 500; -} - -.intro { - font-size: 18px; - margin-bottom: 24px; - letter-spacing: -0.01em; -} - -.intro code { - font-size: 18px; -} - -blockquote { - background: rgba(255, 250, 237, 0.8); - border-left: 4px solid #ffcc5f; - border-radius: 2px 4px 4px 2px; - color: #736545 !important; - font-size: 14px; - line-height: 1.8em; - margin: auto; - padding: 16px 20px; -} - -stencil-route-link:hover { - cursor: pointer; -} - - -button { - transition: all .15s ease; - font-size: 17px; - font-weight: 600; - color: #FFFFFF; - letter-spacing: -0.5px; - text-align: center; - border: none; - padding: 16px 20px; - border-radius: 5px; - outline: none; - cursor: pointer; -} - -button:hover { - transform: translateY(-1px); -} - -.wrapper { - line-height: 32px; - min-height: 100%; - padding-top: 100px; - - display: flex; - flex-direction: row; - flex-wrap: nowrap; - justify-content: flex-start; - align-content: stretch; - align-items: flex-start; -} - -.nextButton { - background: #5851ff; - color: white; - text-decoration: none; - - border: none; - font-size: 13px; - font-weight: 600; - text-transform: uppercase; - padding: 12px 14px; - border-radius: 4px; - box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08); - outline: none; - letter-spacing: 0.04em; - transition: all .15s ease; - cursor: pointer; - float: right; - margin-right: 5px; - - - &:hover { - text-decoration: none; - transform: translateY(1px); - box-shadow: 0 2px 4px rgba(0,0,0,.04), 0 1px 2px rgba(0,0,0,.16); - } -} - -.backButton { - color: #5851ff; - background: white; - text-decoration: none; - float: left; - - border: none; - font-size: 13px; - font-weight: 600; - text-transform: uppercase; - padding: 12px 14px; - border-radius: 4px; - box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08); - outline: none; - letter-spacing: 0.04em; - transition: all .15s ease; - cursor: pointer; - margin-bottom: 15px; - margin-left: 5px; - - &:hover { - text-decoration: none; - transform: translateY(1px); - box-shadow: 0 2px 4px rgba(0,0,0,.04), 0 1px 2px rgba(0,0,0,.16); - } -} - - -pre { - word-break: break-all; - word-wrap: break-word; - display: block; - white-space: pre-wrap; - margin: 24px 0px 28px; - /*padding: 16px 24px;*/ - border-radius: 4px; - color: #16161D; - background-color: #f8f8f8; - code { - font-weight: 500; - display: block; - overflow-x: auto; - word-wrap: normal; - white-space: pre-wrap; - box-sizing: border-box; - font-size: 14px; - line-height: 20px; - } -} - -code { - font-weight: 400; - font-family: 'Roboto Mono', 'Source Code Pro', monospace; - font-size: 14px; -} -.hljs-comment, .hljs-quote { - color: #5c6370; - font-style: italic; -} - -.hljs-doctag, .hljs-keyword, .hljs-formula { - //color: #c678dd; - color: #db00e9; -} - -.hljs-section, .hljs-name, .hljs-selector-tag, .hljs-deletion, .hljs-subst { - color: #2973b7; -} - -.hljs-tag { - color: #2973b7; -} - -.hljs-literal { - color: #56b6c2; -} - -.hljs-string, .hljs-regexp, .hljs-addition, .hljs-attribute, .hljs-meta-string { - color: #2cc17e; -} - -.hljs-built_in, .hljs-class .hljs-title { - color: #db00e9; -} - -.hljs-attr, -.hljs-variable, -.hljs-template-variable, -.hljs-type, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo, -.hljs-number { - color: #d19a66; -} - -.hljs-attr { - color: #525252; -} - -.hljs-symbol, -.hljs-bullet, -.hljs-link, -.hljs-meta, -.hljs-selector-id, -.hljs-title { - //color: #61aeee; - color: #2973b7; -} - -.hljs-emphasis { - font-style: italic; -} - -.hljs-strong { - font-weight: bold; -} - -.hljs-link { - text-decoration: underline; -} - -.landing-page { - footer { - .ionic-oss-logo { - background-image: url(/assets/img/ionic-os-logo.png); - } - } -} - -footer { - bottom: 0; - left: 0; - width: 100%; - background: #f8f8fc; - height: 8em; - display: flex; - flex-direction: column; - justify-content: center; - flex: 0 0 8em; - - .ionic-oss-logo { - background: url(/assets/img/ionic-os-dark-logo.png) no-repeat transparent; - width: 124px; - height: 16px; - background-size: 100%; - } - - .container { - display: flex; - flex: 1; - justify-content: space-between; - align-items: center; - } - - .svg-button { - margin-left: 16px; - transition: all .15s ease; - opacity: 0.5; - border: 0; - } - - .svg-button:hover { - opacity: 1; - } - - @media screen and (max-width: $breakpoint-md) { - .container { - text-align: center; - flex-direction: column; - justify-content: center; - } - #open-source { - display: flex; - flex-direction: column; - align-items: center; - margin-bottom: 24px; - } - } -} - -#open-source { - img { - width: 50%; - } - - p { - margin-top: 0; - margin-bottom: 0; - color: #a5a4b8; - font-size: 10px; - } -} - -@media screen and (max-width: 355px) { - .wrapper { - padding-top: 100px; - } -} - -@media screen and (max-width: 450px) { - .wrapper { - padding-top: 80px; - } - - site-header stencil-route-link a { - display: initial; - } -} - -@media screen and (max-width: 590px) { - .wrapper { - margin-right: 0; - margin-left: 0; - -webkit-justify-content: space-between; - -ms-flex-pack: justify; - justify-content: space-between; - - -webkit-flex-direction: column-reverse; - -ms-flex-direction: column-reverse; - flex-direction: column-reverse; - .pull-right { - padding: 0 15px; - width: 100%; - min-height: 100vh; - } - .pull-left { - position: relative; - padding: 15px; - width: 100%; - bottom: 0; - background-color: #16161d; - - * { - color: #ffffff; - } - } - } -} - -@media screen and (min-width: 590px) { - .wrapper { - .pull-left { - min-width: 250px; - max-width: 250px; - position: -webkit-sticky; - position: sticky; - top: 50px; - } - - .pull-right { - padding-left: 96px; - padding-right: 32px; - flex: 1 1 auto; - overflow: auto; - min-height: 100vh; - } - } -} - - -.document { - .container { - display: flex; - justify-content: space-between; - } - - plugin-platforms { - display: block; - float: right; - .platform { - margin-left: 8px; - } - } - - img { - max-width: 100%; - } - - h1:first-child { - anchor-link { - display: none; - } - } - - ul { - -webkit-padding-start: 0px; - li, code { - font-size: 16px; - margin-left: 18px; - } - } - - - p a { - color: $link-color; - text-decoration: none; - } - - p, - ul, - ol { - code { - padding: 0 4px 3px; - background-color: #ecf4fb; - color: #16161D; - border-radius: 3px; - } - } - - #introButton { - background: $link-color; - color: white; - text-decoration: none; - - border: none; - font-size: 13px; - font-weight: 600; - text-transform: uppercase; - padding: 16px 20px; - border-radius: 2px; - box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08); - outline: none; - letter-spacing: 0.04em; - transition: all .15s ease; - cursor: pointer; - } - - #introButton:hover { - box-shadow: 0 3px 6px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.1); - transform: translateY(1px); - } -} \ No newline at end of file diff --git a/site/src/components/capacitor-site/capacitor-site.tsx b/site/src/components/capacitor-site/capacitor-site.tsx deleted file mode 100644 index bed454cd1..000000000 --- a/site/src/components/capacitor-site/capacitor-site.tsx +++ /dev/null @@ -1,276 +0,0 @@ -import '@stencil/router'; -import { Component, Prop, Element, Listen, State, h } from '@stencil/core'; -import { LocationSegments, RouterHistory } from '@stencil/router'; -import SiteProviderConsumer, { SiteState } from '../../global/site-provider-consumer'; - -@Component({ - tag: 'capacitor-site', - styleUrl: 'capacitor-site.scss' -}) -export class App { - history: RouterHistory = null; - elements = [ - 'site-header', - 'site-menu', - 'app-burger', - '.root' - ]; - - @Element() el: HTMLElement; - - @Prop() isLandingPage = false; - - @State() isLeftSidebarIn: boolean; - - @Listen('window:resize') - handleResize() { - requestAnimationFrame(() => { - if (window.innerWidth > 768 && this.isLeftSidebarIn) { - this.isLeftSidebarIn = false; - document.body.classList.remove('no-scroll'); - this.elements.forEach((el) => { - this.el.querySelector(el).classList.remove('left-sidebar-in'); - }); - } - }); - } - - @Listen('burgerClick', { target: 'body' }) - @Listen('leftSidebarClick', { target: 'body' }) - handleToggle() { - if (window.innerWidth <= 768) this.toggleLeftSidebar(); - } - - setHistory = ({ history }: { history: RouterHistory }) => { - if (!this.history) { - this.history = history; - this.history.listen((location: LocationSegments) => { - (window as any).gtag('config', 'UA-44023830-42', { 'page_path': location.pathname + location.search }); - }); - } - } - - componentDidLoad() { - this.isLeftSidebarIn = false; - } - - toggleLeftSidebar(){ - if (this.isLeftSidebarIn) { - this.isLeftSidebarIn = false; - document.body.classList.remove('no-scroll'); - this.elements.forEach((el) => { - this.el.querySelector(el).classList.remove('left-sidebar-in'); - this.el.querySelector(el).classList.add('left-sidebar-out'); - }); - } else { - this.isLeftSidebarIn = true; - document.body.classList.add('no-scroll'); - this.elements.forEach((el) => { - this.el.querySelector(el).classList.add('left-sidebar-in'); - this.el.querySelector(el).classList.remove('left-sidebar-out'); - }); - } - } - - hostData() { - return { - class: { - 'landing-page': this.isLandingPage - } - } - } - - render() { - - const siteState: SiteState = { - isLeftSidebarIn: this.isLeftSidebarIn, - toggleLeftSidebar: this.toggleLeftSidebar - } - const footerClass = this.isLandingPage ? 'footer-landing' : ''; - - return ( - -
- -
- - - - - - - {/* { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> - - { - let page = 'apis/index.html'; - const pageName = props.match.params.pageName; - if(pageName) { - page = `apis/${pageName}/index.html` - } - return ( - - ); - }} - /> - - { - const page = props.match.params.pageName || 'index'; - return ( - - ); - }} - /> */} - - ( - - )}/> - - ( - - )}/> - - ( - - )}/> - - -
-
- -
-
-
- - - -

Released under MIT License | Copyright @ {(new Date()).getFullYear()} Drifty Co.

-
- - -
-
-
- ); - } -} diff --git a/site/src/components/contributor-list/contributor-list.css b/site/src/components/contributor-list/contributor-list.css deleted file mode 100644 index 929dd0d13..000000000 --- a/site/src/components/contributor-list/contributor-list.css +++ /dev/null @@ -1,41 +0,0 @@ -contributor-list { - display: block; -} - -contributor-list ul.img-list { - display: flex; - flex-direction: row-reverse; - justify-content: flex-end; - list-style: none; - margin: 0; - padding: 0; -} - -contributor-list li:last-child { - margin-left:0 !important; -} - -contributor-list li:not(:last-child) { - margin-left: -10px; -} - -contributor-list img { - border: solid 2px var(--background); - border-radius: 50%; - height: 32px; - width: 32px; - border: 2px solid #FFF; -} - -contributor-list a.contributor-img { - display: block; - border: none; - transition: transform 50ms ease-out; -} - -@media (hover: hover) { - contributor-list a:hover { - transform: scale(1.125); - z-index: 1; - } -} diff --git a/site/src/components/contributor-list/contributor-list.tsx b/site/src/components/contributor-list/contributor-list.tsx deleted file mode 100644 index 8cdd19a4c..000000000 --- a/site/src/components/contributor-list/contributor-list.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import { Component, Prop, h } from '@stencil/core'; - -@Component({ - tag: 'contributor-list', - styleUrl: 'contributor-list.css' -}) -export class ContributorList { - @Prop() contributors: string[] = []; - @Prop() link = (contributor: string) => `https://github.com/${contributor}`; - - render() { - if (this.contributors.length === 0) { - return null; - } - - return ( -
    - {this.contributors.reverse().map(contributor => ( -
  • - - - -
  • - ))} -
- ); - } -} diff --git a/site/src/components/demos-page/demos-page.scss b/site/src/components/demos-page/demos-page.scss deleted file mode 100644 index 4d19024cd..000000000 --- a/site/src/components/demos-page/demos-page.scss +++ /dev/null @@ -1,5 +0,0 @@ -demos-page { - a { - text-decoration: none; - } -} diff --git a/site/src/components/demos-page/demos-page.tsx b/site/src/components/demos-page/demos-page.tsx deleted file mode 100644 index 14a064423..000000000 --- a/site/src/components/demos-page/demos-page.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import { Component, h } from '@stencil/core'; - -@Component({ - tag: 'demos-page', - styleUrl: 'demos-page.scss' -}) -export class DemosPage { - - demos = [ - { - title: 'Stenciljs.com', - description: 'Yep, this site is also built with Stencil!', - url: 'https://stenciljs.com/', - source: 'https://github.com/ionic-team/stencil-site', - }, - { - title: 'IonicHN', - description: 'Hacker News PWA built with @stencil/core and @ionic/core', - url: 'https://corehacker-10883.firebaseapp.com/', - source: 'https://github.com/ionic-team/ionic-stencil-hn-app' - }, - { - title: 'Stencil Fiber demo', - description: 'This showcases the runtime performance of stencil using our async rendering', - url: 'https://stencil-fiber-demo.firebaseapp.com/', - source: 'https://github.com/ionic-team/stencil-fiber-demo' - }, - { - title: 'StencilNews', - description: 'Demo of how you could use @stencil/core to build a fast, modern News PWA', - url: 'https://stencilnews.firebaseapp.com/', - source: 'https://github.com/ionic-team/stencil-news' - } - ]; - - constructor() { - document.title = `Stencil Demos`; - } - - render() { - return ( -
-
- -
- -
-

Demos

-

Awesome demos of apps built using Stencil and Ionic

- {this.demos.map(demo => { - return [ -

{demo.title}

, -

{demo.description}

, -

- Demo -    - Source -

- ]; - })} - -
-
- ); - } -} diff --git a/site/src/components/doc-snippet/doc-snippet.tsx b/site/src/components/doc-snippet/doc-snippet.tsx deleted file mode 100644 index 7b1aa9d64..000000000 --- a/site/src/components/doc-snippet/doc-snippet.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { Component, h } from '@stencil/core'; -@Component({ - tag: 'doc-snippet', -}) -export class DocSnippet { - render() { - return ( -
-
- ); - } -} diff --git a/site/src/components/document-component/document-component.scss b/site/src/components/document-component/document-component.scss deleted file mode 100644 index 5a6c21c60..000000000 --- a/site/src/components/document-component/document-component.scss +++ /dev/null @@ -1,129 +0,0 @@ -@import '../../global/variables'; - -document-component { - .container { - display: flex; - justify-content: space-between; - } - - plugin-platforms { - display: block; - float: right; - .platform { - margin-left: 8px; - } - } - - table, td, th { - border: 1px solid #eee; - border-collapse: collapse; - } - table { - width: 100%; - - th { - text-align: left; - padding: 4px; - } - td { - font-size: 12px; - line-height: 18px; - vertical-align: top; - padding: 4px; - min-width: 150px; - - - code { - font-size: 12px; - } - } - } - - .heading-link { - position: relative; - text-decoration: none; - display: flex; - align-items: center; - color: #2d2d4c; - - &:hover { - border-bottom: 1px solid transparent; - } - - ion-icon { - transition: opacity 0.2s; - position: absolute; - left: -24px; - display: flex; - align-items: center; - opacity: 0; - } - - &:hover ion-icon { - opacity: 0.8; - } - } - - img { - max-width: 100%; - margin: 8px 0; - } - - h1:first-child { - anchor-link { - display: none; - } - } - - ul { - -webkit-padding-start: 16px; - li, code { - font-size: 14px; - margin-top: 16px; - } - } - - p a { - color: $link-color; - text-decoration: none; - } - - p, - ul, - ol { - code { - padding: 1px 4px 2px; - background-color: #ecf4fb; - color: #16161D; - border-radius: 3px; - } - } - - #introButton { - background: $link-color; - color: white; - text-decoration: none; - - border: none; - font-size: 13px; - font-weight: 600; - text-transform: uppercase; - padding: 12px 14px; - border-radius: 4px; - box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1), 0 3px 6px rgba(0, 0, 0, 0.08); - outline: none; - letter-spacing: 0.04em; - transition: all .15s ease; - cursor: pointer; - } - - #introButton:hover { - box-shadow: 0 3px 6px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.1); - transform: translateY(1px); - } - - .btn.pull-left, - .btn.pull-right { - margin: 64px 8px 20px; - } -} diff --git a/site/src/components/document-component/document-component.tsx b/site/src/components/document-component/document-component.tsx deleted file mode 100644 index 89a5402cc..000000000 --- a/site/src/components/document-component/document-component.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { Component, Prop, Watch, State, h } from '@stencil/core'; -import siteStructure from '../../assets/docs-structure.json'; -import { findItem } from '../../global/site-structure-utils'; -import { SiteStructureItem } from '../../global/definitions'; - -@Component({ - tag: 'document-component', - styleUrl: 'document-component.scss' -}) -export class DocumentComponent{ - @Prop() pages: string[] = []; - - @Prop() page: string = null; - - @State() item: SiteStructureItem; - @State() nextItem: SiteStructureItem; - @State() prevItem: SiteStructureItem; - @State() parent: SiteStructureItem; - - componentWillLoad() { - return this.fetchNewContent(this.page); - } - - @Watch('page') - fetchNewContent(page: string, oldPage?: string) { - if (page == null || page === oldPage) { - return; - } - const foundData = findItem(siteStructure as SiteStructureItem[], this.page); - this.item = foundData.item; - this.nextItem = foundData.nextItem; - this.prevItem = foundData.prevItem; - this.parent = foundData.parent; - } - - render() { - // debugger; - if (this.item == null) { - return

Page not found

; - } - return ( -
- - - [ - , -
-
-
-

Contributors

- - -
-
, - - ]}/> -
- ); - } -} diff --git a/site/src/components/enterprise/enterprise.scss b/site/src/components/enterprise/enterprise.scss deleted file mode 100644 index b488cf3b8..000000000 --- a/site/src/components/enterprise/enterprise.scss +++ /dev/null @@ -1,453 +0,0 @@ -@import '../../global/variables'; - -capacitor-enterprise { - display: block; - - margin: 76px 0; - - .cta { - text-align: center; - background-color: #eee; - padding: 128px 0; - - h1 { - margin-top: 0; - } - - .btn { - margin-top: 24px; - background-color: #111; - color: white; - } - } - - .container { - max-width: $breakpoint-lg; - margin: auto; - } - - .points { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - column-gap: 16px; - row-gap: 24px; - - @media (max-width: $breakpoint-sm) { - grid-template-columns: 1fr; - } - } - - hgroup { - text-align: center; - } - - .hs-form { - margin: 48px auto; - max-width: 420px !important; - font-weight: 400; - - .hs-form-required { - display: none; - } - - form { - fieldset.form-columns-2 .input { - margin-right: 12px; - } - - &.stacked .field { - margin-bottom: 4px; - } - } - - .hs-input, - input.hs-input, - select.hs-input { - appearance: none; - -moz-appearance: none; - border: 1px solid #e1e5ed; - // padding: 15px 5px 15px 18px; - font-weight: 500; - border-radius: 4px; - transition: border-color .2s; - box-shadow: none; - outline: none; - height: 30px; - padding: 6px 12px; - font-size: 14px; - line-height: 1.428571429; - - &:placeholder { - color: #aaa; - } - - &:valid { - // border-color: #B4BBC5; - } - - &:hover, - &:focus, - &:active { - outline: none; - border-color: #3880ff; - box-shadow: none; - } - - &.hs-input.error { - border-color: #ee0000; - } - } - - select.hs-input { - height: 44px; - width: calc(100% + 6px) !important; - } - - textarea.hs-input { - padding: 12px; - width: calc(100% + 3px) !important; - min-height: 192px; - } - - .hs_submit input.hs-button { - font-size: 13px; - padding: 10px 18px 10px; - margin-right: -14px; - margin-top: -36px; - line-height: 23px; - float: right; - font-weight: 600; - letter-spacing: 0; - text-transform: none; - text-shadow: none; - background: #3880ff; - border: 0; - outline: 0; - transition: all .2s linear; - box-shadow: 0 1px 3px rgba(0,0,0,.12); - - &:hover { - border: 0; - box-shadow: 0 4px 8px rgba(0,0,0,.12); - background: #5995fc; - color: #fff; - outline: 0; - } - - &:active, - &:active:not(.inactive):not(.link), - &:focus:not(.inactive) { - border: 0; - color: #fff; - box-shadow: inset 0 1px 4px rgba(0,0,0,.2); - background: #5995fc; - outline: 0; - } - } - - .submitted-message { - &:before { - content: ''; - display: block; - background-image: url('/img/checkmark-light-green.svg'); - background-repeat: no-repeat; - background-size: 100%; - width: 42px; - height: 42px; - margin-bottom: 12px; - } - - font-size: 18px; - padding: 34px 0 78px; - text-align: center; - display: flex; - flex-direction: column; - align-items: center; - font-weight: 400; - color: #35af55; - max-width: 410px; - background-color: white; - margin: 0 auto; - } - } - - .modal .hs-form .hs_submit input.hs-button { - padding: 0; - } - - .hs-form { - // font-family: $font-family-system; - // TODO these styles are only used on contributors landing, - // need to be applied to all hubspot forms - - &, - & fieldset, - & iframe { - max-width: 100%; - } - - // fieldset + fieldset, - // form.stacked .hs-form-field + .hs-form-field, - // fieldset .hs-form-field + .hs-form-field, - // form.stacked .hs-form-field + .hs-dependent-field { - // margin-top: 26px; - // } - .hs-form-field { - margin-top: 16px; - } - - label { - margin-bottom: 3px; - } - - .hs-form-required { - display: inline; - color: #F45454; - margin-left: 4px - } - - .hs-richtext { - margin-top: 8px; - } - - .hs-input, - input.hs-input { - transition: border 0.3s; - font-weight: 500; - background-color: #fff; - background-image: none; - border: 1px solid #ced6e3; - line-height: 1.39286; - border-radius: 4px; - padding: 11px 15px; - font-size: 15px; - margin-bottom: 0; - color: #505863; - } - - input.hs-input[type="number"] { - float: none; - } - - input.hs-input[type="text"], - input.hs-input[type="email"], - input.hs-input[type="tel"] { - height: auto; - width: 100%; - float: none; - - &:focus { - border-color: #629eff; - } - } - - input.hs-input[type="radio"], - input.hs-input[type="checkbox"] { - height: auto; - margin-right: 8px; - } - - .hs-form-booleancheckbox-display { - display: flex; - } - - select.hs-input { - height: 44px; - - - appearance: none; - -moz-appearance: none; - background-image: - linear-gradient(45deg, transparent 50%, gray 50%), - linear-gradient(135deg, gray 50%, transparent 50%); - background-position: - calc(100% - 20px) 50%, - calc(100% - 15px) 50%; - background-size: - 5px 5px, - 5px 5px, - 1px 1.5em; - background-repeat: no-repeat; - } - - form fieldset.form-columns-2 .input { - margin: 0; - } - - fieldset.form-columns-2 .hs-form-field { - padding: 0 10px; - - &:first-child { - padding-left: 0; - } - &:last-child { - padding-right: 0; - } - } - - .inputs-list, - .hs-error-msgs { - margin: 0; - padding: 0; - list-style-type: none; - } - - .inputs-list.multi-container { - overflow: hidden; - - li:nth-last-child(n+6):first-child, - li:nth-last-child(n+6):first-child ~ li { - width: 50%; - float: left; - padding-right: 11px; - } - li:nth-last-child(n+6):first-child ~ li:nth-child(even) { - padding-right: 0; - padding-left: 11px; - } - } - - .hs-form-checkbox-display { - margin-top: 4px; - display: flex; - } - - .hs-form-checkbox-display .hs-input[type="checkbox"]{ - margin-right: 10px; - } - - .hs-form-checkbox-display span { - font-size: 15px; - color: #505863; - } - - - .hs-error-msgs { - padding: 5px 0 0; - font-size: 11px; - color: #F45454; - } - - .hs_submit { - margin-top: 30px; - } - - .hs_submit input.hs-button { - transition: all .3s ease; - margin: 0; - float: none; - font-size: 16px; - font-weight: 700; - padding: 12px 20px; - vertical-align: middle; - color: white; - background: #3880ff; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.12); - border-radius: 4px; - line-height: 18px; - letter-spacing: -0.01em; - - &:hover { - box-shadow: 0 7px 14px rgba(0, 0, 0, 0.12), 0 3px 6px rgba(0, 0, 0, 0.08); - background: #4d8dfd; - color: #fff; - outline: none; - } - } - - @media (max-width: $breakpoint-sm) { - fieldset.form-columns-2 .hs-form-field { - width: 100%; - float: none; - padding: 0; - - & + .hs-form-field { - margin-top: 24px; - } - } - .inputs-list.multi-container { - li:nth-last-child(n+6):first-child, - li:nth-last-child(n+6):first-child ~ li { - width: 100%; - float: none; - padding-right: 0; - } - li:nth-last-child(n+6):first-child ~ li:nth-child(even) { - padding-left: 0; - } - } - .hs_submit input.hs-button { - width: 100%; - } - } - } - - .hubspot-override--large .hs-form { - label:not(.hs-form-booleancheckbox-display) { - text-transform: uppercase; - font-size: 12px; - letter-spacing: 0.05em; - margin-bottom: 6px; - } - - .hs-form-booleancheckbox-display { - font-size: 15px; - } - - .hs-richtext { - p span, - p a { - font-size: 15px; - } - } - - .hs-input, - input.hs-input { - padding: 16px 20px 18px; - font-size: 18px; - } - - select.hs-input { - text-indent: 10px; - height: 60px; - } - @-moz-document url-prefix() { - select.hs-input { - text-indent: 0; - } - } - - .hs-error-msgs label { - font-size: 11px; - letter-spacing: 0; - text-transform: none; - } - - fieldset.form-columns-2 .hs-form-field { - padding: 0 20px; - } - - .hs_submit { - text-align: center; - padding-top: 18px; - } - - .hs_submit input.hs-button { - padding: 22px 27px 24px; - border-radius: 6px; - } - - @media (max-width: $breakpoint-sm) { - fieldset.form-columns-2 .hs-form-field { - padding: 0; - } - } - } - - .hubspot-override--measure { - max-width: 748px; - margin-left: auto; - margin-right: auto; - } - -} \ No newline at end of file diff --git a/site/src/components/enterprise/enterprise.tsx b/site/src/components/enterprise/enterprise.tsx deleted file mode 100644 index 5862a80bf..000000000 --- a/site/src/components/enterprise/enterprise.tsx +++ /dev/null @@ -1,201 +0,0 @@ -import { Component, h } from '@stencil/core'; - -declare var window: any; - -@Component({ - tag: 'capacitor-enterprise', - styleUrl: 'enterprise.scss' -}) -export class Enterprise { - componentDidLoad() { - const hbsScript = document.createElement('script'); - hbsScript.src = '//js.hsforms.net/forms/v2.js'; - hbsScript.type = 'text/javascript'; - hbsScript.charset = 'utf-8'; - hbsScript.addEventListener('load', () => { - window.hbspt.forms.create({ - portalId: '3776657', - formId: 'd0019a78-110e-4d28-b356-56357b4abe4b', - target: '#scripts', - css: '' - }); - }); - document.body.appendChild(hbsScript); - // el.appendChild(hbsScript); - } - - render() { - return ( -
-
-
-

Capacitor for Enterprises

-

- Powerful solution for mission-critical enterprise - apps -
- across consumer and employee-facing
- iOS, Android, and Progressive Web Apps. -

- - Learn more - -
-
-
-
-
-

Enterprise mobile development, made easy

-

- Meet your development goals with premium software and services - that accelerate development and reduce project risk. -

-
-
-
-

Build with confidence

-

- Enjoy peace of mind knowing the native plugins you - depend on are built and maintained by a team you can trust, - and backed by mission-critical support and expert services. -

-
-
-

Protect your users & data

-

- Give your users the best possible mobile security, - with advanced biometric authentication, SSO integration, - and the latest in secure encrypted storage. -

-
-
-

Accelerate your mobile projects

-

- Save valuable time and effort that would normally - be spent chasing plugins and building from scratch. - Capacitor Enterprise delivers everything you need on Day 1. -

-
-
-
-
-
-
-
-

World-class support

-

- Get guaranteed response SLAs through the app lifecycle. Ionic's professional support team is on-hand to help you troubleshoot and address issues occurring at the native layer. -

-
-
-

Stable, secure plugin library

-

- Native features maintained by our team of native experts. Active subscribers get ongoing updates to supported plugins, to keep pace with OS and API changes, and evolving devices. -

-
-
-

Pre-built solutions

-

- Accelerate development with pre-built native solutions to common mobile use cases, like biometrics, authentication, and encrypted offline storage. Built by mobile experts. Deployed in minutes. -

-
-
-

Expert help & guidance

-

- Our team of native experts will work with you to define a native strategy that fits your unique goals and challenges. From architectural reviews to performance & security audits. -

-
-
-
-
-
-
-

Key features

-

- Premium software and services to help you reach your development goals -

-
-
-
-

Core Device Plugins

-

- Everything you need to deliver the core functionality your users expect, - from essentials like camera and geolocation, - to payments and security. -

-
-
-

Biometrics Sign-in

-

- Add a critical layer of protection - width advanced biometrics that locks - down sensitive data, by employing the latest in native security best practices. -

-
-
-

Auth Integration

-

- Easily connect through existing authentication providers, including Auth0, Azure Active Directory, and AWS Cognito--from any mobile device. -

-
-
-

Secure Offline Storage

-

- Deliver secure, offline-first mobile experiences with a flexible mobile storage solution that uses military-grade encryption to prevent unwanted access and secure user data. -

-
-
-

Guaranteed SLA

-

- Timely support and troubleshooting when you need it most. Get expert help directly from our team with guaranteed response times. -

-
-
-

Guidance & Expertise

-

- Ensure your team is utilizing best practices when adding native functionality, helping you meet your deadlines while avoiding costly tech debt. -

-
-
-
-
-
-
-
-

Use Cases

-
-
-

Mission-critical projects

-

- When your brand and company reputation are on the line, you need a solution that will work on Day 1. Capacitor Enterprise is a great fit for teams building mission-critical projects who want to minimize project risk and reach their goals. -

-
-
-

Highly secure apps

-

- Handling sensitive user or company data? Protect what matters most with advanced mobile security solutions that take advantage of the latest in native security best practices--from biometrics to military-grade encryption. -

-
-
-

Accelerated timeline

-

- Facing an aggressive release timeline? We can help. Our pre-built solutions will save you weeks or months of coding from scratch, while our native mobile experts can help you find ways to speed up development and better reach your goals. -

-
-
-
-
-
-
-

Learn more

-

- Fill out form below to receive more information on Capacitor Enterprise. -

-
-
-
-
-
- ) - } -} \ No newline at end of file diff --git a/site/src/components/in-page-navigation/in-page-navigation.css b/site/src/components/in-page-navigation/in-page-navigation.css deleted file mode 100644 index 873191494..000000000 --- a/site/src/components/in-page-navigation/in-page-navigation.css +++ /dev/null @@ -1,149 +0,0 @@ -in-page-navigation { - flex: 0 0 180px; - padding-top: 26px; - padding-left: 16px; - overflow:visible; -} - -in-page-navigation h5 { - text-transform: uppercase; - font-size: 11px; - margin-top: 0; - margin-bottom: 12px; - font-weight: 600; - color: #a0aec0; - letter-spacing: .05em; - -} - -in-page-navigation .heading-links { - list-style: none; - line-height: 1; - padding: 0; - margin: 0; - --indent-size: 12px; - margin-left: calc(var(--indent-size) * -2); -} - -in-page-navigation .heading-links li { - width: 188px; - overflow: hidden; - text-overflow: ellipsis; -} - -in-page-navigation .heading-links li + li { - margin-top: 8px; -} - -in-page-navigation .heading-links a { - font-weight: 400; - color: var(--color-gunpowder); - font-size: 13px; - line-height: 18px; - font-weight: 500; - border: none; - text-decoration: none; - border: none !important; - transition: .2s color ease; -} - -in-page-navigation .heading-links a:hover { - color: var(--color-woodsmoke); -} - -in-page-navigation .heading-links a:hover { - border: none; -} - -in-page-navigation .heading-links .heading-link:hover, -in-page-navigation .heading-links .heading-link.selected { - border-bottom: none !important; - transform: translateX(calc(var(--indent-size) * 1 + 2px)); -} - -in-page-navigation li.heading-link { - padding-left: 12px; - margin-left: 0; - border-left: 2px solid transparent; - transition: .2s transform ease; -} - -in-page-navigation li.heading-link.selected { - border-left: 2px solid var(--color-dodger-blue); -} - -in-page-navigation li.heading-link.selected a { - color: var(--color-dodger-blue); - font-weight: 600; -} - -in-page-navigation li.size-h2 { - transform: translateX(calc(var(--indent-size) * 1)); - font-weight: 600; -} - -in-page-navigation li.size-h3 { - transform: translateX(calc(var(--indent-size) * 2)); -} - -in-page-navigation li.size-h4 { - transform: translateX(calc(var(--indent-size) * 3)); -} - -in-page-navigation li.size-h3 a, -in-page-navigation li.size-h4 a { - font-weight: 400; - color: #6c6c8b; -} - -in-page-navigation li.size-h3:hover a, -in-page-navigation li.size-h4:hover a { - color: var(--color-gunpowder); -} - -in-page-navigation li.heading-link.size-h3:hover, -in-page-navigation li.heading-link.size-h3.selected { - transform: translateX(calc(var(--indent-size) * 2 + 2px)); -} - -in-page-navigation li.heading-link.size-h4:hover, -in-page-navigation li.heading-link.size-h4.selected { - transform: translateX(calc(var(--indent-size) * 3 + 2px)); -} - -in-page-navigation .submit-edit-link { - font-size: 12px; - display: inline-block; - color: var(--color-dodger-blue); - font-weight: 600; - text-decoration: none; - display: flex; -} - -in-page-navigation .submit-edit-link svg { - width: 16px; - fill: currentColor; -} - -in-page-navigation .submit-edit-link span { - transition: border 0.2s; - height: 16px; - margin-left: 6px; - border-bottom: 1px solid transparent; -} - -in-page-navigation .submit-edit-link:hover span { - border-bottom: 1px solid var(--color-cadet-blue); -} - -in-page-navigation .heading-links + .submit-edit-link { - margin-top: 28px; - border-bottom: none; -} - - -@media screen and (max-width: 1024px) { - in-page-navigation { - display: none; - } -} diff --git a/site/src/components/in-page-navigation/in-page-navigation.tsx b/site/src/components/in-page-navigation/in-page-navigation.tsx deleted file mode 100644 index 8fb0583a8..000000000 --- a/site/src/components/in-page-navigation/in-page-navigation.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import { Component, Prop, Listen, State, Watch, h, Element } from '@stencil/core'; -import { MarkdownHeading } from '../../global/definitions'; - -interface ItemOffset { - id: string, - topOffset: number -} - -@Component({ - tag: 'in-page-navigation', - styleUrl: 'in-page-navigation.css' -}) -export class InPageNavigtion { - - @Listen('window:scroll') - function() { - const itemIndex = this.itemOffsets.findIndex(item => item.topOffset > window.scrollY); - if (itemIndex === 0 || this.itemOffsets[this.itemOffsets.length - 1] === undefined) { - this.selectedId = null; - } else if (itemIndex === -1) { - this.selectedId = this.itemOffsets[this.itemOffsets.length - 1].id - } else { - this.selectedId = this.itemOffsets[itemIndex - 1].id - } - } - - @Element() el: HTMLElement; - @Prop() pageLinks: MarkdownHeading[] = []; - @Prop() srcUrl: string = ''; - @Prop() currentPageUrl: string = ''; - @State() itemOffsets: ItemOffset[] = []; - @State() selectedId: string = null; - - componentShouldUpdate() { - const adContent = this.el.querySelector('.internalAd__wrapper') - if (!adContent) return; - - adContent.parentElement.style.height = '0px'; - } - - @Listen('internalAdLoaded', { target: 'body' }) - componentDidRender() { - const adContent = this.el.querySelector('.internalAd__wrapper') - if (!adContent) return; - - if (adContent.getBoundingClientRect().bottom < window.innerHeight) { - adContent.parentElement.style.height = 'auto'; - } else { - adContent.parentElement.style.height = '0px'; - } - } - - - @Watch('pageLinks') - @Listen('window:resize') - updateItemOffsets() { - requestAnimationFrame(() => { - this.itemOffsets = this.pageLinks.map((pl) => { - const item = document.getElementById(pl.id); - return { - id: pl.id, - topOffset: item.getBoundingClientRect().top + window.scrollY - }; - }); - }); - } - - componentDidLoad() { - this.updateItemOffsets(); - } - - ghIcon() { - return ( - - - - - ) - } - - stripTags(html){ - const tmp = document.createElement("DIV"); - tmp.innerHTML = html; - return tmp.textContent || tmp.innerText || ""; - } - - render() { - const pageLinks = this.pageLinks.filter(pl => pl.level !== 1); - const submitEditLink = ( - - {this.ghIcon()} - Submit an edit - - ); - - if (pageLinks.length === 0) { - return ( -
- { submitEditLink } -
- ); - } - - return ( -
-
Contents
- - { submitEditLink } - -
- ); - } -} diff --git a/site/src/components/internal-ad/ad-service.ts b/site/src/components/internal-ad/ad-service.ts deleted file mode 100644 index c6d3b587a..000000000 --- a/site/src/components/internal-ad/ad-service.ts +++ /dev/null @@ -1,37 +0,0 @@ -import Prismic from 'prismic-javascript'; - -const apiURL = 'https://ionicframeworkcom.prismic.io/api/v2'; -const cacheLife = 20 * 60 * 1000; // 20 mins -let ads: {}[]; -let lastFetch: number = null; - -const getLatest = async () => { - const api = await Prismic.getApi(apiURL); - const response = await api.query( - Prismic.Predicates.at('document.type', 'docs_ad'), - {} - ); - ads = response.results; - lastFetch = Date.now(); -}; - -export const getAd = async () => { - if (!lastFetch || (Date.now() - lastFetch) > cacheLife) { - await getLatest(); - } - return chooseAdByWeight(); -}; - -const chooseAdByWeight = () => { - const weightList = []; // Just Checking... - for (const ad of ads) { - if (ad['data']) { // Safety - if (!ad['data'].ad_weight) ad['data'].ad_weight = 1; - for (let i = 0; i < ad['data'].ad_weight; i++) { - weightList.push(ad); - } - } - } - // Probability Fun - return weightList[Math.floor(Math.random() * weightList.length)]['data']; -}; diff --git a/site/src/components/internal-ad/internal-ad.css b/site/src/components/internal-ad/internal-ad.css deleted file mode 100644 index e7a826856..000000000 --- a/site/src/components/internal-ad/internal-ad.css +++ /dev/null @@ -1,31 +0,0 @@ -internal-ad { - max-width: 148px; - display: block; - margin: 48px 0 0; - height: 0px; - overflow:hidden; -} - -internal-ad a { - display:inline-block; - text-decoration: none; -} - -internal-ad a:hover { - border-bottom-color: transparent; - text-decoration:underline; -} - -internal-ad p { - font-size: 13px; - line-height: 19px; - font-weight: 400; - letter-spacing: 0.02em; - - color: var(--text-color--dark); - transition: .2s color; -} - -internal-ad a:hover p { - color: var(--text-color); -} diff --git a/site/src/components/internal-ad/internal-ad.tsx b/site/src/components/internal-ad/internal-ad.tsx deleted file mode 100644 index 22aa17338..000000000 --- a/site/src/components/internal-ad/internal-ad.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { Component, Listen, State, Element, h, Event, EventEmitter} from '@stencil/core'; -import PrismicDOM from 'prismic-dom'; - -import { trackClick, trackView } from './tracking-service'; -import { getAd } from './ad-service'; - -@Component({ - tag: 'internal-ad', - styleUrl: 'internal-ad.css' -}) -export class InternalAd { - @State() ad: any; - @Element() el: HTMLElement; - @Event() internalAdLoaded: EventEmitter; - - timeout: ReturnType; - - constructor() { - this.update(); - } - - // force an update on page change in case the component is reused - @Listen('leftSidebarClick', { target: 'body' }) - async update() { - this.ad = await getAd(); - // give the page a chance to reflow - this.timeout = setTimeout(() => { - trackView(this.ad.ad_id); - }, 50); - } - - componentDidUpdate() { - this.internalAdLoaded.emit(); - } - - disconnectedCallback() { - // if the reflowed page doesn't have an ad, don't fire view events - clearTimeout(this.timeout); - } - - render() { - if (!this.ad || Object.keys(this.ad).length === 0) return; - - return ( - - ); - } -} diff --git a/site/src/components/internal-ad/tracking-service.ts b/site/src/components/internal-ad/tracking-service.ts deleted file mode 100644 index d6ecc8897..000000000 --- a/site/src/components/internal-ad/tracking-service.ts +++ /dev/null @@ -1,58 +0,0 @@ -export const trackView = (adId: string) => { - hubspotTrack('View', adId); - googleAnalyticsTrack('View', adId); -}; - -export const trackClick = (adId: string, event?: MouseEvent) => { - const timeForTrackingRequests = 150; // ms - if (event) { - event.preventDefault(); - } - - hubspotTrack('Click', adId); - googleAnalyticsTrack('Click', adId); - - // give tracking request time to complete - setTimeout(() => { - const link = hrefClimber(event.target as Node); - if (link.target && link.target.toLowerCase() === '_blank') { - window.open(link.href); - } else if (link.href) { - document.location = link.href; - } - }, timeForTrackingRequests); -}; - -const hubspotTrack = (type: 'Click' | 'View', adId: string) => { - if (!window['_hsq']) { - console.warn('Unable to track Hubspot event, _hsq not found', type, adId); - return; - } - - window['_hsq'].push(['trackEvent', { - id: `Docs ad - ${type} - ${adId}` - }]); -}; - -const googleAnalyticsTrack = (type: 'Click' | 'View', adId: string) => { - if (!window['gtag']) { - console.warn( - 'Unable to track Google Analytics event, gtag not found', type, adId - ); - return; - } - - window['gtag']('event', `Docs ad - ${type} - ${adId}`, { - 'event_category': `Docs ad - ${type}`, - 'event_label': adId - }); -}; - -// recursive function to climb the DOM looking for href tags -const hrefClimber = (el: Node) => { - if (el['href']) { - return el; - } else if (el.parentNode) { - return hrefClimber(el.parentNode); - } -}; diff --git a/site/src/components/landing-page/landing-page.scss b/site/src/components/landing-page/landing-page.scss deleted file mode 100644 index ebc73a5a0..000000000 --- a/site/src/components/landing-page/landing-page.scss +++ /dev/null @@ -1,224 +0,0 @@ -@import '../../global/variables'; - -.landing-page { - background-color: #070D12; -} - -.landing-page footer{ - background-color: #0B1A24; -} - -.landing-page .announcement a { - color: #fff; - padding-top: 6px; - padding-bottom: 6px; -} - -landing-page { - display: block; - color: #fff; - overflow: hidden; - - h1, - h2, - h3 { - color: #fff; - margin: 0; - } - p { - color: #BCC0BE; - } - - .hero { - display: flex; - justify-content: space-between; - - hgroup, - .hero-illustration { - flex: 0 0 50%; - } - - hgroup { - max-width: 490px; - padding-right: 60px; - display: flex; - flex-direction: column; - justify-content: center; - - h1 { - font-size: 36px; - color: #FFFFFF; - letter-spacing: -0.03em; - line-height: 48px; - font-weight: 500; - margin-top: -40px; - } - - h3 { - font-size: 20px; - color: rgba(229, 238, 255, 0.8); - letter-spacing: -0.02em; - line-height: 29px; - margin-top: 18px; - font-weight: 400; - } - - button { - margin-top: 32px; - } - - h5 { - font-size: 10px; - color: #8C9CAA; - letter-spacing: 0.38px; - line-height: 29px; - text-transform: uppercase; - margin-bottom: 0; - margin-top: 26px; - } - img { - width: 141px; - } - - } - - .hero-illustration { - text-align: right; - padding-top: 60px; - padding-bottom: 40px; - - img { - width: 100%; - max-width: 506px; - min-width: 420px; - margin-right: -42px; - margin-top: -20px; - @media screen and (max-width: 1120px) { - margin-right: 0; - } - } - } - - @media screen and (max-width: $breakpoint-md) { - hgroup { - text-align: center; - margin: 0 auto; - padding: 60px 0; - flex: 0 0 100%; - align-items: center; - } - hgroup h1 { - margin-top: 0; - } - .hero-illustration { - display: none; - } - } - @media screen and (max-width: $breakpoint-sm) { - hgroup h1 { - font-size: 32px; - line-height: 43px; - } - - hgroup h3 { - font-size: 18px; - line-height: 26px; - } - } - } - - #get-started { - background: #4CAFFF; - color: white; - - &:hover { - background: darken(#4CAFFF, 5%); - } - - &:focus { - background: darken(#4CAFFF, 9%); - transform: translateY(0px); - } - } - - .points { - display: flex; - flex-wrap: wrap; - margin-left: -2em; - margin-right: -2em; - margin-bottom: 60px; - } - - .points__item { - flex: 0 0 33.33%; - position: relative; - padding: 0px 2em; - margin-bottom: 60px; - - a { - color: #fff; - text-decoration: none; - } - - a:hover { - border-bottom-color: rgba(#fff, 0.3); - } - - h2 { - margin-top: 20px; - font-size: 16px; - } - - p { - margin-top: 10px; - font-weight: 400; - font-size: 15px; - letter-spacing: -0.02em; - line-height: 28px; - color: rgba(225, 241, 255,0.8); - } - - &:before { - content: ''; - display: block; - background: url(/assets/img/feature-icon-sprite.png) no-repeat transparent; - width: 51px; - height: 51px; - background-size: 306px 51px; - margin-bottom: 0.3em; - } - - @media screen and (max-width: $breakpoint-md) { - flex: 0 0 50%; - } - - @media screen and (max-width: $breakpoint-sm) { - margin-bottom: 20px; - flex: 0 0 100%; - } - - } - - .points__item--nativeaccess:before { - background-position: -51px 0; - } - .points__item--opensource:before { - background-position: -102px 0; - } - .points__item--webnative:before { - background-position: -153px 0; - } - .points__item--extensible:before { - background-position: -204px 0; - } - .points__item--simple:before { - background-position: -255px 0; - } - - .footer-landing { - background: #151a23; - margin-top: 0; - } - - -} diff --git a/site/src/components/landing-page/landing-page.tsx b/site/src/components/landing-page/landing-page.tsx deleted file mode 100644 index a29699ce1..000000000 --- a/site/src/components/landing-page/landing-page.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { Component, Element, h } from '@stencil/core'; - - -@Component({ - tag: 'landing-page', - styleUrl: 'landing-page.scss' -}) -export class LandingPage { - - @Element() el: Element; - - constructor() { - let root: any = document.querySelector('capacitor-site'); - root.isLandingPage = true; - document.title = `Capacitor: Universal Web Applications`; - } - - componentDidUnload() { - let root: any = document.querySelector('capacitor-site'); - root.isLandingPage = false; - } - - render() { - return [ -
-
-
-

The Native Bridge for Cross-Platform Web Apps

-

- Invoke Native SDKs on iOS, Android, and the Web with one code base. - Optimized for Ionic Framework apps, or use with any web app framework. -

- - - -
Supports
- Apple, Android, PWA -
-
- -
-
- -
-
-

Cross Platform

- -

- Build web apps that run equally well on iOS, Android, and as Progressive Web Apps -

-
-
-

Native Access

- -

- Access the full Native SDK on each platform, and - easily deploy to App Stores (and the web!) -

-
-
-

Use with Ionic

-

- Capacitor provides native functionality for web apps, and is optimized - for Ionic Framework -

-
-
-

Web Native

-

- Build apps with standardized web technologies that will work for decades, and - easily reach users on the app stores and the mobile web. -

-
-
-

Extensible

- -

- Easily add custom native functionality with a simple Plugin API, or - use existing Cordova plugins with our compatibility layer. -

-
-
-

Open Source

- -

- Capacitor is completely open source (MIT) and maintained - by Ionic and its community. -

-
-
-
, - - ]; - } -} diff --git a/site/src/components/lower-content-nav/lower-content-nav.css b/site/src/components/lower-content-nav/lower-content-nav.css deleted file mode 100644 index cc077e656..000000000 --- a/site/src/components/lower-content-nav/lower-content-nav.css +++ /dev/null @@ -1,4 +0,0 @@ -lower-content-nav { - display: block; - overflow: hidden; -} \ No newline at end of file diff --git a/site/src/components/lower-content-nav/lower-content-nav.tsx b/site/src/components/lower-content-nav/lower-content-nav.tsx deleted file mode 100644 index 973fda538..000000000 --- a/site/src/components/lower-content-nav/lower-content-nav.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { Component, Prop, h } from '@stencil/core'; -import { SiteStructureItem } from '../../global/definitions'; - -@Component({ - tag: 'lower-content-nav', - styleUrl: 'lower-content-nav.css' -}) -export class LowerContentNav { - - @Prop() next?: SiteStructureItem; - @Prop() prev?: SiteStructureItem; - - render() { - return [ - (this.prev != null ? - - Back - : - null ), - (this.next != null ? - - Next - : - null ) - ]; - } -} \ No newline at end of file diff --git a/site/src/components/newsletter-signup/newsletter-signup.scss b/site/src/components/newsletter-signup/newsletter-signup.scss deleted file mode 100644 index aa40c9083..000000000 --- a/site/src/components/newsletter-signup/newsletter-signup.scss +++ /dev/null @@ -1,86 +0,0 @@ -@import '../../global/variables'; - -.newsletter { - background-color: #eeeff1; - padding: 80px 0; - - .container { - display: flex; - } - - form { - display: flex; - justify-content: flex-end; - } - - hgroup { - flex: 0 0 60%; - padding-right: 40px; - h2 { - margin: 0 0 6px; - } - p { - margin: 0; - line-height: 23px; - } - } - - form { - flex: 0 0 40%; - input { - padding: 5px 10px 5px 16px; - width: 200px; - min-height: calc(100% - 1px); - background-color: #fff; - border: none; - border-radius: 6px; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - font-size: 16px; - font-weight: 400; - color: #070D12; - letter-spacing: -0.22px; - } - - button { - background-color: #5EB6FC; - color: white; - border-radius: 6px; - border-top-left-radius: 0; - border-bottom-left-radius: 0; - - &:hover { - background: darken(#4CAFFF, 5%); - } - - &:focus { - background: darken(#4CAFFF, 9%); - } - } - } - - @media screen and (max-width: $breakpoint-md) { - .container { - flex-direction: column; - text-align: center; - align-items: center; - justify-content: space-between; - } - hgroup, - form { - flex: 0 0 100%; - } - hgroup { - padding: 0; - } - form { - margin-top: 24px; - width: 100%; - justify-content: center; - } - } -} - -.landing-page .newsletter { - background-color: #102331; -} diff --git a/site/src/components/newsletter-signup/newsletter-signup.tsx b/site/src/components/newsletter-signup/newsletter-signup.tsx deleted file mode 100644 index 19ebefa2b..000000000 --- a/site/src/components/newsletter-signup/newsletter-signup.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { Component, h } from '@stencil/core'; - -@Component({ - tag: 'newsletter-signup', - styleUrl: 'newsletter-signup.scss' -}) -export class NewsletterSignup { - render() { - return ( - - ); - } -} diff --git a/site/src/components/plugin-api/plugin-api.scss b/site/src/components/plugin-api/plugin-api.scss deleted file mode 100644 index e1d989d38..000000000 --- a/site/src/components/plugin-api/plugin-api.scss +++ /dev/null @@ -1,78 +0,0 @@ -$link-color: #5EB6FC; -$code-font: monospace;/*Consolas,Menlo,Monaco,source-code-pro,Courier New,monospace;*/ - -plugin-api { - .avc-code-plugin-index { - ul anchor-link div { - display: inline-block - } - anchor-link { - color: $link-color; - cursor: pointer; - } - } - .avc-code-plugin-name { display: none; } - - .avc-code-method-anchor-point { - height: 20px; - } - - .avc-code-method { - margin-bottom: 25px; - .avc-code-method-header { - margin-top: 15px; - } - .avc-code-method-comment { - margin: 20px 0; - } - } - - .avc-code-method-signature { - font-family: $code-font; - padding: 8px; - background-color: #eee; - border-radius: 3px; - } - - .avc-code-method-params { - .avc-code-method-param-info { - .avc-code-method-param-info-name { - font-size: 14px; - font-weight: bold; - } - .avc-code-type-name, avc-code-type { - margin-left: 5px; - margin-right: 5px; - font-style: italic; - } - .avc-code-method-param-comment { - display: inline-block; - } - } - - .avc-code-method-returns-label { - font-weight: bold; - font-size: 14px; - text-transform: lowercase; - } - } - - .avc-code-string { - color: $link-color; - } - - .avc-code-interface { - margin-top: 25px; - font-family: $code-font; - line-height: 18px; - } - - .avc-code-interface-param { - margin-left: 25px; - margin: 8px 0 8px 25px; - } - - .avc-code-param-comment { - color: #8b94a5; - } -} diff --git a/site/src/components/plugin-api/plugin-api.tsx b/site/src/components/plugin-api/plugin-api.tsx deleted file mode 100644 index d568bb49b..000000000 --- a/site/src/components/plugin-api/plugin-api.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { Component, Prop, State, Element, h } from '@stencil/core'; -@Component({ - tag: 'plugin-api', - styleUrl: 'plugin-api.scss' -}) -export class PluginApi { - @Element() el: Element; - @Prop({ context: 'isServer' }) private isServer: boolean; - @Prop() name: string; - @Prop() index: boolean; - @State() content: string; - - componentWillLoad() { - if (this.isServer) { - return; - } - const url = `api${this.index ? '-index' : ''}.html`; - return fetch(`/assets/docs-content/apis/${this.name}/${url}`) - .then(response => { - return response.text() - }) - .then(data => { - this.content = data; - - const el = document.createElement('div'); - el.innerHTML = data; - }); - } - - componentDidUpdate() { - this.bindHeadings(this.el); - } - - bindHeadings(el: Element) { - if (this.isServer) { - return; - } - - const headings = Array.from(el.querySelectorAll('h1,h2,h3,h4,h5')); - headings.forEach(h => { - h.classList.add('anchor-link-relative'); - var link = document.createElement('anchor-link'); - link.className = 'hover-anchor'; - if (h.id) { - link.to = h.id; - } - link.innerHTML = '#'; - h.insertBefore(link, h.firstChild); - }); - } - - render() { - return ( -
-
-
- ); - } -} diff --git a/site/src/components/plugin-platforms/plugin-platforms.scss b/site/src/components/plugin-platforms/plugin-platforms.scss deleted file mode 100644 index d599b7027..000000000 --- a/site/src/components/plugin-platforms/plugin-platforms.scss +++ /dev/null @@ -1,10 +0,0 @@ -$link-color: #5EB6FC; - -plugin-platforms { - display: block; - .platforms { - .platform { - display: inline-block; - } - } -} \ No newline at end of file diff --git a/site/src/components/plugin-platforms/plugin-platforms.tsx b/site/src/components/plugin-platforms/plugin-platforms.tsx deleted file mode 100644 index c7bc46eb3..000000000 --- a/site/src/components/plugin-platforms/plugin-platforms.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { Component, Prop, h } from '@stencil/core'; -@Component({ - tag: 'plugin-platforms', - styleUrl: 'plugin-platforms.scss' -}) -export class PluginPlatforms { - @Prop() platforms: string = ""; - - componentDidLoad() { - } - - render() { - const platforms = this.platforms.split(','); - return ( -
- {platforms.map(platform => { - return ( -
{platform}
- ) - })} -
- ); - } -} diff --git a/site/src/components/site-header/site-header.scss b/site/src/components/site-header/site-header.scss deleted file mode 100644 index e49c97484..000000000 --- a/site/src/components/site-header/site-header.scss +++ /dev/null @@ -1,484 +0,0 @@ -@import '../../global/variables'; - -site-header { - position: fixed; - top: 0; - left: 0; - width: 100%; - background-color: #fff; - z-index: 99; - transition: .2s box-shadow ease-out; - - &.scrolled { - box-shadow: 0px 1px 3px rgba(0,0,0,0.06), 0px 1px 0px rgba(0,0,0,0.02); - } - - .container { - padding-top: 20px; - padding-bottom: 20px; - display: flex; - justify-content: space-between; - } - - .logo { - background: url(/assets/img/logo-light.png); - width: 128px; - height: 22px; - background-size: contain; - background-repeat: no-repeat; - font-size: 24px; - } - - .logo-link a { - margin: 0; - display: flex; - align-items: center; - text-decoration: none; - border: 0; - } - - .version { - color: $color-blue-primary; - display: inline-block; - margin-left: 6px; - font-size: 8px; - letter-spacing: .4px; - text-transform: uppercase; - padding: 3px 5px; - background: rgba(120, 179, 228, 0.14);; - border-radius: 4px; - } - - @media screen and (max-width: $breakpoint-md) { - .container { - padding-top: 15px; - padding-bottom: 15px; - flex-direction: column; - align-items: center; - } - } - - .announcement { - position: relative; - margin-right: 8px; - - a { - text-decoration: none; - color: var(--color-woodsmoke); - transition: background 0.3s; - display: inline-flex; - align-items: center; - background: rgba(255,255,255,0.10); - border-radius: 100px; - padding: 5px; - border: 0; - } - - a:hover { - background: rgba(255,255,255,0.15); - } - - .pill, - .cta { - font-size: 10px; - text-transform: uppercase; - - } - .pill { - background-color: $color-yellow; - color: $color-yellow-contrast; - font-weight: 800; - padding: 2px 6px; - border-radius: 100px; - flex: 0 0 70px; - text-align: center; - } - .message { - font-weight: 500; - opacity: 0.8; - font-size: 13px; - margin: 0 14px; - flex: 0 0 auto; - - @media screen and (max-width: $breakpoint-sm) { - display:none; - } - - @media screen and (max-width: 1130px) { - flex: 0 1 auto; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: calc(100vw - 710px); - } - } - .black { - color: black; - } - .cta { - color: $color-yellow; - font-weight: 600; - padding-right: 4px; - margin-left: 8px; - flex: 0 0 94px; - white-space: nowrap; - } - .icon { - fill: $color-yellow; - height: 9px; - width: 8px; - transform: translateY(1.5px); - margin-left: 2px; - } - - @media screen and (max-width: $breakpoint-md) { - width: 100vw; - padding-top: 5px; - margin-right: 0; - margin-left: 0; - - a { - display: flex; - width: 100%; - border-radius: 0; - padding: 0 12px 0 16px; - } - .message { - flex: 1; - max-width: none; - } - .cta { - flex: 0 0 94px; - padding-right: 0; - } - } - } -} - -.landing-page site-header .version{ - background: rgba(255, 255, 255, 0.14); -} - -.header-menu { - a, - .dropdown__label { - transition: border .3s, color .3s; - font-size: 14px; - padding-bottom: 4px; - border-bottom: 3px solid transparent; - vertical-align: top; - color: rgba(#000, 0.6); - text-decoration: none; - font-weight: 500; - letter-spacing: -0.02em; - } - - stencil-route-link + stencil-route-link, - stencil-route-link + .link, - .link + .link { - margin-left: 30px; - } - - a:not(.link--external):hover, - .link-active { - color: rgba(#000, 1); - border-bottom-color: rgba(#000, 0.1); - } - .dropdown:hover .dropdown__label { - color: rgba(#000, 1); - } - - a.link-active,{ - color: #000; - } - - .link, - .link--external { - position: relative; - border: 0; - transition: color .3s; - } - - .link--external .icon { - margin-left: 6px; - transition: top 0.2s, left 0.2s; - position: relative; - } - - .link--external:hover { - color: #000; - - .icon { - left: 1px; - top: -1px; - } - } -} - -.header-overflow, -.header-close { - transition: opacity 0.3s; - position: absolute; - top: 15px; - right: 15px; - width: 22px; - height: 18px; - display: none; - cursor: pointer; - opacity: 0.7; - - &:hover { - opacity: 1; - } - - @media screen and (max-width: $breakpoint-md) { - display: flex; - justify-content: center; - } -} - -.header-close { - .icon-close { - fill: $color-white; - } -} - - -.landing-page { - .logo { - background-image: url(/assets/img/logo-dark.png); - color: #fff; - font-family: 'Roboto Mono',-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; - letter-spacing: 1px; - font-weight: 600; - } - site-header { - position: static; - } - .header-menu { - display: flex; - - a, - .dropdown__label { - color: rgba($color-white, 0.7); - } - - a:not(.link--external):hover, - a.link-active, - { - color: rgba($color-white, 1); - border-bottom-color: rgba($color-white, 0.2); - } - - a.link-active, - a.link-active:hover, - .dropdown:hover .dropdown__label { - color: $color-white; - } - - .link:hover { - color: $color-white; - } - } -} - - -@media screen and (max-width: $breakpoint-md) { - .header-menu { - transition: opacity 0.3s; - position: fixed; - z-index: 9999; - width: 100%; - height: 100%; - top: 0; - left: 0; - bottom: 0; - right: 0; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - background: #000; - opacity: 0; - display: none; - - stencil-route-link + stencil-route-link, - stencil-route-link + .link, - .link + .link { - margin-left: 0px; - margin-top: 38px; - margin-bottom: 0; - padding-bottom: 0; - display: inline-block; - } - - a, - .link { - font-size: 24px; - color: rgba(#fff, 0.7) !important; - - &:hover { - color: $color-white !important; - } - } - - a:hover, - .link:hover, - a.link-active { - color: $color-white !important; - border-bottom-color: rgba(#fff, 0.2) !important; - } - - stencil-route-link, - .link { - transition: transform 0.4s, color 0.3s; - transform: translateY(8px); - } - } - - .show-mobile-menu { - z-index: 999999; - } - - .show-mobile-menu .header-menu { - opacity: 1; - } - - .show-mobile-menu .header-menu stencil-route-link, - .show-mobile-menu .header-menu .link { - transform: translateY(0); - } - - .show-mobile-menu .header-menu--show + .header-overflow { - display: none; - } - -} - - - -.dropdown { - cursor: pointer; -} - -.dropdown__menu { - padding: 0; - margin: 0; - text-align: center; -} - -.dropdown__item { - list-style-type: none; - border: 0 !important; -} - -.dropdown__label { - border: 0 !important; -} - -@media screen and (min-width: 769px) { - .dropdown__menu { - text-align: left; - position: absolute; - top: calc(100% + 12px); - left: 50%; - z-index: 999; - box-shadow: 0 6px 20px rgba(0, 0, 0, 0.10), 0 1px 6px rgba(0, 0, 0, 0.1); - padding: 10px 18px 12px; - border-radius: 8px; - background: #fff; - - display: block; - visibility: 0; - opacity: 0; - transform: translate(-50%, -5px); - pointer-events: none; - transition: transform .3s ease, opacity .3s; - - &:before { - content: ''; - position: absolute; - top: -20px; - width: 100%; - height: 30px; - left: 0; - } - } - - .dropdown--visible .dropdown__menu { - visibility: 1; - opacity: 1; - transform: scaleY(1); - transform: translate(-50%, 0); - pointer-events: auto; - } - - .dropdown__arrow { - position: absolute; - height: 8px; - width: 20px; - overflow: hidden; - top: -8px; - left: calc(50% - 8px); - - &:before { - position: absolute; - width: 20px; - height: 20px; - top: 4px; - background: #fff; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); - border-radius: 4px; - box-shadow: 1px 1px 3px rgba(0,0,0,.4); - content: ''; - display: block; - } - } - - .dropdown__item { - min-width: 80px; - display: block; - } - - .dropdown__item a { - color: $link-color !important; - font-weight: 500; - border: 0; - - &:hover { - color: darken($link-color, 15%) !important; - } - } -} - -@media screen and (max-width: $breakpoint-md) { - - .landing-page .header-menu .dropdown__label, - .header-menu .dropdown__label { - font-size: 11px; - text-transform: uppercase; - letter-spacing: 0.1em; - color: rgba(#fff, 0.4) !important; - font-weight: 600; - vertical-align: baseline; - } - - .dropdown__arrow { - display: none; - } - - .dropdown__menu { - text-align: center; - } - - .dropdown__item { - margin-top: 4px; - } - - .dropdown__item a { - border: 0; - font-size: 18px; - } - -} diff --git a/site/src/components/site-header/site-header.tsx b/site/src/components/site-header/site-header.tsx deleted file mode 100644 index d3d6056b4..000000000 --- a/site/src/components/site-header/site-header.tsx +++ /dev/null @@ -1,150 +0,0 @@ -import { Component, Element, Listen, State, h } from '@stencil/core'; - -@Component({ - tag: 'site-header', - styleUrl: 'site-header.scss' -}) -export class SiteHeader { - @Element() el: Element; - - @State() isMobileMenuShown: boolean; - @State() isDropdownShown: boolean; - @State() isScrolled = false; - - @Listen('window:resize') - handleResize() { - requestAnimationFrame(() => { - if (window.innerWidth > 768) { - const menu = (this.el.querySelector('.header-menu') as HTMLElement); - menu.style.display = ""; - this.el.classList.remove('show-mobile-menu'); - document.body.classList.remove('no-scroll'); - this.isMobileMenuShown = false; - } - }); - } - - @Listen('window:scroll') - handleScroll(event) { - requestAnimationFrame(() => { - if (event.target.documentElement.scrollTop !== 0 && !this.isScrolled) { - this.el.classList.add('scrolled'); - this.isScrolled = true; - } else if (event.target.documentElement.scrollTop === 0 && this.isScrolled) { - this.el.classList.remove('scrolled'); - this.isScrolled = false; - } - }); - } - - componentDidLoad() { - this.isMobileMenuShown = false; - } - - showNav () { - if (this.isMobileMenuShown) return; - this.isMobileMenuShown = true; - - const menu = (this.el.querySelector('.header-menu') as HTMLElement); - - menu.style.display = "flex"; - setTimeout(() => { - this.el.classList.add('show-mobile-menu'); - document.body.classList.add('no-scroll'); - }, 1) - } - - hideNav () { - if (!this.isMobileMenuShown) return; - this.isMobileMenuShown = false; - - const menu = (this.el.querySelector('.header-menu') as HTMLElement); - - this.el.classList.remove('show-mobile-menu'); - setTimeout(() => { - menu.style.display = "none"; - document.body.classList.remove('no-scroll'); - }, 300) - } - - handleDropdownEnter () { - this.isDropdownShown = true; - } - - handleDropdownLeave () { - this.isDropdownShown = false; - } - - render() { - return ( - - ); - } -} diff --git a/site/src/components/site-menu/site-menu.scss b/site/src/components/site-menu/site-menu.scss deleted file mode 100644 index 468ac37fa..000000000 --- a/site/src/components/site-menu/site-menu.scss +++ /dev/null @@ -1,120 +0,0 @@ -@import '../../global/variables'; - -site-menu { - display: block; - flex: 0 0 auto; - margin-top: 100px; -} - -site-menu .sticky { - // top: 100px; -} - -site-menu .section-label { - color: var(--color-woodsmoke); - margin-bottom: 0; - font-size: 14px; - font-weight: 600; -} - -site-menu .menu-list li, -site-menu .menu-list ul li { - list-style-type: none; - margin: 0; - padding: 0; -} - -site-menu .menu-list { - margin-top: 0; - padding: 0; -} - -site-menu .menu-list .section-label:first-of-type { - margin-top: 0; - margin-bottom: 0; -} - -site-menu .menu-list ul { - padding: 0; - margin-top: 0; - margin-bottom: 0; -} - -site-menu .menu-list li { - font-size: 14px; -} - -site-menu .menu-list > li + li { - margin-top: 8px; -} - -site-menu .menu-list a { - font-weight: 400; - color: #6c6c8b; - text-decoration: none; - border: 0; -} - -site-menu .menu-list a:not(.link-active) { - // transition: color 0.2s; -} - -site-menu .menu-list a:hover { - border: 0; -} - -site-menu .menu-list .link-active { - font-weight: 500; - color: var(--color-dodger-blue); -} - -site-menu .menu-list a:hover:not(.link-active) { - color: var(--color-woodsmoke); -} - -site-menu .menu-list ul li { - padding-left: 8px; - transition: 80ms height; - height: 26px; - display: block; - overflow: hidden; -} - -site-menu .menu-list ul li a { - display: block; - transition: .2s transform ease, .2s color ease; -} - -site-menu .menu-list ul li:hover a, -site-menu .menu-list ul li a.link-active { - transform: translateX(2px); -} - -site-menu .menu-list ul.collapsed li { - height: 0; -} - -@media screen and (max-width: 768px) { - site-menu { - position: fixed; - top: 0; - left: 0; - background: var(--color-woodsmoke); - z-index: 999; - padding: 20px; - width: calc(100vw - 56px); - transform: translateX(calc(-100vw + 56px)); - height: 100%; - overflow-y: scroll; - } - site-menu .menu-list .section-label { - color: white; - } - site-menu .menu-list a { - color: rgba(255, 255, 255, 0.6); - } - site-menu .menu-list a:hover:not(.link-active) { - color: white; - } -} - diff --git a/site/src/components/site-menu/site-menu.tsx b/site/src/components/site-menu/site-menu.tsx deleted file mode 100644 index fb17a774e..000000000 --- a/site/src/components/site-menu/site-menu.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { Component, Prop, State, Event, EventEmitter, h } from '@stencil/core'; -import SiteProviderConsumer, { SiteState } from '../../global/site-provider-consumer'; -import { SiteStructureItem } from '../../global/definitions'; - -@Component({ - tag: 'site-menu', - styleUrl: 'site-menu.scss' -}) -export class SiteMenu { - @Prop() siteStructureList: SiteStructureItem[] = []; - @Prop({ mutable: true }) selectedParent: SiteStructureItem = null; - - @State() closeList = []; - - @Event() leftSidebarClick: EventEmitter; - - handleLeftSidebarClick() { - this.leftSidebarClick.emit(); - } - - toggleParent = (itemNumber) => { - return (e: MouseEvent) => { - e.preventDefault(); - if (this.closeList.indexOf(itemNumber) !== -1) { - this.closeList.splice(this.closeList.indexOf(itemNumber), 1) - this.closeList = [...this.closeList]; - } else { - this.closeList = [...this.closeList, itemNumber]; - } - - console.log(e, this.closeList) - } - } - - render() { - return ( -
- - {() => ( -
- -
- )} -
-
- ); - } -} diff --git a/site/src/global/_variables.scss b/site/src/global/_variables.scss deleted file mode 100644 index c1a8edd1b..000000000 --- a/site/src/global/_variables.scss +++ /dev/null @@ -1,43 +0,0 @@ -$color-blue-primary: #4CAFFF; -$color-blue-muted: #85ADCE; -$color-yellow: #FDBF00; -$color-yellow-contrast: #653D00; -$color-white: #fff; - -$link-color: #1d9aff; - -$breakpoint-lg: 1024px; -$breakpoint-md: 768px; -$breakpoint-sm: 480px; - -$easeOutExpo: cubic-bezier(0.19, 1, 0.22, 1); - -// CSS vars for compatibility w/ stencil site components -// TODO convert these and their use to SCSS -:root { - --color-woodsmoke: #16161D; - --color-dolphin: #626177; - --color-gunpowder: #505061; - --color-manatee: #8888A2; - --color-cadet-blue: #abb2bf; - --color-whisper: #EBEBF7; - --color-selago: #F4F4FD; - --color-white-lilac: #f8f8fc; - --color-white: #fff; - - --color-green-haze: #00AB47; - - // --color-dodger-blue: rgb(88, 81, 255); - --color-dodger-blue: #1d9aff; - // --color-dodger-blue-hover: rgba(88, 81, 255, 0.2); - --color-dodger-blue-hover: rgba(#1d9aff, 0.2); - - --color-old-lace: #fdf5e4; - --color-wheatfield: #F1E3C5; - --color-pirate-gold: #9A6400; - - --button-shadow: 0 8px 16px rgba(0,0,0,.1), 0 3px 6px rgba(0,0,0,.08); - --button-shadow-hover: 0 4px 6px rgba(0,0,0,.12), 0 1px 3px rgba(0,0,0,.08); - - --ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1); -} \ No newline at end of file diff --git a/site/src/global/_webfont.scss b/site/src/global/_webfont.scss deleted file mode 100644 index fa922bfac..000000000 --- a/site/src/global/_webfont.scss +++ /dev/null @@ -1,101 +0,0 @@ -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 400; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-Regular.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-Regular.woff') format('woff'); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 400; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-Italic.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-Italic.woff') format('woff'); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 500; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-Medium.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-Medium.woff') format('woff'); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 500; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-MediumItalic.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-MediumItalic.woff') format('woff'); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 600; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-SemiBold.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-SemiBold.woff') format('woff'); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 600; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-SemiBoldItalic.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-SemiBoldItalic.woff') format('woff'); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 700; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-Bold.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-Bold.woff') format('woff'); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 700; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-BoldItalic.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-BoldItalic.woff') format('woff'); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 800; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-ExtraBold.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-ExtraBold.woff') format('woff'); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 800; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-ExtraBoldItalic.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-ExtraBoldItalic.woff') format('woff'); -} - -@font-face { - font-family: 'Inter'; - font-style: normal; - font-weight: 900; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-Black.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-Black.woff') format('woff'); -} -@font-face { - font-family: 'Inter'; - font-style: italic; - font-weight: 900; - unicode-range: U+000-5FF; - src: url('/assets/fonts/inter/Inter-BlackItalic.woff2') format('woff2'), - url('/assets/fonts/inter/Inter-BlackItalic.woff') format('woff'); -} \ No newline at end of file diff --git a/site/src/global/definitions.js b/site/src/global/definitions.js deleted file mode 100644 index c8ad2e549..000000000 --- a/site/src/global/definitions.js +++ /dev/null @@ -1,2 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/site/src/global/definitions.ts b/site/src/global/definitions.ts deleted file mode 100644 index a2ea1438e..000000000 --- a/site/src/global/definitions.ts +++ /dev/null @@ -1,23 +0,0 @@ -export interface MarkdownContent { - title?: string; - description?: string; - url?: string; - contributors?: string[]; - headings?: MarkdownHeading[]; - srcPath?: string; - content?: string; - } - - export interface MarkdownHeading { - id: string; - level: number; - text: string; - } - - export interface SiteStructureItem { - text: string, - url?: string; - filePath?: string; - children?: SiteStructureItem[]; - } - \ No newline at end of file diff --git a/site/src/global/shared/buttons.css b/site/src/global/shared/buttons.css deleted file mode 100644 index e45ea91c6..000000000 --- a/site/src/global/shared/buttons.css +++ /dev/null @@ -1,65 +0,0 @@ - -.btn { - transition: all .15s ease; - text-decoration: none; - border: none; - outline: none; - font-size: 13px; - font-weight: 700; - text-transform: uppercase; - padding: 12px 14px; - border-radius: 4px; - letter-spacing: 0.04em; - box-shadow: var(--button-shadow); - cursor: pointer; - display: inline-flex; - align-items: center; - -} - -.btn a { - text-decoration: none; -} - -.btn app-icon { - margin-right: 8px; - opacity: 0.8; -} - -.btn:hover { - text-decoration: none; - transform: translateY(1px); - box-shadow: var(--button-shadow-hover); -} - -.btn--primary { - background: var(--color-dodger-blue); - color: var(--color-white); -} - -.btn--secondary { - background: var(--color-white); - color: var(--color-dodger-blue); -} - -.btn--tertiary { - background: #F4F4FD; - color: var(--color-dodger-blue); - box-shadow: none; -} - -.btn--tertiary:hover { - background-color: #ececf9; - box-shadow: none; - transform: none; -} - -.btn--small { - letter-spacing: -0.02em; - text-transform: none; - font-size: 15px; - padding: 5px 12px 7px; - font-weight: 500; - border-radius: 8px; - min-height: 38px; -} diff --git a/site/src/global/shared/utils.css b/site/src/global/shared/utils.css deleted file mode 100644 index 3bee6e57b..000000000 --- a/site/src/global/shared/utils.css +++ /dev/null @@ -1,31 +0,0 @@ -.push { - margin-top: 70px; -} - -.push-sm { - margin-top: 36px; -} - -.block { - display: block; -} - -.pull-left { - float: left; -} - -.pull-right{ - float: right; -} - -.no-scroll { - overflow: hidden; -} - -.sticky { - position: sticky; - top: 100px; - max-height: calc(100vh - 100px); - overflow-y: auto; - overflow-x: hidden; -} \ No newline at end of file diff --git a/site/src/global/site-provider-consumer.tsx b/site/src/global/site-provider-consumer.tsx deleted file mode 100644 index d8b963693..000000000 --- a/site/src/global/site-provider-consumer.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { createProviderConsumer } from '@stencil/state-tunnel'; -import { h } from '@stencil/core'; - -export interface SiteState { - isLeftSidebarIn: boolean, - toggleLeftSidebar: () => void -} - -export default createProviderConsumer({ - isLeftSidebarIn: false, - toggleLeftSidebar: () => {} - }, - (subscribe, child) => -); \ No newline at end of file diff --git a/site/src/global/site-structure-utils.ts b/site/src/global/site-structure-utils.ts deleted file mode 100644 index 75563751b..000000000 --- a/site/src/global/site-structure-utils.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { SiteStructureItem } from './definitions'; - -export interface ItemInfo { - item?: SiteStructureItem - nextItem?: SiteStructureItem; - prevItem?: SiteStructureItem; - parent?: SiteStructureItem -} - -export function findItem(siteStructureList: SiteStructureItem[], url: string, foundData: ItemInfo = { parent: null }) { - - for (const item of siteStructureList) { - if (item.url === url) { - foundData.item = item; - } else if (foundData.item != null && item.url != null) { - foundData.nextItem = item; - } else if (item.url != null && foundData.item == null) { - foundData.prevItem = item; - } else if (item.children && item.children.length > 0) { - if (foundData.item == null) { - foundData.parent = item; - } - foundData = findItem(item.children, url, foundData); - } - - if (foundData.item != null && foundData.nextItem != null) { - return foundData; - } - } - - return foundData; -} diff --git a/site/src/global/style.scss b/site/src/global/style.scss deleted file mode 100644 index 4bebf94a0..000000000 --- a/site/src/global/style.scss +++ /dev/null @@ -1,2 +0,0 @@ -@import 'variables'; -@import 'webfont'; \ No newline at end of file diff --git a/site/src/index.html b/site/src/index.html deleted file mode 100644 index aec6f1392..000000000 --- a/site/src/index.html +++ /dev/null @@ -1,52 +0,0 @@ - - - - - Capacitor - build cross platform apps with the web - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/site/src/manifest.json b/site/src/manifest.json deleted file mode 100644 index 4bf4cdeac..000000000 --- a/site/src/manifest.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "name": "Capacitor", - "short_name": "Capacitor", - "start_url": "/", - "display": "standalone", - "icons": [{ - "src": "assets/img/favicon.png", - "sizes": "192x192", - "type": "image/png" - }], - "background_color": "#16161d", - "theme_color": "#16161d" -} \ No newline at end of file diff --git a/site/src/robots.txt b/site/src/robots.txt deleted file mode 100644 index 3dcd2c3d2..000000000 --- a/site/src/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Disallow: \ No newline at end of file diff --git a/site/stencil.config.ts b/site/stencil.config.ts deleted file mode 100644 index f35544989..000000000 --- a/site/stencil.config.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { Config } from '@stencil/core'; -import { sass } from '@stencil/sass'; - -export const config:Config = { - plugins: [ - sass() - ], - globalStyle: 'src/global/style.scss', - outputTargets: [ - { - type: 'www', - serviceWorker: null - /* - serviceWorker: { - skipWaiting: false, - clientsClaim: true - } - */ - } - ], - enableCache: false, - copy: [ - { src: 'robots.txt' } - ] - /* - plugins: [{ - name: 'version-replace', - transform(sourceText, importee) { - if (importee.indexOf('.tsx') >= 0) { - console.log('TRANSFORMING', importee); - if (sourceText.indexOf('CAPACITOR_VERSION') >= 0) { - console.log('\t found version!', sourceText); - } - const replaced = sourceText.replace('CAPACITOR_VERSION', sourceText); - return Promise.resolve({ - code: replaced - }); - } - return Promise.resolve({ - code: sourceText - }); - } - }] - */ -}; diff --git a/site/tsconfig.json b/site/tsconfig.json deleted file mode 100644 index 04abb71bc..000000000 --- a/site/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "compilerOptions": { - "allowSyntheticDefaultImports": true, - "allowUnreachableCode": false, - "declaration": false, - "experimentalDecorators": true, - "lib": [ - "dom", - "es2015" - ], - "moduleResolution": "node", - "module": "es2015", - "target": "es2015", - "noUnusedLocals": true, - "noUnusedParameters": true, - "resolveJsonModule": true, - "jsx": "react", - "jsxFactory": "h" - }, - "include": [ - "src", - "types/jsx.d.ts" - ], - "exclude": [ - "node_modules" - ] -} diff --git a/site/tslint.json b/site/tslint.json deleted file mode 100644 index d0f5ffdea..000000000 --- a/site/tslint.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "rules": { - "quotemark": [true, "single", "jsx-double"], - "no-duplicate-variable": true, - "no-unused-variable": [ - true - ] - } -}