├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── demo ├── app │ ├── App_Resources │ │ ├── Android │ │ │ ├── app.gradle │ │ │ └── src │ │ │ │ └── main │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── res │ │ │ │ ├── drawable-hdpi │ │ │ │ ├── background.png │ │ │ │ ├── customicon.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-ldpi │ │ │ │ ├── background.png │ │ │ │ ├── customicon.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-mdpi │ │ │ │ ├── background.png │ │ │ │ ├── customicon.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-nodpi │ │ │ │ └── splash_screen.xml │ │ │ │ ├── drawable-xhdpi │ │ │ │ ├── background.png │ │ │ │ ├── customicon.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── background.png │ │ │ │ ├── customicon.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── background.png │ │ │ │ ├── customicon.png │ │ │ │ ├── icon.png │ │ │ │ └── logo.png │ │ │ │ ├── values-v21 │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ └── iOS │ │ │ ├── ._customicon.png │ │ │ ├── ._customicon@2x.png │ │ │ ├── ._customicon@3x.png │ │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon-29.png │ │ │ │ ├── icon-29@2x.png │ │ │ │ ├── icon-29@3x.png │ │ │ │ ├── icon-40.png │ │ │ │ ├── icon-40@2x.png │ │ │ │ ├── icon-40@3x.png │ │ │ │ ├── icon-50.png │ │ │ │ ├── icon-50@2x.png │ │ │ │ ├── icon-57.png │ │ │ │ ├── icon-57@2x.png │ │ │ │ ├── icon-60@2x.png │ │ │ │ ├── icon-60@3x.png │ │ │ │ ├── icon-72.png │ │ │ │ ├── icon-72@2x.png │ │ │ │ ├── icon-76.png │ │ │ │ ├── icon-76@2x.png │ │ │ │ └── icon-83.5@2x.png │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.launchimage │ │ │ │ ├── Contents.json │ │ │ │ ├── Default-568h@2x.png │ │ │ │ ├── Default-667h@2x.png │ │ │ │ ├── Default-736h@3x.png │ │ │ │ ├── Default-Landscape.png │ │ │ │ ├── Default-Landscape@2x.png │ │ │ │ ├── Default-Landscape@3x.png │ │ │ │ ├── Default-Portrait.png │ │ │ │ ├── Default-Portrait@2x.png │ │ │ │ ├── Default.png │ │ │ │ └── Default@2x.png │ │ │ ├── LaunchScreen.AspectFill.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchScreen-AspectFill.png │ │ │ │ └── LaunchScreen-AspectFill@2x.png │ │ │ └── LaunchScreen.Center.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── LaunchScreen-Center.png │ │ │ │ └── LaunchScreen-Center@2x.png │ │ │ ├── Info.plist │ │ │ ├── LaunchScreen.storyboard │ │ │ ├── build.xcconfig │ │ │ ├── customicon.png │ │ │ ├── customicon@2x.png │ │ │ └── customicon@3x.png │ ├── app.css │ ├── app.ts │ ├── main-page.ts │ ├── main-page.xml │ ├── main-view-model.ts │ ├── package.json │ ├── vendor-platform.android.ts │ ├── vendor-platform.ios.ts │ └── vendor.ts ├── nsconfig.json ├── package-lock.json ├── package.json └── tsconfig.json ├── publish ├── pack.sh ├── package-lock.json ├── package.json └── publish.sh ├── seed-tests ├── jasmine.config.json └── package.json ├── src ├── .npmignore ├── .travis.yml ├── app-tour.android.ts ├── app-tour.common.ts ├── app-tour.ios.ts ├── index.d.ts ├── package.json ├── platforms │ ├── android │ │ └── include.gradle │ └── ios │ │ └── Podfile ├── references.d.ts ├── scripts │ ├── postclone.js │ └── prepare.js ├── tsconfig.json └── typings │ └── objc!MaterialShowcase.d.ts └── tslint.json /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ 2 | .idea/ 3 | node_modules/ 4 | .DS_Store 5 | *.tgz 6 | *.js 7 | *.js.map 8 | *.log 9 | *.d.ts 10 | src/hooks/ 11 | src/node_modules/ 12 | !src/index.d.ts 13 | !src/references.d.ts 14 | !src/scripts/*.js 15 | !src/typings/objc!MaterialShowcase.d.ts 16 | demo/lib 17 | demo/platforms 18 | demo/node_modules 19 | demo-ng/platforms 20 | publish/package/ -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | matrix: 2 | include: 3 | - stage: "Lint" 4 | language: node_js 5 | os: linux 6 | node_js: "6" 7 | script: cd src && npm run ci.tslint && cd ../demo && npm run ci.tslint 8 | - stage: "WebPack, Build and Test" 9 | os: osx 10 | env: 11 | - WebPack="iOS" 12 | osx_image: xcode9.2 13 | language: node_js 14 | node_js: "6" 15 | jdk: oraclejdk8 16 | before_install: 17 | - gem install cocoapods 18 | - pod repo update 19 | script: cd demo && npm run build.plugin && npm i && tns build ios --bundle --env.uglify 20 | - language: android 21 | os: linux 22 | env: 23 | - WebPack="Android" 24 | jdk: oraclejdk8 25 | before_install: nvm install 6.10.3 26 | script: cd demo && npm run build.plugin && npm i && tns build android --bundle --env.uglify --env.snapshot 27 | - language: android 28 | env: 29 | - BuildAndroid="26" 30 | os: linux 31 | jdk: oraclejdk8 32 | before_install: nvm install stable 33 | script: 34 | - cd src && npm run build && cd ../demo && tns build android 35 | - os: osx 36 | env: 37 | - BuildiOS="11" 38 | - Xcode="9.2" 39 | osx_image: xcode9.2 40 | language: node_js 41 | node_js: "6" 42 | jdk: oraclejdk8 43 | before_install: 44 | - gem install cocoapods 45 | - pod repo update 46 | script: 47 | - cd src && npm run build && cd ../demo && tns build ios 48 | - os: linux 49 | language: android 50 | dist: precise 51 | sudo: required 52 | jdk: oraclejdk8 53 | before_script: 54 | - echo no | android create avd --force -n test -t android-21 -b armeabi-v7a 55 | - emulator -avd test -no-audio -no-window & 56 | - android-wait-for-emulator 57 | before_install: 58 | - nvm install 6 59 | script: cd src && npm run test.android 60 | - os: osx 61 | language: node_js 62 | node_js: "6" 63 | jdk: oraclejdk8 64 | osx_image: xcode9.2 65 | script: cd src && npm run test.ios 66 | 67 | android: 68 | components: 69 | - tools 70 | - platform-tools 71 | - build-tools-27.1.1 72 | - android-27 73 | - android-23 74 | - extra-android-m2repository 75 | - sys-img-armeabi-v7a-android-21 76 | 77 | install: 78 | - echo no | npm install -g nativescript 79 | - tns usage-reporting disable 80 | - tns error-reporting disable 81 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright (c) 2015-2018 Telerik AD 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | NativeScript App Tour

3 | 4 | 5 |

6 | 7 | > Note: This Plugin based on [MaterialShowcase for IOS](https://github.com/hamdiwanis/material-showcase-ios) and [TapTargetView for Android](https://github.com/KeepSafe/TapTargetView) . 8 | 9 | ## Installation 10 | For NS8+: 11 | 12 | ```bash 13 | tns plugin add nativescript-app-tour 14 | ``` 15 | 16 | For NS7+: 17 | 18 | ```bash 19 | tns plugin add nativescript-app-tour@3.1.0 20 | ``` 21 | 22 | For older NS versions: 23 | 24 | ```bash 25 | tns plugin add nativescript-app-tour@2.0.2 26 | ``` 27 | 28 | ### Usage 29 | ```html 30 | 31 | 32 | 33 | ``` 34 | 35 | ``` 36 | startTour(){ 37 | 38 | const stops: TourStop[] = [ 39 | { 40 | view: this.page.getViewById("feat1"), 41 | title: 'Feature 1', 42 | description: "Feature 1 Description", 43 | dismissable: true 44 | }, 45 | { 46 | view: this.page.getViewById("feat2"), 47 | title: 'Feature 2', 48 | description: 'Feature 2 Description', 49 | outerCircleColor: 'orange', 50 | rippleColor: 'black' 51 | } 52 | ]; 53 | 54 | const handlers: TourEvents = { 55 | finish() { 56 | console.log('Tour finished'); 57 | }, 58 | onStep(lastStopIndex) { 59 | console.log('User stepped', lastStopIndex); 60 | }, 61 | onCancel(lastStopIndex) { 62 | console.log('User cancelled', lastStopIndex); 63 | } 64 | } 65 | 66 | this.tour = new AppTour(stops, handlers); 67 | this.tour.show(); 68 | } 69 | ``` 70 | 71 | see the demo project for more info. 72 | 73 | ### Angular 74 | also in angular you can get a refrence to the target view using ```@ViewChild``` decorator as next 75 | ```html 76 | 77 | 78 | 79 | ``` 80 | 81 | ``` 82 | @ViewChild('feat1') feat1: ElementRef; 83 | @ViewChild('feat2') feat2: ElementRef; 84 | 85 | startTour(){ 86 | 87 | const stops: TourStop[] = [ 88 | { 89 | view: this.feat1.nativeElement, 90 | title: 'Feature 1', 91 | description: "Feature 1 Description", 92 | dismissable: true 93 | }, 94 | { 95 | view: this.feat2.nativeElement, 96 | title: 'Feature 2', 97 | description: 'Feature 2 Description', 98 | outerCircleColor: 'orange', 99 | rippleColor: 'black' 100 | } 101 | ]; 102 | 103 | const handlers: TourEvents = { 104 | finish() { 105 | console.log('Tour finished'); 106 | }, 107 | onStep(lastStopIndex) { 108 | console.log('User stepped', lastStopIndex); 109 | }, 110 | onCancel(lastStopIndex) { 111 | console.log('User cancelled', lastStopIndex); 112 | } 113 | } 114 | 115 | this.tour = new AppTour(stops, handlers); 116 | this.tour.show(); 117 | } 118 | ``` 119 | 120 | ### Vue 121 | While for Angular the {N} view representations of a referenced ViewChild is in the `.nativeElement` property, the naming in {N}-vue is a little confusing, since the {N} view of a referenced child is in `.nativeView`. Meaning that: 122 | - `this.$ref.feat1` return the vue view of the child object 123 | - `this.$ref.feat1.nativeView` returns the {N} view, **which we need to pass as a `stop.view`** 124 | - (`this.$ref.feat1.nativeView.nativeView` returns the _actual_ native view) 125 | ```html 126 | 127 | 128 | 129 | ``` 130 | 131 | ``` 132 | startTour(){ 133 | 134 | const stops = [ 135 | { 136 | view: this.$ref.feat1.nativeView, 137 | title: 'Feature 1', 138 | description: "Feature 1 Description", 139 | dismissable: true 140 | }, 141 | { 142 | view: this.$ref.feat2.nativeView, 143 | title: 'Feature 2', 144 | description: 'Feature 2 Description', 145 | outerCircleColor: 'orange', 146 | rippleColor: 'black' 147 | } 148 | ]; 149 | 150 | const handlers = { 151 | finish() { 152 | console.log('Tour finished'); 153 | }, 154 | onStep(lastStopIndex) { 155 | console.log('User stepped', lastStopIndex); 156 | }, 157 | onCancel(lastStopIndex) { 158 | console.log('User cancelled', lastStopIndex); 159 | } 160 | } 161 | 162 | this.tour = new AppTour(stops, handlers); 163 | this.tour.show(); 164 | } 165 | ``` 166 | 167 | ### Special cases on Android (ActionBar, TabView) 168 | There are some special {N} UI Elements that cannot be accessed by simply using the {N} view of these objects, because it will result in an error `Cannot convert object to Landroid/view/View`. 169 | 170 | An example for that is `` and ``. To access these, one has to find the nativeView by searching the right child of a referenced objects parent: 171 | 172 | ``` 173 | const stops = [{ 174 | view: page.getViewById("actionItem").parent.nativeView.getChildAt(0).getChildAt(0), 175 | title: "Action Item", 176 | description: "Some Description" 177 | }] 178 | ``` 179 | This is similar for `` and `` and might also be for other special items. 180 | ## API 181 | 182 | ### TourStop 183 | |Param| Description | type | default | 184 | |---|---|---|---| 185 | | view (required) | nativescript view ref | View | none | 186 | | title | stop title | string | title | 187 | | titleTextSize| title Text Size | number| 25| 188 | | titleTextColor| title Text Color| string| white| 189 | | description| stop description | string| description| 190 | | descriptionTextSize| description Text Size| number| 20| 191 | | descriptionTextColor| description Text Color| string| white| 192 | | outerCircleOpacity| outer Circle background opacity| number| 0.96| 193 | | outerCircleColor| outer Circle background Color | string| black| 194 | | innerCircleColor| circle around target view background Color | string| white| 195 | | rippleColor (ios only)| target Circle ripple Color| string| white| 196 | | innerCircleRadius|circle around target view raduis| number| 50| 197 | | dismissable| can the tour canceled by taping outside of target view | boolean| false| 198 | 199 | ### AppTour 200 | |Method| Description | 201 | |---|---| 202 | |constructor | AppTour(stops) | 203 | |show() | start the tour| 204 | |reset()| reset the tour to play it again| 205 | 206 | ### Tour Events 207 | 208 | This plugin has 3 events, 209 | finish(): void => triggered once the tour finishes 210 | onStep(lastStepIndex): void => triggered once per step when target is tapped 211 | onCancel(lastStepIndex): void => triggered once when user dismisses the tour by tapping outside in a dismissable tour 212 | 213 | ## Defaults 214 | > Note: If you use the same configs (colors, sizes,..etc) in all stops customize the defaults instead using AppTour defaults property which is basicly a TourStop :+1: . 215 | 216 | ## Next 217 | - [x] add events. 218 | - [ ] add more options to TourStop. 219 | 220 | ## Contribute 221 | if you want to help improve the plugin you can consider it yours and make as PRs as you want :) 222 | 223 | ## Get Help 224 | Please, use [github issues](https://github.com/hamdiwanis/nativescript-app-tour/issues) strictly for [reporting bugs](CONTRIBUTING.md#reporting-bugs) or [requesting features](CONTRIBUTING.md#requesting-new-features). 225 | 226 | ## Contact 227 | Twitter: [hamdiwanis](https://twitter.com/hamdiwanis) \ 228 | Email: hamdiwanis@hotmail.com 229 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/app.gradle: -------------------------------------------------------------------------------- 1 | dependencies { 2 | configurations.all { 3 | exclude group: 'commons-logging', module: 'commons-logging' 4 | resolutionStrategy.eachDependency { DependencyResolveDetails details -> 5 | def requested = details.requested 6 | if (requested.group == 'com.android.support' && requested.name != 'multidex') { 7 | // com.android.support major version should match buildToolsVersion 8 | details.useVersion '28.+' 9 | } 10 | } 11 | } 12 | } 13 | 14 | project.ext { 15 | googlePlayServicesVersion = "16.+" 16 | supportVersion = "28.+" 17 | } 18 | 19 | android { 20 | defaultConfig { 21 | generatedDensities = [] 22 | applicationId = "org.nativescript.demo" 23 | multiDexEnabled = true 24 | } 25 | lintOptions { 26 | checkReleaseBuilds false 27 | } 28 | } 29 | def settingsGradlePath 30 | 31 | if(project.hasProperty("appResourcesPath")){ 32 | settingsGradlePath = "$project.appResourcesPath/Android/settings.gradle"; 33 | } else { 34 | settingsGradlePath = "$rootDir/../../app/App_Resources/Android/settings.gradle"; 35 | } 36 | 37 | 38 | def settingsGradleFile = new File(settingsGradlePath); 39 | 40 | if(settingsGradleFile.exists()) 41 | { 42 | apply from: settingsGradleFile; 43 | } 44 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 27 | 28 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-hdpi/customicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/customicon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-ldpi/customicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/customicon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-mdpi/customicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/customicon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/customicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/customicon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/customicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/customicon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/customicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/customicon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/values-v21/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3d5afe 4 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 11 | 14 | 15 | 16 | 19 | 20 | 23 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #F5F5F5 4 | #757575 5 | #33B5E5 6 | #272734 7 | -------------------------------------------------------------------------------- /demo/app/App_Resources/Android/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | 21 | 22 | 23 | 31 | 32 | 34 | 35 | 36 | 42 | 43 | 45 | 46 | -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/._customicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/._customicon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/._customicon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/._customicon@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/._customicon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/._customicon@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "29x29", 5 | "idiom" : "iphone", 6 | "filename" : "icon-29.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "29x29", 11 | "idiom" : "iphone", 12 | "filename" : "icon-29@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "icon-29@3x.png", 19 | "scale" : "3x" 20 | }, 21 | { 22 | "size" : "40x40", 23 | "idiom" : "iphone", 24 | "filename" : "icon-40@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "icon-40@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "57x57", 35 | "idiom" : "iphone", 36 | "filename" : "icon-57.png", 37 | "scale" : "1x" 38 | }, 39 | { 40 | "size" : "57x57", 41 | "idiom" : "iphone", 42 | "filename" : "icon-57@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "icon-60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "icon-60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "29x29", 59 | "idiom" : "ipad", 60 | "filename" : "icon-29.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "icon-29@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "40x40", 71 | "idiom" : "ipad", 72 | "filename" : "icon-40.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "icon-40@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "50x50", 83 | "idiom" : "ipad", 84 | "filename" : "icon-50.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "50x50", 89 | "idiom" : "ipad", 90 | "filename" : "icon-50@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "72x72", 95 | "idiom" : "ipad", 96 | "filename" : "icon-72.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "72x72", 101 | "idiom" : "ipad", 102 | "filename" : "icon-72@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "76x76", 107 | "idiom" : "ipad", 108 | "filename" : "icon-76.png", 109 | "scale" : "1x" 110 | }, 111 | { 112 | "size" : "76x76", 113 | "idiom" : "ipad", 114 | "filename" : "icon-76@2x.png", 115 | "scale" : "2x" 116 | }, 117 | { 118 | "size" : "83.5x83.5", 119 | "idiom" : "ipad", 120 | "filename" : "icon-83.5@2x.png", 121 | "scale" : "2x" 122 | } 123 | ], 124 | "info" : { 125 | "version" : 1, 126 | "author" : "xcode" 127 | } 128 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-50.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-57.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "extent" : "full-screen", 5 | "idiom" : "iphone", 6 | "subtype" : "736h", 7 | "filename" : "Default-736h@3x.png", 8 | "minimum-system-version" : "8.0", 9 | "orientation" : "portrait", 10 | "scale" : "3x" 11 | }, 12 | { 13 | "extent" : "full-screen", 14 | "idiom" : "iphone", 15 | "subtype" : "736h", 16 | "filename" : "Default-Landscape@3x.png", 17 | "minimum-system-version" : "8.0", 18 | "orientation" : "landscape", 19 | "scale" : "3x" 20 | }, 21 | { 22 | "extent" : "full-screen", 23 | "idiom" : "iphone", 24 | "subtype" : "667h", 25 | "filename" : "Default-667h@2x.png", 26 | "minimum-system-version" : "8.0", 27 | "orientation" : "portrait", 28 | "scale" : "2x" 29 | }, 30 | { 31 | "orientation" : "portrait", 32 | "idiom" : "iphone", 33 | "filename" : "Default@2x.png", 34 | "extent" : "full-screen", 35 | "minimum-system-version" : "7.0", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "extent" : "full-screen", 40 | "idiom" : "iphone", 41 | "subtype" : "retina4", 42 | "filename" : "Default-568h@2x.png", 43 | "minimum-system-version" : "7.0", 44 | "orientation" : "portrait", 45 | "scale" : "2x" 46 | }, 47 | { 48 | "orientation" : "portrait", 49 | "idiom" : "ipad", 50 | "filename" : "Default-Portrait.png", 51 | "extent" : "full-screen", 52 | "minimum-system-version" : "7.0", 53 | "scale" : "1x" 54 | }, 55 | { 56 | "orientation" : "landscape", 57 | "idiom" : "ipad", 58 | "filename" : "Default-Landscape.png", 59 | "extent" : "full-screen", 60 | "minimum-system-version" : "7.0", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "orientation" : "portrait", 65 | "idiom" : "ipad", 66 | "filename" : "Default-Portrait@2x.png", 67 | "extent" : "full-screen", 68 | "minimum-system-version" : "7.0", 69 | "scale" : "2x" 70 | }, 71 | { 72 | "orientation" : "landscape", 73 | "idiom" : "ipad", 74 | "filename" : "Default-Landscape@2x.png", 75 | "extent" : "full-screen", 76 | "minimum-system-version" : "7.0", 77 | "scale" : "2x" 78 | }, 79 | { 80 | "orientation" : "portrait", 81 | "idiom" : "iphone", 82 | "filename" : "Default.png", 83 | "extent" : "full-screen", 84 | "scale" : "1x" 85 | }, 86 | { 87 | "orientation" : "portrait", 88 | "idiom" : "iphone", 89 | "filename" : "Default@2x.png", 90 | "extent" : "full-screen", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "orientation" : "portrait", 95 | "idiom" : "iphone", 96 | "filename" : "Default-568h@2x.png", 97 | "extent" : "full-screen", 98 | "subtype" : "retina4", 99 | "scale" : "2x" 100 | }, 101 | { 102 | "orientation" : "portrait", 103 | "idiom" : "ipad", 104 | "extent" : "to-status-bar", 105 | "scale" : "1x" 106 | }, 107 | { 108 | "orientation" : "portrait", 109 | "idiom" : "ipad", 110 | "filename" : "Default-Portrait.png", 111 | "extent" : "full-screen", 112 | "scale" : "1x" 113 | }, 114 | { 115 | "orientation" : "landscape", 116 | "idiom" : "ipad", 117 | "extent" : "to-status-bar", 118 | "scale" : "1x" 119 | }, 120 | { 121 | "orientation" : "landscape", 122 | "idiom" : "ipad", 123 | "filename" : "Default-Landscape.png", 124 | "extent" : "full-screen", 125 | "scale" : "1x" 126 | }, 127 | { 128 | "orientation" : "portrait", 129 | "idiom" : "ipad", 130 | "extent" : "to-status-bar", 131 | "scale" : "2x" 132 | }, 133 | { 134 | "orientation" : "portrait", 135 | "idiom" : "ipad", 136 | "filename" : "Default-Portrait@2x.png", 137 | "extent" : "full-screen", 138 | "scale" : "2x" 139 | }, 140 | { 141 | "orientation" : "landscape", 142 | "idiom" : "ipad", 143 | "extent" : "to-status-bar", 144 | "scale" : "2x" 145 | }, 146 | { 147 | "orientation" : "landscape", 148 | "idiom" : "ipad", 149 | "filename" : "Default-Landscape@2x.png", 150 | "extent" : "full-screen", 151 | "scale" : "2x" 152 | } 153 | ], 154 | "info" : { 155 | "version" : 1, 156 | "author" : "xcode" 157 | } 158 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-568h@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-667h@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-736h@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Landscape@3x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default-Portrait@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchImage.launchimage/Default@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-AspectFill.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-AspectFill@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchScreen-Center.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchScreen-Center@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiresFullScreen 28 | 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/build.xcconfig: -------------------------------------------------------------------------------- 1 | // You can add custom settings here 2 | // for example you can uncomment the following line to force distribution code signing 3 | // CODE_SIGN_IDENTITY = iPhone Distribution 4 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 5 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 6 | -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/customicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/customicon.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/customicon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/customicon@2x.png -------------------------------------------------------------------------------- /demo/app/App_Resources/iOS/customicon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamdiwanis/nativescript-app-tour/a813229a15a1d0858eb33e60c513380604029d17/demo/app/App_Resources/iOS/customicon@3x.png -------------------------------------------------------------------------------- /demo/app/app.css: -------------------------------------------------------------------------------- 1 | @import '~nativescript-theme-core/css/core.light.css'; 2 | -------------------------------------------------------------------------------- /demo/app/app.ts: -------------------------------------------------------------------------------- 1 | import * as application from 'tns-core-modules/application'; 2 | 3 | application.run({ moduleName: "main-page" }); 4 | -------------------------------------------------------------------------------- /demo/app/main-page.ts: -------------------------------------------------------------------------------- 1 | import * as observable from 'tns-core-modules/data/observable'; 2 | import * as pages from 'tns-core-modules/ui/page'; 3 | import { MainViewModel } from './main-view-model'; 4 | 5 | // Event handler for Page 'loaded' event attached in main-page.xml 6 | export function pageLoaded(args: observable.EventData) { 7 | let page = args.object; 8 | page.bindingContext = new MainViewModel(page); 9 | } 10 | -------------------------------------------------------------------------------- /demo/app/main-page.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /demo/app/main-view-model.ts: -------------------------------------------------------------------------------- 1 | import { Observable } from 'tns-core-modules/data/observable'; 2 | import { AppTour, TourStop, TourEvents } from 'nativescript-app-tour'; 3 | import { Page } from 'tns-core-modules/ui/page'; 4 | 5 | export class MainViewModel extends Observable { 6 | tour; 7 | constructor(private page: Page) { 8 | super(); 9 | } 10 | 11 | startTour() { 12 | if(!this.tour) { 13 | const stops: TourStop[] = [ 14 | { 15 | view: this.page.getViewById("feat1"), 16 | title: 'Feature 1', 17 | description: "Feature 1 Description", 18 | dismissable: false, 19 | outerCircleOpacity: 0.1 20 | }, 21 | { 22 | view: this.page.getViewById("feat2"), 23 | title: 'Feature 2', 24 | description: 'Feature 2 Description', 25 | outerCircleColor: 'orange', 26 | rippleColor: 'black', 27 | dismissable: false, 28 | }, 29 | { 30 | view: this.page.getViewById("feat3"), 31 | title: 'Feature 3', 32 | description: 'Feature 3 Description', 33 | outerCircleColor: 'red', 34 | rippleColor: 'black', 35 | dismissable: false, 36 | }, 37 | { 38 | view: this.page.getViewById("feat4"), 39 | title: 'Feature 4', 40 | description: 'Feature 4 Description', 41 | outerCircleColor: 'gold', 42 | rippleColor: 'black', 43 | dismissable: false, 44 | }, 45 | { 46 | view: this.page.getViewById("feat5"), 47 | title: 'Feature 5', 48 | description: 'Feature 5 Description', 49 | outerCircleColor: 'blue', 50 | rippleColor: 'black', 51 | dismissable: false, 52 | } 53 | ]; 54 | const handlers: TourEvents = { 55 | finish() { 56 | console.log('Tour finished'); 57 | }, 58 | onStep(lastStop) { 59 | console.log('User stepped', lastStop); 60 | }, 61 | onCancel(lastStop) { 62 | console.log('User cancelled', lastStop); 63 | } 64 | } 65 | this.tour = new AppTour(stops, handlers); 66 | } 67 | 68 | this.tour.reset(); 69 | this.tour.show(); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /demo/app/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tns-template-hello-world-ts", 3 | "main": "app.js", 4 | "version": "1.6.0", 5 | "author": { 6 | "name": "Telerik", 7 | "email": "support@telerik.com" 8 | }, 9 | "description": "Nativescript hello-world-ts project template", 10 | "license": "Apache-2.0", 11 | "keywords": [ 12 | "telerik", 13 | "mobile", 14 | "nativescript", 15 | "{N}", 16 | "tns", 17 | "appbuilder", 18 | "template" 19 | ], 20 | "repository": { 21 | "type": "git", 22 | "url": "git+ssh://git@github.com/NativeScript/template-hello-world-ts.git" 23 | }, 24 | "bugs": { 25 | "url": "https://github.com/NativeScript/template-hello-world-ts/issues" 26 | }, 27 | "homepage": "https://github.com/NativeScript/template-hello-world-ts", 28 | "android": { 29 | "v8Flags": "--expose_gc" 30 | }, 31 | "devDependencies": { 32 | "nativescript-dev-typescript": "^0.3.0" 33 | }, 34 | "_id": "tns-template-hello-world-ts@1.6.0", 35 | "_shasum": "a567c2b9a56024818c06596dab9629d155c5b8a8", 36 | "_resolved": "https://registry.npmjs.org/tns-template-hello-world-ts/-/tns-template-hello-world-ts-1.6.0.tgz", 37 | "_from": "tns-template-hello-world-ts@latest", 38 | "scripts": { 39 | "build.plugin": "cd ../src && npm run build", 40 | "ci.tslint": "npm i && tslint --config '../tslint.json' 'app/**/*.ts' --exclude '**/node_modules/**'" 41 | }, 42 | "_npmVersion": "2.14.7", 43 | "_nodeVersion": "4.2.2", 44 | "_npmUser": { 45 | "name": "enchev", 46 | "email": "vladimir.enchev@gmail.com" 47 | }, 48 | "dist": { 49 | "shasum": "a567c2b9a56024818c06596dab9629d155c5b8a8", 50 | "tarball": "http://registry.npmjs.org/tns-template-hello-world-ts/-/tns-template-hello-world-ts-1.6.0.tgz" 51 | }, 52 | "maintainers": [ 53 | { 54 | "name": "enchev", 55 | "email": "vladimir.enchev@gmail.com" 56 | }, 57 | { 58 | "name": "erjangavalji", 59 | "email": "erjan.gavalji@gmail.com" 60 | }, 61 | { 62 | "name": "fatme", 63 | "email": "hfatme@gmail.com" 64 | }, 65 | { 66 | "name": "hdeshev", 67 | "email": "hristo@deshev.com" 68 | }, 69 | { 70 | "name": "kerezov", 71 | "email": "d.kerezov@gmail.com" 72 | }, 73 | { 74 | "name": "ligaz", 75 | "email": "stefan.dobrev@gmail.com" 76 | }, 77 | { 78 | "name": "nsndeck", 79 | "email": "nedyalko.nikolov@telerik.com" 80 | }, 81 | { 82 | "name": "rosen-vladimirov", 83 | "email": "rosen.vladimirov.91@gmail.com" 84 | }, 85 | { 86 | "name": "sdobrev", 87 | "email": "stefan.dobrev@gmail.com" 88 | }, 89 | { 90 | "name": "tailsu", 91 | "email": "tailsu@gmail.com" 92 | }, 93 | { 94 | "name": "teobugslayer", 95 | "email": "teobugslayer@gmail.com" 96 | }, 97 | { 98 | "name": "valio.stoychev", 99 | "email": "valio.stoychev@gmail.com" 100 | } 101 | ], 102 | "_npmOperationalInternal": { 103 | "host": "packages-5-east.internal.npmjs.com", 104 | "tmp": "tmp/tns-template-hello-world-ts-1.6.0.tgz_1455717516189_0.6427943941671401" 105 | }, 106 | "directories": {}, 107 | "readme": "ERROR: No README data found!" 108 | } 109 | -------------------------------------------------------------------------------- /demo/app/vendor-platform.android.ts: -------------------------------------------------------------------------------- 1 | require("application"); 2 | if (!global["__snapshot"]) { 3 | // In case snapshot generation is enabled these modules will get into the bundle 4 | // but will not be required/evaluated. 5 | // The snapshot webpack plugin will add them to the tns-java-classes.js bundle file. 6 | // This way, they will be evaluated on app start as early as possible. 7 | require("ui/frame"); 8 | require("ui/frame/activity"); 9 | } 10 | -------------------------------------------------------------------------------- /demo/app/vendor-platform.ios.ts: -------------------------------------------------------------------------------- 1 | // There is a bug in angular: https://github.com/angular/angular-cli/pull/8589/files 2 | // Legendary stuff, its webpack plugin pretty much doesn't work with empty TypeScript files in v1.8.3 3 | void 0; 4 | -------------------------------------------------------------------------------- /demo/app/vendor.ts: -------------------------------------------------------------------------------- 1 | // Snapshot the ~/app.css and the theme 2 | const application = require("application"); 3 | require("ui/styling/style-scope"); 4 | const appCssContext = require.context("~/", false, /^\.\/app\.(css|scss|less|sass)$/); 5 | global.registerWebpackModules(appCssContext); 6 | application.loadAppCss(); 7 | 8 | require("./vendor-platform"); 9 | 10 | require("bundle-entry-points"); 11 | -------------------------------------------------------------------------------- /demo/nsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "useLegacyWorkflow": true 3 | } -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "nativescript": { 3 | "id": "org.nativescript.demo", 4 | "tns-ios": { 5 | "version": "5.3.1" 6 | }, 7 | "tns-android": { 8 | "version": "5.3.1" 9 | } 10 | }, 11 | "dependencies": { 12 | "nativescript-app-tour": "../src", 13 | "nativescript-theme-core": "^1.0.4", 14 | "nativescript-unit-test-runner": "^0.3.4", 15 | "tns-core-modules": "^5.3.2" 16 | }, 17 | "devDependencies": { 18 | "awesome-typescript-loader": "~3.1.3", 19 | "babel-traverse": "6.12.0", 20 | "babel-types": "6.11.1", 21 | "babylon": "6.8.4", 22 | "clean-webpack-plugin": "~0.1.19", 23 | "copy-webpack-plugin": "~4.0.1", 24 | "css-loader": "~0.28.7", 25 | "extract-text-webpack-plugin": "~3.0.0", 26 | "filewalker": "0.1.2", 27 | "jasmine-core": "^2.5.2", 28 | "karma": "^1.3.0", 29 | "karma-jasmine": "^1.0.2", 30 | "karma-nativescript-launcher": "^0.4.0", 31 | "lazy": "1.0.11", 32 | "nativescript-css-loader": "~0.26.0", 33 | "nativescript-dev-typescript": "^0.7.0", 34 | "nativescript-dev-webpack": "^0.10.0", 35 | "nativescript-worker-loader": "~0.8.1", 36 | "raw-loader": "~0.5.1", 37 | "resolve-url-loader": "~2.1.0", 38 | "tns-platform-declarations": "^5.4.1", 39 | "tslint": "~5.4.3", 40 | "typescript": "~2.3.0", 41 | "uglifyjs-webpack-plugin": "~1.1.6", 42 | "webpack": "~3.8.1", 43 | "webpack-bundle-analyzer": "^2.8.2", 44 | "webpack-sources": "~1.0.1" 45 | }, 46 | "scripts": { 47 | "build.plugin": "cd ../src && npm run build", 48 | "ci.tslint": "npm i && tslint --config '../tslint.json' 'app/**/*.ts' --exclude '**/node_modules/**'" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /demo/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "declaration": false, 6 | "removeComments": true, 7 | "noLib": false, 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "lib": [ 11 | "es6", 12 | "dom" 13 | ], 14 | "pretty": true, 15 | "allowUnreachableCode": false, 16 | "allowUnusedLabels": false, 17 | "noEmitHelpers": true, 18 | "noEmitOnError": false, 19 | "noImplicitAny": false, 20 | "noImplicitReturns": true, 21 | "noImplicitUseStrict": false, 22 | "noFallthroughCasesInSwitch": true, 23 | "baseUrl": ".", 24 | "paths": { 25 | "*": [ 26 | "./node_modules/*" 27 | ], 28 | "~/*": [ 29 | "app/*" 30 | ] 31 | } 32 | }, 33 | "exclude": [ 34 | "node_modules", 35 | "platforms" 36 | ], 37 | "compileOnSave": false 38 | } -------------------------------------------------------------------------------- /publish/pack.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SOURCE_DIR=../src; 4 | TO_SOURCE_DIR=src; 5 | PACK_DIR=package; 6 | ROOT_DIR=..; 7 | PUBLISH=--publish 8 | 9 | install(){ 10 | npm i 11 | } 12 | 13 | pack() { 14 | 15 | echo 'Clearing /src and /package...' 16 | node_modules/.bin/rimraf "$TO_SOURCE_DIR" 17 | node_modules/.bin/rimraf "$PACK_DIR" 18 | 19 | # copy src 20 | echo 'Copying src...' 21 | node_modules/.bin/ncp "$SOURCE_DIR" "$TO_SOURCE_DIR" 22 | 23 | # copy README & LICENSE to src 24 | echo 'Copying README and LICENSE to /src...' 25 | node_modules/.bin/ncp "$ROOT_DIR"/LICENSE "$TO_SOURCE_DIR"/LICENSE 26 | node_modules/.bin/ncp "$ROOT_DIR"/README.md "$TO_SOURCE_DIR"/README.md 27 | 28 | # compile package and copy files required by npm 29 | echo 'Building /src...' 30 | cd "$TO_SOURCE_DIR" 31 | node_modules/.bin/tsc 32 | cd .. 33 | 34 | echo 'Creating package...' 35 | # create package dir 36 | mkdir "$PACK_DIR" 37 | 38 | # create the package 39 | cd "$PACK_DIR" 40 | npm pack ../"$TO_SOURCE_DIR" 41 | 42 | # delete source directory used to create the package 43 | cd .. 44 | node_modules/.bin/rimraf "$TO_SOURCE_DIR" 45 | } 46 | 47 | install && pack -------------------------------------------------------------------------------- /publish/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nativescript-publish", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "balanced-match": { 8 | "version": "1.0.0", 9 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 10 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 11 | "dev": true 12 | }, 13 | "brace-expansion": { 14 | "version": "1.1.11", 15 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 16 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 17 | "dev": true, 18 | "requires": { 19 | "balanced-match": "^1.0.0", 20 | "concat-map": "0.0.1" 21 | } 22 | }, 23 | "concat-map": { 24 | "version": "0.0.1", 25 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 26 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 27 | "dev": true 28 | }, 29 | "fs.realpath": { 30 | "version": "1.0.0", 31 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 32 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 33 | "dev": true 34 | }, 35 | "glob": { 36 | "version": "7.1.2", 37 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 38 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 39 | "dev": true, 40 | "requires": { 41 | "fs.realpath": "^1.0.0", 42 | "inflight": "^1.0.4", 43 | "inherits": "2", 44 | "minimatch": "^3.0.4", 45 | "once": "^1.3.0", 46 | "path-is-absolute": "^1.0.0" 47 | } 48 | }, 49 | "inflight": { 50 | "version": "1.0.6", 51 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 52 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 53 | "dev": true, 54 | "requires": { 55 | "once": "^1.3.0", 56 | "wrappy": "1" 57 | } 58 | }, 59 | "inherits": { 60 | "version": "2.0.3", 61 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 62 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 63 | "dev": true 64 | }, 65 | "minimatch": { 66 | "version": "3.0.4", 67 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 68 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 69 | "dev": true, 70 | "requires": { 71 | "brace-expansion": "^1.1.7" 72 | } 73 | }, 74 | "ncp": { 75 | "version": "2.0.0", 76 | "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", 77 | "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", 78 | "dev": true 79 | }, 80 | "npm": { 81 | "version": "4.6.1", 82 | "resolved": "https://registry.npmjs.org/npm/-/npm-4.6.1.tgz", 83 | "integrity": "sha1-+Osa0A3FilUUNjtBylNCgX8L1kY=", 84 | "requires": { 85 | "JSONStream": "~1.3.1", 86 | "abbrev": "~1.1.0", 87 | "ansi-regex": "~2.1.1", 88 | "ansicolors": "~0.3.2", 89 | "ansistyles": "~0.1.3", 90 | "aproba": "~1.1.1", 91 | "archy": "~1.0.0", 92 | "asap": "~2.0.5", 93 | "bluebird": "~3.5.0", 94 | "call-limit": "~1.1.0", 95 | "chownr": "~1.0.1", 96 | "cmd-shim": "~2.0.2", 97 | "columnify": "~1.5.4", 98 | "config-chain": "~1.1.11", 99 | "debuglog": "*", 100 | "dezalgo": "~1.0.3", 101 | "editor": "~1.0.0", 102 | "fs-vacuum": "~1.2.10", 103 | "fs-write-stream-atomic": "~1.0.10", 104 | "fstream": "~1.0.11", 105 | "fstream-npm": "~1.2.0", 106 | "glob": "~7.1.1", 107 | "graceful-fs": "~4.1.11", 108 | "has-unicode": "~2.0.1", 109 | "hosted-git-info": "~2.4.2", 110 | "iferr": "~0.1.5", 111 | "imurmurhash": "*", 112 | "inflight": "~1.0.6", 113 | "inherits": "~2.0.3", 114 | "ini": "~1.3.4", 115 | "init-package-json": "~1.10.1", 116 | "lazy-property": "~1.0.0", 117 | "lockfile": "~1.0.3", 118 | "lodash._baseindexof": "*", 119 | "lodash._baseuniq": "~4.6.0", 120 | "lodash._bindcallback": "*", 121 | "lodash._cacheindexof": "*", 122 | "lodash._createcache": "*", 123 | "lodash._getnative": "*", 124 | "lodash.clonedeep": "~4.5.0", 125 | "lodash.restparam": "*", 126 | "lodash.union": "~4.6.0", 127 | "lodash.uniq": "~4.5.0", 128 | "lodash.without": "~4.4.0", 129 | "mississippi": "~1.3.0", 130 | "mkdirp": "~0.5.1", 131 | "move-concurrently": "~1.0.1", 132 | "node-gyp": "~3.6.0", 133 | "nopt": "~4.0.1", 134 | "normalize-git-url": "~3.0.2", 135 | "normalize-package-data": "~2.3.8", 136 | "npm-cache-filename": "~1.0.2", 137 | "npm-install-checks": "~3.0.0", 138 | "npm-package-arg": "~4.2.1", 139 | "npm-registry-client": "~8.1.1", 140 | "npm-user-validate": "~0.1.5", 141 | "npmlog": "~4.0.2", 142 | "once": "~1.4.0", 143 | "opener": "~1.4.3", 144 | "osenv": "~0.1.4", 145 | "path-is-inside": "~1.0.2", 146 | "read": "~1.0.7", 147 | "read-cmd-shim": "~1.0.1", 148 | "read-installed": "~4.0.3", 149 | "read-package-json": "~2.0.5", 150 | "read-package-tree": "~5.1.5", 151 | "readable-stream": "~2.2.9", 152 | "readdir-scoped-modules": "*", 153 | "realize-package-specifier": "~3.0.3", 154 | "request": "~2.81.0", 155 | "retry": "~0.10.1", 156 | "rimraf": "~2.6.1", 157 | "semver": "~5.3.0", 158 | "sha": "~2.0.1", 159 | "slide": "~1.1.6", 160 | "sorted-object": "~2.0.1", 161 | "sorted-union-stream": "~2.1.3", 162 | "strip-ansi": "~3.0.1", 163 | "tar": "~2.2.1", 164 | "text-table": "~0.2.0", 165 | "uid-number": "0.0.6", 166 | "umask": "~1.1.0", 167 | "unique-filename": "~1.1.0", 168 | "unpipe": "~1.0.0", 169 | "update-notifier": "~2.1.0", 170 | "uuid": "~3.0.1", 171 | "validate-npm-package-license": "*", 172 | "validate-npm-package-name": "~3.0.0", 173 | "which": "~1.2.14", 174 | "wrappy": "~1.0.2", 175 | "write-file-atomic": "~1.3.3" 176 | }, 177 | "dependencies": { 178 | "JSONStream": { 179 | "version": "1.3.1", 180 | "bundled": true, 181 | "requires": { 182 | "jsonparse": "^1.2.0", 183 | "through": ">=2.2.7 <3" 184 | }, 185 | "dependencies": { 186 | "jsonparse": { 187 | "version": "1.3.0", 188 | "bundled": true 189 | }, 190 | "through": { 191 | "version": "2.3.8", 192 | "bundled": true 193 | } 194 | } 195 | }, 196 | "abbrev": { 197 | "version": "1.1.0", 198 | "bundled": true 199 | }, 200 | "ansi-regex": { 201 | "version": "2.1.1", 202 | "bundled": true 203 | }, 204 | "ansicolors": { 205 | "version": "0.3.2", 206 | "bundled": true 207 | }, 208 | "ansistyles": { 209 | "version": "0.1.3", 210 | "bundled": true 211 | }, 212 | "aproba": { 213 | "version": "1.1.1", 214 | "bundled": true 215 | }, 216 | "archy": { 217 | "version": "1.0.0", 218 | "bundled": true 219 | }, 220 | "asap": { 221 | "version": "2.0.5", 222 | "bundled": true 223 | }, 224 | "bluebird": { 225 | "version": "3.5.0", 226 | "bundled": true 227 | }, 228 | "call-limit": { 229 | "version": "1.1.0", 230 | "bundled": true 231 | }, 232 | "chownr": { 233 | "version": "1.0.1", 234 | "bundled": true 235 | }, 236 | "cmd-shim": { 237 | "version": "2.0.2", 238 | "bundled": true, 239 | "requires": { 240 | "graceful-fs": "^4.1.2", 241 | "mkdirp": "~0.5.0" 242 | } 243 | }, 244 | "columnify": { 245 | "version": "1.5.4", 246 | "bundled": true, 247 | "requires": { 248 | "strip-ansi": "^3.0.0", 249 | "wcwidth": "^1.0.0" 250 | }, 251 | "dependencies": { 252 | "wcwidth": { 253 | "version": "1.0.0", 254 | "bundled": true, 255 | "requires": { 256 | "defaults": "^1.0.0" 257 | }, 258 | "dependencies": { 259 | "defaults": { 260 | "version": "1.0.3", 261 | "bundled": true, 262 | "requires": { 263 | "clone": "^1.0.2" 264 | }, 265 | "dependencies": { 266 | "clone": { 267 | "version": "1.0.2", 268 | "bundled": true 269 | } 270 | } 271 | } 272 | } 273 | } 274 | } 275 | }, 276 | "config-chain": { 277 | "version": "1.1.11", 278 | "bundled": true, 279 | "requires": { 280 | "ini": "^1.3.4", 281 | "proto-list": "~1.2.1" 282 | }, 283 | "dependencies": { 284 | "proto-list": { 285 | "version": "1.2.4", 286 | "bundled": true 287 | } 288 | } 289 | }, 290 | "debuglog": { 291 | "version": "1.0.1", 292 | "bundled": true 293 | }, 294 | "dezalgo": { 295 | "version": "1.0.3", 296 | "bundled": true, 297 | "requires": { 298 | "asap": "^2.0.0", 299 | "wrappy": "1" 300 | } 301 | }, 302 | "editor": { 303 | "version": "1.0.0", 304 | "bundled": true 305 | }, 306 | "fs-vacuum": { 307 | "version": "1.2.10", 308 | "bundled": true, 309 | "requires": { 310 | "graceful-fs": "^4.1.2", 311 | "path-is-inside": "^1.0.1", 312 | "rimraf": "^2.5.2" 313 | } 314 | }, 315 | "fs-write-stream-atomic": { 316 | "version": "1.0.10", 317 | "bundled": true, 318 | "requires": { 319 | "graceful-fs": "^4.1.2", 320 | "iferr": "^0.1.5", 321 | "imurmurhash": "^0.1.4", 322 | "readable-stream": "1 || 2" 323 | } 324 | }, 325 | "fstream": { 326 | "version": "1.0.11", 327 | "bundled": true, 328 | "requires": { 329 | "graceful-fs": "^4.1.2", 330 | "inherits": "~2.0.0", 331 | "mkdirp": ">=0.5 0", 332 | "rimraf": "2" 333 | } 334 | }, 335 | "fstream-npm": { 336 | "version": "1.2.0", 337 | "bundled": true, 338 | "requires": { 339 | "fstream-ignore": "^1.0.0", 340 | "inherits": "2" 341 | }, 342 | "dependencies": { 343 | "fstream-ignore": { 344 | "version": "1.0.5", 345 | "bundled": true, 346 | "requires": { 347 | "fstream": "^1.0.0", 348 | "inherits": "2", 349 | "minimatch": "^3.0.0" 350 | }, 351 | "dependencies": { 352 | "minimatch": { 353 | "version": "3.0.3", 354 | "bundled": true, 355 | "requires": { 356 | "brace-expansion": "^1.0.0" 357 | }, 358 | "dependencies": { 359 | "brace-expansion": { 360 | "version": "1.1.6", 361 | "bundled": true, 362 | "requires": { 363 | "balanced-match": "^0.4.1", 364 | "concat-map": "0.0.1" 365 | }, 366 | "dependencies": { 367 | "balanced-match": { 368 | "version": "0.4.2", 369 | "bundled": true 370 | }, 371 | "concat-map": { 372 | "version": "0.0.1", 373 | "bundled": true 374 | } 375 | } 376 | } 377 | } 378 | } 379 | } 380 | } 381 | } 382 | }, 383 | "glob": { 384 | "version": "7.1.1", 385 | "bundled": true, 386 | "requires": { 387 | "fs.realpath": "^1.0.0", 388 | "inflight": "^1.0.4", 389 | "inherits": "2", 390 | "minimatch": "^3.0.2", 391 | "once": "^1.3.0", 392 | "path-is-absolute": "^1.0.0" 393 | }, 394 | "dependencies": { 395 | "fs.realpath": { 396 | "version": "1.0.0", 397 | "bundled": true 398 | }, 399 | "minimatch": { 400 | "version": "3.0.3", 401 | "bundled": true, 402 | "requires": { 403 | "brace-expansion": "^1.0.0" 404 | }, 405 | "dependencies": { 406 | "brace-expansion": { 407 | "version": "1.1.6", 408 | "bundled": true, 409 | "requires": { 410 | "balanced-match": "^0.4.1", 411 | "concat-map": "0.0.1" 412 | }, 413 | "dependencies": { 414 | "balanced-match": { 415 | "version": "0.4.2", 416 | "bundled": true 417 | }, 418 | "concat-map": { 419 | "version": "0.0.1", 420 | "bundled": true 421 | } 422 | } 423 | } 424 | } 425 | }, 426 | "path-is-absolute": { 427 | "version": "1.0.1", 428 | "bundled": true 429 | } 430 | } 431 | }, 432 | "graceful-fs": { 433 | "version": "4.1.11", 434 | "bundled": true 435 | }, 436 | "has-unicode": { 437 | "version": "2.0.1", 438 | "bundled": true 439 | }, 440 | "hosted-git-info": { 441 | "version": "2.4.2", 442 | "bundled": true 443 | }, 444 | "iferr": { 445 | "version": "0.1.5", 446 | "bundled": true 447 | }, 448 | "imurmurhash": { 449 | "version": "0.1.4", 450 | "bundled": true 451 | }, 452 | "inflight": { 453 | "version": "1.0.6", 454 | "bundled": true, 455 | "requires": { 456 | "once": "^1.3.0", 457 | "wrappy": "1" 458 | } 459 | }, 460 | "inherits": { 461 | "version": "2.0.3", 462 | "bundled": true 463 | }, 464 | "ini": { 465 | "version": "1.3.4", 466 | "bundled": true 467 | }, 468 | "init-package-json": { 469 | "version": "1.10.1", 470 | "bundled": true, 471 | "requires": { 472 | "glob": "^7.1.1", 473 | "npm-package-arg": "^4.0.0 || ^5.0.0", 474 | "promzard": "^0.3.0", 475 | "read": "~1.0.1", 476 | "read-package-json": "1 || 2", 477 | "semver": "2.x || 3.x || 4 || 5", 478 | "validate-npm-package-license": "^3.0.1", 479 | "validate-npm-package-name": "^3.0.0" 480 | }, 481 | "dependencies": { 482 | "promzard": { 483 | "version": "0.3.0", 484 | "bundled": true, 485 | "requires": { 486 | "read": "1" 487 | } 488 | } 489 | } 490 | }, 491 | "lazy-property": { 492 | "version": "1.0.0", 493 | "bundled": true 494 | }, 495 | "lockfile": { 496 | "version": "1.0.3", 497 | "bundled": true 498 | }, 499 | "lodash._baseindexof": { 500 | "version": "3.1.0", 501 | "bundled": true 502 | }, 503 | "lodash._baseuniq": { 504 | "version": "4.6.0", 505 | "bundled": true, 506 | "requires": { 507 | "lodash._createset": "~4.0.0", 508 | "lodash._root": "~3.0.0" 509 | }, 510 | "dependencies": { 511 | "lodash._createset": { 512 | "version": "4.0.3", 513 | "bundled": true 514 | }, 515 | "lodash._root": { 516 | "version": "3.0.1", 517 | "bundled": true 518 | } 519 | } 520 | }, 521 | "lodash._bindcallback": { 522 | "version": "3.0.1", 523 | "bundled": true 524 | }, 525 | "lodash._cacheindexof": { 526 | "version": "3.0.2", 527 | "bundled": true 528 | }, 529 | "lodash._createcache": { 530 | "version": "3.1.2", 531 | "bundled": true, 532 | "requires": { 533 | "lodash._getnative": "^3.0.0" 534 | } 535 | }, 536 | "lodash._getnative": { 537 | "version": "3.9.1", 538 | "bundled": true 539 | }, 540 | "lodash.clonedeep": { 541 | "version": "4.5.0", 542 | "bundled": true 543 | }, 544 | "lodash.restparam": { 545 | "version": "3.6.1", 546 | "bundled": true 547 | }, 548 | "lodash.union": { 549 | "version": "4.6.0", 550 | "bundled": true 551 | }, 552 | "lodash.uniq": { 553 | "version": "4.5.0", 554 | "bundled": true 555 | }, 556 | "lodash.without": { 557 | "version": "4.4.0", 558 | "bundled": true 559 | }, 560 | "mississippi": { 561 | "version": "1.3.0", 562 | "bundled": true, 563 | "requires": { 564 | "concat-stream": "^1.5.0", 565 | "duplexify": "^3.4.2", 566 | "end-of-stream": "^1.1.0", 567 | "flush-write-stream": "^1.0.0", 568 | "from2": "^2.1.0", 569 | "parallel-transform": "^1.1.0", 570 | "pump": "^1.0.0", 571 | "pumpify": "^1.3.3", 572 | "stream-each": "^1.1.0", 573 | "through2": "^2.0.0" 574 | }, 575 | "dependencies": { 576 | "concat-stream": { 577 | "version": "1.6.0", 578 | "bundled": true, 579 | "requires": { 580 | "inherits": "^2.0.3", 581 | "readable-stream": "^2.2.2", 582 | "typedarray": "^0.0.6" 583 | }, 584 | "dependencies": { 585 | "typedarray": { 586 | "version": "0.0.6", 587 | "bundled": true 588 | } 589 | } 590 | }, 591 | "duplexify": { 592 | "version": "3.5.0", 593 | "bundled": true, 594 | "requires": { 595 | "end-of-stream": "1.0.0", 596 | "inherits": "^2.0.1", 597 | "readable-stream": "^2.0.0", 598 | "stream-shift": "^1.0.0" 599 | }, 600 | "dependencies": { 601 | "end-of-stream": { 602 | "version": "1.0.0", 603 | "bundled": true, 604 | "requires": { 605 | "once": "~1.3.0" 606 | }, 607 | "dependencies": { 608 | "once": { 609 | "version": "1.3.3", 610 | "bundled": true, 611 | "requires": { 612 | "wrappy": "1" 613 | } 614 | } 615 | } 616 | }, 617 | "stream-shift": { 618 | "version": "1.0.0", 619 | "bundled": true 620 | } 621 | } 622 | }, 623 | "end-of-stream": { 624 | "version": "1.1.0", 625 | "bundled": true, 626 | "requires": { 627 | "once": "~1.3.0" 628 | }, 629 | "dependencies": { 630 | "once": { 631 | "version": "1.3.3", 632 | "bundled": true, 633 | "requires": { 634 | "wrappy": "1" 635 | } 636 | } 637 | } 638 | }, 639 | "flush-write-stream": { 640 | "version": "1.0.2", 641 | "bundled": true, 642 | "requires": { 643 | "inherits": "^2.0.1", 644 | "readable-stream": "^2.0.4" 645 | } 646 | }, 647 | "from2": { 648 | "version": "2.3.0", 649 | "bundled": true, 650 | "requires": { 651 | "inherits": "^2.0.1", 652 | "readable-stream": "^2.0.0" 653 | } 654 | }, 655 | "parallel-transform": { 656 | "version": "1.1.0", 657 | "bundled": true, 658 | "requires": { 659 | "cyclist": "~0.2.2", 660 | "inherits": "^2.0.3", 661 | "readable-stream": "^2.1.5" 662 | }, 663 | "dependencies": { 664 | "cyclist": { 665 | "version": "0.2.2", 666 | "bundled": true 667 | } 668 | } 669 | }, 670 | "pump": { 671 | "version": "1.0.2", 672 | "bundled": true, 673 | "requires": { 674 | "end-of-stream": "^1.1.0", 675 | "once": "^1.3.1" 676 | } 677 | }, 678 | "pumpify": { 679 | "version": "1.3.5", 680 | "bundled": true, 681 | "requires": { 682 | "duplexify": "^3.1.2", 683 | "inherits": "^2.0.1", 684 | "pump": "^1.0.0" 685 | } 686 | }, 687 | "stream-each": { 688 | "version": "1.2.0", 689 | "bundled": true, 690 | "requires": { 691 | "end-of-stream": "^1.1.0", 692 | "stream-shift": "^1.0.0" 693 | }, 694 | "dependencies": { 695 | "stream-shift": { 696 | "version": "1.0.0", 697 | "bundled": true 698 | } 699 | } 700 | }, 701 | "through2": { 702 | "version": "2.0.3", 703 | "bundled": true, 704 | "requires": { 705 | "readable-stream": "^2.1.5", 706 | "xtend": "~4.0.1" 707 | }, 708 | "dependencies": { 709 | "xtend": { 710 | "version": "4.0.1", 711 | "bundled": true 712 | } 713 | } 714 | } 715 | } 716 | }, 717 | "mkdirp": { 718 | "version": "0.5.1", 719 | "bundled": true, 720 | "requires": { 721 | "minimist": "0.0.8" 722 | }, 723 | "dependencies": { 724 | "minimist": { 725 | "version": "0.0.8", 726 | "bundled": true 727 | } 728 | } 729 | }, 730 | "move-concurrently": { 731 | "version": "1.0.1", 732 | "bundled": true, 733 | "requires": { 734 | "aproba": "^1.1.1", 735 | "copy-concurrently": "^1.0.0", 736 | "fs-write-stream-atomic": "^1.0.8", 737 | "mkdirp": "^0.5.1", 738 | "rimraf": "^2.5.4", 739 | "run-queue": "^1.0.3" 740 | }, 741 | "dependencies": { 742 | "copy-concurrently": { 743 | "version": "1.0.3", 744 | "bundled": true, 745 | "requires": { 746 | "aproba": "^1.1.1", 747 | "fs-write-stream-atomic": "^1.0.8", 748 | "iferr": "^0.1.5", 749 | "mkdirp": "^0.5.1", 750 | "rimraf": "^2.5.4", 751 | "run-queue": "^1.0.0" 752 | } 753 | }, 754 | "run-queue": { 755 | "version": "1.0.3", 756 | "bundled": true, 757 | "requires": { 758 | "aproba": "^1.1.1" 759 | } 760 | } 761 | } 762 | }, 763 | "node-gyp": { 764 | "version": "3.6.0", 765 | "bundled": true, 766 | "requires": { 767 | "fstream": "^1.0.0", 768 | "glob": "^7.0.3", 769 | "graceful-fs": "^4.1.2", 770 | "minimatch": "^3.0.2", 771 | "mkdirp": "^0.5.0", 772 | "nopt": "2 || 3", 773 | "npmlog": "0 || 1 || 2 || 3 || 4", 774 | "osenv": "0", 775 | "request": "2", 776 | "rimraf": "2", 777 | "semver": "~5.3.0", 778 | "tar": "^2.0.0", 779 | "which": "1" 780 | }, 781 | "dependencies": { 782 | "minimatch": { 783 | "version": "3.0.3", 784 | "bundled": true, 785 | "requires": { 786 | "brace-expansion": "^1.0.0" 787 | }, 788 | "dependencies": { 789 | "brace-expansion": { 790 | "version": "1.1.6", 791 | "bundled": true, 792 | "requires": { 793 | "balanced-match": "^0.4.1", 794 | "concat-map": "0.0.1" 795 | }, 796 | "dependencies": { 797 | "balanced-match": { 798 | "version": "0.4.2", 799 | "bundled": true 800 | }, 801 | "concat-map": { 802 | "version": "0.0.1", 803 | "bundled": true 804 | } 805 | } 806 | } 807 | } 808 | }, 809 | "nopt": { 810 | "version": "3.0.6", 811 | "bundled": true, 812 | "requires": { 813 | "abbrev": "1" 814 | } 815 | } 816 | } 817 | }, 818 | "nopt": { 819 | "version": "4.0.1", 820 | "bundled": true, 821 | "requires": { 822 | "abbrev": "1", 823 | "osenv": "^0.1.4" 824 | }, 825 | "dependencies": { 826 | "osenv": { 827 | "version": "0.1.4", 828 | "bundled": true, 829 | "requires": { 830 | "os-homedir": "^1.0.0", 831 | "os-tmpdir": "^1.0.0" 832 | }, 833 | "dependencies": { 834 | "os-homedir": { 835 | "version": "1.0.2", 836 | "bundled": true 837 | }, 838 | "os-tmpdir": { 839 | "version": "1.0.2", 840 | "bundled": true 841 | } 842 | } 843 | } 844 | } 845 | }, 846 | "normalize-git-url": { 847 | "version": "3.0.2", 848 | "bundled": true 849 | }, 850 | "normalize-package-data": { 851 | "version": "2.3.8", 852 | "bundled": true, 853 | "requires": { 854 | "hosted-git-info": "^2.1.4", 855 | "is-builtin-module": "^1.0.0", 856 | "semver": "2 || 3 || 4 || 5", 857 | "validate-npm-package-license": "^3.0.1" 858 | }, 859 | "dependencies": { 860 | "is-builtin-module": { 861 | "version": "1.0.0", 862 | "bundled": true, 863 | "requires": { 864 | "builtin-modules": "^1.0.0" 865 | }, 866 | "dependencies": { 867 | "builtin-modules": { 868 | "version": "1.1.1", 869 | "bundled": true 870 | } 871 | } 872 | } 873 | } 874 | }, 875 | "npm-cache-filename": { 876 | "version": "1.0.2", 877 | "bundled": true 878 | }, 879 | "npm-install-checks": { 880 | "version": "3.0.0", 881 | "bundled": true, 882 | "requires": { 883 | "semver": "^2.3.0 || 3.x || 4 || 5" 884 | } 885 | }, 886 | "npm-package-arg": { 887 | "version": "4.2.1", 888 | "bundled": true, 889 | "requires": { 890 | "hosted-git-info": "^2.1.5", 891 | "semver": "^5.1.0" 892 | } 893 | }, 894 | "npm-registry-client": { 895 | "version": "8.1.1", 896 | "bundled": true, 897 | "requires": { 898 | "concat-stream": "^1.5.2", 899 | "graceful-fs": "^4.1.6", 900 | "normalize-package-data": "~1.0.1 || ^2.0.0", 901 | "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0", 902 | "npmlog": "2 || ^3.1.0 || ^4.0.0", 903 | "once": "^1.3.3", 904 | "request": "^2.74.0", 905 | "retry": "^0.10.0", 906 | "semver": "2 >=2.2.1 || 3.x || 4 || 5", 907 | "slide": "^1.1.3" 908 | }, 909 | "dependencies": { 910 | "concat-stream": { 911 | "version": "1.6.0", 912 | "bundled": true, 913 | "requires": { 914 | "inherits": "^2.0.3", 915 | "readable-stream": "^2.2.2", 916 | "typedarray": "^0.0.6" 917 | }, 918 | "dependencies": { 919 | "typedarray": { 920 | "version": "0.0.6", 921 | "bundled": true 922 | } 923 | } 924 | } 925 | } 926 | }, 927 | "npm-user-validate": { 928 | "version": "0.1.5", 929 | "bundled": true 930 | }, 931 | "npmlog": { 932 | "version": "4.0.2", 933 | "bundled": true, 934 | "requires": { 935 | "are-we-there-yet": "~1.1.2", 936 | "console-control-strings": "~1.1.0", 937 | "gauge": "~2.7.1", 938 | "set-blocking": "~2.0.0" 939 | }, 940 | "dependencies": { 941 | "are-we-there-yet": { 942 | "version": "1.1.4", 943 | "bundled": true, 944 | "requires": { 945 | "delegates": "^1.0.0", 946 | "readable-stream": "^2.0.6" 947 | }, 948 | "dependencies": { 949 | "delegates": { 950 | "version": "1.0.0", 951 | "bundled": true 952 | } 953 | } 954 | }, 955 | "console-control-strings": { 956 | "version": "1.1.0", 957 | "bundled": true 958 | }, 959 | "gauge": { 960 | "version": "2.7.4", 961 | "bundled": true, 962 | "requires": { 963 | "aproba": "^1.0.3", 964 | "console-control-strings": "^1.0.0", 965 | "has-unicode": "^2.0.0", 966 | "object-assign": "^4.1.0", 967 | "signal-exit": "^3.0.0", 968 | "string-width": "^1.0.1", 969 | "strip-ansi": "^3.0.1", 970 | "wide-align": "^1.1.0" 971 | }, 972 | "dependencies": { 973 | "object-assign": { 974 | "version": "4.1.1", 975 | "bundled": true 976 | }, 977 | "signal-exit": { 978 | "version": "3.0.2", 979 | "bundled": true 980 | }, 981 | "string-width": { 982 | "version": "1.0.2", 983 | "bundled": true, 984 | "requires": { 985 | "code-point-at": "^1.0.0", 986 | "is-fullwidth-code-point": "^1.0.0", 987 | "strip-ansi": "^3.0.0" 988 | }, 989 | "dependencies": { 990 | "code-point-at": { 991 | "version": "1.1.0", 992 | "bundled": true 993 | }, 994 | "is-fullwidth-code-point": { 995 | "version": "1.0.0", 996 | "bundled": true, 997 | "requires": { 998 | "number-is-nan": "^1.0.0" 999 | }, 1000 | "dependencies": { 1001 | "number-is-nan": { 1002 | "version": "1.0.1", 1003 | "bundled": true 1004 | } 1005 | } 1006 | } 1007 | } 1008 | }, 1009 | "wide-align": { 1010 | "version": "1.1.0", 1011 | "bundled": true, 1012 | "requires": { 1013 | "string-width": "^1.0.1" 1014 | } 1015 | } 1016 | } 1017 | }, 1018 | "set-blocking": { 1019 | "version": "2.0.0", 1020 | "bundled": true 1021 | } 1022 | } 1023 | }, 1024 | "once": { 1025 | "version": "1.4.0", 1026 | "bundled": true, 1027 | "requires": { 1028 | "wrappy": "1" 1029 | } 1030 | }, 1031 | "opener": { 1032 | "version": "1.4.3", 1033 | "bundled": true 1034 | }, 1035 | "osenv": { 1036 | "version": "0.1.4", 1037 | "bundled": true, 1038 | "requires": { 1039 | "os-homedir": "^1.0.0", 1040 | "os-tmpdir": "^1.0.0" 1041 | }, 1042 | "dependencies": { 1043 | "os-homedir": { 1044 | "version": "1.0.2", 1045 | "bundled": true 1046 | }, 1047 | "os-tmpdir": { 1048 | "version": "1.0.2", 1049 | "bundled": true 1050 | } 1051 | } 1052 | }, 1053 | "path-is-inside": { 1054 | "version": "1.0.2", 1055 | "bundled": true 1056 | }, 1057 | "read": { 1058 | "version": "1.0.7", 1059 | "bundled": true, 1060 | "requires": { 1061 | "mute-stream": "~0.0.4" 1062 | }, 1063 | "dependencies": { 1064 | "mute-stream": { 1065 | "version": "0.0.5", 1066 | "bundled": true 1067 | } 1068 | } 1069 | }, 1070 | "read-cmd-shim": { 1071 | "version": "1.0.1", 1072 | "bundled": true, 1073 | "requires": { 1074 | "graceful-fs": "^4.1.2" 1075 | } 1076 | }, 1077 | "read-installed": { 1078 | "version": "4.0.3", 1079 | "bundled": true, 1080 | "requires": { 1081 | "debuglog": "^1.0.1", 1082 | "graceful-fs": "^4.1.2", 1083 | "read-package-json": "^2.0.0", 1084 | "readdir-scoped-modules": "^1.0.0", 1085 | "semver": "2 || 3 || 4 || 5", 1086 | "slide": "~1.1.3", 1087 | "util-extend": "^1.0.1" 1088 | }, 1089 | "dependencies": { 1090 | "util-extend": { 1091 | "version": "1.0.3", 1092 | "bundled": true 1093 | } 1094 | } 1095 | }, 1096 | "read-package-json": { 1097 | "version": "2.0.5", 1098 | "bundled": true, 1099 | "requires": { 1100 | "glob": "^7.1.1", 1101 | "graceful-fs": "^4.1.2", 1102 | "json-parse-helpfulerror": "^1.0.2", 1103 | "normalize-package-data": "^2.0.0" 1104 | }, 1105 | "dependencies": { 1106 | "json-parse-helpfulerror": { 1107 | "version": "1.0.3", 1108 | "bundled": true, 1109 | "requires": { 1110 | "jju": "^1.1.0" 1111 | }, 1112 | "dependencies": { 1113 | "jju": { 1114 | "version": "1.3.0", 1115 | "bundled": true 1116 | } 1117 | } 1118 | } 1119 | } 1120 | }, 1121 | "read-package-tree": { 1122 | "version": "5.1.5", 1123 | "bundled": true, 1124 | "requires": { 1125 | "debuglog": "^1.0.1", 1126 | "dezalgo": "^1.0.0", 1127 | "once": "^1.3.0", 1128 | "read-package-json": "^2.0.0", 1129 | "readdir-scoped-modules": "^1.0.0" 1130 | } 1131 | }, 1132 | "readable-stream": { 1133 | "version": "2.2.9", 1134 | "bundled": true, 1135 | "requires": { 1136 | "buffer-shims": "~1.0.0", 1137 | "core-util-is": "~1.0.0", 1138 | "inherits": "~2.0.1", 1139 | "isarray": "~1.0.0", 1140 | "process-nextick-args": "~1.0.6", 1141 | "string_decoder": "~1.0.0", 1142 | "util-deprecate": "~1.0.1" 1143 | }, 1144 | "dependencies": { 1145 | "buffer-shims": { 1146 | "version": "1.0.0", 1147 | "bundled": true 1148 | }, 1149 | "core-util-is": { 1150 | "version": "1.0.2", 1151 | "bundled": true 1152 | }, 1153 | "isarray": { 1154 | "version": "1.0.0", 1155 | "bundled": true 1156 | }, 1157 | "process-nextick-args": { 1158 | "version": "1.0.7", 1159 | "bundled": true 1160 | }, 1161 | "string_decoder": { 1162 | "version": "1.0.0", 1163 | "bundled": true, 1164 | "requires": { 1165 | "buffer-shims": "~1.0.0" 1166 | } 1167 | }, 1168 | "util-deprecate": { 1169 | "version": "1.0.2", 1170 | "bundled": true 1171 | } 1172 | } 1173 | }, 1174 | "readdir-scoped-modules": { 1175 | "version": "1.0.2", 1176 | "bundled": true, 1177 | "requires": { 1178 | "debuglog": "^1.0.1", 1179 | "dezalgo": "^1.0.0", 1180 | "graceful-fs": "^4.1.2", 1181 | "once": "^1.3.0" 1182 | } 1183 | }, 1184 | "realize-package-specifier": { 1185 | "version": "3.0.3", 1186 | "bundled": true, 1187 | "requires": { 1188 | "dezalgo": "^1.0.1", 1189 | "npm-package-arg": "^4.1.1" 1190 | } 1191 | }, 1192 | "request": { 1193 | "version": "2.81.0", 1194 | "bundled": true, 1195 | "requires": { 1196 | "aws-sign2": "~0.6.0", 1197 | "aws4": "^1.2.1", 1198 | "caseless": "~0.12.0", 1199 | "combined-stream": "~1.0.5", 1200 | "extend": "~3.0.0", 1201 | "forever-agent": "~0.6.1", 1202 | "form-data": "~2.1.1", 1203 | "har-validator": "~4.2.1", 1204 | "hawk": "~3.1.3", 1205 | "http-signature": "~1.1.0", 1206 | "is-typedarray": "~1.0.0", 1207 | "isstream": "~0.1.2", 1208 | "json-stringify-safe": "~5.0.1", 1209 | "mime-types": "~2.1.7", 1210 | "oauth-sign": "~0.8.1", 1211 | "performance-now": "^0.2.0", 1212 | "qs": "~6.4.0", 1213 | "safe-buffer": "^5.0.1", 1214 | "stringstream": "~0.0.4", 1215 | "tough-cookie": "~2.3.0", 1216 | "tunnel-agent": "^0.6.0", 1217 | "uuid": "^3.0.0" 1218 | }, 1219 | "dependencies": { 1220 | "aws-sign2": { 1221 | "version": "0.6.0", 1222 | "bundled": true 1223 | }, 1224 | "aws4": { 1225 | "version": "1.6.0", 1226 | "bundled": true 1227 | }, 1228 | "caseless": { 1229 | "version": "0.12.0", 1230 | "bundled": true 1231 | }, 1232 | "combined-stream": { 1233 | "version": "1.0.5", 1234 | "bundled": true, 1235 | "requires": { 1236 | "delayed-stream": "~1.0.0" 1237 | }, 1238 | "dependencies": { 1239 | "delayed-stream": { 1240 | "version": "1.0.0", 1241 | "bundled": true 1242 | } 1243 | } 1244 | }, 1245 | "extend": { 1246 | "version": "3.0.0", 1247 | "bundled": true 1248 | }, 1249 | "forever-agent": { 1250 | "version": "0.6.1", 1251 | "bundled": true 1252 | }, 1253 | "form-data": { 1254 | "version": "2.1.2", 1255 | "bundled": true, 1256 | "requires": { 1257 | "asynckit": "^0.4.0", 1258 | "combined-stream": "^1.0.5", 1259 | "mime-types": "^2.1.12" 1260 | }, 1261 | "dependencies": { 1262 | "asynckit": { 1263 | "version": "0.4.0", 1264 | "bundled": true 1265 | } 1266 | } 1267 | }, 1268 | "har-validator": { 1269 | "version": "4.2.1", 1270 | "bundled": true, 1271 | "requires": { 1272 | "ajv": "^4.9.1", 1273 | "har-schema": "^1.0.5" 1274 | }, 1275 | "dependencies": { 1276 | "ajv": { 1277 | "version": "4.11.4", 1278 | "bundled": true, 1279 | "requires": { 1280 | "co": "^4.6.0", 1281 | "json-stable-stringify": "^1.0.1" 1282 | }, 1283 | "dependencies": { 1284 | "co": { 1285 | "version": "4.6.0", 1286 | "bundled": true 1287 | }, 1288 | "json-stable-stringify": { 1289 | "version": "1.0.1", 1290 | "bundled": true, 1291 | "requires": { 1292 | "jsonify": "~0.0.0" 1293 | }, 1294 | "dependencies": { 1295 | "jsonify": { 1296 | "version": "0.0.0", 1297 | "bundled": true 1298 | } 1299 | } 1300 | } 1301 | } 1302 | }, 1303 | "har-schema": { 1304 | "version": "1.0.5", 1305 | "bundled": true 1306 | } 1307 | } 1308 | }, 1309 | "hawk": { 1310 | "version": "3.1.3", 1311 | "bundled": true, 1312 | "requires": { 1313 | "boom": "2.x.x", 1314 | "cryptiles": "2.x.x", 1315 | "hoek": "2.x.x", 1316 | "sntp": "1.x.x" 1317 | }, 1318 | "dependencies": { 1319 | "boom": { 1320 | "version": "2.10.1", 1321 | "bundled": true, 1322 | "requires": { 1323 | "hoek": "2.x.x" 1324 | } 1325 | }, 1326 | "cryptiles": { 1327 | "version": "2.0.5", 1328 | "bundled": true, 1329 | "requires": { 1330 | "boom": "2.x.x" 1331 | } 1332 | }, 1333 | "hoek": { 1334 | "version": "2.16.3", 1335 | "bundled": true 1336 | }, 1337 | "sntp": { 1338 | "version": "1.0.9", 1339 | "bundled": true, 1340 | "requires": { 1341 | "hoek": "2.x.x" 1342 | } 1343 | } 1344 | } 1345 | }, 1346 | "http-signature": { 1347 | "version": "1.1.1", 1348 | "bundled": true, 1349 | "requires": { 1350 | "assert-plus": "^0.2.0", 1351 | "jsprim": "^1.2.2", 1352 | "sshpk": "^1.7.0" 1353 | }, 1354 | "dependencies": { 1355 | "assert-plus": { 1356 | "version": "0.2.0", 1357 | "bundled": true 1358 | }, 1359 | "jsprim": { 1360 | "version": "1.3.1", 1361 | "bundled": true, 1362 | "requires": { 1363 | "extsprintf": "1.0.2", 1364 | "json-schema": "0.2.3", 1365 | "verror": "1.3.6" 1366 | }, 1367 | "dependencies": { 1368 | "extsprintf": { 1369 | "version": "1.0.2", 1370 | "bundled": true 1371 | }, 1372 | "json-schema": { 1373 | "version": "0.2.3", 1374 | "bundled": true 1375 | }, 1376 | "verror": { 1377 | "version": "1.3.6", 1378 | "bundled": true, 1379 | "requires": { 1380 | "extsprintf": "1.0.2" 1381 | } 1382 | } 1383 | } 1384 | }, 1385 | "sshpk": { 1386 | "version": "1.11.0", 1387 | "bundled": true, 1388 | "requires": { 1389 | "asn1": "~0.2.3", 1390 | "assert-plus": "^1.0.0", 1391 | "bcrypt-pbkdf": "^1.0.0", 1392 | "dashdash": "^1.12.0", 1393 | "ecc-jsbn": "~0.1.1", 1394 | "getpass": "^0.1.1", 1395 | "jodid25519": "^1.0.0", 1396 | "jsbn": "~0.1.0", 1397 | "tweetnacl": "~0.14.0" 1398 | }, 1399 | "dependencies": { 1400 | "asn1": { 1401 | "version": "0.2.3", 1402 | "bundled": true 1403 | }, 1404 | "assert-plus": { 1405 | "version": "1.0.0", 1406 | "bundled": true 1407 | }, 1408 | "bcrypt-pbkdf": { 1409 | "version": "1.0.1", 1410 | "bundled": true, 1411 | "optional": true, 1412 | "requires": { 1413 | "tweetnacl": "^0.14.3" 1414 | } 1415 | }, 1416 | "dashdash": { 1417 | "version": "1.14.1", 1418 | "bundled": true, 1419 | "requires": { 1420 | "assert-plus": "^1.0.0" 1421 | } 1422 | }, 1423 | "ecc-jsbn": { 1424 | "version": "0.1.1", 1425 | "bundled": true, 1426 | "optional": true, 1427 | "requires": { 1428 | "jsbn": "~0.1.0" 1429 | } 1430 | }, 1431 | "getpass": { 1432 | "version": "0.1.6", 1433 | "bundled": true, 1434 | "requires": { 1435 | "assert-plus": "^1.0.0" 1436 | } 1437 | }, 1438 | "jodid25519": { 1439 | "version": "1.0.2", 1440 | "bundled": true, 1441 | "optional": true, 1442 | "requires": { 1443 | "jsbn": "~0.1.0" 1444 | } 1445 | }, 1446 | "jsbn": { 1447 | "version": "0.1.1", 1448 | "bundled": true, 1449 | "optional": true 1450 | }, 1451 | "tweetnacl": { 1452 | "version": "0.14.5", 1453 | "bundled": true, 1454 | "optional": true 1455 | } 1456 | } 1457 | } 1458 | } 1459 | }, 1460 | "is-typedarray": { 1461 | "version": "1.0.0", 1462 | "bundled": true 1463 | }, 1464 | "isstream": { 1465 | "version": "0.1.2", 1466 | "bundled": true 1467 | }, 1468 | "json-stringify-safe": { 1469 | "version": "5.0.1", 1470 | "bundled": true 1471 | }, 1472 | "mime-types": { 1473 | "version": "2.1.14", 1474 | "bundled": true, 1475 | "requires": { 1476 | "mime-db": "~1.26.0" 1477 | }, 1478 | "dependencies": { 1479 | "mime-db": { 1480 | "version": "1.26.0", 1481 | "bundled": true 1482 | } 1483 | } 1484 | }, 1485 | "oauth-sign": { 1486 | "version": "0.8.2", 1487 | "bundled": true 1488 | }, 1489 | "performance-now": { 1490 | "version": "0.2.0", 1491 | "bundled": true 1492 | }, 1493 | "qs": { 1494 | "version": "6.4.0", 1495 | "bundled": true 1496 | }, 1497 | "safe-buffer": { 1498 | "version": "5.0.1", 1499 | "bundled": true 1500 | }, 1501 | "stringstream": { 1502 | "version": "0.0.5", 1503 | "bundled": true 1504 | }, 1505 | "tough-cookie": { 1506 | "version": "2.3.2", 1507 | "bundled": true, 1508 | "requires": { 1509 | "punycode": "^1.4.1" 1510 | }, 1511 | "dependencies": { 1512 | "punycode": { 1513 | "version": "1.4.1", 1514 | "bundled": true 1515 | } 1516 | } 1517 | }, 1518 | "tunnel-agent": { 1519 | "version": "0.6.0", 1520 | "bundled": true, 1521 | "requires": { 1522 | "safe-buffer": "^5.0.1" 1523 | } 1524 | } 1525 | } 1526 | }, 1527 | "retry": { 1528 | "version": "0.10.1", 1529 | "bundled": true 1530 | }, 1531 | "rimraf": { 1532 | "version": "2.6.1", 1533 | "bundled": true, 1534 | "requires": { 1535 | "glob": "^7.0.5" 1536 | } 1537 | }, 1538 | "semver": { 1539 | "version": "5.3.0", 1540 | "bundled": true 1541 | }, 1542 | "sha": { 1543 | "version": "2.0.1", 1544 | "bundled": true, 1545 | "requires": { 1546 | "graceful-fs": "^4.1.2", 1547 | "readable-stream": "^2.0.2" 1548 | } 1549 | }, 1550 | "slide": { 1551 | "version": "1.1.6", 1552 | "bundled": true 1553 | }, 1554 | "sorted-object": { 1555 | "version": "2.0.1", 1556 | "bundled": true 1557 | }, 1558 | "sorted-union-stream": { 1559 | "version": "2.1.3", 1560 | "bundled": true, 1561 | "requires": { 1562 | "from2": "^1.3.0", 1563 | "stream-iterate": "^1.1.0" 1564 | }, 1565 | "dependencies": { 1566 | "from2": { 1567 | "version": "1.3.0", 1568 | "bundled": true, 1569 | "requires": { 1570 | "inherits": "~2.0.1", 1571 | "readable-stream": "~1.1.10" 1572 | }, 1573 | "dependencies": { 1574 | "readable-stream": { 1575 | "version": "1.1.14", 1576 | "bundled": true, 1577 | "requires": { 1578 | "core-util-is": "~1.0.0", 1579 | "inherits": "~2.0.1", 1580 | "isarray": "0.0.1", 1581 | "string_decoder": "~0.10.x" 1582 | }, 1583 | "dependencies": { 1584 | "core-util-is": { 1585 | "version": "1.0.2", 1586 | "bundled": true 1587 | }, 1588 | "isarray": { 1589 | "version": "0.0.1", 1590 | "bundled": true 1591 | }, 1592 | "string_decoder": { 1593 | "version": "0.10.31", 1594 | "bundled": true 1595 | } 1596 | } 1597 | } 1598 | } 1599 | }, 1600 | "stream-iterate": { 1601 | "version": "1.1.1", 1602 | "bundled": true 1603 | } 1604 | } 1605 | }, 1606 | "strip-ansi": { 1607 | "version": "3.0.1", 1608 | "bundled": true, 1609 | "requires": { 1610 | "ansi-regex": "^2.0.0" 1611 | } 1612 | }, 1613 | "tar": { 1614 | "version": "2.2.1", 1615 | "bundled": true, 1616 | "requires": { 1617 | "block-stream": "*", 1618 | "fstream": "^1.0.2", 1619 | "inherits": "2" 1620 | }, 1621 | "dependencies": { 1622 | "block-stream": { 1623 | "version": "0.0.8", 1624 | "bundled": true, 1625 | "requires": { 1626 | "inherits": "~2.0.0" 1627 | } 1628 | } 1629 | } 1630 | }, 1631 | "text-table": { 1632 | "version": "0.2.0", 1633 | "bundled": true 1634 | }, 1635 | "uid-number": { 1636 | "version": "0.0.6", 1637 | "bundled": true 1638 | }, 1639 | "umask": { 1640 | "version": "1.1.0", 1641 | "bundled": true 1642 | }, 1643 | "unique-filename": { 1644 | "version": "1.1.0", 1645 | "bundled": true, 1646 | "requires": { 1647 | "unique-slug": "^2.0.0" 1648 | }, 1649 | "dependencies": { 1650 | "unique-slug": { 1651 | "version": "2.0.0", 1652 | "bundled": true, 1653 | "requires": { 1654 | "imurmurhash": "^0.1.4" 1655 | } 1656 | } 1657 | } 1658 | }, 1659 | "unpipe": { 1660 | "version": "1.0.0", 1661 | "bundled": true 1662 | }, 1663 | "update-notifier": { 1664 | "version": "2.1.0", 1665 | "bundled": true, 1666 | "requires": { 1667 | "boxen": "^1.0.0", 1668 | "chalk": "^1.0.0", 1669 | "configstore": "^3.0.0", 1670 | "is-npm": "^1.0.0", 1671 | "latest-version": "^3.0.0", 1672 | "lazy-req": "^2.0.0", 1673 | "semver-diff": "^2.0.0", 1674 | "xdg-basedir": "^3.0.0" 1675 | }, 1676 | "dependencies": { 1677 | "boxen": { 1678 | "version": "1.0.0", 1679 | "bundled": true, 1680 | "requires": { 1681 | "ansi-align": "^1.1.0", 1682 | "camelcase": "^4.0.0", 1683 | "chalk": "^1.1.1", 1684 | "cli-boxes": "^1.0.0", 1685 | "string-width": "^2.0.0", 1686 | "term-size": "^0.1.0", 1687 | "widest-line": "^1.0.0" 1688 | }, 1689 | "dependencies": { 1690 | "ansi-align": { 1691 | "version": "1.1.0", 1692 | "bundled": true, 1693 | "requires": { 1694 | "string-width": "^1.0.1" 1695 | }, 1696 | "dependencies": { 1697 | "string-width": { 1698 | "version": "1.0.2", 1699 | "bundled": true, 1700 | "requires": { 1701 | "code-point-at": "^1.0.0", 1702 | "is-fullwidth-code-point": "^1.0.0", 1703 | "strip-ansi": "^3.0.0" 1704 | }, 1705 | "dependencies": { 1706 | "code-point-at": { 1707 | "version": "1.1.0", 1708 | "bundled": true 1709 | }, 1710 | "is-fullwidth-code-point": { 1711 | "version": "1.0.0", 1712 | "bundled": true, 1713 | "requires": { 1714 | "number-is-nan": "^1.0.0" 1715 | }, 1716 | "dependencies": { 1717 | "number-is-nan": { 1718 | "version": "1.0.1", 1719 | "bundled": true 1720 | } 1721 | } 1722 | } 1723 | } 1724 | } 1725 | } 1726 | }, 1727 | "camelcase": { 1728 | "version": "4.0.0", 1729 | "bundled": true 1730 | }, 1731 | "cli-boxes": { 1732 | "version": "1.0.0", 1733 | "bundled": true 1734 | }, 1735 | "string-width": { 1736 | "version": "2.0.0", 1737 | "bundled": true, 1738 | "requires": { 1739 | "is-fullwidth-code-point": "^2.0.0", 1740 | "strip-ansi": "^3.0.0" 1741 | }, 1742 | "dependencies": { 1743 | "is-fullwidth-code-point": { 1744 | "version": "2.0.0", 1745 | "bundled": true 1746 | } 1747 | } 1748 | }, 1749 | "term-size": { 1750 | "version": "0.1.1", 1751 | "bundled": true, 1752 | "requires": { 1753 | "execa": "^0.4.0" 1754 | }, 1755 | "dependencies": { 1756 | "execa": { 1757 | "version": "0.4.0", 1758 | "bundled": true, 1759 | "requires": { 1760 | "cross-spawn-async": "^2.1.1", 1761 | "is-stream": "^1.1.0", 1762 | "npm-run-path": "^1.0.0", 1763 | "object-assign": "^4.0.1", 1764 | "path-key": "^1.0.0", 1765 | "strip-eof": "^1.0.0" 1766 | }, 1767 | "dependencies": { 1768 | "cross-spawn-async": { 1769 | "version": "2.2.5", 1770 | "bundled": true, 1771 | "requires": { 1772 | "lru-cache": "^4.0.0", 1773 | "which": "^1.2.8" 1774 | }, 1775 | "dependencies": { 1776 | "lru-cache": { 1777 | "version": "4.0.2", 1778 | "bundled": true, 1779 | "requires": { 1780 | "pseudomap": "^1.0.1", 1781 | "yallist": "^2.0.0" 1782 | }, 1783 | "dependencies": { 1784 | "pseudomap": { 1785 | "version": "1.0.2", 1786 | "bundled": true 1787 | }, 1788 | "yallist": { 1789 | "version": "2.0.0", 1790 | "bundled": true 1791 | } 1792 | } 1793 | } 1794 | } 1795 | }, 1796 | "is-stream": { 1797 | "version": "1.1.0", 1798 | "bundled": true 1799 | }, 1800 | "npm-run-path": { 1801 | "version": "1.0.0", 1802 | "bundled": true, 1803 | "requires": { 1804 | "path-key": "^1.0.0" 1805 | } 1806 | }, 1807 | "object-assign": { 1808 | "version": "4.1.1", 1809 | "bundled": true 1810 | }, 1811 | "path-key": { 1812 | "version": "1.0.0", 1813 | "bundled": true 1814 | }, 1815 | "strip-eof": { 1816 | "version": "1.0.0", 1817 | "bundled": true 1818 | } 1819 | } 1820 | } 1821 | } 1822 | }, 1823 | "widest-line": { 1824 | "version": "1.0.0", 1825 | "bundled": true, 1826 | "requires": { 1827 | "string-width": "^1.0.1" 1828 | }, 1829 | "dependencies": { 1830 | "string-width": { 1831 | "version": "1.0.2", 1832 | "bundled": true, 1833 | "requires": { 1834 | "code-point-at": "^1.0.0", 1835 | "is-fullwidth-code-point": "^1.0.0", 1836 | "strip-ansi": "^3.0.0" 1837 | }, 1838 | "dependencies": { 1839 | "code-point-at": { 1840 | "version": "1.1.0", 1841 | "bundled": true 1842 | }, 1843 | "is-fullwidth-code-point": { 1844 | "version": "1.0.0", 1845 | "bundled": true, 1846 | "requires": { 1847 | "number-is-nan": "^1.0.0" 1848 | }, 1849 | "dependencies": { 1850 | "number-is-nan": { 1851 | "version": "1.0.1", 1852 | "bundled": true 1853 | } 1854 | } 1855 | } 1856 | } 1857 | } 1858 | } 1859 | } 1860 | } 1861 | }, 1862 | "chalk": { 1863 | "version": "1.1.3", 1864 | "bundled": true, 1865 | "requires": { 1866 | "ansi-styles": "^2.2.1", 1867 | "escape-string-regexp": "^1.0.2", 1868 | "has-ansi": "^2.0.0", 1869 | "strip-ansi": "^3.0.0", 1870 | "supports-color": "^2.0.0" 1871 | }, 1872 | "dependencies": { 1873 | "ansi-styles": { 1874 | "version": "2.2.1", 1875 | "bundled": true 1876 | }, 1877 | "escape-string-regexp": { 1878 | "version": "1.0.5", 1879 | "bundled": true 1880 | }, 1881 | "has-ansi": { 1882 | "version": "2.0.0", 1883 | "bundled": true, 1884 | "requires": { 1885 | "ansi-regex": "^2.0.0" 1886 | } 1887 | }, 1888 | "supports-color": { 1889 | "version": "2.0.0", 1890 | "bundled": true 1891 | } 1892 | } 1893 | }, 1894 | "configstore": { 1895 | "version": "3.0.0", 1896 | "bundled": true, 1897 | "requires": { 1898 | "dot-prop": "^4.1.0", 1899 | "graceful-fs": "^4.1.2", 1900 | "mkdirp": "^0.5.0", 1901 | "unique-string": "^1.0.0", 1902 | "write-file-atomic": "^1.1.2", 1903 | "xdg-basedir": "^3.0.0" 1904 | }, 1905 | "dependencies": { 1906 | "dot-prop": { 1907 | "version": "4.1.1", 1908 | "bundled": true, 1909 | "requires": { 1910 | "is-obj": "^1.0.0" 1911 | }, 1912 | "dependencies": { 1913 | "is-obj": { 1914 | "version": "1.0.1", 1915 | "bundled": true 1916 | } 1917 | } 1918 | }, 1919 | "unique-string": { 1920 | "version": "1.0.0", 1921 | "bundled": true, 1922 | "requires": { 1923 | "crypto-random-string": "^1.0.0" 1924 | }, 1925 | "dependencies": { 1926 | "crypto-random-string": { 1927 | "version": "1.0.0", 1928 | "bundled": true 1929 | } 1930 | } 1931 | } 1932 | } 1933 | }, 1934 | "is-npm": { 1935 | "version": "1.0.0", 1936 | "bundled": true 1937 | }, 1938 | "latest-version": { 1939 | "version": "3.0.0", 1940 | "bundled": true, 1941 | "requires": { 1942 | "package-json": "^3.0.0" 1943 | }, 1944 | "dependencies": { 1945 | "package-json": { 1946 | "version": "3.1.0", 1947 | "bundled": true, 1948 | "requires": { 1949 | "got": "^6.7.1", 1950 | "registry-auth-token": "^3.0.1", 1951 | "registry-url": "^3.0.3", 1952 | "semver": "^5.1.0" 1953 | }, 1954 | "dependencies": { 1955 | "got": { 1956 | "version": "6.7.1", 1957 | "bundled": true, 1958 | "requires": { 1959 | "create-error-class": "^3.0.0", 1960 | "duplexer3": "^0.1.4", 1961 | "get-stream": "^3.0.0", 1962 | "is-redirect": "^1.0.0", 1963 | "is-retry-allowed": "^1.0.0", 1964 | "is-stream": "^1.0.0", 1965 | "lowercase-keys": "^1.0.0", 1966 | "safe-buffer": "^5.0.1", 1967 | "timed-out": "^4.0.0", 1968 | "unzip-response": "^2.0.1", 1969 | "url-parse-lax": "^1.0.0" 1970 | }, 1971 | "dependencies": { 1972 | "create-error-class": { 1973 | "version": "3.0.2", 1974 | "bundled": true, 1975 | "requires": { 1976 | "capture-stack-trace": "^1.0.0" 1977 | }, 1978 | "dependencies": { 1979 | "capture-stack-trace": { 1980 | "version": "1.0.0", 1981 | "bundled": true 1982 | } 1983 | } 1984 | }, 1985 | "duplexer3": { 1986 | "version": "0.1.4", 1987 | "bundled": true 1988 | }, 1989 | "get-stream": { 1990 | "version": "3.0.0", 1991 | "bundled": true 1992 | }, 1993 | "is-redirect": { 1994 | "version": "1.0.0", 1995 | "bundled": true 1996 | }, 1997 | "is-retry-allowed": { 1998 | "version": "1.1.0", 1999 | "bundled": true 2000 | }, 2001 | "is-stream": { 2002 | "version": "1.1.0", 2003 | "bundled": true 2004 | }, 2005 | "lowercase-keys": { 2006 | "version": "1.0.0", 2007 | "bundled": true 2008 | }, 2009 | "safe-buffer": { 2010 | "version": "5.0.1", 2011 | "bundled": true 2012 | }, 2013 | "timed-out": { 2014 | "version": "4.0.1", 2015 | "bundled": true 2016 | }, 2017 | "unzip-response": { 2018 | "version": "2.0.1", 2019 | "bundled": true 2020 | }, 2021 | "url-parse-lax": { 2022 | "version": "1.0.0", 2023 | "bundled": true, 2024 | "requires": { 2025 | "prepend-http": "^1.0.1" 2026 | }, 2027 | "dependencies": { 2028 | "prepend-http": { 2029 | "version": "1.0.4", 2030 | "bundled": true 2031 | } 2032 | } 2033 | } 2034 | } 2035 | }, 2036 | "registry-auth-token": { 2037 | "version": "3.1.0", 2038 | "bundled": true, 2039 | "requires": { 2040 | "rc": "^1.1.6" 2041 | }, 2042 | "dependencies": { 2043 | "rc": { 2044 | "version": "1.1.7", 2045 | "bundled": true, 2046 | "requires": { 2047 | "deep-extend": "~0.4.0", 2048 | "ini": "~1.3.0", 2049 | "minimist": "^1.2.0", 2050 | "strip-json-comments": "~2.0.1" 2051 | }, 2052 | "dependencies": { 2053 | "deep-extend": { 2054 | "version": "0.4.1", 2055 | "bundled": true 2056 | }, 2057 | "minimist": { 2058 | "version": "1.2.0", 2059 | "bundled": true 2060 | }, 2061 | "strip-json-comments": { 2062 | "version": "2.0.1", 2063 | "bundled": true 2064 | } 2065 | } 2066 | } 2067 | } 2068 | }, 2069 | "registry-url": { 2070 | "version": "3.1.0", 2071 | "bundled": true, 2072 | "requires": { 2073 | "rc": "^1.0.1" 2074 | }, 2075 | "dependencies": { 2076 | "rc": { 2077 | "version": "1.1.7", 2078 | "bundled": true, 2079 | "requires": { 2080 | "deep-extend": "~0.4.0", 2081 | "ini": "~1.3.0", 2082 | "minimist": "^1.2.0", 2083 | "strip-json-comments": "~2.0.1" 2084 | }, 2085 | "dependencies": { 2086 | "deep-extend": { 2087 | "version": "0.4.1", 2088 | "bundled": true 2089 | }, 2090 | "minimist": { 2091 | "version": "1.2.0", 2092 | "bundled": true 2093 | }, 2094 | "strip-json-comments": { 2095 | "version": "2.0.1", 2096 | "bundled": true 2097 | } 2098 | } 2099 | } 2100 | } 2101 | } 2102 | } 2103 | } 2104 | } 2105 | }, 2106 | "lazy-req": { 2107 | "version": "2.0.0", 2108 | "bundled": true 2109 | }, 2110 | "semver-diff": { 2111 | "version": "2.1.0", 2112 | "bundled": true, 2113 | "requires": { 2114 | "semver": "^5.0.3" 2115 | } 2116 | }, 2117 | "xdg-basedir": { 2118 | "version": "3.0.0", 2119 | "bundled": true 2120 | } 2121 | } 2122 | }, 2123 | "uuid": { 2124 | "version": "3.0.1", 2125 | "bundled": true 2126 | }, 2127 | "validate-npm-package-license": { 2128 | "version": "3.0.1", 2129 | "bundled": true, 2130 | "requires": { 2131 | "spdx-correct": "~1.0.0", 2132 | "spdx-expression-parse": "~1.0.0" 2133 | }, 2134 | "dependencies": { 2135 | "spdx-correct": { 2136 | "version": "1.0.2", 2137 | "bundled": true, 2138 | "requires": { 2139 | "spdx-license-ids": "^1.0.2" 2140 | }, 2141 | "dependencies": { 2142 | "spdx-license-ids": { 2143 | "version": "1.2.0", 2144 | "bundled": true 2145 | } 2146 | } 2147 | }, 2148 | "spdx-expression-parse": { 2149 | "version": "1.0.2", 2150 | "bundled": true, 2151 | "requires": { 2152 | "spdx-exceptions": "^1.0.4", 2153 | "spdx-license-ids": "^1.0.0" 2154 | }, 2155 | "dependencies": { 2156 | "spdx-exceptions": { 2157 | "version": "1.0.4", 2158 | "bundled": true 2159 | }, 2160 | "spdx-license-ids": { 2161 | "version": "1.2.0", 2162 | "bundled": true 2163 | } 2164 | } 2165 | } 2166 | } 2167 | }, 2168 | "validate-npm-package-name": { 2169 | "version": "3.0.0", 2170 | "bundled": true, 2171 | "requires": { 2172 | "builtins": "^1.0.3" 2173 | }, 2174 | "dependencies": { 2175 | "builtins": { 2176 | "version": "1.0.3", 2177 | "bundled": true 2178 | } 2179 | } 2180 | }, 2181 | "which": { 2182 | "version": "1.2.14", 2183 | "bundled": true, 2184 | "requires": { 2185 | "isexe": "^2.0.0" 2186 | }, 2187 | "dependencies": { 2188 | "isexe": { 2189 | "version": "2.0.0", 2190 | "bundled": true 2191 | } 2192 | } 2193 | }, 2194 | "wrappy": { 2195 | "version": "1.0.2", 2196 | "bundled": true 2197 | }, 2198 | "write-file-atomic": { 2199 | "version": "1.3.3", 2200 | "bundled": true, 2201 | "requires": { 2202 | "graceful-fs": "^4.1.11", 2203 | "imurmurhash": "^0.1.4", 2204 | "slide": "^1.1.5" 2205 | } 2206 | } 2207 | } 2208 | }, 2209 | "once": { 2210 | "version": "1.4.0", 2211 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2212 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 2213 | "dev": true, 2214 | "requires": { 2215 | "wrappy": "1" 2216 | } 2217 | }, 2218 | "path-is-absolute": { 2219 | "version": "1.0.1", 2220 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2221 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 2222 | "dev": true 2223 | }, 2224 | "rimraf": { 2225 | "version": "2.6.2", 2226 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", 2227 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", 2228 | "dev": true, 2229 | "requires": { 2230 | "glob": "^7.0.5" 2231 | } 2232 | }, 2233 | "wrappy": { 2234 | "version": "1.0.2", 2235 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2236 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2237 | "dev": true 2238 | } 2239 | } 2240 | } 2241 | -------------------------------------------------------------------------------- /publish/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nativescript-publish", 3 | "version": "1.0.0", 4 | "description": "Publish helper", 5 | "devDependencies": { 6 | "ncp": "^2.0.0", 7 | "rimraf": "^2.5.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /publish/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | PACK_DIR=package; 4 | 5 | publish() { 6 | cd $PACK_DIR 7 | echo 'Publishing to npm...' 8 | npm publish package/*.tgz 9 | } 10 | 11 | ./pack.sh && publish -------------------------------------------------------------------------------- /seed-tests/jasmine.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "spec_dir": ".", 3 | "spec_files": ["./*tests.js"], 4 | "stopSpecOnExpectationFailure": false, 5 | "random": false 6 | } -------------------------------------------------------------------------------- /seed-tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "async": "^2.4.1", 4 | "cross-env": "^5.1.3", 5 | "glob": "^7.1.2", 6 | "jasmine": "^2.6.0", 7 | "ncp": "^2.0.0", 8 | "rimraf": "^2.6.1" 9 | }, 10 | "scripts": { 11 | "test.android": "cross-env ANDROID=true jasmine --config=jasmine.config.json", 12 | "test.ios": "cross-env IOS=true jasmine --config=jasmine.config.json" 13 | }, 14 | "dependencies": {} 15 | } 16 | -------------------------------------------------------------------------------- /src/.npmignore: -------------------------------------------------------------------------------- 1 | *.map 2 | *.ts 3 | !*.d.ts 4 | tsconfig.json 5 | scripts/* 6 | platforms/android/* 7 | !platforms/android/include.gradle 8 | !platforms/android/*.aar 9 | !platforms/android/*.jar -------------------------------------------------------------------------------- /src/.travis.yml: -------------------------------------------------------------------------------- 1 | matrix: 2 | include: 3 | - stage: "Lint" 4 | language: node_js 5 | os: linux 6 | node_js: "6" 7 | script: cd src && npm run ci.tslint && cd ../demo && npm run ci.tslint 8 | - stage: "WebPack, Build and Test" 9 | os: osx 10 | env: 11 | - WebPack="iOS" 12 | osx_image: xcode9.2 13 | language: node_js 14 | node_js: "6" 15 | jdk: oraclejdk8 16 | script: cd demo && npm run build.plugin && npm i && tns build ios --bundle --env.uglify 17 | - language: android 18 | os: linux 19 | env: 20 | - WebPack="Android" 21 | jdk: oraclejdk8 22 | before_install: nvm install 6.10.3 23 | script: cd demo && npm run build.plugin && npm i && tns build android --bundle --env.uglify --env.snapshot 24 | - language: android 25 | env: 26 | - BuildAndroid="26" 27 | os: linux 28 | jdk: oraclejdk8 29 | before_install: nvm install stable 30 | script: 31 | - cd src && npm i && npm run tsc && cd ../demo && tns build android 32 | - os: osx 33 | env: 34 | - BuildiOS="11" 35 | - Xcode="9.2" 36 | osx_image: xcode9.2 37 | language: node_js 38 | node_js: "6" 39 | jdk: oraclejdk8 40 | script: 41 | - cd src && npm i && npm run tsc && cd ../demo && tns build ios 42 | - os: linux 43 | language: android 44 | dist: precise 45 | sudo: required 46 | jdk: oraclejdk8 47 | before_script: 48 | - echo no | android create avd --force -n test -t android-21 -b armeabi-v7a 49 | - emulator -avd test -no-audio -no-window & 50 | - android-wait-for-emulator 51 | before_install: 52 | - nvm install 6 53 | script: cd src && npm run test.android 54 | - os: osx 55 | language: node_js 56 | node_js: "6" 57 | jdk: oraclejdk8 58 | osx_image: xcode9.2 59 | script: cd src && npm run test.ios 60 | 61 | android: 62 | components: 63 | - tools 64 | - platform-tools 65 | - build-tools-26.0.1 66 | - android-26 67 | - android-23 68 | - extra-android-m2repository 69 | - sys-img-armeabi-v7a-android-21 70 | 71 | install: 72 | - echo no | npm install -g nativescript 73 | - tns usage-reporting disable 74 | - tns error-reporting disable -------------------------------------------------------------------------------- /src/app-tour.android.ts: -------------------------------------------------------------------------------- 1 | import { AppTour as AppTourBase, TourStop } from './app-tour.common'; 2 | import { Color } from '@nativescript/core/color'; 3 | import { android } from '@nativescript/core/application'; 4 | 5 | declare let com; 6 | let TapTarget = com.getkeepsafe.taptargetview.TapTarget; 7 | let TapTargetSequence = com.getkeepsafe.taptargetview.TapTargetSequence; 8 | 9 | export class AppTour extends AppTourBase { 10 | currentStop = 0; 11 | buildNativeTour(stops: TourStop[], handlers) { 12 | const targets: any[] = stops.map(stop => { 13 | this.currentStop = 0; 14 | return TapTarget.forView(stop.view.nativeView || stop.view.android || stop.view, stop.title, stop.description|| this.defaults.description) 15 | .outerCircleColorInt(new Color(stop.outerCircleColor|| this.defaults.outerCircleColor).android) 16 | .outerCircleAlpha(float(stop.outerCircleOpacity|| this.defaults.outerCircleOpacity)) 17 | .targetCircleColorInt(new Color(stop.innerCircleColor|| this.defaults.innerCircleColor).android) 18 | .titleTextSize(stop.titleTextSize|| this.defaults.titleTextSize) 19 | .titleTextColorInt(new Color(stop.titleTextColor|| this.defaults.titleTextColor).android) 20 | .descriptionTextSize(stop.descriptionTextSize|| this.defaults.descriptionTextSize) 21 | .descriptionTextColorInt(new Color(stop.descriptionTextColor|| this.defaults.descriptionTextColor).android) 22 | .cancelable(stop.dismissable) 23 | .drawShadow(true) 24 | .tintTarget(false) 25 | .targetRadius(stop.innerCircleRadius|| this.defaults.innerCircleRadius); 26 | }); 27 | 28 | this.nativeTour = new TapTargetSequence(android.foregroundActivity); 29 | this.nativeTour.targets(java.util.Arrays.asList(targets)); 30 | this.nativeTour.listener(new TapTargetSequence.Listener({ 31 | onSequenceFinish: function() { 32 | handlers.finish(); 33 | }.bind(this), 34 | onSequenceStep: function() { 35 | handlers.onStep(this.currentStop++); 36 | }.bind(this), 37 | onSequenceCanceled: function() { 38 | handlers.onCancel(this.currentStop++); 39 | }.bind(this) 40 | })); 41 | } 42 | 43 | show() { 44 | this.nativeTour.start(); 45 | } 46 | 47 | reset() { 48 | this.buildNativeTour(this.stops, this.handlers); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/app-tour.common.ts: -------------------------------------------------------------------------------- 1 | export interface TourStop { 2 | view: { ios, android, nativeView }; 3 | title: string; 4 | titleTextSize?: number; 5 | titleTextColor?: string; 6 | description?: string; 7 | descriptionTextSize?: number; 8 | descriptionTextColor?: string; 9 | outerCircleColor?: string; 10 | outerCircleOpacity?: number; 11 | innerCircleColor?: string; 12 | rippleColor?: string; // ios-only 13 | innerCircleRadius?: number; 14 | dismissable?: boolean; 15 | } 16 | 17 | export interface TourEvents { 18 | finish?: Function, 19 | onStep?: Function, 20 | onCancel?: Function 21 | } 22 | 23 | export class AppTour { 24 | nativeTour; 25 | handlers; 26 | 27 | defaults: TourStop = { 28 | view: null, 29 | title: 'title', 30 | titleTextSize: 25, 31 | titleTextColor: 'white', 32 | description: 'description', 33 | descriptionTextSize: 20, 34 | descriptionTextColor: 'white', 35 | outerCircleOpacity: 0.96, 36 | outerCircleColor: 'black', 37 | innerCircleColor: 'white', 38 | rippleColor: 'white', // ios-only 39 | innerCircleRadius: 50, 40 | dismissable: false 41 | }; 42 | 43 | defaultHandlers: TourEvents = { 44 | finish() {}, 45 | onStep(lastStepNative) {}, 46 | onCancel(lastStepNative) {} 47 | } 48 | 49 | constructor(public stops: TourStop[], handlers?: TourEvents) { 50 | if (handlers) { 51 | handlers.finish = handlers.finish || this.defaultHandlers.finish; 52 | handlers.onStep = handlers.onStep || this.defaultHandlers.onStep; 53 | handlers.onCancel = handlers.onCancel || this.defaultHandlers.onCancel; 54 | } 55 | this.stops = stops; 56 | this.handlers = handlers || this.defaultHandlers; 57 | this.reset(); 58 | this.buildNativeTour(stops, this.handlers); 59 | } 60 | 61 | updateStops(stops: TourStop[]) { 62 | this.stops = stops; 63 | this.reset(); 64 | this.buildNativeTour(stops, this.handlers); 65 | } 66 | 67 | buildNativeTour(stops: TourStop[], handlers: TourEvents) {} 68 | 69 | show() {} 70 | 71 | reset() {} 72 | } 73 | 74 | 75 | -------------------------------------------------------------------------------- /src/app-tour.ios.ts: -------------------------------------------------------------------------------- 1 | import { AppTour as AppTourBase, TourStop } from './app-tour.common'; 2 | import { Color } from '@nativescript/core/color'; 3 | import { ios } from '@nativescript/core/application'; 4 | 5 | export class AppTour extends AppTourBase { 6 | currentIndex = 0; 7 | delegate = AppTourDelegate.initWithOwner(new WeakRef(this)); 8 | buildNativeTour(stops: TourStop[]) { 9 | this.currentIndex = 0; 10 | 11 | const nativeStops = stops.map(stop => { 12 | const nativeStop: MaterialShowcase = MaterialShowcase.alloc().init(); 13 | nativeStop.setTargetViewWithView(stop.view.ios); 14 | nativeStop.isTapRecognizerForTargetView = !stop.dismissable; 15 | nativeStop.delegate = this.delegate; 16 | 17 | nativeStop.primaryText = stop.title; 18 | nativeStop.primaryTextColor = new Color(stop.titleTextColor|| this.defaults.titleTextColor).ios; 19 | nativeStop.primaryTextSize = stop.titleTextSize|| this.defaults.titleTextSize; 20 | 21 | nativeStop.secondaryText = stop.description|| this.defaults.description; 22 | nativeStop.secondaryTextColor = new Color(stop.descriptionTextColor|| this.defaults.descriptionTextColor).ios; 23 | nativeStop.secondaryTextSize = stop.descriptionTextSize|| this.defaults.descriptionTextSize; 24 | 25 | nativeStop.backgroundPromptColor = new Color(stop.outerCircleColor|| this.defaults.outerCircleColor).ios; 26 | nativeStop.backgroundPromptColorAlpha = stop.outerCircleOpacity|| this.defaults.outerCircleOpacity; 27 | nativeStop.targetHolderColor = new Color(stop.innerCircleColor|| this.defaults.innerCircleColor).ios; 28 | nativeStop.targetHolderRadius = stop.innerCircleRadius|| this.defaults.innerCircleRadius; 29 | nativeStop.aniRippleColor = new Color(stop.rippleColor|| this.defaults.rippleColor).ios; 30 | 31 | return nativeStop; 32 | }); 33 | this.nativeTour = new MaterialShowcaseSequence(); 34 | nativeStops.forEach(stop => { 35 | this.nativeTour.temp(stop); 36 | }); 37 | } 38 | 39 | show() { 40 | this.nativeTour.start(); 41 | } 42 | 43 | next() { 44 | this.nativeTour.showCaseWillDismis(); 45 | } 46 | 47 | reset() { 48 | this.buildNativeTour(this.stops); 49 | } 50 | } 51 | 52 | export class AppTourDelegate extends NSObject { 53 | public static ObjCProtocols = [MaterialShowcaseDelegate]; 54 | private _owner: WeakRef; 55 | 56 | 57 | get owner(): AppTour { 58 | return this._owner.get(); 59 | } 60 | 61 | static initWithOwner(owner) { 62 | let delegate = new AppTourDelegate(); 63 | delegate._owner = owner; 64 | return delegate; 65 | } 66 | 67 | showCaseWillDismissWithShowcaseDidTapTarget(showcase, didTapTarget) {} 68 | 69 | showCaseDidDismissWithShowcaseDidTapTarget(showcase, didTapTarget) { 70 | if (this.owner.currentIndex + 1 === this.owner.stops.length) { 71 | // tourended 72 | this.owner.handlers.onStep(this.owner.currentIndex); 73 | this.owner.handlers.finish(); 74 | } else if (didTapTarget) { 75 | this.owner.next(); 76 | this.owner.handlers.onStep(this.owner.currentIndex++); 77 | } else if (this.owner.stops[this.owner.currentIndex].dismissable) { 78 | this.owner.handlers.onCancel(this.owner.currentIndex++); 79 | } 80 | 81 | } 82 | } -------------------------------------------------------------------------------- /src/index.d.ts: -------------------------------------------------------------------------------- 1 | import { AppTour as AppTourBase} from './app-tour.common'; 2 | export declare class AppTour extends AppTourBase {} 3 | export * from './app-tour.common'; 4 | 5 | -------------------------------------------------------------------------------- /src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nativescript-app-tour", 3 | "version": "4.0.0", 4 | "description": "NativeScript plugin for building a tour, showcase or a walkthrough for your app.", 5 | "main": "app-tour", 6 | "typings": "index.d.ts", 7 | "nativescript": { 8 | "platforms": { 9 | "android": "7.0.0", 10 | "ios": "7.0.0" 11 | } 12 | }, 13 | "scripts": { 14 | "tsc": "tsc -skipLibCheck", 15 | "build": "npm i && tsc", 16 | "postclone": "npm i && node scripts/postclone.js && cd ../demo && npm i && cd ../src && npm run plugin.link", 17 | "test.android": "npm i && npm run tsc && npm run tslint && cd ../demo && tns build android && tns test android --justlaunch", 18 | "test.ios": "npm i && npm run tsc && npm run tslint && cd ../demo && tns build ios && tns test ios --justlaunch", 19 | "tslint": "cd .. && tslint \"**/*.ts\" --config tslint.json --exclude \"**/node_modules/**\"", 20 | "plugin.link": "npm link && cd ../demo && npm link nativescript-yourplugin && cd ../src", 21 | "plugin.tscwatch": "npm run tsc -- -w", 22 | "demo.ios": "npm i && npm run tsc && cd ../demo && tns run ios --syncAllFiles", 23 | "demo.android": "npm i && npm run tsc && cd ../demo && tns run android --syncAllFiles", 24 | "demo.reset": "cd ../demo && rimraf platforms", 25 | "plugin.prepare": "npm run tsc && cd ../demo && tns plugin remove nativescript-yourplugin && tns plugin add ../src", 26 | "clean": "cd ../demo && rimraf hooks node_modules platforms && cd ../src && rimraf node_modules && npm run plugin.link", 27 | "ci.tslint": "npm i && tslint '**/*.ts' --config '../tslint.json' --exclude '**/node_modules/**'", 28 | "prepare": "node scripts/prepare.js" 29 | }, 30 | "keywords": [ 31 | "NativeScript", 32 | "JavaScript", 33 | "Android", 34 | "iOS", 35 | "tour", 36 | "showcase", 37 | "walkthrough", 38 | "coachmarks", 39 | "instructions", 40 | "guide", 41 | "intro" 42 | ], 43 | "authors": { 44 | "name": "hamdi wanis", 45 | "email": "hamdiwanis@hotmail.com" 46 | }, 47 | "contributors": [ 48 | { 49 | "name": "MultiShiv19", 50 | "email": "sp@shiv19.com", 51 | "url": "https://shiv19.com" 52 | } 53 | ], 54 | "bugs": { 55 | "url": "https://github.com/hamdiwanis/nativescript-app-tour/issues" 56 | }, 57 | "license": "Apache-2.0", 58 | "homepage": "https://github.com/hamdiwanis/nativescript-app-tour", 59 | "readmeFilename": "README.md", 60 | "devDependencies": { 61 | "@nativescript/core": "^7.0.12", 62 | "@nativescript/types": "^7.0.4", 63 | "@nativescript/webpack": "^3.0.8", 64 | "typescript": "~3.9.0", 65 | "prompt": "^1.0.0", 66 | "rimraf": "^2.5.0", 67 | "tslint": "^5.0.0", 68 | "semver": "^5.5.0" 69 | }, 70 | "dependencies": {}, 71 | "bootstrapper": "nativescript-plugin-seed" 72 | } 73 | -------------------------------------------------------------------------------- /src/platforms/android/include.gradle: -------------------------------------------------------------------------------- 1 | repositories { 2 | jcenter() 3 | maven { url 'https://jitpack.io' } 4 | } 5 | 6 | dependencies { 7 | implementation 'com.github.shiv19:TapTargetView:-SNAPSHOT' 8 | } -------------------------------------------------------------------------------- /src/platforms/ios/Podfile: -------------------------------------------------------------------------------- 1 | pod 'MaterialShowcase', :git => 'https://github.com/shiv19/material-showcase-ios.git', :branch => 'nativescript' 2 | 3 | post_install do |installer| 4 | installer.pods_project.targets.each do |target| 5 | target.build_configurations.each do |configuration| 6 | configuration.build_settings['SWIFT_VERSION'] = "4.0" 7 | end 8 | end 9 | end -------------------------------------------------------------------------------- /src/references.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | /// 5 | -------------------------------------------------------------------------------- /src/scripts/postclone.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | var prompt = require('prompt'); 3 | var rimraf = require('rimraf'); 4 | var exec = require('child_process').exec; 5 | 6 | var class_name, 7 | inputParams = { 8 | plugin_name: undefined, 9 | github_username: undefined, 10 | init_git: undefined 11 | }, 12 | seed_plugin_name = "yourplugin", 13 | seed_class_name = "YourPlugin", 14 | seed_demo_property_name = "yourPlugin", 15 | seed_github_username = "YourName", 16 | demo_folder = "../demo", 17 | screenshots_dir = "../screenshots", 18 | seed_tests_dir = "../seed-tests", 19 | scripts_dir = "scripts", 20 | filesToReplace = { 21 | readmeFile: { 22 | source: "README.md", 23 | destination: "../README.md" 24 | }, 25 | travisFile: { 26 | source: ".travis.yml", 27 | destination: "../.travis.yml" 28 | } 29 | }; 30 | 31 | console.log('NativeScript Plugin Seed Configuration'); 32 | 33 | var parseArgv = function () { 34 | var argv = Array.prototype.slice.call(process.argv, 2); 35 | var result = {}; 36 | argv.forEach(function (pairString) { 37 | var pair = pairString.split('='); 38 | result[pair[0]] = pair[1]; 39 | }); 40 | return result; 41 | }; 42 | var argv = parseArgv(); 43 | 44 | if (argv.gitHubUsername !== undefined && argv.pluginName !== undefined && argv.initGit !== undefined) { 45 | inputParams.github_username = argv.gitHubUsername; 46 | inputParams.plugin_name = argv.pluginName; 47 | inputParams.init_git = argv.initGit 48 | } 49 | 50 | askGithubUsername(); 51 | 52 | function askGithubUsername() { 53 | if (inputParams.github_username !== undefined) { 54 | askPluginName(); 55 | } else { 56 | prompt.start(); 57 | prompt.get({ 58 | name: 'github_username', 59 | description: 'What is your GitHub username (used for updating package.json)? Example: NathanWalker / EddyVerbruggen' 60 | }, function (err, result) { 61 | if (err) { 62 | return console.log(err); 63 | } 64 | if (!result.github_username) { 65 | return console.log("Your GitHub username is required to configure plugin's package.json."); 66 | } 67 | inputParams.github_username = result.github_username; 68 | askPluginName(); 69 | }); 70 | } 71 | } 72 | 73 | function askPluginName() { 74 | if (inputParams.plugin_name !== undefined) { 75 | generateClassName(); 76 | } else { 77 | prompt.get({ 78 | name: 'plugin_name', 79 | description: 'What will be the name of your plugin? Use lowercase characters and dashes only. Example: yourplugin / google-maps / bluetooth' 80 | }, function (err, result) { 81 | if (err) { 82 | return console.log(err); 83 | } 84 | if (!result.plugin_name) { 85 | return console.log("Your plugin name is required to correct the file names and classes."); 86 | } 87 | 88 | inputParams.plugin_name = result.plugin_name; 89 | 90 | if (inputParams.plugin_name.startsWith("nativescript-")) { 91 | inputParams.plugin_name = inputParams.plugin_name.replace("nativescript-", ""); 92 | } 93 | 94 | generateClassName(); 95 | }); 96 | } 97 | } 98 | 99 | function generateClassName() { 100 | // the classname becomes 'GoogleMaps' when plugin_name is 'google_maps' 101 | class_name = ""; 102 | var plugin_name_parts = inputParams.plugin_name.split("-"); 103 | for (var p in plugin_name_parts) { 104 | var part = plugin_name_parts[p]; 105 | class_name += (part[0].toUpperCase() + part.substr(1)); 106 | } 107 | console.log('Using ' + class_name + ' as the TypeScript Class name..'); 108 | renameFiles(); 109 | } 110 | 111 | function renameFiles() { 112 | console.log('Will now rename some files..'); 113 | var files = fs.readdirSync("."); 114 | for (var f in files) { 115 | var file = files[f]; 116 | if (file.indexOf(seed_plugin_name) === 0) { 117 | var newName = inputParams.plugin_name + file.substr(file.indexOf(".")); 118 | fs.renameSync(file, newName); 119 | } 120 | } 121 | 122 | adjustScripts(); 123 | } 124 | 125 | function adjustScripts() { 126 | console.log('Adjusting scripts..'); 127 | 128 | // add all files in the root 129 | var files = fs.readdirSync("."); 130 | 131 | // add include.gradle 132 | files.push("platforms/android/include.gradle"); 133 | 134 | // add demo's package.json 135 | files.push(demo_folder + "/package.json"); 136 | 137 | // add the demo files 138 | var demoFiles = fs.readdirSync(demo_folder + "/app/"); 139 | for (var d in demoFiles) { 140 | var demoFile = demoFiles[d]; 141 | files.push(demo_folder + "/app/" + demoFile); 142 | } 143 | // add the tests 144 | files.push(demo_folder + "/app/tests/tests.js"); 145 | 146 | // prepare and cache a few Regexp thingies 147 | var regexp_seed_plugin_name = new RegExp(seed_plugin_name, "g"); 148 | var regexp_seed_class_name = new RegExp(seed_class_name, "g"); 149 | var regexp_seed_demo_property_name = new RegExp(seed_demo_property_name, "g"); 150 | var regexp_seed_github_username = new RegExp(seed_github_username, "g"); 151 | 152 | for (var f in files) { 153 | var file = files[f]; 154 | 155 | if (fs.lstatSync(file).isFile()) { 156 | var contents = fs.readFileSync(file, 'utf8'); 157 | var result = contents.replace(regexp_seed_plugin_name, inputParams.plugin_name); 158 | result = result.replace(regexp_seed_class_name, class_name); 159 | result = result.replace(regexp_seed_demo_property_name, class_name[0].toLowerCase() + class_name.substr(1)); 160 | result = result.replace(regexp_seed_github_username, inputParams.github_username); 161 | fs.writeFileSync(file, result); 162 | } 163 | } 164 | 165 | replaceFiles(); 166 | } 167 | 168 | function replaceFiles() { 169 | for (key in filesToReplace) { 170 | var file = filesToReplace[key]; 171 | var contents = fs.readFileSync(file.source); 172 | fs.writeFileSync(file.destination, contents); 173 | fs.unlinkSync(file.source); 174 | } 175 | 176 | rimraf(screenshots_dir, function () { 177 | console.log('Screenshots removed.'); 178 | rimraf(seed_tests_dir, function () { 179 | console.log('Seed tests removed.'); 180 | 181 | // delete postclone.js 182 | rimraf.sync('../CONTRIBUTING.md'); 183 | rimraf.sync('../CODE_OF_CONDUCT.md'); 184 | rimraf.sync(scripts_dir + '/postclone.js'); 185 | 186 | askInitGit(); 187 | }); 188 | }); 189 | } 190 | 191 | function askInitGit() { 192 | if (inputParams.init_git !== undefined) { 193 | initGit(); 194 | } else { 195 | prompt.get({ 196 | name: 'init_git', 197 | description: 'Do you want to init a fresh local git project? If you previously \'git clone\'d this repo that would be wise (y/n)', 198 | default: 'y' 199 | }, function (err, result) { 200 | if (err) { 201 | return console.log(err); 202 | } 203 | 204 | inputParams.init_git = result.init_git; 205 | initGit(); 206 | }); 207 | } 208 | } 209 | 210 | function initGit() { 211 | if (inputParams.init_git && inputParams.init_git.toLowerCase() === 'y') { 212 | rimraf.sync('../.git'); 213 | exec('git init -q ..', function (err, stdout, stderr) { 214 | if (err) { 215 | console.log(err); 216 | finishSetup(); 217 | } else { 218 | exec("git add \"../*\" \"../.*\"", function (err, stdout, stderr) { 219 | if (err) { 220 | console.log(err); 221 | } 222 | finishSetup(); 223 | }); 224 | } 225 | }); 226 | } else { 227 | finishSetup(); 228 | } 229 | } 230 | 231 | function finishSetup() { 232 | console.log("Configuration finished! If you're not happy with the result please clone the seed again and rerun this script."); 233 | console.log("You can now continue by running 'npm run plugin.tscwatch' in this window and in another one - 'npm run demo.ios' or 'npm run demo.android'!"); 234 | 235 | process.exit(); 236 | } -------------------------------------------------------------------------------- /src/scripts/prepare.js: -------------------------------------------------------------------------------- 1 | const { exec } = require('child_process'); 2 | const semver = require('semver'); 3 | 4 | exec('tns --version', (err, stdout, stderr) => { 5 | if (err) { 6 | // node couldn't execute the command 7 | console.log(`tns --version err: ${err}`); 8 | return; 9 | } 10 | 11 | const tnsVersion = semver.major(stdout); 12 | 13 | // execute 'tns plugin build' for {N} version > 4. This command builds .aar in platforms/android folder. 14 | if (tnsVersion >= 4) { 15 | console.log(`executing 'tns plugin build'`); 16 | exec('tns plugin build', (err, stdout, stderr) => { 17 | if (err) { 18 | // node couldn't execute the command 19 | console.log(`${err}`); 20 | return; 21 | } 22 | }); 23 | } 24 | }); 25 | -------------------------------------------------------------------------------- /src/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "declaration": true, 6 | "removeComments": true, 7 | "noLib": false, 8 | "emitDecoratorMetadata": true, 9 | "experimentalDecorators": true, 10 | "lib": ["es6", "dom"], 11 | "sourceMap": true, 12 | "pretty": true, 13 | "allowUnreachableCode": false, 14 | "allowUnusedLabels": false, 15 | "noEmitHelpers": true, 16 | "noEmitOnError": false, 17 | "noImplicitAny": false, 18 | "noImplicitReturns": true, 19 | "noImplicitUseStrict": false, 20 | "noFallthroughCasesInSwitch": true 21 | }, 22 | "exclude": [ 23 | "node_modules" 24 | ], 25 | "compileOnSave": false 26 | } 27 | -------------------------------------------------------------------------------- /src/typings/objc!MaterialShowcase.d.ts: -------------------------------------------------------------------------------- 1 | 2 | declare const enum BackgroundTypeStyle { 3 | 4 | Circle = 0, 5 | 6 | Full = 1 7 | } 8 | 9 | declare class MaterialShowcase extends UIView { 10 | 11 | static alloc(): MaterialShowcase; // inherited from NSObject 12 | 13 | static appearance(): MaterialShowcase; // inherited from UIAppearance 14 | 15 | static appearanceForTraitCollection(trait: UITraitCollection): MaterialShowcase; // inherited from UIAppearance 16 | 17 | static appearanceForTraitCollectionWhenContainedIn(trait: UITraitCollection, ContainerClass: typeof NSObject): MaterialShowcase; // inherited from UIAppearance 18 | 19 | static appearanceForTraitCollectionWhenContainedInInstancesOfClasses(trait: UITraitCollection, containerTypes: NSArray): MaterialShowcase; // inherited from UIAppearance 20 | 21 | static appearanceWhenContainedIn(ContainerClass: typeof NSObject): MaterialShowcase; // inherited from UIAppearance 22 | 23 | static appearanceWhenContainedInInstancesOfClasses(containerTypes: NSArray): MaterialShowcase; // inherited from UIAppearance 24 | 25 | static new(): MaterialShowcase; // inherited from NSObject 26 | 27 | aniComeInDuration: number; 28 | 29 | aniGoOutDuration: number; 30 | 31 | aniRippleAlpha: number; 32 | 33 | aniRippleColor: UIColor; 34 | 35 | aniRippleScale: number; 36 | 37 | backgroundPromptColor: UIColor; 38 | 39 | backgroundPromptColorAlpha: number; 40 | 41 | backgroundViewType: BackgroundTypeStyle; 42 | 43 | delegate: MaterialShowcaseDelegate; 44 | 45 | isTapRecognizerForTargetView: boolean; 46 | 47 | primaryText: string; 48 | 49 | primaryTextAlignment: NSTextAlignment; 50 | 51 | primaryTextColor: UIColor; 52 | 53 | primaryTextFont: UIFont; 54 | 55 | primaryTextSize: number; 56 | 57 | secondaryText: string; 58 | 59 | secondaryTextAlignment: NSTextAlignment; 60 | 61 | secondaryTextColor: UIColor; 62 | 63 | secondaryTextFont: UIFont; 64 | 65 | secondaryTextSize: number; 66 | 67 | shouldSetTintColor: boolean; 68 | 69 | targetHolderColor: UIColor; 70 | 71 | targetHolderRadius: number; 72 | 73 | targetTintColor: UIColor; 74 | 75 | completeShowcaseWithAnimatedDidTapTarget(animated: boolean, didTapTarget: boolean): void; 76 | 77 | setTargetViewWithBarButtonItem(barButtonItem: UIBarButtonItem): void; 78 | 79 | setTargetViewWithTabBarItemIndex(tabBar: UITabBar, itemIndex: number): void; 80 | 81 | setTargetViewWithTableViewSectionRow(tableView: UITableView, section: number, row: number): void; 82 | 83 | setTargetViewWithView(view: UIView): void; 84 | 85 | showWithAnimatedCompletion(animated: boolean, handler: () => void): void; 86 | } 87 | 88 | interface MaterialShowcaseDelegate { 89 | 90 | showCaseDidDismissWithShowcaseDidTapTarget?(showcase: MaterialShowcase, didTapTarget: boolean): void; 91 | 92 | showCaseWillDismissWithShowcaseDidTapTarget?(showcase: MaterialShowcase, didTapTarget: boolean): void; 93 | } 94 | declare var MaterialShowcaseDelegate: { 95 | 96 | prototype: MaterialShowcaseDelegate; 97 | }; 98 | 99 | declare class MaterialShowcaseInstructionView extends UIView { 100 | 101 | static alloc(): MaterialShowcaseInstructionView; // inherited from NSObject 102 | 103 | static appearance(): MaterialShowcaseInstructionView; // inherited from UIAppearance 104 | 105 | static appearanceForTraitCollection(trait: UITraitCollection): MaterialShowcaseInstructionView; // inherited from UIAppearance 106 | 107 | static appearanceForTraitCollectionWhenContainedIn(trait: UITraitCollection, ContainerClass: typeof NSObject): MaterialShowcaseInstructionView; // inherited from UIAppearance 108 | 109 | static appearanceForTraitCollectionWhenContainedInInstancesOfClasses(trait: UITraitCollection, containerTypes: NSArray): MaterialShowcaseInstructionView; // inherited from UIAppearance 110 | 111 | static appearanceWhenContainedIn(ContainerClass: typeof NSObject): MaterialShowcaseInstructionView; // inherited from UIAppearance 112 | 113 | static appearanceWhenContainedInInstancesOfClasses(containerTypes: NSArray): MaterialShowcaseInstructionView; // inherited from UIAppearance 114 | 115 | static new(): MaterialShowcaseInstructionView; // inherited from NSObject 116 | } 117 | 118 | declare class MaterialShowcaseSequence extends NSObject { 119 | 120 | static alloc(): MaterialShowcaseSequence; // inherited from NSObject 121 | 122 | static new(): MaterialShowcaseSequence; // inherited from NSObject 123 | 124 | removeUserStateWithKey(key: string): void; 125 | 126 | setKeyWithKey(key: string): MaterialShowcaseSequence; 127 | 128 | showCaseWillDismis(): void; 129 | 130 | start(): void; 131 | 132 | temp(showcase: MaterialShowcase): MaterialShowcaseSequence; 133 | } 134 | 135 | declare var MaterialShowcaseVersionNumber: number; 136 | 137 | declare var MaterialShowcaseVersionString: interop.Reference; 138 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "class-name": true, 4 | "comment-format": [ 5 | true, 6 | "check-space" 7 | ], 8 | "indent": [ 9 | true, 10 | "spaces" 11 | ], 12 | "no-duplicate-variable": true, 13 | "no-eval": true, 14 | "no-internal-module": true, 15 | "no-trailing-whitespace": true, 16 | "no-var-keyword": true, 17 | "one-line": [ 18 | true, 19 | "check-open-brace", 20 | "check-whitespace" 21 | ], 22 | "quotemark": [ 23 | false, 24 | "double" 25 | ], 26 | "semicolon": [ 27 | true, 28 | "always" 29 | ], 30 | "triple-equals": [ 31 | true, 32 | "allow-null-check" 33 | ], 34 | "typedef-whitespace": [ 35 | true, 36 | { 37 | "call-signature": "nospace", 38 | "index-signature": "nospace", 39 | "parameter": "nospace", 40 | "property-declaration": "nospace", 41 | "variable-declaration": "nospace" 42 | } 43 | ], 44 | "variable-name": [ 45 | true, 46 | "ban-keywords" 47 | ], 48 | "whitespace": [ 49 | true, 50 | "check-branch", 51 | "check-decl", 52 | "check-operator", 53 | "check-separator", 54 | "check-type" 55 | ] 56 | } 57 | } --------------------------------------------------------------------------------