├── .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 | }
--------------------------------------------------------------------------------