diff --git a/e2e/dev-tools-drawer/.editorconfig b/e2e/dev-tools-drawer/.editorconfig new file mode 100644 index 000000000..856527689 --- /dev/null +++ b/e2e/dev-tools-drawer/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +[*.json] +indent_style = space +indent_size = 2 + +[*.ts] +indent_style = space +indent_size = 4 diff --git a/e2e/dev-tools-drawer/.gitignore b/e2e/dev-tools-drawer/.gitignore new file mode 100644 index 000000000..674e004de --- /dev/null +++ b/e2e/dev-tools-drawer/.gitignore @@ -0,0 +1,34 @@ +# NativeScript +hooks/ +node_modules/ +platforms/ + +# NativeScript Template +*.js.map +*.js +!webpack.config.js +*.css + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# General +.DS_Store +.AppleDouble +.LSOverride +.idea +.cloud +.project +tmp/ +typings/ + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/e2e/dev-tools-drawer/LICENSE b/e2e/dev-tools-drawer/LICENSE new file mode 100644 index 000000000..4794b436d --- /dev/null +++ b/e2e/dev-tools-drawer/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015-2019 Progress Software Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/app.gradle b/e2e/dev-tools-drawer/app/App_Resources/Android/app.gradle new file mode 100644 index 000000000..bb4842141 --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/Android/app.gradle @@ -0,0 +1,20 @@ +// Add your native dependencies here: + +// Uncomment to add recyclerview-v7 dependency +//dependencies { +// implementation 'com.android.support:recyclerview-v7:+' +//} + +// If you want to add something to be applied before applying plugins' include.gradle files +// e.g. project.ext.googlePlayServicesVersion = "15.0.1" +// create a file named before-plugins.gradle in the current directory and place it there + +android { + defaultConfig { + minSdkVersion 17 + generatedDensities = [] + } + aaptOptions { + additionalParameters "--no-version-vectors" + } +} diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/AndroidManifest.xml b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/AndroidManifest.xml new file mode 100644 index 000000000..1bd256dd9 --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png new file mode 100644 index 000000000..eb381c258 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png new file mode 100644 index 000000000..9cde84cd5 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png new file mode 100644 index 000000000..5218f4c90 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/menu.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/menu.png new file mode 100644 index 000000000..9f8e46133 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-hdpi/menu.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png new file mode 100644 index 000000000..748b2adf5 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png new file mode 100644 index 000000000..4d6a674b3 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png new file mode 100644 index 000000000..b9e102a76 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/menu.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/menu.png new file mode 100644 index 000000000..d3466ca55 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-ldpi/menu.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png new file mode 100644 index 000000000..efeaf2907 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png new file mode 100644 index 000000000..92ccc85a6 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png new file mode 100644 index 000000000..626338766 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/menu.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/menu.png new file mode 100644 index 000000000..82c675995 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-mdpi/menu.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml new file mode 100644 index 000000000..ada77f92c --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png new file mode 100644 index 000000000..612bbd072 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png new file mode 100644 index 000000000..8bcde6277 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png new file mode 100644 index 000000000..ad8ee2f4b Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/menu.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/menu.png new file mode 100644 index 000000000..411a84051 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xhdpi/menu.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png new file mode 100644 index 000000000..0fa88e235 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png new file mode 100644 index 000000000..9d81c85dc Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png new file mode 100644 index 000000000..668327832 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/menu.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/menu.png new file mode 100644 index 000000000..e12b90cca Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxhdpi/menu.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png new file mode 100644 index 000000000..c650f6438 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png new file mode 100644 index 000000000..9a34d0d43 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png new file mode 100644 index 000000000..fa6331c8d Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/menu.png b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/menu.png new file mode 100644 index 000000000..540cdaac1 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/menu.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values-v21/colors.xml b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values-v21/colors.xml new file mode 100644 index 000000000..a64641a9d --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values-v21/colors.xml @@ -0,0 +1,4 @@ + + + #3d5afe + \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values-v21/styles.xml b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values-v21/styles.xml new file mode 100644 index 000000000..408f3cc9f --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values-v21/styles.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values/colors.xml b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values/colors.xml new file mode 100644 index 000000000..74ad8829c --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values/colors.xml @@ -0,0 +1,7 @@ + + + #F5F5F5 + #757575 + #33B5E5 + #272734 + \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values/styles.xml b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values/styles.xml new file mode 100644 index 000000000..20a82f445 --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/Android/src/main/res/values/styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..1a8b0e645 --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 000000000..a1d7eb479 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png new file mode 100644 index 000000000..5797bdef4 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png new file mode 100644 index 000000000..a0bc5691b Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png new file mode 100644 index 000000000..851ac65fb Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png new file mode 100644 index 000000000..bb9b9e86d Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png new file mode 100644 index 000000000..ec609dcf3 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png new file mode 100644 index 000000000..a97180800 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png new file mode 100644 index 000000000..214800ee6 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png new file mode 100644 index 000000000..8554b88a8 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png new file mode 100644 index 000000000..a22626bae Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png new file mode 100644 index 000000000..a22626bae Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png new file mode 100644 index 000000000..492c9c8e8 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png new file mode 100644 index 000000000..9208113cf Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 000000000..24415e5a3 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png new file mode 100644 index 000000000..b3ef1bf0c Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/Contents.json b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json new file mode 100644 index 000000000..ab5edd0ca --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchScreen-AspectFill.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-AspectFill@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-AspectFill@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png new file mode 100644 index 000000000..c293f9c7a Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png new file mode 100644 index 000000000..233693a6e Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png new file mode 100644 index 000000000..a954cc8f4 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json new file mode 100644 index 000000000..444d7152d --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png new file mode 100644 index 000000000..a5a775a2b Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png new file mode 100644 index 000000000..154c19343 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png new file mode 100644 index 000000000..b2973b025 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/Info.plist b/e2e/dev-tools-drawer/app/App_Resources/iOS/Info.plist new file mode 100644 index 000000000..65b54cd66 --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/iOS/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiresFullScreen + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIStatusBarStyle + UIStatusBarStyleLightContent + UIViewControllerBasedStatusBarAppearance + + + diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/LaunchScreen.storyboard b/e2e/dev-tools-drawer/app/App_Resources/iOS/LaunchScreen.storyboard new file mode 100644 index 000000000..c4e5a3f39 --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/iOS/LaunchScreen.storyboard @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/build.xcconfig b/e2e/dev-tools-drawer/app/App_Resources/iOS/build.xcconfig new file mode 100644 index 000000000..62286bdba --- /dev/null +++ b/e2e/dev-tools-drawer/app/App_Resources/iOS/build.xcconfig @@ -0,0 +1,6 @@ +// You can add custom settings here +// for example you can uncomment the following line to force distribution code signing +// CODE_SIGN_IDENTITY = iPhone Distribution +// To build for device with XCode 8 you need to specify your development team. +// DEVELOPMENT_TEAM = YOUR_TEAM_ID; +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu.png new file mode 100644 index 000000000..82c675995 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu@2x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu@2x.png new file mode 100644 index 000000000..411a84051 Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu@2x.png differ diff --git a/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu@3x.png b/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu@3x.png new file mode 100644 index 000000000..e12b90cca Binary files /dev/null and b/e2e/dev-tools-drawer/app/App_Resources/iOS/navigation/menu@3x.png differ diff --git a/e2e/dev-tools-drawer/app/_app-common.scss b/e2e/dev-tools-drawer/app/_app-common.scss new file mode 100644 index 000000000..50da912e9 --- /dev/null +++ b/e2e/dev-tools-drawer/app/_app-common.scss @@ -0,0 +1,30 @@ +// Place any CSS rules you want to apply on both iOS and Android here. +// This is where the vast majority of your CSS code goes. +/* Font icon class*/ +.fa { + font-family: "FontAwesome"; +} +// Common page class +.page-content { + + .page-placeholder { + color: $page-icon-color; + font-size: $page-content-placeholder-font-size; + vertical-align: center; + horizontal-align: center; + } + + .page-icon { + font-size: 72; + vertical-align: top; + horizontal-align: center; + color: $page-icon-color; + margin-top: 20%; + } +} + +/* Action bar*/ +ActionBar .action-bar-title { + horizontal-align: center; +} + diff --git a/e2e/dev-tools-drawer/app/_app-variables.scss b/e2e/dev-tools-drawer/app/_app-variables.scss new file mode 100644 index 000000000..1dd19acfb --- /dev/null +++ b/e2e/dev-tools-drawer/app/_app-variables.scss @@ -0,0 +1,76 @@ +// Import the theme’s variables. If you’re using a color scheme +// other than “light”, switch the path to the alternative scheme, +// for example '~nativescript-theme-core/scss/dark'. +@import '~nativescript-theme-core/scss/light'; + +// Custom colors +$background-dark: #F8F8F8 !default; +$background-light: #FFFFFF !default; + +$blue-dark: #022734 !default; +$blue-light: #02556E !default; +$blue-50: rgba($blue-dark, 0.5) !default; +$blue-20: rgba($blue-dark, 0.2) !default; +$blue-10: rgba($blue-dark, 0.1) !default; + +$accent-dark: #3A53FF !default; +$accent-light: #4781FE !default; + +$success-dark: #06CE6A !default; +$success-light: #00E676 !default; + +$warning-dark: #f39c11 !default; +$warning-light: #F2C112 !default; + +$error-dark: #D84039 !default; +$error-light: #ED473F !default; + +$midnight-dark: #0F336D !default; +$midnight-light: #14418B !default; + +$night-dark: #023141 !default; +$night-light: #01526C !default; + +$page-icon-color: #D7D7D7 !default; + +// Sizes +$page-content-placeholder-font-size: 20; + +/** + * Theme variables overrides +**/ + +// Colors +$background: #fff; +$primary: lighten(#000, 13%); +$secondary: lighten(#000, 46%); +$disabled: lighten(#000, 62%); +$accent: $accent-dark; +$error: $error-light; + +// SideDrawer +$item-color-android : #737373; +$item-active-background: #F8F8F8; +$item-active-color: $accent; +$item-active-icon-color: $item-active-color; +$item-color-ios: $blue-dark; +$item-color-android: $blue-dark; + +$side-drawer-header-background: #fafafa; +$side-drawer-header-brand: #737373; +$side-drawer-background: #FFFFFF; + +// ActionBar +$ab-background: $accent; +$ab-color: $white; + +// Buttons +$btn-color-inverse: $white; +$btn-color: $accent; +$btn-color-secondary: darken($btn-color, 10%); +$btn-color-outline-highlighted: lighten($btn-color, 10%); + +//Text colors +$headings-color: $blue-dark; +$secondary: $blue-dark; +$text-color: $blue-dark; \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/app-root/_app-root-common.scss b/e2e/dev-tools-drawer/app/app-root/_app-root-common.scss new file mode 100644 index 000000000..42ee29b88 --- /dev/null +++ b/e2e/dev-tools-drawer/app/app-root/_app-root-common.scss @@ -0,0 +1,63 @@ +// Custom common variables +@import '../app-variables'; + +// Drawer navigation custom styles +$sidedrawer-header-image-size: 60; +$sidedrawer-header-image-offset-top: 20; +$sidedrawer-header-image-offset-bottom: 5; +$sidedrawer-list-item-offset-left: 15; +$sidedrawer-list-icon-offset: 10; +$sidedrawer-list-icon-size: 20; +.sidedrawer { + &.sidedrawer-left { + background-color: $ab-background; + + .sidedrawer-header-image { + color: $background-dark; + height: $sidedrawer-header-image-size; + width: $sidedrawer-header-image-size; + font-size: $sidedrawer-header-image-size; + padding: 0; + margin-bottom: $sidedrawer-header-image-offset-bottom; + margin-top: $sidedrawer-header-image-offset-top; + } + + .footnote { + color: rgba($ab-color, 0.5); + } + } + + .sidedrawer-header { + background-color: $ab-background; + + .sidedrawer-header-brand { + color: $ab-color; + } + } + + .sidedrawer-content { + background-color: $side-drawer-background; + } + + .sidedrawer-list-item { + padding-left: $sidedrawer-list-item-offset-left; + + Label { + vertical-align: center; + color: $blue-dark; + } + + .fa { + width: $sidedrawer-list-icon-size; + margin-right: $sidedrawer-list-icon-offset; + } + + &.selected { + background-color: $item-active-background; + + Label { + color: $item-active-color; + } + } + } +} \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/app-root/app-root-view-model.ts b/e2e/dev-tools-drawer/app/app-root/app-root-view-model.ts new file mode 100644 index 000000000..9f7b6e369 --- /dev/null +++ b/e2e/dev-tools-drawer/app/app-root/app-root-view-model.ts @@ -0,0 +1,15 @@ +import { Observable } from "tns-core-modules/data/observable"; + +import { ObservableProperty } from "../shared/observable-property-decorator"; +import { SelectedPageService } from "../shared/selected-page-service"; + +export class AppRootViewModel extends Observable { + @ObservableProperty() selectedPage: string; + + constructor() { + super(); + + SelectedPageService.getInstance().selectedPage$ + .subscribe((selectedPage: string) => this.selectedPage = selectedPage); + } +} diff --git a/e2e/dev-tools-drawer/app/app-root/app-root.android.scss b/e2e/dev-tools-drawer/app/app-root/app-root.android.scss new file mode 100644 index 000000000..bd86a8961 --- /dev/null +++ b/e2e/dev-tools-drawer/app/app-root/app-root.android.scss @@ -0,0 +1,3 @@ +@import 'app-root-common'; + +// Place any CSS rules you want to apply only on Android here \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/app-root/app-root.ios.scss b/e2e/dev-tools-drawer/app/app-root/app-root.ios.scss new file mode 100644 index 000000000..9bf5e5ccf --- /dev/null +++ b/e2e/dev-tools-drawer/app/app-root/app-root.ios.scss @@ -0,0 +1,3 @@ +@import 'app-root-common'; + +// Place any CSS rules you want to apply only on IOS here \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/app-root/app-root.ts b/e2e/dev-tools-drawer/app/app-root/app-root.ts new file mode 100644 index 000000000..679c8b44a --- /dev/null +++ b/e2e/dev-tools-drawer/app/app-root/app-root.ts @@ -0,0 +1,31 @@ +import { RadSideDrawer } from "nativescript-ui-sidedrawer"; +import * as app from "tns-core-modules/application"; +import { EventData } from "tns-core-modules/data/observable"; +import { topmost } from "tns-core-modules/ui/frame"; +import { GridLayout } from "tns-core-modules/ui/layouts/grid-layout"; + +import { AppRootViewModel } from "./app-root-view-model"; + +export function onLoaded(args: EventData): void { + const drawerComponent = args.object; + drawerComponent.bindingContext = new AppRootViewModel(); +} + +export function onNavigationItemTap(args: EventData): void { + const component = args.object; + const componentRoute = component.get("route"); + const componentTitle = component.get("title"); + const bindingContext = component.bindingContext; + + bindingContext.selectedPage = componentTitle; + + topmost().navigate({ + moduleName: componentRoute, + transition: { + name: "fade" + } + }); + + const drawerComponent = app.getRootView(); + drawerComponent.closeDrawer(); +} diff --git a/e2e/dev-tools-drawer/app/app-root/app-root.xml b/e2e/dev-tools-drawer/app/app-root/app-root.xml new file mode 100644 index 000000000..00a634523 --- /dev/null +++ b/e2e/dev-tools-drawer/app/app-root/app-root.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/app.android.scss b/e2e/dev-tools-drawer/app/app.android.scss new file mode 100644 index 000000000..e636f799e --- /dev/null +++ b/e2e/dev-tools-drawer/app/app.android.scss @@ -0,0 +1,14 @@ +// Import app variables +@import 'app-variables'; + +// Import the theme’s main ruleset - both index and platform specific. +@import '~nativescript-theme-core/scss/index'; +@import '~nativescript-theme-core/scss/platforms/index.android'; + +// Import common styles +@import 'app-common'; + +// Place any CSS rules you want to apply only on Android here +ActionBar .fa { + padding: 40px; +} \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/app.ios.scss b/e2e/dev-tools-drawer/app/app.ios.scss new file mode 100644 index 000000000..f056cd663 --- /dev/null +++ b/e2e/dev-tools-drawer/app/app.ios.scss @@ -0,0 +1,14 @@ +// Import app variables +@import 'app-variables'; + +// Import the theme’s main ruleset - both index and platform specific. +@import '~nativescript-theme-core/scss/index'; +@import '~nativescript-theme-core/scss/platforms/index.ios'; + +// Import common styles +@import 'app-common'; + +// Place any CSS rules you want to apply only on iOS here +ActionBar .fa { + padding: 40px 40px 40px 0; +} \ No newline at end of file diff --git a/e2e/dev-tools-drawer/app/app.ts b/e2e/dev-tools-drawer/app/app.ts new file mode 100644 index 000000000..2f6fb5a19 --- /dev/null +++ b/e2e/dev-tools-drawer/app/app.ts @@ -0,0 +1,13 @@ +/* +In NativeScript, the app.ts file is the entry point to your application. +You can use this file to perform app-level initialization, but the primary +purpose of the file is to pass control to the app’s first module. +*/ +import * as app from "tns-core-modules/application"; + +app.run({ moduleName: "app-root/app-root" }); + +/* +Do not place any code after the application has been started as it will not +be executed on iOS. +*/ diff --git a/e2e/dev-tools-drawer/app/browse/browse-page.ts b/e2e/dev-tools-drawer/app/browse/browse-page.ts new file mode 100644 index 000000000..929c31f50 --- /dev/null +++ b/e2e/dev-tools-drawer/app/browse/browse-page.ts @@ -0,0 +1,16 @@ +import { RadSideDrawer } from "nativescript-ui-sidedrawer"; +import * as app from "tns-core-modules/application"; +import { EventData } from "tns-core-modules/data/observable"; +import { NavigatedData, Page } from "tns-core-modules/ui/page"; + +import { BrowseViewModel } from "./browse-view-model"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object; + page.bindingContext = new BrowseViewModel(); +} + +export function onDrawerButtonTap(args: EventData) { + const sideDrawer = app.getRootView(); + sideDrawer.showDrawer(); +} diff --git a/e2e/dev-tools-drawer/app/browse/browse-page.xml b/e2e/dev-tools-drawer/app/browse/browse-page.xml new file mode 100644 index 000000000..f3d207be9 --- /dev/null +++ b/e2e/dev-tools-drawer/app/browse/browse-page.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools-drawer/app/browse/browse-view-model.ts b/e2e/dev-tools-drawer/app/browse/browse-view-model.ts new file mode 100644 index 000000000..0f900f3e5 --- /dev/null +++ b/e2e/dev-tools-drawer/app/browse/browse-view-model.ts @@ -0,0 +1,11 @@ +import { Observable } from "tns-core-modules/data/observable"; + +import { SelectedPageService } from "../shared/selected-page-service"; + +export class BrowseViewModel extends Observable { + constructor() { + super(); + + SelectedPageService.getInstance().updateSelectedPage("Browse"); + } +} diff --git a/e2e/dev-tools-drawer/app/featured/featured-page.ts b/e2e/dev-tools-drawer/app/featured/featured-page.ts new file mode 100644 index 000000000..73977d222 --- /dev/null +++ b/e2e/dev-tools-drawer/app/featured/featured-page.ts @@ -0,0 +1,16 @@ +import { RadSideDrawer } from "nativescript-ui-sidedrawer"; +import * as app from "tns-core-modules/application"; +import { EventData } from "tns-core-modules/data/observable"; +import { NavigatedData, Page } from "tns-core-modules/ui/page"; + +import { FeaturedViewModel } from "./featured-view-model"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object; + page.bindingContext = new FeaturedViewModel(); +} + +export function onDrawerButtonTap(args: EventData) { + const sideDrawer = app.getRootView(); + sideDrawer.showDrawer(); +} diff --git a/e2e/dev-tools-drawer/app/featured/featured-page.xml b/e2e/dev-tools-drawer/app/featured/featured-page.xml new file mode 100644 index 000000000..44ec489d4 --- /dev/null +++ b/e2e/dev-tools-drawer/app/featured/featured-page.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools-drawer/app/featured/featured-view-model.ts b/e2e/dev-tools-drawer/app/featured/featured-view-model.ts new file mode 100644 index 000000000..604ccec60 --- /dev/null +++ b/e2e/dev-tools-drawer/app/featured/featured-view-model.ts @@ -0,0 +1,11 @@ +import { Observable } from "tns-core-modules/data/observable"; + +import { SelectedPageService } from "../shared/selected-page-service"; + +export class FeaturedViewModel extends Observable { + constructor() { + super(); + + SelectedPageService.getInstance().updateSelectedPage("Featured"); + } +} diff --git a/e2e/dev-tools-drawer/app/fonts/FontAwesome.ttf b/e2e/dev-tools-drawer/app/fonts/FontAwesome.ttf new file mode 100644 index 000000000..35acda2fa Binary files /dev/null and b/e2e/dev-tools-drawer/app/fonts/FontAwesome.ttf differ diff --git a/e2e/dev-tools-drawer/app/home/home-page.ts b/e2e/dev-tools-drawer/app/home/home-page.ts new file mode 100644 index 000000000..275b186d8 --- /dev/null +++ b/e2e/dev-tools-drawer/app/home/home-page.ts @@ -0,0 +1,16 @@ +import { RadSideDrawer } from "nativescript-ui-sidedrawer"; +import * as app from "tns-core-modules/application"; +import { EventData } from "tns-core-modules/data/observable"; +import { NavigatedData, Page } from "tns-core-modules/ui/page"; + +import { HomeViewModel } from "./home-view-model"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object; + page.bindingContext = new HomeViewModel(); +} + +export function onDrawerButtonTap(args: EventData) { + const sideDrawer = app.getRootView(); + sideDrawer.showDrawer(); +} diff --git a/e2e/dev-tools-drawer/app/home/home-page.xml b/e2e/dev-tools-drawer/app/home/home-page.xml new file mode 100644 index 000000000..782482d6b --- /dev/null +++ b/e2e/dev-tools-drawer/app/home/home-page.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools-drawer/app/home/home-view-model.ts b/e2e/dev-tools-drawer/app/home/home-view-model.ts new file mode 100644 index 000000000..50a94bd4d --- /dev/null +++ b/e2e/dev-tools-drawer/app/home/home-view-model.ts @@ -0,0 +1,11 @@ +import { Observable } from "tns-core-modules/data/observable"; + +import { SelectedPageService } from "../shared/selected-page-service"; + +export class HomeViewModel extends Observable { + constructor() { + super(); + + SelectedPageService.getInstance().updateSelectedPage("Home"); + } +} diff --git a/e2e/dev-tools-drawer/app/package.json b/e2e/dev-tools-drawer/app/package.json new file mode 100644 index 000000000..c13032ce6 --- /dev/null +++ b/e2e/dev-tools-drawer/app/package.json @@ -0,0 +1,7 @@ +{ + "main": "app.js", + "android": { + "v8Flags": "--expose_gc", + "markingMode": "none" + } +} diff --git a/e2e/dev-tools-drawer/app/search/search-page.ts b/e2e/dev-tools-drawer/app/search/search-page.ts new file mode 100644 index 000000000..7917b4dad --- /dev/null +++ b/e2e/dev-tools-drawer/app/search/search-page.ts @@ -0,0 +1,16 @@ +import { RadSideDrawer } from "nativescript-ui-sidedrawer"; +import * as app from "tns-core-modules/application"; +import { EventData } from "tns-core-modules/data/observable"; +import { NavigatedData, Page } from "tns-core-modules/ui/page"; + +import { SearchViewModel } from "./search-view-model"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object; + page.bindingContext = new SearchViewModel(); +} + +export function onDrawerButtonTap(args: EventData) { + const sideDrawer = app.getRootView(); + sideDrawer.showDrawer(); +} diff --git a/e2e/dev-tools-drawer/app/search/search-page.xml b/e2e/dev-tools-drawer/app/search/search-page.xml new file mode 100644 index 000000000..ba9afcf86 --- /dev/null +++ b/e2e/dev-tools-drawer/app/search/search-page.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools-drawer/app/search/search-view-model.ts b/e2e/dev-tools-drawer/app/search/search-view-model.ts new file mode 100644 index 000000000..c8b706855 --- /dev/null +++ b/e2e/dev-tools-drawer/app/search/search-view-model.ts @@ -0,0 +1,11 @@ +import { Observable } from "tns-core-modules/data/observable"; + +import { SelectedPageService } from "../shared/selected-page-service"; + +export class SearchViewModel extends Observable { + constructor() { + super(); + + SelectedPageService.getInstance().updateSelectedPage("Search"); + } +} diff --git a/e2e/dev-tools-drawer/app/settings/settings-page.ts b/e2e/dev-tools-drawer/app/settings/settings-page.ts new file mode 100644 index 000000000..0d7a1bdb2 --- /dev/null +++ b/e2e/dev-tools-drawer/app/settings/settings-page.ts @@ -0,0 +1,16 @@ +import { RadSideDrawer } from "nativescript-ui-sidedrawer"; +import * as app from "tns-core-modules/application"; +import { EventData } from "tns-core-modules/data/observable"; +import { NavigatedData, Page } from "tns-core-modules/ui/page"; + +import { SettingsViewModel } from "./settings-view-model"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object; + page.bindingContext = new SettingsViewModel(); +} + +export function onDrawerButtonTap(args: EventData) { + const sideDrawer = app.getRootView(); + sideDrawer.showDrawer(); +} diff --git a/e2e/dev-tools-drawer/app/settings/settings-page.xml b/e2e/dev-tools-drawer/app/settings/settings-page.xml new file mode 100644 index 000000000..6fa9976b1 --- /dev/null +++ b/e2e/dev-tools-drawer/app/settings/settings-page.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools-drawer/app/settings/settings-view-model.ts b/e2e/dev-tools-drawer/app/settings/settings-view-model.ts new file mode 100644 index 000000000..88870321a --- /dev/null +++ b/e2e/dev-tools-drawer/app/settings/settings-view-model.ts @@ -0,0 +1,11 @@ +import { Observable } from "tns-core-modules/data/observable"; + +import { SelectedPageService } from "../shared/selected-page-service"; + +export class SettingsViewModel extends Observable { + constructor() { + super(); + + SelectedPageService.getInstance().updateSelectedPage("Settings"); + } +} diff --git a/e2e/dev-tools-drawer/app/shared/observable-property-decorator.ts b/e2e/dev-tools-drawer/app/shared/observable-property-decorator.ts new file mode 100644 index 000000000..34e2092c6 --- /dev/null +++ b/e2e/dev-tools-drawer/app/shared/observable-property-decorator.ts @@ -0,0 +1,21 @@ +import { Observable } from "tns-core-modules/data/observable"; + +export function ObservableProperty() { + return (target: Observable, propertyKey: string) => { + Object.defineProperty(target, propertyKey, { + get() { + return this["_" + propertyKey]; + }, + set(value) { + if (this["_" + propertyKey] === value) { + return; + } + + this["_" + propertyKey] = value; + this.notifyPropertyChange(propertyKey, value); + }, + enumerable: true, + configurable: true + }); + }; +} diff --git a/e2e/dev-tools-drawer/app/shared/selected-page-service.ts b/e2e/dev-tools-drawer/app/shared/selected-page-service.ts new file mode 100644 index 000000000..ce6063ead --- /dev/null +++ b/e2e/dev-tools-drawer/app/shared/selected-page-service.ts @@ -0,0 +1,31 @@ +import { BehaviorSubject, Observable } from "rxjs"; + +export class SelectedPageService { + static getInstance(): SelectedPageService { + return SelectedPageService._instance; + } + + private static _instance: SelectedPageService = new SelectedPageService(); + + selectedPage$: Observable; + + private _selectedPageSource: BehaviorSubject; + + constructor() { + if (SelectedPageService._instance) { + throw new Error("Use SelectedPageService.getInstance() instead of new."); + } + + SelectedPageService._instance = this; + + // Observable selectedPage source + this._selectedPageSource = new BehaviorSubject("Home"); + + // Observable selectedPage stream + this.selectedPage$ = this._selectedPageSource.asObservable(); + } + + updateSelectedPage(selectedPage: string) { + this._selectedPageSource.next(selectedPage); + } +} diff --git a/e2e/dev-tools-drawer/package.json b/e2e/dev-tools-drawer/package.json new file mode 100644 index 000000000..e36949b2b --- /dev/null +++ b/e2e/dev-tools-drawer/package.json @@ -0,0 +1,32 @@ +{ + "nativescript": { + "id": "org.nativescript.devtoolsdrawer", + "tns-android": { + "version": "6.1.2" + }, + "tns-ios": { + "version": "6.1.0" + } + }, + "description": "NativeScript Application", + "license": "SEE LICENSE IN ", + "repository": "", + "scripts": { + "lint": "tslint \"app/**/*.ts\"" + }, + "dependencies": { + "@nativescript/core": "file:../../nativescript-core", + "nativescript-theme-core": "~1.0.6", + "nativescript-ui-sidedrawer": "~7.0.0", + "rxjs": "^6.4.0", + "tns-core-modules": "file:../../dist/tns-core-modules" + }, + "devDependencies": { + "nativescript-dev-webpack": "next", + "node-sass": "^4.7.1", + "tslint": "~5.19.0", + "typescript": "~3.5.3" + }, + "gitHead": "1964ea9e8ca1a0518e0d6370781eedcf6c23db42", + "readme": "NativeScript Application" +} diff --git a/e2e/dev-tools-drawer/tsconfig.json b/e2e/dev-tools-drawer/tsconfig.json new file mode 100644 index 000000000..2d2b3225c --- /dev/null +++ b/e2e/dev-tools-drawer/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es5", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "noEmitHelpers": true, + "noEmitOnError": true, + "skipLibCheck": true, + "lib": [ + "es6", + "dom" + ], + "baseUrl": ".", + "paths": { + "~/*": [ + "app/*" + ], + "*": [ + "./node_modules/*" + ] + } + }, + "exclude": [ + "node_modules", + "platforms" + ] +} \ No newline at end of file diff --git a/e2e/dev-tools-drawer/tsfmt.json b/e2e/dev-tools-drawer/tsfmt.json new file mode 100644 index 000000000..f9e47f797 --- /dev/null +++ b/e2e/dev-tools-drawer/tsfmt.json @@ -0,0 +1,4 @@ +{ + "indentSize": 4, + "tabSize": 4 +} diff --git a/e2e/dev-tools-drawer/tslint.json b/e2e/dev-tools-drawer/tslint.json new file mode 100644 index 000000000..dfc7f9b2d --- /dev/null +++ b/e2e/dev-tools-drawer/tslint.json @@ -0,0 +1,43 @@ +{ + "extends": "tslint:latest", + "linterOptions": { + "exclude": [ + "app/*.d.ts" + ] + }, + "rules": { + "array-type": [true, "generic"], + "arrow-return-shorthand": true, + "deprecation": true, + "member-access": [true, "no-public"], + "newline-before-return": true, + "no-angle-bracket-type-assertion": false, + "no-consecutive-blank-lines": [true, 1], + "no-console": [false], + "no-implicit-dependencies": false, + "no-irregular-whitespace": true, + "no-submodule-imports": false, + "no-trailing-whitespace": [true, "ignore-blank-lines"], + "no-unnecessary-initializer": true, + "no-var-requires": false, + "object-literal-key-quotes": [true, "as-needed"], + "object-literal-sort-keys": false, + "one-variable-per-declaration": [true, "ignore-for-loop"], + "ordered-imports": false, + "prefer-conditional-expression": false, + "trailing-comma": [true, { + "multiline": "never", + "singleline": "never" + }], + "variable-name": [true, "ban-keywords", "check-format", "allow-leading-underscore"], + "whitespace": [true, + "check-branch", + "check-decl", + "check-operator", + "check-module", + "check-separator", + "check-type", + "check-preblock" + ] + } +} diff --git a/e2e/dev-tools-drawer/webpack.config.js b/e2e/dev-tools-drawer/webpack.config.js new file mode 100644 index 000000000..b50e4d93c --- /dev/null +++ b/e2e/dev-tools-drawer/webpack.config.js @@ -0,0 +1,293 @@ +const { join, relative, resolve, sep } = require("path"); + +const webpack = require("webpack"); +const nsWebpack = require("nativescript-dev-webpack"); +const nativescriptTarget = require("nativescript-dev-webpack/nativescript-target"); +const CleanWebpackPlugin = require("clean-webpack-plugin"); +const CopyWebpackPlugin = require("copy-webpack-plugin"); +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); +const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); +const { NativeScriptWorkerPlugin } = require("nativescript-worker-loader/NativeScriptWorkerPlugin"); +const TerserPlugin = require("terser-webpack-plugin"); +const hashSalt = Date.now().toString(); + +module.exports = env => { + // Add your custom Activities, Services and other Android app components here. + const appComponents = [ + "tns-core-modules/ui/frame", + "tns-core-modules/ui/frame/activity", + ]; + + const platform = env && (env.android && "android" || env.ios && "ios"); + if (!platform) { + throw new Error("You need to provide a target platform!"); + } + + const platforms = ["ios", "android"]; + const projectRoot = __dirname; + + // Default destination inside platforms//... + const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot)); + + const { + // The 'appPath' and 'appResourcesPath' values are fetched from + // the nsconfig.json configuration file. + appPath = "app", + appResourcesPath = "app/App_Resources", + + // You can provide the following flags when running 'tns run android|ios' + snapshot, // --env.snapshot + production, // --env.production + uglify, // --env.uglify + report, // --env.report + sourceMap, // --env.sourceMap + hiddenSourceMap, // --env.hiddenSourceMap + hmr, // --env.hmr, + unitTesting, // --env.unitTesting, + verbose, // --env.verbose + snapshotInDocker, // --env.snapshotInDocker + skipSnapshotTools // --env.skipSnapshotTools + } = env; + const isAnySourceMapEnabled = !!sourceMap || !!hiddenSourceMap; + const externals = nsWebpack.getConvertedExternals(env.externals); + + const appFullPath = resolve(projectRoot, appPath); + const appResourcesFullPath = resolve(projectRoot, appResourcesPath); + + const entryModule = nsWebpack.getEntryModule(appFullPath, platform); + const entryPath = `.${sep}${entryModule}.ts`; + const entries = { bundle: entryPath }; + + const tsConfigPath = resolve(projectRoot, "tsconfig.tns.json"); + + const areCoreModulesExternal = Array.isArray(env.externals) && env.externals.some(e => e.indexOf("tns-core-modules") > -1); + if (platform === "ios" && !areCoreModulesExternal) { + entries["tns_modules/tns-core-modules/inspector_modules"] = "inspector_modules"; + }; + + let sourceMapFilename = nsWebpack.getSourceMapFilename(hiddenSourceMap, __dirname, dist); + + const itemsToClean = [`${dist}/**/*`]; + if (platform === "android") { + itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "src", "main", "assets", "snapshots")}`); + itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "build", "configurations", "nativescript-android-snapshot")}`); + } + + nsWebpack.processAppComponents(appComponents, platform); + const config = { + mode: production ? "production" : "development", + context: appFullPath, + externals, + watchOptions: { + ignored: [ + appResourcesFullPath, + // Don't watch hidden files + "**/.*", + ] + }, + target: nativescriptTarget, + entry: entries, + output: { + pathinfo: false, + path: dist, + sourceMapFilename, + libraryTarget: "commonjs2", + filename: "[name].js", + globalObject: "global", + hashSalt + }, + resolve: { + extensions: [".ts", ".js", ".scss", ".css"], + // Resolve {N} system modules from tns-core-modules + modules: [ + resolve(__dirname, "node_modules/tns-core-modules"), + resolve(__dirname, "node_modules"), + "node_modules/tns-core-modules", + "node_modules", + ], + alias: { + '~': appFullPath + }, + // resolve symlinks to symlinked modules + symlinks: true + }, + resolveLoader: { + // don't resolve symlinks to symlinked loaders + symlinks: false + }, + node: { + // Disable node shims that conflict with NativeScript + "http": false, + "timers": false, + "setImmediate": false, + "fs": "empty", + "__dirname": false, + }, + devtool: hiddenSourceMap ? "hidden-source-map" : (sourceMap ? "inline-source-map" : "none"), + optimization: { + runtimeChunk: "single", + splitChunks: { + cacheGroups: { + vendor: { + name: "vendor", + chunks: "all", + test: (module, chunks) => { + const moduleName = module.nameForCondition ? module.nameForCondition() : ''; + return /[\\/]node_modules[\\/]/.test(moduleName) || + appComponents.some(comp => comp === moduleName); + + }, + enforce: true, + }, + } + }, + minimize: !!uglify, + minimizer: [ + new TerserPlugin({ + parallel: true, + cache: true, + sourceMap: isAnySourceMapEnabled, + terserOptions: { + output: { + comments: false, + semicolons: !isAnySourceMapEnabled + }, + compress: { + // The Android SBG has problems parsing the output + // when these options are enabled + 'collapse_vars': platform !== "android", + sequences: platform !== "android", + } + } + }) + ], + }, + module: { + rules: [ + { + include: join(appFullPath, entryPath), + use: [ + // Require all Android app components + platform === "android" && { + loader: "nativescript-dev-webpack/android-app-components-loader", + options: { modules: appComponents } + }, + + { + loader: "nativescript-dev-webpack/bundle-config-loader", + options: { + loadCss: !snapshot, // load the application css if in debug mode + unitTesting, + appFullPath, + projectRoot, + ignoredFiles: nsWebpack.getUserDefinedEntries(entries, platform) + } + }, + ].filter(loader => !!loader) + }, + + { + test: /\.(ts|css|scss|html|xml)$/, + use: "nativescript-dev-webpack/hmr/hot-loader" + }, + + { test: /\.(html|xml)$/, use: "nativescript-dev-webpack/xml-namespace-loader" }, + + { + test: /\.css$/, + use: { loader: "css-loader", options: { url: false } } + }, + + { + test: /\.scss$/, + use: [ + { loader: "css-loader", options: { url: false } }, + "sass-loader" + ] + }, + + { + test: /\.ts$/, + use: { + loader: "ts-loader", + options: { + configFile: tsConfigPath, + // https://github.com/TypeStrong/ts-loader/blob/ea2fcf925ec158d0a536d1e766adfec6567f5fb4/README.md#faster-builds + // https://github.com/TypeStrong/ts-loader/blob/ea2fcf925ec158d0a536d1e766adfec6567f5fb4/README.md#hot-module-replacement + transpileOnly: true, + allowTsInNodeModules: true, + compilerOptions: { + sourceMap: isAnySourceMapEnabled, + declaration: false + } + }, + } + }, + ] + }, + plugins: [ + // Define useful constants like TNS_WEBPACK + new webpack.DefinePlugin({ + "global.TNS_WEBPACK": "true", + "process": "global.process", + }), + // Remove all files from the out dir. + new CleanWebpackPlugin(itemsToClean, { verbose: !!verbose }), + // Copy assets to out dir. Add your own globs as needed. + new CopyWebpackPlugin([ + { from: { glob: "fonts/**" } }, + { from: { glob: "**/*.jpg" } }, + { from: { glob: "**/*.png" } }, + ], { ignore: [`${relative(appPath, appResourcesFullPath)}/**`] }), + new nsWebpack.GenerateNativeScriptEntryPointsPlugin("bundle"), + // For instructions on how to set up workers with webpack + // check out https://github.com/nativescript/worker-loader + new NativeScriptWorkerPlugin(), + new nsWebpack.PlatformFSPlugin({ + platform, + platforms, + }), + // Does IPC communication with the {N} CLI to notify events when running in watch mode. + new nsWebpack.WatchStateLoggerPlugin(), + // https://github.com/TypeStrong/ts-loader/blob/ea2fcf925ec158d0a536d1e766adfec6567f5fb4/README.md#faster-builds + // https://github.com/TypeStrong/ts-loader/blob/ea2fcf925ec158d0a536d1e766adfec6567f5fb4/README.md#hot-module-replacement + new ForkTsCheckerWebpackPlugin({ + tsconfig: tsConfigPath, + async: false, + useTypescriptIncrementalApi: true, + memoryLimit: 4096 + }) + ], + }; + + if (report) { + // Generate report files for bundles content + config.plugins.push(new BundleAnalyzerPlugin({ + analyzerMode: "static", + openAnalyzer: false, + generateStatsFile: true, + reportFilename: resolve(projectRoot, "report", `report.html`), + statsFilename: resolve(projectRoot, "report", `stats.json`), + })); + } + + if (snapshot) { + config.plugins.push(new nsWebpack.NativeScriptSnapshotPlugin({ + chunk: "vendor", + requireModules: [ + "tns-core-modules/bundle-entry-points", + ], + projectRoot, + webpackConfig: config, + snapshotInDocker, + skipSnapshotTools + })); + } + + if (hmr) { + config.plugins.push(new webpack.HotModuleReplacementPlugin()); + } + + + return config; +}; diff --git a/e2e/dev-tools/.editorconfig b/e2e/dev-tools/.editorconfig new file mode 100644 index 000000000..856527689 --- /dev/null +++ b/e2e/dev-tools/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true +charset = utf-8 + +[*.json] +indent_style = space +indent_size = 2 + +[*.ts] +indent_style = space +indent_size = 4 diff --git a/e2e/dev-tools/.gitignore b/e2e/dev-tools/.gitignore new file mode 100644 index 000000000..674e004de --- /dev/null +++ b/e2e/dev-tools/.gitignore @@ -0,0 +1,34 @@ +# NativeScript +hooks/ +node_modules/ +platforms/ + +# NativeScript Template +*.js.map +*.js +!webpack.config.js +*.css + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# General +.DS_Store +.AppleDouble +.LSOverride +.idea +.cloud +.project +tmp/ +typings/ + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json diff --git a/e2e/dev-tools/LICENSE b/e2e/dev-tools/LICENSE new file mode 100644 index 000000000..4794b436d --- /dev/null +++ b/e2e/dev-tools/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright (c) 2015-2019 Progress Software Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/e2e/dev-tools/app/App_Resources/Android/app.gradle b/e2e/dev-tools/app/App_Resources/Android/app.gradle new file mode 100644 index 000000000..bb4842141 --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/Android/app.gradle @@ -0,0 +1,20 @@ +// Add your native dependencies here: + +// Uncomment to add recyclerview-v7 dependency +//dependencies { +// implementation 'com.android.support:recyclerview-v7:+' +//} + +// If you want to add something to be applied before applying plugins' include.gradle files +// e.g. project.ext.googlePlayServicesVersion = "15.0.1" +// create a file named before-plugins.gradle in the current directory and place it there + +android { + defaultConfig { + minSdkVersion 17 + generatedDensities = [] + } + aaptOptions { + additionalParameters "--no-version-vectors" + } +} diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/AndroidManifest.xml b/e2e/dev-tools/app/App_Resources/Android/src/main/AndroidManifest.xml new file mode 100644 index 000000000..1bd256dd9 --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/Android/src/main/AndroidManifest.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png new file mode 100644 index 000000000..eb381c258 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/background.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png new file mode 100644 index 000000000..9cde84cd5 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/icon.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png new file mode 100644 index 000000000..5218f4c90 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-hdpi/logo.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png new file mode 100644 index 000000000..748b2adf5 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/background.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png new file mode 100644 index 000000000..4d6a674b3 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/icon.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png new file mode 100644 index 000000000..b9e102a76 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-ldpi/logo.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png new file mode 100644 index 000000000..efeaf2907 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/background.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png new file mode 100644 index 000000000..92ccc85a6 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/icon.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png new file mode 100644 index 000000000..626338766 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-mdpi/logo.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml new file mode 100644 index 000000000..ada77f92c --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-nodpi/splash_screen.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png new file mode 100644 index 000000000..612bbd072 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/background.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png new file mode 100644 index 000000000..8bcde6277 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/icon.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png new file mode 100644 index 000000000..ad8ee2f4b Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xhdpi/logo.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png new file mode 100644 index 000000000..0fa88e235 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/background.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png new file mode 100644 index 000000000..9d81c85dc Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/icon.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png new file mode 100644 index 000000000..668327832 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxhdpi/logo.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png new file mode 100644 index 000000000..c650f6438 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/background.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png new file mode 100644 index 000000000..9a34d0d43 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/icon.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png new file mode 100644 index 000000000..fa6331c8d Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/Android/src/main/res/drawable-xxxhdpi/logo.png differ diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/values-v21/colors.xml b/e2e/dev-tools/app/App_Resources/Android/src/main/res/values-v21/colors.xml new file mode 100644 index 000000000..a64641a9d --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/Android/src/main/res/values-v21/colors.xml @@ -0,0 +1,4 @@ + + + #3d5afe + \ No newline at end of file diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/values-v21/styles.xml b/e2e/dev-tools/app/App_Resources/Android/src/main/res/values-v21/styles.xml new file mode 100644 index 000000000..408f3cc9f --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/Android/src/main/res/values-v21/styles.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/values/colors.xml b/e2e/dev-tools/app/App_Resources/Android/src/main/res/values/colors.xml new file mode 100644 index 000000000..74ad8829c --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/Android/src/main/res/values/colors.xml @@ -0,0 +1,7 @@ + + + #F5F5F5 + #757575 + #33B5E5 + #272734 + \ No newline at end of file diff --git a/e2e/dev-tools/app/App_Resources/Android/src/main/res/values/styles.xml b/e2e/dev-tools/app/App_Resources/Android/src/main/res/values/styles.xml new file mode 100644 index 000000000..20a82f445 --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/Android/src/main/res/values/styles.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..1a8b0e645 --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "icon-20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "icon-29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "icon-40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "icon-60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "icon-20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "icon-29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "icon-40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "icon-76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "icon-83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "icon-1024.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png new file mode 100644 index 000000000..a1d7eb479 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png new file mode 100644 index 000000000..5797bdef4 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png new file mode 100644 index 000000000..a0bc5691b Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png new file mode 100644 index 000000000..851ac65fb Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png new file mode 100644 index 000000000..bb9b9e86d Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png new file mode 100644 index 000000000..ec609dcf3 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png new file mode 100644 index 000000000..a97180800 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png new file mode 100644 index 000000000..214800ee6 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png new file mode 100644 index 000000000..8554b88a8 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png new file mode 100644 index 000000000..a22626bae Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png new file mode 100644 index 000000000..a22626bae Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png new file mode 100644 index 000000000..492c9c8e8 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png new file mode 100644 index 000000000..9208113cf Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png new file mode 100644 index 000000000..24415e5a3 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png new file mode 100644 index 000000000..b3ef1bf0c Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/Contents.json b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json new file mode 100644 index 000000000..ab5edd0ca --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchScreen-AspectFill.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-AspectFill@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-AspectFill@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png new file mode 100644 index 000000000..c293f9c7a Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png new file mode 100644 index 000000000..233693a6e Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@2x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png new file mode 100644 index 000000000..a954cc8f4 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.AspectFill.imageset/LaunchScreen-AspectFill@3x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json new file mode 100644 index 000000000..444d7152d --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchScreen-Center@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png new file mode 100644 index 000000000..a5a775a2b Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png new file mode 100644 index 000000000..154c19343 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@2x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png new file mode 100644 index 000000000..b2973b025 Binary files /dev/null and b/e2e/dev-tools/app/App_Resources/iOS/Assets.xcassets/LaunchScreen.Center.imageset/LaunchScreen-Center@3x.png differ diff --git a/e2e/dev-tools/app/App_Resources/iOS/Info.plist b/e2e/dev-tools/app/App_Resources/iOS/Info.plist new file mode 100644 index 000000000..65b54cd66 --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/iOS/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIRequiresFullScreen + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIStatusBarStyle + UIStatusBarStyleLightContent + UIViewControllerBasedStatusBarAppearance + + + diff --git a/e2e/dev-tools/app/App_Resources/iOS/LaunchScreen.storyboard b/e2e/dev-tools/app/App_Resources/iOS/LaunchScreen.storyboard new file mode 100644 index 000000000..c4e5a3f39 --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/iOS/LaunchScreen.storyboard @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools/app/App_Resources/iOS/build.xcconfig b/e2e/dev-tools/app/App_Resources/iOS/build.xcconfig new file mode 100644 index 000000000..62286bdba --- /dev/null +++ b/e2e/dev-tools/app/App_Resources/iOS/build.xcconfig @@ -0,0 +1,6 @@ +// You can add custom settings here +// for example you can uncomment the following line to force distribution code signing +// CODE_SIGN_IDENTITY = iPhone Distribution +// To build for device with XCode 8 you need to specify your development team. +// DEVELOPMENT_TEAM = YOUR_TEAM_ID; +ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; diff --git a/e2e/dev-tools/app/_app-common.scss b/e2e/dev-tools/app/_app-common.scss new file mode 100644 index 000000000..1f48bcb60 --- /dev/null +++ b/e2e/dev-tools/app/_app-common.scss @@ -0,0 +1,49 @@ +// Place any CSS rules you want to apply on both iOS and Android here. +// This is where the vast majority of your CSS code goes. +// Font icon class +.fa { + font-family: "FontAwesome"; +} + +.t-36 { + font-size: 36; +} + +// Common page class +.page-content { + .page-placeholder { + color: $page-icon-color; + font-size: $page-content-placeholder-font-size; + vertical-align: center; + horizontal-align: center; + } + + .page-icon { + font-size: 72; + vertical-align: top; + horizontal-align: center; + color: $page-icon-color; + margin-top: 20%; + } +} + +//Action bar +ActionBar .action-bar-title { + horizontal-align: center; +} + +TabStripItem Label { + color: $blue-dark; +} + +TabStripItem:active Label { + color: $item-active-color; +} + +TabStripItem Image { + color: $blue-dark; +} + +TabStripItem:active Image { + color: $item-active-color; +} diff --git a/e2e/dev-tools/app/_app-variables.scss b/e2e/dev-tools/app/_app-variables.scss new file mode 100644 index 000000000..1dd19acfb --- /dev/null +++ b/e2e/dev-tools/app/_app-variables.scss @@ -0,0 +1,76 @@ +// Import the theme’s variables. If you’re using a color scheme +// other than “light”, switch the path to the alternative scheme, +// for example '~nativescript-theme-core/scss/dark'. +@import '~nativescript-theme-core/scss/light'; + +// Custom colors +$background-dark: #F8F8F8 !default; +$background-light: #FFFFFF !default; + +$blue-dark: #022734 !default; +$blue-light: #02556E !default; +$blue-50: rgba($blue-dark, 0.5) !default; +$blue-20: rgba($blue-dark, 0.2) !default; +$blue-10: rgba($blue-dark, 0.1) !default; + +$accent-dark: #3A53FF !default; +$accent-light: #4781FE !default; + +$success-dark: #06CE6A !default; +$success-light: #00E676 !default; + +$warning-dark: #f39c11 !default; +$warning-light: #F2C112 !default; + +$error-dark: #D84039 !default; +$error-light: #ED473F !default; + +$midnight-dark: #0F336D !default; +$midnight-light: #14418B !default; + +$night-dark: #023141 !default; +$night-light: #01526C !default; + +$page-icon-color: #D7D7D7 !default; + +// Sizes +$page-content-placeholder-font-size: 20; + +/** + * Theme variables overrides +**/ + +// Colors +$background: #fff; +$primary: lighten(#000, 13%); +$secondary: lighten(#000, 46%); +$disabled: lighten(#000, 62%); +$accent: $accent-dark; +$error: $error-light; + +// SideDrawer +$item-color-android : #737373; +$item-active-background: #F8F8F8; +$item-active-color: $accent; +$item-active-icon-color: $item-active-color; +$item-color-ios: $blue-dark; +$item-color-android: $blue-dark; + +$side-drawer-header-background: #fafafa; +$side-drawer-header-brand: #737373; +$side-drawer-background: #FFFFFF; + +// ActionBar +$ab-background: $accent; +$ab-color: $white; + +// Buttons +$btn-color-inverse: $white; +$btn-color: $accent; +$btn-color-secondary: darken($btn-color, 10%); +$btn-color-outline-highlighted: lighten($btn-color, 10%); + +//Text colors +$headings-color: $blue-dark; +$secondary: $blue-dark; +$text-color: $blue-dark; \ No newline at end of file diff --git a/e2e/dev-tools/app/app-root.xml b/e2e/dev-tools/app/app-root.xml new file mode 100644 index 000000000..444cf333a --- /dev/null +++ b/e2e/dev-tools/app/app-root.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/e2e/dev-tools/app/app.android.scss b/e2e/dev-tools/app/app.android.scss new file mode 100644 index 000000000..41ed9c87b --- /dev/null +++ b/e2e/dev-tools/app/app.android.scss @@ -0,0 +1,16 @@ +// Import app variables +@import 'app-variables'; + +// Import the theme’s main ruleset - both index and platform specific. +@import '~nativescript-theme-core/scss/index'; +@import '~nativescript-theme-core/scss/platforms/index.android'; + +// Import common styles +@import 'app-common'; + +// Place any CSS rules you want to apply only on Android here +TabStripItem Label { + text-transform: uppercase; + font-weight: bold; +} + diff --git a/e2e/dev-tools/app/app.ios.scss b/e2e/dev-tools/app/app.ios.scss new file mode 100644 index 000000000..5e7f30f85 --- /dev/null +++ b/e2e/dev-tools/app/app.ios.scss @@ -0,0 +1,11 @@ +// Import app variables +@import 'app-variables'; + +// Import the theme’s main ruleset - both index and platform specific. +@import '~nativescript-theme-core/scss/index'; +@import '~nativescript-theme-core/scss/platforms/index.ios'; + +// Import common styles +@import 'app-common'; + +// Place any CSS rules you want to apply only on iOS here diff --git a/e2e/dev-tools/app/app.ts b/e2e/dev-tools/app/app.ts new file mode 100644 index 000000000..583c9c8f2 --- /dev/null +++ b/e2e/dev-tools/app/app.ts @@ -0,0 +1,13 @@ +/* +In NativeScript, the app.ts file is the entry point to your application. +You can use this file to perform app-level initialization, but the primary +purpose of the file is to pass control to the app’s first module. +*/ +import * as app from "tns-core-modules/application"; + +app.run({ moduleName: "app-root" }); + +/* +Do not place any code after the application has been started as it will not +be executed on iOS. +*/ diff --git a/e2e/dev-tools/app/browse/browse-page.ts b/e2e/dev-tools/app/browse/browse-page.ts new file mode 100644 index 000000000..5b061c34c --- /dev/null +++ b/e2e/dev-tools/app/browse/browse-page.ts @@ -0,0 +1,7 @@ +import { NavigatedData, Page } from "tns-core-modules/ui/page"; +import { BrowseViewModel } from "./browse-view-model"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object; + page.bindingContext = new BrowseViewModel(); +} diff --git a/e2e/dev-tools/app/browse/browse-page.xml b/e2e/dev-tools/app/browse/browse-page.xml new file mode 100644 index 000000000..6750b2b05 --- /dev/null +++ b/e2e/dev-tools/app/browse/browse-page.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/dev-tools/app/browse/browse-view-model.ts b/e2e/dev-tools/app/browse/browse-view-model.ts new file mode 100644 index 000000000..15cc7bd2c --- /dev/null +++ b/e2e/dev-tools/app/browse/browse-view-model.ts @@ -0,0 +1,7 @@ +import { Observable } from "tns-core-modules/data/observable"; + +export class BrowseViewModel extends Observable { + constructor() { + super(); + } +} diff --git a/e2e/dev-tools/app/fonts/FontAwesome.ttf b/e2e/dev-tools/app/fonts/FontAwesome.ttf new file mode 100644 index 000000000..35acda2fa Binary files /dev/null and b/e2e/dev-tools/app/fonts/FontAwesome.ttf differ diff --git a/e2e/dev-tools/app/home/home-item-detail/home-item-detail-page.ts b/e2e/dev-tools/app/home/home-item-detail/home-item-detail-page.ts new file mode 100644 index 000000000..bb8492264 --- /dev/null +++ b/e2e/dev-tools/app/home/home-item-detail/home-item-detail-page.ts @@ -0,0 +1,16 @@ +import { EventData, View } from "tns-core-modules/ui/core/view"; +import { NavigatedData, Page } from "tns-core-modules/ui/page"; +import { Item } from "../shared/item"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object as Page; + const item = args.context as Item; + page.bindingContext = item; +} + +export function onBackButtonTap(args: EventData) { + const view = args.object as View; + const page = view.page as Page; + + page.frame.goBack(); +} diff --git a/e2e/dev-tools/app/home/home-item-detail/home-item-detail-page.xml b/e2e/dev-tools/app/home/home-item-detail/home-item-detail-page.xml new file mode 100644 index 000000000..af2780da2 --- /dev/null +++ b/e2e/dev-tools/app/home/home-item-detail/home-item-detail-page.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/dev-tools/app/home/home-items-page.ts b/e2e/dev-tools/app/home/home-items-page.ts new file mode 100644 index 000000000..f9e6e8101 --- /dev/null +++ b/e2e/dev-tools/app/home/home-items-page.ts @@ -0,0 +1,28 @@ +import { View } from "tns-core-modules/ui/core/view"; +import { ItemEventData } from "tns-core-modules/ui/list-view"; +import { NavigatedData, Page } from "tns-core-modules/ui/page"; + +import { HomeViewModel } from "./home-view-model"; +import { Item } from "./shared/item"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object; + page.bindingContext = new HomeViewModel(); +} + +export function onItemTap(args: ItemEventData) { + const view = args.view; + const page = view.page; + const tappedItem = view.bindingContext; + + page.frame.navigate({ + moduleName: "home/home-item-detail/home-item-detail-page", + context: tappedItem, + animated: true, + transition: { + name: "slide", + duration: 200, + curve: "ease" + } + }); +} diff --git a/e2e/dev-tools/app/home/home-items-page.xml b/e2e/dev-tools/app/home/home-items-page.xml new file mode 100644 index 000000000..fc36dd3ca --- /dev/null +++ b/e2e/dev-tools/app/home/home-items-page.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/dev-tools/app/home/home-view-model.ts b/e2e/dev-tools/app/home/home-view-model.ts new file mode 100644 index 000000000..7b26465ca --- /dev/null +++ b/e2e/dev-tools/app/home/home-view-model.ts @@ -0,0 +1,77 @@ +import { Observable } from "tns-core-modules/data/observable"; +import { Item } from "./shared/item"; + +export class HomeViewModel extends Observable { + items: Array; + + constructor() { + super(); + + this.items = new Array( + { + name: "Item 1", + description: "Description for Item 1" + }, + { + name: "Item 2", + description: "Description for Item 2" + }, + { + name: "Item 3", + description: "Description for Item 3" + }, + { + name: "Item 4", + description: "Description for Item 4" + }, + { + name: "Item 5", + description: "Description for Item 5" + }, + { + name: "Item 6", + description: "Description for Item 6" + }, + { + name: "Item 7", + description: "Description for Item 7" + }, + { + name: "Item 8", + description: "Description for Item 8" + }, + { + name: "Item 9", + description: "Description for Item 9" + }, + { + name: "Item 10", + description: "Description for Item 10" + }, + { + name: "Item 11", + description: "Description for Item 11" + }, + { + name: "Item 12", + description: "Description for Item 12" + }, + { + name: "Item 13", + description: "Description for Item 13" + }, + { + name: "Item 14", + description: "Description for Item 14" + }, + { + name: "Item 15", + description: "Description for Item 15" + }, + { + name: "Item 16", + description: "Description for Item 16" + } + ); + } +} diff --git a/e2e/dev-tools/app/home/shared/item.ts b/e2e/dev-tools/app/home/shared/item.ts new file mode 100644 index 000000000..d1c76646b --- /dev/null +++ b/e2e/dev-tools/app/home/shared/item.ts @@ -0,0 +1,4 @@ +export interface Item { + name: string; + description: string; +} diff --git a/e2e/dev-tools/app/package.json b/e2e/dev-tools/app/package.json new file mode 100644 index 000000000..c13032ce6 --- /dev/null +++ b/e2e/dev-tools/app/package.json @@ -0,0 +1,7 @@ +{ + "main": "app.js", + "android": { + "v8Flags": "--expose_gc", + "markingMode": "none" + } +} diff --git a/e2e/dev-tools/app/search/search-page.ts b/e2e/dev-tools/app/search/search-page.ts new file mode 100644 index 000000000..eac76c847 --- /dev/null +++ b/e2e/dev-tools/app/search/search-page.ts @@ -0,0 +1,7 @@ +import { NavigatedData, Page } from "tns-core-modules/ui/page"; +import { SearchViewModel } from "./search-view-model"; + +export function onNavigatingTo(args: NavigatedData) { + const page = args.object; + page.bindingContext = new SearchViewModel(); +} diff --git a/e2e/dev-tools/app/search/search-page.xml b/e2e/dev-tools/app/search/search-page.xml new file mode 100644 index 000000000..7279b93ef --- /dev/null +++ b/e2e/dev-tools/app/search/search-page.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + diff --git a/e2e/dev-tools/app/search/search-view-model.ts b/e2e/dev-tools/app/search/search-view-model.ts new file mode 100644 index 000000000..bc1f10bc9 --- /dev/null +++ b/e2e/dev-tools/app/search/search-view-model.ts @@ -0,0 +1,7 @@ +import { Observable } from "tns-core-modules/data/observable"; + +export class SearchViewModel extends Observable { + constructor() { + super(); + } +} diff --git a/e2e/dev-tools/package.json b/e2e/dev-tools/package.json new file mode 100644 index 000000000..10e0b6cca --- /dev/null +++ b/e2e/dev-tools/package.json @@ -0,0 +1,30 @@ +{ + "nativescript": { + "id": "org.nativescript.devtools", + "tns-android": { + "version": "6.1.2" + }, + "tns-ios": { + "version": "6.1.0" + } + }, + "description": "NativeScript Application", + "license": "SEE LICENSE IN ", + "repository": "", + "scripts": { + "lint": "tslint \"app/**/*.ts\"" + }, + "dependencies": { + "@nativescript/core": "file:../../nativescript-core", + "tns-core-modules": "file:../../dist/tns-core-modules" + }, + "devDependencies": { + "nativescript-dev-webpack": "next", + "tns-platform-declarations": "file:../../tns-platform-declarations", + "node-sass": "^4.7.1", + "tslint": "~5.19.0", + "typescript": "~3.5.3" + }, + "gitHead": "1964ea9e8ca1a0518e0d6370781eedcf6c23db42", + "readme": "NativeScript Application" +} diff --git a/e2e/dev-tools/tsconfig.json b/e2e/dev-tools/tsconfig.json new file mode 100644 index 000000000..2d2b3225c --- /dev/null +++ b/e2e/dev-tools/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "es5", + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "noEmitHelpers": true, + "noEmitOnError": true, + "skipLibCheck": true, + "lib": [ + "es6", + "dom" + ], + "baseUrl": ".", + "paths": { + "~/*": [ + "app/*" + ], + "*": [ + "./node_modules/*" + ] + } + }, + "exclude": [ + "node_modules", + "platforms" + ] +} \ No newline at end of file diff --git a/e2e/dev-tools/tsfmt.json b/e2e/dev-tools/tsfmt.json new file mode 100644 index 000000000..f9e47f797 --- /dev/null +++ b/e2e/dev-tools/tsfmt.json @@ -0,0 +1,4 @@ +{ + "indentSize": 4, + "tabSize": 4 +} diff --git a/e2e/dev-tools/tslint.json b/e2e/dev-tools/tslint.json new file mode 100644 index 000000000..dfc7f9b2d --- /dev/null +++ b/e2e/dev-tools/tslint.json @@ -0,0 +1,43 @@ +{ + "extends": "tslint:latest", + "linterOptions": { + "exclude": [ + "app/*.d.ts" + ] + }, + "rules": { + "array-type": [true, "generic"], + "arrow-return-shorthand": true, + "deprecation": true, + "member-access": [true, "no-public"], + "newline-before-return": true, + "no-angle-bracket-type-assertion": false, + "no-consecutive-blank-lines": [true, 1], + "no-console": [false], + "no-implicit-dependencies": false, + "no-irregular-whitespace": true, + "no-submodule-imports": false, + "no-trailing-whitespace": [true, "ignore-blank-lines"], + "no-unnecessary-initializer": true, + "no-var-requires": false, + "object-literal-key-quotes": [true, "as-needed"], + "object-literal-sort-keys": false, + "one-variable-per-declaration": [true, "ignore-for-loop"], + "ordered-imports": false, + "prefer-conditional-expression": false, + "trailing-comma": [true, { + "multiline": "never", + "singleline": "never" + }], + "variable-name": [true, "ban-keywords", "check-format", "allow-leading-underscore"], + "whitespace": [true, + "check-branch", + "check-decl", + "check-operator", + "check-module", + "check-separator", + "check-type", + "check-preblock" + ] + } +} diff --git a/e2e/dev-tools/webpack.config.js b/e2e/dev-tools/webpack.config.js new file mode 100644 index 000000000..b50e4d93c --- /dev/null +++ b/e2e/dev-tools/webpack.config.js @@ -0,0 +1,293 @@ +const { join, relative, resolve, sep } = require("path"); + +const webpack = require("webpack"); +const nsWebpack = require("nativescript-dev-webpack"); +const nativescriptTarget = require("nativescript-dev-webpack/nativescript-target"); +const CleanWebpackPlugin = require("clean-webpack-plugin"); +const CopyWebpackPlugin = require("copy-webpack-plugin"); +const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); +const { BundleAnalyzerPlugin } = require("webpack-bundle-analyzer"); +const { NativeScriptWorkerPlugin } = require("nativescript-worker-loader/NativeScriptWorkerPlugin"); +const TerserPlugin = require("terser-webpack-plugin"); +const hashSalt = Date.now().toString(); + +module.exports = env => { + // Add your custom Activities, Services and other Android app components here. + const appComponents = [ + "tns-core-modules/ui/frame", + "tns-core-modules/ui/frame/activity", + ]; + + const platform = env && (env.android && "android" || env.ios && "ios"); + if (!platform) { + throw new Error("You need to provide a target platform!"); + } + + const platforms = ["ios", "android"]; + const projectRoot = __dirname; + + // Default destination inside platforms//... + const dist = resolve(projectRoot, nsWebpack.getAppPath(platform, projectRoot)); + + const { + // The 'appPath' and 'appResourcesPath' values are fetched from + // the nsconfig.json configuration file. + appPath = "app", + appResourcesPath = "app/App_Resources", + + // You can provide the following flags when running 'tns run android|ios' + snapshot, // --env.snapshot + production, // --env.production + uglify, // --env.uglify + report, // --env.report + sourceMap, // --env.sourceMap + hiddenSourceMap, // --env.hiddenSourceMap + hmr, // --env.hmr, + unitTesting, // --env.unitTesting, + verbose, // --env.verbose + snapshotInDocker, // --env.snapshotInDocker + skipSnapshotTools // --env.skipSnapshotTools + } = env; + const isAnySourceMapEnabled = !!sourceMap || !!hiddenSourceMap; + const externals = nsWebpack.getConvertedExternals(env.externals); + + const appFullPath = resolve(projectRoot, appPath); + const appResourcesFullPath = resolve(projectRoot, appResourcesPath); + + const entryModule = nsWebpack.getEntryModule(appFullPath, platform); + const entryPath = `.${sep}${entryModule}.ts`; + const entries = { bundle: entryPath }; + + const tsConfigPath = resolve(projectRoot, "tsconfig.tns.json"); + + const areCoreModulesExternal = Array.isArray(env.externals) && env.externals.some(e => e.indexOf("tns-core-modules") > -1); + if (platform === "ios" && !areCoreModulesExternal) { + entries["tns_modules/tns-core-modules/inspector_modules"] = "inspector_modules"; + }; + + let sourceMapFilename = nsWebpack.getSourceMapFilename(hiddenSourceMap, __dirname, dist); + + const itemsToClean = [`${dist}/**/*`]; + if (platform === "android") { + itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "src", "main", "assets", "snapshots")}`); + itemsToClean.push(`${join(projectRoot, "platforms", "android", "app", "build", "configurations", "nativescript-android-snapshot")}`); + } + + nsWebpack.processAppComponents(appComponents, platform); + const config = { + mode: production ? "production" : "development", + context: appFullPath, + externals, + watchOptions: { + ignored: [ + appResourcesFullPath, + // Don't watch hidden files + "**/.*", + ] + }, + target: nativescriptTarget, + entry: entries, + output: { + pathinfo: false, + path: dist, + sourceMapFilename, + libraryTarget: "commonjs2", + filename: "[name].js", + globalObject: "global", + hashSalt + }, + resolve: { + extensions: [".ts", ".js", ".scss", ".css"], + // Resolve {N} system modules from tns-core-modules + modules: [ + resolve(__dirname, "node_modules/tns-core-modules"), + resolve(__dirname, "node_modules"), + "node_modules/tns-core-modules", + "node_modules", + ], + alias: { + '~': appFullPath + }, + // resolve symlinks to symlinked modules + symlinks: true + }, + resolveLoader: { + // don't resolve symlinks to symlinked loaders + symlinks: false + }, + node: { + // Disable node shims that conflict with NativeScript + "http": false, + "timers": false, + "setImmediate": false, + "fs": "empty", + "__dirname": false, + }, + devtool: hiddenSourceMap ? "hidden-source-map" : (sourceMap ? "inline-source-map" : "none"), + optimization: { + runtimeChunk: "single", + splitChunks: { + cacheGroups: { + vendor: { + name: "vendor", + chunks: "all", + test: (module, chunks) => { + const moduleName = module.nameForCondition ? module.nameForCondition() : ''; + return /[\\/]node_modules[\\/]/.test(moduleName) || + appComponents.some(comp => comp === moduleName); + + }, + enforce: true, + }, + } + }, + minimize: !!uglify, + minimizer: [ + new TerserPlugin({ + parallel: true, + cache: true, + sourceMap: isAnySourceMapEnabled, + terserOptions: { + output: { + comments: false, + semicolons: !isAnySourceMapEnabled + }, + compress: { + // The Android SBG has problems parsing the output + // when these options are enabled + 'collapse_vars': platform !== "android", + sequences: platform !== "android", + } + } + }) + ], + }, + module: { + rules: [ + { + include: join(appFullPath, entryPath), + use: [ + // Require all Android app components + platform === "android" && { + loader: "nativescript-dev-webpack/android-app-components-loader", + options: { modules: appComponents } + }, + + { + loader: "nativescript-dev-webpack/bundle-config-loader", + options: { + loadCss: !snapshot, // load the application css if in debug mode + unitTesting, + appFullPath, + projectRoot, + ignoredFiles: nsWebpack.getUserDefinedEntries(entries, platform) + } + }, + ].filter(loader => !!loader) + }, + + { + test: /\.(ts|css|scss|html|xml)$/, + use: "nativescript-dev-webpack/hmr/hot-loader" + }, + + { test: /\.(html|xml)$/, use: "nativescript-dev-webpack/xml-namespace-loader" }, + + { + test: /\.css$/, + use: { loader: "css-loader", options: { url: false } } + }, + + { + test: /\.scss$/, + use: [ + { loader: "css-loader", options: { url: false } }, + "sass-loader" + ] + }, + + { + test: /\.ts$/, + use: { + loader: "ts-loader", + options: { + configFile: tsConfigPath, + // https://github.com/TypeStrong/ts-loader/blob/ea2fcf925ec158d0a536d1e766adfec6567f5fb4/README.md#faster-builds + // https://github.com/TypeStrong/ts-loader/blob/ea2fcf925ec158d0a536d1e766adfec6567f5fb4/README.md#hot-module-replacement + transpileOnly: true, + allowTsInNodeModules: true, + compilerOptions: { + sourceMap: isAnySourceMapEnabled, + declaration: false + } + }, + } + }, + ] + }, + plugins: [ + // Define useful constants like TNS_WEBPACK + new webpack.DefinePlugin({ + "global.TNS_WEBPACK": "true", + "process": "global.process", + }), + // Remove all files from the out dir. + new CleanWebpackPlugin(itemsToClean, { verbose: !!verbose }), + // Copy assets to out dir. Add your own globs as needed. + new CopyWebpackPlugin([ + { from: { glob: "fonts/**" } }, + { from: { glob: "**/*.jpg" } }, + { from: { glob: "**/*.png" } }, + ], { ignore: [`${relative(appPath, appResourcesFullPath)}/**`] }), + new nsWebpack.GenerateNativeScriptEntryPointsPlugin("bundle"), + // For instructions on how to set up workers with webpack + // check out https://github.com/nativescript/worker-loader + new NativeScriptWorkerPlugin(), + new nsWebpack.PlatformFSPlugin({ + platform, + platforms, + }), + // Does IPC communication with the {N} CLI to notify events when running in watch mode. + new nsWebpack.WatchStateLoggerPlugin(), + // https://github.com/TypeStrong/ts-loader/blob/ea2fcf925ec158d0a536d1e766adfec6567f5fb4/README.md#faster-builds + // https://github.com/TypeStrong/ts-loader/blob/ea2fcf925ec158d0a536d1e766adfec6567f5fb4/README.md#hot-module-replacement + new ForkTsCheckerWebpackPlugin({ + tsconfig: tsConfigPath, + async: false, + useTypescriptIncrementalApi: true, + memoryLimit: 4096 + }) + ], + }; + + if (report) { + // Generate report files for bundles content + config.plugins.push(new BundleAnalyzerPlugin({ + analyzerMode: "static", + openAnalyzer: false, + generateStatsFile: true, + reportFilename: resolve(projectRoot, "report", `report.html`), + statsFilename: resolve(projectRoot, "report", `stats.json`), + })); + } + + if (snapshot) { + config.plugins.push(new nsWebpack.NativeScriptSnapshotPlugin({ + chunk: "vendor", + requireModules: [ + "tns-core-modules/bundle-entry-points", + ], + projectRoot, + webpackConfig: config, + snapshotInDocker, + skipSnapshotTools + })); + } + + if (hmr) { + config.plugins.push(new webpack.HotModuleReplacementPlugin()); + } + + + return config; +};